From 8722d25171e2e3ddb1a87166e2016886711e1650 Mon Sep 17 00:00:00 2001 From: Luke Date: Fri, 30 Dec 2022 14:50:15 +0100 Subject: [PATCH] refactor(web/textui): textui mantine rewrite --- web/src/features/textui/TextUI.tsx | 75 +++++++++++++++--------------- web/src/main.tsx | 6 ++- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/web/src/features/textui/TextUI.tsx b/web/src/features/textui/TextUI.tsx index b59a180..d5f171b 100644 --- a/web/src/features/textui/TextUI.tsx +++ b/web/src/features/textui/TextUI.tsx @@ -1,24 +1,49 @@ import React from 'react'; import { useNuiEvent } from '../../hooks/useNuiEvent'; -import { Box, Flex, ScaleFade } from '@chakra-ui/react'; +import { Box, createStyles, Group } from '@mantine/core'; import ReactMarkdown from 'react-markdown'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { IconProp } from '@fortawesome/fontawesome-svg-core'; +type Position = 'right-center' | 'left-center' | 'top-center'; + export interface TextUiProps { text: string; - position?: 'right-center' | 'left-center' | 'top-center'; + position?: Position; icon?: IconProp; iconColor?: string; style?: React.CSSProperties; } +const useStyles = createStyles((theme, params: { position?: Position }) => ({ + wrapper: { + height: '100%', + width: '100%', + position: 'absolute', + display: 'flex', + alignItems: params.position === 'top-center' ? 'baseline' : 'center', + justifyContent: + params.position === 'right-center' ? 'flex-end' : params.position === 'left-center' ? 'flex-start' : 'center', + }, + container: { + fontSize: 16, + padding: 12, + margin: 8, + backgroundColor: theme.colors.dark[6], + color: theme.colors.dark[0], + fontFamily: 'Roboto', + borderRadius: theme.radius.sm, + boxShadow: theme.shadows.sm, + }, +})); + const TextUI: React.FC = () => { const [data, setData] = React.useState({ text: '', position: 'right-center', }); const [visible, setVisible] = React.useState(false); + const { classes } = useStyles({ position: data.position }); useNuiEvent('textUi', (data) => { if (!data.position) data.position = 'right-center'; // Default right position @@ -29,42 +54,18 @@ const TextUI: React.FC = () => { useNuiEvent('textUiHide', () => setVisible(false)); return ( - - - - - {data.icon && ( - - )} - {data.text} - + <> + {visible && ( + + + + {data.icon && } + {data.text} + + - - + )} + ); }; diff --git a/web/src/main.tsx b/web/src/main.tsx index f945ee5..d28a398 100644 --- a/web/src/main.tsx +++ b/web/src/main.tsx @@ -31,7 +31,11 @@ ReactDOM.createRoot(root!).render(