@prefecthq/prefect-ui-library
Version:
This library is the Vue and Typescript component library for [Prefect 2](https://github.com/PrefectHQ/prefect) and [Prefect Cloud 2](https://www.prefect.io/cloud/). _The components and utilities in this project are not meant to be used independently_.
109 lines (82 loc) • 3.44 kB
text/typescript
import { DateRouteParam, useRouteQueryParam } from '@prefecthq/vue-compositions'
import { AutomationAction, isAutomationAction } from '@/automations/types/actions'
import { AutomationTrigger } from '@/automations/types/triggers'
import { useWorkspaceApi } from '@/compositions'
import { JSONRouteParam } from '@/formatters/JsonRouteParam'
import { mapper } from '@/services/Mapper'
type UseCreateAutomationQueryParams = {
getActions: () => Promise<AutomationAction[] | null>,
getTrigger: () => Promise<AutomationTrigger | null>,
}
export function useCreateAutomationQueryParams(): UseCreateAutomationQueryParams {
const api = useWorkspaceApi()
// action
const { value: actions } = useRouteQueryParam('actions', [JSONRouteParam], [])
// trigger
const { value: from } = useRouteQueryParam('from')
// event trigger
const { value: eventId } = useRouteQueryParam('eventId')
const { value: occurred } = useRouteQueryParam('occurred', DateRouteParam)
// flow trigger
const { value: flowId } = useRouteQueryParam('flowId')
// work pool
const { value: workPoolId } = useRouteQueryParam('workPoolId')
// work pool queue
const { value: workPoolQueueId } = useRouteQueryParam('workPoolQueueId')
async function getTrigger(): Promise<AutomationTrigger | null> {
switch (from) {
case 'event':
return await getEventTriggerTemplate()
case 'flow':
return await getFlowTriggerTemplate()
case 'workPool':
return await getWorkPoolTriggerTemplate()
case 'workPoolQueue':
return await getWorkPoolQueueTriggerTemplate()
default:
return null
}
}
async function getActions(): Promise<AutomationAction[] | null> {
const validActions = actions.filter(isAutomationAction)
if (validActions.length) {
return validActions
}
return await null
}
async function getEventTriggerTemplate(): Promise<AutomationTrigger> {
if (!eventId) {
throw new Error('Failed creating automation trigger from event. Missing eventId query param.')
}
if (!occurred) {
throw new Error('Failed creating automation trigger from event. Missing occurred query param.')
}
const event = await api.events.getEvent(eventId, occurred)
return mapper.map('WorkspaceEvent', event, 'AutomationTrigger')
}
async function getFlowTriggerTemplate(): Promise<AutomationTrigger> {
if (!flowId) {
throw new Error('Failed creating automation trigger from flow. Missing flowId query param.')
}
const flow = await api.flows.getFlow(flowId)
return mapper.map('Flow', flow, 'AutomationTrigger')
}
async function getWorkPoolTriggerTemplate(): Promise<AutomationTrigger> {
if (!workPoolId) {
throw new Error('Failed creating automation trigger from work pool. Missing workPoolId query param.')
}
const workPool = await api.workPools.getWorkPoolById(workPoolId)
return mapper.map('WorkPool', workPool, 'AutomationTrigger')
}
async function getWorkPoolQueueTriggerTemplate(): Promise<AutomationTrigger> {
if (!workPoolQueueId) {
throw new Error('Failed creating automation trigger from work pool queue. Missing workPoolQueueId query param.')
}
const workPoolQueue = await api.workQueues.getWorkQueue(workPoolQueueId)
return mapper.map('WorkPoolQueue', workPoolQueue, 'AutomationTrigger')
}
return {
getTrigger,
getActions,
}
}