Browse Source

finalize multi addresses support

Olivier Massot 3 years ago
parent
commit
e33e2394dd

+ 18 - 4
pages/structures/_id.vue

@@ -77,7 +77,7 @@
           <v-btn
             v-for="article in structure.articles"
             :key="article.id"
-            :href="(article.link.match(/https?:\/\/.*/) ? '' : 'https://') + article.link "
+            :href="article.link ? ((article.link.match(/https?:\/\/.*/) ? '' : 'https://') + article.link) : ''"
             target="_blank"
             small
             color="primary"
@@ -121,12 +121,24 @@
           </div>
 
           <table>
-            <tr>
+            <tr
+              v-if="structure.mapAddress && structure.mapAddress.postalCode !== structure.postalAddress.postalCode && structure.mapAddress.streetAddress !== structure.postalAddress.streetAddress"
+            >
               <td>
                 <font-awesome-icon class="icon" :icon="['fas', 'map-marker-alt']" />
               </td>
               <td class="mx-2">
-                <span v-if="structure.postalAddress.streetAddress">{{ structure.postalAddress.streetAddress }}<br></span>
+                <span v-if="structure.mapAddress.streetAddress" style="white-space: pre-line;">{{ structure.mapAddress.streetAddress }}<br></span>
+                <span v-if="structure.mapAddress.postalCode">{{ structure.mapAddress.postalCode }} </span>
+                {{ structure.mapAddress.addressCity }}
+              </td>
+            </tr>
+            <tr v-if="structure.postalAddress">
+              <td>
+                <font-awesome-icon class="icon" :icon="['fas', 'envelope']" />
+              </td>
+              <td class="mx-2">
+                <span v-if="structure.postalAddress.streetAddress" style="white-space: pre-line;">{{ structure.postalAddress.streetAddress }}<br></span>
                 <span v-if="structure.postalAddress.postalCode">{{ structure.postalAddress.postalCode }} </span>
                 {{ structure.postalAddress.addressCity }}
               </td>
@@ -213,7 +225,9 @@
                 >
                   <l-popup>
                     <b>{{ structure.name }}</b><br>
-                    {{ structure.mapAddress.postalCode }} {{ structure.mapAddress.addressCity }}<br>
+                    <span v-if="structure.mapAddress">
+                      {{ structure.mapAddress.postalCode }} {{ structure.mapAddress.addressCity }}
+                    </span><br>
                     <a :href="structure.website" target="_blank">{{ structure.website }}</a>
                   </l-popup>
                 </l-marker>

+ 2 - 2
pages/structures/index.vue

@@ -221,12 +221,12 @@
 
                       <v-card-text class="infos">
                         <table>
-                          <tr>
+                          <tr v-if="structure.mapAddress">
                             <td>
                               <font-awesome-icon class="icon" :icon="['fas', 'map-marker-alt']" />
                             </td>
                             <td>
-                              <span v-if="structure.mapAddress.streetAddress">{{ structure.mapAddress.streetAddress }}<br></span>
+                              <span v-if="structure.mapAddress.streetAddress" style="white-space: pre-line;">{{ structure.mapAddress.streetAddress }}<br></span>
                               <span v-if="structure.mapAddress.postalCode" class="postalCode">{{ structure.mapAddress.postalCode }} </span>
                               {{ structure.mapAddress.addressCity }}
                             </td>

+ 4 - 5
services/data/StructuresProvider.ts

@@ -1,5 +1,4 @@
 import BaseProvider from '~/services/data/BaseProvider'
-import Address from '~/components/Ui/Search/Address.vue'
 
 class StructuresProvider extends BaseProvider {
   protected normalize (s: any) : Structure {
@@ -9,15 +8,14 @@ class StructuresProvider extends BaseProvider {
     s.n4Id = s.n4Id ? parseInt(s.n4Id) : null
     s.n5Id = s.n5Id ? parseInt(s.n5Id) : null
     s.practices = s.practices ? s.practices.split(',') : []
-    s.addresses = (s.addresses && s.addresses !== '{}') ? JSON.parse('[' + s.addresses + ']') : []
+    s.addresses = ((s.addresses && s.addresses !== '{}') ? JSON.parse('[' + s.addresses + ']') : []) as Array<Address>
 
-    // Define the map address according to priorities
+    // Define the on-map address according to the chosen priorities
     s.mapAddress = s.addresses.find((a: Address) => { return a.type === 'ADDRESS_PRACTICE' }) ||
                    s.addresses.find((a: Address) => { return a.type === 'ADDRESS_HEAD_OFFICE' }) ||
                    s.addresses.find((a: Address) => { return a.type === 'ADDRESS_CONTACT' }) ||
                    null
-
-    // Define the postal address according to priorities
+    // Define the postal address according to the chosen priorities
     s.postalAddress = s.addresses.find((a: Address) => { return a.type === 'ADDRESS_CONTACT' }) ||
                       s.addresses.find((a: Address) => { return a.type === 'ADDRESS_HEAD_OFFICE' }) ||
                       null
@@ -26,6 +24,7 @@ class StructuresProvider extends BaseProvider {
     s.longitude = s.longitude ? parseFloat(s.longitude) : null
     s.parents = s.parents ? s.parents.split(',').map((i: string) => Number(i)) : []
     s.articles = (s.articles && s.articles !== '{}') ? JSON.parse('[' + s.articles + ']').reverse() : []
+    s.articles.sort((a: Article, b: Article) => { return a.date > b.date ? -1 : 1 })
     return s
   }
 

+ 8 - 1
types/interfaces.d.ts

@@ -13,6 +13,13 @@ interface Address {
   country: string
 }
 
+interface Article {
+  id: number,
+  date: string,
+  link: string,
+  title: string
+}
+
 interface Structure {
   readonly id: number,
   name: string,
@@ -38,7 +45,7 @@ interface Structure {
   parents: Array<number>,
   description: string | null,
   imageId: string | null,
-  articles: Array<{id: number, title: string, date: string, link: string}>
+  articles: Array<Article>
 }
 
 interface Coordinates {