Browse Source

fix / lint / prettier

Vincent 3 months ago
parent
commit
5905101023

+ 17 - 11
components/Form/Freemium/Event.vue

@@ -45,7 +45,7 @@
           list-label="name"
           :rules="getAsserts('gender')"
           :pagination="false"
-          :apiFilters="queryConditions"
+          :api-filters="queryConditions"
         />
 
         <UiInputTreeSelectEventCategories
@@ -110,7 +110,10 @@
 
           <v-col
             v-if="!newPlace"
-            cols="12" sm="6" class="d-flex justify-center mb-2">
+            cols="12"
+            sm="6"
+            class="d-flex justify-center mb-2"
+          >
             <v-btn
               prepend-icon="fa-solid fa-plus"
               @click="onAddPlaceClick(proxyEntity)"
@@ -120,7 +123,7 @@
           </v-col>
         </v-row>
 
-        <div  v-if="newPlace || editPlace">
+        <div v-if="newPlace || editPlace">
           <UiInputText
             v-model="proxyEntity.placeName"
             :readonly="!newPlace && !editPlace"
@@ -181,7 +184,6 @@
             ></UiMapLeaflet>
           </client-only>
         </div>
-
       </v-col>
     </v-row>
   </LayoutCommonSection>
@@ -191,7 +193,11 @@
       <v-col cols="12">
         <h4 class="mb-8">{{ $t('communication_params') }}</h4>
 
-        <UiInputText v-model="proxyEntity.url" field="url" :rules="getAsserts('url')" />
+        <UiInputText
+          v-model="proxyEntity.url"
+          field="url"
+          :rules="getAsserts('url')"
+        />
 
         <UiInputAutocompleteEnum
           v-model="proxyEntity.pricing"
@@ -256,8 +262,8 @@ import DateUtils from '~/services/utils/dateUtils'
 import Country from '~/models/Core/Country'
 import PlaceSearchItem from '~/models/Custom/Search/PlaceSearchItem'
 import { useEntityManager } from '~/composables/data/useEntityManager'
