import { useState } from 'react'; import { IoChevronDown } from 'react-icons/io5'; import { useSearchParams } from 'react-router-dom'; import { Button, Input, InputGroup, InputLeftElement, Menu, MenuButton, MenuItemOption, MenuList, MenuOptionGroup, Select, Switch, } from '@chakra-ui/react'; import { isStringBoolean } from '../../../features/viewers/common/viewUtils'; import InlineColourPicker from './InlineColourPicker'; import { ParamField } from './types'; interface EditFormInputProps { paramField: ParamField; } export default function ParamInput(props: EditFormInputProps) { const { paramField } = props; const [searchParams] = useSearchParams(); const { id, type, defaultValue } = paramField; if (type === 'persist') { return null; } if (type === 'option') { const optionFromParams = searchParams.get(id); const defaultOptionValue = optionFromParams || defaultValue; return ( ); } if (type === 'multi-option') { return ; } if (type === 'boolean') { const defaultCheckedValue = isStringBoolean(searchParams.get(id)) || defaultValue; // checked value should be 'true', so it can be captured by the form event return ; } if (type === 'number') { const { prefix, placeholder } = paramField; const defaultNumberValue = searchParams.get(id) ?? defaultValue; return ( {prefix && {prefix}} ); } if (type === 'colour') { const currentvalue = `#${searchParams.get(id) ?? defaultValue}`; return ; } const defaultStringValue = searchParams.get(id) ?? defaultValue; const { prefix, placeholder } = paramField; return ( {prefix && {prefix}} ); } interface EditFormMultiOptionProps { paramField: ParamField & { type: 'multi-option' }; } function MultiOption(props: EditFormMultiOptionProps) { const [searchParams] = useSearchParams(); const { paramField } = props; const { id, defaultValue } = paramField; const optionFromParams = searchParams.getAll(id); const [paramState, setParamState] = useState(optionFromParams || defaultValue || ['']); return ( <> {paramField.title} setParamState(Array.isArray(value) ? value : [value])} > {Object.values(paramField.values).map((option) => { const { value, label, colour } = option; return ( {label} ); })} ); }