@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
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
146
|
-
|
|
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 } =
|
|
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 } =
|
|
290
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query2.useQuery({
|
|
163
291
|
queryKey,
|
|
164
|
-
queryFn:
|
|
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 } =
|
|
314
|
+
const { call: frappeCall } = import_react3.useContext(FrappeContext);
|
|
179
315
|
const queryKey = ["frappeCall", httpMethod, method];
|
|
180
|
-
const { mutateAsync, data, isPending, error, isSuccess, reset } =
|
|
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
|
-
|
|
204
|
-
|
|
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 } =
|
|
342
|
+
const { url, db } = import_react4.useContext(FrappeContext);
|
|
207
343
|
const queryKey = ["docCount", url, doctype, filters ?? [], debug];
|
|
208
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
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
|
-
|
|
224
|
-
|
|
359
|
+
var import_react5 = require("react");
|
|
360
|
+
var import_react_query4 = require("@tanstack/react-query");
|
|
225
361
|
var useFrappeCreateDoc = () => {
|
|
226
|
-
const { db } =
|
|
227
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
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
|
-
|
|
241
|
-
|
|
376
|
+
var import_react6 = require("react");
|
|
377
|
+
var import_react_query5 = require("@tanstack/react-query");
|
|
242
378
|
var useFrappeDeleteDoc = () => {
|
|
243
|
-
const { db } =
|
|
244
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
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
|
-
|
|
393
|
+
var import_react7 = require("react");
|
|
258
394
|
var useFrappeEventListener = (eventName, callback) => {
|
|
259
|
-
const { socket } =
|
|
260
|
-
|
|
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 } =
|
|
272
|
-
const [viewers, setViewers] =
|
|
273
|
-
|
|
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 =
|
|
430
|
+
const emitDocOpen = import_react7.useCallback(() => {
|
|
295
431
|
socket?.emit("doc_open", doctype, docname);
|
|
296
432
|
}, [doctype, docname, socket]);
|
|
297
|
-
const emitDocClose =
|
|
433
|
+
const emitDocClose = import_react7.useCallback(() => {
|
|
298
434
|
socket?.emit("doc_close", doctype, docname);
|
|
299
435
|
}, [doctype, docname, socket]);
|
|
300
|
-
const onViewerEvent =
|
|
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 } =
|
|
314
|
-
|
|
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
|
-
|
|
332
|
-
|
|
467
|
+
var import_react8 = require("react");
|
|
468
|
+
var import_react_query6 = require("@tanstack/react-query");
|
|
333
469
|
var useFrappeFileUpload = () => {
|
|
334
|
-
const { file } =
|
|
335
|
-
const [progress, setProgress] =
|
|
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
|
-
} =
|
|
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
|
-
|
|
370
|
-
|
|
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 } =
|
|
508
|
+
const { url, db } = import_react9.useContext(FrappeContext);
|
|
373
509
|
const queryKey = ["doc", url, doctype, name];
|
|
374
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
510
|
+
const { data, error, isLoading, isFetching, refetch } = import_react_query7.useQuery({
|
|
375
511
|
queryKey,
|
|
376
512
|
queryFn: () => db.getDoc(doctype, name),
|
|
377
|
-
enabled:
|
|
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
|
-
|
|
391
|
-
|
|
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 } =
|
|
529
|
+
const { url, db } = import_react10.useContext(FrappeContext);
|
|
396
530
|
const queryKey = ["docList", url, doctype, args ?? null];
|
|
397
|
-
const { data, error, isLoading, isFetching, refetch } =
|
|
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
|
-
|
|
412
|
-
|
|
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 =
|
|
415
|
-
const { url, db } =
|
|
416
|
-
const preloadDoc =
|
|
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
|
-
|
|
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] =
|
|
441
|
-
|
|
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
|
-
|
|
453
|
-
|
|
586
|
+
var import_react13 = require("react");
|
|
587
|
+
var import_react_query10 = require("@tanstack/react-query");
|
|
454
588
|
var useFrappeUpdateDoc = () => {
|
|
455
|
-
const { db } =
|
|
456
|
-
const { mutateAsync, isPending, error, isSuccess, reset } =
|
|
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
|
-
|
|
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] =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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/
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
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
|
-
|
|
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,
|
|
740
|
+
var LocaleContext = import_react16.createContext((message) => message);
|
|
741
|
+
function LocaleProvider({
|
|
742
|
+
method,
|
|
743
|
+
language,
|
|
744
|
+
storage,
|
|
591
745
|
children
|
|
592
746
|
}) {
|
|
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" },
|
|
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
|
-
|
|
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
|
-
};
|
|
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
|
+
}
|