From 279901ac93576956a75746627514f79c88b04975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Mon, 18 Aug 2025 13:14:10 +0200 Subject: [PATCH] [WIP] refactorization to show details of an address --- package.json | 1 + .../Repository/AddressReferenceRepository.php | 4 +- .../ChillMainBundle/Resources/public/types.ts | 25 ++++- .../vuejs/AddressPicker/AddressButton.vue | 2 +- .../vuejs/AddressPicker/AddressPicker.vue | 36 +++++-- .../Component/AddressAggregatedList.vue | 25 +++++ .../Component/AddressAggregatedListItem.vue | 82 ++++++++++++++++ .../Component/AddressDetailsForm.vue | 27 ++++++ .../AddressPicker/Component/SearchBar.vue | 10 +- .../AddressPicker/driver/local-search.ts | 11 ++- .../public/vuejs/AddressPicker/helper.ts | 21 ++++ .../AddressDetails/AddressDetailsContent.vue | 7 +- .../Parts/AddressDetailsMap.vue | 27 +++--- .../_components/AddressDetails/helper.ts | 46 +++++++++ .../_components/Entity/AddressRenderBox.vue | 95 ++++++++----------- .../Normalizer/AddressNormalizer.php | 1 + .../translations/messages.fr.yml | 5 + 17 files changed, 341 insertions(+), 84 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/AddressPicker/Component/AddressAggregatedList.vue create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/AddressPicker/Component/AddressAggregatedListItem.vue create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/AddressPicker/Component/AddressDetailsForm.vue create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/AddressPicker/helper.ts create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/helper.ts diff --git a/package.json b/package.json index fc50ba29c..7c23829d2 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "webpack-cli": "^5.0.1" }, "dependencies": { + "@fragaria/address-formatter": "^6.6.1", "@fullcalendar/core": "^6.1.4", "@fullcalendar/daygrid": "^6.1.4", "@fullcalendar/interaction": "^6.1.4", diff --git a/src/Bundle/ChillMainBundle/Repository/AddressReferenceRepository.php b/src/Bundle/ChillMainBundle/Repository/AddressReferenceRepository.php index d55068e0f..c9cbeb3b7 100644 --- a/src/Bundle/ChillMainBundle/Repository/AddressReferenceRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/AddressReferenceRepository.php @@ -97,7 +97,9 @@ final readonly class AddressReferenceRepository implements AddressReferenceRepos $result = $qb->executeQuery(); - return $result->iterateAssociative(); + foreach ($result->iterateAssociative() as $row) { + yield [...$row, 'positions' => json_decode($row['positions'], true, 512, JSON_THROW_ON_ERROR)]; + } } /** diff --git a/src/Bundle/ChillMainBundle/Resources/public/types.ts b/src/Bundle/ChillMainBundle/Resources/public/types.ts index 2cd83bc64..97ec3c497 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/types.ts +++ b/src/Bundle/ChillMainBundle/Resources/public/types.ts @@ -74,6 +74,7 @@ export interface Postcode { name: string; code: string; center: Point; + country: Country; } export interface Point { @@ -89,6 +90,28 @@ export interface Country { export type AddressRefStatus = "match" | "to_review" | "reviewed"; +/** + * An interface to create an address + */ +export interface AddressCreation { + confidential: boolean; + isNoAddress: boolean; + street: string; + streetNumber: string; + postcode: Postcode; + point: Point; // [number, number]; // [longitude, latitude] + addressReference: AddressReference; + validFrom: DateTime|null; + floor: string; + corridor: string; + steps: string; + flat: string; + buildingName: string; + distribution: string; + extra: string; +} + + export interface Address { type: "address"; address_id: number; @@ -107,7 +130,7 @@ export interface Address { confidential: boolean; lines: string[]; addressReference: AddressReference | null; - validFrom: DateTime; + validFrom: DateTime | null; // TODO there is no null for validFrom validTo: DateTime | null; point: Point | null; refStatus: AddressRefStatus; diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/AddressPicker/AddressButton.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/AddressPicker/AddressButton.vue index 70480fdb2..84bc47a1c 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/AddressPicker/AddressButton.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/AddressPicker/AddressButton.vue @@ -19,7 +19,7 @@ const closeModal = () => {