@lasterp/shared 1.0.0-beta.2 → 1.0.0-beta.21
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,126 @@
|
|
|
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
|
+
ATTRIBUTES: () => ATTRIBUTES
|
|
79
|
+
});
|
|
80
|
+
module.exports = __toCommonJS(exports_src);
|
|
81
|
+
// src/catalog/schema.ts
|
|
82
|
+
var import_zod = require("zod");
|
|
83
|
+
var ATTRIBUTES = ["Colour", "Storage", "Memory", "Screen"];
|
|
84
|
+
var colourFormSchema = import_zod.z.object({
|
|
85
|
+
color: import_zod.z.string().min(1, "Color is required"),
|
|
86
|
+
color_hex: import_zod.z.string().optional(),
|
|
87
|
+
color_system: import_zod.z.string().optional(),
|
|
88
|
+
color_system_hex: import_zod.z.string().optional(),
|
|
89
|
+
images: import_zod.z.array(import_zod.z.string()).default([])
|
|
90
|
+
});
|
|
91
|
+
var screenFormSchema = import_zod.z.object({
|
|
92
|
+
screen: import_zod.z.string().min(1, "Screen is required"),
|
|
93
|
+
height: import_zod.z.number().positive().optional(),
|
|
94
|
+
width: import_zod.z.number().positive().optional(),
|
|
95
|
+
weight: import_zod.z.number().positive().optional()
|
|
96
|
+
});
|
|
97
|
+
var modelFormSchema = import_zod.z.object({
|
|
98
|
+
model: import_zod.z.string().min(1, "Model is required"),
|
|
99
|
+
sim_card_type: import_zod.z.string().optional(),
|
|
100
|
+
connectivity: import_zod.z.array(import_zod.z.string())
|
|
101
|
+
});
|
|
102
|
+
var itemFormSchema = import_zod.z.object({
|
|
103
|
+
item_code: import_zod.z.string().min(1, "Item is required"),
|
|
104
|
+
item_group: import_zod.z.string().optional(),
|
|
105
|
+
brand: import_zod.z.string().optional(),
|
|
106
|
+
os: import_zod.z.string().optional(),
|
|
107
|
+
release_year: import_zod.z.number().int().min(1900).max(2100).optional(),
|
|
108
|
+
attributes: import_zod.z.array(import_zod.z.enum(ATTRIBUTES)),
|
|
109
|
+
colours: import_zod.z.array(colourFormSchema),
|
|
110
|
+
storages: import_zod.z.array(import_zod.z.string()),
|
|
111
|
+
memories: import_zod.z.array(import_zod.z.string()),
|
|
112
|
+
screens: import_zod.z.array(screenFormSchema),
|
|
113
|
+
models: import_zod.z.array(modelFormSchema),
|
|
114
|
+
width: import_zod.z.number().positive().optional(),
|
|
115
|
+
height: import_zod.z.number().positive().optional(),
|
|
116
|
+
weight: import_zod.z.number().positive().optional()
|
|
117
|
+
});
|
|
2
118
|
// src/frappe/provider.tsx
|
|
3
|
-
|
|
4
|
-
|
|
119
|
+
var import_react = require("react");
|
|
120
|
+
var import_frappe_js_sdk = require("frappe-js-sdk");
|
|
5
121
|
|
|
6
122
|
// src/frappe/socket.ts
|
|
7
|
-
|
|
123
|
+
var import_socket = __toESM(require("socket.io-client"));
|
|
8
124
|
|
|
9
125
|
class SocketIO {
|
|
10
126
|
socket_port;
|
|
@@ -35,7 +151,7 @@ class SocketIO {
|
|
|
35
151
|
this.url = `${this.url}${site_name}`;
|
|
36
152
|
}
|
|
37
153
|
this.site_name = site_name;
|
|
38
|
-
this.socket =
|
|
154
|
+
this.socket = import_socket.default(`${this.url}`, {
|
|
39
155
|
withCredentials: true,
|
|
40
156
|
secure: this.protocol === "https",
|
|
41
157
|
extraHeaders: tokenParams && tokenParams.useToken === true ? {
|
|
@@ -46,9 +162,9 @@ class SocketIO {
|
|
|
46
162
|
}
|
|
47
163
|
|
|
48
164
|
// src/frappe/provider.tsx
|
|
49
|
-
|
|
165
|
+
var jsx_runtime = require("react/jsx-runtime");
|
|
50
166
|
|
|
51
|
-
var FrappeContext = createContext(null);
|
|
167
|
+
var FrappeContext = import_react.createContext(null);
|
|
52
168
|
var FrappeProvider = ({
|
|
53
169
|
url = "",
|
|
54
170
|
tokenParams,
|
|
@@ -58,8 +174,8 @@ var FrappeProvider = ({
|
|
|
58
174
|
children,
|
|
59
175
|
customHeaders
|
|
60
176
|
}) => {
|
|
61
|
-
const
|
|
62
|
-
const frappe = new FrappeApp(url, tokenParams, undefined, customHeaders);
|
|
177
|
+
const config = import_react.useMemo(() => {
|
|
178
|
+
const frappe = new import_frappe_js_sdk.FrappeApp(url, tokenParams, undefined, customHeaders);
|
|
63
179
|
return {
|
|
64
180
|
url,
|
|
65
181
|
tokenParams,
|
|
@@ -71,19 +187,19 @@ var FrappeProvider = ({
|
|
|
71
187
|
socket: enableSocket ? new SocketIO(url, siteName, socketPort, tokenParams).socket : undefined
|
|
72
188
|
};
|
|
73
189
|
}, [url, tokenParams, enableSocket, socketPort, siteName, customHeaders]);
|
|
74
|
-
return /* @__PURE__ */ jsx(FrappeContext.Provider, {
|
|
75
|
-
value:
|
|
190
|
+
return /* @__PURE__ */ jsx_runtime.jsx(FrappeContext.Provider, {
|
|
191
|
+
value: config,
|
|
76
192
|
children
|
|
77
193
|
});
|
|
78
194
|
};
|
|
79
195
|
// src/frappe/hooks/auth.ts
|
|
80
|
-
|
|
81
|
-
|
|
196
|
+
var import_react2 = require("react");
|
|
197
|
+
var import_react_query = require("@tanstack/react-query");
|
|
82
198
|
var useFrappeAuth = () => {
|
|
83
|
-
const queryClient = useQueryClient();
|
|
84
|
-
const { auth, tokenParams } = useContext(FrappeContext);
|
|
85
|
-
const [userID, setUserID] = useState();
|
|
86
|
-
const getUserCookie = useCallback(() => {
|
|
199
|
+
const queryClient = import_react_query.useQueryClient();
|
|
200
|
+
const { auth, tokenParams } = import_react2.useContext(FrappeContext);
|
|
201
|
+
const [userID, setUserID] = import_react2.useState();
|
|
202
|
+
const getUserCookie = import_react2.useCallback(() => {
|
|
87
203
|
const userCookie = document.cookie.split(";").find((c) => c.trim().startsWith("user_id="));
|
|
88
204
|
if (userCookie) {
|
|
89
205
|
const userName = userCookie.split("=")[1];
|
|
@@ -96,7 +212,7 @@ var useFrappeAuth = () => {
|
|
|
96
212
|
setUserID(null);
|
|
97
213
|
}
|
|
98
214
|
}, []);
|
|
99
|
-
useEffect(() => {
|
|
215
|
+
import_react2.useEffect(() => {
|
|
100
216
|
if (tokenParams && tokenParams.useToken) {
|
|
101
217
|
setUserID(null);
|
|
102
218
|
} else {
|
|
@@ -108,7 +224,7 @@ var useFrappeAuth = () => {
|
|
|
108
224
|
error,
|
|
109
225
|
isLoading,
|
|
110
226
|
isFetching: isValidating
|
|
111
|
-
} = useQuery({
|
|
227
|
+
} = import_react_query.useQuery({
|
|
112
228
|
queryKey: ["currentUser", { tokenParams, userID }],
|
|
113
229
|
queryFn: () => auth.getLoggedInUser(),
|
|
114
230
|
enabled: !!(tokenParams?.useToken || userID),
|
|
@@ -116,14 +232,14 @@ var useFrappeAuth = () => {
|
|
|
116
232
|
refetchOnWindowFocus: false,
|
|
117
233
|
staleTime: Infinity
|
|
118
234
|
});
|
|
119
|
-
const loginMutation = useMutation({
|
|
235
|
+
const loginMutation = import_react_query.useMutation({
|
|
120
236
|
mutationFn: (credentials) => auth.loginWithUsernamePassword(credentials),
|
|
121
237
|
onSuccess: () => {
|
|
122
238
|
getUserCookie();
|
|
123
239
|
queryClient.invalidateQueries({ queryKey: ["currentUser"] });
|
|
124
240
|
}
|
|
125
241
|
});
|
|
126
|
-
const logoutMutation = useMutation({
|
|
242
|
+
const logoutMutation = import_react_query.useMutation({
|
|
127
243
|
mutationFn: () => auth.logout(),
|
|
128
244
|
onSuccess: () => {
|
|
129
245
|
setUserID(null);
|
|
@@ -142,8 +258,8 @@ var useFrappeAuth = () => {
|
|
|
142
258
|
};
|
|
143
259
|
};
|
|
144
260
|
// src/frappe/hooks/call.ts
|
|
145
|
-
|
|
146
|
-
|
|
261
|
+
var import_react3 = require("react");
|
|
262
|
+
var import_react_query2 = require("@tanstack/react-query");
|
|
147
263
|
|
|
148
264
|
// src/frappe/utils.ts
|
|
149
265
|
function encodeQueryData(data) {
|
|
@@ -155,13 +271,21 @@ function encodeQueryData(data) {
|
|
|
155
271
|
|
|
156
272
|
// src/frappe/hooks/call.ts
|
|
157
273
|
var useFrappeGetCall = (method, params, options, type = "GET") => {
|
|
158
|
-
const { call } =
|
|
274
|
+
const { call } = import_react3.useContext(FrappeContext);
|
|
159
275
|
const urlParams = encodeQueryData(params ?? {});
|
|
160
276
|
const url = `${method}?${urlParams}`;
|
|
161
277
|
const queryKey = ["frappeCall", type, method, url];
|
|
162
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
278
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query2.useQuery({
|
|
163
279
|
queryKey,
|
|
164
|
-
queryFn:
|
|
280
|
+
queryFn: async () => {
|
|
281
|
+
if (type === "GET") {
|
|
282
|
+
const response = await call.get(method, params);
|
|
283
|
+
return response.message;
|
|
284
|
+
} else {
|
|
285
|
+
const response = await call.post(method, params);
|
|
286
|
+
return response.message;
|
|
287
|
+
}
|
|
288
|
+
},
|
|
165
289
|
enabled: (options?.enabled ?? true) && !!method,
|
|
166
290
|
staleTime: options?.staleTime,
|
|
167
291
|
retry: options?.retry ?? false
|
|
@@ -175,9 +299,9 @@ var useFrappeGetCall = (method, params, options, type = "GET") => {
|
|
|
175
299
|
};
|
|
176
300
|
};
|
|
177
301
|
var useFrappeMutation = (method, httpMethod) => {
|
|
178
|
-
const { call: frappeCall } =
|
|
302
|
+
const { call: frappeCall } = import_react3.useContext(FrappeContext);
|
|
179
303
|
const queryKey = ["frappeCall", httpMethod, method];
|
|
180
|
-
const { mutateAsync, data, isPending, error, isSuccess, reset } =
|
|
304
|
+
const { mutateAsync, data, isPending, error, isSuccess, reset } = import_react_query2.useMutation({
|
|
181
305
|
mutationKey: queryKey,
|
|
182
306
|
mutationFn: (params) => {
|
|
183
307
|
if (httpMethod === "POST")
|
|
@@ -200,12 +324,12 @@ var useFrappePostCall = (method) => useFrappeMutation(method, "POST");
|
|
|
200
324
|
var useFrappePutCall = (method) => useFrappeMutation(method, "PUT");
|
|
201
325
|
var useFrappeDeleteCall = (method) => useFrappeMutation(method, "DELETE");
|
|
202
326
|
// src/frappe/hooks/count.ts
|
|
203
|
-
|
|
204
|
-
|
|
327
|
+
var import_react4 = require("react");
|
|
328
|
+
var import_react_query3 = require("@tanstack/react-query");
|
|
205
329
|
var useFrappeGetDocCount = (doctype, filters, debug = false, options) => {
|
|
206
|
-
const { url, db } =
|
|
330
|
+
const { url, db } = import_react4.useContext(FrappeContext);
|
|
207
331
|
const queryKey = ["docCount", url, doctype, filters ?? [], debug];
|
|
208
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
332
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query3.useQuery({
|
|
209
333
|
queryKey,
|
|
210
334
|
queryFn: () => db.getCount(doctype, filters, debug),
|
|
211
335
|
enabled: !!doctype,
|
|
@@ -220,11 +344,11 @@ var useFrappeGetDocCount = (doctype, filters, debug = false, options) => {
|
|
|
220
344
|
};
|
|
221
345
|
};
|
|
222
346
|
// src/frappe/hooks/create.ts
|
|
223
|
-
|
|
224
|
-
|
|
347
|
+
var import_react5 = require("react");
|
|
348
|
+
var import_react_query4 = require("@tanstack/react-query");
|
|
225
349
|
var useFrappeCreateDoc = () => {
|
|
226
|
-
const { db } =
|
|
227
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
350
|
+
const { db } = import_react5.useContext(FrappeContext);
|
|
351
|
+
const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query4.useMutation({
|
|
228
352
|
mutationFn: ({ doctype, doc }) => db.createDoc(doctype, doc)
|
|
229
353
|
});
|
|
230
354
|
const createDoc = (doctype, doc) => mutateAsync({ doctype, doc });
|
|
@@ -237,11 +361,11 @@ var useFrappeCreateDoc = () => {
|
|
|
237
361
|
};
|
|
238
362
|
};
|
|
239
363
|
// src/frappe/hooks/delete.ts
|
|
240
|
-
|
|
241
|
-
|
|
364
|
+
var import_react6 = require("react");
|
|
365
|
+
var import_react_query5 = require("@tanstack/react-query");
|
|
242
366
|
var useFrappeDeleteDoc = () => {
|
|
243
|
-
const { db } =
|
|
244
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
367
|
+
const { db } = import_react6.useContext(FrappeContext);
|
|
368
|
+
const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query5.useMutation({
|
|
245
369
|
mutationFn: ({ doctype, docname }) => db.deleteDoc(doctype, docname)
|
|
246
370
|
});
|
|
247
371
|
const deleteDoc = (doctype, docname) => mutateAsync({ doctype, docname });
|
|
@@ -254,10 +378,10 @@ var useFrappeDeleteDoc = () => {
|
|
|
254
378
|
};
|
|
255
379
|
};
|
|
256
380
|
// src/frappe/hooks/event.ts
|
|
257
|
-
|
|
381
|
+
var import_react7 = require("react");
|
|
258
382
|
var useFrappeEventListener = (eventName, callback) => {
|
|
259
|
-
const { socket } =
|
|
260
|
-
|
|
383
|
+
const { socket } = import_react7.useContext(FrappeContext);
|
|
384
|
+
import_react7.useEffect(() => {
|
|
261
385
|
if (socket === undefined) {
|
|
262
386
|
console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
|
|
263
387
|
}
|
|
@@ -268,9 +392,9 @@ var useFrappeEventListener = (eventName, callback) => {
|
|
|
268
392
|
}, [eventName, callback, socket]);
|
|
269
393
|
};
|
|
270
394
|
var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOpenCloseEventsOnMount = true) => {
|
|
271
|
-
const { socket } =
|
|
272
|
-
const [viewers, setViewers] =
|
|
273
|
-
|
|
395
|
+
const { socket } = import_react7.useContext(FrappeContext);
|
|
396
|
+
const [viewers, setViewers] = import_react7.useState([]);
|
|
397
|
+
import_react7.useEffect(() => {
|
|
274
398
|
if (socket === undefined) {
|
|
275
399
|
console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
|
|
276
400
|
}
|
|
@@ -291,13 +415,13 @@ var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOp
|
|
|
291
415
|
};
|
|
292
416
|
}, [doctype, docname, emitOpenCloseEventsOnMount, socket]);
|
|
293
417
|
useFrappeEventListener("doc_update", onUpdateCallback);
|
|
294
|
-
const emitDocOpen =
|
|
418
|
+
const emitDocOpen = import_react7.useCallback(() => {
|
|
295
419
|
socket?.emit("doc_open", doctype, docname);
|
|
296
420
|
}, [doctype, docname, socket]);
|
|
297
|
-
const emitDocClose =
|
|
421
|
+
const emitDocClose = import_react7.useCallback(() => {
|
|
298
422
|
socket?.emit("doc_close", doctype, docname);
|
|
299
423
|
}, [doctype, docname, socket]);
|
|
300
|
-
const onViewerEvent =
|
|
424
|
+
const onViewerEvent = import_react7.useCallback((data) => {
|
|
301
425
|
if (data.doctype === doctype && data.docname === docname) {
|
|
302
426
|
setViewers(data.users);
|
|
303
427
|
}
|
|
@@ -310,8 +434,8 @@ var useFrappeDocumentEventListener = (doctype, docname, onUpdateCallback, emitOp
|
|
|
310
434
|
};
|
|
311
435
|
};
|
|
312
436
|
var useFrappeDocTypeEventListener = (doctype, onListUpdateCallback) => {
|
|
313
|
-
const { socket } =
|
|
314
|
-
|
|
437
|
+
const { socket } = import_react7.useContext(FrappeContext);
|
|
438
|
+
import_react7.useEffect(() => {
|
|
315
439
|
if (socket === undefined) {
|
|
316
440
|
console.warn("Socket is not enabled. Please enable socket in FrappeProvider.");
|
|
317
441
|
}
|
|
@@ -328,18 +452,18 @@ var useFrappeDocTypeEventListener = (doctype, onListUpdateCallback) => {
|
|
|
328
452
|
useFrappeEventListener("list_update", onListUpdateCallback);
|
|
329
453
|
};
|
|
330
454
|
// src/frappe/hooks/file.ts
|
|
331
|
-
|
|
332
|
-
|
|
455
|
+
var import_react8 = require("react");
|
|
456
|
+
var import_react_query6 = require("@tanstack/react-query");
|
|
333
457
|
var useFrappeFileUpload = () => {
|
|
334
|
-
const { file } =
|
|
335
|
-
const [progress, setProgress] =
|
|
458
|
+
const { file } = import_react8.useContext(FrappeContext);
|
|
459
|
+
const [progress, setProgress] = import_react8.useState(0);
|
|
336
460
|
const {
|
|
337
461
|
mutateAsync,
|
|
338
462
|
isPending,
|
|
339
463
|
error,
|
|
340
464
|
isSuccess,
|
|
341
465
|
reset: resetMutation
|
|
342
|
-
} =
|
|
466
|
+
} = import_react_query6.useMutation({
|
|
343
467
|
mutationFn: ({ f, args, apiPath }) => {
|
|
344
468
|
setProgress(0);
|
|
345
469
|
return file.uploadFile(f, args, (completed, total) => {
|
|
@@ -366,15 +490,15 @@ var useFrappeFileUpload = () => {
|
|
|
366
490
|
};
|
|
367
491
|
};
|
|
368
492
|
// src/frappe/hooks/get.ts
|
|
369
|
-
|
|
370
|
-
|
|
493
|
+
var import_react9 = require("react");
|
|
494
|
+
var import_react_query7 = require("@tanstack/react-query");
|
|
371
495
|
var useFrappeGetDoc = (doctype, name, options) => {
|
|
372
|
-
const { url, db } =
|
|
496
|
+
const { url, db } = import_react9.useContext(FrappeContext);
|
|
373
497
|
const queryKey = ["doc", url, doctype, name];
|
|
374
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
498
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query7.useQuery({
|
|
375
499
|
queryKey,
|
|
376
500
|
queryFn: () => db.getDoc(doctype, name),
|
|
377
|
-
enabled:
|
|
501
|
+
enabled: options?.enabled ?? true,
|
|
378
502
|
staleTime: options?.staleTime ?? 5 * 60 * 1000,
|
|
379
503
|
retry: options?.retry ?? false
|
|
380
504
|
});
|
|
@@ -387,14 +511,12 @@ var useFrappeGetDoc = (doctype, name, options) => {
|
|
|
387
511
|
};
|
|
388
512
|
};
|
|
389
513
|
// src/frappe/hooks/list.ts
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
useQuery as useQuery5
|
|
393
|
-
} from "@tanstack/react-query";
|
|
514
|
+
var import_react10 = require("react");
|
|
515
|
+
var import_react_query8 = require("@tanstack/react-query");
|
|
394
516
|
var useFrappeGetDocList = (doctype, args, options) => {
|
|
395
|
-
const { url, db } =
|
|
517
|
+
const { url, db } = import_react10.useContext(FrappeContext);
|
|
396
518
|
const queryKey = ["docList", url, doctype, args ?? null];
|
|
397
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
519
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query8.useQuery({
|
|
398
520
|
queryKey,
|
|
399
521
|
queryFn: () => db.getDocList(doctype, args),
|
|
400
522
|
...options
|
|
@@ -408,12 +530,12 @@ var useFrappeGetDocList = (doctype, args, options) => {
|
|
|
408
530
|
};
|
|
409
531
|
};
|
|
410
532
|
// src/frappe/hooks/prefetch.ts
|
|
411
|
-
|
|
412
|
-
|
|
533
|
+
var import_react11 = require("react");
|
|
534
|
+
var import_react_query9 = require("@tanstack/react-query");
|
|
413
535
|
var useFrappePrefetchDoc = (doctype, name, options) => {
|
|
414
|
-
const queryClient =
|
|
415
|
-
const { url, db } =
|
|
416
|
-
const preloadDoc =
|
|
536
|
+
const queryClient = import_react_query9.useQueryClient();
|
|
537
|
+
const { url, db } = import_react11.useContext(FrappeContext);
|
|
538
|
+
const preloadDoc = import_react11.useCallback(() => {
|
|
417
539
|
if (!name)
|
|
418
540
|
return;
|
|
419
541
|
const queryKey = ["doc", url, doctype, name];
|
|
@@ -426,7 +548,7 @@ var useFrappePrefetchDoc = (doctype, name, options) => {
|
|
|
426
548
|
return preloadDoc;
|
|
427
549
|
};
|
|
428
550
|
// src/frappe/hooks/search.ts
|
|
429
|
-
|
|
551
|
+
var import_react12 = require("react");
|
|
430
552
|
var useSearch = (doctype, text, filters = [], limit = 20, debounce = 250) => {
|
|
431
553
|
const debouncedText = useDebounce(text, debounce);
|
|
432
554
|
return useFrappeGetCall("frappe.desk.search.search_link", {
|
|
@@ -437,8 +559,8 @@ var useSearch = (doctype, text, filters = [], limit = 20, debounce = 250) => {
|
|
|
437
559
|
});
|
|
438
560
|
};
|
|
439
561
|
var useDebounce = (value, delay) => {
|
|
440
|
-
const [debouncedValue, setDebouncedValue] =
|
|
441
|
-
|
|
562
|
+
const [debouncedValue, setDebouncedValue] = import_react12.useState(value);
|
|
563
|
+
import_react12.useEffect(() => {
|
|
442
564
|
const handler = setTimeout(() => {
|
|
443
565
|
setDebouncedValue(value);
|
|
444
566
|
}, delay);
|
|
@@ -449,11 +571,11 @@ var useDebounce = (value, delay) => {
|
|
|
449
571
|
return debouncedValue;
|
|
450
572
|
};
|
|
451
573
|
// src/frappe/hooks/update.ts
|
|
452
|
-
|
|
453
|
-
|
|
574
|
+
var import_react13 = require("react");
|
|
575
|
+
var import_react_query10 = require("@tanstack/react-query");
|
|
454
576
|
var useFrappeUpdateDoc = () => {
|
|
455
|
-
const { db } =
|
|
456
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
577
|
+
const { db } = import_react13.useContext(FrappeContext);
|
|
578
|
+
const { mutateAsync, isPending, error, isSuccess, reset } = import_react_query10.useMutation({
|
|
457
579
|
mutationFn: ({ doctype, docname, doc }) => db.updateDoc(doctype, docname, doc)
|
|
458
580
|
});
|
|
459
581
|
const updateDoc = (doctype, docname, doc) => mutateAsync({ doctype, docname, doc });
|
|
@@ -465,8 +587,31 @@ var useFrappeUpdateDoc = () => {
|
|
|
465
587
|
reset
|
|
466
588
|
};
|
|
467
589
|
};
|
|
590
|
+
// src/frappe/hooks/meta.ts
|
|
591
|
+
var import_react14 = require("react");
|
|
592
|
+
var import_react_query11 = require("@tanstack/react-query");
|
|
593
|
+
var useFrappeGetMeta = (doctype, options) => {
|
|
594
|
+
const { url, call } = import_react14.useContext(FrappeContext);
|
|
595
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query11.useQuery({
|
|
596
|
+
queryKey: ["meta", url, doctype],
|
|
597
|
+
queryFn: async () => {
|
|
598
|
+
const response = await call.get("lasterp.api.get_meta", { doctype });
|
|
599
|
+
return response.message;
|
|
600
|
+
},
|
|
601
|
+
enabled: !!doctype,
|
|
602
|
+
staleTime: options?.staleTime ?? Infinity,
|
|
603
|
+
retry: options?.retry ?? false
|
|
604
|
+
});
|
|
605
|
+
return {
|
|
606
|
+
data,
|
|
607
|
+
error,
|
|
608
|
+
isLoading,
|
|
609
|
+
isFetching,
|
|
610
|
+
refetch
|
|
611
|
+
};
|
|
612
|
+
};
|
|
468
613
|
// src/hooks/use-variant-selector/hook.ts
|
|
469
|
-
|
|
614
|
+
var import_react15 = require("react");
|
|
470
615
|
|
|
471
616
|
// src/hooks/use-variant-selector/utils.ts
|
|
472
617
|
function findVariant(variants, specs, caseInsensitive) {
|
|
@@ -499,21 +644,21 @@ function findVariants(variants, specs, caseInsensitive) {
|
|
|
499
644
|
// src/hooks/use-variant-selector/hook.ts
|
|
500
645
|
var useVariantSelector = (props) => {
|
|
501
646
|
const { variants, attributes, defaultId } = props;
|
|
502
|
-
const [selectedSpecs, setSelectedSpecs] =
|
|
647
|
+
const [selectedSpecs, setSelectedSpecs] = import_react15.useState(() => {
|
|
503
648
|
if (defaultId) {
|
|
504
649
|
const variant = variants.find((v) => v.id === defaultId);
|
|
505
650
|
return variant?.specs || {};
|
|
506
651
|
}
|
|
507
652
|
return {};
|
|
508
653
|
});
|
|
509
|
-
const variantId =
|
|
654
|
+
const variantId = import_react15.useMemo(() => {
|
|
510
655
|
const complete = attributes.every((attr) => selectedSpecs[attr.key]);
|
|
511
656
|
if (!complete)
|
|
512
657
|
return;
|
|
513
658
|
const variant = findVariant(variants, selectedSpecs);
|
|
514
659
|
return variant?.id;
|
|
515
660
|
}, [variants, selectedSpecs, attributes]);
|
|
516
|
-
const options =
|
|
661
|
+
const options = import_react15.useMemo(() => {
|
|
517
662
|
const result = {};
|
|
518
663
|
attributes.forEach((attr, attrIndex) => {
|
|
519
664
|
const constraints = {};
|
|
@@ -536,7 +681,7 @@ var useVariantSelector = (props) => {
|
|
|
536
681
|
});
|
|
537
682
|
return result;
|
|
538
683
|
}, [variants, attributes, selectedSpecs]);
|
|
539
|
-
const onOptionSelect =
|
|
684
|
+
const onOptionSelect = import_react15.useCallback((key, value) => {
|
|
540
685
|
setSelectedSpecs((prev) => {
|
|
541
686
|
const newSpecs = { ...prev, [key]: value };
|
|
542
687
|
const attrIndex = attributes.findIndex((a) => a.key === key);
|
|
@@ -570,84 +715,54 @@ var useVariantSelector = (props) => {
|
|
|
570
715
|
getOptions: (key) => options[key] || []
|
|
571
716
|
};
|
|
572
717
|
};
|
|
573
|
-
// src/
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
718
|
+
// src/locale/provider.tsx
|
|
719
|
+
var import_react16 = require("react");
|
|
720
|
+
var jsx_runtime2 = require("react/jsx-runtime");
|
|
721
|
+
function translate(message, replace, messages = {}) {
|
|
722
|
+
let translated = messages[message] ?? message;
|
|
723
|
+
replace?.forEach((val, i) => {
|
|
724
|
+
translated = translated.replace(`{${i}}`, String(val));
|
|
725
|
+
});
|
|
726
|
+
return translated;
|
|
577
727
|
}
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
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,
|
|
728
|
+
var LocaleContext = import_react16.createContext((message) => message);
|
|
729
|
+
function LocaleProvider({
|
|
730
|
+
method,
|
|
731
|
+
language,
|
|
732
|
+
storage,
|
|
591
733
|
children
|
|
592
734
|
}) {
|
|
593
|
-
const
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
},
|
|
604
|
-
|
|
605
|
-
if (
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
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" },
|
|
735
|
+
const [messages, setMessages] = import_react16.useState({});
|
|
736
|
+
import_react16.useEffect(() => {
|
|
737
|
+
if (!storage)
|
|
738
|
+
return;
|
|
739
|
+
const key = `locale:${language}`;
|
|
740
|
+
Promise.resolve(storage.getItem(key)).then((cached) => {
|
|
741
|
+
if (cached)
|
|
742
|
+
setMessages(JSON.parse(cached));
|
|
743
|
+
}).catch(() => {});
|
|
744
|
+
}, [language, storage]);
|
|
745
|
+
const { data, isLoading } = useFrappeGetCall(method, { lang: language }, { staleTime: Infinity });
|
|
746
|
+
import_react16.useEffect(() => {
|
|
747
|
+
if (!data)
|
|
748
|
+
return;
|
|
749
|
+
setMessages(data);
|
|
750
|
+
storage?.setItem(`locale:${language}`, JSON.stringify(data));
|
|
751
|
+
}, [data, language, storage]);
|
|
752
|
+
const __ = import_react16.useCallback((message, replace) => translate(message, replace, messages), [messages]);
|
|
753
|
+
if (isLoading && Object.keys(messages).length === 0)
|
|
754
|
+
return null;
|
|
755
|
+
return /* @__PURE__ */ jsx_runtime2.jsx(LocaleContext.Provider, {
|
|
756
|
+
value: __,
|
|
623
757
|
children
|
|
624
758
|
});
|
|
625
759
|
}
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
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
|
-
};
|
|
760
|
+
function useLocale() {
|
|
761
|
+
const __ = import_react16.useContext(LocaleContext);
|
|
762
|
+
return { __ };
|
|
763
|
+
}
|
|
764
|
+
// src/utils/char.ts
|
|
765
|
+
var import_humps = require("humps");
|
|
766
|
+
function equalsIgnoreCase(str1, str2) {
|
|
767
|
+
return str1.localeCompare(str2, undefined, { sensitivity: "accent" }) === 0;
|
|
768
|
+
}
|