@lasterp/shared 1.0.0-beta.2 → 1.0.0-beta.20

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,138 @@
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
+ screenFormSchema: () => screenFormSchema,
67
+ modelFormSchema: () => modelFormSchema,
68
+ itemFormSchema: () => itemFormSchema,
69
+ equalsIgnoreCase: () => equalsIgnoreCase,
70
+ decamelizeKeys: () => import_humps.decamelizeKeys,
71
+ decamelize: () => import_humps.decamelize,
72
+ colourFormSchema: () => colourFormSchema,
73
+ camelizeKeys: () => import_humps.camelizeKeys,
74
+ camelize: () => import_humps.camelize,
75
+ LocaleProvider: () => LocaleProvider,
76
+ FrappeProvider: () => FrappeProvider,
77
+ FrappeContext: () => FrappeContext,
78
+ COLOR_SYSTEMS: () => COLOR_SYSTEMS,
79
+ ATTRIBUTES: () => ATTRIBUTES
80
+ });
81
+ module.exports = __toCommonJS(exports_src);
82
+ // src/catalog/schema.ts
83
+ var import_zod = require("zod");
84
+ var ATTRIBUTES = ["Colour", "Storage", "Memory", "Screen"];
85
+ var COLOR_SYSTEMS = [
86
+ "White",
87
+ "Black",
88
+ "Yellow",
89
+ "Red",
90
+ "Green",
91
+ "Blue",
92
+ "Purple",
93
+ "Orange",
94
+ "Pink",
95
+ "Brown",
96
+ "Gray",
97
+ "Silver",
98
+ "Gold"
99
+ ];
100
+ var colourFormSchema = import_zod.z.object({
101
+ color: import_zod.z.string().min(1, "Color is required"),
102
+ color_hex: import_zod.z.string().optional(),
103
+ color_system: import_zod.z.enum(COLOR_SYSTEMS).optional(),
104
+ images: import_zod.z.array(import_zod.z.union([import_zod.z.instanceof(File), import_zod.z.string()])).default([])
105
+ });
106
+ var screenFormSchema = import_zod.z.object({
107
+ screen: import_zod.z.string().min(1, "Screen is required"),
108
+ height: import_zod.z.number().positive().optional(),
109
+ width: import_zod.z.number().positive().optional(),
110
+ weight: import_zod.z.number().positive().optional()
111
+ });
112
+ var modelFormSchema = import_zod.z.object({
113
+ model: import_zod.z.string().min(1, "Model is required"),
114
+ sim_card_type: import_zod.z.string().optional(),
115
+ connectivity: import_zod.z.array(import_zod.z.string())
116
+ });
117
+ var itemFormSchema = import_zod.z.object({
118
+ item_code: import_zod.z.string().min(1, "Item is required"),
119
+ item_group: import_zod.z.string().optional(),
120
+ brand: import_zod.z.string().optional(),
121
+ os: import_zod.z.string().optional(),
122
+ release_year: import_zod.z.number().int().min(1900).max(2100).optional(),
123
+ attributes: import_zod.z.array(import_zod.z.enum(ATTRIBUTES)),
124
+ colours: import_zod.z.array(colourFormSchema),
125
+ storages: import_zod.z.array(import_zod.z.string()),
126
+ memories: import_zod.z.array(import_zod.z.string()),
127
+ screens: import_zod.z.array(screenFormSchema),
128
+ models: import_zod.z.array(modelFormSchema)
129
+ });
2
130
  // src/frappe/provider.tsx
3
- import { useMemo, createContext } from "react";
4
- import { FrappeApp } from "frappe-js-sdk";
131
+ var import_react = require("react");
132
+ var import_frappe_js_sdk = require("frappe-js-sdk");
5
133
 
6
134
  // src/frappe/socket.ts
7
- import io from "socket.io-client";
135
+ var import_socket = __toESM(require("socket.io-client"));
8
136
 
