From 3b38b5c065c66781d2a7641b31ef0f76d023bfd9 Mon Sep 17 00:00:00 2001 From: matthiasf <matthias.feyll@@stud.h-da.de> Date: Mon, 25 Nov 2024 19:17:06 +0100 Subject: [PATCH] add utils provider --- react-ui/src/index.tsx | 11 +++--- .../json_viewer/view/json_viewer.view.tsx | 3 +- .../src/shared/provider/utils.provider.tsx | 36 +++++++++++++++++++ react-ui/src/shared/utils/functions.ts | 8 ----- 4 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 react-ui/src/shared/provider/utils.provider.tsx delete mode 100644 react-ui/src/shared/utils/functions.ts diff --git a/react-ui/src/index.tsx b/react-ui/src/index.tsx index 2d157fd9b..48f57dcff 100755 --- a/react-ui/src/index.tsx +++ b/react-ui/src/index.tsx @@ -1,4 +1,5 @@ import { MenuProvider } from '@provider/menu/menu.provider' +import { UtilsProvider } from '@provider/utils.provider' import i18next from 'i18next' import React from 'react' import ReactDOM from 'react-dom/client' @@ -26,10 +27,12 @@ ReactDOM.createRoot(document.getElementById("root")).render( <Provider store={store}> <PersistGate loading={null} persistor={persistor}> <I18nextProvider i18n={i18next}> - <MenuProvider> - {installToastify()} - <RouterProvider router={router} /> - </MenuProvider> + <UtilsProvider> + <MenuProvider> + {installToastify()} + <RouterProvider router={router} /> + </MenuProvider> + </UtilsProvider> </I18nextProvider> </PersistGate> </Provider> diff --git a/react-ui/src/shared/components/json_viewer/view/json_viewer.view.tsx b/react-ui/src/shared/components/json_viewer/view/json_viewer.view.tsx index 840784c0f..9462fa4db 100755 --- a/react-ui/src/shared/components/json_viewer/view/json_viewer.view.tsx +++ b/react-ui/src/shared/components/json_viewer/view/json_viewer.view.tsx @@ -1,7 +1,7 @@ import { faAlignRight, faCopy, faPenToSquare, faTrashCan } from "@fortawesome/free-solid-svg-icons" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { useMenu } from "@provider/menu/menu.provider" -import { toClipboard } from "@utils/functions" +import { useUtils } from "@provider/utils.provider" import React, { Suspense, useEffect, useMemo, useRef } from "react" import { Table } from "react-bootstrap" import { useTranslation } from "react-i18next" @@ -17,6 +17,7 @@ export const JsonViewer = ({ json }: JsonViewerProbs) => { const { subscribe } = useMenu(); const htmlContainer = useRef(null); const { t } = useTranslation('common'); + const { toClipboard } = useUtils(); useEffect(() => { if (htmlContainer.current) { diff --git a/react-ui/src/shared/provider/utils.provider.tsx b/react-ui/src/shared/provider/utils.provider.tsx new file mode 100644 index 000000000..e9a83034e --- /dev/null +++ b/react-ui/src/shared/provider/utils.provider.tsx @@ -0,0 +1,36 @@ +import { createContext, useContext, useMemo } from "react"; +import { useTranslation } from "react-i18next"; +import { toast } from "react-toastify"; + +interface UtilsProviderType { + toClipboard: (text: string) => void +} + +const UtilsContext = createContext<UtilsProviderType>({ + toClipboard: function (text: string): void { + throw new Error("Function not implemented."); + } +}) + +export const UtilsProvider = ({ children }) => { + const { t } = useTranslation('common'); + + const value = useMemo<UtilsProviderType>(() => { + return { + toClipboard(text) { + navigator.clipboard.writeText(text); + toast.info(t('global.toast.copied')) + }, + } as UtilsProviderType + }, []) + + return ( + <UtilsContext.Provider value={value}> + {children} + </UtilsContext.Provider> + ) +} + +export const useUtils = () => { + return useContext(UtilsContext) +} \ No newline at end of file diff --git a/react-ui/src/shared/utils/functions.ts b/react-ui/src/shared/utils/functions.ts deleted file mode 100644 index e4cd80c17..000000000 --- a/react-ui/src/shared/utils/functions.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { t } from "i18next"; -import { toast } from "react-toastify"; - - -export const toClipboard = (text: string) => { - navigator.clipboard.writeText(text); - toast.info(t('global.toast.copied')) -} \ No newline at end of file -- GitLab