From b740a88ae3f00c380a380aa40f1a01c75b4bce7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Tue, 14 Mar 2023 22:12:30 +0100 Subject: [PATCH] Feature: bootstrapping an app to show a modal for address details and showing it inside twig address's render box Feature: showing map and link to external map, and address details inside address details modal Feature: AddressDetailsMap show a warning if the address is incomplete --- package.json | 7 +- .../Resources/public/lib/api/address.ts | 14 +++ .../public/module/address-details/index.ts | 25 +++++ .../ChillMainBundle/Resources/public/types.ts | 9 ++ .../Resources/public/vuejs/Address/api.js | 10 +- .../AddressDetails/AddressDetailsButton.vue | 45 +++++++++ .../AddressDetails/AddressDetailsContent.vue | 22 +++++ .../AddressDetails/AddressModal.vue | 49 ++++++++++ .../Parts/AddressDetailsMap.vue | 91 +++++++++++++++++++ .../Resources/views/Entity/address.html.twig | 4 + .../Resources/views/layout.html.twig | 2 + .../Normalizer/AddressNormalizer.php | 4 + .../Templating/Entity/AddressRender.php | 6 +- .../Templating/Entity/AddressRenderTest.php | 1 + .../ChillMainBundle/chill.webpack.config.js | 1 + src/Bundle/import-png.d.ts | 4 + 16 files changed, 283 insertions(+), 11 deletions(-) create mode 100644 src/Bundle/ChillMainBundle/Resources/public/lib/api/address.ts create mode 100644 src/Bundle/ChillMainBundle/Resources/public/module/address-details/index.ts create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsButton.vue create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsContent.vue create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressModal.vue create mode 100644 src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue create mode 100644 src/Bundle/import-png.d.ts diff --git a/package.json b/package.json index 17b02c63a..bb4889983 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "chill", - "version": "2.0.0", - "devDependencies": { + "name": "chill", + "version": "2.0.0", + "devDependencies": { "@alexlafroscia/yaml-merge": "^4.0.0", "@apidevtools/swagger-cli": "^4.0.4", "@babel/core": "^7.20.5", @@ -41,6 +41,7 @@ "@fullcalendar/timegrid": "^5.11.0", "@fullcalendar/vue3": "^5.11.1", "@popperjs/core": "^2.9.2", + "@types/leaflet": "^1.9.3", "dropzone": "^5.7.6", "es6-promise": "^4.2.8", "leaflet": "^1.7.1", diff --git a/src/Bundle/ChillMainBundle/Resources/public/lib/api/address.ts b/src/Bundle/ChillMainBundle/Resources/public/lib/api/address.ts new file mode 100644 index 000000000..d039daf12 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/lib/api/address.ts @@ -0,0 +1,14 @@ +import {Address} from "../../types"; + +export const getAddressById = async (address_id: number): Promise
=> +{ + const url = `/api/1.0/main/address/${address_id}.json`; + + const response = await fetch(url); + + if (response.ok) { + return response.json(); + } + + throw Error('Error with request resource response'); +}; diff --git a/src/Bundle/ChillMainBundle/Resources/public/module/address-details/index.ts b/src/Bundle/ChillMainBundle/Resources/public/module/address-details/index.ts new file mode 100644 index 000000000..aa843bca8 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/module/address-details/index.ts @@ -0,0 +1,25 @@ +import AddressDetailsButton from "../../vuejs/_components/AddressDetails/AddressDetailsButton.vue"; +import {createApp} from "vue"; +import {createI18n} from "vue-i18n"; +import {_createI18n} from "../../vuejs/_js/i18n"; + +const i18n = _createI18n({}); + +document.querySelectorAll('span[data-address-details]').forEach((el) => { + const dataset = el.dataset as { + addressId: string + }; + + const app = createApp({ + components: {AddressDetailsButton}, + data() { + return { + addressId: Number.parseInt(dataset.addressId), + } + }, + template: '' + }); + + app.use(i18n); + app.mount(el); +}); diff --git a/src/Bundle/ChillMainBundle/Resources/public/types.ts b/src/Bundle/ChillMainBundle/Resources/public/types.ts index 9453c89b0..3deb1d229 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/types.ts +++ b/src/Bundle/ChillMainBundle/Resources/public/types.ts @@ -70,6 +70,8 @@ export interface Country { code: string; } +export type AddressRefStatus = 'match'|'to_review'|'reviewed'; + export interface Address { type: "address"; address_id: number; @@ -90,6 +92,13 @@ export interface Address { addressReference: AddressReference | null; validFrom: DateTime; validTo: DateTime | null; + point: Point | null; + refStatus: AddressRefStatus; + isNoAddress: boolean; +} + +export interface AddressWithPoint extends Address { + point: Point } export interface AddressReference { diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/api.js b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/api.js index b1489bfb6..294ea9480 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/api.js +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/Address/api.js @@ -1,3 +1,5 @@ +import {getAddressById} from 'ChillMainAssets/lib/api/address'; + /** * Endpoint chill_api_single_country__index * method GET, get Country Object @@ -188,13 +190,7 @@ const postPostalCode = (postalCode) => { //<-- * @returns {Promise} a promise containing a Address object */ const getAddress = (id) => { - //console.log('<< get address'); - const url = `/api/1.0/main/address/${id}.json`; - return fetch(url) - .then(response => { - if (response.ok) { return response.json(); } - throw Error('Error with request resource response'); - }); + return getAddressById(id); }; export { diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsButton.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsButton.vue new file mode 100644 index 000000000..8b1f9d869 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsButton.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsContent.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsContent.vue new file mode 100644 index 000000000..95378b543 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressDetailsContent.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressModal.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressModal.vue new file mode 100644 index 000000000..154273a27 --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/AddressModal.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue new file mode 100644 index 000000000..967b16d8c --- /dev/null +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/AddressDetails/Parts/AddressDetailsMap.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/Bundle/ChillMainBundle/Resources/views/Entity/address.html.twig b/src/Bundle/ChillMainBundle/Resources/views/Entity/address.html.twig index eef84b8a2..9ad2b0a12 100644 --- a/src/Bundle/ChillMainBundle/Resources/views/Entity/address.html.twig +++ b/src/Bundle/ChillMainBundle/Resources/views/Entity/address.html.twig @@ -69,6 +69,7 @@ {% endif %} {{ _self.inline(address, options, streetLine, lines) }} + {%- endif -%} @@ -78,6 +79,7 @@ {% endif %} {{ _self.inline(address, options, streetLine, lines) }} + {%- endif -%} @@ -102,6 +104,7 @@
{{ 'address.consider homeless'|trans }}
+

{% else %}
@@ -109,6 +112,7 @@ {% endif %} {{ _self.raw(lines) }} +

{% endif %} {{ _self.validity(address, options) }} diff --git a/src/Bundle/ChillMainBundle/Resources/views/layout.html.twig b/src/Bundle/ChillMainBundle/Resources/views/layout.html.twig index 92454be35..8a64c9543 100644 --- a/src/Bundle/ChillMainBundle/Resources/views/layout.html.twig +++ b/src/Bundle/ChillMainBundle/Resources/views/layout.html.twig @@ -20,6 +20,7 @@ {{ encore_entry_link_tags('chill') }} {{ encore_entry_link_tags('mod_blur') }} {{ encore_entry_link_tags('vue_onthefly') }} + {{ encore_entry_link_tags('mod_address_details') }} {% block css %}{% endblock %} @@ -112,6 +113,7 @@ {{ encore_entry_script_tags('mod_blur') }} {{ encore_entry_script_tags('chill') }} {{ encore_entry_script_tags('vue_onthefly') }} + {{ encore_entry_script_tags('mod_address_details') }}