From b232818180f71890afbc8d3b12c8ffd90b0e02a4 Mon Sep 17 00:00:00 2001 From: Remy van der Wereld Date: Tue, 9 Jul 2024 16:53:07 +0200 Subject: [PATCH] 116361 Changed BAG API --- src/__external__/BAGAddressResponse.d.ts | 24 -------- src/__external__/BAGBenkAggResponse.d.ts | 25 +++++++++ src/__external__/BAGPdokResponse.d.ts | 22 ++++++++ .../addresses/AddressHeader/AddressHeader.tsx | 19 +++---- .../OtherAddressesTable.tsx | 2 +- .../AddressSuffixSwitcher/columns.tsx | 4 +- .../addresses/ObjectDetails/ObjectDetails.tsx | 17 ++---- .../ObjectDetails/hooks/useValues.ts | 20 ++++--- .../addresses/utils/getAddressAsString.ts | 9 --- .../utils/getAddressFromBagPdokResponse.ts | 6 ++ .../utils/getAddressFromBagResults.ts | 5 -- .../utils/getAddressFromBenkAggResponse.ts | 4 ++ src/app/components/addresses/utils/index.ts | 2 + .../cases/CreateForm/CreateForm.tsx | 13 ++--- .../search/SearchResults/SearchResults.tsx | 56 +++++++------------ .../search/SearchResults/columns.tsx | 7 +-- .../AddressHeadingByBagId.tsx | 28 +++------- src/app/state/rest/bagPdok.ts | 10 +--- src/app/state/rest/benkAgg.ts | 18 ++++++ .../useOtherAddresses/useOtherAddresses.ts | 15 +++-- .../usePanoramaByBagId/usePanoramaByBagId.ts | 29 ++++++++-- src/app/state/rest/dataPunt.ts | 52 +---------------- src/app/state/rest/index.ts | 3 +- 23 files changed, 179 insertions(+), 211 deletions(-) delete mode 100644 src/__external__/BAGAddressResponse.d.ts create mode 100644 src/__external__/BAGBenkAggResponse.d.ts create mode 100644 src/__external__/BAGPdokResponse.d.ts delete mode 100644 src/app/components/addresses/utils/getAddressAsString.ts create mode 100644 src/app/components/addresses/utils/getAddressFromBagPdokResponse.ts delete mode 100644 src/app/components/addresses/utils/getAddressFromBagResults.ts create mode 100644 src/app/components/addresses/utils/getAddressFromBenkAggResponse.ts create mode 100644 src/app/components/addresses/utils/index.ts create mode 100644 src/app/state/rest/benkAgg.ts diff --git a/src/__external__/BAGAddressResponse.d.ts b/src/__external__/BAGAddressResponse.d.ts deleted file mode 100644 index 31f6d1dd1..000000000 --- a/src/__external__/BAGAddressResponse.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -declare type BAGAddressResponse = { - results: Array<{ - _links: Array - adres: string - adresseerbaar_object_id: string - bag_huisletter: string - bag_toevoeging: string - centroid: number[] - dataset: string - huisnummer: number - landelijk_id: string - postcode: string - status: string - straatnaam: string - subtype: string - subtype_id: string - toevoeging: string - type: string - type_adres: string - vbo_status: string - woonplaats: string - }> - count: number -} diff --git a/src/__external__/BAGBenkAggResponse.d.ts b/src/__external__/BAGBenkAggResponse.d.ts new file mode 100644 index 000000000..c297d067b --- /dev/null +++ b/src/__external__/BAGBenkAggResponse.d.ts @@ -0,0 +1,25 @@ +declare type BAGBenkAggResponse = { + page: { + number: number + size: number + } + _embedded: { + adresseerbareobjecten: Array + } +} + +declare type BAGBenkAggAddress = { + openbareruimteNaam: string + huisnummer: number + huisletter: string + huisnummertoevoeging: string + postcode: string + verblijfsobjectOppervlakte: number + verblijfsobjectAantalBouwlagen: number + verblijfsobjectAantalKamers: number + typeAdres: string + gebiedenStadsdeelNaam: string + gebruiksdoelOmschrijvingen: Array + toegangOmschrijvingen: Array + wozSoortObjectOmschrijving: Array +} diff --git a/src/__external__/BAGPdokResponse.d.ts b/src/__external__/BAGPdokResponse.d.ts new file mode 100644 index 000000000..baec6e37e --- /dev/null +++ b/src/__external__/BAGPdokResponse.d.ts @@ -0,0 +1,22 @@ +declare type BAGPdokResponse = { + response: { + numFound: number + docs: Array + } +} + +declare type BAGPdokAddress = { + woonplaatsnaam: string + weergavenaam: string + adrestype: string + gemeentenaam: string + postcode: string + centroide_ll: string + nummeraanduiding_id: string + adresseerbaarobject_id: string + straatnaam: string + huisnummer: integer + huisletter: string + huisnummertoevoeging: string + score: float +} diff --git a/src/app/components/addresses/AddressHeader/AddressHeader.tsx b/src/app/components/addresses/AddressHeader/AddressHeader.tsx index e47ca567a..1199cf0e9 100644 --- a/src/app/components/addresses/AddressHeader/AddressHeader.tsx +++ b/src/app/components/addresses/AddressHeader/AddressHeader.tsx @@ -1,11 +1,12 @@ import styled from "styled-components" import { breakpoint, themeSpacing, Typography } from "@amsterdam/asc-ui" +import { SmallSkeleton } from "@amsterdam/wonen-ui" -import { useBAG } from "app/state/rest" +import { useBagPdok } from "app/state/rest" import ShowOtherAddressesButton, { Index } from "app/components/addresses/AddressSuffixSwitcher/ShowOtherAddressesButton" import useOtherAddressesByBagId from "app/state/rest/custom/useOtherAddresses/useOtherAddresses" import AddressLink from "./components/AddressLink" -import getAddressFromBagResults from "app/components/addresses/utils/getAddressFromBagResults" +import { getAddressFromBagPdokResponse } from "app/components/addresses/utils" type Props = { bagId: Components.Schemas.Address["bag_id"] @@ -28,14 +29,11 @@ const ButtonWrap = styled.div` ` const AddressHeader: React.FC = ({ bagId, headingSize = "h2", isHeader = false, enableSwitch = true }) => { - const [data] = useBAG(bagId) - const foundAddress = getAddressFromBagResults(data) - const title = foundAddress?.adres ? `${ foundAddress.adres }, ${ foundAddress.postcode }` : undefined - const showTitle = title !== undefined - + const [data, { isBusy }] = useBagPdok(bagId) + const foundAddress = getAddressFromBagPdokResponse(data) const [filteredAddresses] = useOtherAddressesByBagId(bagId) const showButton = enableSwitch && (filteredAddresses?.length ?? 0) > 1 - const isCurrentAddress = (address: { adres: string }) => address.adres.trim() === foundAddress?.adres.trim() + const isCurrentAddress = (address: BAGPdokAddress ) => address.weergavenaam === foundAddress?.weergavenaam const addressIndex = filteredAddresses?.findIndex(isCurrentAddress) ?? -1 let index: Index = undefined if (addressIndex === 0) { @@ -44,10 +42,11 @@ const AddressHeader: React.FC = ({ bagId, headingSize = "h2", isHeader = index = "last" } - // TODO: Show loading status visually + const title = foundAddress?.weergavenaam return (
- { showTitle && } + { isBusy && } + { title && } { showButton && ( diff --git a/src/app/components/addresses/AddressSuffixSwitcher/OtherAddressesTable.tsx b/src/app/components/addresses/AddressSuffixSwitcher/OtherAddressesTable.tsx index 6b8dc08e2..d12ae7ed6 100644 --- a/src/app/components/addresses/AddressSuffixSwitcher/OtherAddressesTable.tsx +++ b/src/app/components/addresses/AddressSuffixSwitcher/OtherAddressesTable.tsx @@ -14,7 +14,7 @@ const OtherAddressesTable: React.FC = ({ bagId, onAddressChosen }) => { const onClickRow = (data: any) => { onAddressChosen() - navigateTo("/adres/:bagId", { bagId: data.adresseerbaar_object_id }) + navigateTo("/adres/:bagId", { bagId: data.adresseerbaarobject_id }) } return ( diff --git a/src/app/components/addresses/AddressSuffixSwitcher/columns.tsx b/src/app/components/addresses/AddressSuffixSwitcher/columns.tsx index 9ede5d12c..7a6926063 100644 --- a/src/app/components/addresses/AddressSuffixSwitcher/columns.tsx +++ b/src/app/components/addresses/AddressSuffixSwitcher/columns.tsx @@ -4,10 +4,10 @@ import to from "app/routing/utils/to" const columns = [ { header: "Adres", - dataIndex: "adres", + dataIndex: "weergavenaam", minWidth: 300 }, { - dataIndex: "adresseerbaar_object_id", + dataIndex: "adresseerbaarobject_id", minWidth: 100, render: (bagId: any) => ( diff --git a/src/app/components/addresses/ObjectDetails/ObjectDetails.tsx b/src/app/components/addresses/ObjectDetails/ObjectDetails.tsx index c2c8267f3..530de55f3 100644 --- a/src/app/components/addresses/ObjectDetails/ObjectDetails.tsx +++ b/src/app/components/addresses/ObjectDetails/ObjectDetails.tsx @@ -1,6 +1,6 @@ -import { useBAG, useBAGLodging } from "app/state/rest" +import { useBenkAgg } from "app/state/rest" import { DefinitionList } from "@amsterdam/wonen-ui" -import getAddressFromBagResults from "app/components/addresses/utils/getAddressFromBagResults" +import { getAddressFromBenkAggResponse } from "app/components/addresses/utils" import useValues from "./hooks/useValues" type Props = { @@ -8,16 +8,9 @@ type Props = { } const ObjectDetails: React.FC = ({ bagId }) => { - - const [BAGAddressResponse, { isBusy: isBusyAddress }] = useBAG(bagId) - const BAGAddress = getAddressFromBagResults(BAGAddressResponse) - - - const { type, subtype_id } = BAGAddress ?? {} - const [BAGObject, { isBusy: isBusyObject }] = useBAGLodging(type, subtype_id) - - const isBusy = isBusyAddress || isBusyObject - const values = useValues(BAGAddress, BAGObject) + const [benkAggResponse, { isBusy }] = useBenkAgg(bagId) + const benkAggAddress = getAddressFromBenkAggResponse(benkAggResponse) + const values = useValues(benkAggAddress) return ( { - - if (BAGAddress === undefined || BAGObjectResponse === undefined) return +export default (benkAggAddress?: BAGBenkAggAddress) => { + if (!benkAggAddress) return + + const { + gebruiksdoelOmschrijvingen, verblijfsobjectOppervlakte, verblijfsobjectAantalBouwlagen, + toegangOmschrijvingen, verblijfsobjectAantalKamers + } = benkAggAddress const values = [ - ["Bestemming", BAGAddress?.type ?? "-"], - ["Oppervlakte", BAGObjectResponse.oppervlakte ? `${ BAGObjectResponse.oppervlakte }m²` : "-"], - ["Bouwlagen", BAGObjectResponse.bouwlagen], - ["Aantal kamers", BAGObjectResponse.aantal_kamers] + ["Gebruiksdoel", gebruiksdoelOmschrijvingen ? gebruiksdoelOmschrijvingen.join(", ") : undefined], + ["Oppervlakte", verblijfsobjectOppervlakte ? `${ verblijfsobjectOppervlakte }m²` : undefined], + ["Bouwlagen", verblijfsobjectAantalBouwlagen], + ["Toegang", toegangOmschrijvingen ? toegangOmschrijvingen.join(", ") : undefined], + ["Aantal kamers", verblijfsobjectAantalKamers ] ] + return Object.fromEntries(values) } \ No newline at end of file diff --git a/src/app/components/addresses/utils/getAddressAsString.ts b/src/app/components/addresses/utils/getAddressAsString.ts deleted file mode 100644 index 4a5974b19..000000000 --- a/src/app/components/addresses/utils/getAddressAsString.ts +++ /dev/null @@ -1,9 +0,0 @@ -const getAddressAsString = (address?: BAGAddressResponse["results"][number]) => { - if (!address) return - const { straatnaam, huisnummer, bag_huisletter, bag_toevoeging } = address - return ( - `${ straatnaam } ${ huisnummer }${ bag_huisletter ?? "" }${ bag_toevoeging ? `-${ bag_toevoeging }` : "" }` - ) -} - -export default getAddressAsString diff --git a/src/app/components/addresses/utils/getAddressFromBagPdokResponse.ts b/src/app/components/addresses/utils/getAddressFromBagPdokResponse.ts new file mode 100644 index 000000000..4457d6041 --- /dev/null +++ b/src/app/components/addresses/utils/getAddressFromBagPdokResponse.ts @@ -0,0 +1,6 @@ +export const getAddressFromBagPdokResponse = (data?: BAGPdokResponse): BAGPdokAddress | undefined => { + const docs = data?.response?.docs + return ( + docs?.find((result) => result.adrestype === "hoofdadres") + ) +} diff --git a/src/app/components/addresses/utils/getAddressFromBagResults.ts b/src/app/components/addresses/utils/getAddressFromBagResults.ts deleted file mode 100644 index 619cc0dff..000000000 --- a/src/app/components/addresses/utils/getAddressFromBagResults.ts +++ /dev/null @@ -1,5 +0,0 @@ -const getAddressFromBagResults = (data?: BAGAddressResponse): BAGAddressResponse["results"][number] | undefined => ( - data?.results?.find((result) => result.type_adres === "Hoofdadres") -) - -export default getAddressFromBagResults diff --git a/src/app/components/addresses/utils/getAddressFromBenkAggResponse.ts b/src/app/components/addresses/utils/getAddressFromBenkAggResponse.ts new file mode 100644 index 000000000..e61986379 --- /dev/null +++ b/src/app/components/addresses/utils/getAddressFromBenkAggResponse.ts @@ -0,0 +1,4 @@ +export const getAddressFromBenkAggResponse = (data?: BAGBenkAggResponse): BAGBenkAggAddress | undefined => { + const adresseerbareobjecten = data?._embedded?.adresseerbareobjecten ?? [] + return adresseerbareobjecten?.length > 0 ? adresseerbareobjecten[0] : undefined +} diff --git a/src/app/components/addresses/utils/index.ts b/src/app/components/addresses/utils/index.ts new file mode 100644 index 000000000..4487bc7d8 --- /dev/null +++ b/src/app/components/addresses/utils/index.ts @@ -0,0 +1,2 @@ +export * from "./getAddressFromBagPdokResponse" +export * from "./getAddressFromBenkAggResponse" diff --git a/src/app/components/cases/CreateForm/CreateForm.tsx b/src/app/components/cases/CreateForm/CreateForm.tsx index 77961748b..5a189a1ee 100644 --- a/src/app/components/cases/CreateForm/CreateForm.tsx +++ b/src/app/components/cases/CreateForm/CreateForm.tsx @@ -2,13 +2,12 @@ import { useState, useEffect } from "react" import scaffold from "./scaffold" import { useCaseThemes, useReasons, useCaseCreate, useProjects, - useListing, useSubjects, useCasesByBagId, useCorporations, useBAG + useListing, useSubjects, useCasesByBagId, useCorporations, useBagPdok } from "app/state/rest" import ConfirmScaffoldForm from "app/components/shared/ConfirmScaffoldForm/ConfirmScaffoldForm" import useNavigateWithFlashMessage from "app/state/flashMessages/useNavigateWithFlashMessage" import useScaffoldedFields from "app/components/shared/ConfirmScaffoldForm/hooks/useScaffoldedFields" -import getAddressAsString from "app/components/addresses/utils/getAddressAsString" -import getAddressFromBagResults from "app/components/addresses/utils/getAddressFromBagResults" +import { getAddressFromBagPdokResponse } from "app/components/addresses/utils" import useNavigation from "app/routing/useNavigation" @@ -65,8 +64,8 @@ const CreateForm: React.FC = ({ bagId, tonId }) => { const [listing] = useListing(tonId) const [cases] = useCasesByBagId(bagId) const [corporations] = useCorporations() - const [bagAddressResponse] = useBAG(bagId) - const bagAddress = getAddressFromBagResults(bagAddressResponse) + const [bagAddressResponse] = useBagPdok(bagId) + const bagAddress = getAddressFromBagPdokResponse(bagAddressResponse) const { navigateTo } = useNavigation() @@ -140,9 +139,7 @@ const CreateForm: React.FC = ({ bagId, tonId }) => { } : {} } - const addressString = getAddressAsString(bagAddress) - const title = `${ addressString } - Controleer de gegevens` - + const title = `${ bagAddress?.weergavenaam } - Controleer de gegevens` return ( - type Props = { searchString: string } -const REGEX_ZIP_CODE = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}/i - const MIN_SEARCH_LENGTH = 3 const isValidSearchString = (s: string) => s.length >= MIN_SEARCH_LENGTH const SearchResults: React.FC = ({ searchString }) => { - const isValid = isValidSearchString(searchString) - const isZipCode = isValid && REGEX_ZIP_CODE.test(searchString) - const searchStringZipcode = isZipCode ? searchString : undefined - const searchStringStreet = isValid && !REGEX_ZIP_CODE.test(searchString) ? searchString : undefined - const [dataZipCode, { isBusy: isBusyZipCode }] = useBAGWithZipCode(searchStringZipcode) - const [dataStreet, { isBusy: isBusyStreet }] = useBAGWithStreet(searchStringStreet) const { navigateTo } = useNavigation() - + const isValid = isValidSearchString(searchString) + const searchStringBagPdok = isValid ? searchString : undefined + const [bagData, { isBusy: loading }] = useBagPdok(searchStringBagPdok) + const onClickRow = (data: any) => { - navigateTo("/adres/:bagId", { bagId: data.adresseerbaar_object_id }) + navigateTo("/adres/:bagId", { bagId: data.adresseerbaarobject_id }) } - const loading = isBusyZipCode || isBusyStreet - const data = isZipCode ? dataZipCode : dataStreet // Only show addresses with a bagId - const dataSource = data?.results?.filter((obj) => obj.adresseerbaar_object_id) || [] + const dataSource = bagData?.response?.docs?.filter((obj) => obj.adresseerbaarobject_id) || [] return ( - <> - { data && data?.count > 100 && ( - - Er zijn meer dan 100 resultaten voor deze zoekopdracht. Specificeer je zoekterm. - - )} - { isValid ? ( - - ) : null - } - + isValid ? ( +
+ ) : null ) } diff --git a/src/app/components/search/SearchResults/columns.tsx b/src/app/components/search/SearchResults/columns.tsx index 7a4d42efa..99a0f32d1 100644 --- a/src/app/components/search/SearchResults/columns.tsx +++ b/src/app/components/search/SearchResults/columns.tsx @@ -4,15 +4,14 @@ import to from "app/routing/utils/to" const columns = [ { header: "Adres", - dataIndex: "adres", + dataIndex: "weergavenaam", minWidth: 100, render: (adres: any, obj: any) => ( - `${ adres } ${ obj.type_adres === "Nevenadres" ? "(Nevenadres)" : "" }` + `${ adres } ${ obj.adrestype === "nevenadres" ? "(Nevenadres)" : "" }` ) }, - { header: "Postcode", dataIndex: "postcode", minWidth: 100 }, { - dataIndex: "adresseerbaar_object_id", + dataIndex: "adresseerbaarobject_id", minWidth: 140, render: (bagId: any) => ( diff --git a/src/app/components/shared/AddressHeadingByBagId/AddressHeadingByBagId.tsx b/src/app/components/shared/AddressHeadingByBagId/AddressHeadingByBagId.tsx index dc2183f7b..6b45d5644 100644 --- a/src/app/components/shared/AddressHeadingByBagId/AddressHeadingByBagId.tsx +++ b/src/app/components/shared/AddressHeadingByBagId/AddressHeadingByBagId.tsx @@ -1,32 +1,18 @@ -import styled from "styled-components" -import { Heading, themeSpacing } from "@amsterdam/asc-ui" -import { useBAG } from "app/state/rest" -import AddressDisplay from "app/components/addresses/AddressDisplay/AddressDisplay" -import getAddressFromBagResults from "app/components/addresses/utils/getAddressFromBagResults" +import { Heading } from "@amsterdam/asc-ui" +import { useBagPdok } from "app/state/rest" +import { getAddressFromBagPdokResponse } from "app/components/addresses/utils" type Props = { bagId: Components.Schemas.Address["bag_id"] } -const Div = styled.div` - margin-bottom: ${ themeSpacing(8) } -` - const AddressHeadingByBagId: React.FC = ({ bagId }) => { - const [data] = useBAG(bagId) - const address = getAddressFromBagResults(data) + const [data] = useBagPdok(bagId) + const address = getAddressFromBagPdokResponse(data) return ( - <> - Adres - { address && ( -
-

-

{ address.postcode } { address.woonplaats }

-
- )} - + { address?.weergavenaam } ) } -export default AddressHeadingByBagId \ No newline at end of file +export default AddressHeadingByBagId diff --git a/src/app/state/rest/bagPdok.ts b/src/app/state/rest/bagPdok.ts index 45daae5ea..eb32996d7 100644 --- a/src/app/state/rest/bagPdok.ts +++ b/src/app/state/rest/bagPdok.ts @@ -4,17 +4,13 @@ import useApiRequest from "./hooks/useApiRequest" import qs from "qs" const PDOK_URL = "https://api.pdok.nl/bzk/locatieserver/search/v3_1/free" -// Filters for pdok search api const MUNICIPALITY_FILTER = "fq=(gemeentenaam:(amsterdam)) " -const ADDRESS_FILTER = "AND (type:adres)" -const ADDRESS_SORT = "straatnaam asc, huisnummer asc, huisletter asc, huisnummertoevoeging asc" +const ADDRESS_FILTER = "AND (type:adres) AND (adrestype: hoofdadres)" +// const ADDRESS_SORT = "straatnaam asc, huisnummer asc, huisletter asc, huisnummertoevoeging asc" const DEFAULT_SORT = "score desc, weergavenaam asc" -const AREA_CODE_FILTER = "AND (type:postcode)" - const FIELD_LIST = "weergavenaam,adrestype,gemeentenaam,nummeraanduiding_id,adresseerbaarobject_id,straatnaam,huisnummer,huisletter,huisnummertoevoeging,postcode,woonplaatsnaam,centroide_ll,score" const START = 0 -const RESULTS_PER_PAGE = 20 - +const RESULTS_PER_PAGE = 25 export const useBagPdok = (searchString?: string, options?: Options) => { const handleError = useErrorHandler() diff --git a/src/app/state/rest/benkAgg.ts b/src/app/state/rest/benkAgg.ts new file mode 100644 index 000000000..3041fe31d --- /dev/null +++ b/src/app/state/rest/benkAgg.ts @@ -0,0 +1,18 @@ +import qs from "qs" +import type { Options } from "." +import { useErrorHandler } from "./hooks/utils/errorHandler" +import useApiRequest from "./hooks/useApiRequest" + +const BENKAGG_URL = "https://api.data.amsterdam.nl/v1/benkagg/adresseerbareobjecten" + +export const useBenkAgg = (bagId?: Components.Schemas.Address["bag_id"], options?: Options) => { + const handleError = useErrorHandler() + const queryString = qs.stringify({ adresseertVerblijfsobjectIdentificatie: bagId }, { addQueryPrefix: true }) + return useApiRequest({ + url: `${ BENKAGG_URL }${ queryString }`, + lazy: bagId === undefined, + ...options, + groupName: "dataPunt", + handleError + }) +} diff --git a/src/app/state/rest/custom/useOtherAddresses/useOtherAddresses.ts b/src/app/state/rest/custom/useOtherAddresses/useOtherAddresses.ts index 99e02d21d..aff5d7baf 100644 --- a/src/app/state/rest/custom/useOtherAddresses/useOtherAddresses.ts +++ b/src/app/state/rest/custom/useOtherAddresses/useOtherAddresses.ts @@ -1,15 +1,18 @@ -import { useBAG, useBAGWithStreet } from "app/state/rest/index" -import getAddressFromBagResults from "app/components/addresses/utils/getAddressFromBagResults" +import { useBagPdok } from "app/state/rest/index" +import { getAddressFromBagPdokResponse } from "app/components/addresses/utils" /** * Returns other addresses with the same postcode + huisnummer * @param bagId */ const useOtherAddressesByBagId = (bagId: Components.Schemas.Address["bag_id"]) => { - const [data] = useBAG(bagId) - const foundAddress = getAddressFromBagResults(data) + const [data] = useBagPdok(bagId) + const foundAddress = getAddressFromBagPdokResponse(data) const searchQuery = `${ foundAddress?.postcode } ${ foundAddress?.huisnummer }` - const [otherAddresses, otherAddressesMethods] = useBAGWithStreet(searchQuery, { lazy: data === undefined }) - return [otherAddresses?.results?.filter(({ huisnummer }) => huisnummer === foundAddress?.huisnummer), otherAddressesMethods] as const + const [moreAddresses, otherAddressesMethods] = useBagPdok(searchQuery, { lazy: data === undefined }) + const otherAddresses = moreAddresses?.response?.docs?.filter(({ huisnummer, postcode }) => ( + huisnummer === foundAddress?.huisnummer && postcode === foundAddress?.postcode + )) + return [otherAddresses, otherAddressesMethods] as const } export default useOtherAddressesByBagId diff --git a/src/app/state/rest/custom/usePanoramaByBagId/usePanoramaByBagId.ts b/src/app/state/rest/custom/usePanoramaByBagId/usePanoramaByBagId.ts index 53e4e5c59..4cfbcbc52 100644 --- a/src/app/state/rest/custom/usePanoramaByBagId/usePanoramaByBagId.ts +++ b/src/app/state/rest/custom/usePanoramaByBagId/usePanoramaByBagId.ts @@ -1,13 +1,30 @@ -import { useBAG, usePanorama } from "app/state/rest/index" -import getAddressFromBagResults from "app/components/addresses/utils/getAddressFromBagResults" +import { useBagPdok, usePanorama } from "app/state/rest/index" +import { getAddressFromBagPdokResponse } from "app/components/addresses/utils" + +const extractLatLng = (point?: BAGPdokAddress["centroide_ll"]) => { + // Ensure the string starts with "POINT(" and ends with ")" + if (point && point.startsWith("POINT(") && point.endsWith(")")) { + // Remove "POINT(" from the start and ")" from the end + const coordinates = point.slice(6, -1) + // Split the coordinates by space + const [lng, lat] = coordinates.split(" ") + // Parse the coordinates to floats + return { + lat: parseFloat(lat), + lng: parseFloat(lng) + } + } + return null +} const usePanoramaByBagId = (bagId: string, width: number | undefined, aspect: number | undefined, radius: number, fov: number | undefined) => { - const [data] = useBAG(bagId) - const foundAddress = getAddressFromBagResults(data) + const [data] = useBagPdok(bagId) + const foundAddress = getAddressFromBagPdokResponse(data) + const latLng = extractLatLng(foundAddress?.centroide_ll) return usePanorama( - foundAddress?.centroid?.[1], - foundAddress?.centroid?.[0], + latLng?.lat, + latLng?.lng, width, aspect, radius, diff --git a/src/app/state/rest/dataPunt.ts b/src/app/state/rest/dataPunt.ts index 1b69b3267..d4bde5d8f 100644 --- a/src/app/state/rest/dataPunt.ts +++ b/src/app/state/rest/dataPunt.ts @@ -1,58 +1,8 @@ import qs from "qs" -import slashSandwich from "../../routing/utils/slashSandwich" - import type { Options } from "./" -import { useErrorHandler, useSuppressErrorHandler } from "./hooks/utils/errorHandler" +import { useSuppressErrorHandler } from "./hooks/utils/errorHandler" import useApiRequest from "./hooks/useApiRequest" -export const useBAG = (bagId?: Components.Schemas.Address["bag_id"], options?: Options) => { - const handleError = useErrorHandler() - const queryString = bagId !== undefined ? qs.stringify({ q: bagId }, { addQueryPrefix: true }) : "" - return useApiRequest({ - url: `https://api.data.amsterdam.nl/atlas/search/adres/${ queryString }`, - lazy: bagId === undefined, - ...options, - groupName: "dataPunt", - handleError - }) -} - -export const useBAGWithStreet = (searchString?: string, options?: Options) => { - const handleError = useErrorHandler() - const queryString = qs.stringify({ q: searchString }, { addQueryPrefix: true }) - return useApiRequest({ - url: `https://api.data.amsterdam.nl/atlas/search/adres/${ queryString }`, - ...options, - groupName: "dataPunt", - handleError - }) -} - -export const useBAGWithZipCode = (bagId?: Components.Schemas.Address["bag_id"], options?: Options) => { - const handleError = useErrorHandler() - const queryString = qs.stringify({ q: bagId }, { addQueryPrefix: true }) - return useApiRequest({ - url: `https://api.data.amsterdam.nl/atlas/search/postcode/${ queryString }`, - lazy: bagId === undefined, - ...options, - groupName: "dataPunt", - handleError - }) -} - -export const useBAGLodging = (type?: string, subTypeId?: string, options?: Options) => { - const handleError = useErrorHandler() - const url = slashSandwich(["https://api.data.amsterdam.nl/bag/v1.1", type, subTypeId], { trailingSlash: true }) - - return useApiRequest({ - url: url, - lazy: type === undefined || subTypeId === undefined, - ...options, - groupName: "dataPunt", - handleError - }) -} - export const usePanorama = (lat?: number, lon?: number, width?: number, aspect?: number, radius?: number, fov?: number, options?: Options) => { const handleError = useSuppressErrorHandler() const queryString = qs.stringify({ lat, lon, width, fov, aspect, radius }, { addQueryPrefix: true }) diff --git a/src/app/state/rest/index.ts b/src/app/state/rest/index.ts index fdc1804bf..c89c3e4c3 100644 --- a/src/app/state/rest/index.ts +++ b/src/app/state/rest/index.ts @@ -37,4 +37,5 @@ export * from "./roles" export * from "./permissions" export * from "./listing" export * from "./reasons" - +export * from "./bagPdok" +export * from "./benkAgg"