fix: radio and list sort init

This commit is contained in:
Ibrahima G. Coulibaly
2024-06-27 20:27:03 +01:00
parent 8650703266
commit a6eb5d59e9
11 changed files with 180 additions and 79 deletions

View File

@@ -1,2 +1,3 @@
import { tool as listSort } from './sort/meta';
export const listTools = [];
export const listTools = [listSort];

View File

@@ -1,11 +1,107 @@
import { Box } from '@mui/material';
import React from 'react';
import React, { useState } from 'react';
import ToolTextInput from '../../../components/input/ToolTextInput';
import ToolTextResult from '../../../components/result/ToolTextResult';
import * as Yup from 'yup';
import ToolOptions from '../../../components/options/ToolOptions';
import { Sort, SortingMethod, SplitOperatorType } from './service';
import ToolInputAndResult from '../../../components/ToolInputAndResult';
import SimpleRadio from '../../../components/options/SimpleRadio';
const initialValues = {};
const validationSchema = Yup.object({
// splitSeparator: Yup.string().required('The separator is required')
});
export default function Sort() {
return <Box>Lorem ipsum</Box>;
const initialValues = {
splitSeparatorType: 'symbol' as SplitOperatorType,
sortingMethod: 'alphabetic' as SortingMethod,
increasing: true,
splitSeparator: ',',
joinSeparator: ',',
removeDuplicated: false,
caseSensitive: false
};
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 SplitText() {
const [input, setInput] = useState<string>('');
const [result, setResult] = useState<string>('');
// const formRef = useRef<FormikProps<typeof initialValues>>(null);
const computeExternal = (optionsValues: typeof initialValues, input: any) => {
const {
splitSeparatorType,
joinSeparator,
splitSeparator,
increasing,
caseSensitive,
removeDuplicated,
sortingMethod
} = optionsValues;
setResult(
Sort(
sortingMethod,
splitSeparatorType,
input,
increasing,
splitSeparator,
joinSeparator,
removeDuplicated,
caseSensitive
)
);
};
const validationSchema = Yup.object({
// splitSeparator: Yup.string().required('The separator is required')
});
return (
<Box>
<ToolInputAndResult
input={
<ToolTextInput
title={'Input list'}
value={input}
onChange={setInput}
/>
}
result={<ToolTextResult title={'Sorted list'} value={result} />}
/>
<ToolOptions
compute={computeExternal}
getGroups={({ values, setFieldValue, handleChange }) => [
{
title: 'Input item separator',
component: splitOperators.map(({ title, description, type }) => (
<SimpleRadio
key={type}
onClick={() => setFieldValue('splitSeparatorType', type)}
title={title}
description={description}
checked={values.splitSeparatorType === type}
/>
))
},
{
title: 'Sort method',
component: <Box></Box>
}
]}
initialValues={initialValues}
input={input}
validationSchema={validationSchema}
/>
</Box>
);
}

View File

@@ -6,8 +6,9 @@ export const tool = defineTool('list', {
name: 'Sort',
path: 'sort',
// image,
description: '',
shortDescription: '',
description:
'This is a super simple browser-based application that sorts items in a list and arranges them in increasing or decreasing order. You can sort the items alphabetically, numerically, or by their length. You can also remove duplicate and empty items, as well as trim individual items that have whitespace around them. You can use any separator character to separate the input list items or alternatively use a regular expression to separate them. Additionally, you can create a new delimiter for the sorted output list.',
shortDescription: 'Quickly sort a list',
keywords: ['sort'],
component: lazy(() => import('./index'))
});

View File

@@ -67,7 +67,7 @@ export default function SplitText() {
withTextField ? (
<RadioWithTextField
key={type}
radioValue={type}
checked={type === values.extractionType}
title={title}
fieldName={'extractionType'}
description={description}
@@ -76,9 +76,7 @@ export default function SplitText() {
? values[textValueAccessor].toString()
: ''
}
onRadioChange={(type) =>
setFieldValue('extractionType', type)
}
onRadioClick={() => setFieldValue('extractionType', type)}
onTextChange={(val) =>
textValueAccessor
? setFieldValue(textValueAccessor, val)
@@ -88,9 +86,8 @@ export default function SplitText() {
) : (
<SimpleRadio
key={title}
onChange={() => setFieldValue('extractionType', type)}
fieldName={'extractionType'}
value={values.extractionType}
onClick={() => setFieldValue('extractionType', type)}
checked={values.extractionType === type}
description={description}
title={title}
/>

View File

@@ -122,14 +122,12 @@ export default function SplitText() {
component: splitOperators.map(({ title, description, type }) => (
<RadioWithTextField
key={type}
radioValue={type}
checked={type === values.splitSeparatorType}
title={title}
fieldName={'splitSeparatorType'}
description={description}
value={values[`${type}Value`]}
onRadioChange={(type) =>
setFieldValue('splitSeparatorType', type)
}
onRadioClick={() => setFieldValue('splitSeparatorType', type)}
onTextChange={(val) => setFieldValue(`${type}Value`, val)}
/>
))