-import EventGender from "~/models/Booking/EventGender";
-import EqualFilter from "~/services/data/Filters/EqualFilter";
+import EventGender from '~/models/Booking/EventGender'
+import EqualFilter from '~/services/data/Filters/EqualFilter'
 
 const props = defineProps<{
   entity: Event
@@ -284,9 +290,9 @@ const queryConditions = [new EqualFilter('type', 'CULTURAL_EVENT')]
  */
 const onUpdateDateTimeStart = (entity, dateTime) => {
   if (DateUtils.isBefore(props.entity.datetimeEnd, dateTime, false)) {
-    const dateTimeEnd = new Date(dateTime);
+    const dateTimeEnd = new Date(dateTime)
     // Ajouter 1h
-    dateTimeEnd.setHours(dateTimeEnd.getHours() + 1);
+    dateTimeEnd.setHours(dateTimeEnd.getHours() + 1)
     entity.datetimeEnd = DateUtils.toIsoUtcOffset(dateTimeEnd)
   }
   entity.datetimeStart = dateTime
@@ -301,9 +307,9 @@ const onUpdateDateTimeStart = (entity, dateTime) => {
  */
 const onUpdateDateTimeEnd = (entity, dateTime) => {
   if (DateUtils.isBefore(dateTime, props.entity.datetimeStart, false)) {
-    const dateTimeStart = new Date(dateTime);
+    const dateTimeStart = new Date(dateTime)
     // Retirer 1h
-    dateTimeStart.setHours(dateTimeStart.getHours() - 1);
+    dateTimeStart.setHours(dateTimeStart.getHours() - 1)
     entity.datetimeStart = DateUtils.toIsoUtcOffset(dateTimeStart)
   }
   entity.datetimeEnd = dateTime

+ 1 - 1
components/Layout/Alert/Content.vue

@@ -85,7 +85,7 @@ onUnmounted(() => {
 </script>
 
 <style scoped>
-.message-alert{
+.message-alert {
   list-style: disc;
 }
 </style>

+ 1 - 3
components/Layout/Header.vue

@@ -14,9 +14,7 @@ Contient entre autres le nom de l'organisation, l'accès à l'aide et aux préf
     </template>
 
     <v-toolbar-title v-if="smAndUp">
-      <LayoutHeaderTitle
-        :hasLateralMenu
-      >
+      <LayoutHeaderTitle :has-lateral-menu>
         {{ title }}
       </LayoutHeaderTitle>
     </v-toolbar-title>

+ 1 - 4
components/Layout/Header/Title.vue

@@ -1,8 +1,5 @@
 <template>
-  <div
-    class="d-flex flex-row"
-    :class="!hasLateralMenu ? 'pl-4' : ''"
-  >
+  <div class="d-flex flex-row" :class="!hasLateralMenu ? 'pl-4' : ''">
     <a
       :href="homeUrl"
       :title="$t('go_back_home')"

+ 1 - 1
components/Layout/SubHeader/Breadcrumbs.vue

@@ -19,7 +19,7 @@ const items: ComputedRef<Array<AnyJson>> = computed(() => {
   const baseUrl =
     runtimeConfig.baseUrlAdminLegacy ?? runtimeConfig.public.baseUrlAdminLegacy
 
-  if(!organizationProfile.isFreemiumProduct){
+  if (!organizationProfile.isFreemiumProduct) {
     crumbs.push({
       title: i18n.t('welcome'),
       href: UrlUtils.join(baseUrl, '#', 'dashboard'),

+ 5 - 2
components/Ui/EventList.vue

@@ -19,7 +19,10 @@
         </template>
 
         <template #append>
-          <v-avatar class="edit-btn action-btn" @click="$emit('edit', event.id)">
+          <v-avatar
+            class="edit-btn action-btn"
+            @click="$emit('edit', event.id)"
+          >
             <v-icon>fas fa-pencil</v-icon>
           </v-avatar>
 
@@ -111,7 +114,7 @@ const date = useDate()
 .edit-btn {
   cursor: pointer;
 }
-.action-btn:hover{
+.action-btn:hover {
   background-color: rgb(var(--v-theme-on-neutral-soft--sub));
   border-radius: 20px;
 }

+ 5 - 1
components/Ui/Form.vue

@@ -60,7 +60,11 @@ de quitter si des données ont été modifiées.
     </v-form>
 
     <!-- Confirmation dialog -->
-    <LazyLayoutDialog :show="isConfirmationDialogShowing" :max-width="1000" theme="danger">
+    <LazyLayoutDialog
+      :show="isConfirmationDialogShowing"
+      :max-width="1000"
+      theme="danger"
+    >
       <template #dialogText>
         <v-card-title class="text-h5 theme-neutral">
           {{ $t('caution') }}

+ 10 - 11
components/Ui/Input/Autocomplete/ApiResources.vue

@@ -55,8 +55,8 @@ import InArrayFilter from '~/services/data/Filters/InArrayFilter'
 import SearchFilter from '~/services/data/Filters/SearchFilter'
 import type ApiModel from '~/models/ApiModel'
 import PlaceSearchItem from '~/models/Custom/Search/PlaceSearchItem'
-import type {ApiFilter} from "~/types/data";
-import EqualFilter from "~/services/data/Filters/EqualFilter";
+import type { ApiFilter } from '~/types/data'
+import EqualFilter from '~/services/data/Filters/EqualFilter'
 
 const props = defineProps({
   /**
@@ -89,11 +89,10 @@ const props = defineProps({
     type: Number,
     required: false,
     default: 20,
-  }
-  , /**
+  } /**
    * Autorise la pagination
    * @see https://vuetifyjs.com/en/api/v-autocomplete/#props-multiple
-   */
+   */,
   pagination: {
     type: Boolean,
     default: true,
@@ -221,10 +220,10 @@ const queryActive = computed(() => {
     new OrderBy(props.listLabel, ORDER_BY_DIRECTION.ASC),
     new InArrayFilter(props.listValue, activeIds),
   )
-  if(props.pagination){
-    query.add( new PageFilter(ref(1), ref(props.resultNumber)))
+  if (props.pagination) {
+    query.add(new PageFilter(ref(1), ref(props.resultNumber)))
   }
-  for(const index in props.apiFilters){
+  for (const index in props.apiFilters) {
     query.add(props.apiFilters[index])
   }
   return query
@@ -255,10 +254,10 @@ const querySearch = new Query(
   new OrderBy(props.listLabel, ORDER_BY_DIRECTION.ASC),
   new SearchFilter(props.listLabel, searchFilter, SEARCH_STRATEGY.IPARTIAL),
 )
-if(props.pagination){
-  querySearch.add(   new PageFilter(ref(1), ref(props.resultNumber)))
+if (props.pagination) {
+  querySearch.add(new PageFilter(ref(1), ref(props.resultNumber)))
 }
-for(const index in props.apiFilters){
+for (const index in props.apiFilters) {
   querySearch.add(props.apiFilters[index])
 }
 

+ 2 - 2
components/Ui/Input/Image.vue

@@ -5,7 +5,7 @@ Assistant de création d'image
 -->
 <template>
   <div class="input-image">
-    <label v-if="label || field" class="label">{{$t(label ?? field)}}</label>
+    <label v-if="label || field" class="label">{{ $t(label ?? field) }}</label>
     <UiImage
       ref="uiImage"
       :image-id="modelValue"
@@ -468,7 +468,7 @@ onBeforeUnmount(() => {
 </script>
 
 <style scoped lang="scss">
-.label{
+.label {
   font-size: 16px;
   color: rgb(var(--v-theme-on-primary-alt));
 }

+ 29 - 36
components/Ui/Input/TreeSelect.vue

@@ -279,7 +279,7 @@ const expandParentsOfSelectedItems = () => {
     if (!item) continue
 
     let parentId = null
-    if(props.nbLevel === 3){
+    if (props.nbLevel === 3) {
       // Trouver la sous-catégorie
       const subcategory = normalizedItems.value.find(
         (i) => i.id === item.parentId,
@@ -288,15 +288,13 @@ const expandParentsOfSelectedItems = () => {
         expandedSubcategories.value.add(subcategory.id)
         parentId = subcategory.parentId
       }
-    }else{
+    } else {
       parentId = item.parentId
     }
 
     if (parentId) {
       // Trouver la catégorie
-      const category = normalizedItems.value.find(
-        (i) => i.id === parentId,
-      )
+      const category = normalizedItems.value.find((i) => i.id === parentId)
       if (category) {
         expandedCategories.value.add(category.id)
       }
@@ -398,12 +396,14 @@ const onSearchInput = () => {
     // Trouver tous les éléments qui correspondent à la recherche
     const matchingItems = normalizedItems.value.filter(
       (item) =>
-        item.type === 'item' && item.level === (props.nbLevel - 1) && itemMatchesSearch(item),
+        item.type === 'item' &&
+        item.level === props.nbLevel - 1 &&
+        itemMatchesSearch(item),
     )
     // Pour chaque élément correspondant, ajouter ses parents aux ensembles d'expansion
     for (const item of matchingItems) {
       let category
-      if(props.nbLevel === 3){
+      if (props.nbLevel === 3) {
         // Trouver et ajouter la sous-catégorie parente
         const subcategory = normalizedItems.value.find(
           (i) => i.id === item.parentId,
@@ -416,11 +416,9 @@ const onSearchInput = () => {
             (i) => i.id === subcategory.parentId,
           )
         }
-      }else{
+      } else {
         // Trouver et ajouter la catégorie parente
-        category = normalizedItems.value.find(
-          (i) => i.id === item.parentId,
-        )
+        category = normalizedItems.value.find((i) => i.id === item.parentId)
       }
 
       if (category) {
@@ -489,7 +487,7 @@ const itemMatchesSearch = (item: SelectItem): boolean => {
   if (!itemWithNormalizedLabel) return false
 
   // Si c'est un élément de niveau nbLevel - 1, vérifier son label et les labels de ses parents
-  if (item.type === 'item' && item.level === (props.nbLevel - 1)) {
+  if (item.type === 'item' && item.level === props.nbLevel - 1) {
     // Vérifier le label de l'élément
     if (
       anyWordStartsWith(
@@ -500,11 +498,9 @@ const itemMatchesSearch = (item: SelectItem): boolean => {
       return true
 
     let parentId = item.parentId
-    if(props.nbLevel === 3){
+    if (props.nbLevel === 3) {
       // Trouver et vérifier le label de la sous-catégorie parente
-      const subcategory = normalizedItems.value.find(
-        (i) => i.id === parentId,
-      )
+      const subcategory = normalizedItems.value.find((i) => i.id === parentId)
       if (
         subcategory &&
         anyWordStartsWith(subcategory.normalizedLabel!, normalizedSearch)
@@ -513,20 +509,17 @@ const itemMatchesSearch = (item: SelectItem): boolean => {
 
       // Trouver et vérifier le label de la catégorie parente
       if (subcategory && subcategory.parentId) {
-        parentId =  subcategory.parentId
+        parentId = subcategory.parentId
       }
     }
 
     // Trouver et vérifier le label de la catégorie parente
-   const category = normalizedItems.value.find(
-     (i) => i.id === parentId,
-   )
-   if (
-     category &&
-     anyWordStartsWith(category.normalizedLabel!, normalizedSearch)
-   )
-     return true
-
+    const category = normalizedItems.value.find((i) => i.id === parentId)
+    if (
+      category &&
+      anyWordStartsWith(category.normalizedLabel!, normalizedSearch)
+    )
+      return true
 
     return false
   }
@@ -546,7 +539,9 @@ const itemMatchesSearch = (item: SelectItem): boolean => {
 const findMatchingLevel2Items = (): SelectItem[] => {
   return normalizedItems.value.filter(
     (item) =>
-      item.type === 'item' && item.level === (props.nbLevel - 1) && itemMatchesSearch(item),
+      item.type === 'item' &&
+      item.level === props.nbLevel - 1 &&
+      itemMatchesSearch(item),
   )
 }
 
@@ -564,11 +559,9 @@ const buildSearchResultsList = (matchingItems: SelectItem[]): SelectItem[] => {
 
   for (const item of matchingItems) {
     let parentId = item.parentId
-    if(props.nbLevel === 3){
+    if (props.nbLevel === 3) {
       // Trouver la sous-catégorie parente
-      const subcategory = normalizedItems.value.find(
-        (i) => i.id === parentId,
-      )
+      const subcategory = normalizedItems.value.find((i) => i.id === parentId)
       if (!subcategory) continue
 
       // Ajouter la sous-catégorie si elle n'est pas déjà présente
@@ -581,9 +574,7 @@ const buildSearchResultsList = (matchingItems: SelectItem[]): SelectItem[] => {
     }
 
     // Trouver la catégorie parente
-    const category = normalizedItems.value.find(
-      (i) => i.id === parentId,
-    )
+    const category = normalizedItems.value.find((i) => i.id === parentId)
     if (!category) continue
 
     // Ajouter la catégorie si elle n'est pas déjà présente
@@ -618,8 +609,10 @@ const processItemsRecursively = (
       result.push(item)
       if (expandedCategories.value.has(item.id)) {
         const subcategories = normalizedItems.value.filter(
-          (i) => i.parentId === item.id
-            && ((props.nbLevel == 2 && i.type === 'item')  || (props.nbLevel == 3 && i.type === 'subcategory')),
+          (i) =>
+            i.parentId === item.id &&
+            ((props.nbLevel == 2 && i.type === 'item') ||
+              (props.nbLevel == 3 && i.type === 'subcategory')),
         )
         processItemsRecursively(subcategories, result, true)
       }

+ 3 - 11
components/Ui/Input/TreeSelect/TypeOfPractices.vue

@@ -15,7 +15,7 @@
 import { useEntityFetch } from '~/composables/data/useEntityFetch'
 import EventCategory from '~/models/Core/EventCategory'
 import { FETCHING_STATUS } from '~/types/enum/data'
-import TypeOfPractice from "~/models/Organization/TypeOfPractice";
+import TypeOfPractice from '~/models/Organization/TypeOfPractice'
 
 const props = defineProps({
   modelValue: {
@@ -52,11 +52,7 @@ const hierarchicalItems = computed(() => {
 
   // First pass: collect all unique category
   typeOfPractices.value.items.forEach((typeOfPractice) => {
-    if (
-      !typeOfPractice.category ||
-      !typeOfPractice.name
-    )
-      return
+    if (!typeOfPractice.category || !typeOfPractice.name) return
 
     // Create unique keys for categories
     const categoryKey = typeOfPractice.category
@@ -85,11 +81,7 @@ const hierarchicalItems = computed(() => {
   // Collect all type first, then sort and add to result
   const types = []
   typeOfPractices.value.items.forEach((typeOfPractice) => {
-    if (
-      !typeOfPractice.category ||
-      !typeOfPractice.name
-    )
-      return
+    if (!typeOfPractice.category || !typeOfPractice.name) return
 
     types.push({
       id: `type-${typeOfPractice.id}`,

+ 3 - 5
composables/data/useAp2iRequestService.ts

@@ -80,13 +80,11 @@ export const useAp2iRequestService = () => {
       const errorMsg = []
       if (error) {
         errorMsg.push(error.message)
-      }
-      else if(response._data && response._data.violations){
+      } else if (response._data && response._data.violations) {
         for (const violation of response._data.violations) {
           errorMsg.push(violation.message as string)
         }
-      }
-      else if (response._data && response._data.detail) {
+      } else if (response._data && response._data.detail) {
         errorMsg.push(response._data.detail)
       } else if (response.statusText) {
         errorMsg.push(response.statusText)
@@ -97,7 +95,7 @@ export const useAp2iRequestService = () => {
       console.error('! Request error: ' + errorMsg)
       usePageStore().addAlert(TYPE_ALERT.ALERT, errorMsg)
 
-      throw ({ response, error })
+      throw { response, error }
     }
   }
 

+ 13 - 13
i18n/lang/fr/breadcrumbs.json

@@ -1,29 +1,29 @@
 {
-  "freemium_event_create_page_breadcrumbs":  "Création d'un événement",
+  "freemium_event_create_page_breadcrumbs": "Création d'un événement",
   "freemium_dashboard_page_breadcrumbs": "Accueil",
   "freemium_event_edit_page_breadcrumbs": "Édition d'un événement",
   "freemium_organization_page_breadcrumbs": "Fiche de ma structure",
-  "new_education_timing_breadcrumbs":  "Création",
-  "record_a_new_subdomain_breadcrumbs":  "Nouveau sous-domaine",
+  "new_education_timing_breadcrumbs": "Création",
+  "record_a_new_subdomain_breadcrumbs": "Nouveau sous-domaine",
   "cycle_breadcrumbs": "Édition d'un cycle",
-  "educationTiming_breadcrumbs":  "Détails",
+  "educationTiming_breadcrumbs": "Détails",
   "create_a_new_residence_area_breadcrumbs": "Création",
   "edit_resident_area_breadcrumbs": "Détails",
-  "parameters_residence_areas_page_breadcrumbs":  "Zone de résidence",
-  "activate_a_subdomain_breadcrumbs":  "Activer un sous-domaine",
-  "parameters_attendances_page_breadcrumbs":  "Absences",
+  "parameters_residence_areas_page_breadcrumbs": "Zone de résidence",
+  "activate_a_subdomain_breadcrumbs": "Activer un sous-domaine",
+  "parameters_attendances_page_breadcrumbs": "Absences",
   "new_attendance_booking_reason_breadcrumbs": "Création d'un motif",
-  "attendanceBookingReason_breadcrumbs":  "Édition d'un motif",
+  "attendanceBookingReason_breadcrumbs": "Édition d'un motif",
   "parameters_bulletin_page_breadcrumbs": "Bulletins",
-  "parameters_education_notation_page_breadcrumbs":  "Suivi pédagogique",
+  "parameters_education_notation_page_breadcrumbs": "Suivi pédagogique",
   "parameters_education_timings_page_breadcrumbs": "Durée des cours",
-  "parameters_general_page_breadcrumbs":  "Paramètres généraux",
+  "parameters_general_page_breadcrumbs": "Paramètres généraux",
   "parameters_intranet_page_breadcrumbs": "Accès intranet",
   "parameters_sms_page_breadcrumbs": "Option SMS",
-  "parameters_super_admin_page_breadcrumbs":  "Compte super admin",
+  "parameters_super_admin_page_breadcrumbs": "Compte super admin",
   "parameters_teaching_page_breadcrumbs": "Enseignements",
-  "parameters_website_page_breadcrumbs":  "Site internet",
-  "cmf_licence_page_breadcrumbs":  "Licence CMF",
+  "parameters_website_page_breadcrumbs": "Site internet",
+  "cmf_licence_page_breadcrumbs": "Licence CMF",
   "my_settings_page_breadcrumbs": "Mes préférences",
   "subscription_page_breadcrumbs": "Mon abonnement",
   "parameters_breadcrumbs": "Préférences"

+ 1 - 2
models/Booking/EventGender.ts

@@ -1,6 +1,5 @@
-import { Uid } from 'pinia-orm/dist/decorators'
+import { Uid, Str } from 'pinia-orm/dist/decorators'
 import ApiModel from '~/models/ApiModel'
-import {Str} from "pinia-orm/decorators";
 
 /**
  * AP2i Model : EventGender

+ 1 - 1
models/Freemium/Event.ts

@@ -5,7 +5,7 @@ import File from '~/models/Core/File'
 import Place from '~/models/Place/Place'
 import Country from '~/models/Core/Country'
 import Category from '~/models/Core/Category'
-import EventGender from "~/models/Booking/EventGender";
+import EventGender from '~/models/Booking/EventGender'
 
 /**
  * AP2i Model : Freemium / Event

+ 1 - 1
models/Freemium/Organization.ts

@@ -3,7 +3,7 @@ import ApiModel from '~/models/ApiModel'
 import { Assert, IdLess, IriEncoded } from '~/models/decorators'
 import Country from '~/models/Core/Country'
 import File from '~/models/Core/File'
-import TypeOfPractice from "~/models/Organization/TypeOfPractice";
+import TypeOfPractice from '~/models/Organization/TypeOfPractice'
 
 /**
  * AP2i Model : Freemium / Organization

+ 5 - 1
nuxt.config.ts

@@ -218,7 +218,11 @@ export default defineNuxtConfig({
       {
         code: 'fr',
         iso: 'fr-FR',
-        files: ['fr/general.json', 'fr/event_categories.json', 'fr/breadcrumbs.json'],
+        files: [
+          'fr/general.json',
+          'fr/event_categories.json',
+          'fr/breadcrumbs.json',
+        ],
         name: 'Français',
       },
     ],

+ 20 - 10
pages/freemium/index.vue

@@ -2,26 +2,35 @@
   <div>
     <v-container fluid class="inner-container">
       <v-row>
-        <v-col cols="12" class="text-h6 text-uppercase font-weight-bold">{{$t('welcome_freemium_title')}}</v-col>
+        <v-col cols="12" class="text-h6 text-uppercase font-weight-bold">{{
+          $t('welcome_freemium_title')
+        }}</v-col>
         <!-- Bloc événements -->
         <v-col cols="12" md="7">
           <v-card>
             <v-tabs v-model="tab" class="tabs-title">
-              <v-tab value="future" class="text-none">{{ $t('futur_event') }}</v-tab>
-              <v-tab value="past" class="text-none">{{ $t('past_event') }}</v-tab>
+              <v-tab value="future" class="text-none">{{
+                $t('futur_event')
+              }}</v-tab>
+              <v-tab value="past" class="text-none">{{
+                $t('past_event')
+              }}</v-tab>
             </v-tabs>
 
-
-            <v-tabs-window v-model="tab" >
+            <v-tabs-window v-model="tab">
               <v-tabs-window-item value="future">
-                <v-btn color="primary" to="freemium/events/new" class="ml-5 mt-5">{{
-                    $t('add_event')
-                  }}</v-btn>
+                <v-btn
+                  color="primary"
+                  to="freemium/events/new"
+                  class="ml-5 mt-5"
+                  >{{ $t('add_event') }}</v-btn
+                >
 
                 <div v-if="statusUpcomingEvents == FETCHING_STATUS.PENDING">
                   <v-col cols="12" class="loader">
                     <v-skeleton-loader
                       v-for="i in 5"
+                      :key="i"
                       class="mx-auto"
                       type="avatar, subtitle"
                     ></v-skeleton-loader>
@@ -47,6 +56,7 @@
                   <v-col cols="12" class="loader">
                     <v-skeleton-loader
                       v-for="i in 5"
+                      :key="i"
                       class="mx-auto"
                       type="avatar, subtitle"
                     ></v-skeleton-loader>
@@ -297,9 +307,9 @@ onUnmounted(() => {
   font-size: 16px;
   display: block;
 }
-.loader{
+.loader {
   height: 500px;
-  .v-skeleton-loader{
+  .v-skeleton-loader {
     margin-bottom: 20px;
   }
 }

+ 20 - 4
pages/freemium/organization.vue

@@ -122,13 +122,29 @@
             <v-col cols="12">
               <h4 class="mb-8">{{ $t('communication_params') }}</h4>
 
-              <UiInputText v-model="organization.facebook" field="facebook" :rules="getAsserts('facebook')" />
+              <UiInputText
+                v-model="organization.facebook"
+                field="facebook"
+                :rules="getAsserts('facebook')"
+              />
 
-              <UiInputText v-model="organization.twitter" field="twitter" :rules="getAsserts('twitter')" />
+              <UiInputText
+                v-model="organization.twitter"
+                field="twitter"
+                :rules="getAsserts('twitter')"
+              />
 
-              <UiInputText v-model="organization.youtube" field="youtube" :rules="getAsserts('youtube')" />
+              <UiInputText
+                v-model="organization.youtube"
+                field="youtube"
+                :rules="getAsserts('youtube')"
+              />
 
-              <UiInputText v-model="organization.instagram" field="instagram" :rules="getAsserts('instagram')" />
+              <UiInputText
+                v-model="organization.instagram"
+                field="instagram"
+                :rules="getAsserts('instagram')"
+              />
 
               <UiInputCheckbox
                 v-model="organization.portailVisibility"

+ 1 - 1
pages/parameters/sms.vue

@@ -48,7 +48,7 @@
 <script setup lang="ts">
 import Parameters from '~/models/Organization/Parameters'
 import { useOrganizationProfileStore } from '~/stores/organizationProfile'
-import {useEntityFetch} from "~/composables/data/useEntityFetch";
+import { useEntityFetch } from '~/composables/data/useEntityFetch'
 
 definePageMeta({
   name: 'parameters_sms_page',

+ 6 - 1
services/asserts/AssertRuleRegistry.ts

@@ -8,7 +8,12 @@ export class AssertRuleRegistry {
   private rules: AssertRule[] = []
 
   constructor() {
-    this.rules = [new MaxAssert(), new NullableAssert(), new TypeAssert(), new PositiveAssert()]
+    this.rules = [
+      new MaxAssert(),
+      new NullableAssert(),
+      new TypeAssert(),
+      new PositiveAssert(),
+    ]
   }
 
   getValidators(

+ 4 - 8
services/asserts/PositiveAssert.ts

@@ -1,5 +1,5 @@
 import type { AssertRule } from '~/types/interfaces'
-import {useI18n} from "vue-i18n";
+import { useI18n } from 'vue-i18n'
 
 export class PositiveAssert implements AssertRule {
   supports(key: string): boolean {
@@ -11,14 +11,10 @@ export class PositiveAssert implements AssertRule {
 
     if (criteria === 'positive') {
       return (value: number) =>
-        value === null ||
-        value > 0 ||
-        t(`must_be_positive`)
-    }else if (criteria === 'positive_or_zero'){
+        value === null || value > 0 || t(`must_be_positive`)
+    } else if (criteria === 'positive_or_zero') {
       return (value: number) =>
-        value === null ||
-        value >= 0 ||
-        t(`must_be_positive_or_egal_0`)
+        value === null || value >= 0 || t(`must_be_positive_or_egal_0`)
     }
 
     return () => true

+ 1 - 1
tests/units/services/asserts/nullAssert.test.ts

@@ -22,7 +22,7 @@ describe('NullableAssert', () => {
       expect(rule('joe')).toBe(true)
     })
 
-    it('retourne true criteria est false et si value est n\'est pas null', () => {
+    it("retourne true criteria est false et si value est n'est pas null", () => {
       const nullAssert = new NullableAssert()
       const rule = nullAssert.createRule(false)
       expect(rule('joe')).toBe(true)

+ 1 - 1
tests/units/services/asserts/typeAssert.test.ts

@@ -26,7 +26,7 @@ describe('TypeAssert', () => {
   })
 
   describe('createRule', () => {
-    it('retourne true si criteria si criteria n\'est pas reconnu parmi les types existants', () => {
+    it("retourne true si criteria si criteria n'est pas reconnu parmi les types existants", () => {
       const typeAssert = new TypeAssert()
       const rule = typeAssert.createRule('foo')
       expect(rule('joe')).toBe(true)

+ 39 - 9
tests/units/services/data/filters/timeFilter.test.ts

@@ -21,7 +21,11 @@ describe('TimeFilter', () => {
 
   beforeEach(() => {
     vi.clearAllMocks()
-    filter = new TimeFilter('startTime', ref('2025-01-01T10:00:00'), TIME_STRATEGY.BEFORE)
+    filter = new TimeFilter(
+      'startTime',
+      ref('2025-01-01T10:00:00'),
+      TIME_STRATEGY.BEFORE,
+    )
   })
 
   it('initialise correctement les propriétés', () => {
@@ -39,7 +43,11 @@ describe('TimeFilter', () => {
     it('utilise DateUtils.isBefore pour BEFORE', () => {
       DateUtils.isBefore.mockReturnValueOnce(true)
       const result = filter['search']('2025-01-02', filter.filterValue)
-      expect(DateUtils.isBefore).toHaveBeenCalledWith('2025-01-02', '2025-01-01T10:00:00', false)
+      expect(DateUtils.isBefore).toHaveBeenCalledWith(
+        '2025-01-02',
+        '2025-01-01T10:00:00',
+        false,
+      )
       expect(result).toBe(true)
     })
 
@@ -47,29 +55,49 @@ describe('TimeFilter', () => {
       const f = new TimeFilter('f', ref('2025-01-01'), TIME_STRATEGY.AFTER)
       DateUtils.isBefore.mockReturnValueOnce(false)
       const result = f['search']('2025-01-02', f.filterValue)
-      expect(DateUtils.isBefore).toHaveBeenCalledWith('2025-01-01', '2025-01-02', false)
+      expect(DateUtils.isBefore).toHaveBeenCalledWith(
+        '2025-01-01',
+        '2025-01-02',
+        false,
+      )
       expect(result).toBe(false)
     })
 
     it('utilise DateUtils.isBefore strict pour STRICTLY_BEFORE', () => {
-      const f = new TimeFilter('f', ref('2025-01-01'), TIME_STRATEGY.STRICTLY_BEFORE)
+      const f = new TimeFilter(
+        'f',
+        ref('2025-01-01'),
+        TIME_STRATEGY.STRICTLY_BEFORE,
+      )
       DateUtils.isBefore.mockReturnValueOnce(true)
       const result = f['search']('2025-01-02', f.filterValue)
-      expect(DateUtils.isBefore).toHaveBeenCalledWith('2025-01-02', '2025-01-01')
+      expect(DateUtils.isBefore).toHaveBeenCalledWith(
+        '2025-01-02',
+        '2025-01-01',
+      )
       expect(result).toBe(true)
     })
 
     it('utilise DateUtils.isBefore strict pour STRICTLY_AFTER', () => {
-      const f = new TimeFilter('f', ref('2025-01-01'), TIME_STRATEGY.STRICTLY_AFTER)
+      const f = new TimeFilter(
+        'f',
+        ref('2025-01-01'),
+        TIME_STRATEGY.STRICTLY_AFTER,
+      )
       DateUtils.isBefore.mockReturnValueOnce(false)
       const result = f['search']('2025-01-02', f.filterValue)
-      expect(DateUtils.isBefore).toHaveBeenCalledWith('2025-01-01', '2025-01-02')
+      expect(DateUtils.isBefore).toHaveBeenCalledWith(
+        '2025-01-01',
+        '2025-01-02',
+      )
       expect(result).toBe(false)
     })
 
     it('lève une erreur si mode inconnu', () => {
       const f = new TimeFilter('f', ref('2025-01-01'), 'INVALID' as any)
-      expect(() => f['search']('2025-01-02', f.filterValue)).toThrow('Unrecognized mode')
+      expect(() => f['search']('2025-01-02', f.filterValue)).toThrow(
+        'Unrecognized mode',
+      )
     })
   })
 
@@ -99,7 +127,9 @@ describe('TimeFilter', () => {
     })
 
     it('retourne correctement la query', () => {
-      expect(filter.getApiQueryPart()).toBe('startTime[before]=2025-01-01T10:00:00')
+      expect(filter.getApiQueryPart()).toBe(
+        'startTime[before]=2025-01-01T10:00:00',
+      )
     })
   })
 })