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