@fctc/interface-logic 1.7.10 → 1.8.1

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.
Files changed (43) hide show
  1. package/dist/index.d.mts +1681 -0
  2. package/dist/index.d.ts +1681 -0
  3. package/dist/{hooks.js → index.js} +1208 -10
  4. package/dist/index.js.map +1 -0
  5. package/dist/{hooks.mjs → index.mjs} +1064 -5
  6. package/dist/index.mjs.map +1 -0
  7. package/package.json +1 -1
  8. package/dist/configs.d.mts +0 -15
  9. package/dist/configs.d.ts +0 -15
  10. package/dist/configs.js +0 -2383
  11. package/dist/configs.mjs +0 -2346
  12. package/dist/constants.d.mts +0 -131
  13. package/dist/constants.d.ts +0 -131
  14. package/dist/constants.js +0 -205
  15. package/dist/constants.mjs +0 -166
  16. package/dist/environment.d.mts +0 -55
  17. package/dist/environment.d.ts +0 -55
  18. package/dist/environment.js +0 -3091
  19. package/dist/environment.mjs +0 -3051
  20. package/dist/hooks.d.mts +0 -364
  21. package/dist/hooks.d.ts +0 -364
  22. package/dist/provider.d.mts +0 -15
  23. package/dist/provider.d.ts +0 -15
  24. package/dist/provider.js +0 -3600
  25. package/dist/provider.mjs +0 -3561
  26. package/dist/services.d.mts +0 -256
  27. package/dist/services.d.ts +0 -256
  28. package/dist/services.js +0 -4673
  29. package/dist/services.mjs +0 -4628
  30. package/dist/store.d.mts +0 -643
  31. package/dist/store.d.ts +0 -643
  32. package/dist/store.js +0 -814
  33. package/dist/store.mjs +0 -709
  34. package/dist/types.d.mts +0 -17
  35. package/dist/types.d.ts +0 -17
  36. package/dist/types.js +0 -18
  37. package/dist/types.mjs +0 -0
  38. package/dist/utils.d.mts +0 -93
  39. package/dist/utils.d.ts +0 -93
  40. package/dist/utils.js +0 -2962
  41. package/dist/utils.mjs +0 -2896
  42. package/dist/view-type-BGJfDe73.d.mts +0 -113
  43. package/dist/view-type-BGJfDe73.d.ts +0 -113
