@lasterp/shared 1.0.0-beta.5 → 1.0.0-beta.6
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/dist/node/index.d.ts +14 -1
- package/dist/node/index.js +56 -2
- package/dist/rn/index.d.ts +14 -1
- package/dist/rn/index.js +56 -2
- package/package.json +5 -4
package/dist/node/index.d.ts
CHANGED
|
@@ -611,6 +611,19 @@ declare const useVariantSelector: <T extends {
|
|
|
611
611
|
id: string;
|
|
612
612
|
specs: Record<string, string>;
|
|
613
613
|
}>(props: VariantSelectorProps<T>) => VariantSelectorResult;
|
|
614
|
+
import { JSX, ReactNode } from "react";
|
|
615
|
+
import { StateStorage } from "zustand/middleware";
|
|
616
|
+
type TranslateFn = (message: string, replace?: (string | number)[]) => string;
|
|
617
|
+
interface LocaleProviderProps {
|
|
618
|
+
method: string;
|
|
619
|
+
language: string;
|
|
620
|
+
storage?: StateStorage;
|
|
621
|
+
children: ReactNode;
|
|
622
|
+
}
|
|
623
|
+
declare function LocaleProvider({ method, language, storage, children }: LocaleProviderProps): JSX.Element | null;
|
|
624
|
+
declare function useLocale(): {
|
|
625
|
+
__: TranslateFn;
|
|
626
|
+
};
|
|
614
627
|
interface Category {
|
|
615
628
|
name: string;
|
|
616
629
|
}
|
|
@@ -644,4 +657,4 @@ interface ProductContext {
|
|
|
644
657
|
}
|
|
645
658
|
import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
|
|
646
659
|
declare function equalsIgnoreCase(str1: string, str2: string): boolean;
|
|
647
|
-
export { useVariantSelector, useSearch, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, ViewerEventData, VariantSelectorResult, VariantSelectorProps, VariantSelectorOption, UseFrappeFileUploadReturnType, TopbarItem, Topbar, TokenParams, ShopContext, SearchResult, ProductVariant, ProductContext, Product, Page, NavbarSubItemGroup, NavbarSubItem, NavbarItem, Model, ItemVariant, Item, Hero, Header, Globals, FrappeProviderProps, FrappeProvider, FrappeMutationResult, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
|
|
660
|
+
export { useVariantSelector, useSearch, useLocale, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, ViewerEventData, VariantSelectorResult, VariantSelectorProps, VariantSelectorOption, UseFrappeFileUploadReturnType, TopbarItem, Topbar, TokenParams, ShopContext, SearchResult, ProductVariant, ProductContext, Product, Page, NavbarSubItemGroup, NavbarSubItem, NavbarItem, Model, LocaleProvider, ItemVariant, Item, Hero, Header, Globals, FrappeProviderProps, FrappeProvider, FrappeMutationResult, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
|
package/dist/node/index.js
CHANGED
|
@@ -58,7 +58,7 @@ var FrappeProvider = ({
|
|
|
58
58
|
children,
|
|
59
59
|
customHeaders
|
|
60
60
|
}) => {
|
|
61
|
-
const
|
|
61
|
+
const config = useMemo(() => {
|
|
62
62
|
const frappe = new FrappeApp(url, tokenParams, undefined, customHeaders);
|
|
63
63
|
return {
|
|
64
64
|
url,
|
|
@@ -72,7 +72,7 @@ var FrappeProvider = ({
|
|
|
72
72
|
};
|
|
73
73
|
}, [url, tokenParams, enableSocket, socketPort, siteName, customHeaders]);
|
|
74
74
|
return /* @__PURE__ */ jsx(FrappeContext.Provider, {
|
|
75
|
-
value:
|
|
75
|
+
value: config,
|
|
76
76
|
children
|
|
77
77
|
});
|
|
78
78
|
};
|
|
@@ -570,6 +570,58 @@ var useVariantSelector = (props) => {
|
|
|
570
570
|
getOptions: (key) => options[key] || []
|
|
571
571
|
};
|
|
572
572
|
};
|
|
573
|
+
// src/locale/provider.tsx
|
|
574
|
+
import {
|
|
575
|
+
createContext as createContext2,
|
|
576
|
+
useCallback as useCallback5,
|
|
577
|
+
useContext as useContext12,
|
|
578
|
+
useEffect as useEffect4,
|
|
579
|
+
useState as useState6
|
|
580
|
+
} from "react";
|
|
581
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
582
|
+
function translate(message, replace, messages = {}) {
|
|
583
|
+
let translated = messages[message] ?? message;
|
|
584
|
+
replace?.forEach((val, i) => {
|
|
585
|
+
translated = translated.replace(`{${i}}`, String(val));
|
|
586
|
+
});
|
|
587
|
+
return translated;
|
|
588
|
+
}
|
|
589
|
+
var LocaleContext = createContext2((message) => message);
|
|
590
|
+
function LocaleProvider({
|
|
591
|
+
method,
|
|
592
|
+
language,
|
|
593
|
+
storage,
|
|
594
|
+
children
|
|
595
|
+
}) {
|
|
596
|
+
const [messages, setMessages] = useState6({});
|
|
597
|
+
useEffect4(() => {
|
|
598
|
+
if (!storage)
|
|
599
|
+
return;
|
|
600
|
+
const key = `locale:${language}`;
|
|
601
|
+
Promise.resolve(storage.getItem(key)).then((cached) => {
|
|
602
|
+
if (cached)
|
|
603
|
+
setMessages(JSON.parse(cached));
|
|
604
|
+
}).catch(() => {});
|
|
605
|
+
}, [language, storage]);
|
|
606
|
+
const { data, isLoading } = useFrappeGetCall(method, { language }, { staleTime: Infinity });
|
|
607
|
+
useEffect4(() => {
|
|
608
|
+
if (!data?.message)
|
|
609
|
+
return;
|
|
610
|
+
setMessages(data.message);
|
|
611
|
+
storage?.setItem(`locale:${language}`, JSON.stringify(data.message));
|
|
612
|
+
}, [data, language, storage]);
|
|
613
|
+
const __ = useCallback5((message, replace) => translate(message, replace, messages), [messages]);
|
|
614
|
+
if (isLoading && Object.keys(messages).length === 0)
|
|
615
|
+
return null;
|
|
616
|
+
return /* @__PURE__ */ jsx2(LocaleContext.Provider, {
|
|
617
|
+
value: __,
|
|
618
|
+
children
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
function useLocale() {
|
|
622
|
+
const __ = useContext12(LocaleContext);
|
|
623
|
+
return { __ };
|
|
624
|
+
}
|
|
573
625
|
// src/utils/char.ts
|
|
574
626
|
import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
|
|
575
627
|
function equalsIgnoreCase(str1, str2) {
|
|
@@ -578,6 +630,7 @@ function equalsIgnoreCase(str1, str2) {
|
|
|
578
630
|
export {
|
|
579
631
|
useVariantSelector,
|
|
580
632
|
useSearch,
|
|
633
|
+
useLocale,
|
|
581
634
|
useFrappeUpdateDoc,
|
|
582
635
|
useFrappePutCall,
|
|
583
636
|
useFrappePrefetchDoc,
|
|
@@ -599,6 +652,7 @@ export {
|
|
|
599
652
|
decamelize,
|
|
600
653
|
camelizeKeys,
|
|
601
654
|
camelize,
|
|
655
|
+
LocaleProvider,
|
|
602
656
|
FrappeProvider,
|
|
603
657
|
FrappeContext
|
|
604
658
|
};
|
package/dist/rn/index.d.ts
CHANGED
|
@@ -611,6 +611,19 @@ declare const useVariantSelector: <T extends {
|
|
|
611
611
|
id: string;
|
|
612
612
|
specs: Record<string, string>;
|
|
613
613
|
}>(props: VariantSelectorProps<T>) => VariantSelectorResult;
|
|
614
|
+
import { JSX, ReactNode } from "react";
|
|
615
|
+
import { StateStorage } from "zustand/middleware";
|
|
616
|
+
type TranslateFn = (message: string, replace?: (string | number)[]) => string;
|
|
617
|
+
interface LocaleProviderProps {
|
|
618
|
+
method: string;
|
|
619
|
+
language: string;
|
|
620
|
+
storage?: StateStorage;
|
|
621
|
+
children: ReactNode;
|
|
622
|
+
}
|
|
623
|
+
declare function LocaleProvider({ method, language, storage, children }: LocaleProviderProps): JSX.Element | null;
|
|
624
|
+
declare function useLocale(): {
|
|
625
|
+
__: TranslateFn;
|
|
626
|
+
};
|
|
614
627
|
interface Category {
|
|
615
628
|
name: string;
|
|
616
629
|
}
|
|
@@ -644,4 +657,4 @@ interface ProductContext {
|
|
|
644
657
|
}
|
|
645
658
|
import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
|
|
646
659
|
declare function equalsIgnoreCase(str1: string, str2: string): boolean;
|
|
647
|
-
export { useVariantSelector, useSearch, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, ViewerEventData, VariantSelectorResult, VariantSelectorProps, VariantSelectorOption, UseFrappeFileUploadReturnType, TopbarItem, Topbar, TokenParams, ShopContext, SearchResult, ProductVariant, ProductContext, Product, Page, NavbarSubItemGroup, NavbarSubItem, NavbarItem, Model, ItemVariant, Item, Hero, Header, Globals, FrappeProviderProps, FrappeProvider, FrappeMutationResult, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
|
|
660
|
+
export { useVariantSelector, useSearch, useLocale, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, ViewerEventData, VariantSelectorResult, VariantSelectorProps, VariantSelectorOption, UseFrappeFileUploadReturnType, TopbarItem, Topbar, TokenParams, ShopContext, SearchResult, ProductVariant, ProductContext, Product, Page, NavbarSubItemGroup, NavbarSubItem, NavbarItem, Model, LocaleProvider, ItemVariant, Item, Hero, Header, Globals, FrappeProviderProps, FrappeProvider, FrappeMutationResult, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
|
package/dist/rn/index.js
CHANGED
|
@@ -58,7 +58,7 @@ var FrappeProvider = ({
|
|
|
58
58
|
children,
|
|
59
59
|
customHeaders
|
|
60
60
|
}) => {
|
|
61
|
-
const
|
|
61
|
+
const config = useMemo(() => {
|
|
62
62
|
const frappe = new FrappeApp(url, tokenParams, undefined, customHeaders);
|
|
63
63
|
return {
|
|
64
64
|
url,
|
|
@@ -72,7 +72,7 @@ var FrappeProvider = ({
|
|
|
72
72
|
};
|
|
73
73
|
}, [url, tokenParams, enableSocket, socketPort, siteName, customHeaders]);
|
|
74
74
|
return /* @__PURE__ */ jsx(FrappeContext.Provider, {
|
|
75
|
-
value:
|
|
75
|
+
value: config,
|
|
76
76
|
children
|
|
77
77
|
});
|
|
78
78
|
};
|
|
@@ -570,6 +570,58 @@ var useVariantSelector = (props) => {
|
|
|
570
570
|
getOptions: (key) => options[key] || []
|
|
571
571
|
};
|
|
572
572
|
};
|
|
573
|
+
// src/locale/provider.tsx
|
|
574
|
+
import {
|
|
575
|
+
createContext as createContext2,
|
|
576
|
+
useCallback as useCallback5,
|
|
577
|
+
useContext as useContext12,
|
|
578
|
+
useEffect as useEffect4,
|
|
579
|
+
useState as useState6
|
|
580
|
+
} from "react";
|
|
581
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
582
|
+
function translate(message, replace, messages = {}) {
|
|
583
|
+
let translated = messages[message] ?? message;
|
|
584
|
+
replace?.forEach((val, i) => {
|
|
585
|
+
translated = translated.replace(`{${i}}`, String(val));
|
|
586
|
+
});
|
|
587
|
+
return translated;
|
|
588
|
+
}
|
|
589
|
+
var LocaleContext = createContext2((message) => message);
|
|
590
|
+
function LocaleProvider({
|
|
591
|
+
method,
|
|
592
|
+
language,
|
|
593
|
+
storage,
|
|
594
|
+
children
|
|
595
|
+
}) {
|
|
596
|
+
const [messages, setMessages] = useState6({});
|
|
597
|
+
useEffect4(() => {
|
|
598
|
+
if (!storage)
|
|
599
|
+
return;
|
|
600
|
+
const key = `locale:${language}`;
|
|
601
|
+
Promise.resolve(storage.getItem(key)).then((cached) => {
|
|
602
|
+
if (cached)
|
|
603
|
+
setMessages(JSON.parse(cached));
|
|
604
|
+
}).catch(() => {});
|
|
605
|
+
}, [language, storage]);
|
|
606
|
+
const { data, isLoading } = useFrappeGetCall(method, { language }, { staleTime: Infinity });
|
|
607
|
+
useEffect4(() => {
|
|
608
|
+
if (!data?.message)
|
|
609
|
+
return;
|
|
610
|
+
setMessages(data.message);
|
|
611
|
+
storage?.setItem(`locale:${language}`, JSON.stringify(data.message));
|
|
612
|
+
}, [data, language, storage]);
|
|
613
|
+
const __ = useCallback5((message, replace) => translate(message, replace, messages), [messages]);
|
|
614
|
+
if (isLoading && Object.keys(messages).length === 0)
|
|
615
|
+
return null;
|
|
616
|
+
return /* @__PURE__ */ jsx2(LocaleContext.Provider, {
|
|
617
|
+
value: __,
|
|
618
|
+
children
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
function useLocale() {
|
|
622
|
+
const __ = useContext12(LocaleContext);
|
|
623
|
+
return { __ };
|
|
624
|
+
}
|
|
573
625
|
// src/utils/char.ts
|
|
574
626
|
import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
|
|
575
627
|
function equalsIgnoreCase(str1, str2) {
|
|
@@ -578,6 +630,7 @@ function equalsIgnoreCase(str1, str2) {
|
|
|
578
630
|
export {
|
|
579
631
|
useVariantSelector,
|
|
580
632
|
useSearch,
|
|
633
|
+
useLocale,
|
|
581
634
|
useFrappeUpdateDoc,
|
|
582
635
|
useFrappePutCall,
|
|
583
636
|
useFrappePrefetchDoc,
|
|
@@ -599,6 +652,7 @@ export {
|
|
|
599
652
|
decamelize,
|
|
600
653
|
camelizeKeys,
|
|
601
654
|
camelize,
|
|
655
|
+
LocaleProvider,
|
|
602
656
|
FrappeProvider,
|
|
603
657
|
FrappeContext
|
|
604
658
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lasterp/shared",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.6",
|
|
4
4
|
"description": "Shared repo for webapp and native app",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
"typescript": "^5.9.3"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
|
+
"@tanstack/react-query": "^5.90.21",
|
|
23
24
|
"react": ">=18.0.0",
|
|
24
25
|
"react-dom": ">=18.0.0",
|
|
25
|
-
"typescript": ">=4.5.0"
|
|
26
|
-
"@tanstack/react-query": "^5.90.21"
|
|
26
|
+
"typescript": ">=4.5.0"
|
|
27
27
|
},
|
|
28
28
|
"peerDependenciesMeta": {
|
|
29
29
|
"typescript": {
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"frappe-js-sdk": "^1.12.0",
|
|
46
46
|
"humps": "^2.0.1",
|
|
47
|
-
"socket.io-client": "^4.8.3"
|
|
47
|
+
"socket.io-client": "^4.8.3",
|
|
48
|
+
"zustand": "^5.0.11"
|
|
48
49
|
}
|
|
49
50
|
}
|