@shopify/cli-kit
Version:
A set of utilities, interfaces, and models that are common across all the platform features
28 lines • 1.49 kB
JavaScript
import { SelectInput } from './SelectInput.js';
import { PromptLayout } from './Prompts/PromptLayout.js';
import usePrompt, { PromptState } from '../hooks/use-prompt.js';
import React, { useCallback, useEffect } from 'react';
import { useApp } from 'ink';
// eslint-disable-next-line react/function-component-definition
function SelectPrompt({ message, choices, infoTable, infoMessage, onSubmit, defaultValue, abortSignal, groupOrder, }) {
if (choices.length === 0) {
throw new Error('SelectPrompt requires at least one choice');
}
const { exit: unmountInk } = useApp();
const { promptState, setPromptState, answer, setAnswer } = usePrompt({
initialAnswer: undefined,
});
const submitAnswer = useCallback((answer) => {
setAnswer(answer);
setPromptState(PromptState.Submitted);
}, [setAnswer, setPromptState]);
useEffect(() => {
if (promptState === PromptState.Submitted && answer) {
unmountInk();
onSubmit(answer.value);
}
}, [answer, onSubmit, promptState, unmountInk]);
return (React.createElement(PromptLayout, { message: message, state: promptState, submittedAnswerLabel: answer?.label, infoTable: infoTable, infoMessage: infoMessage, abortSignal: abortSignal, input: React.createElement(SelectInput, { defaultValue: defaultValue, items: choices, onSubmit: submitAnswer, groupOrder: groupOrder }) }));
}
export { SelectPrompt };
//# sourceMappingURL=SelectPrompt.js.map