From 00fd51a8e341d7662c492d08883809b0aa9f71e2 Mon Sep 17 00:00:00 2001 From: Corentin Thomasset Date: Sun, 6 Oct 2024 11:32:23 +0200 Subject: [PATCH] feat(ui): tool header --- .../modules/tools/components/tool-header.tsx | 30 +++++ .../random-port-generator.page.tsx | 40 ++++-- .../token-generator/token-generator.page.tsx | 116 ++++++++++++------ .../app/src/modules/tools/pages/tool.page.tsx | 13 +- .../app/src/modules/tools/tools.provider.tsx | 7 +- packages/app/src/modules/tools/tools.types.ts | 3 + 6 files changed, 156 insertions(+), 53 deletions(-) create mode 100644 packages/app/src/modules/tools/components/tool-header.tsx diff --git a/packages/app/src/modules/tools/components/tool-header.tsx b/packages/app/src/modules/tools/components/tool-header.tsx new file mode 100644 index 00000000..c50206ef --- /dev/null +++ b/packages/app/src/modules/tools/components/tool-header.tsx @@ -0,0 +1,30 @@ +import type { Component, ParentComponent } from 'solid-js'; +import { cn } from '@/modules/ui/utils/cn'; + +export const ToolHeader: ParentComponent<{ name: string; description: string; icon: string }> = (props) => { + return ( +
+
+ +
+
+
+
+ +
+

+ {props.name} +

+
+ {props.description} +
+
+
+ +
+
+ + {props.children} +
+ ); +}; diff --git a/packages/app/src/modules/tools/definitions/random-port-generator/random-port-generator.page.tsx b/packages/app/src/modules/tools/definitions/random-port-generator/random-port-generator.page.tsx index b2eca19c..711cdb5f 100644 --- a/packages/app/src/modules/tools/definitions/random-port-generator/random-port-generator.page.tsx +++ b/packages/app/src/modules/tools/definitions/random-port-generator/random-port-generator.page.tsx @@ -2,27 +2,45 @@ import type { Component } from 'solid-js'; import { CopyButton } from '@/modules/shared/copy/copy-button'; import { createRefreshableSignal } from '@/modules/shared/signals'; import { Button } from '@/modules/ui/components/button'; +import { Card, CardContent, CardHeader } from '@/modules/ui/components/card'; +import { ToolHeader } from '../../components/tool-header'; import { useCurrentTool } from '../../tools.provider'; import defaultDictionary from './locales/en.json'; import { generateRandomPort } from './random-port-generator.services'; const RandomPortGenerator: Component = () => { const [getPort, refreshPort] = createRefreshableSignal(generateRandomPort); - const { t } = useCurrentTool({ defaultDictionary }); + const { t, getTool } = useCurrentTool({ defaultDictionary }); return ( -
-
- {getPort()} -
+
+ -
- +
+ + +
- +
+ Random port: +
+ +
+ + {getPort()} +
+
+ +
+ + + +
+
+
); diff --git a/packages/app/src/modules/tools/definitions/token-generator/token-generator.page.tsx b/packages/app/src/modules/tools/definitions/token-generator/token-generator.page.tsx index aa896e2d..f8cafada 100644 --- a/packages/app/src/modules/tools/definitions/token-generator/token-generator.page.tsx +++ b/packages/app/src/modules/tools/definitions/token-generator/token-generator.page.tsx @@ -1,7 +1,12 @@ +import { CopyButton } from '@/modules/shared/copy/copy-button'; +import { createRefreshableSignal } from '@/modules/shared/signals'; +import { Button } from '@/modules/ui/components/button'; +import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@/modules/ui/components/card'; import { Switch, SwitchControl, SwitchLabel, SwitchThumb } from '@/modules/ui/components/switch'; import { TextArea } from '@/modules/ui/components/textarea'; import { TextFieldRoot } from '@/modules/ui/components/textfield'; import { type Component, createSignal } from 'solid-js'; +import { ToolHeader } from '../../components/tool-header'; import { useCurrentTool } from '../../tools.provider'; import defaultDictionary from './locales/en.json'; import { createToken } from './token-generator.models'; @@ -13,57 +18,90 @@ const TokenGeneratorTool: Component = () => { const [getUseSpecialCharacters, setUseSpecialCharacters] = createSignal(false); const [getLength] = createSignal(64); - const { t } = useCurrentTool({ defaultDictionary }); + const { t, getTool } = useCurrentTool({ defaultDictionary }); - const getToken = () => createToken({ + const [getToken, refreshToken] = createRefreshableSignal(() => createToken({ withUppercase: getUseUpperCase(), withLowercase: getUseLowerCase(), withNumbers: getUseNumbers(), withSymbols: getUseSpecialCharacters(), length: getLength(), - }); + })); return ( -
- - - - - - {t('uppercase')} - - +
+ - - - - - - {t('lowercase')} - - +
+ + + + Configuration + + - - - - - - {t('numbers')} - - + + + + + + + {t('uppercase')} + + - - - - - - {t('symbols')} - - + + + + + + {t('lowercase')} + + - -