diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5336914..6b54db0 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,30 +6,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + - + @@ -476,8 +456,8 @@ - + diff --git a/src/pages/tools/number/index.ts b/src/pages/tools/number/index.ts index 38faf14..fa4facc 100644 --- a/src/pages/tools/number/index.ts +++ b/src/pages/tools/number/index.ts @@ -8,5 +8,7 @@ export const numberTools = [ numberSum, numberGenerate, numberArithmeticSequence, + numberRandomPortGenerator, + numberRandomNumberGenerator, ...genericCalcTools ]; diff --git a/src/pages/tools/number/random-number-generator/index.tsx b/src/pages/tools/number/random-number-generator/index.tsx index ec988a2..ae4f471 100644 --- a/src/pages/tools/number/random-number-generator/index.tsx +++ b/src/pages/tools/number/random-number-generator/index.tsx @@ -1,10 +1,10 @@ -import { Box, Alert, Chip } from '@mui/material'; +import { Alert, Box } from '@mui/material'; import { useState } from 'react'; import ToolContent from '@components/ToolContent'; import { ToolComponentProps } from '@tools/defineTool'; import ToolTextResult from '@components/result/ToolTextResult'; import { GetGroupsType } from '@components/options/ToolOptions'; -import { generateRandomNumbers, validateInput, formatNumbers } from './service'; +import { formatNumbers, generateRandomNumbers, validateInput } from './service'; import { InitialValuesType, RandomNumberResult } from './types'; import { useTranslation } from 'react-i18next'; import TextFieldWithDesc from '@components/options/TextFieldWithDesc'; @@ -24,7 +24,7 @@ export default function RandomNumberGenerator({ title, longDescription }: ToolComponentProps) { - const { t } = useTranslation(); + const { t } = useTranslation('number'); const [result, setResult] = useState(null); const [error, setError] = useState(null); const [formattedResult, setFormattedResult] = useState(''); @@ -55,7 +55,7 @@ export default function RandomNumberGenerator({ setFormattedResult(formatted); } catch (err) { console.error('Random number generation failed:', err); - setError(t('number:randomNumberGenerator.error.generationFailed')); + setError(t('randomNumberGenerator.error.generationFailed')); } }; @@ -64,7 +64,7 @@ export default function RandomNumberGenerator({ updateField }) => [ { - title: t('number:randomNumberGenerator.options.range.title'), + title: t('randomNumberGenerator.options.range.title'), component: ( updateField('count', parseInt(value) || 10)} description={t( - 'number:randomNumberGenerator.options.generation.countDescription' + 'randomNumberGenerator.options.generation.countDescription' )} inputProps={{ type: 'number', @@ -116,48 +116,48 @@ export default function RandomNumberGenerator({ updateField('allowDecimals', value)} description={t( - 'number:randomNumberGenerator.options.generation.allowDecimals.description' + 'randomNumberGenerator.options.generation.allowDecimals.description' )} /> updateField('allowDuplicates', value)} description={t( - 'number:randomNumberGenerator.options.generation.allowDuplicates.description' + 'randomNumberGenerator.options.generation.allowDuplicates.description' )} /> updateField('sortResults', value)} description={t( - 'number:randomNumberGenerator.options.generation.sortResults.description' + 'randomNumberGenerator.options.generation.sortResults.description' )} /> ) }, { - title: t('number:randomNumberGenerator.options.output.title'), + title: t('randomNumberGenerator.options.output.title'), component: ( updateField('separator', value)} description={t( - 'number:randomNumberGenerator.options.output.separatorDescription' + 'randomNumberGenerator.options.output.separatorDescription' )} inputProps={{ 'data-testid': 'separator-input' @@ -183,52 +183,17 @@ export default function RandomNumberGenerator({ )} {result && ( - - - - - - - {result.hasDuplicates && ( - - )} - {result.isSorted && ( - - )} - - + )} } toolInfo={{ - title: t('number:randomNumberGenerator.info.title'), + title: t('randomNumberGenerator.info.title'), description: - longDescription || t('number:randomNumberGenerator.info.description') + longDescription || t('randomNumberGenerator.info.description') }} /> ); diff --git a/src/pages/tools/number/random-port-generator/index.tsx b/src/pages/tools/number/random-port-generator/index.tsx index 6621f79..338fa91 100644 --- a/src/pages/tools/number/random-port-generator/index.tsx +++ b/src/pages/tools/number/random-port-generator/index.tsx @@ -1,22 +1,20 @@ -import { Box, Alert, Chip } from '@mui/material'; +import { Alert, Box } from '@mui/material'; import { useState } from 'react'; import ToolContent from '@components/ToolContent'; import { ToolComponentProps } from '@tools/defineTool'; import ToolTextResult from '@components/result/ToolTextResult'; import { GetGroupsType } from '@components/options/ToolOptions'; import { - generateRandomPorts, - validateInput, formatPorts, + generateRandomPorts, getPortRangeInfo, - isCommonPort, - getPortService + validateInput } from './service'; import { InitialValuesType, RandomPortResult } from './types'; import { useTranslation } from 'react-i18next'; import TextFieldWithDesc from '@components/options/TextFieldWithDesc'; import CheckboxWithDesc from '@components/options/CheckboxWithDesc'; -import RadioWithTextField from '@components/options/RadioWithTextField'; +import SimpleRadio from '@components/options/SimpleRadio'; const initialValues: InitialValuesType = { portRange: 'registered', @@ -32,7 +30,7 @@ export default function RandomPortGenerator({ title, longDescription }: ToolComponentProps) { - const { t } = useTranslation(); + const { t } = useTranslation('number'); const [result, setResult] = useState(null); const [error, setError] = useState(null); const [formattedResult, setFormattedResult] = useState(''); @@ -59,40 +57,43 @@ export default function RandomPortGenerator({ setFormattedResult(formatted); } catch (err) { console.error('Random port generation failed:', err); - setError(t('number:randomPortGenerator.error.generationFailed')); + setError(t('randomPortGenerator.error.generationFailed')); } }; - + const portOptions = [ + { + value: 'well-known', + label: t('randomPortGenerator.options.range.wellKnown') + }, + { + value: 'registered', + label: t('randomPortGenerator.options.range.registered') + }, + { + value: 'dynamic', + label: t('randomPortGenerator.options.range.dynamic') + }, + { + value: 'custom', + label: t('randomPortGenerator.options.range.custom') + } + ] as const; const getGroups: GetGroupsType | null = ({ values, updateField }) => [ { - title: t('number:randomPortGenerator.options.range.title'), + title: t('randomPortGenerator.options.range.title'), component: ( - updateField('portRange', value)} - options={[ - { - value: 'well-known', - label: t('number:randomPortGenerator.options.range.wellKnown') - }, - { - value: 'registered', - label: t('number:randomPortGenerator.options.range.registered') - }, - { - value: 'dynamic', - label: t('number:randomPortGenerator.options.range.dynamic') - }, - { - value: 'custom', - label: t('number:randomPortGenerator.options.range.custom') - } - ]} - /> + {portOptions.map((option) => ( + updateField('portRange', option.value)} + /> + ))} {values.portRange === 'custom' && ( @@ -102,7 +103,7 @@ export default function RandomPortGenerator({ updateField('minPort', parseInt(value) || 1024) } description={t( - 'number:randomPortGenerator.options.range.minPortDescription' + 'randomPortGenerator.options.range.minPortDescription' )} inputProps={{ type: 'number', @@ -117,7 +118,7 @@ export default function RandomPortGenerator({ updateField('maxPort', parseInt(value) || 49151) } description={t( - 'number:randomPortGenerator.options.range.maxPortDescription' + 'randomPortGenerator.options.range.maxPortDescription' )} inputProps={{ type: 'number', @@ -140,14 +141,14 @@ export default function RandomPortGenerator({ ) }, { - title: t('number:randomPortGenerator.options.generation.title'), + title: t('randomPortGenerator.options.generation.title'), component: ( updateField('count', parseInt(value) || 5)} description={t( - 'number:randomPortGenerator.options.generation.countDescription' + 'randomPortGenerator.options.generation.countDescription' )} inputProps={{ type: 'number', @@ -159,37 +160,37 @@ export default function RandomPortGenerator({ updateField('allowDuplicates', value)} description={t( - 'number:randomPortGenerator.options.generation.allowDuplicates.description' + 'randomPortGenerator.options.generation.allowDuplicates.description' )} /> updateField('sortResults', value)} description={t( - 'number:randomPortGenerator.options.generation.sortResults.description' + 'randomPortGenerator.options.generation.sortResults.description' )} /> ) }, { - title: t('number:randomPortGenerator.options.output.title'), + title: t('randomPortGenerator.options.output.title'), component: ( updateField('separator', value)} description={t( - 'number:randomPortGenerator.options.output.separatorDescription' + 'randomPortGenerator.options.output.separatorDescription' )} inputProps={{ 'data-testid': 'separator-input' @@ -215,80 +216,17 @@ export default function RandomPortGenerator({ )} {result && ( - - - - - - - {result.hasDuplicates && ( - - )} - {result.isSorted && ( - - )} - - - {result.ports.length > 0 && ( - - - {t('number:randomPortGenerator.result.portDetails')}: - - - {result.ports.slice(0, 10).map((port, index) => ( - - ))} - {result.ports.length > 10 && ( - - )} - - - )} - + )} } toolInfo={{ - title: t('number:randomPortGenerator.info.title'), + title: t('randomPortGenerator.info.title'), description: - longDescription || t('number:randomPortGenerator.info.description') + longDescription || t('randomPortGenerator.info.description') }} /> ); diff --git a/src/pages/tools/number/random-port-generator/meta.ts b/src/pages/tools/number/random-port-generator/meta.ts index d914b3d..580de1a 100644 --- a/src/pages/tools/number/random-port-generator/meta.ts +++ b/src/pages/tools/number/random-port-generator/meta.ts @@ -6,7 +6,8 @@ export const tool = defineTool('number', { name: 'number:randomPortGenerator.title', description: 'number:randomPortGenerator.description', shortDescription: 'number:randomPortGenerator.shortDescription', - longDescription: 'number:randomPortGenerator.longDescription' + longDescription: 'number:randomPortGenerator.longDescription', + userTypes: ['developers'] }, path: 'random-port-generator', icon: 'mdi:network',