Skip to content
Snippets Groups Projects
Workflows.vue 2.48 KiB
Newer Older
<script setup lang="ts">
Paul Pestov's avatar
Paul Pestov committed
  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"
Paul Pestov's avatar
Paul Pestov committed
  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"
  import workflowsStore from "@/store/workflows-store"
  import type { ReleaseInfo } from "@/types";

  const { t } = useI18n()

  const data = ref([])
  const filteredData = ref([])
  const router = useRouter()
  const route = useRoute()
  const loading = ref(false)
paulpestov's avatar
paulpestov committed

  const options = ref([
Paul Pestov's avatar
Paul Pestov committed
    { name: t('timeline'), value: 'timeline' },
    { name: t('table'), value: 'table' }
Paul Pestov's avatar
Paul Pestov committed
  const selectedOption = ref(options.value[0])
paulpestov's avatar
paulpestov committed

Paul Pestov's avatar
Paul Pestov committed
  watch(() => filtersStore.gt, () => {
    filteredData.value = data.value.filter(({ metadata }) => filtersStore.gt.findIndex(({ value }) => value === mapGtId(metadata.gt_workspace['id']) ) > -1)
  })
paulpestov's avatar
paulpestov committed

  watch(selectedOption, ({ value }) => {
    router.push({ query: { view: value } })
  })
paulpestov's avatar
paulpestov committed

  onMounted(async () => {
    loading.value = true

    const option = options.value.find((option) => {
Paul Pestov's avatar
Paul Pestov committed
      return route.query.view && route.query.view === option.value
    })
    if (option) {
      selectedOption.value = option
    workflowsStore.runs = await api.getRuns()
    workflowsStore.gt = await api.getGroundTruth()
    workflowsStore.workflows = await api.getWorkflows()
    const releasesObj = workflowsStore.runs.reduce((acc, cur) => {
      acc[cur.metadata.release_info.tag_name] = cur.metadata.release_info
      return acc
    }, {})

    workflowsStore.releases = Object.keys(releasesObj).map(key => <ReleaseInfo>releasesObj[key])
    setEvalColors(workflowsStore.runs)

    loading.value = false
paulpestov's avatar
paulpestov committed
</script>
  <template v-if="loading">
    Loading...
  </template>
  <template v-else>
    <div class="flex mb-3">
      <SelectButton v-model="selectedOption" :options="options" optionLabel="name"></SelectButton>
      <Filters class="ml-auto w-1/3"/>
    </div>
    <div v-if="selectedOption">
      <WorkflowsTimeline v-if="selectedOption.value === 'timeline'" />
      <WorkflowsTable v-else />
    </div>
  </template>
paulpestov's avatar
paulpestov committed

<style scoped>

</style>