{"version":3,"file":"ParticipantsPage-BcsRTLAB.mjs","names":[],"sources":["../src/stores/class/general/participant.ts","../src/components/display/participant/ParticipantList.vue","../src/components/display/participant/ParticipantList.vue","../src/components/pages/ParticipantsPage.vue","../src/components/pages/ParticipantsPage.vue"],"sourcesContent":["import { Organisation } from \"./organisation\";\n\nexport interface Participant {\n  [x: string]: boolean;\n  annotations?: { [key: string]: string | number | boolean | undefined };\n  imageUrl?: string;\n  description?: string;\n  firstName: string;\n  lastName: string;\n  orga?: Organisation;\n  participantId: number | undefined;\n  score?: number;\n  uid?: string;\n}\n\nexport function emptyParticipantData(): Participant {\n  return {\n    firstName: \"\",\n    lastName: \"\",\n    participantId: 0,\n  };\n}\n","<template>\n  <ListPaginate\n    id=\"participantListPaginate\"\n    v-model:first=\"dfirst\"\n    v-model:rows-per-page=\"dsize\"\n    v-model:is-mobile=\"isMobile\"\n    :text-count=\"\n      showCount && displayCount > 1\n        ? `${t('Number participants', { nb: displayCount })} ${t(\n            'sort by score',\n          )}`\n        : undefined\n    \"\n    :total-count=\"totalCount\"\n    :loading=\"loading\"\n    :loading-text=\"loading ? t('Loading participants ...') : undefined\"\n    :player-responsive=\"true\"\n  >\n    <template #list>\n      <div class=\"octopus-element-list\">\n        <ClassicLazy\n          v-for=\"p in displayArray\"\n          :key=\"p.participantId\"\n          :min-height=\"360\"\n        >\n          <ParticipantItem v-if=\"0 !== p.participantId\" :participant=\"p\" />\n          <template #preview>\n            <router-link\n              :to=\"{\n                name: 'participant',\n                params: { participantId: p.participantId },\n              }\"\n              :title=\"t('Participant name page', { name: p.lastName })\"\n            >\n              {{ p.lastName }}\n            </router-link>\n          </template>\n        </ClassicLazy>\n      </div>\n    </template>\n  </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport classicApi from \"../../../api/classicApi\";\nimport ParticipantItem from \"./ParticipantItem.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport {\n  Participant,\n  emptyParticipantData,\n} from \"@/stores/class/general/participant\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n  first: { default: 0, type: Number },\n  size: { default: 30, type: Number },\n  query: { default: undefined, type: String },\n  organisationId: { default: undefined, type: String },\n  showCount: { default: false, type: Boolean },\n})\n\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst displayCount = ref(0);\nconst isMobile = ref(false);\nconst participants: Ref<Array<Participant>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\n\n\n//Computed\nconst organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);\nconst displayArray = computed(() => {\n  if (isMobile.value) {\n    return participants.value;\n  }\n  return participants.value.slice(\n    dfirst.value,\n    Math.min(dfirst.value + dsize.value, totalCount.value),\n  );\n});\nconst changePaginate = computed(() =>  `${props.first}|${props.size}`);\nconst sort = computed(() =>  !props.query ? \"NAME\" : \"SCORE\");\n\n\n//Watch\nwatch(changePaginate, () => {\n  dfirst.value = props.first;\n  dsize.value = props.size;\n});\nwatch(()=>props.query, () =>  fetchContent(true));\nwatch(organisation, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n  if (\n    !participants.value[dfirst.value] ||\n    0 === participants.value[dfirst.value].participantId\n  ) {\n    fetchContent(false);\n  }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n  loading.value = true;\n  try {\n    const data = await classicApi.fetchData<ListClassicReturn<Participant>>(\n      {\n        api: 0,\n        path: \"participant/search\",\n        parameters: {\n          first: reset? 0: dfirst.value,\n          size: dsize.value,\n          query: props.query,\n          organisationId: organisation.value,\n          sort: sort.value\n        },\n        specialTreatement: true,\n      },\n    );\n    if (reset) {\n      dfirst.value = 0;\n      participants.value.length = 0;\n    }\n    displayCount.value = data.count;\n    if (dfirst.value > participants.value.length) {\n      for (\n        let i = participants.value.length - 1,\n          len = dfirst.value + dsize.value;\n        i < len;\n        i++\n      ) {\n        participants.value.push(emptyParticipantData());\n      }\n    }\n    const responseParticipants = data.result.filter(\n      (p: Participant | null) => {\n        if (null === p) {\n          displayCount.value--;\n        }\n        return null !== p;\n      },\n    );\n    participants.value = participants.value\n      .slice(0, dfirst.value)\n      .concat(responseParticipants)\n      .concat(\n        participants.value.slice(\n          dfirst.value + dsize.value,\n          participants.value.length,\n        ),\n      );\n    totalCount.value = data.count;\n  } catch (error) {\n    handle403(error as AxiosError);\n  }\n  loading.value = false;\n}\n</script>\n","<template>\n  <ListPaginate\n    id=\"participantListPaginate\"\n    v-model:first=\"dfirst\"\n    v-model:rows-per-page=\"dsize\"\n    v-model:is-mobile=\"isMobile\"\n    :text-count=\"\n      showCount && displayCount > 1\n        ? `${t('Number participants', { nb: displayCount })} ${t(\n            'sort by score',\n          )}`\n        : undefined\n    \"\n    :total-count=\"totalCount\"\n    :loading=\"loading\"\n    :loading-text=\"loading ? t('Loading participants ...') : undefined\"\n    :player-responsive=\"true\"\n  >\n    <template #list>\n      <div class=\"octopus-element-list\">\n        <ClassicLazy\n          v-for=\"p in displayArray\"\n          :key=\"p.participantId\"\n          :min-height=\"360\"\n        >\n          <ParticipantItem v-if=\"0 !== p.participantId\" :participant=\"p\" />\n          <template #preview>\n            <router-link\n              :to=\"{\n                name: 'participant',\n                params: { participantId: p.participantId },\n              }\"\n              :title=\"t('Participant name page', { name: p.lastName })\"\n            >\n              {{ p.lastName }}\n            </router-link>\n          </template>\n        </ClassicLazy>\n      </div>\n    </template>\n  </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport classicApi from \"../../../api/classicApi\";\nimport ParticipantItem from \"./ParticipantItem.vue\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport {\n  Participant,\n  emptyParticipantData,\n} from \"@/stores/class/general/participant\";\nimport { computed, onBeforeMount, Ref, ref, watch } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { ListClassicReturn } from \"@/stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\n\n\n//Props \nconst props = defineProps({\n  first: { default: 0, type: Number },\n  size: { default: 30, type: Number },\n  query: { default: undefined, type: String },\n  organisationId: { default: undefined, type: String },\n  showCount: { default: false, type: Boolean },\n})\n\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst displayCount = ref(0);\nconst isMobile = ref(false);\nconst participants: Ref<Array<Participant>> = ref([]);\n\n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\n\n\n//Computed\nconst organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);\nconst displayArray = computed(() => {\n  if (isMobile.value) {\n    return participants.value;\n  }\n  return participants.value.slice(\n    dfirst.value,\n    Math.min(dfirst.value + dsize.value, totalCount.value),\n  );\n});\nconst changePaginate = computed(() =>  `${props.first}|${props.size}`);\nconst sort = computed(() =>  !props.query ? \"NAME\" : \"SCORE\");\n\n\n//Watch\nwatch(changePaginate, () => {\n  dfirst.value = props.first;\n  dsize.value = props.size;\n});\nwatch(()=>props.query, () =>  fetchContent(true));\nwatch(organisation, () => fetchContent(true));\nwatch(dsize, () => fetchContent(true));\nwatch(dfirst, () => {\n  if (\n    !participants.value[dfirst.value] ||\n    0 === participants.value[dfirst.value].participantId\n  ) {\n    fetchContent(false);\n  }\n});\n\nonBeforeMount(()=>fetchContent(false))\n\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n  loading.value = true;\n  try {\n    const data = await classicApi.fetchData<ListClassicReturn<Participant>>(\n      {\n        api: 0,\n        path: \"participant/search\",\n        parameters: {\n          first: reset? 0: dfirst.value,\n          size: dsize.value,\n          query: props.query,\n          organisationId: organisation.value,\n          sort: sort.value\n        },\n        specialTreatement: true,\n      },\n    );\n    if (reset) {\n      dfirst.value = 0;\n      participants.value.length = 0;\n    }\n    displayCount.value = data.count;\n    if (dfirst.value > participants.value.length) {\n      for (\n        let i = participants.value.length - 1,\n          len = dfirst.value + dsize.value;\n        i < len;\n        i++\n      ) {\n        participants.value.push(emptyParticipantData());\n      }\n    }\n    const responseParticipants = data.result.filter(\n      (p: Participant | null) => {\n        if (null === p) {\n          displayCount.value--;\n        }\n        return null !== p;\n      },\n    );\n    participants.value = participants.value\n      .slice(0, dfirst.value)\n      .concat(responseParticipants)\n      .concat(\n        participants.value.slice(\n          dfirst.value + dsize.value,\n          participants.value.length,\n        ),\n      );\n    totalCount.value = data.count;\n  } catch (error) {\n    handle403(error as AxiosError);\n  }\n  loading.value = false;\n}\n</script>\n","<template>\n  <section v-if=\"isInit\" class=\"page-box\">\n    <ProductorSearch\n      v-model:organisation-id=\"organisationId\"\n      v-model:search-pattern=\"searchPattern\"\n      type=\"participant\"\n    />\n    <ParticipantList\n      :show-count=\"true\"\n      :first=\"paginateFirst\"\n      :size=\"ps\"\n      :query=\"searchMinSize\"\n      :organisation-id=\"organisationId\"\n    />\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { useSimplePageParam } from \"../composable/route/useSimplePageParam\";\nimport ParticipantList from \"../display/participant/ParticipantList.vue\";\nimport ProductorSearch from \"../display/filter/ProductorSearch.vue\";\n\n//Props\nconst props = defineProps({\n  pr: { default: 0, type: Number },\n  ps: { default: 30, type: Number },\n  routeOrga: { default: undefined, type: String },\n  routeQuery: { default: \"\", type: String },\n});\n\n\n//Composables\nconst {\n  searchPattern,\n  organisationId,\n  searchMinSize,\n  paginateFirst,\n  isInit\n} = useSimplePageParam(props);\n\n</script>\n","<template>\n  <section v-if=\"isInit\" class=\"page-box\">\n    <ProductorSearch\n      v-model:organisation-id=\"organisationId\"\n      v-model:search-pattern=\"searchPattern\"\n      type=\"participant\"\n    />\n    <ParticipantList\n      :show-count=\"true\"\n      :first=\"paginateFirst\"\n      :size=\"ps\"\n      :query=\"searchMinSize\"\n      :organisation-id=\"organisationId\"\n    />\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { useSimplePageParam } from \"../composable/route/useSimplePageParam\";\nimport ParticipantList from \"../display/participant/ParticipantList.vue\";\nimport ProductorSearch from \"../display/filter/ProductorSearch.vue\";\n\n//Props\nconst props = defineProps({\n  pr: { default: 0, type: Number },\n  ps: { default: 30, type: Number },\n  routeOrga: { default: undefined, type: String },\n  routeQuery: { default: \"\", type: String },\n});\n\n\n//Composables\nconst {\n  searchPattern,\n  organisationId,\n  searchMinSize,\n  paginateFirst,\n  isInit\n} = useSimplePageParam(props);\n\n</script>\n"],"mappings":"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"}