@@ -27,9 +27,145 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
- // src/hooks.ts
31
- var hooks_exports = {};
32
- __export(hooks_exports, {
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ ActionService: () => action_service_default,
34
+ AuthService: () => auth_service_default,
35
+ CompanyService: () => company_service_default,
36
+ ComponentType: () => ComponentType,
37
+ EnvStore: () => EnvStore,
38
+ ExcelService: () => excel_service_default,
39
+ FieldTypeConstants: () => FieldTypeConstants,
40
+ FormService: () => form_service_default,
41
+ KanbanService: () => kanban_service_default,
42
+ KeyConstants: () => KeyConstants,
43
+ MainProvider: () => MainProvider,
44
+ MethodConstants: () => MethodConstants,
45
+ MethodType: () => MethodType,
46
+ ModelConstants: () => ModelConstants,
47
+ ModelService: () => model_service_default,
48
+ ReactQueryProvider: () => ReactQueryProvider,
49
+ SearchType: () => SearchType,
50
+ UriConstants: () => UriConstants,
51
+ UserService: () => user_service_default,
52
+ VersionGate: () => VersionGate,
53
+ ViewService: () => view_service_default,
54
+ WIDGETAVATAR: () => WIDGETAVATAR,
55
+ WIDGETCOLOR: () => WIDGETCOLOR,
56
+ WIDGETCURRENCY: () => WIDGETCURRENCY,
57
+ WIDGETNOSTRING: () => WIDGETNOSTRING,
58
+ WIDGETSTATUS: () => WIDGETSTATUS,
59
+ WesapError: () => WesapError,
60
+ axiosClient: () => axiosClient,
61
+ breadcrumbsSlice: () => breadcrumbsSlice,
62
+ checkIsImageLink: () => checkIsImageLink,
63
+ clearSearchMap: () => clearSearchMap,
64
+ convertFloatToTime: () => convertFloatToTime,
65
+ convertTimeToFloat: () => convertTimeToFloat,
66
+ copyTextToClipboard: () => copyTextToClipboard,
67
+ domainHelper: () => domainHelper,
68
+ env: () => env,
69
+ envSlice: () => envSlice,
70
+ envStore: () => envStore,
71
+ evalJSONContext: () => evalJSONContext,
72
+ evalJSONDomain: () => evalJSONDomain,
73
+ excelSlice: () => excelSlice,
74
+ filterFieldDirty: () => filterFieldDirty,
75
+ formSlice: () => formSlice,
76
+ formatCurrency: () => formatCurrency,
77
+ formatDate: () => formatDate,
78
+ formatFileSize: () => formatFileSize,
79
+ formatSortingString: () => formatSortingString,
80
+ formatUrlPath: () => formatUrlPath,
81
+ getEnv: () => getEnv,
82
+ getFieldsOnChange: () => getFieldsOnChange,
83
+ getOffSet: () => getOffSet,
84
+ getSubdomain: () => getSubdomain,
85
+ handleError: () => handleError,
86
+ headerSlice: () => headerSlice,
87
+ initEnv: () => initEnv,
88
+ isBase64File: () => isBase64File,
89
+ isBase64Image: () => isBase64Image,
90
+ isObjectEmpty: () => isObjectEmpty,
91
+ listSlice: () => listSlice,
92
+ loginSlice: () => loginSlice,
93
+ mergeObjects: () => mergeObjects,
94
+ navbarSlice: () => navbarSlice,
95
+ profileSlice: () => profileSlice,
96
+ removeKeyFromSearchMap: () => removeKeyFromSearchMap,
97
+ removeUndefinedFields: () => removeUndefinedFields,
98
+ resequence: () => resequence,
99
+ searchSlice: () => searchSlice,
100
+ selectBreadCrumbs: () => selectBreadCrumbs,
101
+ selectEnv: () => selectEnv,
102
+ selectExcel: () => selectExcel,
103
+ selectForm: () => selectForm,
104
+ selectHeader: () => selectHeader,
105
+ selectList: () => selectList,
106
+ selectLogin: () => selectLogin,
107
+ selectNavbar: () => selectNavbar,
108
+ selectProfile: () => selectProfile,
109
+ selectSearch: () => selectSearch,
110
+ selectSearchMap: () => selectSearchMap,
111
+ setAllowCompanies: () => setAllowCompanies,
112
+ setAllowedCompanyIds: () => setAllowedCompanyIds,
113
+ setBreadCrumbs: () => setBreadCrumbs,
114
+ setCompanies: () => setCompanies,
115
+ setConfig: () => setConfig,
116
+ setDataParse: () => setDataParse,
117
+ setDataUser: () => setDataUser,
118
+ setDb: () => setDb,
119
+ setDefaultCompany: () => setDefaultCompany,
120
+ setDomainTable: () => setDomainTable,
121
+ setEnv: () => setEnv,
122
+ setEnvFile: () => setEnvFile,
123
+ setErrorData: () => setErrorData,
124
+ setFieldTranslate: () => setFieldTranslate,
125
+ setFields: () => setFields,
126
+ setFilterBy: () => setFilterBy,
127
+ setFirstDomain: () => setFirstDomain,
128
+ setForgotPasswordUrl: () => setForgotPasswordUrl,
129
+ setFormSubmitComponent: () => setFormSubmitComponent,
130
+ setGroupBy: () => setGroupBy,
131
+ setGroupByDomain: () => setGroupByDomain,
132
+ setHeader: () => setHeader,
133
+ setHoveredIndexSearchList: () => setHoveredIndexSearchList,
134
+ setIdFile: () => setIdFile,
135
+ setIndexRowTableModal: () => setIndexRowTableModal,
136
+ setIsFileLoaded: () => setIsFileLoaded,
137
+ setIsShowModalTranslate: () => setIsShowModalTranslate,
138
+ setIsShowingModalDetail: () => setIsShowingModalDetail,
139
+ setIsUpdateTableModal: () => setIsUpdateTableModal,
140
+ setLang: () => setLang,
141
+ setListSubject: () => setListSubject,
142
+ setLoadingImport: () => setLoadingImport,
143
+ setMenuFocus: () => setMenuFocus,
144
+ setMenuFocusAction: () => setMenuFocusAction,
145
+ setMenuList: () => setMenuList,
146
+ setNavbarWidth: () => setNavbarWidth,
147
+ setOrder: () => setOrder,
148
+ setPage: () => setPage,
149
+ setPageLimit: () => setPageLimit,
150
+ setProfile: () => setProfile,
151
+ setRedirectTo: () => setRedirectTo,
152
+ setSearchBy: () => setSearchBy,
153
+ setSearchMap: () => setSearchMap,
154
+ setSearchString: () => setSearchString,
155
+ setSelectedFile: () => setSelectedFile,
156
+ setSelectedRadioKey: () => setSelectedRadioKey,
157
+ setSelectedRowKeys: () => setSelectedRowKeys,
158
+ setSelectedTags: () => setSelectedTags,
159
+ setTransferDetail: () => setTransferDetail,
160
+ setUid: () => setUid,
161
+ setUser: () => setUser,
162
+ setViewDataStore: () => setViewDataStore,
163
+ stringToColor: () => stringToColor,
164
+ toQueryString: () => toQueryString,
165
+ updateSearchMap: () => updateSearchMap,
166
+ updateTokenParamInOriginalRequest: () => updateTokenParamInOriginalRequest,
167
+ useAppDispatch: () => useAppDispatch,
168
+ useAppSelector: () => useAppSelector,
33
169
  useButton: () => use_button_default,
34
170
  useChangeStatus: () => use_change_status_default,
35
171
  useDelete: () => use_delete_default,
@@ -37,6 +173,7 @@ __export(hooks_exports, {
37
173
  useDuplicateRecord: () => use_duplicate_record_default,
38
174
  useExecuteImport: () => uss_execute_import_default,
39
175
  useExportExcel: () => use_export_excel_default,
176
+ useField: () => useField,
40
177
  useForgotPassword: () => use_forgot_password_default,
41
178
  useForgotPasswordSSO: () => use_forgotpassword_sso_default,
42
179
  useGet2FAMethods: () => uset_get_2FA_method_default,
@@ -92,18 +229,49 @@ __export(hooks_exports, {
92
229
  useSettingsWebRead2fa: () => use_settings_web_read_2fa_default,
93
230
  useSignInSSO: () => use_signin_sso_default,
94
231
  useSwitchLocale: () => use_switch_locale_default,
232
+ useTabModel: () => useTabModel,
95
233
  useUpdatePassword: () => use_update_password_default,
96
234
  useUploadFile: () => use_upload_file_default,
97
235
  useUploadIdFile: () => use_upload_id_file_default,
98
236
  useUploadImage: () => use_upload_image_default,
99
237
  useValidateActionToken: () => use_validate_action_token_default,
100
238
  useVerify2FA: () => use_verify_2FA_default,
101
- useVerifyTotp: () => use_verify_totp_default
239
+ useVerifyTotp: () => use_verify_totp_default,
240
+ validateAndParseDate: () => validateAndParseDate
102
241
  });
103
- module.exports = __toCommonJS(hooks_exports);
242
+ module.exports = __toCommonJS(index_exports);
104
243
 
105
- // src/hooks/auth/use-forgot-password.ts
106
- var import_react_query = require("@tanstack/react-query");
244
+ // src/configs/axios-client.ts
245
+ var import_axios = __toESM(require("axios"));
246
+
247
+ // src/constants/api/key-constant.ts
248
+ var KeyConstants = /* @__PURE__ */ ((KeyConstants2) => {
249
+ KeyConstants2["PROFILE"] = "userinfo";
250
+ KeyConstants2["CURRENT_COMPANY"] = "current_company";
251
+ KeyConstants2["LIST_COMPANY"] = "list_company";
252
+ KeyConstants2["COMPANY_INFO"] = "company_info";
253
+ KeyConstants2["MENU"] = "menus";
254
+ KeyConstants2["GET_VIEW_BY_ACTION"] = "get_view_by_action";
255
+ KeyConstants2["ACTION_DETAIL"] = "action_detail";
256
+ KeyConstants2["GET_DATA_SELECTION"] = "get_data_select";
257
+ KeyConstants2["WEB_SAVE"] = "web_save";
258
+ KeyConstants2["WEB_READ"] = "web_read";
259
+ KeyConstants2["GET_PROVIDER"] = "get_provider";
260
+ return KeyConstants2;
261
+ })(KeyConstants || {});
262
+
263
+ // src/constants/api/method-constant.ts
264
+ var MethodConstants = /* @__PURE__ */ ((MethodConstants2) => {
265
+ MethodConstants2["WEB_SEARCH_READ"] = "web_search_read";
266
+ MethodConstants2["WEB_READ_GROUP"] = "web_read_group";
267
+ MethodConstants2["WEB_READ"] = "web_read";
268
+ MethodConstants2["WEB_SAVE"] = "web_save";
269
+ MethodConstants2["UNLINK"] = "unlink";
270
+ MethodConstants2["ONCHANGE"] = "onchange";
271
+ MethodConstants2["GET_ONCHANGE_FIELDS"] = "get_fields_onchange";
272
+ MethodConstants2["GET_FIELD_VIEW"] = "get_fields_view_v2";
273
+ return MethodConstants2;
274
+ })(MethodConstants || {});
107
275
 
108
276
  // src/constants/api/uri-constant.ts
109
277
  var UriConstants = /* @__PURE__ */ ((UriConstants2) => {
@@ -135,11 +303,380 @@ var UriConstants = /* @__PURE__ */ ((UriConstants2) => {
135
303
  return UriConstants2;
136
304
  })(UriConstants || {});
137
305
 
138
- // src/configs/axios-client.ts
139
- var import_axios = __toESM(require("axios"));
306
+ // src/utils/error-handler.ts
307
+ var WesapError = class extends Error {
308
+ code;
309
+ constructor(message, code) {
310
+ super(message);
311
+ this.code = code;
312
+ }
313
+ };
314
+ function handleError(error, env2) {
315
+ if (error instanceof WesapError) {
316
+ env2.services.notification.error(error.message);
317
+ } else {
318
+ env2.services.notification.error("An unexpected error occurred");
319
+ }
320
+ }
140
321
 
141
322
  // src/utils/format.ts
142
323
  var import_moment = __toESM(require("moment"));
324
+ var formatCurrency = (amount, currency = "USD") => {
325
+ const formatter = new Intl.NumberFormat("vi-VN", {
326
+ style: "currency",
327
+ currency,
328
+ minimumFractionDigits: 0
329
+ });
330
+ return formatter.format(amount).replaceAll(".", ",");
331
+ };
332
+ var formatDate = (date, locale = "en-US") => {
333
+ return new Intl.DateTimeFormat(locale).format(new Date(date));
334
+ };
335
+ var validateAndParseDate = (input, isDateTime = false) => {
336
+ if (!input || typeof input !== "string") return null;
337
+ const cleanInput = input.replace(/[^0-9-\/:\s]/g, "");
338
+ const dateFormat = "YYYY-MM-DD";
339
+ const dateTimeFormat = "YYYY-MM-DD HH:mm:ss";
340
+ const currentDay = (0, import_moment.default)().format("DD");
341
+ const currentMonth = (0, import_moment.default)().format("MM");
342
+ const currentYear = (0, import_moment.default)().format("YYYY");
343
+ const defaultTime = "00:00:00";
344
+ const maxYear = parseInt(currentYear) + 10;
345
+ const isValidDate = (day, month, year) => {
346
+ const date = (0, import_moment.default)(`${day}-${month}-${year}`, "DD-MM-YYYY", true);
347
+ return date.isValid();
348
+ };
349
+ const isValidTime = (hour, minute = "00", second = "00") => {
350
+ const h = parseInt(hour, 10);
351
+ const m = parseInt(minute, 10);
352
+ const s = parseInt(second, 10);
353
+ return h >= 0 && h <= 23 && m >= 0 && m <= 59 && s >= 0 && s <= 59;
354
+ };
355
+ const formatOutput = (day, month, year, time = defaultTime) => {
356
+ let result = (0, import_moment.default)(
357
+ `${day}-${month}-${year} ${time}`,
358
+ "DD-MM-YYYY HH:mm:ss"
359
+ );
360
+ if (!result.isValid()) return null;
361
+ if (isDateTime) {
362
+ result = result.subtract(7, "hours");
363
+ return result.format(dateTimeFormat);
364
+ }
365
+ return result.format(dateFormat);
366
+ };
367
+ if (isDateTime && input.match(
368
+ /^\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}\s+\d{1,2}(:\d{1,2}(:\d{1,2})?)?$/
369
+ )) {
370
+ const [datePart, timePart] = input.split(/\s+/);
371
+ const dateParts = datePart.split(/[\/-]/);
372
+ const timeParts = timePart.split(":");
373
+ const day = dateParts[0].padStart(2, "0");
374
+ const month = dateParts[1].padStart(2, "0");
375
+ const year = dateParts[2].length <= 2 ? `20${dateParts[2].padStart(2, "0")}` : dateParts[2].padStart(4, "0");
376
+ const hour = timeParts[0].padStart(2, "0");
377
+ const minute = timeParts[1] ? timeParts[1].padStart(2, "0") : "00";
378
+ const second = timeParts[2] ? timeParts[2].padStart(2, "0") : "00";
379
+ if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {
380
+ let result = (0, import_moment.default)(
381
+ `${day}-${month}-${year} ${hour}:${minute}:${second}`,
382
+ "DD-MM-YYYY HH:mm:ss"
383
+ );
384
+ if (!result.isValid()) return null;
385
+ result = result.subtract(7, "hours");
386
+ return result.format(dateTimeFormat);
387
+ }
388
+ return null;
389
+ }
390
+ if (cleanInput.match(/^\d{4}-\d{2}-\d{2}$/)) {
391
+ const [year, month, day] = cleanInput.split("-");
392
+ if (isValidDate(day, month, year)) {
393
+ return formatOutput(day, month, year);
394
+ }
395
+ return null;
396
+ }
397
+ if (cleanInput.match(/^\d{1,2}\/\d{1,2}\/\d{2,4}$/)) {
398
+ const [day, month, year] = cleanInput.split("/");
399
+ const paddedDay = day.padStart(2, "0");
400
+ const paddedMonth = month.padStart(2, "0");
401
+ const fullYear = year.length <= 2 ? `20${year.padStart(2, "0")}` : year.padStart(4, "0");
402
+ if (isValidDate(paddedDay, paddedMonth, fullYear)) {
403
+ return formatOutput(paddedDay, paddedMonth, fullYear);
404
+ }
405
+ return null;
406
+ }
407
+ if (cleanInput.match(/^\d{1,2}-\d{1,2}-\d{2,4}$/)) {
408
+ const [day, month, year] = cleanInput.split("-");
409
+ const paddedDay = day.padStart(2, "0");
410
+ const paddedMonth = month.padStart(2, "0");
411
+ const fullYear = year.length <= 2 ? `20${year.padStart(2, "0")}` : year.padStart(4, "0");
412
+ if (isValidDate(paddedDay, paddedMonth, fullYear)) {
413
+ return formatOutput(paddedDay, paddedMonth, fullYear);
414
+ }
415
+ return null;
416
+ }
417
+ if (cleanInput.match(/^\d{1,2}[\/-]\d{1,2}$/)) {
418
+ const [day, month] = cleanInput.split(/[\/-]/);
419
+ const paddedDay = day.padStart(2, "0");
420
+ const paddedMonth = month.padStart(2, "0");
421
+ if (isValidDate(paddedDay, paddedMonth, currentYear)) {
422
+ return formatOutput(paddedDay, paddedMonth, currentYear);
423
+ }
424
+ return null;
425
+ }
426
+ if (cleanInput.match(/^\d{4}$/)) {
427
+ const num = parseInt(cleanInput, 10);
428
+ if (num >= 2e3 && num <= maxYear) {
429
+ if (isValidDate(currentDay, currentMonth, num.toString())) {
430
+ return formatOutput(currentDay, currentMonth, num.toString());
431
+ }
432
+ return null;
433
+ }
434
+ const day = cleanInput.slice(0, 2);
435
+ const month = cleanInput.slice(2, 4);
436
+ if (isValidDate(day, month, currentYear)) {
437
+ return formatOutput(day, month, currentYear);
438
+ }
439
+ return null;
440
+ }
441
+ if (cleanInput.startsWith("-") && /^\-\d+$/.test(cleanInput)) {
442
+ const daysToSubtract = Math.abs(parseInt(cleanInput, 10));
443
+ let result = (0, import_moment.default)().subtract(daysToSubtract, "days");
444
+ if (isDateTime) {
445
+ result = result.subtract(7, "hours");
446
+ }
447
+ if (result.isValid()) {
448
+ return isDateTime ? result.format(dateTimeFormat) : result.format(dateFormat);
449
+ }
450
+ return null;
451
+ }
452
+ if (input.match(/^\d{1,2}[^0-9-\/]+\d{1,2}[^0-9-\/]+\d{2,4}.*$/)) {
453
+ const parts = input.split(/[^0-9-\/]+/).filter(Boolean);
454
+ const day = parts[0].padStart(2, "0");
455
+ const month = parts[1].padStart(2, "0");
456
+ let year = parts[2];
457
+ year = year.length === 2 ? `20${year}` : year.padStart(4, "0");
458
+ if (isValidDate(day, month, year)) {
459
+ return formatOutput(day, month, year);
460
+ }
461
+ return null;
462
+ }
463
+ if (isDateTime) {
464
+ if (cleanInput.length === 9) {
465
+ const day = cleanInput.slice(0, 2);
466
+ const month = cleanInput.slice(2, 4);
467
+ const year = cleanInput.slice(4, 8);
468
+ const hour = cleanInput.slice(8, 9).padStart(2, "0");
469
+ if (isValidDate(day, month, year) && isValidTime(hour)) {
470
+ let result = (0, import_moment.default)(
471
+ `${day}-${month}-${year} ${hour}:00:00`,
472
+ "DD-MM-YYYY HH:mm:ss"
473
+ );
474
+ if (!result.isValid()) return null;
475
+ result = result.subtract(7, "hours");
476
+ return result.format(dateTimeFormat);
477
+ }
478
+ return null;
479
+ }
480
+ if (cleanInput.length === 10) {
481
+ const day = cleanInput.slice(0, 2);
482
+ const month = cleanInput.slice(2, 4);
483
+ const year = cleanInput.slice(4, 8);
484
+ const hour = cleanInput.slice(8, 10);
485
+ if (isValidDate(day, month, year) && isValidTime(hour)) {
486
+ let result = (0, import_moment.default)(
487
+ `${day}-${month}-${year} ${hour}:00:00`,
488
+ "DD-MM-YYYY HH:mm:ss"
489
+ );
490
+ if (!result.isValid()) return null;
491
+ result = result.subtract(7, "hours");
492
+ return result.format(dateTimeFormat);
493
+ }
494
+ return null;
495
+ }
496
+ if (cleanInput.length === 11) {
497
+ const day = cleanInput.slice(0, 2);
498
+ const month = cleanInput.slice(2, 4);
499
+ const year = cleanInput.slice(4, 8);
500
+ const hour = cleanInput.slice(8, 10);
501
+ const minute = cleanInput.slice(10, 11).padStart(2, "0");
502
+ if (isValidDate(day, month, year) && isValidTime(hour, minute)) {
503
+ let result = (0, import_moment.default)(
504
+ `${day}-${month}-${year} ${hour}:${minute}:00`,
505
+ "DD-MM-YYYY HH:mm:ss"
506
+ );
507
+ if (!result.isValid()) return null;
508
+ result = result.subtract(7, "hours");
509
+ return result.format(dateTimeFormat);
510
+ }
511
+ return null;
512
+ }
513
+ if (cleanInput.length === 12) {
514
+ const day = cleanInput.slice(0, 2);
515
+ const month = cleanInput.slice(2, 4);
516
+ const year = cleanInput.slice(4, 8);
517
+ const hour = cleanInput.slice(8, 10);
518
+ const minute = cleanInput.slice(10, 12);
519
+ if (isValidDate(day, month, year) && isValidTime(hour, minute)) {
520
+ let result = (0, import_moment.default)(
521
+ `${day}-${month}-${year} ${hour}:${minute}:00`,
522
+ "DD-MM-YYYY HH:mm:ss"
523
+ );
524
+ if (!result.isValid()) return null;
525
+ result = result.subtract(7, "hours");
526
+ return result.format(dateTimeFormat);
527
+ }
528
+ return null;
529
+ }
530
+ if (cleanInput.length === 13) {
531
+ const day = cleanInput.slice(0, 2);
532
+ const month = cleanInput.slice(2, 4);
533
+ const year = cleanInput.slice(4, 8);
534
+ const hour = cleanInput.slice(8, 10);
535
+ const minute = cleanInput.slice(10, 12);
536
+ const second = cleanInput.slice(12, 13).padStart(2, "0");
537
+ if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {
538
+ let result = (0, import_moment.default)(
539
+ `${day}-${month}-${year} ${hour}:${minute}:${second}`,
540
+ "DD-MM-YYYY HH:mm:ss"
541
+ );
542
+ if (!result.isValid()) return null;
543
+ result = result.subtract(7, "hours");
544
+ return result.format(dateTimeFormat);
545
+ }
546
+ return null;
547
+ }
548
+ if (cleanInput.length === 14) {
549
+ const day = cleanInput.slice(0, 2);
550
+ const month = cleanInput.slice(2, 4);
551
+ const year = cleanInput.slice(4, 8);
552
+ const hour = cleanInput.slice(8, 10);
553
+ const minute = cleanInput.slice(10, 12);
554
+ const second = cleanInput.slice(12, 14);
555
+ if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {
556
+ let result = (0, import_moment.default)(
557
+ `${day}-${month}-${year} ${hour}:${minute}:${second}`,
558
+ "DD-MM-YYYY HH:mm:ss"
559
+ );
560
+ if (!result.isValid()) return null;
561
+ result = result.subtract(7, "hours");
562
+ return result.format(dateTimeFormat);
563
+ }
564
+ return null;
565
+ }
566
+ }
567
+ const len = cleanInput.length;
568
+ if (len === 1 || len === 2) {
569
+ const paddedDay = cleanInput.padStart(2, "0");
570
+ if (isValidDate(paddedDay, currentMonth, currentYear)) {
571
+ return formatOutput(paddedDay, currentMonth, currentYear);
572
+ }
573
+ return null;
574
+ }
575
+ if (len === 3) {
576
+ const day = cleanInput.slice(0, 2);
577
+ const month = cleanInput.slice(2, 3).padStart(2, "0");
578
+ if (isValidDate(day, month, currentYear)) {
579
+ return formatOutput(day, month, currentYear);
580
+ }
581
+ return null;
582
+ }
583
+ if (len === 6) {
584
+ const day = cleanInput.slice(0, 2);
585
+ const month = cleanInput.slice(2, 4);
586
+ let year = cleanInput.slice(4, 6);
587
+ year = `20${year}`;
588
+ if (parseInt(month) > 12) {
589
+ if (isValidDate(day, currentMonth, currentYear)) {
590
+ return formatOutput(day, currentMonth, currentYear);
591
+ }
592
+ return null;
593
+ }
594
+ if (isValidDate(day, month, year)) {
595
+ return formatOutput(day, month, year);
596
+ }
597
+ return null;
598
+ }
599
+ if (len === 7) {
600
+ return null;
601
+ }
602
+ if (len === 8) {
603
+ const day = cleanInput.slice(0, 2);
604
+ const month = cleanInput.slice(2, 4);
605
+ const year = cleanInput.slice(4, 8);
606
+ if (isValidDate(day, month, year)) {
607
+ return formatOutput(day, month, year);
608
+ }
609
+ return null;
610
+ }
611
+ if (len > 8 && !isDateTime) {
612
+ return null;
613
+ }
614
+ return null;
615
+ };
616
+
617
+ // src/constants/field/field-type-constant.ts
618
+ var FieldTypeConstants = /* @__PURE__ */ ((FieldTypeConstants2) => {
619
+ FieldTypeConstants2["CHAR"] = "char";
620
+ FieldTypeConstants2["TEXT"] = "text";
621
+ FieldTypeConstants2["INTEGER"] = "integer";
622
+ FieldTypeConstants2["FLOAT"] = "float";
623
+ FieldTypeConstants2["BOOLEAN"] = "boolean";
624
+ FieldTypeConstants2["DATE"] = "date";
625
+ FieldTypeConstants2["DATETIME"] = "datetime";
626
+ FieldTypeConstants2["BINARY"] = "binary";
627
+ FieldTypeConstants2["SELECTION"] = "selection";
628
+ FieldTypeConstants2["HTML"] = "html";
629
+ FieldTypeConstants2["MANY2ONE"] = "many2one";
630
+ FieldTypeConstants2["ONE2MANY"] = "one2many";
631
+ FieldTypeConstants2["MANY2MANY"] = "many2many";
632
+ FieldTypeConstants2["MONETARY"] = "monetary";
633
+ FieldTypeConstants2["REFERENCE"] = "reference";
634
+ FieldTypeConstants2["FUNCTION"] = "function";
635
+ FieldTypeConstants2["PROPERTY"] = "property";
636
+ return FieldTypeConstants2;
637
+ })(FieldTypeConstants || {});
638
+
639
+ // src/constants/method/method-type-constant.ts
640
+ var MethodType = /* @__PURE__ */ ((MethodType2) => {
641
+ MethodType2[MethodType2["CREATE"] = 0] = "CREATE";
642
+ MethodType2[MethodType2["UPDATE"] = 1] = "UPDATE";
643
+ MethodType2[MethodType2["DELETE"] = 2] = "DELETE";
644
+ MethodType2[MethodType2["UNLINK"] = 3] = "UNLINK";
645
+ MethodType2[MethodType2["NO_CHANGE"] = 4] = "NO_CHANGE";
646
+ return MethodType2;
647
+ })(MethodType || {});
648
+
649
+ // src/constants/model/model-constant.ts
650
+ var ModelConstants = /* @__PURE__ */ ((ModelConstants2) => {
651
+ ModelConstants2["MENU"] = "ir.ui.menu";
652
+ ModelConstants2["USER"] = "res.users";
653
+ ModelConstants2["COMPANY"] = "res.company";
654
+ ModelConstants2["WINDOW_ACTION"] = "ir.actions.act_window";
655
+ ModelConstants2["BASE_IMPORT"] = "base_import.import";
656
+ ModelConstants2["GET_IMPORT"] = "get_import_templates";
657
+ return ModelConstants2;
658
+ })(ModelConstants || {});
659
+
660
+ // src/constants/type/index.ts
661
+ var ComponentType = /* @__PURE__ */ ((ComponentType2) => {
662
+ ComponentType2["GROUP"] = "group";
663
+ ComponentType2["FIELD"] = "field";
664
+ ComponentType2["TREE"] = "tree";
665
+ ComponentType2["DIV"] = "div";
666
+ ComponentType2["LIST"] = "list";
667
+ ComponentType2["FORM"] = "form";
668
+ ComponentType2["SETTINGS"] = "setting";
669
+ ComponentType2["SPAN"] = "span";
670
+ ComponentType2["KANBAN"] = "kanban";
671
+ ComponentType2["CALENDAR"] = "calendar";
672
+ ComponentType2["TYPE"] = "view-type";
673
+ return ComponentType2;
674
+ })(ComponentType || {});
675
+ var SearchType = {
676
+ FILTER: "filter_by",
677
+ SEARCH: "search_by",
678
+ GROUP: "group_by"
679
+ };
143
680
 
144
681
  // src/constants/widget/widget-avatar-constant.ts
145
682
  var WIDGETAVATAR = /* @__PURE__ */ ((WIDGETAVATAR2) => {
@@ -147,6 +684,28 @@ var WIDGETAVATAR = /* @__PURE__ */ ((WIDGETAVATAR2) => {
147
684
  WIDGETAVATAR2["many2many_avatar_user"] = "many2many_avatar_user";
148
685
  return WIDGETAVATAR2;
149
686
  })(WIDGETAVATAR || {});
687
+ var WIDGETCURRENCY = /* @__PURE__ */ ((WIDGETCURRENCY2) => {
688
+ WIDGETCURRENCY2["many2one_avatar_user"] = "many2one_avatar_user";
689
+ WIDGETCURRENCY2["many2many_avatar_user"] = "many2many_avatar_user";
690
+ return WIDGETCURRENCY2;
691
+ })(WIDGETCURRENCY || {});
692
+
693
+ // src/constants/widget/widget-color-constant.ts
694
+ var WIDGETCOLOR = /* @__PURE__ */ ((WIDGETCOLOR2) => {
695
+ WIDGETCOLOR2["many2many_tags"] = "many2many_tags";
696
+ WIDGETCOLOR2["helpdesk_sla_many2many_tags"] = "helpdesk_sla_many2many_tags";
697
+ return WIDGETCOLOR2;
698
+ })(WIDGETCOLOR || {});
699
+
700
+ // src/constants/widget/widget-status-constant.ts
701
+ var WIDGETSTATUS = /* @__PURE__ */ ((WIDGETSTATUS2) => {
702
+ WIDGETSTATUS2["sla_status_ids"] = "sla_status_ids";
703
+ return WIDGETSTATUS2;
704
+ })(WIDGETSTATUS || {});
705
+ var WIDGETNOSTRING = /* @__PURE__ */ ((WIDGETNOSTRING2) => {
706
+ WIDGETNOSTRING2["sla_status_ids"] = "sla_status_ids";
707
+ return WIDGETNOSTRING2;
708
+ })(WIDGETNOSTRING || {});
150
709
 
151
710
  // src/utils/domain/py_tokenizer.ts
152
711
  var TokenizerError = class extends Error {
@@ -1915,6 +2474,48 @@ function parseExpr(expr) {
1915
2474
  const tokens = tokenize(expr);
1916
2475
  return parse(tokens);
1917
2476
  }
2477
+ function evaluateExpr(expr, context = {}) {
2478
+ let ast;
2479
+ try {
2480
+ ast = parseExpr(expr);
2481
+ } catch (error) {
2482
+ throw new EvalError(
2483
+ `Can not parse python expression: (${expr})
2484
+ Error: ${error.message}`
2485
+ );
2486
+ }
2487
+ try {
2488
+ return evaluate(ast, context);
2489
+ } catch (error) {
2490
+ throw new EvalError(
2491
+ `Can not evaluate python expression: (${expr})
2492
+ Error: ${error.message}`
2493
+ );
2494
+ }
2495
+ }
2496
+ function evaluateBooleanExpr(expr, context = {}) {
2497
+ if (!expr || expr === "False" || expr === "0") {
2498
+ return false;
2499
+ }
2500
+ if (expr === "True" || expr === "1") {
2501
+ return true;
2502
+ }
2503
+ return evaluateExpr(`bool(${expr})`, context);
2504
+ }
2505
+
2506
+ // src/utils/domain/context.ts
2507
+ function evalPartialContext(_context, evaluationContext = {}) {
2508
+ const ast = parseExpr(_context);
2509
+ const context = {};
2510
+ for (const key in ast.value) {
2511
+ const value = ast.value[key];
2512
+ try {
2513
+ context[key] = evaluate(value, evaluationContext);
2514
+ } catch {
2515
+ }
2516
+ }
2517
+ return context;
2518
+ }
1918
2519
 
1919
2520
  // src/utils/domain/objects.ts
1920
2521
  function shallowEqual(obj1, obj2, comparisonFn = (a, b) => a === b) {
@@ -2253,14 +2854,280 @@ function matchDomain(record, domain) {
2253
2854
  }
2254
2855
  return matchCondition(record, condStack.pop());
2255
2856
  }
2857
+ var checkDomain = (context, domain) => {
2858
+ try {
2859
+ if (domain === void 0 || domain === "0" || domain === "False" || domain === false) {
2860
+ return false;
2861
+ } else if (domain === "1" || domain === "True" || domain === true) {
2862
+ return true;
2863
+ }
2864
+ try {
2865
+ if (context && domain) {
2866
+ const d = new Domain(domain);
2867
+ return d.contains(context);
2868
+ }
2869
+ } catch (error) {
2870
+ if (context && domain) {
2871
+ const domainEval = evaluateBooleanExpr(domain, context);
2872
+ return domainEval;
2873
+ }
2874
+ return false;
2875
+ }
2876
+ return false;
2877
+ } catch (e) {
2878
+ return false;
2879
+ }
2880
+ };
2881
+ var matchDomains = (context, domains) => {
2882
+ if (Array.isArray(domains)) {
2883
+ if (domains?.length > 0) {
2884
+ return domains && domains.some((domain) => checkDomain(context, domain));
2885
+ }
2886
+ } else return checkDomain(context, domains);
2887
+ return false;
2888
+ };
2256
2889
 
2257
2890
  // src/utils/function.ts
2258
2891
  var import_react = require("react");
2892
+ var evalJSONContext = (_context, context = {}) => {
2893
+ try {
2894
+ return evalPartialContext(_context, context);
2895
+ } catch (err) {
2896
+ return null;
2897
+ }
2898
+ };
2899
+ var evalJSONDomain = (domain, context) => {
2900
+ try {
2901
+ if (context) {
2902
+ Object.keys(context)?.forEach((key) => {
2903
+ if (Array.isArray(context[key])) {
2904
+ const isTypeObject = context[key]?.every(
2905
+ (item) => typeof item === "object" && item !== null && item?.id !== void 0
2906
+ );
2907
+ if (isTypeObject) {
2908
+ context[key] = context[key]?.map((item) => item?.id);
2909
+ }
2910
+ }
2911
+ });
2912
+ }
2913
+ const value = evaluateExpr(domain, context);
2914
+ return value;
2915
+ } catch (err) {
2916
+ try {
2917
+ const domainObject = new Domain(domain).toList(context);
2918
+ return domainObject;
2919
+ } catch (err2) {
2920
+ return [];
2921
+ }
2922
+ }
2923
+ };
2924
+ var formatSortingString = (input) => {
2925
+ if (!input) return null;
2926
+ return input.split(",").map((field) => {
2927
+ const [key, order] = field.trim().split(/\s+/);
2928
+ const sortOrder = order?.toUpperCase() === "DESC" ? "DESC" : "ASC";
2929
+ return `${key} ${sortOrder}`;
2930
+ }).join(", ");
2931
+ };
2932
+ var domainHelper = {
2933
+ checkDomain,
2934
+ matchDomains,
2935
+ Domain
2936
+ };
2259
2937
  var toQueryString = (params) => {
2260
2938
  return Object.keys(params).map(
2261
2939
  (key) => encodeURIComponent(key) + "=" + encodeURIComponent(params[key].toString())
2262
2940
  ).join("&");
2263
2941
  };
2942
+ var convertFloatToTime = (floatValue) => {
2943
+ const hours = Math.floor(floatValue);
2944
+ const minutes = Math.round((floatValue - hours) * 60);
2945
+ const formattedHours = String(hours).padStart(2, "0");
2946
+ const formattedMinutes = String(minutes).padStart(2, "0");
2947
+ return `${formattedHours}:${formattedMinutes}`;
2948
+ };
2949
+ var convertTimeToFloat = (timeString) => {
2950
+ const [hours, minutes] = timeString.split(":").map(Number);
2951
+ return hours + minutes / 60;
2952
+ };
2953
+ var stringToColor = (name, id) => {
2954
+ const combined = name + id / 2;
2955
+ let hash = 0;
2956
+ for (let i = 0; i < combined.length; i++) {
2957
+ hash = combined.charCodeAt(i) + ((hash << 5) - hash);
2958
+ }
2959
+ const r = hash >> 16 & 255;
2960
+ const g = hash >> 8 & 255;
2961
+ const b = hash & 255;
2962
+ const adjustedR = 120 + r % 61;
2963
+ const adjustedG = 120 + g % 61;
2964
+ const adjustedB = 120 + b % 61;
2965
+ return `#${adjustedR.toString(16).padStart(2, "0")}${adjustedG.toString(16).padStart(2, "0")}${adjustedB.toString(16).padStart(2, "0")}`;
2966
+ };
2967
+ var getFieldsOnChange = (fields) => {
2968
+ const result = [];
2969
+ function traverse(items) {
2970
+ for (const item of items) {
2971
+ if (item) {
2972
+ if (item?.type_co === "field" && matchDomains(fields, item?.on_change)) {
2973
+ result.push(item.name);
2974
+ }
2975
+ if (item?.fields && Array.isArray(item?.fields)) {
2976
+ traverse(item?.fields);
2977
+ }
2978
+ }
2979
+ }
2980
+ }
2981
+ traverse(fields);
2982
+ return result;
2983
+ };
2984
+ var filterFieldDirty = ({
2985
+ id,
2986
+ viewData,
2987
+ formValues,
2988
+ dirtyFields,
2989
+ model,
2990
+ defaultData
2991
+ }) => {
2992
+ const data = id ? { ...dirtyFields } : { ...formValues };
2993
+ for (const key in data) {
2994
+ if (viewData?.models?.[model]?.[key]?.type === "one2many" /* ONE2MANY */) {
2995
+ const lineData = [];
2996
+ (formValues[key] ?? []).forEach((itemData, index) => {
2997
+ if (typeof itemData?.id === "string" && itemData?.id.includes("virtual")) {
2998
+ delete itemData?.id;
2999
+ }
3000
+ if (!itemData?.id) {
3001
+ lineData.push([
3002
+ 0 /* CREATE */,
3003
+ `virtual_${index}`,
3004
+ filterFieldDirty({
3005
+ id: itemData?.id,
3006
+ viewData,
3007
+ formValues: itemData,
3008
+ dirtyFields: {},
3009
+ model: viewData?.models?.[model]?.[key]?.relation,
3010
+ defaultData
3011
+ })
3012
+ ]);
3013
+ } else if (dirtyFields[key]?.length) {
3014
+ dirtyFields[key].forEach((itemDirty, indexDirty) => {
3015
+ if (Object.values(itemDirty).includes(true) && indexDirty === index) {
3016
+ lineData.push([
3017
+ 1 /* UPDATE */,
3018
+ itemData?.id,
3019
+ filterFieldDirty({
3020
+ id: itemData?.id,
3021
+ viewData,
3022
+ formValues: itemData,
3023
+ dirtyFields: itemDirty,
3024
+ model: viewData?.models?.[model]?.[key]?.relation,
3025
+ defaultData: {}
3026
+ })
3027
+ ]);
3028
+ }
3029
+ });
3030
+ }
3031
+ });
3032
+ (defaultData[key] ?? []).forEach((item) => {
3033
+ if (!(formValues[key] ?? []).find(
3034
+ (itemData) => itemData?.id === item?.id
3035
+ )) {
3036
+ lineData.push([2 /* DELETE */, item?.id, item]);
3037
+ }
3038
+ });
3039
+ data[key] = lineData;
3040
+ } else if (viewData?.models?.[model]?.[key]?.type === "many2many" /* MANY2MANY */) {
3041
+ const lineData = [];
3042
+ (formValues[key] || []).forEach((itemData) => {
3043
+ if (itemData?.id) {
3044
+ lineData.push([4 /* NO_CHANGE */, itemData?.id]);
3045
+ }
3046
+ });
3047
+ (defaultData[key] ?? []).forEach((item) => {
3048
+ if (!(formValues[key] ?? []).find(
3049
+ (itemData) => itemData?.id === item?.id
3050
+ )) {
3051
+ lineData.push([3 /* UNLINK */, item?.id]);
3052
+ }
3053
+ });
3054
+ data[key] = lineData;
3055
+ } else {
3056
+ if (id && (typeof dirtyFields?.[key] === "object" && !dirtyFields?.[key]?.id || typeof dirtyFields[key] !== "object" && !dirtyFields[key])) {
3057
+ delete data[key];
3058
+ } else {
3059
+ if (!data[key]) {
3060
+ delete data[key];
3061
+ } else {
3062
+ data[key] = formValues?.[key]?.display_name ? formValues?.[key]?.id : formValues?.[key];
3063
+ }
3064
+ }
3065
+ }
3066
+ }
3067
+ return data;
3068
+ };
3069
+ var mergeObjects = (object1, object2) => {
3070
+ if (!object1 || !object2) return void 0;
3071
+ const mergedObject = { ...object2 };
3072
+ Object.keys(object1).forEach((key) => {
3073
+ if (Array.isArray(object1[key]) && Array.isArray(object2[key])) {
3074
+ mergedObject[key] = object2[key].map((item, index) => {
3075
+ if (object1[key][index]) {
3076
+ return {
3077
+ ...item,
3078
+ ...object1[key][index]
3079
+ };
3080
+ }
3081
+ return item;
3082
+ });
3083
+ } else if (typeof object1[key] === "object" && typeof object2[key] === "object" && object1[key] !== null && object2[key] !== null) {
3084
+ mergedObject[key] = mergeObjects(object1[key], object2[key]);
3085
+ } else {
3086
+ mergedObject[key] = object1[key] !== void 0 ? object1[key] : object2[key];
3087
+ }
3088
+ });
3089
+ if (object2) {
3090
+ Object.keys(object2).forEach((key) => {
3091
+ if (!mergedObject.hasOwnProperty(key)) {
3092
+ mergedObject[key] = object2[key];
3093
+ }
3094
+ });
3095
+ }
3096
+ return mergedObject;
3097
+ };
3098
+ var formatUrlPath = ({
3099
+ viewType,
3100
+ aid,
3101
+ model,
3102
+ id,
3103
+ actionPath
3104
+ }) => {
3105
+ let _url = `/${viewType}/${actionPath}?aid=${aid}&model=${model}`;
3106
+ if (id) {
3107
+ _url += `&id=${id}`;
3108
+ }
3109
+ return _url;
3110
+ };
3111
+ var removeUndefinedFields = (obj) => {
3112
+ const newObj = {};
3113
+ for (const key in obj) {
3114
+ if (obj[key] !== void 0) {
3115
+ newObj[key] = obj[key];
3116
+ }
3117
+ }
3118
+ return newObj;
3119
+ };
3120
+ var useTabModel = (viewData, onchangeData) => {
3121
+ const tabsData = viewData?.views?.form?.tabs?.filter((val) => {
3122
+ if (!val) return null;
3123
+ const hide = checkDomain(onchangeData, val.invisible);
3124
+ if (!hide) {
3125
+ return val;
3126
+ }
3127
+ return false;
3128
+ }) || [];
3129
+ return tabsData;
3130
+ };
2264
3131
  var isBase64File = (str) => {
2265
3132
  try {
2266
3133
  const dataUriPattern = /^data:([a-zA-Z]+\/[a-zA-Z0-9-.+]+)?;base64,/;
@@ -2276,6 +3143,69 @@ var isBase64File = (str) => {
2276
3143
  return false;
2277
3144
  }
2278
3145
  };
3146
+ var isBase64Image = (str) => {
3147
+ const base64Regex = /^data:image\/(png|jpeg|jpg|gif|webp);base64,/;
3148
+ if (!base64Regex.test(str)) {
3149
+ return false;
3150
+ }
3151
+ try {
3152
+ const base64Data = str.split(",")[1];
3153
+ return !!base64Data && atob(base64Data).length > 0;
3154
+ } catch (error) {
3155
+ return false;
3156
+ }
3157
+ };
3158
+ var checkIsImageLink = (url) => {
3159
+ const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i;
3160
+ return imageExtensions.test(url) || isBase64Image(url);
3161
+ };
3162
+ var formatFileSize = (size) => {
3163
+ if (size < 1024) return `${size} B`;
3164
+ const i = Math.floor(Math.log(size) / Math.log(1024));
3165
+ const sizes = ["B", "KB", "MB", "GB", "TB"];
3166
+ return `${(size / Math.pow(1024, i)).toFixed(2)} ${sizes[i]}`;
3167
+ };
3168
+ var getSubdomain = (url = window.location.href) => {
3169
+ const parts = url?.split(".");
3170
+ if (parts.length > 2) {
3171
+ return parts[0].replace("https://", "").replace("http://", "");
3172
+ }
3173
+ return null;
3174
+ };
3175
+ var resequence = (arr, start, end) => {
3176
+ if (start < 0 || start >= arr.length || end < 0 || end >= arr.length) {
3177
+ return [];
3178
+ }
3179
+ const [element] = arr.splice(start, 1);
3180
+ arr.splice(end, 0, element);
3181
+ return arr.slice(Math.min(start, end), Math.max(start, end) + 1);
3182
+ };
3183
+ var getOffSet = (arr, start, end) => {
3184
+ if (start < 0 || start >= arr.length || end < 0 || end >= arr.length) {
3185
+ return 0;
3186
+ }
3187
+ if (start > end) {
3188
+ return end;
3189
+ }
3190
+ return arr.slice(0, start).length;
3191
+ };
3192
+ var copyTextToClipboard = async (text) => {
3193
+ if ("clipboard" in navigator) {
3194
+ return await navigator.clipboard.writeText(text);
3195
+ } else {
3196
+ const textArea = document.createElement("textarea");
3197
+ textArea.value = text;
3198
+ textArea.style.position = "fixed";
3199
+ document.body.appendChild(textArea);
3200
+ textArea.focus();
3201
+ textArea.select();
3202
+ try {
3203
+ document.execCommand("copy");
3204
+ } finally {
3205
+ document.body.removeChild(textArea);
3206
+ }
3207
+ }
3208
+ };
2279
3209
  var updateTokenParamInOriginalRequest = (originalRequest, newAccessToken) => {
2280
3210
  if (!originalRequest.data) return originalRequest.data;
2281
3211
  if (typeof originalRequest.data === "string") {
@@ -2295,6 +3225,41 @@ var updateTokenParamInOriginalRequest = (originalRequest, newAccessToken) => {
2295
3225
  }
2296
3226
  return originalRequest.data;
2297
3227
  };
3228
+ var isObjectEmpty = (obj) => {
3229
+ return Object.keys(obj).length === 0;
3230
+ };
3231
+ var useField = (props) => {
3232
+ const [invisible, setInvisible] = (0, import_react.useState)(true);
3233
+ const [required, setRequired] = (0, import_react.useState)(false);
3234
+ const [readonly, setReadOnly] = (0, import_react.useState)(false);
3235
+ const {
3236
+ invisible: inv,
3237
+ required: req,
3238
+ readonly: rea,
3239
+ onchangeData,
3240
+ rootField,
3241
+ index,
3242
+ name
3243
+ } = props;
3244
+ const nameField = rootField ? `${rootField?.name}.${index}.${name}` : null;
3245
+ (0, import_react.useEffect)(() => {
3246
+ if (onchangeData && Object.keys(onchangeData).length > 0) {
3247
+ setRequired(
3248
+ typeof req === "object" ? matchDomains(onchangeData, req) : checkDomain(onchangeData, req)
3249
+ );
3250
+ setInvisible(matchDomains(onchangeData, inv));
3251
+ setReadOnly(
3252
+ typeof req === "object" ? matchDomains(onchangeData, rea) : checkDomain(onchangeData, rea)
3253
+ );
3254
+ }
3255
+ }, [onchangeData]);
3256
+ return {
3257
+ invisible,
3258
+ required,
3259
+ readonly,
3260
+ nameField
3261
+ };
3262
+ };
2298
3263
 
2299
3264
  // src/utils/storage/local-storage.ts
2300
3265
  var localStorageUtils = () => {
@@ -2524,6 +3489,7 @@ var breadcrumbsSlice = (0, import_toolkit.createSlice)({
2524
3489
  }
2525
3490
  });
2526
3491
  var { setBreadCrumbs } = breadcrumbsSlice.actions;
3492
+ var selectBreadCrumbs = (state) => state.breadcrumbs;
2527
3493
  var breadcrums_slice_default = breadcrumbsSlice.reducer;
2528
3494
 
2529
3495
  // src/store/reducers/env-slice/index.ts
@@ -2592,6 +3558,7 @@ var {
2592
3558
  setConfig,
2593
3559
  setEnvFile
2594
3560
  } = envSlice.actions;
3561
+ var selectEnv = (state) => state.env;
2595
3562
  var env_slice_default = envSlice.reducer;
2596
3563
 
2597
3564
  // src/store/reducers/excel-slice/index.ts
@@ -2636,6 +3603,7 @@ var {
2636
3603
  setSelectedFile,
2637
3604
  setErrorData
2638
3605
  } = excelSlice.actions;
3606
+ var selectExcel = (state) => state.excel;
2639
3607
  var excel_slice_default = excelSlice.reducer;
2640
3608
 
2641
3609
  // src/store/reducers/form-slice/index.ts
@@ -2685,6 +3653,7 @@ var {
2685
3653
  setListSubject,
2686
3654
  setDataUser
2687
3655
  } = formSlice.actions;
3656
+ var selectForm = (state) => state.form;
2688
3657
  var form_slice_default = formSlice.reducer;
2689
3658
 
2690
3659
  // src/store/reducers/header-slice/index.ts
@@ -2704,6 +3673,7 @@ var headerSlice = (0, import_toolkit5.createSlice)({
2704
3673
  }
2705
3674
  });
2706
3675
  var { setAllowedCompanyIds, setHeader } = headerSlice.actions;
3676
+ var selectHeader = (state) => state.header;
2707
3677
  var header_slice_default = headerSlice.reducer;
2708
3678
 
2709
3679
  // src/store/reducers/list-slice/index.ts
@@ -2769,6 +3739,7 @@ var {
2769
3739
  setTransferDetail,
2770
3740
  setDomainTable
2771
3741
  } = listSlice.actions;
3742
+ var selectList = (state) => state.list;
2772
3743
  var list_slice_default = listSlice.reducer;
2773
3744
 
2774
3745
  // src/store/reducers/login-slice/index.ts
@@ -2794,6 +3765,7 @@ var loginSlice = (0, import_toolkit7.createSlice)({
2794
3765
  }
2795
3766
  });
2796
3767
  var { setDb, setRedirectTo, setForgotPasswordUrl } = loginSlice.actions;
3768
+ var selectLogin = (state) => state.login;
2797
3769
  var login_slice_default = loginSlice.reducer;
2798
3770
 
2799
3771
  // src/store/reducers/navbar-slice/index.ts
@@ -2823,6 +3795,7 @@ var navbarSlice = (0, import_toolkit8.createSlice)({
2823
3795
  }
2824
3796
  });
2825
3797
  var { setMenuFocus, setMenuFocusAction, setNavbarWidth, setMenuList } = navbarSlice.actions;
3798
+ var selectNavbar = (state) => state.navbar;
2826
3799
  var navbar_slice_default = navbarSlice.reducer;
2827
3800
 
2828
3801
  // src/store/reducers/profile-slice/index.ts
@@ -2840,6 +3813,7 @@ var profileSlice = (0, import_toolkit9.createSlice)({
2840
3813
  }
2841
3814
  });
2842
3815
  var { setProfile } = profileSlice.actions;
3816
+ var selectProfile = (state) => state.profile;
2843
3817
  var profile_slice_default = profileSlice.reducer;
2844
3818
 
2845
3819
  // src/store/reducers/search-slice/index.ts
@@ -2926,6 +3900,8 @@ var {
2926
3900
  setGroupBy,
2927
3901
  clearSearchMap
2928
3902
  } = searchSlice.actions;
3903
+ var selectSearch = (state) => state.search;
3904
+ var selectSearchMap = (state) => state.search.searchMap;
2929
3905
  var search_slice_default = searchSlice.reducer;
2930
3906
 
2931
3907
  // src/store/store.ts
@@ -3120,6 +4096,10 @@ var envStore = (0, import_toolkit11.configureStore)({
3120
4096
  })
3121
4097
  });
3122
4098
 
4099
+ // src/store/index.ts
4100
+ var useAppDispatch = import_react_redux.useDispatch;
4101
+ var useAppSelector = import_react_redux.useSelector;
4102
+
3123
4103
  // src/environment/EnvStore.ts
3124
4104
  var EnvStore = class {
3125
4105
  envStore;
@@ -3195,12 +4175,22 @@ var EnvStore = class {
3195
4175
  }
3196
4176
  };
3197
4177
  var env = null;
4178
+ function initEnv({
4179
+ localStorageUtils: localStorageUtils2,
4180
+ sessionStorageUtils: sessionStorageUtils2
4181
+ }) {
4182
+ env = new EnvStore(envStore, localStorageUtils2, sessionStorageUtils2);
4183
+ return env;
4184
+ }
3198
4185
  function getEnv() {
3199
4186
  if (!env)
3200
4187
  env = new EnvStore(envStore, localStorageUtils(), sessionStorageUtils());
3201
4188
  return env;
3202
4189
  }
3203
4190
 
4191
+ // src/hooks/auth/use-forgot-password.ts
4192
+ var import_react_query = require("@tanstack/react-query");
4193
+
3204
4194
  // src/services/action-service/index.ts
3205
4195
  var ActionService = {
3206
4196
  // Load Action
@@ -5972,8 +6962,212 @@ var useVerifyTotp = () => {
5972
6962
  });
5973
6963
  };
5974
6964
  var use_verify_totp_default = useVerifyTotp;
6965
+
6966
+ // src/provider/react-query-provider.tsx
6967
+ var import_react_query68 = require("@tanstack/react-query");
6968
+ var import_jsx_runtime = require("react/jsx-runtime");
6969
+ var ReactQueryProvider = ({ children }) => {
6970
+ const queryClient = new import_react_query68.QueryClient({
6971
+ defaultOptions: {
6972
+ queries: {
6973
+ // placeholderData: keepPreviousData,
6974
+ refetchOnWindowFocus: false,
6975
+ refetchOnMount: false,
6976
+ refetchOnReconnect: false,
6977
+ retry: false
6978
+ }
6979
+ }
6980
+ });
6981
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_query68.QueryClientProvider, { client: queryClient, children });
6982
+ };
6983
+
6984
+ // src/provider/redux-provider.tsx
6985
+ var import_react_redux2 = require("react-redux");
6986
+ var import_jsx_runtime2 = require("react/jsx-runtime");
6987
+ var ReduxProvider = ({ children }) => {
6988
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_redux2.Provider, { store: envStore, children });
6989
+ };
6990
+
6991
+ // src/provider/main-provider.tsx
6992
+ var import_jsx_runtime3 = require("react/jsx-runtime");
6993
+ var MainProvider = ({ children }) => {
6994
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ReduxProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ReactQueryProvider, { children }) });
6995
+ };
6996
+
6997
+ // src/provider/version-gate-provider.tsx
6998
+ var import_react2 = require("react");
6999
+ var import_react_query69 = require("@tanstack/react-query");
7000
+ var import_jsx_runtime4 = require("react/jsx-runtime");
7001
+ var VersionGate = ({ children }) => {
7002
+ const queryClient = (0, import_react_query69.useQueryClient)();
7003
+ const [ready, setReady] = (0, import_react2.useState)(false);
7004
+ (0, import_react2.useEffect)(() => {
7005
+ const clearVersion = () => {
7006
+ queryClient.clear();
7007
+ localStorage.removeItem("__api_version__");
7008
+ };
7009
+ const validateVersion = async () => {
7010
+ const serverVersion = await view_service_default.getVersion();
7011
+ const cached = localStorage.getItem("__api_version__");
7012
+ if (cached !== serverVersion?.api_version) {
7013
+ clearVersion();
7014
+ localStorage.setItem("__api_version__", serverVersion?.api_version);
7015
+ } else {
7016
+ console.log("Api version:", serverVersion?.api_version);
7017
+ }
7018
+ setReady(true);
7019
+ };
7020
+ validateVersion();
7021
+ if (typeof window !== "undefined") {
7022
+ const onKey = (e) => {
7023
+ const key = e.key.toLowerCase();
7024
+ const isHardRefresh = (key === "f5" || key === "r") && e.ctrlKey && (key !== "r" || e.shiftKey) || key === "r" && e.metaKey && e.shiftKey || key === "r" && e.metaKey && e.altKey;
7025
+ if (isHardRefresh) clearVersion();
7026
+ };
7027
+ window.addEventListener("keydown", onKey);
7028
+ return () => window.removeEventListener("keydown", onKey);
7029
+ }
7030
+ }, [queryClient]);
7031
+ return ready ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, { children }) : null;
7032
+ };
5975
7033
  // Annotate the CommonJS export names for ESM import in node:
5976
7034
  0 && (module.exports = {
7035
+ ActionService,
7036
+ AuthService,
7037
+ CompanyService,
7038
+ ComponentType,
7039
+ EnvStore,
7040
+ ExcelService,
7041
+ FieldTypeConstants,
7042
+ FormService,
7043
+ KanbanService,
7044
+ KeyConstants,
7045
+ MainProvider,
7046
+ MethodConstants,
7047
+ MethodType,
7048
+ ModelConstants,
7049
+ ModelService,
7050
+ ReactQueryProvider,
7051
+ SearchType,
7052
+ UriConstants,
7053
+ UserService,
7054
+ VersionGate,
7055
+ ViewService,
7056
+ WIDGETAVATAR,
7057
+ WIDGETCOLOR,
7058
+ WIDGETCURRENCY,
7059
+ WIDGETNOSTRING,
7060
+ WIDGETSTATUS,
7061
+ WesapError,
7062
+ axiosClient,
7063
+ breadcrumbsSlice,
7064
+ checkIsImageLink,
7065
+ clearSearchMap,
7066
+ convertFloatToTime,
7067
+ convertTimeToFloat,
7068
+ copyTextToClipboard,
7069
+ domainHelper,
7070
+ env,
7071
+ envSlice,
7072
+ envStore,
7073
+ evalJSONContext,
7074
+ evalJSONDomain,
7075
+ excelSlice,
7076
+ filterFieldDirty,
7077
+ formSlice,
7078
+ formatCurrency,
7079
+ formatDate,
7080
+ formatFileSize,
7081
+ formatSortingString,
7082
+ formatUrlPath,
7083
+ getEnv,
7084
+ getFieldsOnChange,
7085
+ getOffSet,
7086
+ getSubdomain,
7087
+ handleError,
7088
+ headerSlice,
7089
+ initEnv,
7090
+ isBase64File,
7091
+ isBase64Image,
7092
+ isObjectEmpty,
7093
+ listSlice,
7094
+ loginSlice,
7095
+ mergeObjects,
7096
+ navbarSlice,
7097
+ profileSlice,
7098
+ removeKeyFromSearchMap,
7099
+ removeUndefinedFields,
7100
+ resequence,
7101
+ searchSlice,
7102
+ selectBreadCrumbs,
7103
+ selectEnv,
7104
+ selectExcel,
7105
+ selectForm,
7106
+ selectHeader,
7107
+ selectList,
7108
+ selectLogin,
7109
+ selectNavbar,
7110
+ selectProfile,
7111
+ selectSearch,
7112
+ selectSearchMap,
7113
+ setAllowCompanies,
7114
+ setAllowedCompanyIds,
7115
+ setBreadCrumbs,
7116
+ setCompanies,
7117
+ setConfig,
7118
+ setDataParse,
7119
+ setDataUser,
7120
+ setDb,
7121
+ setDefaultCompany,
7122
+ setDomainTable,
7123
+ setEnv,
7124
+ setEnvFile,
7125
+ setErrorData,
7126
+ setFieldTranslate,
7127
+ setFields,
7128
+ setFilterBy,
7129
+ setFirstDomain,
7130
+ setForgotPasswordUrl,
7131
+ setFormSubmitComponent,
7132
+ setGroupBy,
7133
+ setGroupByDomain,
7134
+ setHeader,
7135
+ setHoveredIndexSearchList,
7136
+ setIdFile,
7137
+ setIndexRowTableModal,
7138
+ setIsFileLoaded,
7139
+ setIsShowModalTranslate,
7140
+ setIsShowingModalDetail,
7141
+ setIsUpdateTableModal,
7142
+ setLang,
7143
+ setListSubject,
7144
+ setLoadingImport,
7145
+ setMenuFocus,
7146
+ setMenuFocusAction,
7147
+ setMenuList,
7148
+ setNavbarWidth,
7149
+ setOrder,
7150
+ setPage,
7151
+ setPageLimit,
7152
+ setProfile,
7153
+ setRedirectTo,
7154
+ setSearchBy,
7155
+ setSearchMap,
7156
+ setSearchString,
7157
+ setSelectedFile,
7158
+ setSelectedRadioKey,
7159
+ setSelectedRowKeys,
7160
+ setSelectedTags,
7161
+ setTransferDetail,
7162
+ setUid,
7163
+ setUser,
7164
+ setViewDataStore,
7165
+ stringToColor,
7166
+ toQueryString,
7167
+ updateSearchMap,
7168
+ updateTokenParamInOriginalRequest,
7169
+ useAppDispatch,
7170
+ useAppSelector,
5977
7171
  useButton,
5978
7172
  useChangeStatus,
5979
7173
  useDelete,
@@ -5981,6 +7175,7 @@ var use_verify_totp_default = useVerifyTotp;
5981
7175
  useDuplicateRecord,
5982
7176
  useExecuteImport,
5983
7177
  useExportExcel,
7178
+ useField,
5984
7179
  useForgotPassword,
5985
7180
  useForgotPasswordSSO,
5986
7181
  useGet2FAMethods,
@@ -6036,11 +7231,14 @@ var use_verify_totp_default = useVerifyTotp;
6036
7231
  useSettingsWebRead2fa,
6037
7232
  useSignInSSO,
6038
7233
  useSwitchLocale,
7234
+ useTabModel,
6039
7235
  useUpdatePassword,
6040
7236
  useUploadFile,
6041
7237
  useUploadIdFile,
6042
7238
  useUploadImage,
6043
7239
  useValidateActionToken,
6044
7240
  useVerify2FA,
6045
- useVerifyTotp
7241
+ useVerifyTotp,
7242
+ validateAndParseDate
6046
7243
  });
7244
+ //# sourceMappingURL=index.js.map