@lasterp/shared 1.0.0-beta.1 → 1.0.0-beta.11
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.
|
@@ -1,10 +1,84 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
9
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
10
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
11
|
+
for (let key of __getOwnPropNames(mod))
|
|
12
|
+
if (!__hasOwnProp.call(to, key))
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: () => mod[key],
|
|
15
|
+
enumerable: true
|
|
16
|
+
});
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
20
|
+
var __toCommonJS = (from) => {
|
|
21
|
+
var entry = __moduleCache.get(from), desc;
|
|
22
|
+
if (entry)
|
|
23
|
+
return entry;
|
|
24
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
25
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
26
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
27
|
+
get: () => from[key],
|
|
28
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
29
|
+
}));
|
|
30
|
+
__moduleCache.set(from, entry);
|
|
31
|
+
return entry;
|
|
32
|
+
};
|
|
33
|
+
var __export = (target, all) => {
|
|
34
|
+
for (var name in all)
|
|
35
|
+
__defProp(target, name, {
|
|
36
|
+
get: all[name],
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
set: (newValue) => all[name] = () => newValue
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// src/index.ts
|
|
44
|
+
var exports_src = {};
|
|
45
|
+
__export(exports_src, {
|
|
46
|
+
useVariantSelector: () => useVariantSelector,
|
|
47
|
+
useSearch: () => useSearch,
|
|
48
|
+
useLocale: () => useLocale,
|
|
49
|
+
useFrappeUpdateDoc: () => useFrappeUpdateDoc,
|
|
50
|
+
useFrappePutCall: () => useFrappePutCall,
|
|
51
|
+
useFrappePrefetchDoc: () => useFrappePrefetchDoc,
|
|
52
|
+
useFrappePostCall: () => useFrappePostCall,
|
|
53
|
+
useFrappeGetMeta: () => useFrappeGetMeta,
|
|
54
|
+
useFrappeGetDocList: () => useFrappeGetDocList,
|
|
55
|
+
useFrappeGetDocCount: () => useFrappeGetDocCount,
|
|
56
|
+
useFrappeGetDoc: () => useFrappeGetDoc,
|
|
57
|
+
useFrappeGetCall: () => useFrappeGetCall,
|
|
58
|
+
useFrappeFileUpload: () => useFrappeFileUpload,
|
|
59
|
+
useFrappeEventListener: () => useFrappeEventListener,
|
|
60
|
+
useFrappeDocumentEventListener: () => useFrappeDocumentEventListener,
|
|
61
|
+
useFrappeDocTypeEventListener: () => useFrappeDocTypeEventListener,
|
|
62
|
+
useFrappeDeleteDoc: () => useFrappeDeleteDoc,
|
|
63
|
+
useFrappeDeleteCall: () => useFrappeDeleteCall,
|
|
64
|
+
useFrappeCreateDoc: () => useFrappeCreateDoc,
|
|
65
|
+
useFrappeAuth: () => useFrappeAuth,
|
|
66
|
+
equalsIgnoreCase: () => equalsIgnoreCase,
|
|
67
|
+
decamelizeKeys: () => import_humps.decamelizeKeys,
|
|
68
|
+
decamelize: () => import_humps.decamelize,
|
|
69
|
+
camelizeKeys: () => import_humps.camelizeKeys,
|
|
70
|
+
camelize: () => import_humps.camelize,
|
|
71
|
+
LocaleProvider: () => LocaleProvider,
|
|
72
|
+
FrappeProvider: () => FrappeProvider,
|
|
73
|
+
FrappeContext: () => FrappeContext
|
|
74
|
+
});
|
|
75
|
+
module.exports = __toCommonJS(exports_src);
|
|
2
76
|
// src/frappe/provider.tsx
|
|
3
|
-
|
|
4
|
-
|
|
77
|
+
var import_react = require("react");
|
|
78
|
+
var import_frappe_js_sdk = require("frappe-js-sdk");
|
|
5
79
|
|
|
6
80
|
// src/frappe/socket.ts
|
|
7
|
-
|
|
81
|
+
var import_socket = __toESM(require("socket.io-client"));
|
|
8
82
|
|
|
9
83
|
class SocketIO {
|
|
10
84
|
socket_port;
|
|
@@ -35,7 +109,7 @@ class SocketIO {
|
|
|
35
109
|
this.url = `${this.url}${site_name}`;
|
|
36
110
|
}
|
|
37
111
|
this.site_name = site_name;
|
|
38
|
-
this.socket =
|
|
112
|
+
this.socket = import_socket.default(`${this.url}`, {
|
|
39
113
|
withCredentials: true,
|
|
40
114
|
secure: this.protocol === "https",
|
|
41
115
|
extraHeaders: tokenParams && tokenParams.useToken === true ? {
|
|
@@ -46,9 +120,9 @@ class SocketIO {
|
|
|
46
120
|
}
|
|
47
121
|
|
|
48
122
|
// src/frappe/provider.tsx
|
|
49
|
-
|
|
123
|
+
var jsx_runtime = require("react/jsx-runtime");
|
|
50
124
|
|
|
51
|
-
var FrappeContext = createContext(null);
|
|
125
|
+
var FrappeContext = import_react.createContext(null);
|
|
52
126
|
var FrappeProvider = ({
|
|
53
127
|
url = "",
|
|
54
128
|
tokenParams,
|
|
@@ -58,8 +132,8 @@ var FrappeProvider = ({
|
|
|
58
132
|
children,
|
|
59
133
|
customHeaders
|
|
60
134
|
}) => {
|
|
61
|
-
const
|
|
62
|
-
const frappe = new FrappeApp(url, tokenParams, undefined, customHeaders);
|
|
135
|
+
const config = import_react.useMemo(() => {
|
|
136
|
+
const frappe = new import_frappe_js_sdk.FrappeApp(url, tokenParams, undefined, customHeaders);
|
|
63
137
|
return {
|
|
64
138
|
url,
|
|
65
139
|
tokenParams,
|
|
@@ -71,19 +145,19 @@ var FrappeProvider = ({
|
|
|
71
145
|
socket: enableSocket ? new SocketIO(url, siteName, socketPort, tokenParams).socket : undefined
|
|
72
146
|
};
|
|
73
147
|
}, [url, tokenParams, enableSocket, socketPort, siteName, customHeaders]);
|
|
74
|
-
return /* @__PURE__ */ jsx(FrappeContext.Provider, {
|
|
75
|
-
value:
|
|
148
|
+
return /* @__PURE__ */ jsx_runtime.jsx(FrappeContext.Provider, {
|
|
149
|
+
value: config,
|
|
76
150
|
children
|
|
77
151
|
});
|
|
78
152
|
};
|
|
79
153
|
// src/frappe/hooks/auth.ts
|
|
80
|
-
|
|
81
|
-
|
|
154
|
+
var import_react2 = require("react");
|
|
155
|
+
var import_react_query = require("@tanstack/react-query");
|
|
82
156
|
var useFrappeAuth = () => {
|
|
83
|
-
const queryClient = useQueryClient();
|
|
84
|
-
const { auth, tokenParams } = useContext(FrappeContext);
|
|
85
|
-
const [userID, setUserID] = useState();
|
|
86
|
-
const getUserCookie = useCallback(() => {
|
|
157
|
+
const queryClient = import_react_query.useQueryClient();
|
|
158
|
+
const { auth, tokenParams } = import_react2.useContext(FrappeContext);
|
|
159
|
+
const [userID, setUserID] = import_react2.useState();
|
|
160
|
+
const getUserCookie = import_react2.useCallback(() => {
|
|
87
161
|
const userCookie = document.cookie.split(";").find((c) => c.trim().startsWith("user_id="));
|
|
88
162
|
if (userCookie) {
|
|
89
163
|
const userName = userCookie.split("=")[1];
|
|
@@ -96,7 +170,7 @@ var useFrappeAuth = () => {
|
|
|
96
170
|
setUserID(null);
|
|
97
171
|
}
|
|
98
172
|
}, []);
|
|
99
|
-
useEffect(() => {
|
|
173
|
+
import_react2.useEffect(() => {
|
|
100
174
|
if (tokenParams && tokenParams.useToken) {
|
|
101
175
|
setUserID(null);
|
|
102
176
|
} else {
|
|
@@ -108,7 +182,7 @@ var useFrappeAuth = () => {
|
|
|
108
182
|
error,
|
|
109
183
|
isLoading,
|
|
110
184
|
isFetching: isValidating
|
|
111
|
-
} = useQuery({
|
|
185
|
+
} = import_react_query.useQuery({
|
|
112
186
|
queryKey: ["currentUser", { tokenParams, userID }],
|
|
113
187
|
queryFn: () => auth.getLoggedInUser(),
|
|
114
188
|
enabled: !!(tokenParams?.useToken || userID),
|
|
@@ -116,14 +190,14 @@ var useFrappeAuth = () => {
|
|
|
116
190
|
refetchOnWindowFocus: false,
|
|
117
191
|
staleTime: Infinity
|
|
118
192
|
});
|
|
119
|
-
const loginMutation = useMutation({
|
|
193
|
+
const loginMutation = import_react_query.useMutation({
|
|
120
194
|
mutationFn: (credentials) => auth.loginWithUsernamePassword(credentials),
|
|
121
195
|
onSuccess: () => {
|
|
122
196
|
getUserCookie();
|
|
123
197
|
queryClient.invalidateQueries({ queryKey: ["currentUser"] });
|
|
124
198
|
}
|
|
125
199
|
});
|
|
126
|
-
const logoutMutation = useMutation({
|
|
200
|
+
const logoutMutation = import_react_query.useMutation({
|
|
127
201
|
mutationFn: () => auth.logout(),
|
|
128
202
|
onSuccess: () => {
|
|
129
203
|
setUserID(null);
|
|
@@ -142,8 +216,8 @@ var useFrappeAuth = () => {
|
|
|
142
216
|
};
|
|
143
217
|
};
|
|
144
218
|
// src/frappe/hooks/call.ts
|
|
145
|
-
|
|
146
|
-
|
|
219
|
+
var import_react3 = require("react");
|
|
220
|
+
var import_react_query2 = require("@tanstack/react-query");
|
|
147
221
|
|
|
148
222
|
// src/frappe/utils.ts
|
|
149
223
|
function encodeQueryData(data) {
|
|
@@ -155,11 +229,11 @@ function encodeQueryData(data) {
|
|
|
155
229
|
|
|
156
230
|
// src/frappe/hooks/call.ts
|
|
157
231
|
var useFrappeGetCall = (method, params, options, type = "GET") => {
|
|
158
|
-
const { call } =
|
|
232
|
+
const { call } = import_react3.useContext(FrappeContext);
|
|
159
233
|
const urlParams = encodeQueryData(params ?? {});
|
|
160
234
|
const url = `${method}?${urlParams}`;
|
|
161
235
|
const queryKey = ["frappeCall", type, method, url];
|
|
162
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
236
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query2.useQuery({
|
|
163
237
|
queryKey,
|
|
164
238
|
queryFn: type === "GET" ? () => call.get(method, params) : () => call.post(method, params),
|
|
165
239
|
enabled: (options?.enabled ?? true) && !!method,
|
|
@@ -175,9 +249,9 @@ var useFrappeGetCall = (method, params, options, type = "GET") => {
|
|
|
175
249
|
};
|
|
176
250
|
};
|
|
177
251
|
var useFrappeMutation = (method, httpMethod) => {
|
|
178
|
-
const { call: frappeCall } =
|
|
252
|
+
const { call: frappeCall } = import_react3.useContext(FrappeContext);
|
|
179
253
|
const queryKey = ["frappeCall", httpMethod, method];
|
|
180
|
-
const { mutateAsync, data, isPending, error, isSuccess, reset } =
|
|
254
|
+
const { mutateAsync, data, isPending, error, isSuccess, reset } = import_react_query2.useMutation({
|
|
181
255
|
mutationKey: queryKey,
|
|
182
256
|
mutationFn: (params) => {
|
|
183
257
|
if (httpMethod === "POST")
|
|
@@ -200,12 +274,12 @@ var useFrappePostCall = (method) => useFrappeMutation(method, "POST");
|
|
|
200
274
|
var useFrappePutCall = (method) => useFrappeMutation(method, "PUT");
|
|
201
275
|
var useFrappeDeleteCall = (method) => useFrappeMutation(method, "DELETE");
|
|
202
276
|
// src/frappe/hooks/count.ts
|
|
203
|
-
|
|
204
|
-
|
|
277
|
+
var import_react4 = require("react");
|
|
278
|
+
var import_react_query3 = require("@tanstack/react-query");
|
|
205
279
|
var useFrappeGetDocCount = (doctype, filters, debug = false, options) => {
|
|
206
|
-
const { url, db } =
|
|
280
|
+
const { url, db } = import_react4.useContext(FrappeContext);
|
|
207
281
|
const queryKey = ["docCount", url, doctype, filters ?? [], debug];
|
|
208
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
282
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query3.useQuery({
|
|
209
283
|
queryKey,
|
|
210
284
|
queryFn: () => db.getCount(doctype, filters, debug),
|
|
211
285
|
enabled: !!doctype,
|
|
@@ -220,11 +294,11 @@ var useFrappeGetDocCount = (doctype, filters, debug = false, options) => {
|
|
|
220
294
|
};
|
|
221
295
|
};
|
|
222
296
|
// src/frappe/hooks/create.ts
|
|
223
|
-
|
|
224
|
-
|
|
297
|
+
var import_react5 = require("react");
|
|
298
|
+
var import_react_query4 = require("@tanstack/react-query");
|
|
225
299
|
var useFrappeCreateDoc = () => {
|
|
226
|
-
const { db } =
|
|
227
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
300
|
+
const { db } = import_react5.useContext(FrappeContext);
|
|
301
|
+
const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query4.useMutation({
|
|
228
302
|
mutationFn: ({ doctype, doc }) => db.createDoc(doctype, doc)
|
|
229
303
|
});
|
|
230
304
|
const createDoc = (doctype, doc) => mutateAsync({ doctype, doc });
|
|
@@ -237,11 +311,11 @@ var useFrappeCreateDoc = () => {
|
|
|
237
311
|
};
|
|
238
312
|
};
|
|
239
313
|
// src/frappe/hooks/delete.ts
|
|
240
|
-
|
|
241
|
-
|
|
314
|
+
var import_react6 = require("react");
|
|
315
|
+
var import_react_query5 = require("@tanstack/react-query");
|
|
242
316
|
var useFrappeDeleteDoc = () => {
|
|
243
|
-
const { db } =
|
|
244
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
317
|
+
const { db } = import_react6.useContext(FrappeContext);
|
|
318
|
+
const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query5.useMutation({
|
|
245
319
|
mutationFn: ({ doctype, docname }) => db.deleteDoc(doctype, docname)
|
|
246
320
|
});
|
|
247
321
|
const deleteDoc = (doctype, docname) => mutateAsync({ doctype, docname });
|
|
@@ -254,10 +328,10 @@ var useFrappeDeleteDoc = () => {
|
|
|
254
328
|
};
|
|
255
329
|
};
|
|
256
330
|
// src/frappe/hooks/event.ts
|
|
257
|
-
|
|
331
|
+
var import_react7 = require("react");
|
|
258
332
|
var useFrappeEventListener = (eventName, callback) => {
|
|
259
|
-
const { socket } =
|
|
260
|
-
|
|
333
|
+
const { socket } = import_react7.useContext(FrappeContext);
|
|
334
|
+
import_react7.useEffect(() => {
|
|
261
335
|
if (socket === undefined) {
|
|
262
336
|
console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
|
|
263
337
|
}
|
|
@@ -268,9 +342,9 @@ var useFrappeEventListener = (eventName, callback) => {
|
|
|
268
342
|
}, [eventName, callback, socket]);
|
|
269
343
|
};
|
|
270
344
|
var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOpenCloseEventsOnMount = true) => {
|
|
271
|
-
const { socket } =
|
|
272
|
-
const [viewers, setViewers] =
|
|
273
|
-
|
|
345
|
+
const { socket } = import_react7.useContext(FrappeContext);
|
|
346
|
+
const [viewers, setViewers] = import_react7.useState([]);
|
|
347
|
+
import_react7.useEffect(() => {
|
|
274
348
|
if (socket === undefined) {
|
|
275
349
|
console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
|
|
276
350
|
}
|
|
@@ -291,13 +365,13 @@ var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOp
|
|
|
291
365
|
};
|
|
292
366
|
}, [doctype, docname, emitOpenCloseEventsOnMount, socket]);
|
|
293
367
|
useFrappeEventListener("doc_update", onUpdateCallback);
|
|
294
|
-
const emitDocOpen =
|
|
368
|
+
const emitDocOpen = import_react7.useCallback(() => {
|
|
295
369
|
socket?.emit("doc_open", doctype, docname);
|
|
296
370
|
}, [doctype, docname, socket]);
|
|
297
|
-
const emitDocClose =
|
|
371
|
+
const emitDocClose = import_react7.useCallback(() => {
|
|
298
372
|
socket?.emit("doc_close", doctype, docname);
|
|
299
373
|
}, [doctype, docname, socket]);
|
|
300
|
-
const onViewerEvent =
|
|
374
|
+
const onViewerEvent = import_react7.useCallback((data) => {
|
|
301
375
|
if (data.doctype === doctype && data.docname === docname) {
|
|
302
376
|
setViewers(data.users);
|
|
303
377
|
}
|
|
@@ -310,8 +384,8 @@ var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOp
|
|
|
310
384
|
};
|
|
311
385
|
};
|
|
312
386
|
var useFrappeDocTypeEventListener = (doctype, onListUpdateCallback) => {
|
|
313
|
-
const { socket } =
|
|
314
|
-
|
|
387
|
+
const { socket } = import_react7.useContext(FrappeContext);
|
|
388
|
+
import_react7.useEffect(() => {
|
|
315
389
|
if (socket === undefined) {
|
|
316
390
|
console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
|
|
317
391
|
}
|
|
@@ -328,18 +402,18 @@ var useFrappeDocTypeEventListener = (doctype, onListUpdateCallback) => {
|
|
|
328
402
|
useFrappeEventListener("list_update", onListUpdateCallback);
|
|
329
403
|
};
|
|
330
404
|
// src/frappe/hooks/file.ts
|
|
331
|
-
|
|
332
|
-
|
|
405
|
+
var import_react8 = require("react");
|
|
406
|
+
var import_react_query6 = require("@tanstack/react-query");
|
|
333
407
|
var useFrappeFileUpload = () => {
|
|
334
|
-
const { file } =
|
|
335
|
-
const [progress, setProgress] =
|
|
408
|
+
const { file } = import_react8.useContext(FrappeContext);
|
|
409
|
+
const [progress, setProgress] = import_react8.useState(0);
|
|
336
410
|
const {
|
|
337
411
|
mutateAsync,
|
|
338
412
|
isPending,
|
|
339
413
|
error,
|
|
340
414
|
isSuccess,
|
|
341
415
|
reset: resetMutation
|
|
342
|
-
} =
|
|
416
|
+
} = import_react_query6.useMutation({
|
|
343
417
|
mutationFn: ({ f, args, apiPath }) => {
|
|
344
418
|
setProgress(0);
|
|
345
419
|
return file.uploadFile(f, args, (completed, total) => {
|
|
@@ -366,12 +440,12 @@ var useFrappeFileUpload = () => {
|
|
|
366
440
|
};
|
|
367
441
|
};
|
|
368
442
|
// src/frappe/hooks/get.ts
|
|
369
|
-
|
|
370
|
-
|
|
443
|
+
var import_react9 = require("react");
|
|
444
|
+
var import_react_query7 = require("@tanstack/react-query");
|
|
371
445
|
var useFrappeGetDoc = (doctype, name, options) => {
|
|
372
|
-
const { url, db } =
|
|
446
|
+
const { url, db } = import_react9.useContext(FrappeContext);
|
|
373
447
|
const queryKey = ["doc", url, doctype, name];
|
|
374
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
448
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query7.useQuery({
|
|
375
449
|
queryKey,
|
|
376
450
|
queryFn: () => db.getDoc(doctype, name),
|
|
377
451
|
enabled: !!name,
|
|
@@ -387,14 +461,12 @@ var useFrappeGetDoc = (doctype, name, options) => {
|
|
|
387
461
|
};
|
|
388
462
|
};
|
|
389
463
|
// src/frappe/hooks/list.ts
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
useQuery as useQuery5
|
|
393
|
-
} from "@tanstack/react-query";
|
|
464
|
+
var import_react10 = require("react");
|
|
465
|
+
var import_react_query8 = require("@tanstack/react-query");
|
|
394
466
|
var useFrappeGetDocList = (doctype, args, options) => {
|
|
395
|
-
const { url, db } =
|
|
467
|
+
const { url, db } = import_react10.useContext(FrappeContext);
|
|
396
468
|
const queryKey = ["docList", url, doctype, args ?? null];
|
|
397
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
469
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query8.useQuery({
|
|
398
470
|
queryKey,
|
|
399
471
|
queryFn: () => db.getDocList(doctype, args),
|
|
400
472
|
...options
|
|
@@ -408,12 +480,12 @@ var useFrappeGetDocList = (doctype, args, options) => {
|
|
|
408
480
|
};
|
|
409
481
|
};
|
|
410
482
|
// src/frappe/hooks/prefetch.ts
|
|
411
|
-
|
|
412
|
-
|
|
483
|
+
var import_react11 = require("react");
|
|
484
|
+
var import_react_query9 = require("@tanstack/react-query");
|
|
413
485
|
var useFrappePrefetchDoc = (doctype, name, options) => {
|
|
414
|
-
const queryClient =
|
|
415
|
-
const { url, db } =
|
|
416
|
-
const preloadDoc =
|
|
486
|
+
const queryClient = import_react_query9.useQueryClient();
|
|
487
|
+
const { url, db } = import_react11.useContext(FrappeContext);
|
|
488
|
+
const preloadDoc = import_react11.useCallback(() => {
|
|
417
489
|
if (!name)
|
|
418
490
|
return;
|
|
419
491
|
const queryKey = ["doc", url, doctype, name];
|
|
@@ -426,7 +498,7 @@ var useFrappePrefetchDoc = (doctype, name, options) => {
|
|
|
426
498
|
return preloadDoc;
|
|
427
499
|
};
|
|
428
500
|
// src/frappe/hooks/search.ts
|
|
429
|
-
|
|
501
|
+
var import_react12 = require("react");
|
|
430
502
|
var useSearch = (doctype, text, filters = [], limit = 20, debounce = 250) => {
|
|
431
503
|
const debouncedText = useDebounce(text, debounce);
|
|
432
504
|
return useFrappeGetCall("frappe.desk.search.search_link", {
|
|
@@ -437,8 +509,8 @@ var useSearch = (doctype, text, filters = [], limit = 20, debounce = 250) => {
|
|
|
437
509
|
});
|
|
438
510
|
};
|
|
439
511
|
var useDebounce = (value, delay) => {
|
|
440
|
-
const [debouncedValue, setDebouncedValue] =
|
|
441
|
-
|
|
512
|
+
const [debouncedValue, setDebouncedValue] = import_react12.useState(value);
|
|
513
|
+
import_react12.useEffect(() => {
|
|
442
514
|
const handler = setTimeout(() => {
|
|
443
515
|
setDebouncedValue(value);
|
|
444
516
|
}, delay);
|
|
@@ -449,11 +521,11 @@ var useDebounce = (value, delay) => {
|
|
|
449
521
|
return debouncedValue;
|
|
450
522
|
};
|
|
451
523
|
// src/frappe/hooks/update.ts
|
|
452
|
-
|
|
453
|
-
|
|
524
|
+
var import_react13 = require("react");
|
|
525
|
+
var import_react_query10 = require("@tanstack/react-query");
|
|
454
526
|
var useFrappeUpdateDoc = () => {
|
|
455
|
-
const { db } =
|
|
456
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
527
|
+
const { db } = import_react13.useContext(FrappeContext);
|
|
528
|
+
const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query10.useMutation({
|
|
457
529
|
mutationFn: ({ doctype, docname, doc }) => db.updateDoc(doctype, docname, doc)
|
|
458
530
|
});
|
|
459
531
|
const updateDoc = (doctype, docname, doc) => mutateAsync({ doctype, docname, doc });
|
|
@@ -465,8 +537,29 @@ var useFrappeUpdateDoc = () => {
|
|
|
465
537
|
reset
|
|
466
538
|
};
|
|
467
539
|
};
|
|
540
|
+
// src/frappe/hooks/meta.ts
|
|
541
|
+
var import_react14 = require("react");
|
|
542
|
+
var import_react_query11 = require("@tanstack/react-query");
|
|
543
|
+
var useFrappeGetMeta = (doctype, options) => {
|
|
544
|
+
const { url, call } = import_react14.useContext(FrappeContext);
|
|
545
|
+
const queryKey = ["meta", url, doctype];
|
|
546
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query11.useQuery({
|
|
547
|
+
queryKey: ["meta", url, doctype],
|
|
548
|
+
queryFn: () => call.get("lasterp.api.get_meta", { doctype }),
|
|
549
|
+
enabled: !!doctype,
|
|
550
|
+
staleTime: options?.staleTime ?? Infinity,
|
|
551
|
+
retry: options?.retry ?? false
|
|
552
|
+
});
|
|
553
|
+
return {
|
|
554
|
+
data,
|
|
555
|
+
error,
|
|
556
|
+
isLoading,
|
|
557
|
+
isFetching,
|
|
558
|
+
refetch
|
|
559
|
+
};
|
|
560
|
+
};
|
|
468
561
|
// src/hooks/use-variant-selector/hook.ts
|
|
469
|
-
|
|
562
|
+
var import_react15 = require("react");
|
|
470
563
|
|
|
471
564
|
// src/hooks/use-variant-selector/utils.ts
|
|
472
565
|
function findVariant(variants, specs, caseInsensitive) {
|
|
@@ -499,21 +592,21 @@ function findVariants(variants, specs, caseInsensitive) {
|
|
|
499
592
|
// src/hooks/use-variant-selector/hook.ts
|
|
500
593
|
var useVariantSelector = (props) => {
|
|
501
594
|
const { variants, attributes, defaultId } = props;
|
|
502
|
-
const [selectedSpecs, setSelectedSpecs] =
|
|
595
|
+
const [selectedSpecs, setSelectedSpecs] = import_react15.useState(() => {
|
|
503
596
|
if (defaultId) {
|
|
504
597
|
const variant = variants.find((v) => v.id === defaultId);
|
|
505
598
|
return variant?.specs || {};
|
|
506
599
|
}
|
|
507
600
|
return {};
|
|
508
601
|
});
|
|
509
|
-
const variantId =
|
|
602
|
+
const variantId = import_react15.useMemo(() => {
|
|
510
603
|
const complete = attributes.every((attr) => selectedSpecs[attr.key]);
|
|
511
604
|
if (!complete)
|
|
512
605
|
return;
|
|
513
606
|
const variant = findVariant(variants, selectedSpecs);
|
|
514
607
|
return variant?.id;
|
|
515
608
|
}, [variants, selectedSpecs, attributes]);
|
|
516
|
-
const options =
|
|
609
|
+
const options = import_react15.useMemo(() => {
|
|
517
610
|
const result = {};
|
|
518
611
|
attributes.forEach((attr, attrIndex) => {
|
|
519
612
|
const constraints = {};
|
|
@@ -536,7 +629,7 @@ var useVariantSelector = (props) => {
|
|
|
536
629
|
});
|
|
537
630
|
return result;
|
|
538
631
|
}, [variants, attributes, selectedSpecs]);
|
|
539
|
-
const onOptionSelect =
|
|
632
|
+
const onOptionSelect = import_react15.useCallback((key, value) => {
|
|
540
633
|
setSelectedSpecs((prev) => {
|
|
541
634
|
const newSpecs = { ...prev, [key]: value };
|
|
542
635
|
const attrIndex = attributes.findIndex((a) => a.key === key);
|
|
@@ -570,35 +663,54 @@ var useVariantSelector = (props) => {
|
|
|
570
663
|
getOptions: (key) => options[key] || []
|
|
571
664
|
};
|
|
572
665
|
};
|
|
666
|
+
// src/locale/provider.tsx
|
|
667
|
+
var import_react16 = require("react");
|
|
668
|
+
var jsx_runtime2 = require("react/jsx-runtime");
|
|
669
|
+
function translate(message, replace, messages = {}) {
|
|
670
|
+
let translated = messages[message] ?? message;
|
|
671
|
+
replace?.forEach((val, i) => {
|
|
672
|
+
translated = translated.replace(`{${i}}`, String(val));
|
|
673
|
+
});
|
|
674
|
+
return translated;
|
|
675
|
+
}
|
|
676
|
+
var LocaleContext = import_react16.createContext((message) => message);
|
|
677
|
+
function LocaleProvider({
|
|
678
|
+
method,
|
|
679
|
+
language,
|
|
680
|
+
storage,
|
|
681
|
+
children
|
|
682
|
+
}) {
|
|
683
|
+
const [messages, setMessages] = import_react16.useState({});
|
|
684
|
+
import_react16.useEffect(() => {
|
|
685
|
+
if (!storage)
|
|
686
|
+
return;
|
|
687
|
+
const key = `locale:${language}`;
|
|
688
|
+
Promise.resolve(storage.getItem(key)).then((cached) => {
|
|
689
|
+
if (cached)
|
|
690
|
+
setMessages(JSON.parse(cached));
|
|
691
|
+
}).catch(() => {});
|
|
692
|
+
}, [language, storage]);
|
|
693
|
+
const { data, isLoading } = useFrappeGetCall(method, { lang: language }, { staleTime: Infinity });
|
|
694
|
+
import_react16.useEffect(() => {
|
|
695
|
+
if (!data?.message)
|
|
696
|
+
return;
|
|
697
|
+
setMessages(data.message);
|
|
698
|
+
storage?.setItem(`locale:${language}`, JSON.stringify(data.message));
|
|
699
|
+
}, [data, language, storage]);
|
|
700
|
+
const __ = import_react16.useCallback((message, replace) => translate(message, replace, messages), [messages]);
|
|
701
|
+
if (isLoading && Object.keys(messages).length === 0)
|
|
702
|
+
return null;
|
|
703
|
+
return /* @__PURE__ */ jsx_runtime2.jsx(LocaleContext.Provider, {
|
|
704
|
+
value: __,
|
|
705
|
+
children
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
function useLocale() {
|
|
709
|
+
const __ = import_react16.useContext(LocaleContext);
|
|
710
|
+
return { __ };
|
|
711
|
+
}
|
|
573
712
|
// src/utils/char.ts
|
|
574
|
-
|
|
713
|
+
var import_humps = require("humps");
|
|
575
714
|
function equalsIgnoreCase(str1, str2) {
|
|
576
715
|
return str1.localeCompare(str2, undefined, { sensitivity: "accent" }) === 0;
|
|
577
716
|
}
|
|
578
|
-
export {
|
|
579
|
-
useVariantSelector,
|
|
580
|
-
useSearch,
|
|
581
|
-
useFrappeUpdateDoc,
|
|
582
|
-
useFrappePutCall,
|
|
583
|
-
useFrappePrefetchDoc,
|
|
584
|
-
useFrappePostCall,
|
|
585
|
-
useFrappeGetDocList,
|
|
586
|
-
useFrappeGetDocCount,
|
|
587
|
-
useFrappeGetDoc,
|
|
588
|
-
useFrappeGetCall,
|
|
589
|
-
useFrappeFileUpload,
|
|
590
|
-
useFrappeEventListener,
|
|
591
|
-
useFrappeDocumentEventListener,
|
|
592
|
-
useFrappeDocTypeEventListener,
|
|
593
|
-
useFrappeDeleteDoc,
|
|
594
|
-
useFrappeDeleteCall,
|
|
595
|
-
useFrappeCreateDoc,
|
|
596
|
-
useFrappeAuth,
|
|
597
|
-
equalsIgnoreCase,
|
|
598
|
-
decamelizeKeys,
|
|
599
|
-
decamelize,
|
|
600
|
-
camelizeKeys,
|
|
601
|
-
camelize,
|
|
602
|
-
FrappeProvider,
|
|
603
|
-
FrappeContext
|
|
604
|
-
};
|
|
@@ -97,6 +97,15 @@ interface Page {
|
|
|
97
97
|
hero?: Hero;
|
|
98
98
|
blocks: Block[];
|
|
99
99
|
}
|
|
100
|
+
interface WorkspaceSidebar {
|
|
101
|
+
label: string;
|
|
102
|
+
header_icon: string;
|
|
103
|
+
items: WorkspaceSidebarItem[];
|
|
104
|
+
}
|
|
105
|
+
interface WorkspaceSidebarItem {
|
|
106
|
+
label: string;
|
|
107
|
+
link_to: string;
|
|
108
|
+
}
|
|
100
109
|
import { FrappeApp, FrappeAuth, FrappeCall } from "frappe-js-sdk";
|
|
101
110
|
import { FrappeDB } from "frappe-js-sdk/lib/db";
|
|
102
111
|
import { FrappeFileUpload } from "frappe-js-sdk/lib/file";
|
|
@@ -586,6 +595,32 @@ declare const useFrappeUpdateDoc: <T = any>() => {
|
|
|
586
595
|
isCompleted: boolean;
|
|
587
596
|
reset: () => void;
|
|
588
597
|
};
|
|
598
|
+
interface FrappeMeta {
|
|
599
|
+
fields: FrappeMetaField[];
|
|
600
|
+
permissions: {
|
|
601
|
+
can_select: boolean;
|
|
602
|
+
can_read: boolean;
|
|
603
|
+
can_write: boolean;
|
|
604
|
+
can_create: boolean;
|
|
605
|
+
can_delete: boolean;
|
|
606
|
+
};
|
|
607
|
+
}
|
|
608
|
+
interface FrappeMetaField {
|
|
609
|
+
label: string;
|
|
610
|
+
fieldname: string;
|
|
611
|
+
read_only: boolean;
|
|
612
|
+
set_only_once: boolean;
|
|
613
|
+
}
|
|
614
|
+
declare const useFrappeGetMeta: <FrappeMeta>(doctype: string, options?: {
|
|
615
|
+
staleTime?: number;
|
|
616
|
+
retry?: boolean | number;
|
|
617
|
+
}) => {
|
|
618
|
+
data: FrappeMeta | undefined;
|
|
619
|
+
error: FrappeError | null;
|
|
620
|
+
isLoading: boolean;
|
|
621
|
+
isFetching: boolean;
|
|
622
|
+
refetch: () => void;
|
|
623
|
+
};
|
|
589
624
|
interface VariantSelectorProps<T extends {
|
|
590
625
|
id: string;
|
|
591
626
|
specs: Record<string, string>;
|
|
@@ -611,6 +646,19 @@ declare const useVariantSelector: <T extends {
|
|
|
611
646
|
id: string;
|
|
612
647
|
specs: Record<string, string>;
|
|
613
648
|
}>(props: VariantSelectorProps<T>) => VariantSelectorResult;
|
|
649
|
+
import { JSX, ReactNode } from "react";
|
|
650
|
+
import { StateStorage } from "zustand/middleware";
|
|
651
|
+
type TranslateFn = (message: string, replace?: (string | number)[]) => string;
|
|
652
|
+
interface LocaleProviderProps {
|
|
653
|
+
method: string;
|
|
654
|
+
language: string;
|
|
655
|
+
storage?: StateStorage;
|
|
656
|
+
children: ReactNode;
|
|
657
|
+
}
|
|
658
|
+
declare function LocaleProvider({ method, language, storage, children }: LocaleProviderProps): JSX.Element | null;
|
|
659
|
+
declare function useLocale(): {
|
|
660
|
+
__: TranslateFn;
|
|
661
|
+
};
|
|
614
662
|
interface Category {
|
|
615
663
|
name: string;
|
|
616
664
|
}
|
|
@@ -644,4 +692,4 @@ interface ProductContext {
|
|
|
644
692
|
}
|
|
645
693
|
import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
|
|
646
694
|
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 };
|
|
695
|
+
export { useVariantSelector, useSearch, useLocale, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetMeta, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, WorkspaceSidebarItem, WorkspaceSidebar, 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, FrappeMetaField, FrappeMeta, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
|
|
@@ -97,6 +97,15 @@ interface Page {
|
|
|
97
97
|
hero?: Hero;
|
|
98
98
|
blocks: Block[];
|
|
99
99
|
}
|
|
100
|
+
interface WorkspaceSidebar {
|
|
101
|
+
label: string;
|
|
102
|
+
header_icon: string;
|
|
103
|
+
items: WorkspaceSidebarItem[];
|
|
104
|
+
}
|
|
105
|
+
interface WorkspaceSidebarItem {
|
|
106
|
+
label: string;
|
|
107
|
+
link_to: string;
|
|
108
|
+
}
|
|
100
109
|
import { FrappeApp, FrappeAuth, FrappeCall } from "frappe-js-sdk";
|
|
101
110
|
import { FrappeDB } from "frappe-js-sdk/lib/db";
|
|
102
111
|
import { FrappeFileUpload } from "frappe-js-sdk/lib/file";
|
|
@@ -586,6 +595,32 @@ declare const useFrappeUpdateDoc: <T = any>() => {
|
|
|
586
595
|
isCompleted: boolean;
|
|
587
596
|
reset: () => void;
|
|
588
597
|
};
|
|
598
|
+
interface FrappeMeta {
|
|
599
|
+
fields: FrappeMetaField[];
|
|
600
|
+
permissions: {
|
|
601
|
+
can_select: boolean;
|
|
602
|
+
can_read: boolean;
|
|
603
|
+
can_write: boolean;
|
|
604
|
+
can_create: boolean;
|
|
605
|
+
can_delete: boolean;
|
|
606
|
+
};
|
|
607
|
+
}
|
|
608
|
+
interface FrappeMetaField {
|
|
609
|
+
label: string;
|
|
610
|
+
fieldname: string;
|
|
611
|
+
read_only: boolean;
|
|
612
|
+
set_only_once: boolean;
|
|
613
|
+
}
|
|
614
|
+
declare const useFrappeGetMeta: <FrappeMeta>(doctype: string, options?: {
|
|
615
|
+
staleTime?: number;
|
|
616
|
+
retry?: boolean | number;
|
|
617
|
+
}) => {
|
|
618
|
+
data: FrappeMeta | undefined;
|
|
619
|
+
error: FrappeError | null;
|
|
620
|
+
isLoading: boolean;
|
|
621
|
+
isFetching: boolean;
|
|
622
|
+
refetch: () => void;
|
|
623
|
+
};
|
|
589
624
|
interface VariantSelectorProps<T extends {
|
|
590
625
|
id: string;
|
|
591
626
|
specs: Record<string, string>;
|
|
@@ -611,6 +646,19 @@ declare const useVariantSelector: <T extends {
|
|
|
611
646
|
id: string;
|
|
612
647
|
specs: Record<string, string>;
|
|
613
648
|
}>(props: VariantSelectorProps<T>) => VariantSelectorResult;
|
|
649
|
+
import { JSX, ReactNode } from "react";
|
|
650
|
+
import { StateStorage } from "zustand/middleware";
|
|
651
|
+
type TranslateFn = (message: string, replace?: (string | number)[]) => string;
|
|
652
|
+
interface LocaleProviderProps {
|
|
653
|
+
method: string;
|
|
654
|
+
language: string;
|
|
655
|
+
storage?: StateStorage;
|
|
656
|
+
children: ReactNode;
|
|
657
|
+
}
|
|
658
|
+
declare function LocaleProvider({ method, language, storage, children }: LocaleProviderProps): JSX.Element | null;
|
|
659
|
+
declare function useLocale(): {
|
|
660
|
+
__: TranslateFn;
|
|
661
|
+
};
|
|
614
662
|
interface Category {
|
|
615
663
|
name: string;
|
|
616
664
|
}
|
|
@@ -644,4 +692,4 @@ interface ProductContext {
|
|
|
644
692
|
}
|
|
645
693
|
import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
|
|
646
694
|
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 };
|
|
695
|
+
export { useVariantSelector, useSearch, useLocale, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetMeta, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, WorkspaceSidebarItem, WorkspaceSidebar, 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, FrappeMetaField, FrappeMeta, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
|
|
@@ -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
|
};
|
|
@@ -465,6 +465,27 @@ var useFrappeUpdateDoc = () => {
|
|
|
465
465
|
reset
|
|
466
466
|
};
|
|
467
467
|
};
|
|
468
|
+
// src/frappe/hooks/meta.ts
|
|
469
|
+
import { useContext as useContext12 } from "react";
|
|
470
|
+
import { useQuery as useQuery6 } from "@tanstack/react-query";
|
|
471
|
+
var useFrappeGetMeta = (doctype, options) => {
|
|
472
|
+
const { url, call } = useContext12(FrappeContext);
|
|
473
|
+
const queryKey = ["meta", url, doctype];
|
|
474
|
+
const { data, error, isLoading, isFetching, refetch } = useQuery6({
|
|
475
|
+
queryKey: ["meta", url, doctype],
|
|
476
|
+
queryFn: () => call.get("lasterp.api.get_meta", { doctype }),
|
|
477
|
+
enabled: !!doctype,
|
|
478
|
+
staleTime: options?.staleTime ?? Infinity,
|
|
479
|
+
retry: options?.retry ?? false
|
|
480
|
+
});
|
|
481
|
+
return {
|
|
482
|
+
data,
|
|
483
|
+
error,
|
|
484
|
+
isLoading,
|
|
485
|
+
isFetching,
|
|
486
|
+
refetch
|
|
487
|
+
};
|
|
488
|
+
};
|
|
468
489
|
// src/hooks/use-variant-selector/hook.ts
|
|
469
490
|
import { useCallback as useCallback4, useMemo as useMemo2, useState as useState5 } from "react";
|
|
470
491
|
|
|
@@ -570,6 +591,58 @@ var useVariantSelector = (props) => {
|
|
|
570
591
|
getOptions: (key) => options[key] || []
|
|
571
592
|
};
|
|
572
593
|
};
|
|
594
|
+
// src/locale/provider.tsx
|
|
595
|
+
import {
|
|
596
|
+
createContext as createContext2,
|
|
597
|
+
useCallback as useCallback5,
|
|
598
|
+
useContext as useContext13,
|
|
599
|
+
useEffect as useEffect4,
|
|
600
|
+
useState as useState6
|
|
601
|
+
} from "react";
|
|
602
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
603
|
+
function translate(message, replace, messages = {}) {
|
|
604
|
+
let translated = messages[message] ?? message;
|
|
605
|
+
replace?.forEach((val, i) => {
|
|
606
|
+
translated = translated.replace(`{${i}}`, String(val));
|
|
607
|
+
});
|
|
608
|
+
return translated;
|
|
609
|
+
}
|
|
610
|
+
var LocaleContext = createContext2((message) => message);
|
|
611
|
+
function LocaleProvider({
|
|
612
|
+
method,
|
|
613
|
+
language,
|
|
614
|
+
storage,
|
|
615
|
+
children
|
|
616
|
+
}) {
|
|
617
|
+
const [messages, setMessages] = useState6({});
|
|
618
|
+
useEffect4(() => {
|
|
619
|
+
if (!storage)
|
|
620
|
+
return;
|
|
621
|
+
const key = `locale:${language}`;
|
|
622
|
+
Promise.resolve(storage.getItem(key)).then((cached) => {
|
|
623
|
+
if (cached)
|
|
624
|
+
setMessages(JSON.parse(cached));
|
|
625
|
+
}).catch(() => {});
|
|
626
|
+
}, [language, storage]);
|
|
627
|
+
const { data, isLoading } = useFrappeGetCall(method, { lang: language }, { staleTime: Infinity });
|
|
628
|
+
useEffect4(() => {
|
|
629
|
+
if (!data?.message)
|
|
630
|
+
return;
|
|
631
|
+
setMessages(data.message);
|
|
632
|
+
storage?.setItem(`locale:${language}`, JSON.stringify(data.message));
|
|
633
|
+
}, [data, language, storage]);
|
|
634
|
+
const __ = useCallback5((message, replace) => translate(message, replace, messages), [messages]);
|
|
635
|
+
if (isLoading && Object.keys(messages).length === 0)
|
|
636
|
+
return null;
|
|
637
|
+
return /* @__PURE__ */ jsx2(LocaleContext.Provider, {
|
|
638
|
+
value: __,
|
|
639
|
+
children
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
function useLocale() {
|
|
643
|
+
const __ = useContext13(LocaleContext);
|
|
644
|
+
return { __ };
|
|
645
|
+
}
|
|
573
646
|
// src/utils/char.ts
|
|
574
647
|
import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
|
|
575
648
|
function equalsIgnoreCase(str1, str2) {
|
|
@@ -578,10 +651,12 @@ function equalsIgnoreCase(str1, str2) {
|
|
|
578
651
|
export {
|
|
579
652
|
useVariantSelector,
|
|
580
653
|
useSearch,
|
|
654
|
+
useLocale,
|
|
581
655
|
useFrappeUpdateDoc,
|
|
582
656
|
useFrappePutCall,
|
|
583
657
|
useFrappePrefetchDoc,
|
|
584
658
|
useFrappePostCall,
|
|
659
|
+
useFrappeGetMeta,
|
|
585
660
|
useFrappeGetDocList,
|
|
586
661
|
useFrappeGetDocCount,
|
|
587
662
|
useFrappeGetDoc,
|
|
@@ -599,6 +674,7 @@ export {
|
|
|
599
674
|
decamelize,
|
|
600
675
|
camelizeKeys,
|
|
601
676
|
camelize,
|
|
677
|
+
LocaleProvider,
|
|
602
678
|
FrappeProvider,
|
|
603
679
|
FrappeContext
|
|
604
680
|
};
|
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.11",
|
|
4
4
|
"description": "Shared repo for webapp and native app",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -20,38 +20,32 @@
|
|
|
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",
|
|
27
|
-
"@logto/react": "^4.0.13",
|
|
28
|
-
"@logto/rn": "^1.1.0"
|
|
26
|
+
"typescript": ">=4.5.0"
|
|
29
27
|
},
|
|
30
28
|
"peerDependenciesMeta": {
|
|
31
29
|
"typescript": {
|
|
32
30
|
"optional": true
|
|
33
|
-
},
|
|
34
|
-
"@logto/react": {
|
|
35
|
-
"optional": true
|
|
36
|
-
},
|
|
37
|
-
"@logto/rn": {
|
|
38
|
-
"optional": true
|
|
39
31
|
}
|
|
40
32
|
},
|
|
41
33
|
"type": "module",
|
|
42
34
|
"exports": {
|
|
43
35
|
".": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
36
|
+
"types": "./dist/index.d.ts",
|
|
37
|
+
"import": "./dist/index.js",
|
|
38
|
+
"require": "./dist/index.cjs"
|
|
47
39
|
},
|
|
48
40
|
"./package.json": "./package.json"
|
|
49
41
|
},
|
|
50
42
|
"module": "./dist/index.js",
|
|
43
|
+
"main": "./dist/index.cjs",
|
|
51
44
|
"types": "./dist/index.d.ts",
|
|
52
45
|
"dependencies": {
|
|
53
46
|
"frappe-js-sdk": "^1.12.0",
|
|
54
47
|
"humps": "^2.0.1",
|
|
55
|
-
"socket.io-client": "^4.8.3"
|
|
48
|
+
"socket.io-client": "^4.8.3",
|
|
49
|
+
"zustand": "^5.0.11"
|
|
56
50
|
}
|
|
57
51
|
}
|