import { defineStore } from "pinia"; import type { ActionConfig, EventConfig, FilterConfig, PlaceholderConfig, } from "@/types/automationConfig"; import type { Ref } from "vue"; import { computed, ref, unref } from "vue"; import useSWRV, { cache } from "@/_utils/swrv"; import { get } from "@/_utils"; import { appendSearchParams } from "@/composables/useSearchParams"; type MaybeRef = Ref | T; export const useAutomationResourcesStore = defineStore("automation", () => { const eventQuery = ref(null); const { data: events } = useSWRV("/resources/events", get, { cache, revalidateOnFocus: false, }); const { data: actions } = useSWRV("/resources/actions", get, { cache, revalidateOnFocus: false, }); const { data: filters } = useSWRV( () => eventQuery.value ? appendSearchParams("/resources/filters", { event_slug: eventQuery.value, }) : null, get, { cache, revalidateOnFocus: false }, ); const { data: placeholders } = useSWRV( () => eventQuery.value ? appendSearchParams("/resources/placeholders", { event_slug: eventQuery.value, }) : null, get, { cache, revalidateOnFocus: false }, ); function fetchAvailableFilters(event: string | null) { eventQuery.value = event; } function fetchAvailablePlaceholders(event: string | null) { eventQuery.value = event; } const getFilter = computed( () => (search: MaybeRef) => filters.value?.find((f) => f.value === unref(search)), ); const getAction = computed( () => (name: MaybeRef) => actions.value?.find((a) => a.value === unref(name)), ); return { events, filters, actions, placeholders, getFilter, getAction, fetchAvailableFilters, fetchAvailablePlaceholders, }; });