import { CustomIcon } from '../CustomIcon' import React, { useState } from 'react' import { ActionButton } from '../ActionButton' import { Selections, getSelectionTypeDisplayText } from 'lib/selections' import { useHotkeys } from 'react-hotkeys-hook' import { KclCommandValue, KclExpressionWithVariable } from 'lib/commandTypes' import Tooltip from 'components/Tooltip' import { roundOff } from 'lib/utils' import { commandBarActor, useCommandBarState } from 'machines/commandBarMachine' function CommandBarHeader({ children }: React.PropsWithChildren<{}>) { const commandBarState = useCommandBarState() const { context: { selectedCommand, currentArgument, argumentsToSubmit }, } = commandBarState const isReviewing = commandBarState.matches('Review') const [showShortcuts, setShowShortcuts] = useState(false) useHotkeys( 'alt', () => setShowShortcuts(true), { enableOnFormTags: true, enableOnContentEditable: true }, [showShortcuts] ) useHotkeys( 'alt', () => setShowShortcuts(false), { keyup: true, enableOnFormTags: true, enableOnContentEditable: true }, [showShortcuts] ) useHotkeys( [ 'alt+1', 'alt+2', 'alt+3', 'alt+4', 'alt+5', 'alt+6', 'alt+7', 'alt+8', 'alt+9', 'alt+0', ], (_, b) => { if (b.keys && !Number.isNaN(parseInt(b.keys[0], 10))) { if (!selectedCommand?.args) return const argName = Object.keys(selectedCommand.args)[ parseInt(b.keys[0], 10) - 1 ] const arg = selectedCommand?.args[argName] if (!argName || !arg) return commandBarActor.send({ type: 'Change current argument', data: { arg: { ...arg, name: argName } }, }) } }, { keyup: true, enableOnFormTags: true, enableOnContentEditable: true }, [argumentsToSubmit, selectedCommand] ) return ( selectedCommand && argumentsToSubmit && ( <>

{selectedCommand && 'icon' in selectedCommand && selectedCommand.icon && ( )} {selectedCommand.displayName || selectedCommand.name}

{Object.entries(selectedCommand?.args || {}) .filter(([_, argConfig]) => typeof argConfig.required === 'function' ? argConfig.required(commandBarState.context) : argConfig.required ) .map(([argName, arg], i) => { const argValue = (typeof argumentsToSubmit[argName] === 'function' ? (argumentsToSubmit[argName] as Function)( commandBarState.context ) : argumentsToSubmit[argName]) || '' return ( ) })}
{isReviewing ? : }
{children} ) ) } function ReviewingButton() { return ( Submit command ) } function GatheringArgsButton() { return ( Continue ) } export default CommandBarHeader