Skip to content
Snippets Groups Projects
ScheduleList.vue 2.73 KiB
Newer Older
  • Learn to ignore specific revisions
  •   <ASection :title="t('showSchedules.title')">
    
        <template #header>
          <div class="tw-ml-auto">
            <RadioGroup
              v-model="scheduleSelection"
              :choices="[
                { value: 'all', label: t('showSchedules.selection.all') },
                { value: 'relevant', label: t('showSchedules.selection.relevant') },
              ]"
              name="display-mode"
            />
          </div>
        </template>
    
    
        <div class="aura-table-wrapper tw-mb-0">
          <table class="aura-table">
            <thead>
              <tr>
                <th scope="col">
                  {{ t('showSchedules.rhythm') }}
                </th>
                <th scope="col">
                  {{ t('showSchedules.firstBroadcast') }}
                </th>
                <th scope="col">
                  {{ t('showSchedules.lastBroadcast') }}
                </th>
                <th scope="col" class="tw-text-right">
                  {{ t('showSchedules.times') }}
                </th>
              </tr>
            </thead>
    
              <ScheduleRow v-for="schedule in result.items" :key="schedule.id" :schedule="schedule" />
    
              <tr v-if="result.count === 0">
    
                <td colspan="4">
                  <p class="tw-text-center tw-py-3 tw-m-0">
                    {{ t('showSchedules.noSchedulesAvailable') }}
                  </p>
                </td>
              </tr>
            </tbody>
          </table>
    
    
          <div
            class="tw-flex tw-flex-wrap tw-gap-3 tw-items-center tw-px-6 tw-mt-3 tw-py-3 tw-border-0 tw-border-t tw-border-solid tw-border-gray-200 empty:tw-hidden"
          >
            <PaginationRange v-if="result.count > 0" :pagination-data="result" />
            <Pagination v-model="page" :items-per-page="result.itemsPerPage" :count="result.count" />
          </div>
    
    <script lang="ts" setup>
    
    import { usePaginatedList } from '@rokoli/bnb/drf'
    
    import { ref } from 'vue'
    
    import { useI18n } from '@/i18n'
    
    import { useScheduleStore } from '@/stores/schedules'
    
    import { Show } from '@/types'
    import { useQuery } from '@/util'
    
    import ASection from '@/components/generic/ASection.vue'
    
    import ScheduleRow from './ScheduleRow.vue'
    
    import RadioGroup from '@/components/generic/RadioGroup.vue'
    
    import Pagination from '@/components/generic/Pagination.vue'
    import PaginationRange from '@/components/generic/PaginationRange.vue'
    
    defineOptions({ compatConfig: { MODE: 3 } })
    
    const props = defineProps<{
      show: Show
    }>()
    
    const scheduleStore = useScheduleStore()
    
    const page = ref(1)
    
    const scheduleSelection = ref<'all' | 'relevant'>('relevant')
    
    const { result } = usePaginatedList(scheduleStore.listIsolated, page, 100, {
    
      query: useQuery(() => ({
        showIds: props.show.id,
    
        excludeInactive: scheduleSelection.value === 'relevant' ? '1' : undefined,