{"version":3,"file":"RubriqueFilter-CLy52BiY.mjs","names":[],"sources":["../src/components/display/filter/RubriqueFilter.vue","../src/components/display/filter/RubriqueFilter.vue"],"sourcesContent":["<template>\n  <div\n    v-if=\"organisation && rubriquageData\"\n    class=\"d-flex mt-3 align-items-center\"\n  >\n    <ClassicCheckbox\n      v-model:text-init=\"isRubriquage\"\n      class=\"flex-shrink-0\"\n      id-checkbox=\"search-rubriquage-checkbox\"\n      :label=\"t('By topic')\"\n    />\n    <div v-if=\"isRubriquage\" class=\"d-flex ms-1 flex-column flex-grow-1\">\n      <RubriqueChoice\n        v-for=\"(filter, index) in internRubriqueFilter\"\n        :key=\"index\"\n        :index=\"index\"\n        :rubriquage-display=\"getRubriquage(index)\"\n        :rubrique-id-selected=\"filter.rubriqueId\"\n        :rubriquage-id-selected=\"filter.rubriquageId\"\n        :no-deselect=\"true\"\n        @update-rubrique=\"updateRubrique\"\n        @update-rubriquage=\"updateRubriquage\"\n        @delete-rubrique-choice=\"deleteRubriqueChoice(index)\"\n      />\n      <button\n        v-if=\"availableRubriquage.length\"\n        class=\"btn mt-2\"\n        @click=\"addFilter\"\n      >\n        {{ t(\"Add a sort criterion by topic\") }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useRubriquesFilterParam } from \"../../composable/route/useRubriquesFilterParam\";\nimport classicApi from \"../../../api/classicApi\";\nimport ClassicCheckbox from \"../../form/ClassicCheckbox.vue\";\nimport { Rubriquage } from \"@/stores/class/rubrique/rubriquage\";\nimport { RubriquageFilter } from \"@/stores/class/rubrique/rubriquageFilter\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { defineAsyncComponent, ref, Ref, computed, watch, onBeforeMount } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nconst RubriqueChoice = defineAsyncComponent(\n  () => import(\"./RubriqueChoice.vue\"),\n);\n\n//Props \nconst props = defineProps({\n  organisationId: { default: undefined, type: String },\n  rubriqueFilter: {\n    default: () => [],\n    type: Array as () => Array<RubriquageFilter>,\n  },\n})\n\n//Emits\nconst emit = defineEmits([\"update:rubriqueFilter\", \"warning\"]);\n\n//Data \nconst isRubriquage = ref(false);\nconst internRubriqueFilter: Ref<Array<RubriquageFilter>> = ref([]);\nconst rubriquageData: Ref<Array<Rubriquage>> = ref([]);\nconst needToFetchRubrique = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst { stringifyRubriquesFilter } = useRubriquesFilterParam();\nconst filterStore = useFilterStore();\n\n//Computed\nconst organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);\nconst availableRubriquage = computed(() => getAvailableRubriquage(internRubriqueFilter.value));\n\n\n//Watch\nwatch(organisation, () => {\n  if (isRubriquage.value) {\n    fetchTopics();\n  } else {\n    needToFetchRubrique.value = true;\n  }\n});\nwatch(()=>props.rubriqueFilter, () => {\n  isRubriquage.value = 0 !== props.rubriqueFilter?.length;\n  if (\n    props.rubriqueFilter &&\n    stringifyRubriquesFilter(internRubriqueFilter.value) !==\n    stringifyRubriquesFilter(props.rubriqueFilter)\n  ) {\n    internRubriqueFilter.value = props.rubriqueFilter;\n  }\n}, {deep: true,immediate: true});\nwatch(isRubriquage, () => {\n  if (needToFetchRubrique.value) {\n    fetchTopics();\n  }\n  if (isRubriquage.value && 0 === internRubriqueFilter.value.length) {\n    addFilter();\n  }\n  const value = isRubriquage.value ? internRubriqueFilter.value : [];\n  if (\n    stringifyRubriquesFilter(value) !==\n    stringifyRubriquesFilter(props.rubriqueFilter)\n  ) {\n    emit(\"update:rubriqueFilter\", value);\n  }\n});\n\n\nonBeforeMount(()=>fetchTopics())\n\n//Methods\nfunction updateInternRubriqueFilter() {\n  if (isRubriquage.value) {\n    emit(\"update:rubriqueFilter\", internRubriqueFilter.value);\n  } else {\n    isRubriquage.value = true;\n  }\n}\nfunction addFilter(): void {\n  if (availableRubriquage.value?.[0].rubriquageId) {\n    internRubriqueFilter.value.push({\n      rubriquageId: availableRubriquage.value[0].rubriquageId,\n      rubriqueId: 0,\n      nameRubriquage: rubriquageData.value[0].title,\n      nameRubrique: \"\",\n    });\n    updateInternRubriqueFilter();\n  }\n}\nfunction deleteRubriqueChoice(index: number): void {\n  internRubriqueFilter.value.splice(index, 1);\n  updateInternRubriqueFilter();\n}\nfunction getAvailableRubriquage(\n  filterRubrique: Array<RubriquageFilter>,\n): Array<Rubriquage> {\n  if (filterRubrique.length) {\n    const rubriquageIdToNotShow = filterRubrique.map((a) => a.rubriquageId);\n    return rubriquageData.value.filter((element) => {\n      if (element.rubriquageId) {\n        return !rubriquageIdToNotShow.includes(element.rubriquageId);\n      }\n    });\n  }\n  return rubriquageData.value;\n}\nfunction getRubriquage(index: number) {\n  const elementToNotShow = Array.from(internRubriqueFilter.value);\n  elementToNotShow.splice(index, 1);\n  return getAvailableRubriquage(elementToNotShow);\n}\nfunction updateRubrique(newValue: { rubriqueId: number; index: number }): void {\n  const item = internRubriqueFilter.value[newValue.index];\n  item.rubriqueId = newValue.rubriqueId;\n  internRubriqueFilter.value.splice(newValue.index, 1, item);\n  updateInternRubriqueFilter();\n}\nfunction updateRubriquage(newValue: { rubriquageId: number; index: number }): void {\n  const item = internRubriqueFilter.value[newValue.index];\n  item.rubriquageId = newValue.rubriquageId;\n  internRubriqueFilter.value.splice(newValue.index, 1, item);\n  updateInternRubriqueFilter();\n}\nasync function fetchTopics(): Promise<void> {\n  if (!organisation.value) return;\n  needToFetchRubrique.value = false;\n  const data = await classicApi.fetchData<Array<Rubriquage>>({\n    api: 0,\n    path: \"rubriquage/find/\" + organisation.value,\n    specialTreatement: true,\n  });\n  rubriquageData.value = data.filter((element: Rubriquage) => {\n    return element.rubriques.length;\n  });\n  if (0 === rubriquageData.value.length) {\n    if (internRubriqueFilter.value.length) {\n      internRubriqueFilter.value = [];\n      updateInternRubriqueFilter();\n      emit(\"warning\");\n    }\n    return;\n  }\n  const internRubriqueFilterToUpdate = [];\n  for (const filter of internRubriqueFilter.value) {\n    const rubriquageExist = rubriquageData.value.find(\n      (element) => element.rubriquageId === filter.rubriquageId,\n    );\n    if (rubriquageExist) {\n      internRubriqueFilterToUpdate.push(filter);\n    }\n  }\n  if (\n    internRubriqueFilterToUpdate.length !== internRubriqueFilter.value.length\n  ) {\n    internRubriqueFilter.value = internRubriqueFilterToUpdate;\n    updateInternRubriqueFilter();\n    emit(\"warning\");\n  }\n}\n</script>\n","<template>\n  <div\n    v-if=\"organisation && rubriquageData\"\n    class=\"d-flex mt-3 align-items-center\"\n  >\n    <ClassicCheckbox\n      v-model:text-init=\"isRubriquage\"\n      class=\"flex-shrink-0\"\n      id-checkbox=\"search-rubriquage-checkbox\"\n      :label=\"t('By topic')\"\n    />\n    <div v-if=\"isRubriquage\" class=\"d-flex ms-1 flex-column flex-grow-1\">\n      <RubriqueChoice\n        v-for=\"(filter, index) in internRubriqueFilter\"\n        :key=\"index\"\n        :index=\"index\"\n        :rubriquage-display=\"getRubriquage(index)\"\n        :rubrique-id-selected=\"filter.rubriqueId\"\n        :rubriquage-id-selected=\"filter.rubriquageId\"\n        :no-deselect=\"true\"\n        @update-rubrique=\"updateRubrique\"\n        @update-rubriquage=\"updateRubriquage\"\n        @delete-rubrique-choice=\"deleteRubriqueChoice(index)\"\n      />\n      <button\n        v-if=\"availableRubriquage.length\"\n        class=\"btn mt-2\"\n        @click=\"addFilter\"\n      >\n        {{ t(\"Add a sort criterion by topic\") }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useRubriquesFilterParam } from \"../../composable/route/useRubriquesFilterParam\";\nimport classicApi from \"../../../api/classicApi\";\nimport ClassicCheckbox from \"../../form/ClassicCheckbox.vue\";\nimport { Rubriquage } from \"@/stores/class/rubrique/rubriquage\";\nimport { RubriquageFilter } from \"@/stores/class/rubrique/rubriquageFilter\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { defineAsyncComponent, ref, Ref, computed, watch, onBeforeMount } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nconst RubriqueChoice = defineAsyncComponent(\n  () => import(\"./RubriqueChoice.vue\"),\n);\n\n//Props \nconst props = defineProps({\n  organisationId: { default: undefined, type: String },\n  rubriqueFilter: {\n    default: () => [],\n    type: Array as () => Array<RubriquageFilter>,\n  },\n})\n\n//Emits\nconst emit = defineEmits([\"update:rubriqueFilter\", \"warning\"]);\n\n//Data \nconst isRubriquage = ref(false);\nconst internRubriqueFilter: Ref<Array<RubriquageFilter>> = ref([]);\nconst rubriquageData: Ref<Array<Rubriquage>> = ref([]);\nconst needToFetchRubrique = ref(false);\n\n//Composables\nconst { t } = useI18n();\nconst { stringifyRubriquesFilter } = useRubriquesFilterParam();\nconst filterStore = useFilterStore();\n\n//Computed\nconst organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);\nconst availableRubriquage = computed(() => getAvailableRubriquage(internRubriqueFilter.value));\n\n\n//Watch\nwatch(organisation, () => {\n  if (isRubriquage.value) {\n    fetchTopics();\n  } else {\n    needToFetchRubrique.value = true;\n  }\n});\nwatch(()=>props.rubriqueFilter, () => {\n  isRubriquage.value = 0 !== props.rubriqueFilter?.length;\n  if (\n    props.rubriqueFilter &&\n    stringifyRubriquesFilter(internRubriqueFilter.value) !==\n    stringifyRubriquesFilter(props.rubriqueFilter)\n  ) {\n    internRubriqueFilter.value = props.rubriqueFilter;\n  }\n}, {deep: true,immediate: true});\nwatch(isRubriquage, () => {\n  if (needToFetchRubrique.value) {\n    fetchTopics();\n  }\n  if (isRubriquage.value && 0 === internRubriqueFilter.value.length) {\n    addFilter();\n  }\n  const value = isRubriquage.value ? internRubriqueFilter.value : [];\n  if (\n    stringifyRubriquesFilter(value) !==\n    stringifyRubriquesFilter(props.rubriqueFilter)\n  ) {\n    emit(\"update:rubriqueFilter\", value);\n  }\n});\n\n\nonBeforeMount(()=>fetchTopics())\n\n//Methods\nfunction updateInternRubriqueFilter() {\n  if (isRubriquage.value) {\n    emit(\"update:rubriqueFilter\", internRubriqueFilter.value);\n  } else {\n    isRubriquage.value = true;\n  }\n}\nfunction addFilter(): void {\n  if (availableRubriquage.value?.[0].rubriquageId) {\n    internRubriqueFilter.value.push({\n      rubriquageId: availableRubriquage.value[0].rubriquageId,\n      rubriqueId: 0,\n      nameRubriquage: rubriquageData.value[0].title,\n      nameRubrique: \"\",\n    });\n    updateInternRubriqueFilter();\n  }\n}\nfunction deleteRubriqueChoice(index: number): void {\n  internRubriqueFilter.value.splice(index, 1);\n  updateInternRubriqueFilter();\n}\nfunction getAvailableRubriquage(\n  filterRubrique: Array<RubriquageFilter>,\n): Array<Rubriquage> {\n  if (filterRubrique.length) {\n    const rubriquageIdToNotShow = filterRubrique.map((a) => a.rubriquageId);\n    return rubriquageData.value.filter((element) => {\n      if (element.rubriquageId) {\n        return !rubriquageIdToNotShow.includes(element.rubriquageId);\n      }\n    });\n  }\n  return rubriquageData.value;\n}\nfunction getRubriquage(index: number) {\n  const elementToNotShow = Array.from(internRubriqueFilter.value);\n  elementToNotShow.splice(index, 1);\n  return getAvailableRubriquage(elementToNotShow);\n}\nfunction updateRubrique(newValue: { rubriqueId: number; index: number }): void {\n  const item = internRubriqueFilter.value[newValue.index];\n  item.rubriqueId = newValue.rubriqueId;\n  internRubriqueFilter.value.splice(newValue.index, 1, item);\n  updateInternRubriqueFilter();\n}\nfunction updateRubriquage(newValue: { rubriquageId: number; index: number }): void {\n  const item = internRubriqueFilter.value[newValue.index];\n  item.rubriquageId = newValue.rubriquageId;\n  internRubriqueFilter.value.splice(newValue.index, 1, item);\n  updateInternRubriqueFilter();\n}\nasync function fetchTopics(): Promise<void> {\n  if (!organisation.value) return;\n  needToFetchRubrique.value = false;\n  const data = await classicApi.fetchData<Array<Rubriquage>>({\n    api: 0,\n    path: \"rubriquage/find/\" + organisation.value,\n    specialTreatement: true,\n  });\n  rubriquageData.value = data.filter((element: Rubriquage) => {\n    return element.rubriques.length;\n  });\n  if (0 === rubriquageData.value.length) {\n    if (internRubriqueFilter.value.length) {\n      internRubriqueFilter.value = [];\n      updateInternRubriqueFilter();\n      emit(\"warning\");\n    }\n    return;\n  }\n  const internRubriqueFilterToUpdate = [];\n  for (const filter of internRubriqueFilter.value) {\n    const rubriquageExist = rubriquageData.value.find(\n      (element) => element.rubriquageId === filter.rubriquageId,\n    );\n    if (rubriquageExist) {\n      internRubriqueFilterToUpdate.push(filter);\n    }\n  }\n  if (\n    internRubriqueFilterToUpdate.length !== internRubriqueFilter.value.length\n  ) {\n    internRubriqueFilter.value = internRubriqueFilterToUpdate;\n    updateInternRubriqueFilter();\n    emit(\"warning\");\n  }\n}\n</script>\n"],"mappings":"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"}