9
137
  class SocketIO {
10
138
  socket_port;
@@ -35,7 +163,7 @@ class SocketIO {
35
163
  this.url = `${this.url}${site_name}`;
36
164
  }
37
165
  this.site_name = site_name;
38
- this.socket = io(`${this.url}`, {
166
+ this.socket = import_socket.default(`${this.url}`, {
39
167
  withCredentials: true,
40
168
  secure: this.protocol === "https",
41
169
  extraHeaders: tokenParams && tokenParams.useToken === true ? {
@@ -46,9 +174,9 @@ class SocketIO {
46
174
  }
47
175
 
48
176
  // src/frappe/provider.tsx
49
- import { jsx } from "react/jsx-runtime";
177
+ var jsx_runtime = require("react/jsx-runtime");
50
178
 
51
- var FrappeContext = createContext(null);
179
+ var FrappeContext = import_react.createContext(null);
52
180
  var FrappeProvider = ({
53
181
  url = "",
54
182
  tokenParams,
@@ -58,8 +186,8 @@ var FrappeProvider = ({
58
186
  children,
59
187
  customHeaders
60
188
  }) => {
61
- const frappeConfig = useMemo(() => {
62
- const frappe = new FrappeApp(url, tokenParams, undefined, customHeaders);
189
+ const config = import_react.useMemo(() => {
190
+ const frappe = new import_frappe_js_sdk.FrappeApp(url, tokenParams, undefined, customHeaders);
63
191
  return {
64
192
  url,
65
193
  tokenParams,
@@ -71,19 +199,19 @@ var FrappeProvider = ({
71
199
  socket: enableSocket ? new SocketIO(url, siteName, socketPort, tokenParams).socket : undefined
72
200
  };
73
201
  }, [url, tokenParams, enableSocket, socketPort, siteName, customHeaders]);
74
- return /* @__PURE__ */ jsx(FrappeContext.Provider, {
75
- value: frappeConfig,
202
+ return /* @__PURE__ */ jsx_runtime.jsx(FrappeContext.Provider, {
203
+ value: config,
76
204
  children
77
205
  });
78
206
  };
79
207
  // src/frappe/hooks/auth.ts
80
- import { useCallback, useContext, useState, useEffect } from "react";
81
- import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
208
+ var import_react2 = require("react");
209
+ var import_react_query = require("@tanstack/react-query");
82
210
  var useFrappeAuth = () => {
83
- const queryClient = useQueryClient();
84
- const { auth, tokenParams } = useContext(FrappeContext);
85
- const [userID, setUserID] = useState();
86
- const getUserCookie = useCallback(() => {
211
+ const queryClient = import_react_query.useQueryClient();
212
+ const { auth, tokenParams } = import_react2.useContext(FrappeContext);
213
+ const [userID, setUserID] = import_react2.useState();
214
+ const getUserCookie = import_react2.useCallback(() => {
87
215
  const userCookie = document.cookie.split(";").find((c) => c.trim().startsWith("user_id="));
88
216
  if (userCookie) {
89
217
  const userName = userCookie.split("=")[1];
@@ -96,7 +224,7 @@ var useFrappeAuth = () => {
96
224
  setUserID(null);
97
225
  }
98
226
  }, []);
99
- useEffect(() => {
227
+ import_react2.useEffect(() => {
100
228
  if (tokenParams && tokenParams.useToken) {
101
229
  setUserID(null);
102
230
  } else {
@@ -108,7 +236,7 @@ var useFrappeAuth = () => {
108
236
  error,
109
237
  isLoading,
110
238
  isFetching: isValidating
111
- } = useQuery({
239
+ } = import_react_query.useQuery({
112
240
  queryKey: ["currentUser", { tokenParams, userID }],
113
241
  queryFn: () => auth.getLoggedInUser(),
114
242
  enabled: !!(tokenParams?.useToken || userID),
@@ -116,14 +244,14 @@ var useFrappeAuth = () => {
116
244
  refetchOnWindowFocus: false,
117
245
  staleTime: Infinity
118
246
  });
119
- const loginMutation = useMutation({
247
+ const loginMutation = import_react_query.useMutation({
120
248
  mutationFn: (credentials) => auth.loginWithUsernamePassword(credentials),
121
249
  onSuccess: () => {
122
250
  getUserCookie();
123
251
  queryClient.invalidateQueries({ queryKey: ["currentUser"] });
124
252
  }
125
253
  });
126
- const logoutMutation = useMutation({
254
+ const logoutMutation = import_react_query.useMutation({
127
255
  mutationFn: () => auth.logout(),
128
256
  onSuccess: () => {
129
257
  setUserID(null);
@@ -142,8 +270,8 @@ var useFrappeAuth = () => {
142
270
  };
143
271
  };
144
272
  // src/frappe/hooks/call.ts
145
- import { useContext as useContext2 } from "react";
146
- import { useMutation as useMutation2, useQuery as useQuery2 } from "@tanstack/react-query";
273
+ var import_react3 = require("react");
274
+ var import_react_query2 = require("@tanstack/react-query");
147
275
 
148
276
  // src/frappe/utils.ts
149
277
  function encodeQueryData(data) {
@@ -155,13 +283,21 @@ function encodeQueryData(data) {
155
283
 
156
284
  // src/frappe/hooks/call.ts
157
285
  var useFrappeGetCall = (method, params, options, type = "GET") => {
158
- const { call } = useContext2(FrappeContext);
286
+ const { call } = import_react3.useContext(FrappeContext);
159
287
  const urlParams = encodeQueryData(params ?? {});
160
288
  const url = `${method}?${urlParams}`;
161
289
  const queryKey = ["frappeCall", type, method, url];
162
- const { data, error, isLoading, isFetching, refetch } = useQuery2({
290
+ const { data, error, isLoading, isFetching, refetch } = import_react_query2.useQuery({
163
291
  queryKey,
164
- queryFn: type === "GET" ? () => call.get(method, params) : () => call.post(method, params),
292
+ queryFn: async () => {
293
+ if (type === "GET") {
294
+ const response = await call.get(method, params);
295
+ return response.message;
296
+ } else {
297
+ const response = await call.post(method, params);
298
+ return response.message;
299
+ }
300
+ },
165
301
  enabled: (options?.enabled ?? true) && !!method,
166
302
  staleTime: options?.staleTime,
167
303
  retry: options?.retry ?? false
@@ -175,9 +311,9 @@ var useFrappeGetCall = (method, params, options, type = "GET") => {
175
311
  };
176
312
  };
177
313
  var useFrappeMutation = (method, httpMethod) => {
178
- const { call: frappeCall } = useContext2(FrappeContext);
314
+ const { call: frappeCall } = import_react3.useContext(FrappeContext);
179
315
  const queryKey = ["frappeCall", httpMethod, method];
180
- const { mutateAsync, data, isPending, error, isSuccess, reset } = useMutation2({
316
+ const { mutateAsync, data, isPending, error, isSuccess, reset } = import_react_query2.useMutation({
181
317
  mutationKey: queryKey,
182
318
  mutationFn: (params) => {
183
319
  if (httpMethod === "POST")
@@ -200,12 +336,12 @@ var useFrappePostCall = (method) => useFrappeMutation(method, "POST");
200
336
  var useFrappePutCall = (method) => useFrappeMutation(method, "PUT");
201
337
  var useFrappeDeleteCall = (method) => useFrappeMutation(method, "DELETE");
202
338
  // src/frappe/hooks/count.ts
203
- import { useContext as useContext3 } from "react";
204
- import { useQuery as useQuery3 } from "@tanstack/react-query";
339
+ var import_react4 = require("react");
340
+ var import_react_query3 = require("@tanstack/react-query");
205
341
  var useFrappeGetDocCount = (doctype, filters, debug = false, options) => {
206
- const { url, db } = useContext3(FrappeContext);
342
+ const { url, db } = import_react4.useContext(FrappeContext);
207
343
  const queryKey = ["docCount", url, doctype, filters ?? [], debug];
208
- const { data, error, isLoading, isFetching, refetch } = useQuery3({
344
+ const { data, error, isLoading, isFetching, refetch } = import_react_query3.useQuery({
209
345
  queryKey,
210
346
  queryFn: () => db.getCount(doctype, filters, debug),
211
347
  enabled: !!doctype,
@@ -220,11 +356,11 @@ var useFrappeGetDocCount = (doctype, filters, debug = false, options) => {
220
356
  };
221
357
  };
222
358
  // src/frappe/hooks/create.ts
223
- import { useContext as useContext4 } from "react";
224
- import { useMutation as useMutation3 } from "@tanstack/react-query";
359
+ var import_react5 = require("react");
360
+ var import_react_query4 = require("@tanstack/react-query");
225
361
  var useFrappeCreateDoc = () => {
226
- const { db } = useContext4(FrappeContext);
227
- const { mutateAsync, isPending, error, isSuccess, reset } = useMutation3({
362
+ const { db } = import_react5.useContext(FrappeContext);
363
+ const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query4.useMutation({
228
364
  mutationFn: ({ doctype, doc }) => db.createDoc(doctype, doc)
229
365
  });
230
366
  const createDoc = (doctype, doc) => mutateAsync({ doctype, doc });
@@ -237,11 +373,11 @@ var useFrappeCreateDoc = () => {
237
373
  };
238
374
  };
239
375
  // src/frappe/hooks/delete.ts
240
- import { useContext as useContext5 } from "react";
241
- import { useMutation as useMutation4 } from "@tanstack/react-query";
376
+ var import_react6 = require("react");
377
+ var import_react_query5 = require("@tanstack/react-query");
242
378
  var useFrappeDeleteDoc = () => {
243
- const { db } = useContext5(FrappeContext);
244
- const { mutateAsync, isPending, error, isSuccess, reset } = useMutation4({
379
+ const { db } = import_react6.useContext(FrappeContext);
380
+ const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query5.useMutation({
245
381
  mutationFn: ({ doctype, docname }) => db.deleteDoc(doctype, docname)
246
382
  });
247
383
  const deleteDoc = (doctype, docname) => mutateAsync({ doctype, docname });
@@ -254,10 +390,10 @@ var useFrappeDeleteDoc = () => {
254
390
  };
255
391
  };
256
392
  // src/frappe/hooks/event.ts
257
- import { useCallback as useCallback2, useContext as useContext6, useState as useState2, useEffect as useEffect2 } from "react";
393
+ var import_react7 = require("react");
258
394
  var useFrappeEventListener = (eventName, callback) => {
259
- const { socket } = useContext6(FrappeContext);
260
- useEffect2(() => {
395
+ const { socket } = import_react7.useContext(FrappeContext);
396
+ import_react7.useEffect(() => {
261
397
  if (socket === undefined) {
262
398
  console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
263
399
  }
@@ -268,9 +404,9 @@ var useFrappeEventListener = (eventName, callback) => {
268
404
  }, [eventName, callback, socket]);
269
405
  };
270
406
  var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOpenCloseEventsOnMount = true) => {
271
- const { socket } = useContext6(FrappeContext);
272
- const [viewers, setViewers] = useState2([]);
273
- useEffect2(() => {
407
+ const { socket } = import_react7.useContext(FrappeContext);
408
+ const [viewers, setViewers] = import_react7.useState([]);
409
+ import_react7.useEffect(() => {
274
410
  if (socket === undefined) {
275
411
  console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
276
412
  }
@@ -291,13 +427,13 @@ var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOp
291
427
  };
292
428
  }, [doctype, docname, emitOpenCloseEventsOnMount, socket]);
293
429
  useFrappeEventListener("doc_update", onUpdateCallback);
294
- const emitDocOpen = useCallback2(() => {
430
+ const emitDocOpen = import_react7.useCallback(() => {
295
431
  socket?.emit("doc_open", doctype, docname);
296
432
  }, [doctype, docname, socket]);
297
- const emitDocClose = useCallback2(() => {
433
+ const emitDocClose = import_react7.useCallback(() => {
298
434
  socket?.emit("doc_close", doctype, docname);
299
435
  }, [doctype, docname, socket]);
300
- const onViewerEvent = useCallback2((data) => {
436
+ const onViewerEvent = import_react7.useCallback((data) => {
301
437
  if (data.doctype === doctype && data.docname === docname) {
302
438
  setViewers(data.users);
303
439
  }
@@ -310,8 +446,8 @@ var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOp
310
446
  };
311
447
  };
312
448
  var useFrappeDocTypeEventListener = (doctype, onListUpdateCallback) => {
313
- const { socket } = useContext6(FrappeContext);
314
- useEffect2(() => {
449
+ const { socket } = import_react7.useContext(FrappeContext);
450
+ import_react7.useEffect(() => {
315
451
  if (socket === undefined) {
316
452
  console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
317
453
  }
@@ -328,18 +464,18 @@ var useFrappeDocTypeEventListener = (doctype, onListUpdateCallback) => {
328
464
  useFrappeEventListener("list_update", onListUpdateCallback);
329
465
  };
330
466
  // src/frappe/hooks/file.ts
331
- import { useContext as useContext7, useState as useState3 } from "react";
332
- import { useMutation as useMutation5 } from "@tanstack/react-query";
467
+ var import_react8 = require("react");
468
+ var import_react_query6 = require("@tanstack/react-query");
333
469
  var useFrappeFileUpload = () => {
334
- const { file } = useContext7(FrappeContext);
335
- const [progress, setProgress] = useState3(0);
470
+ const { file } = import_react8.useContext(FrappeContext);
471
+ const [progress, setProgress] = import_react8.useState(0);
336
472
  const {
337
473
  mutateAsync,
338
474
  isPending,
339
475
  error,
340
476
  isSuccess,
341
477
  reset: resetMutation
342
- } = useMutation5({
478
+ } = import_react_query6.useMutation({
343
479
  mutationFn: ({ f, args, apiPath }) => {
344
480
  setProgress(0);
345
481
  return file.uploadFile(f, args, (completed, total) => {
@@ -366,15 +502,15 @@ var useFrappeFileUpload = () => {
366
502
  };
367
503
  };
368
504
  // src/frappe/hooks/get.ts
369
- import { useContext as useContext8 } from "react";
370
- import { useQuery as useQuery4 } from "@tanstack/react-query";
505
+ var import_react9 = require("react");
506
+ var import_react_query7 = require("@tanstack/react-query");
371
507
  var useFrappeGetDoc = (doctype, name, options) => {
372
- const { url, db } = useContext8(FrappeContext);
508
+ const { url, db } = import_react9.useContext(FrappeContext);
373
509
  const queryKey = ["doc", url, doctype, name];
374
- const { data, error, isLoading, isFetching, refetch } = useQuery4({
510
+ const { data, error, isLoading, isFetching, refetch } = import_react_query7.useQuery({
375
511
  queryKey,
376
512
  queryFn: () => db.getDoc(doctype, name),
377
- enabled: !!name,
513
+ enabled: options?.enabled ?? true,
378
514
  staleTime: options?.staleTime ?? 5 * 60 * 1000,
379
515
  retry: options?.retry ?? false
380
516
  });
@@ -387,14 +523,12 @@ var useFrappeGetDoc = (doctype, name, options) => {
387
523
  };
388
524
  };
389
525
  // src/frappe/hooks/list.ts
390
- import { useContext as useContext9 } from "react";
391
- import {
392
- useQuery as useQuery5
393
- } from "@tanstack/react-query";
526
+ var import_react10 = require("react");
527
+ var import_react_query8 = require("@tanstack/react-query");
394
528
  var useFrappeGetDocList = (doctype, args, options) => {
395
- const { url, db } = useContext9(FrappeContext);
529
+ const { url, db } = import_react10.useContext(FrappeContext);
396
530
  const queryKey = ["docList", url, doctype, args ?? null];
397
- const { data, error, isLoading, isFetching, refetch } = useQuery5({
531
+ const { data, error, isLoading, isFetching, refetch } = import_react_query8.useQuery({
398
532
  queryKey,
399
533
  queryFn: () => db.getDocList(doctype, args),
400
534
  ...options
@@ -408,12 +542,12 @@ var useFrappeGetDocList = (doctype, args, options) => {
408
542
  };
409
543
  };
410
544
  // src/frappe/hooks/prefetch.ts
411
- import { useCallback as useCallback3, useContext as useContext10 } from "react";
412
- import { useQueryClient as useQueryClient2 } from "@tanstack/react-query";
545
+ var import_react11 = require("react");
546
+ var import_react_query9 = require("@tanstack/react-query");
413
547
  var useFrappePrefetchDoc = (doctype, name, options) => {
414
- const queryClient = useQueryClient2();
415
- const { url, db } = useContext10(FrappeContext);
416
- const preloadDoc = useCallback3(() => {
548
+ const queryClient = import_react_query9.useQueryClient();
549
+ const { url, db } = import_react11.useContext(FrappeContext);
550
+ const preloadDoc = import_react11.useCallback(() => {
417
551
  if (!name)
418
552
  return;
419
553
  const queryKey = ["doc", url, doctype, name];
@@ -426,7 +560,7 @@ var useFrappePrefetchDoc = (doctype, name, options) => {
426
560
  return preloadDoc;
427
561
  };
428
562
  // src/frappe/hooks/search.ts
429
- import { useEffect as useEffect3, useState as useState4 } from "react";
563
+ var import_react12 = require("react");
430
564
  var useSearch = (doctype, text, filters = [], limit = 20, debounce = 250) => {
431
565
  const debouncedText = useDebounce(text, debounce);
432
566
  return useFrappeGetCall("frappe.desk.search.search_link", {
@@ -437,8 +571,8 @@ var useSearch = (doctype, text, filters = [], limit = 20, debounce = 250) => {
437
571
  });
438
572
  };
439
573
  var useDebounce = (value, delay) => {
440
- const [debouncedValue, setDebouncedValue] = useState4(value);
441
- useEffect3(() => {
574
+ const [debouncedValue, setDebouncedValue] = import_react12.useState(value);
575
+ import_react12.useEffect(() => {
442
576
  const handler = setTimeout(() => {
443
577
  setDebouncedValue(value);
444
578
  }, delay);
@@ -449,11 +583,11 @@ var useDebounce = (value, delay) => {
449
583
  return debouncedValue;
450
584
  };
451
585
  // src/frappe/hooks/update.ts
452
- import { useContext as useContext11 } from "react";
453
- import { useMutation as useMutation6 } from "@tanstack/react-query";
586
+ var import_react13 = require("react");
587
+ var import_react_query10 = require("@tanstack/react-query");
454
588
  var useFrappeUpdateDoc = () => {
455
- const { db } = useContext11(FrappeContext);
456
- const { mutateAsync, isPending, error, isSuccess, reset } = useMutation6({
589
+ const { db } = import_react13.useContext(FrappeContext);
590
+ const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query10.useMutation({
457
591
  mutationFn: ({ doctype, docname, doc }) => db.updateDoc(doctype, docname, doc)
458
592
  });
459
593
  const updateDoc = (doctype, docname, doc) => mutateAsync({ doctype, docname, doc });
@@ -465,8 +599,31 @@ var useFrappeUpdateDoc = () => {
465
599
  reset
466
600
  };
467
601
  };
602
+ // src/frappe/hooks/meta.ts
603
+ var import_react14 = require("react");
604
+ var import_react_query11 = require("@tanstack/react-query");
605
+ var useFrappeGetMeta = (doctype, options) => {
606
+ const { url, call } = import_react14.useContext(FrappeContext);
607
+ const { data, error, isLoading, isFetching, refetch } = import_react_query11.useQuery({
608
+ queryKey: ["meta", url, doctype],
609
+ queryFn: async () => {
610
+ const response = await call.get("lasterp.api.get_meta", { doctype });
611
+ return response.message;
612
+ },
613
+ enabled: !!doctype,
614
+ staleTime: options?.staleTime ?? Infinity,
615
+ retry: options?.retry ?? false
616
+ });
617
+ return {
618
+ data,
619
+ error,
620
+ isLoading,
621
+ isFetching,
622
+ refetch
623
+ };
624
+ };
468
625
  // src/hooks/use-variant-selector/hook.ts
469
- import { useCallback as useCallback4, useMemo as useMemo2, useState as useState5 } from "react";
626
+ var import_react15 = require("react");
470
627
 
471
628
  // src/hooks/use-variant-selector/utils.ts
472
629
  function findVariant(variants, specs, caseInsensitive) {
@@ -499,21 +656,21 @@ function findVariants(variants, specs, caseInsensitive) {
499
656
  // src/hooks/use-variant-selector/hook.ts
500
657
  var useVariantSelector = (props) => {
501
658
  const { variants, attributes, defaultId } = props;
502
- const [selectedSpecs, setSelectedSpecs] = useState5(() => {
659
+ const [selectedSpecs, setSelectedSpecs] = import_react15.useState(() => {
503
660
  if (defaultId) {
504
661
  const variant = variants.find((v) => v.id === defaultId);
505
662
  return variant?.specs || {};
506
663
  }
507
664
  return {};
508
665
  });
509
- const variantId = useMemo2(() => {
666
+ const variantId = import_react15.useMemo(() => {
510
667
  const complete = attributes.every((attr) => selectedSpecs[attr.key]);
511
668
  if (!complete)
512
669
  return;
513
670
  const variant = findVariant(variants, selectedSpecs);
514
671
  return variant?.id;
515
672
  }, [variants, selectedSpecs, attributes]);
516
- const options = useMemo2(() => {
673
+ const options = import_react15.useMemo(() => {
517
674
  const result = {};
518
675
  attributes.forEach((attr, attrIndex) => {
519
676
  const constraints = {};
@@ -536,7 +693,7 @@ var useVariantSelector = (props) => {
536
693
  });
537
694
  return result;
538
695
  }, [variants, attributes, selectedSpecs]);
539
- const onOptionSelect = useCallback4((key, value) => {
696
+ const onOptionSelect = import_react15.useCallback((key, value) => {
540
697
  setSelectedSpecs((prev) => {
541
698
  const newSpecs = { ...prev, [key]: value };
542
699
  const attrIndex = attributes.findIndex((a) => a.key === key);
@@ -570,84 +727,54 @@ var useVariantSelector = (props) => {
570
727
  getOptions: (key) => options[key] || []
571
728
  };
572
729
  };
573
- // src/utils/char.ts
574
- import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
575
- function equalsIgnoreCase(str1, str2) {
576
- return str1.localeCompare(str2, undefined, { sensitivity: "accent" }) === 0;
730
+ // src/locale/provider.tsx
731
+ var import_react16 = require("react");
732
+ var jsx_runtime2 = require("react/jsx-runtime");
733
+ function translate(message, replace, messages = {}) {
734
+ let translated = messages[message] ?? message;
735
+ replace?.forEach((val, i) => {
736
+ translated = translated.replace(`{${i}}`, String(val));
737
+ });
738
+ return translated;
577
739
  }
578
- // src/context/server-provider.rn.tsx
579
- import {
580
- useCallback as useCallback5,
581
- useEffect as useEffect4,
582
- useRef
583
- } from "react";
584
- import { useLogto } from "@logto/rn";
585
- import { jsx as jsx2 } from "react/jsx-runtime";
586
- var TOKEN_STALE_MS = 50 * 60 * 1000;
587
- function ServerProvider({
588
- frappeUrl,
589
- siteName,
590
- resource,
740
+ var LocaleContext = import_react16.createContext((message) => message);
741
+ function LocaleProvider({
742
+ method,
743
+ language,
744
+ storage,
591
745
  children
592
746
  }) {
593
- const { getAccessToken, isAuthenticated } = useLogto();
594
- const tokenRef = useRef("");
595
- const fetchedAtRef = useRef(0);
596
- const isRefreshingRef = useRef(false);
597
- const refresh = useCallback5(async () => {
598
- const token = await getAccessToken(resource);
599
- if (token) {
600
- tokenRef.current = token;
601
- fetchedAtRef.current = Date.now();
602
- }
603
- }, [getAccessToken, resource]);
604
- useEffect4(() => {
605
- if (isAuthenticated)
606
- refresh();
607
- }, [isAuthenticated, refresh]);
608
- const getToken = useCallback5(() => {
609
- if (!isRefreshingRef.current && fetchedAtRef.current > 0 && Date.now() - fetchedAtRef.current > TOKEN_STALE_MS) {
610
- isRefreshingRef.current = true;
611
- refresh().finally(() => {
612
- isRefreshingRef.current = false;
613
- });
614
- }
615
- return tokenRef.current;
616
- }, [refresh]);
617
- return /* @__PURE__ */ jsx2(FrappeProvider, {
618
- url: frappeUrl,
619
- siteName,
620
- customHeaders: siteName ? { "X-Frappe-Site-Name": siteName } : undefined,
621
- enableSocket: false,
622
- tokenParams: { useToken: true, token: getToken, type: "Bearer" },
747
+ const [messages, setMessages] = import_react16.useState({});
748
+ import_react16.useEffect(() => {
749
+ if (!storage)
750
+ return;
751
+ const key = `locale:${language}`;
752
+ Promise.resolve(storage.getItem(key)).then((cached) => {
753
+ if (cached)
754
+ setMessages(JSON.parse(cached));
755
+ }).catch(() => {});
756
+ }, [language, storage]);
757
+ const { data, isLoading } = useFrappeGetCall(method, { lang: language }, { staleTime: Infinity });
758
+ import_react16.useEffect(() => {
759
+ if (!data)
760
+ return;
761
+ setMessages(data);
762
+ storage?.setItem(`locale:${language}`, JSON.stringify(data));
763
+ }, [data, language, storage]);
764
+ const __ = import_react16.useCallback((message, replace) => translate(message, replace, messages), [messages]);
765
+ if (isLoading && Object.keys(messages).length === 0)
766
+ return null;
767
+ return /* @__PURE__ */ jsx_runtime2.jsx(LocaleContext.Provider, {
768
+ value: __,
623
769
  children
624
770
  });
625
771
  }
626
- export {
627
- useVariantSelector,
628
- useSearch,
629
- useFrappeUpdateDoc,
630
- useFrappePutCall,
631
- useFrappePrefetchDoc,
632
- useFrappePostCall,
633
- useFrappeGetDocList,
634
- useFrappeGetDocCount,
635
- useFrappeGetDoc,
636
- useFrappeGetCall,
637
- useFrappeFileUpload,
638
- useFrappeEventListener,
639
- useFrappeDocumentEventListener,
640
- useFrappeDocTypeEventListener,
641
- useFrappeDeleteDoc,
642
- useFrappeDeleteCall,
643
- useFrappeCreateDoc,
644
- useFrappeAuth,
645
- equalsIgnoreCase,
646
- decamelizeKeys,
647
- decamelize,
648
- camelizeKeys,
649
- camelize,
650
- ServerProvider,
651
- FrappeProvider,
652
- FrappeContext
653
- };
772
+ function useLocale() {
773
+ const __ = import_react16.useContext(LocaleContext);
774
+ return { __ };
775
+ }
776
+ // src/utils/char.ts
777
+ var import_humps = require("humps");
778
+ function equalsIgnoreCase(str1, str2) {
779
+ return str1.localeCompare(str2, undefined, { sensitivity: "accent" }) === 0;
780
+ }