| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- <template>
- <LayoutContainer>
- <UiLoadingPanel v-if="pending" />
- <div v-else>
- <v-table>
- <thead>
- <tr>
- <td>{{ $t('educationTimings') }}</td>
- <td></td>
- </tr>
- </thead>
- <tbody v-if="educationTimings.length > 0">
- <tr v-for="timing in educationTimings" :key="timing.id">
- <td class="cycle-editable-cell">
- {{ timing.timing }}
- </td>
- <td class="d-flex flex-row">
- <v-btn
- :flat="true"
- icon="fa fa-pen"
- class="cycle-edit-icon mr-3"
- @click="goToEditPage(timing.id as number)"
- />
- <UiButtonDelete
- :model="EducationTiming"
- :entity="timing"
- :flat="true"
- class="cycle-edit-icon"
- />
- </td>
- </tr>
- </tbody>
- <tbody v-else>
- <tr class="theme-neutral">
- <td>
- <i>{{ $t('nothing_to_show') }}</i>
- </td>
- <td></td>
- </tr>
- </tbody>
- </v-table>
- <v-btn
- :flat="true"
- prepend-icon="fa fa-plus"
- class="theme-primary mt-4"
- @click="goToCreatePage"
- >
- {{ $t('add') }}
- </v-btn>
- </div>
- </LayoutContainer>
- </template>
- <script setup lang="ts">
- import { useRepo } from 'pinia-orm'
- import type { ComputedRef } from 'vue'
- import { useEntityFetch } from '~/composables/data/useEntityFetch'
- import EducationTiming from '~/models/Education/EducationTiming'
- import EducationTimingsRepository from '~/stores/repositories/EducationTimingsRepository'
- import { useOrganizationProfileStore } from '~/stores/organizationProfile'
- import UrlUtils from '~/services/utils/urlUtils'
- const organizationProfile = useOrganizationProfileStore()
- if (organizationProfile.parametersId === null) {
- throw new Error('Missing organization parameters id')
- }
- const { fetchCollection } = useEntityFetch()
- const { pending } = fetchCollection(EducationTiming)
- const educationTimingRepo = useRepo(EducationTimingsRepository)
- /**
- * On récupère les timings via le store
- * (sans ça, les mises à jour SSE ne seront pas prises en compte)
- */
- const educationTimings: ComputedRef<Array<EducationTiming>> = computed(() => {
- return educationTimingRepo.getEducationTimings()
- })
- const goToEditPage = (id: number) => {
- navigateTo(UrlUtils.join('/parameters/education_timings', id))
- }
- const goToCreatePage = () => {
- navigateTo('/parameters/education_timings/new')
- }
- </script>
- <style scoped lang="scss">
- .v-table {
- width: 100%;
- max-width: 800px;
- }
- // TODO: voir à factoriser ces styles, ptêt en faisant un component de ces boutons?
- :deep(.cycle-edit-icon .v-icon) {
- color: rgb(var(--v-theme-primary));
- font-size: 18px;
- }
- </style>
|