{"version":3,"file":"RubriqueChooser-BceFw2x2.mjs","names":[],"sources":["../src/components/display/rubriques/RubriqueChooser.vue","../src/components/display/rubriques/RubriqueChooser.vue"],"sourcesContent":["<template>\n  <ClassicMultiselect\n    :id=\"id\"\n    ref=\"selectRubrique\"\n    :option-chosen=\"model\"\n    option-label=\"name\"\n    :display-label=\"displayLabel\"\n    :label=\"label ?? t('By rubric')\"\n    :text-danger=\"textDanger\"\n    :placeholder=\"placeholderText\"\n    :max-element=\"maxElement\"\n    :multiple=\"multiple\"\n    :min-search-length=\"1\"\n    :width=\"width\"\n    :in-modal=\"inModal\"\n    :is-disabled=\"isDisabled\"\n    :no-deselect=\"noDeselect\"\n    @on-search=\"onSearchRubrique\"\n    @selected=\"onRubriqueSelected\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { Rubrique } from \"@/stores/class/rubrique/rubrique\";\nimport ClassicMultiselect from \"../../form/ClassicMultiselect.vue\";\nimport { computed, onMounted, Ref, ref, useTemplateRef, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n  defaultanswer: { default: \"\", type: String },\n  width: { default: undefined, type: String },\n  /**\n   * Active la sélection multiple\n   */\n  multiple: { default: false, type: Boolean },\n  reset: { default: false, type: Boolean },\n  /**\n   * Les rubriques à afficher\n   */\n  allRubriques: { default: () => [], type: Array as () => Array<Rubrique> },\n  rubriqueSelected: { default: undefined, type: Number },\n  rubriqueSelectedArray: {\n    default: undefined,\n    type: Object as () => Array<number>,\n  },\n  id: { default: \"rubrique-chooser\", type: String },\n  withoutRubrique: { default: false, type: Boolean },\n  isDisabled: { default: false, type: Boolean },\n  noDeselect: { default: true, type: Boolean },\n  inModal: { default: false, type: Boolean },\n  label:{default: undefined, type: String },\n  displayLabel: { default: false, type: Boolean },\n  textDanger :{ default: undefined, type: String },\n  /**\n   * Le texte affiché là où l'utilisateur doit effectuer sa saisie\n   */\n  placeholder: { type: String, required: false, default: undefined }\n})\n\n\n//Emits\nconst emit = defineEmits([\n  \"update:rubriqueSelected\",\n  \"update:rubriqueSelectedArray\",\n  \"selected\"\n]);\n\n\n//Composables\nconst { t } = useI18n();\n\n\n//Data \nconst maxElement = ref(250);\nconst rubrique: Ref<Rubrique | undefined> = ref(undefined);\nconst rubriqueForArray: Ref<Array<Rubrique> | undefined> = ref([]);\nconst withoutItem: Ref<{\n  name: string;\n  rubriqueId: number;\n}> = ref({ name: t(\"Without rubric\"), rubriqueId: -1 });\nconst selectRubriqueRef = useTemplateRef('selectRubrique');\n\n\n//Computed\nconst getDefaultRubrique = computed(() => {\n  if (\"\" === props.defaultanswer) {\n    return undefined;\n  }\n  return { name: props.defaultanswer, rubriqueId: 0 };\n});\nconst rubriques = computed(() => {\n  const rubriques = props.allRubriques;\n  if (!getDefaultRubrique.value) {\n    return rubriques;\n  }\n  if (props.withoutRubrique) {\n    rubriques.unshift(withoutItem.value);\n  }\n  rubriques.unshift(getDefaultRubrique.value);\n  return rubriques;\n});\n\nconst model = computed({\n  get(): Rubrique | Array<Rubrique> | undefined {\n    return !props.multiple ? rubrique.value : rubriqueForArray.value;\n  },\n  set(value: Rubrique | Array<Rubrique> | undefined): void {\n    if (!props.multiple) {\n      rubrique.value = value as Rubrique | undefined;\n      return;\n    }\n    rubriqueForArray.value = value as Array<Rubrique>;\n  },\n})\n\n/**\n * Le texte à afficher dans la saisie de l'utilisateur\n */\nconst placeholderText = computed(() => {\n  if (props.placeholder) {\n    return props.placeholder;\n  } else {\n    return t('Type string to filter by categories');\n  }\n});\n\n//Watch\nwatch(()=>props.rubriqueSelected, () => {\n  if (props.rubriqueSelected) {\n    initRubriqueSelected();\n  } else {\n    rubrique.value = getDefaultRubrique.value;\n  }\n}, {immediate: true});\nwatch(()=>props.reset, () => {\n  rubrique.value = getDefaultRubrique.value;\n});\n\nonMounted(()=>initRubriqueArray())\n\n\n//Methods\nfunction onSearchRubrique(query: string): void {\n  let tempRubriques = rubriques.value;\n  if (query) {\n    tempRubriques = tempRubriques.filter((item: Rubrique) => {\n      return item.name.toUpperCase().includes(query.toUpperCase());\n    });\n  }\n  (selectRubriqueRef?.value as InstanceType<typeof ClassicMultiselect>).afterSearch(tempRubriques, tempRubriques.length);\n}\nfunction onRubriqueSelected(rubrique: Rubrique | Array<Rubrique>): void {\n  if (undefined !== props.rubriqueSelected) {\n    emit(\"update:rubriqueSelected\",(rubrique as Rubrique).rubriqueId);\n  }\n  if (undefined !== props.rubriqueSelectedArray) {\n    const idsArray: Array<number> = [];\n    (rubrique as Array<Rubrique>).forEach((el: Rubrique) => {\n      idsArray.push(el.rubriqueId ?? 0);\n    });\n    emit(\"update:rubriqueSelectedArray\", idsArray);\n  } else {\n    emit(\"selected\", rubrique);\n  }\n}\nfunction initRubriqueSelected(): void {\n  rubrique.value =\n    rubriques.value.find((el: Rubrique) => {\n      return el.rubriqueId === props.rubriqueSelected;\n    }) ?? getDefaultRubrique.value;\n}\nfunction initRubriqueArray(): void {\n  if (!rubriqueForArray.value || !props.rubriqueSelectedArray) {\n    return;\n  }\n  rubriqueForArray.value.length = 0;\n  props.rubriqueSelectedArray.forEach((element: number) => {\n    const item = rubriques.value.find((el: Rubrique) => {\n      return el.rubriqueId === element;\n    });\n    if (rubriqueForArray.value && item) {\n      rubriqueForArray.value.push(item);\n    }\n  });\n}\n</script>\n","<template>\n  <ClassicMultiselect\n    :id=\"id\"\n    ref=\"selectRubrique\"\n    :option-chosen=\"model\"\n    option-label=\"name\"\n    :display-label=\"displayLabel\"\n    :label=\"label ?? t('By rubric')\"\n    :text-danger=\"textDanger\"\n    :placeholder=\"placeholderText\"\n    :max-element=\"maxElement\"\n    :multiple=\"multiple\"\n    :min-search-length=\"1\"\n    :width=\"width\"\n    :in-modal=\"inModal\"\n    :is-disabled=\"isDisabled\"\n    :no-deselect=\"noDeselect\"\n    @on-search=\"onSearchRubrique\"\n    @selected=\"onRubriqueSelected\"\n  />\n</template>\n\n<script setup lang=\"ts\">\nimport { Rubrique } from \"@/stores/class/rubrique/rubrique\";\nimport ClassicMultiselect from \"../../form/ClassicMultiselect.vue\";\nimport { computed, onMounted, Ref, ref, useTemplateRef, watch } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n  defaultanswer: { default: \"\", type: String },\n  width: { default: undefined, type: String },\n  /**\n   * Active la sélection multiple\n   */\n  multiple: { default: false, type: Boolean },\n  reset: { default: false, type: Boolean },\n  /**\n   * Les rubriques à afficher\n   */\n  allRubriques: { default: () => [], type: Array as () => Array<Rubrique> },\n  rubriqueSelected: { default: undefined, type: Number },\n  rubriqueSelectedArray: {\n    default: undefined,\n    type: Object as () => Array<number>,\n  },\n  id: { default: \"rubrique-chooser\", type: String },\n  withoutRubrique: { default: false, type: Boolean },\n  isDisabled: { default: false, type: Boolean },\n  noDeselect: { default: true, type: Boolean },\n  inModal: { default: false, type: Boolean },\n  label:{default: undefined, type: String },\n  displayLabel: { default: false, type: Boolean },\n  textDanger :{ default: undefined, type: String },\n  /**\n   * Le texte affiché là où l'utilisateur doit effectuer sa saisie\n   */\n  placeholder: { type: String, required: false, default: undefined }\n})\n\n\n//Emits\nconst emit = defineEmits([\n  \"update:rubriqueSelected\",\n  \"update:rubriqueSelectedArray\",\n  \"selected\"\n]);\n\n\n//Composables\nconst { t } = useI18n();\n\n\n//Data \nconst maxElement = ref(250);\nconst rubrique: Ref<Rubrique | undefined> = ref(undefined);\nconst rubriqueForArray: Ref<Array<Rubrique> | undefined> = ref([]);\nconst withoutItem: Ref<{\n  name: string;\n  rubriqueId: number;\n}> = ref({ name: t(\"Without rubric\"), rubriqueId: -1 });\nconst selectRubriqueRef = useTemplateRef('selectRubrique');\n\n\n//Computed\nconst getDefaultRubrique = computed(() => {\n  if (\"\" === props.defaultanswer) {\n    return undefined;\n  }\n  return { name: props.defaultanswer, rubriqueId: 0 };\n});\nconst rubriques = computed(() => {\n  const rubriques = props.allRubriques;\n  if (!getDefaultRubrique.value) {\n    return rubriques;\n  }\n  if (props.withoutRubrique) {\n    rubriques.unshift(withoutItem.value);\n  }\n  rubriques.unshift(getDefaultRubrique.value);\n  return rubriques;\n});\n\nconst model = computed({\n  get(): Rubrique | Array<Rubrique> | undefined {\n    return !props.multiple ? rubrique.value : rubriqueForArray.value;\n  },\n  set(value: Rubrique | Array<Rubrique> | undefined): void {\n    if (!props.multiple) {\n      rubrique.value = value as Rubrique | undefined;\n      return;\n    }\n    rubriqueForArray.value = value as Array<Rubrique>;\n  },\n})\n\n/**\n * Le texte à afficher dans la saisie de l'utilisateur\n */\nconst placeholderText = computed(() => {\n  if (props.placeholder) {\n    return props.placeholder;\n  } else {\n    return t('Type string to filter by categories');\n  }\n});\n\n//Watch\nwatch(()=>props.rubriqueSelected, () => {\n  if (props.rubriqueSelected) {\n    initRubriqueSelected();\n  } else {\n    rubrique.value = getDefaultRubrique.value;\n  }\n}, {immediate: true});\nwatch(()=>props.reset, () => {\n  rubrique.value = getDefaultRubrique.value;\n});\n\nonMounted(()=>initRubriqueArray())\n\n\n//Methods\nfunction onSearchRubrique(query: string): void {\n  let tempRubriques = rubriques.value;\n  if (query) {\n    tempRubriques = tempRubriques.filter((item: Rubrique) => {\n      return item.name.toUpperCase().includes(query.toUpperCase());\n    });\n  }\n  (selectRubriqueRef?.value as InstanceType<typeof ClassicMultiselect>).afterSearch(tempRubriques, tempRubriques.length);\n}\nfunction onRubriqueSelected(rubrique: Rubrique | Array<Rubrique>): void {\n  if (undefined !== props.rubriqueSelected) {\n    emit(\"update:rubriqueSelected\",(rubrique as Rubrique).rubriqueId);\n  }\n  if (undefined !== props.rubriqueSelectedArray) {\n    const idsArray: Array<number> = [];\n    (rubrique as Array<Rubrique>).forEach((el: Rubrique) => {\n      idsArray.push(el.rubriqueId ?? 0);\n    });\n    emit(\"update:rubriqueSelectedArray\", idsArray);\n  } else {\n    emit(\"selected\", rubrique);\n  }\n}\nfunction initRubriqueSelected(): void {\n  rubrique.value =\n    rubriques.value.find((el: Rubrique) => {\n      return el.rubriqueId === props.rubriqueSelected;\n    }) ?? getDefaultRubrique.value;\n}\nfunction initRubriqueArray(): void {\n  if (!rubriqueForArray.value || !props.rubriqueSelectedArray) {\n    return;\n  }\n  rubriqueForArray.value.length = 0;\n  props.rubriqueSelectedArray.forEach((element: number) => {\n    const item = rubriques.value.find((el: Rubrique) => {\n      return el.rubriqueId === element;\n    });\n    if (rubriqueForArray.value && item) {\n      rubriqueForArray.value.push(item);\n    }\n  });\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BA,MAAM,QAAQ;EAiCd,MAAM,OAAO;EAQb,MAAM,EAAE,MAAM,QAAQ;EAItB,MAAM,aAAa,IAAI,GAAG;EAC1B,MAAM,WAAsC,IAAI,KAAA,CAAS;EACzD,MAAM,mBAAqD,IAAI,CAAC,CAAC;EACjE,MAAM,cAGD,IAAI;GAAE,MAAM,EAAE,gBAAgB;GAAG,YAAY;EAAG,CAAC;EACtD,MAAM,oBAAoB,eAAe,gBAAgB;EAIzD,MAAM,qBAAqB,eAAe;GACxC,IAAI,OAAO,MAAM,eACf;GAEF,OAAO;IAAE,MAAM,MAAM;IAAe,YAAY;GAAE;EACpD,CAAC;EACD,MAAM,YAAY,eAAe;GAC/B,MAAM,YAAY,MAAM;GACxB,IAAI,CAAC,mBAAmB,OACtB,OAAO;GAET,IAAI,MAAM,iBACR,UAAU,QAAQ,YAAY,KAAK;GAErC,UAAU,QAAQ,mBAAmB,KAAK;GAC1C,OAAO;EACT,CAAC;EAED,MAAM,QAAQ,SAAS;GACrB,MAA8C;IAC5C,OAAO,CAAC,MAAM,WAAW,SAAS,QAAQ,iBAAiB;GAC7D;GACA,IAAI,OAAqD;IACvD,IAAI,CAAC,MAAM,UAAU;KACnB,SAAS,QAAQ;KACjB;IACF;IACA,iBAAiB,QAAQ;GAC3B;EACF,CAAC;;;;EAKD,MAAM,kBAAkB,eAAe;GACrC,IAAI,MAAM,aACR,OAAO,MAAM;QAEb,OAAO,EAAE,qCAAqC;EAElD,CAAC;EAGD,YAAU,MAAM,wBAAwB;GACtC,IAAI,MAAM,kBACR,qBAAqB;QAErB,SAAS,QAAQ,mBAAmB;EAExC,GAAG,EAAC,WAAW,KAAI,CAAC;EACpB,YAAU,MAAM,aAAa;GAC3B,SAAS,QAAQ,mBAAmB;EACtC,CAAC;EAED,gBAAc,kBAAkB,CAAC;EAIjC,SAAS,iBAAiB,OAAqB;GAC7C,IAAI,gBAAgB,UAAU;GAC9B,IAAI,OACF,gBAAgB,cAAc,QAAQ,SAAmB;IACvD,OAAO,KAAK,KAAK,YAAY,EAAE,SAAS,MAAM,YAAY,CAAC;GAC7D,CAAC;GAEH,CAAC,mBAAmB,OAAkD,YAAY,eAAe,cAAc,MAAM;EACvH;EACA,SAAS,mBAAmB,UAA4C;GACtE,IAAI,KAAA,MAAc,MAAM,kBACtB,KAAK,2BAA2B,SAAsB,UAAU;GAElE,IAAI,KAAA,MAAc,MAAM,uBAAuB;IAC7C,MAAM,WAA0B,CAAC;IACjC,SAA8B,SAAS,OAAiB;KACtD,SAAS,KAAK,GAAG,cAAc,CAAC;IAClC,CAAC;IACD,KAAK,gCAAgC,QAAQ;GAC/C,OACE,KAAK,YAAY,QAAQ;EAE7B;EACA,SAAS,uBAA6B;GACpC,SAAS,QACP,UAAU,MAAM,MAAM,OAAiB;IACrC,OAAO,GAAG,eAAe,MAAM;GACjC,CAAC,KAAK,mBAAmB;EAC7B;EACA,SAAS,oBAA0B;GACjC,IAAI,CAAC,iBAAiB,SAAS,CAAC,MAAM,uBACpC;GAEF,iBAAiB,MAAM,SAAS;GAChC,MAAM,sBAAsB,SAAS,YAAoB;IACvD,MAAM,OAAO,UAAU,MAAM,MAAM,OAAiB;KAClD,OAAO,GAAG,eAAe;IAC3B,CAAC;IACD,IAAI,iBAAiB,SAAS,MAC5B,iBAAiB,MAAM,KAAK,IAAI;GAEpC,CAAC;EACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBCxLE,YAkBE,OAAA,uBAAA;EAjBC,IAAI,OAAA;EACL,KAAI;EACH,iBAAe,OAAA;EAChB,gBAAa;EACZ,iBAAe,OAAA;EACf,OAAO,OAAA,SAAS,OAAA,EAAC,WAAA;EACjB,eAAa,OAAA;EACb,aAAa,OAAA;EACb,eAAa,OAAA;EACb,UAAU,OAAA;EACV,qBAAmB;EACnB,OAAO,OAAA;EACP,YAAU,OAAA;EACV,eAAa,OAAA;EACb,eAAa,OAAA;EACb,YAAW,OAAA;EACX,YAAU,OAAA"}