diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e6db41c..ea76cdc 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,11 +4,10 @@
-
+
-
-
+
@@ -205,15 +204,9 @@
-
-
-
-
- 1719187088285
-
-
-
- 1719187088285
+
+
+
@@ -599,7 +592,15 @@
1720564711406
-
+
+
+ 1720565760853
+
+
+
+ 1720565760853
+
+
@@ -643,7 +644,6 @@
-
@@ -668,7 +668,8 @@
-
+
+
diff --git a/src/pages/list/find-unique/index.tsx b/src/pages/list/find-unique/index.tsx
index 225e08f..5d5305e 100644
--- a/src/pages/list/find-unique/index.tsx
+++ b/src/pages/list/find-unique/index.tsx
@@ -4,12 +4,11 @@ import ToolTextInput from '../../../components/input/ToolTextInput';
import ToolTextResult from '../../../components/result/ToolTextResult';
import * as Yup from 'yup';
import ToolOptions from '../../../components/options/ToolOptions';
-import { SplitOperatorType, findUniqueCompute } from './service';
+import { findUniqueCompute, SplitOperatorType } from './service';
import ToolInputAndResult from '../../../components/ToolInputAndResult';
import SimpleRadio from '../../../components/options/SimpleRadio';
import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
import CheckboxWithDesc from '../../../components/options/CheckboxWithDesc';
-import SelectWithDesc from '../../../components/options/SelectWithDesc';
const initialValues = {
splitOperatorType: 'symbol' as SplitOperatorType,
@@ -143,6 +142,14 @@ export default function FindUnique() {
checked={values.absolutelyUnique}
onChange={(value) => updateField('absolutelyUnique', value)}
/>
+ updateField('caseSensitive', value)}
+ />
)
}
diff --git a/src/pages/list/group/index.tsx b/src/pages/list/group/index.tsx
index 1bc9560..73ea11f 100644
--- a/src/pages/list/group/index.tsx
+++ b/src/pages/list/group/index.tsx
@@ -1,11 +1,187 @@
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 { groupList, SplitOperatorType } from './service';
+import ToolInputAndResult from '../../../components/ToolInputAndResult';
+import SimpleRadio from '../../../components/options/SimpleRadio';
+import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
+import CheckboxWithDesc from '../../../components/options/CheckboxWithDesc';
-const initialValues = {};
-const validationSchema = Yup.object({
- // splitSeparator: Yup.string().required('The separator is required')
-});
-export default function Group() {
- return Lorem ipsum;
+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() {
+ 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
+ )
+ );
+ };
+ const validationSchema = Yup.object({
+ // splitSeparator: Yup.string().required('The separator is required')
+ });
+
+ return (
+
+
+ }
+ result={}
+ />
+ [
+ {
+ title: 'Input Item Separator',
+ component: (
+
+ {splitOperators.map(({ title, description, type }) => (
+ updateField('splitOperatorType', type)}
+ title={title}
+ description={description}
+ checked={values.splitOperatorType === type}
+ />
+ ))}
+ updateField('splitSeparator', val)}
+ />
+
+ )
+ },
+ {
+ title: 'Group Size and Separators',
+ component: (
+
+
+ updateField('groupNumber', Number(value))
+ }
+ />
+ updateField('itemSeparator', value)}
+ />
+ updateField('groupSeparator', value)}
+ />
+ updateField('leftWrap', value)}
+ />
+ updateField('rightWrap', value)}
+ />
+
+ )
+ },
+ {
+ title: 'Empty Items and Padding',
+ component: (
+
+ updateField('deleteEmptyItems', value)}
+ />
+ updateField('padNonFullGroup', value)}
+ />
+ updateField('paddingChar', value)}
+ />
+
+ )
+ }
+ ]}
+ initialValues={initialValues}
+ input={input}
+ validationSchema={validationSchema}
+ />
+
+ );
}