import { MultipleChoiceStep } from './components/MultipleChoiceStep.js' import { TextInputStep } from './components/TextInputStep.js' import * as inputSteps from './constants/InputStep.js' import * as multipleChoiceSteps from './constants/MultipleChoice.js' import { defaultWalletConnect } from './constants/defaults.js' import { frameworksByUseCase } from './constants/frameworksByUseCase.js' import { type Store } from './state/Store.js' import { colorPallet } from './styles/colors.js' import { useInput } from 'ink' import React, { type ReactNode } from 'react' type Props = { defaultName: string store: Store } // All colors but remove black const colorsArray = Object.values(colorPallet).filter( (color) => color !== '#000000', ) export const InteractivePrompt: React.FC = ({ defaultName, store }) => { useInput((_, { leftArrow }) => { if (leftArrow) { store.goToPreviousStep({}) } }) const steps: Array = [] steps.push( { store.setInput({ input: 'nameInput', value }) }} onSubmit={(value) => { if (value === '') { store.selectAndContinue({ name: 'name', value: defaultName }) return } store.selectAndContinue({ name: 'name', value }) }} />, ) steps.push( { store.selectAndContinue({ name: 'useCase', value: value, }) }} />, ) steps.push( { store.selectAndContinue({ name: 'framework', value, }) }} />, ) const isBun = store.framework.includes('bun') const isMud = store.framework.includes('mud') const isUi = Object.keys(frameworksByUseCase.ui.choices).includes( store.framework, ) if (!isBun && !isMud) { steps.push( { store.selectAndContinue({ name: 'packageManager', value: value, }) }} />, ) } // if (!isMud) { // steps.push( // { // store.selectAndContinue({ // name: 'solidityFramework', // value: value, // }) // }} // />) // } // if (!isMud) { // steps.push( // { // store.selectAndContinue({ // name: 'contractStrategy', // value: value, // }) // }} // />) // } if (!isMud) { steps.push( { store.selectAndContinue({ name: 'noGit', value: value === 'none' ? true : false, }) }} />, ) } if (isUi && !isMud) { steps.push( { store.setInput({ input: 'walletConnectIdInput', value }) }} onSubmit={(value) => { if (value === '') { store.selectAndContinue({ name: 'walletConnectProjectId', value: defaultName, }) return } store.selectAndContinue({ name: 'walletConnectProjectId', value }) }} />, ) } // if (!isMud && !isBun) { // steps.push( // { // store.selectAndContinue({ // name: 'testFrameworks', // value: value, // }) // }} // />) // } // if (!isMud) { // steps.push( // { // store.selectAndContinue({ // name: 'linter', // value: value as string, // }) // }} // />) // } // steps.push( // { // store.selectAndContinue({ // name: 'ciChoice', // value: value, // }) // }} // /> // ) steps.push( { store.selectAndContinue({ name: 'noGit', value: value === 'none' ? true : false, }) }} />, ) steps.push( { store.selectAndContinue({ name: 'noInstall', value: value === 'none' ? true : false, nextPage: true, }) }} />, ) return <>{...steps} }