import { type StepProps } from './components/Step.js' import Table from './components/Table.js' import { useCreateEvmtsApp } from './hooks/useCreateEvmtsApp.js' import type { Store } from './state/Store.js' import { asyncStateColors, colorPallet } from './styles/colors.js' import { getTailLogs } from './utils/getTailLogs.js' import { Box, Text } from 'ink' import Spinner from 'ink-spinner' import { relative } from 'path' import React from 'react' type Props = { store: Store } type AsyncState = 'idle' | 'pending' | 'success' | 'error' type AsyncStep = { mutationState: AsyncState progressMessage: string error?: Error | string | null } & Pick const AsyncStep = ({ name, error, prompt, mutationState, progressMessage, }: AsyncStep) => { const icon = { idle: '🔵', pending: '🟡', success: '🟢', error: '🔴', }[mutationState] const errorMessage = typeof error === 'string' ? error : error?.message const promptColor = { idle: colorPallet.gray, pending: asyncStateColors.loading, success: colorPallet.white, error: asyncStateColors.error, }[mutationState] return ( {icon} {mutationState === 'pending' && } {name} {prompt} {mutationState === 'pending' && getTailLogs(progressMessage)} {mutationState === 'error' && errorMessage} ) } export const Creating: React.FC = ({ store }) => { const createState = useCreateEvmtsApp(store) const { createFixturesMutation: m0, copyTemplateMutation: m1, gitInitMutation: m2, installDependenciesMutation: m3, } = createState return ( completed {createState.settled} of {createState.length} tasks ) }