<script setup> import { onMounted, ref, watch } from "vue" import api from '@/helpers/api' import { useRouter, useRoute } from "vue-router" import WorkflowsTable from "@/components/workflows/WorkflowsTable.vue" import { useI18n } from "vue-i18n" import { mapGtId, setEvalColors } from "@/helpers/utils" import { store } from "@/helpers/store" import Filters from "@/components/workflows/filters/Filters.vue" import SelectButton from "primevue/selectbutton" import WorkflowsTimeline from "@/components/workflows/WorkflowsTimeline.vue" import filtersStore from "@/store/filters-store" const { t } = useI18n() const data = ref([]) const filteredData = ref([]) const defs = ref({}) const router = useRouter() const route = useRoute() const options = ref([ { name: t('timeline'), value: 'timeline' }, { name: t('table'), value: 'table' } ]) const selectedOption = ref(options.value[0]) watch(() => filtersStore.gt, () => { filteredData.value = data.value.filter(({ metadata }) => filtersStore.gt.findIndex(({ value }) => value === mapGtId(metadata.gt_workspace['id']) ) > -1) }) watch(selectedOption, ({ value }) => { router.push({ query: { view: value } }) }) onMounted(async () => { await router.isReady() const filtered = options.value.filter((option) => { return route.query.view && route.query.view === option.value }) selectedOption.value = filtered.length > 0 ? filtered[0] : options.value[0] let gtList = store.gtList if (!gtList.length) { gtList = await api.getGroundTruth() store.setGTList(gtList) } let workflows = store.workflows if (!workflows.length) { workflows = await api.getWorkflows() store.setWorkflows(workflows) } const runs = [] for await (let gt of gtList) { try { const latestRuns = await api.getLatestRuns(gt.id,) if (latestRuns.length > 0) { runs.push(...latestRuns) } } catch (e) { } } data.value = runs defs.value = await api.getEvalDefinitions() filteredData.value = data.value setEvalColors(data.value) }) </script> <template> <div class="flex mb-3"> <SelectButton v-model="selectedOption" :options="options" optionLabel="name"></SelectButton> </div> <div><Filters /></div> <div v-if="selectedOption"> <WorkflowsTimeline v-if="selectedOption.value === 'timeline'" /> <WorkflowsTable v-else :data="filteredData" :defs="defs" /> </div> </template> <style scoped> </style>