<template> <div class="_display:flex _margin-bottom:3"> <!-- <SelectButton v-model="selectedOption" :options="options" optionLabel="name"></SelectButton>--> <i-button-group> <i-button color="primary" size="lg" :outline="!isList" @click="selectedOption = options[0]">{{options[0].name}}</i-button> <i-button color="primary" size="lg" :outline="!isTable" @click="selectedOption = options[1]">{{options[1].name}}</i-button> </i-button-group> <MultiFilter class="_margin-left:auto" :amount-label="$t('datasets_selected')" v-model="datasetsFilterOptions" @update:model-value="onChangeDatasetFilter" /> </div> <div v-if="selectedOption"> <WorkflowsList v-if="selectedOption.value === 'list'" :data="filteredData" :defs="defs" /> <WorkflowsTable v-else :data="filteredData" :defs="defs" /> </div> </template> <script setup> import { computed, onMounted, ref, watch } from "vue"; import api from '@/helpers/api'; import { useRouter, useRoute } from "vue-router"; import WorkflowsList from "@/components/workflows/WorkflowsList.vue"; import WorkflowsTable from "@/components/workflows/WorkflowsTable.vue"; import { useI18n } from "vue-i18n"; import { setEvalColors } from "@/helpers/eval-colors"; import { store } from "@/helpers/store"; import MultiFilter from "@/components/workflows/MultiFilter.vue"; const { t } = useI18n(); const data = ref([]); const filteredData = ref([]); const defs = ref({}); const router = useRouter(); const route = useRoute(); const options = ref([ { name: t('list'), value: 'list' }, { name: t('table'), value: 'table' } ]); const selectedOption = ref(null); const datasetsFilterOptions = ref([]); const onChangeDatasetFilter = (value) => { value = value.filter(({ selected }) => !!(selected)); filteredData.value = data.value .filter(item => value.find(({ id }) => item.metadata.gt_workspace['@id'] === id)); }; watch(selectedOption, ({ value }) => { router.push({ query: { view: value } }); }); const isList = computed(() => { return selectedOption.value && selectedOption.value.value === options.value[0].value; }); const isTable = computed(() => { return selectedOption.value && selectedOption.value.value === options.value[1].value; }); onMounted(async () => { await router.isReady(); store.setRepos(await api.getProjects()); data.value = await api.getWorkflows(); defs.value = await api.getEvalDefinitions(); filteredData.value = data.value; const datasetsMap = data.value .filter(item => !!(item.metadata.gt_workspace)) .reduce((acc, cur) => { const gtWorkspaceId = cur.metadata.gt_workspace['@id']; acc[gtWorkspaceId] = cur.metadata.gt_workspace.label; return acc; }, {}); datasetsFilterOptions.value = Object.keys(datasetsMap).map(id => ({ id, label: datasetsMap[id], selected: true })); setEvalColors(data.value); 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]; }); </script> <style scoped> </style>