import { useMemo, useRef } from 'react' import { useLocation } from 'react-router-dom' import { JSONValue, SuperJSONResult } from 'superjson/dist/types' import superjson from '~/utils/superjson' import { dateTimeFormatter } from '~/utils/formatters' import { inferQueryOutput } from '~/utils/trpc' import ResultRenderer from '../Result' import IconOk from '~/icons/compiled/Ok' import IconCancel from '~/icons/compiled/Cancel' import { statusEnumToString } from '~/utils/text' import { ActionMode } from '~/utils/types' import { useParams } from 'react-router-dom' import { extractOrgSlug } from '~/utils/extractOrgSlug' import IconRedirect from '~/icons/compiled/Redirect' import useTransactionAutoScroll from '~/utils/useTransactionAutoScroll' import { logger } from '~/utils/logger' export default function CompletionState({ className, transaction, mode, shouldAutoscroll = false, }: { className?: string transaction: NonNullable> mode: ActionMode shouldAutoscroll?: boolean }) { const location = useLocation() const params = useParams() const { orgEnvSlug } = extractOrgSlug(params) const ref = useRef(null) const { resultData, resultDataMeta } = transaction const result: JSONValue = useMemo(() => { if (resultDataMeta) { try { return superjson.deserialize({ json: resultData, meta: resultDataMeta, } as SuperJSONResult) } catch (error) { logger.error('Error from SuperJSON deserialization', { error, meta: resultDataMeta, }) } } return resultData }, [resultData, resultDataMeta]) const shareLink = orgEnvSlug && !location.pathname.startsWith(`/dashboard/${orgEnvSlug}/transactions/`) ? `${window.location.protocol}//${window.location.host}/dashboard/${orgEnvSlug}/transactions/${transaction.id}` : undefined useTransactionAutoScroll({ enabled: shouldAutoscroll, ref, }) return (
{mode === 'console' && transaction.action.slug === 'hello_world' && (

🎉 Nice work!

Check out{' '} our collection of example tools {' '} to learn more about what you can build with Interval.

)}
{transaction.resultStatus === 'SUCCESS' && ( )} {transaction.resultStatus === 'REDIRECTED' && ( )} {transaction.resultStatus === 'FAILURE' && ( )} {transaction.resultStatus === 'CANCELED' && ( )}

{statusEnumToString( transaction.resultStatus ?? transaction.status )} {transaction.completedAt && ( <> at {dateTimeFormatter.format(transaction.completedAt)} )}

) }