@tolgee/web 4.9.3-rc.128edeb.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +31 -0
- package/dist/tolgee-backend-fetch.cjs.min.js +2 -0
- package/dist/tolgee-backend-fetch.cjs.min.js.map +1 -0
- package/dist/tolgee-backend-fetch.esm.min.mjs +2 -0
- package/dist/tolgee-backend-fetch.esm.min.mjs.map +1 -0
- package/dist/tolgee-backend-fetch.umd.min.js +2 -0
- package/dist/tolgee-backend-fetch.umd.min.js.map +1 -0
- package/dist/tolgee-context-ui.cjs.min.js +143 -0
- package/dist/tolgee-context-ui.cjs.min.js.map +1 -0
- package/dist/tolgee-context-ui.esm.min.mjs +143 -0
- package/dist/tolgee-context-ui.esm.min.mjs.map +1 -0
- package/dist/tolgee-context-ui.umd.min.js +143 -0
- package/dist/tolgee-context-ui.umd.min.js.map +1 -0
- package/dist/tolgee-in-context-tools.cjs.min.js +143 -0
- package/dist/tolgee-in-context-tools.cjs.min.js.map +1 -0
- package/dist/tolgee-in-context-tools.esm.min.mjs +143 -0
- package/dist/tolgee-in-context-tools.esm.min.mjs.map +1 -0
- package/dist/tolgee-in-context-tools.umd.min.js +143 -0
- package/dist/tolgee-in-context-tools.umd.min.js.map +1 -0
- package/dist/tolgee-invisible-observer.cjs.min.js +2 -0
- package/dist/tolgee-invisible-observer.cjs.min.js.map +1 -0
- package/dist/tolgee-invisible-observer.esm.min.mjs +2 -0
- package/dist/tolgee-invisible-observer.esm.min.mjs.map +1 -0
- package/dist/tolgee-invisible-observer.umd.min.js +2 -0
- package/dist/tolgee-invisible-observer.umd.min.js.map +1 -0
- package/dist/tolgee-language-detector.cjs.min.js +2 -0
- package/dist/tolgee-language-detector.cjs.min.js.map +1 -0
- package/dist/tolgee-language-detector.esm.min.mjs +2 -0
- package/dist/tolgee-language-detector.esm.min.mjs.map +1 -0
- package/dist/tolgee-language-detector.umd.min.js +2 -0
- package/dist/tolgee-language-detector.umd.min.js.map +1 -0
- package/dist/tolgee-language-storage.cjs.min.js +2 -0
- package/dist/tolgee-language-storage.cjs.min.js.map +1 -0
- package/dist/tolgee-language-storage.esm.min.mjs +2 -0
- package/dist/tolgee-language-storage.esm.min.mjs.map +1 -0
- package/dist/tolgee-language-storage.umd.min.js +2 -0
- package/dist/tolgee-language-storage.umd.min.js.map +1 -0
- package/dist/tolgee-text-observer.cjs.min.js +2 -0
- package/dist/tolgee-text-observer.cjs.min.js.map +1 -0
- package/dist/tolgee-text-observer.esm.min.mjs +2 -0
- package/dist/tolgee-text-observer.esm.min.mjs.map +1 -0
- package/dist/tolgee-text-observer.umd.min.js +2 -0
- package/dist/tolgee-text-observer.umd.min.js.map +1 -0
- package/dist/tolgee-web-tolgee.cjs.min.js +2 -0
- package/dist/tolgee-web-tolgee.cjs.min.js.map +1 -0
- package/dist/tolgee-web-tolgee.esm.min.mjs +2 -0
- package/dist/tolgee-web-tolgee.esm.min.mjs.map +1 -0
- package/dist/tolgee-web-tolgee.umd.min.js +2 -0
- package/dist/tolgee-web-tolgee.umd.min.js.map +1 -0
- package/dist/tolgee-web.cjs.js +27076 -0
- package/dist/tolgee-web.cjs.js.map +1 -0
- package/dist/tolgee-web.cjs.min.js +143 -0
- package/dist/tolgee-web.cjs.min.js.map +1 -0
- package/dist/tolgee-web.esm.js +27052 -0
- package/dist/tolgee-web.esm.js.map +1 -0
- package/dist/tolgee-web.esm.min.mjs +143 -0
- package/dist/tolgee-web.esm.min.mjs.map +1 -0
- package/dist/tolgee-web.umd.js +27082 -0
- package/dist/tolgee-web.umd.js.map +1 -0
- package/dist/tolgee-web.umd.min.js +143 -0
- package/dist/tolgee-web.umd.min.js.map +1 -0
- package/lib/BackendFetch.d.ts +4 -0
- package/lib/BrowserExtensionPlugin/BrowserExtensionPlugin.d.ts +8 -0
- package/lib/BrowserExtensionPlugin/constants.d.ts +3 -0
- package/lib/BrowserExtensionPlugin/loadInContextLib.d.ts +1 -0
- package/lib/ContextUi.d.ts +2 -0
- package/lib/DevBackend.d.ts +2 -0
- package/lib/DevTools.d.ts +3 -0
- package/lib/InContextTools.d.ts +2 -0
- package/lib/InvisibleObserver.d.ts +2 -0
- package/lib/LanguageDetector.d.ts +3 -0
- package/lib/LanguageStorage.d.ts +3 -0
- package/lib/TextObserver.d.ts +2 -0
- package/lib/WebTolgee.d.ts +3 -0
- package/lib/constants.d.ts +5 -0
- package/lib/index.d.ts +5 -0
- package/lib/observers/general/DomHelper.d.ts +4 -0
- package/lib/observers/general/ElementHighlighter.d.ts +10 -0
- package/lib/observers/general/ElementMeta.d.ts +3 -0
- package/lib/observers/general/ElementRegistry.d.ts +11 -0
- package/lib/observers/general/ElementStore.d.ts +10 -0
- package/lib/observers/general/GeneralObserver.d.ts +12 -0
- package/lib/observers/general/MouseEventHandler.d.ts +13 -0
- package/lib/observers/general/NodeHandler.d.ts +6 -0
- package/lib/observers/general/helpers.d.ts +7 -0
- package/lib/observers/invisible/InvisibleWrapper.d.ts +2 -0
- package/lib/observers/invisible/ValueMemory.d.ts +5 -0
- package/lib/observers/invisible/encoderPolyfill.d.ts +8 -0
- package/lib/observers/invisible/secret.d.ts +6 -0
- package/lib/observers/text/TextWrapper.d.ts +8 -0
- package/lib/observers/text/helpers.d.ts +3 -0
- package/lib/tools/decodeApiKey.d.ts +1 -0
- package/lib/tools/extension.d.ts +28 -0
- package/lib/typedIndex.d.ts +11 -0
- package/lib/types.d.ts +28 -0
- package/lib/ui/KeyContextMenu/KeyContextMenu.d.ts +19 -0
- package/lib/ui/KeyDialog/KeyDialog.d.ts +23 -0
- package/lib/ui/KeyDialog/KeyForm.d.ts +2 -0
- package/lib/ui/KeyDialog/LanguageSelect.d.ts +2 -0
- package/lib/ui/KeyDialog/NewWindow.d.ts +2 -0
- package/lib/ui/KeyDialog/NsSelect.d.ts +9 -0
- package/lib/ui/KeyDialog/ScreenshotGallery/ExtensionPrompt.d.ts +6 -0
- package/lib/ui/KeyDialog/ScreenshotGallery/ScreenshotDetail.d.ts +8 -0
- package/lib/ui/KeyDialog/ScreenshotGallery/ScreenshotDropzone.d.ts +6 -0
- package/lib/ui/KeyDialog/ScreenshotGallery/ScreenshotGallery.d.ts +2 -0
- package/lib/ui/KeyDialog/ScreenshotGallery/ScreenshotThumbnail.d.ts +8 -0
- package/lib/ui/KeyDialog/ScreenshotGallery/utils.d.ts +3 -0
- package/lib/ui/KeyDialog/TranslationDialog.d.ts +2 -0
- package/lib/ui/KeyDialog/TranslationDialogContextProvider.d.ts +128 -0
- package/lib/ui/KeyDialog/TranslationDialogWrapper.d.ts +2 -0
- package/lib/ui/KeyDialog/TranslationFields.d.ts +2 -0
- package/lib/ui/KeyDialog/languageHelpers.d.ts +12 -0
- package/lib/ui/KeyDialog/tools.d.ts +3 -0
- package/lib/ui/ThemeProvider.d.ts +2 -0
- package/lib/ui/client/QueryProvider.d.ts +12 -0
- package/lib/ui/client/apiSchema.generated.d.ts +3283 -0
- package/lib/ui/client/client.d.ts +5 -0
- package/lib/ui/client/types.d.ts +58 -0
- package/lib/ui/client/useQueryApi.d.ts +84 -0
- package/lib/ui/common/BodyEnd.d.ts +13 -0
- package/lib/ui/common/FieldTitle.d.ts +2 -0
- package/lib/ui/common/LoadingButton.d.ts +7 -0
- package/lib/ui/index.d.ts +13 -0
- package/lib/ui/tools/createProvider.d.ts +5 -0
- package/lib/ui/tools/isLanguagePermitted.d.ts +1 -0
- package/lib/ui/tools/sleep.d.ts +1 -0
- package/package.json +91 -0
- package/src/BackendFetch.ts +64 -0
- package/src/BrowserExtensionPlugin/BrowserExtensionPlugin.ts +98 -0
- package/src/BrowserExtensionPlugin/constants.ts +3 -0
- package/src/BrowserExtensionPlugin/loadInContextLib.ts +32 -0
- package/src/ContextUi.ts +7 -0
- package/src/DevBackend.ts +30 -0
- package/src/DevTools.ts +9 -0
- package/src/InContextTools.ts +20 -0
- package/src/InvisibleObserver.ts +16 -0
- package/src/LanguageDetector.test.ts +19 -0
- package/src/LanguageDetector.ts +32 -0
- package/src/LanguageStorage.ts +23 -0
- package/src/TextObserver.ts +45 -0
- package/src/WebTolgee.ts +8 -0
- package/src/__test__/browser.extension.test.ts +70 -0
- package/src/__test__/observer.test.ts +13 -0
- package/src/__test__/testObserver.ts +106 -0
- package/src/__test__/testRetranslate.ts +47 -0
- package/src/constants.ts +12 -0
- package/src/index.ts +8 -0
- package/src/observers/general/DomHelper.ts +46 -0
- package/src/observers/general/ElementHighlighter.ts +72 -0
- package/src/observers/general/ElementMeta.ts +17 -0
- package/src/observers/general/ElementRegistry.ts +159 -0
- package/src/observers/general/ElementStore.ts +34 -0
- package/src/observers/general/GeneralObserver.ts +133 -0
- package/src/observers/general/MouseEventHandler.ts +199 -0
- package/src/observers/general/NodeHandler.ts +39 -0
- package/src/observers/general/helpers.ts +65 -0
- package/src/observers/invisible/InvisibleWrapper.test.ts +17 -0
- package/src/observers/invisible/InvisibleWrapper.ts +96 -0
- package/src/observers/invisible/ValueMemory.test.ts +25 -0
- package/src/observers/invisible/ValueMemory.ts +20 -0
- package/src/observers/invisible/encoderPolyfill.ts +96 -0
- package/src/observers/invisible/secret.test.ts +61 -0
- package/src/observers/invisible/secret.ts +68 -0
- package/src/observers/text/TextWrapper.ts +258 -0
- package/src/observers/text/helpers.ts +56 -0
- package/src/tools/decodeApiKey.test.ts +14 -0
- package/src/tools/decodeApiKey.ts +74 -0
- package/src/tools/extension.test.ts +159 -0
- package/src/tools/extension.ts +119 -0
- package/src/typedIndex.ts +13 -0
- package/src/types.ts +33 -0
- package/src/ui/KeyContextMenu/KeyContextMenu.test.ts +51 -0
- package/src/ui/KeyContextMenu/KeyContextMenu.tsx +108 -0
- package/src/ui/KeyDialog/KeyDialog.tsx +67 -0
- package/src/ui/KeyDialog/KeyForm.tsx +208 -0
- package/src/ui/KeyDialog/LanguageSelect.tsx +78 -0
- package/src/ui/KeyDialog/NewWindow.tsx +106 -0
- package/src/ui/KeyDialog/NsSelect.tsx +67 -0
- package/src/ui/KeyDialog/ScreenshotGallery/ExtensionPrompt.tsx +97 -0
- package/src/ui/KeyDialog/ScreenshotGallery/ScreenshotDetail.tsx +33 -0
- package/src/ui/KeyDialog/ScreenshotGallery/ScreenshotDropzone.tsx +138 -0
- package/src/ui/KeyDialog/ScreenshotGallery/ScreenshotGallery.tsx +240 -0
- package/src/ui/KeyDialog/ScreenshotGallery/ScreenshotThumbnail.tsx +113 -0
- package/src/ui/KeyDialog/ScreenshotGallery/utils.ts +17 -0
- package/src/ui/KeyDialog/TranslationDialog.tsx +14 -0
- package/src/ui/KeyDialog/TranslationDialogContextProvider.tsx +464 -0
- package/src/ui/KeyDialog/TranslationDialogWrapper.tsx +44 -0
- package/src/ui/KeyDialog/TranslationFields.tsx +113 -0
- package/src/ui/KeyDialog/languageHelpers.ts +18 -0
- package/src/ui/KeyDialog/tools.ts +30 -0
- package/src/ui/ThemeProvider.tsx +71 -0
- package/src/ui/client/QueryProvider.tsx +38 -0
- package/src/ui/client/apiSchema.generated.ts +3281 -0
- package/src/ui/client/client.ts +155 -0
- package/src/ui/client/types.ts +113 -0
- package/src/ui/client/useQueryApi.ts +121 -0
- package/src/ui/common/BodyEnd.tsx +44 -0
- package/src/ui/common/FieldTitle.tsx +9 -0
- package/src/ui/common/LoadingButton.tsx +45 -0
- package/src/ui/index.ts +88 -0
- package/src/ui/screenshots/ScreenshotPreview.tsx +18 -0
- package/src/ui/tools/createProvider.tsx +54 -0
- package/src/ui/tools/isLanguagePermitted.ts +14 -0
- package/src/ui/tools/sleep.ts +2 -0
- package/types/index.d.ts +9 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FunctionComponent } from 'react';
|
|
3
|
+
import {
|
|
4
|
+
useDialogContext,
|
|
5
|
+
useDialogDispatch,
|
|
6
|
+
} from './TranslationDialogContextProvider';
|
|
7
|
+
import TextField from '@mui/material/TextField';
|
|
8
|
+
import { styled } from '@mui/material/styles';
|
|
9
|
+
import { keyframes } from '@mui/styled-engine';
|
|
10
|
+
import { ScFieldTitle } from '../common/FieldTitle';
|
|
11
|
+
import { isLanguagePermitted } from '../tools/isLanguagePermitted';
|
|
12
|
+
import { getPreferredLanguages } from './tools';
|
|
13
|
+
|
|
14
|
+
const inputLoading = keyframes`
|
|
15
|
+
0% { background-position: 0%; }
|
|
16
|
+
100% { background-position: 100%; }
|
|
17
|
+
`;
|
|
18
|
+
|
|
19
|
+
const ScTextField = styled(TextField)`
|
|
20
|
+
margin: 0px;
|
|
21
|
+
& .Mui-disabled {
|
|
22
|
+
background: ${({ theme }) => theme.palette.grey[200]};
|
|
23
|
+
}
|
|
24
|
+
`;
|
|
25
|
+
|
|
26
|
+
const LoadingTextArea = styled('div')`
|
|
27
|
+
margin-top: 10px;
|
|
28
|
+
padding: 5px;
|
|
29
|
+
border: 1px solid #ccc;
|
|
30
|
+
width: 100%;
|
|
31
|
+
border-radius: 5px;
|
|
32
|
+
font-style: inherit;
|
|
33
|
+
font-family: inherit;
|
|
34
|
+
box-sizing: border-box;
|
|
35
|
+
display: block;
|
|
36
|
+
height: 42px;
|
|
37
|
+
background: linear-gradient(
|
|
38
|
+
90deg,
|
|
39
|
+
rgba(0, 0, 0, 0),
|
|
40
|
+
rgba(0, 0, 0, 0),
|
|
41
|
+
rgba(0, 0, 0, 0.1),
|
|
42
|
+
rgba(0, 0, 0, 0),
|
|
43
|
+
rgba(0, 0, 0, 0)
|
|
44
|
+
);
|
|
45
|
+
background-size: 500% 500%;
|
|
46
|
+
animation: ${inputLoading} 1.5s linear infinite alternate;
|
|
47
|
+
`;
|
|
48
|
+
|
|
49
|
+
export const TranslationFields: FunctionComponent = () => {
|
|
50
|
+
const dispatch = useDialogDispatch();
|
|
51
|
+
|
|
52
|
+
const selectedLanguages = useDialogContext((c) => c.selectedLanguages);
|
|
53
|
+
const langFields = selectedLanguages.length
|
|
54
|
+
? selectedLanguages
|
|
55
|
+
: getPreferredLanguages();
|
|
56
|
+
const availableLanguages = useDialogContext((c) => c.availableLanguages);
|
|
57
|
+
const translationsForm = useDialogContext((c) => c.translationsForm);
|
|
58
|
+
const formDisabled = useDialogContext((c) => c.formDisabled);
|
|
59
|
+
const loading = useDialogContext((c) => c.loading);
|
|
60
|
+
const permittedLanguageIds = useDialogContext((c) => c.permittedLanguageIds);
|
|
61
|
+
|
|
62
|
+
const onChange = (key: string) => (e: any) => {
|
|
63
|
+
dispatch({
|
|
64
|
+
type: 'ON_INPUT_CHANGE',
|
|
65
|
+
payload: { key, value: e.target.value },
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const Loading = () => (
|
|
70
|
+
<>
|
|
71
|
+
{langFields.map((lang) => (
|
|
72
|
+
<LoadingTextArea key={lang} />
|
|
73
|
+
))}
|
|
74
|
+
</>
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<>
|
|
79
|
+
{loading ? (
|
|
80
|
+
<Loading />
|
|
81
|
+
) : (
|
|
82
|
+
[...selectedLanguages].map((key) => {
|
|
83
|
+
const lang = availableLanguages?.find((l) => l.tag === key);
|
|
84
|
+
const languagePermitted = isLanguagePermitted(
|
|
85
|
+
key,
|
|
86
|
+
permittedLanguageIds,
|
|
87
|
+
availableLanguages
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
return (
|
|
91
|
+
<React.Fragment key={key}>
|
|
92
|
+
<ScFieldTitle>{lang?.name || key}</ScFieldTitle>
|
|
93
|
+
<ScTextField
|
|
94
|
+
size="small"
|
|
95
|
+
disabled={formDisabled || !languagePermitted}
|
|
96
|
+
key={key}
|
|
97
|
+
inputProps={{
|
|
98
|
+
lang: key,
|
|
99
|
+
}}
|
|
100
|
+
minRows={2}
|
|
101
|
+
maxRows={Infinity}
|
|
102
|
+
multiline
|
|
103
|
+
fullWidth
|
|
104
|
+
value={translationsForm[key] || ''}
|
|
105
|
+
onChange={onChange(key)}
|
|
106
|
+
/>
|
|
107
|
+
</React.Fragment>
|
|
108
|
+
);
|
|
109
|
+
})
|
|
110
|
+
)}
|
|
111
|
+
</>
|
|
112
|
+
);
|
|
113
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { components } from '../client/apiSchema.generated';
|
|
2
|
+
|
|
3
|
+
type LanguageModel = components['schemas']['LanguageModel'];
|
|
4
|
+
|
|
5
|
+
export const putBaseLangFirst = (languages: LanguageModel[] | undefined) => {
|
|
6
|
+
const base = languages?.find((l) => l.base);
|
|
7
|
+
if (base) {
|
|
8
|
+
return [base, ...(languages || []).filter((val) => val !== base)];
|
|
9
|
+
}
|
|
10
|
+
return languages;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const putBaseLangFirstTags = (strings: Array<string>, base?: string) => {
|
|
14
|
+
if (base && strings.includes(base)) {
|
|
15
|
+
return [base, ...strings.filter((val) => val !== base)];
|
|
16
|
+
}
|
|
17
|
+
return strings;
|
|
18
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MAX_LANGUAGES_SELECTED,
|
|
3
|
+
PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY,
|
|
4
|
+
} from '../../constants';
|
|
5
|
+
|
|
6
|
+
export function getPreferredLanguages(): string[] {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.parse(
|
|
9
|
+
localStorage.getItem(PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY) || ''
|
|
10
|
+
);
|
|
11
|
+
} catch {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function setPreferredLanguages(languages: string[]) {
|
|
17
|
+
localStorage.setItem(
|
|
18
|
+
PREFERRED_LANGUAGES_LOCAL_STORAGE_KEY,
|
|
19
|
+
JSON.stringify(languages)
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getInitialLanguages(available: string[]) {
|
|
24
|
+
const preferred = getPreferredLanguages();
|
|
25
|
+
let langs = preferred.filter((l) => available.includes(l));
|
|
26
|
+
if (langs.length === 0) {
|
|
27
|
+
langs = available;
|
|
28
|
+
}
|
|
29
|
+
return langs.slice(0, MAX_LANGUAGES_SELECTED);
|
|
30
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React, { useRef } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
createTheme,
|
|
4
|
+
ThemeProvider as MuiThemeProvider,
|
|
5
|
+
} from '@mui/material/styles';
|
|
6
|
+
import { DEVTOOLS_ID, DEVTOOLS_Z_INDEX } from '../constants';
|
|
7
|
+
import createCache from '@emotion/cache';
|
|
8
|
+
import { CacheProvider } from '@emotion/react';
|
|
9
|
+
|
|
10
|
+
let theme = createTheme({
|
|
11
|
+
typography: {
|
|
12
|
+
fontFamily:
|
|
13
|
+
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"',
|
|
14
|
+
},
|
|
15
|
+
palette: {
|
|
16
|
+
primary: {
|
|
17
|
+
main: '#822B55',
|
|
18
|
+
},
|
|
19
|
+
secondary: {
|
|
20
|
+
main: '#2B5582',
|
|
21
|
+
},
|
|
22
|
+
text: {
|
|
23
|
+
secondary: '#808080',
|
|
24
|
+
},
|
|
25
|
+
background: {
|
|
26
|
+
default: 'rgb(255, 255, 255)',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
zIndex: {
|
|
30
|
+
modal: DEVTOOLS_Z_INDEX,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
theme = createTheme(theme, {
|
|
35
|
+
components: {
|
|
36
|
+
MuiButton: {
|
|
37
|
+
styleOverrides: {
|
|
38
|
+
root: {
|
|
39
|
+
whiteSpace: 'nowrap',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
MuiTooltip: {
|
|
44
|
+
styleOverrides: {
|
|
45
|
+
tooltip: {
|
|
46
|
+
fontSize: 12,
|
|
47
|
+
boxShadow: '1px 1px 6px rgba(0, 0, 0, 0.25)',
|
|
48
|
+
borderRadius: '11px',
|
|
49
|
+
color: 'black',
|
|
50
|
+
backgroundColor: 'white',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
export const ThemeProvider: React.FC = ({ children }) => {
|
|
58
|
+
const cache = useRef(
|
|
59
|
+
createCache({
|
|
60
|
+
key: 'css',
|
|
61
|
+
prepend: true,
|
|
62
|
+
container: document.getElementById(DEVTOOLS_ID)?.shadowRoot as Node,
|
|
63
|
+
})
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<CacheProvider value={cache.current!}>
|
|
68
|
+
<MuiThemeProvider theme={theme}>{children}</MuiThemeProvider>
|
|
69
|
+
</CacheProvider>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { QueryClientProvider, QueryClient } from 'react-query';
|
|
3
|
+
|
|
4
|
+
export type GlobalOptions = {
|
|
5
|
+
apiKey: string;
|
|
6
|
+
apiUrl: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const queryClient = new QueryClient({
|
|
10
|
+
defaultOptions: {
|
|
11
|
+
queries: {
|
|
12
|
+
refetchOnWindowFocus: false,
|
|
13
|
+
refetchOnReconnect: false,
|
|
14
|
+
retry: false,
|
|
15
|
+
cacheTime: 0,
|
|
16
|
+
staleTime: 0,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export const QueryContext = React.createContext({} as GlobalOptions);
|
|
22
|
+
|
|
23
|
+
type Props = {
|
|
24
|
+
apiKey: string;
|
|
25
|
+
apiUrl: string;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const QueryProvider: React.FC<Props> = ({
|
|
29
|
+
children,
|
|
30
|
+
apiUrl,
|
|
31
|
+
apiKey,
|
|
32
|
+
}) => {
|
|
33
|
+
return (
|
|
34
|
+
<QueryContext.Provider value={{ apiUrl, apiKey }}>
|
|
35
|
+
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
|
|
36
|
+
</QueryContext.Provider>
|
|
37
|
+
);
|
|
38
|
+
};
|