import { Box } from '@mui/material'; import React, { useState } from 'react'; import ToolTextInput from '@components/input/ToolTextInput'; import ToolTextResult from '@components/result/ToolTextResult'; import { groupList, SplitOperatorType } from './service'; import SimpleRadio from '@components/options/SimpleRadio'; import TextFieldWithDesc from '@components/options/TextFieldWithDesc'; import CheckboxWithDesc from '@components/options/CheckboxWithDesc'; import { formatNumber } from '../../../../utils/number'; import ToolContent from '@components/ToolContent'; import { ToolComponentProps } from '@tools/defineTool'; import { useTranslation } from 'react-i18next'; const initialValues = { splitOperatorType: 'symbol' as SplitOperatorType, splitSeparator: ',', groupNumber: 2, itemSeparator: ',', leftWrap: '[', rightWrap: ']', groupSeparator: '\\n', deleteEmptyItems: true, padNonFullGroup: false, paddingChar: '...' }; const splitOperators: { title: string; description: string; type: SplitOperatorType; }[] = [ { title: 'Use a Symbol for Splitting', description: 'Delimit input list items with a character.', type: 'symbol' }, { title: 'Use a Regex for Splitting', type: 'regex', description: 'Delimit input list items with a regular expression.' } ]; export default function FindUnique({ title }: ToolComponentProps) { const { t } = useTranslation('list'); const [input, setInput] = useState(''); const [result, setResult] = useState(''); const compute = (optionsValues: typeof initialValues, input: any) => { const { splitOperatorType, splitSeparator, groupNumber, itemSeparator, leftWrap, rightWrap, groupSeparator, deleteEmptyItems, padNonFullGroup, paddingChar } = optionsValues; setResult( groupList( splitOperatorType, splitSeparator, input, groupNumber, itemSeparator, leftWrap, rightWrap, groupSeparator, deleteEmptyItems, padNonFullGroup, paddingChar ) ); }; return ( } resultComponent={ } initialValues={initialValues} getGroups={({ values, updateField }) => [ { title: t('group.inputItemSeparator'), component: ( {splitOperators.map(({ title, description, type }) => ( updateField('splitOperatorType', type)} title={t(`group.splitOperators.${type}.title`)} description={t(`group.splitOperators.${type}.description`)} checked={values.splitOperatorType === type} /> ))} updateField('splitSeparator', val)} /> ) }, { title: t('group.groupSizeAndSeparators'), component: ( updateField('groupNumber', formatNumber(value, 1)) } /> updateField('itemSeparator', value)} /> updateField('groupSeparator', value)} /> updateField('leftWrap', value)} /> updateField('rightWrap', value)} /> ) }, { title: t('group.emptyItemsAndPadding'), component: ( updateField('deleteEmptyItems', value)} /> updateField('padNonFullGroup', value)} /> updateField('paddingChar', value)} /> ) } ]} compute={compute} setInput={setInput} /> ); }