@fctc/interface-logic 1.4.2 → 1.4.4

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