diff --git a/react-ui/src/index.tsx b/react-ui/src/index.tsx index 2d157fd9b9eceb58123071736402641ec615e88c..48f57dcff5b972dc1eec466f219251c483c2b943 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 840784c0f346d591d2d3453d19036b37153a84c4..9462fa4dbcb34870255d1c41aa4dd58334e4831d 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 0000000000000000000000000000000000000000..e9a83034eb2a618eeb4f1a3261caafd63ff083a3 --- /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 e4cd80c172ac82f49a5a74c0cf937149e78e0483..0000000000000000000000000000000000000000 --- 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