import { useState, useEffect } from 'react' import { RawActionReturnData } from '@interval/sdk/dist/ioSchema' import { QueuedAction } from '@prisma/client' import relativeTime from '~/utils/date' import { dateTimeFormatter } from '~/utils/formatters' import { ActionMode, QueuedActionWithPossibleMetadata } from '~/utils/types' import { trpc } from '~/utils/trpc' import Dialog, { useDialogState } from '~/components/IVDialog' import IVButton from '~/components/IVButton' import KeyValueTable from '~/components/KeyValueTable' import SectionHeading from '~/components/SectionHeading' import { notify } from '~/components/NotificationCenter' import { useOrgParams } from '~/utils/organization' export default function QueuedActionsList({ queuedActions, canDequeue, className = '', onChange, mode, }: { queuedActions: QueuedActionWithPossibleMetadata[] className?: string canDequeue?: boolean onChange?: (queuedAction: QueuedAction) => void mode: ActionMode }) { const { orgEnvSlug } = useOrgParams() const [dequeueId, setDequeueId] = useState(null) const dequeueDialog = useDialogState() { const { show, hide, visible } = dequeueDialog useEffect(() => { if (dequeueId) { show() } else { hide() } }, [dequeueId, hide, show]) useEffect(() => { if (!visible) setDequeueId(null) }, [visible]) } if (queuedActions.length === 0) { return null } return (
    {queuedActions.map(queuedAction => (
  • {queuedAction.action.metadata?.name ?? queuedAction.action.slug}

    {/* TODO: use an icon builder that supports multiple paths */} {dateTimeFormatter.format(queuedAction.createdAt)} {queuedAction.transaction && ( · started{' '} )}

    { setDequeueId(queuedAction.id) }, }, ] : undefined } />
    {queuedAction.params && (
    )}
  • ))}
{ setDequeueId(null) notify.success('Action dequeued.') if (onChange) onChange(queuedAction) }} onClose={() => { setDequeueId(null) }} />
) } function CancelForm({ queuedActionId, onSubmit, onClose, }: { queuedActionId: string | null onSubmit: (queuedAction: QueuedAction) => void onClose: () => void }) { const dequeue = trpc.useMutation('action.dequeue') return (

Are you sure you want to dequeue this action?

This cannot be undone.

{ if (!queuedActionId) return dequeue.mutate( { queuedActionId }, { onSuccess(queuedAction) { if (onSubmit) onSubmit(queuedAction) }, } ) }} />
) }