@lifi/widget 3.32.1 → 3.33.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/CHANGELOG.md +19 -0
- package/dist/esm/AppProvider.js +2 -1
- package/dist/esm/AppProvider.js.map +1 -1
- package/dist/esm/components/Header/NavigationHeader.js +4 -1
- package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
- package/dist/esm/components/Tools/Tools.js +1 -1
- package/dist/esm/components/Tools/Tools.js.map +1 -1
- package/dist/esm/config/constants.d.ts +1 -1
- package/dist/esm/config/constants.js +1 -1
- package/dist/esm/config/constants.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/hooks/useExplorer.js +2 -2
- package/dist/esm/hooks/useExplorer.js.map +1 -1
- package/dist/esm/hooks/useHeader.js +4 -1
- package/dist/esm/hooks/useHeader.js.map +1 -1
- package/dist/esm/hooks/useLanguages.d.ts +2 -3
- package/dist/esm/hooks/useLanguages.js +50 -14
- package/dist/esm/hooks/useLanguages.js.map +1 -1
- package/dist/esm/hooks/useRoutes.js +1 -1
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useSettingMonitor.js +2 -1
- package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
- package/dist/esm/hooks/useTokenBalances.js +2 -1
- package/dist/esm/hooks/useTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useTools.js +2 -1
- package/dist/esm/hooks/useTools.js.map +1 -1
- package/dist/esm/pages/LanguagesPage.js +6 -1
- package/dist/esm/pages/LanguagesPage.js.map +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js +1 -1
- package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/LanguageSetting.js +7 -2
- package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js +14 -2
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.d.ts +2 -1
- package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js +3 -9
- package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
- package/dist/esm/providers/I18nProvider/I18nProvider.js +47 -41
- package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
- package/dist/esm/providers/I18nProvider/constants.d.ts +3 -0
- package/dist/esm/providers/I18nProvider/constants.js +39 -0
- package/dist/esm/providers/I18nProvider/constants.js.map +1 -0
- package/dist/esm/providers/I18nProvider/enResource.d.ts +2 -0
- package/dist/esm/providers/I18nProvider/enResource.js +4 -0
- package/dist/esm/providers/I18nProvider/enResource.js.map +1 -0
- package/dist/esm/providers/I18nProvider/i18n.d.ts +3 -0
- package/dist/esm/providers/I18nProvider/i18n.js +19 -0
- package/dist/esm/providers/I18nProvider/i18n.js.map +1 -0
- package/dist/esm/providers/I18nProvider/types.d.ts +4 -11
- package/dist/esm/providers/WalletProvider/SDKProviders.js +1 -1
- package/dist/esm/providers/WalletProvider/SDKProviders.js.map +1 -1
- package/dist/esm/stores/bookmarks/createBookmarkStore.d.ts +19 -1
- package/dist/esm/stores/bookmarks/createBookmarkStore.js +3 -3
- package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.js +3 -1
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/createChainOrderStore.d.ts +33 -1
- package/dist/esm/stores/chains/createChainOrderStore.js +3 -3
- package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/useChainOrder.js +5 -2
- package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
- package/dist/esm/stores/form/createFormStore.d.ts +1 -1
- package/dist/esm/stores/form/createFormStore.js +3 -3
- package/dist/esm/stores/form/createFormStore.js.map +1 -1
- package/dist/esm/stores/header/useHeaderStore.js +3 -3
- package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
- package/dist/esm/stores/routes/createRouteExecutionStore.d.ts +17 -1
- package/dist/esm/stores/routes/createRouteExecutionStore.js +3 -3
- package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/settings/SettingsStore.d.ts +9 -0
- package/dist/esm/stores/settings/SettingsStore.js +24 -0
- package/dist/esm/stores/settings/SettingsStore.js.map +1 -0
- package/dist/esm/stores/settings/createSettingsStore.d.ts +51 -0
- package/dist/esm/stores/settings/{useSettingsStore.js → createSettingsStore.js} +38 -11
- package/dist/esm/stores/settings/createSettingsStore.js.map +1 -0
- package/dist/esm/stores/settings/types.d.ts +7 -1
- package/dist/esm/stores/settings/types.js.map +1 -1
- package/dist/esm/stores/settings/useSendToWalletStore.d.ts +1 -1
- package/dist/esm/stores/settings/useSendToWalletStore.js +3 -3
- package/dist/esm/stores/settings/useSendToWalletStore.js.map +1 -1
- package/dist/esm/stores/settings/useSettings.js +1 -1
- package/dist/esm/stores/settings/useSettings.js.map +1 -1
- package/dist/esm/stores/settings/useSettingsActions.d.ts +1 -0
- package/dist/esm/stores/settings/useSettingsActions.js +9 -1
- package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
- package/dist/esm/stores/settings/useSplitSubvariantStore.js +3 -3
- package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
- package/dist/esm/stores/settings/utils/getStateValues.js +1 -0
- package/dist/esm/stores/settings/utils/getStateValues.js.map +1 -1
- package/dist/esm/utils/converters.js +5 -0
- package/dist/esm/utils/converters.js.map +1 -1
- package/dist/esm/utils/tokenList.d.ts +1 -1
- package/dist/esm/utils/tokenList.js +3 -3
- package/dist/esm/utils/tokenList.js.map +1 -1
- package/package.json +13 -13
- package/package.json.tmp +15 -15
- package/src/AppProvider.tsx +14 -11
- package/src/components/Header/NavigationHeader.tsx +4 -1
- package/src/components/Tools/Tools.tsx +1 -1
- package/src/config/constants.ts +1 -1
- package/src/config/version.ts +1 -1
- package/src/hooks/useExplorer.ts +2 -2
- package/src/hooks/useHeader.ts +4 -1
- package/src/hooks/useLanguages.ts +73 -15
- package/src/hooks/useRoutes.ts +1 -1
- package/src/hooks/useSettingMonitor.ts +2 -4
- package/src/hooks/useTokenBalances.ts +2 -1
- package/src/hooks/useTools.ts +3 -1
- package/src/pages/LanguagesPage.tsx +10 -1
- package/src/pages/SelectEnabledToolsPage.tsx +1 -1
- package/src/pages/SettingsPage/BridgeAndExchangeSettings.tsx +1 -1
- package/src/pages/SettingsPage/LanguageSetting.tsx +9 -2
- package/src/pages/SettingsPage/SlippageSettings/SlippageSettings.tsx +1 -1
- package/src/pages/TransactionDetailsPage/TransactionDetailsPage.tsx +25 -5
- package/src/pages/TransactionDetailsPage/TransferIdCard.tsx +8 -13
- package/src/providers/I18nProvider/I18nProvider.tsx +66 -51
- package/src/providers/I18nProvider/constants.ts +41 -0
- package/src/providers/I18nProvider/enResource.ts +4 -0
- package/src/providers/I18nProvider/i18n.ts +26 -0
- package/src/providers/I18nProvider/types.ts +21 -12
- package/src/providers/WalletProvider/SDKProviders.tsx +2 -1
- package/src/stores/bookmarks/createBookmarkStore.ts +3 -5
- package/src/stores/chains/ChainOrderStore.tsx +3 -1
- package/src/stores/chains/createChainOrderStore.ts +3 -5
- package/src/stores/chains/useChainOrder.ts +10 -2
- package/src/stores/form/createFormStore.ts +3 -3
- package/src/stores/header/useHeaderStore.tsx +31 -34
- package/src/stores/routes/createRouteExecutionStore.ts +3 -5
- package/src/stores/settings/SettingsStore.tsx +45 -0
- package/src/stores/settings/createSettingsStore.ts +223 -0
- package/src/stores/settings/types.ts +8 -1
- package/src/stores/settings/useSendToWalletStore.ts +8 -11
- package/src/stores/settings/useSettings.ts +1 -1
- package/src/stores/settings/useSettingsActions.ts +13 -4
- package/src/stores/settings/useSplitSubvariantStore.tsx +9 -12
- package/src/stores/settings/utils/getStateValues.ts +1 -0
- package/src/themes/types.ts +0 -3
- package/src/utils/converters.ts +5 -0
- package/src/utils/tokenList.ts +3 -3
- package/dist/esm/i18n/index.d.ts +0 -16
- package/dist/esm/i18n/index.js +0 -17
- package/dist/esm/i18n/index.js.map +0 -1
- package/dist/esm/stores/settings/useSettingsStore.d.ts +0 -5
- package/dist/esm/stores/settings/useSettingsStore.js.map +0 -1
- package/src/i18n/index.ts +0 -17
- package/src/stores/settings/useSettingsStore.ts +0 -185
|
@@ -5,28 +5,21 @@ import { useTranslation } from 'react-i18next'
|
|
|
5
5
|
import { Card } from '../../components/Card/Card.js'
|
|
6
6
|
import { CardIconButton } from '../../components/Card/CardIconButton.js'
|
|
7
7
|
import { CardTitle } from '../../components/Card/CardTitle.js'
|
|
8
|
-
import { useExplorer } from '../../hooks/useExplorer.js'
|
|
9
8
|
|
|
10
9
|
interface TransferIdCardProps {
|
|
11
10
|
transferId: string
|
|
11
|
+
txLink?: string
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
const
|
|
15
|
-
transferId.indexOf('_') !== -1
|
|
16
|
-
? transferId.substring(0, transferId.indexOf('_'))
|
|
17
|
-
: transferId
|
|
18
|
-
|
|
19
|
-
export const TransferIdCard = ({ transferId }: TransferIdCardProps) => {
|
|
14
|
+
export const TransferIdCard = ({ transferId, txLink }: TransferIdCardProps) => {
|
|
20
15
|
const { t } = useTranslation()
|
|
21
|
-
const { getTransactionLink } = useExplorer()
|
|
22
16
|
|
|
23
17
|
const copyTransferId = async () => {
|
|
24
18
|
await navigator.clipboard.writeText(transferId)
|
|
25
19
|
}
|
|
26
20
|
|
|
27
21
|
const openTransferIdInExplorer = () => {
|
|
28
|
-
|
|
29
|
-
window.open(getTransactionLink({ txHash }), '_blank')
|
|
22
|
+
window.open(txLink, '_blank')
|
|
30
23
|
}
|
|
31
24
|
|
|
32
25
|
return (
|
|
@@ -49,9 +42,11 @@ export const TransferIdCard = ({ transferId }: TransferIdCardProps) => {
|
|
|
49
42
|
<CardIconButton size="small" onClick={copyTransferId}>
|
|
50
43
|
<ContentCopyRounded fontSize="inherit" />
|
|
51
44
|
</CardIconButton>
|
|
52
|
-
|
|
53
|
-
<
|
|
54
|
-
|
|
45
|
+
{txLink ? (
|
|
46
|
+
<CardIconButton size="small" onClick={openTransferIdInExplorer}>
|
|
47
|
+
<OpenInNew fontSize="inherit" />
|
|
48
|
+
</CardIconButton>
|
|
49
|
+
) : null}
|
|
55
50
|
</Box>
|
|
56
51
|
</Box>
|
|
57
52
|
<Typography
|
|
@@ -1,67 +1,82 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import {
|
|
3
|
-
import { useMemo } from 'react'
|
|
1
|
+
import { createInstance, type i18n } from 'i18next'
|
|
2
|
+
import { useMemo, useRef } from 'react'
|
|
4
3
|
import { I18nextProvider } from 'react-i18next'
|
|
5
|
-
import * as supportedLanguages from '../../i18n/index.js'
|
|
6
4
|
import { useSettings } from '../../stores/settings/useSettings.js'
|
|
7
5
|
import { compactNumberFormatter } from '../../utils/compactNumberFormatter.js'
|
|
8
6
|
import { currencyExtendedFormatter } from '../../utils/currencyExtendedFormatter.js'
|
|
9
|
-
import { deepMerge } from '../../utils/deepMerge.js'
|
|
10
|
-
import { getConfigItemSets, isItemAllowedForSets } from '../../utils/item.js'
|
|
11
7
|
import { percentFormatter } from '../../utils/percentFormatter.js'
|
|
12
8
|
import { useWidgetConfig } from '../WidgetProvider/WidgetProvider.js'
|
|
13
|
-
import
|
|
9
|
+
import { allLanguages } from './constants.js'
|
|
10
|
+
import { enResource } from './enResource.js'
|
|
11
|
+
import { mergeWithLanguageResources } from './i18n.js'
|
|
12
|
+
import type { LanguageKey, LanguageResource, PartialResource } from './types.js'
|
|
14
13
|
|
|
15
14
|
export const I18nProvider: React.FC<React.PropsWithChildren> = ({
|
|
16
15
|
children,
|
|
17
16
|
}) => {
|
|
18
|
-
const {
|
|
19
|
-
const { language } = useSettings(['language'])
|
|
17
|
+
const { languages, languageResources } = useWidgetConfig()
|
|
18
|
+
const { language, languageCache } = useSettings(['language', 'languageCache'])
|
|
19
|
+
const i18nInstanceRef = useRef<i18n | null>(null)
|
|
20
20
|
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
languageResources[lng]
|
|
35
|
-
) as LanguageTranslationResources)
|
|
36
|
-
: // biome-ignore lint/performance/noDynamicNamespaceImportAccess: TODO: make it dynamic
|
|
37
|
-
supportedLanguages[lng],
|
|
38
|
-
}
|
|
39
|
-
return resources
|
|
40
|
-
}, {} as LanguageTranslationResources)
|
|
41
|
-
|
|
42
|
-
if (languageResources) {
|
|
43
|
-
resources = Object.keys(languageResources).reduce((resources, lng) => {
|
|
44
|
-
if (!resources[lng]) {
|
|
45
|
-
resources[lng] = {
|
|
46
|
-
translation: languageResources[lng as LanguageKey]!,
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return resources
|
|
50
|
-
}, resources)
|
|
21
|
+
const i18nInstance = useMemo(() => {
|
|
22
|
+
if (i18nInstanceRef.current) {
|
|
23
|
+
// Update i18n instance with language and language cache updates
|
|
24
|
+
if (language && languageCache && language !== 'en') {
|
|
25
|
+
i18nInstanceRef.current.addResourceBundle(
|
|
26
|
+
language,
|
|
27
|
+
'translation',
|
|
28
|
+
languageCache,
|
|
29
|
+
true,
|
|
30
|
+
true
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
return i18nInstanceRef.current
|
|
51
34
|
}
|
|
52
35
|
|
|
36
|
+
// Custom language resources (of non-default languages) are added statically.
|
|
37
|
+
// If custom language resources extend existing languages, they are merged with dynamically loaded resources.
|
|
38
|
+
const customLanguageKeys = languageResources
|
|
39
|
+
? Object.keys(languageResources).filter(
|
|
40
|
+
(key: string) => !allLanguages.includes(key as LanguageKey)
|
|
41
|
+
)
|
|
42
|
+
: []
|
|
43
|
+
const initialLanguage = language || languages?.default
|
|
53
44
|
const i18n = createInstance({
|
|
54
|
-
lng:
|
|
55
|
-
fallbackLng:
|
|
56
|
-
? 'en'
|
|
57
|
-
: languages?.default ||
|
|
58
|
-
languages?.allow?.[0] ||
|
|
59
|
-
Object.keys(resources)?.[0],
|
|
45
|
+
lng: initialLanguage,
|
|
46
|
+
fallbackLng: 'en',
|
|
60
47
|
lowerCaseLng: true,
|
|
61
|
-
interpolation: {
|
|
62
|
-
|
|
48
|
+
interpolation: { escapeValue: false },
|
|
49
|
+
resources: {
|
|
50
|
+
en: {
|
|
51
|
+
translation: mergeWithLanguageResources(
|
|
52
|
+
enResource,
|
|
53
|
+
languageResources?.en
|
|
54
|
+
),
|
|
55
|
+
},
|
|
56
|
+
...(initialLanguage &&
|
|
57
|
+
initialLanguage !== 'en' &&
|
|
58
|
+
languageCache && {
|
|
59
|
+
[initialLanguage]: {
|
|
60
|
+
translation: languageCache,
|
|
61
|
+
},
|
|
62
|
+
}),
|
|
63
|
+
// Add non-existing custom language resources
|
|
64
|
+
...customLanguageKeys.reduce(
|
|
65
|
+
(acc, key) => {
|
|
66
|
+
const customResource = languageResources?.[key as LanguageKey]
|
|
67
|
+
if (customResource) {
|
|
68
|
+
acc[key] = {
|
|
69
|
+
translation: customResource,
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return acc
|
|
73
|
+
},
|
|
74
|
+
{} as Record<
|
|
75
|
+
string,
|
|
76
|
+
{ translation: PartialResource<LanguageResource> }
|
|
77
|
+
>
|
|
78
|
+
),
|
|
63
79
|
},
|
|
64
|
-
resources,
|
|
65
80
|
detection: {
|
|
66
81
|
caches: [],
|
|
67
82
|
},
|
|
@@ -73,9 +88,9 @@ export const I18nProvider: React.FC<React.PropsWithChildren> = ({
|
|
|
73
88
|
i18n.services.formatter?.addCached('numberExt', compactNumberFormatter)
|
|
74
89
|
i18n.services.formatter?.addCached('currencyExt', currencyExtendedFormatter)
|
|
75
90
|
i18n.services.formatter?.addCached('percent', percentFormatter)
|
|
76
|
-
|
|
91
|
+
i18nInstanceRef.current = i18n
|
|
77
92
|
return i18n
|
|
78
|
-
}, [language, languageResources, languages])
|
|
93
|
+
}, [language, languageResources, languages?.default, languageCache])
|
|
79
94
|
|
|
80
|
-
return <I18nextProvider i18n={
|
|
95
|
+
return <I18nextProvider i18n={i18nInstance}>{children}</I18nextProvider>
|
|
81
96
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { LanguageKey } from './types.js'
|
|
2
|
+
|
|
3
|
+
export const allLanguages: LanguageKey[] = [
|
|
4
|
+
'en',
|
|
5
|
+
'es',
|
|
6
|
+
'fr',
|
|
7
|
+
'de',
|
|
8
|
+
'it',
|
|
9
|
+
'pt',
|
|
10
|
+
'ja',
|
|
11
|
+
'ko',
|
|
12
|
+
'zh',
|
|
13
|
+
'hi',
|
|
14
|
+
'bn',
|
|
15
|
+
'th',
|
|
16
|
+
'vi',
|
|
17
|
+
'tr',
|
|
18
|
+
'uk',
|
|
19
|
+
'id',
|
|
20
|
+
'pl',
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
export const languageNames: Record<LanguageKey, string> = {
|
|
24
|
+
en: 'English',
|
|
25
|
+
es: 'Español',
|
|
26
|
+
fr: 'Français',
|
|
27
|
+
de: 'Deutsch',
|
|
28
|
+
it: 'Italiano',
|
|
29
|
+
pt: 'Português',
|
|
30
|
+
ja: '日本語',
|
|
31
|
+
ko: '한국어',
|
|
32
|
+
zh: '中文',
|
|
33
|
+
hi: 'हिन्दी',
|
|
34
|
+
bn: 'বাংলা',
|
|
35
|
+
th: 'ไทย',
|
|
36
|
+
vi: 'Tiếng Việt',
|
|
37
|
+
tr: 'Türkçe',
|
|
38
|
+
uk: 'Українська',
|
|
39
|
+
id: 'Bahasa Indonesia',
|
|
40
|
+
pl: 'Polski',
|
|
41
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { deepMerge } from '../../utils/deepMerge.js'
|
|
2
|
+
import type { LanguageKey, LanguageResource, PartialResource } from './types.js'
|
|
3
|
+
|
|
4
|
+
// Dynamically import the JSON file for the specified language
|
|
5
|
+
export async function loadLocale(
|
|
6
|
+
lng: LanguageKey,
|
|
7
|
+
customLanguageResource?: PartialResource<LanguageResource>
|
|
8
|
+
) {
|
|
9
|
+
let languageResource: LanguageResource
|
|
10
|
+
try {
|
|
11
|
+
const languageResourceModule = await import(`../../i18n/${lng}.json`)
|
|
12
|
+
languageResource = languageResourceModule.default as LanguageResource
|
|
13
|
+
} catch {
|
|
14
|
+
languageResource = {} as LanguageResource
|
|
15
|
+
}
|
|
16
|
+
return mergeWithLanguageResources(languageResource, customLanguageResource)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function mergeWithLanguageResources(
|
|
20
|
+
languageResource: LanguageResource,
|
|
21
|
+
customLanguageResource?: PartialResource<LanguageResource>
|
|
22
|
+
) {
|
|
23
|
+
return customLanguageResource
|
|
24
|
+
? deepMerge(languageResource, customLanguageResource)
|
|
25
|
+
: languageResource
|
|
26
|
+
}
|
|
@@ -1,14 +1,31 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type { enResource } from './enResource.js'
|
|
2
2
|
|
|
3
|
-
type PartialResource<T> = T extends object
|
|
3
|
+
export type PartialResource<T> = T extends object
|
|
4
4
|
? {
|
|
5
5
|
[P in keyof T]?: PartialResource<T[P]>
|
|
6
6
|
}
|
|
7
7
|
: T
|
|
8
8
|
|
|
9
|
-
export type LanguageKey =
|
|
9
|
+
export type LanguageKey =
|
|
10
|
+
| 'en'
|
|
11
|
+
| 'es'
|
|
12
|
+
| 'fr'
|
|
13
|
+
| 'de'
|
|
14
|
+
| 'it'
|
|
15
|
+
| 'pt'
|
|
16
|
+
| 'ja'
|
|
17
|
+
| 'ko'
|
|
18
|
+
| 'zh'
|
|
19
|
+
| 'hi'
|
|
20
|
+
| 'bn'
|
|
21
|
+
| 'th'
|
|
22
|
+
| 'vi'
|
|
23
|
+
| 'tr'
|
|
24
|
+
| 'uk'
|
|
25
|
+
| 'id'
|
|
26
|
+
| 'pl'
|
|
10
27
|
|
|
11
|
-
type LanguageResource = typeof
|
|
28
|
+
export type LanguageResource = typeof enResource
|
|
12
29
|
|
|
13
30
|
export type LanguageResources =
|
|
14
31
|
| {
|
|
@@ -17,11 +34,3 @@ export type LanguageResources =
|
|
|
17
34
|
| {
|
|
18
35
|
[language: string]: PartialResource<LanguageResource>
|
|
19
36
|
}
|
|
20
|
-
|
|
21
|
-
type LanguageTranslationResource = {
|
|
22
|
-
[N in 'translation']: PartialResource<LanguageResource>
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export type LanguageTranslationResources = {
|
|
26
|
-
[language: string]: LanguageTranslationResource
|
|
27
|
-
}
|
|
@@ -38,7 +38,8 @@ export const SDKProviders = () => {
|
|
|
38
38
|
if (!hasConfiguredEVMProvider) {
|
|
39
39
|
providers.push(
|
|
40
40
|
EVM({
|
|
41
|
-
getWalletClient: () =>
|
|
41
|
+
getWalletClient: () =>
|
|
42
|
+
getWagmiConnectorClient(wagmiConfig, { assertChainId: false }),
|
|
42
43
|
switchChain: async (chainId: number) => {
|
|
43
44
|
const chain = await switchChain(wagmiConfig, { chainId })
|
|
44
45
|
return getWagmiConnectorClient(wagmiConfig, { chainId: chain.id })
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { create } from 'zustand'
|
|
2
2
|
import { persist } from 'zustand/middleware'
|
|
3
|
-
import { createWithEqualityFn } from 'zustand/traditional'
|
|
4
3
|
import type { ToAddress } from '../../types/widget.js'
|
|
5
4
|
import type { PersistStoreProps } from '../types.js'
|
|
6
5
|
import type { BookmarkState } from './types.js'
|
|
@@ -14,7 +13,7 @@ export const createBookmarksStore = ({
|
|
|
14
13
|
namePrefix,
|
|
15
14
|
toAddress,
|
|
16
15
|
}: PersistBookmarkProps) =>
|
|
17
|
-
|
|
16
|
+
create<BookmarkState>()(
|
|
18
17
|
persist(
|
|
19
18
|
(set, get) => ({
|
|
20
19
|
selectedBookmark: toAddress,
|
|
@@ -76,6 +75,5 @@ export const createBookmarksStore = ({
|
|
|
76
75
|
}
|
|
77
76
|
},
|
|
78
77
|
}
|
|
79
|
-
)
|
|
80
|
-
Object.is
|
|
78
|
+
)
|
|
81
79
|
)
|
|
@@ -64,7 +64,9 @@ export function ChainOrderStoreProvider({
|
|
|
64
64
|
|
|
65
65
|
// Show "All networks" button if there are multiple networks
|
|
66
66
|
const showAllNetworks = filteredChains.length > 1
|
|
67
|
-
|
|
67
|
+
if (!showAllNetworks) {
|
|
68
|
+
storeRef.current?.getState().setIsAllNetworks(false, key)
|
|
69
|
+
}
|
|
68
70
|
storeRef.current?.getState().setShowAllNetworks(showAllNetworks, key)
|
|
69
71
|
|
|
70
72
|
const [chainValue] = getFieldValues(`${key}Chain`)
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { create } from 'zustand'
|
|
2
2
|
import { persist } from 'zustand/middleware'
|
|
3
|
-
import { createWithEqualityFn } from 'zustand/traditional'
|
|
4
3
|
import { widgetEvents } from '../../hooks/useWidgetEvents.js'
|
|
5
4
|
import { WidgetEvent } from '../../types/events.js'
|
|
6
5
|
import type { PersistStoreProps } from '../types.js'
|
|
@@ -19,7 +18,7 @@ const defaultChainState = {
|
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
export const createChainOrderStore = ({ namePrefix }: PersistStoreProps) =>
|
|
22
|
-
|
|
21
|
+
create<ChainOrderState>()(
|
|
23
22
|
persist(
|
|
24
23
|
(set, get) => ({
|
|
25
24
|
chainOrder: defaultChainState,
|
|
@@ -126,6 +125,5 @@ export const createChainOrderStore = ({ namePrefix }: PersistStoreProps) =>
|
|
|
126
125
|
pinnedChains: state.pinnedChains,
|
|
127
126
|
}),
|
|
128
127
|
}
|
|
129
|
-
)
|
|
130
|
-
Object.is
|
|
128
|
+
)
|
|
131
129
|
)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useMemo } from 'react'
|
|
1
2
|
import type { FormType } from '../form/types.js'
|
|
2
3
|
import { useChainOrderStore } from './ChainOrderStore.js'
|
|
3
4
|
import { maxChainsToOrder } from './createChainOrderStore.js'
|
|
@@ -5,8 +6,15 @@ import { maxChainsToOrder } from './createChainOrderStore.js'
|
|
|
5
6
|
export const useChainOrder = (
|
|
6
7
|
type: FormType
|
|
7
8
|
): [number[], (chainId: number, type: FormType) => void] => {
|
|
8
|
-
|
|
9
|
-
state.chainOrder[type]
|
|
9
|
+
const [chainOrder, setChain] = useChainOrderStore((state) => [
|
|
10
|
+
state.chainOrder[type],
|
|
10
11
|
state.setChain,
|
|
11
12
|
])
|
|
13
|
+
|
|
14
|
+
const limitedChainOrder = useMemo(
|
|
15
|
+
() => chainOrder.slice(0, maxChainsToOrder),
|
|
16
|
+
[chainOrder]
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
return [limitedChainOrder, setChain]
|
|
12
20
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { create } from 'zustand'
|
|
2
2
|
|
|
3
3
|
import type {
|
|
4
4
|
DefaultValues,
|
|
@@ -68,7 +68,7 @@ const mergeDefaultFormValues = (
|
|
|
68
68
|
)
|
|
69
69
|
|
|
70
70
|
export const createFormStore = (defaultValues?: DefaultValues) =>
|
|
71
|
-
|
|
71
|
+
create<FormValuesState>((set, get) => {
|
|
72
72
|
const _defaultValues = valuesToFormValues({
|
|
73
73
|
...formDefaultValues,
|
|
74
74
|
...defaultValues,
|
|
@@ -231,4 +231,4 @@ export const createFormStore = (defaultValues?: DefaultValues) =>
|
|
|
231
231
|
}))
|
|
232
232
|
},
|
|
233
233
|
}
|
|
234
|
-
}
|
|
234
|
+
})
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createContext, useContext, useRef } from 'react'
|
|
2
|
+
import { create } from 'zustand'
|
|
2
3
|
import { useShallow } from 'zustand/shallow'
|
|
3
|
-
import { createWithEqualityFn } from 'zustand/traditional'
|
|
4
4
|
import type { PersistStoreProviderProps } from '../types.js'
|
|
5
5
|
import type { HeaderState, HeaderStore } from './types.js'
|
|
6
6
|
|
|
@@ -55,36 +55,33 @@ export function useSetHeaderHeight() {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
const createHeaderStore = () =>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}),
|
|
89
|
-
Object.is
|
|
90
|
-
)
|
|
58
|
+
create<HeaderState>((set, get) => ({
|
|
59
|
+
headerHeight: 108, // a basic default height
|
|
60
|
+
setAction: (element) => {
|
|
61
|
+
set(() => ({
|
|
62
|
+
element,
|
|
63
|
+
}))
|
|
64
|
+
return get().removeAction
|
|
65
|
+
},
|
|
66
|
+
setTitle: (title) => {
|
|
67
|
+
set(() => ({
|
|
68
|
+
title,
|
|
69
|
+
}))
|
|
70
|
+
return get().removeTitle
|
|
71
|
+
},
|
|
72
|
+
removeAction: () => {
|
|
73
|
+
set(() => ({
|
|
74
|
+
element: null,
|
|
75
|
+
}))
|
|
76
|
+
},
|
|
77
|
+
removeTitle: () => {
|
|
78
|
+
set(() => ({
|
|
79
|
+
title: undefined,
|
|
80
|
+
}))
|
|
81
|
+
},
|
|
82
|
+
setHeaderHeight: (headerHeight) => {
|
|
83
|
+
set(() => ({
|
|
84
|
+
headerHeight,
|
|
85
|
+
}))
|
|
86
|
+
},
|
|
87
|
+
}))
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Route, RouteExtended } from '@lifi/sdk'
|
|
2
|
-
import
|
|
2
|
+
import { create } from 'zustand'
|
|
3
3
|
import { persist } from 'zustand/middleware'
|
|
4
|
-
import { createWithEqualityFn } from 'zustand/traditional'
|
|
5
4
|
import { hasEnumFlag } from '../../utils/enum.js'
|
|
6
5
|
import type { PersistStoreProps } from '../types.js'
|
|
7
6
|
import type { RouteExecutionState } from './types.js'
|
|
@@ -14,7 +13,7 @@ import {
|
|
|
14
13
|
} from './utils.js'
|
|
15
14
|
|
|
16
15
|
export const createRouteExecutionStore = ({ namePrefix }: PersistStoreProps) =>
|
|
17
|
-
|
|
16
|
+
create<RouteExecutionState>()(
|
|
18
17
|
persist(
|
|
19
18
|
(set, get) => ({
|
|
20
19
|
routes: {},
|
|
@@ -150,6 +149,5 @@ export const createRouteExecutionStore = ({ namePrefix }: PersistStoreProps) =>
|
|
|
150
149
|
return state
|
|
151
150
|
},
|
|
152
151
|
}
|
|
153
|
-
)
|
|
154
|
-
Object.is
|
|
152
|
+
)
|
|
155
153
|
)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createContext,
|
|
3
|
+
type PropsWithChildren,
|
|
4
|
+
useContext,
|
|
5
|
+
useRef,
|
|
6
|
+
} from 'react'
|
|
7
|
+
import type { StoreApi } from 'zustand'
|
|
8
|
+
import { useShallow } from 'zustand/shallow'
|
|
9
|
+
import type { UseBoundStoreWithEqualityFn } from 'zustand/traditional'
|
|
10
|
+
import { createSettingsStore } from './createSettingsStore.js'
|
|
11
|
+
import type { SettingsState, SettingsStoreProviderProps } from './types.js'
|
|
12
|
+
|
|
13
|
+
type SettingsStore = UseBoundStoreWithEqualityFn<StoreApi<SettingsState>>
|
|
14
|
+
|
|
15
|
+
const SettingsStoreContext = createContext<SettingsStore | null>(null)
|
|
16
|
+
|
|
17
|
+
export const SettingsStoreProvider = ({
|
|
18
|
+
children,
|
|
19
|
+
config,
|
|
20
|
+
}: PropsWithChildren<SettingsStoreProviderProps>) => {
|
|
21
|
+
const storeRef = useRef<SettingsStore>(null)
|
|
22
|
+
if (!storeRef.current) {
|
|
23
|
+
storeRef.current = createSettingsStore(config)
|
|
24
|
+
}
|
|
25
|
+
return (
|
|
26
|
+
<SettingsStoreContext.Provider value={storeRef.current}>
|
|
27
|
+
{children}
|
|
28
|
+
</SettingsStoreContext.Provider>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function useSettingsStoreContext() {
|
|
33
|
+
const useStore = useContext(SettingsStoreContext)
|
|
34
|
+
if (!useStore) {
|
|
35
|
+
throw new Error(
|
|
36
|
+
'You forgot to wrap your component in SettingsStoreContext.'
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
return useStore
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function useSettingsStore<T>(selector: (state: SettingsState) => T): T {
|
|
43
|
+
const useStore = useSettingsStoreContext()
|
|
44
|
+
return useStore(useShallow(selector))
|
|
45
|
+
}
|