Skip to content
Snippets Groups Projects
Commit 3b38b5c0 authored by matthiasf's avatar matthiasf
Browse files

add utils provider

parent 6c10a9e4
No related branches found
No related tags found
2 merge requests!1162Draft: Ui integration,!1128UI: Implement yang model view
import { MenuProvider } from '@provider/menu/menu.provider' import { MenuProvider } from '@provider/menu/menu.provider'
import { UtilsProvider } from '@provider/utils.provider'
import i18next from 'i18next' import i18next from 'i18next'
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom/client' import ReactDOM from 'react-dom/client'
...@@ -26,10 +27,12 @@ ReactDOM.createRoot(document.getElementById("root")).render( ...@@ -26,10 +27,12 @@ ReactDOM.createRoot(document.getElementById("root")).render(
<Provider store={store}> <Provider store={store}>
<PersistGate loading={null} persistor={persistor}> <PersistGate loading={null} persistor={persistor}>
<I18nextProvider i18n={i18next}> <I18nextProvider i18n={i18next}>
<MenuProvider> <UtilsProvider>
{installToastify()} <MenuProvider>
<RouterProvider router={router} /> {installToastify()}
</MenuProvider> <RouterProvider router={router} />
</MenuProvider>
</UtilsProvider>
</I18nextProvider> </I18nextProvider>
</PersistGate> </PersistGate>
</Provider> </Provider>
......
import { faAlignRight, faCopy, faPenToSquare, faTrashCan } from "@fortawesome/free-solid-svg-icons" import { faAlignRight, faCopy, faPenToSquare, faTrashCan } from "@fortawesome/free-solid-svg-icons"
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
import { useMenu } from "@provider/menu/menu.provider" 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 React, { Suspense, useEffect, useMemo, useRef } from "react"
import { Table } from "react-bootstrap" import { Table } from "react-bootstrap"
import { useTranslation } from "react-i18next" import { useTranslation } from "react-i18next"
...@@ -17,6 +17,7 @@ export const JsonViewer = ({ json }: JsonViewerProbs) => { ...@@ -17,6 +17,7 @@ export const JsonViewer = ({ json }: JsonViewerProbs) => {
const { subscribe } = useMenu(); const { subscribe } = useMenu();
const htmlContainer = useRef(null); const htmlContainer = useRef(null);
const { t } = useTranslation('common'); const { t } = useTranslation('common');
const { toClipboard } = useUtils();
useEffect(() => { useEffect(() => {
if (htmlContainer.current) { if (htmlContainer.current) {
......
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment