@fctc/widget-logic 2.5.6 → 2.5.8
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.
- package/dist/hooks.js +19 -13
- package/dist/hooks.mjs +17 -11
- package/dist/index.js +56 -50
- package/dist/index.mjs +21 -15
- package/dist/widget.js +38 -38
- package/dist/widget.mjs +5 -5
- package/package.json +1 -1
package/dist/hooks.js
CHANGED
|
@@ -484,16 +484,17 @@ var useViewV2 = ({
|
|
|
484
484
|
}) => {
|
|
485
485
|
const { useGetView: useGetView2 } = (0, provider_exports.useService)();
|
|
486
486
|
const viewParams = (0, import_react6.useMemo)(() => {
|
|
487
|
+
if (!model || !views) return void 0;
|
|
487
488
|
return {
|
|
488
489
|
model,
|
|
489
490
|
views,
|
|
490
491
|
context,
|
|
491
492
|
id
|
|
492
493
|
};
|
|
493
|
-
}, [model]);
|
|
494
|
+
}, [model, views, context, id]);
|
|
494
495
|
const view = useGetView2(
|
|
495
496
|
viewParams || {},
|
|
496
|
-
!!viewParams
|
|
497
|
+
!!viewParams && !(0, utils_exports.isObjectEmpty)(viewParams)
|
|
497
498
|
);
|
|
498
499
|
return {
|
|
499
500
|
...view,
|
|
@@ -590,18 +591,23 @@ var AppProvider = ({
|
|
|
590
591
|
{ ...(0, utils_exports.evalJSONContext)(action?.context) }
|
|
591
592
|
]);
|
|
592
593
|
}, [menuContext, action?.context, env?.context?.lang]);
|
|
593
|
-
const
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
...Array.isArray(action?.views) ? action
|
|
594
|
+
const memoViews = (0, import_react8.useMemo)(() => {
|
|
595
|
+
if (!action) return [];
|
|
596
|
+
return [
|
|
597
|
+
...Array.isArray(action?.views) ? action.views.map(
|
|
597
598
|
(view2) => view2[1] === "list" ? [view2[0], "list"] : view2
|
|
598
599
|
) : [],
|
|
599
600
|
[
|
|
600
|
-
Array.isArray(action?.search_view_id) ? action
|
|
601
|
+
Array.isArray(action?.search_view_id) ? action.search_view_id[0] : action.search_view_id,
|
|
601
602
|
"search"
|
|
602
603
|
]
|
|
603
|
-
]
|
|
604
|
-
|
|
604
|
+
];
|
|
605
|
+
}, [action]);
|
|
606
|
+
const view = useViewV2({
|
|
607
|
+
context: viewContext,
|
|
608
|
+
// cũng nên memo nếu thay đổi liên tục
|
|
609
|
+
views: memoViews,
|
|
610
|
+
model: action?.res_model ? String(action.res_model) : void 0
|
|
605
611
|
});
|
|
606
612
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
607
613
|
ReactContext.Provider,
|
|
@@ -726,7 +732,7 @@ var useGetSpecification = ({
|
|
|
726
732
|
|
|
727
733
|
// src/hooks/core/use-list-data.ts
|
|
728
734
|
var import_react14 = require("react");
|
|
729
|
-
var
|
|
735
|
+
var import_utils5 = require("@fctc/interface-logic/utils");
|
|
730
736
|
|
|
731
737
|
// src/hooks/utils/use-click-outside.ts
|
|
732
738
|
var import_react11 = require("react");
|
|
@@ -868,12 +874,12 @@ var useListData = ({
|
|
|
868
874
|
if (!viewData || !action || !context) {
|
|
869
875
|
return null;
|
|
870
876
|
}
|
|
871
|
-
const domainParse = type === "calendar" ? getDateRange(currentDate, mode) : action?.domain ? Array.isArray(action?.domain) ? [...action?.domain] : (0,
|
|
877
|
+
const domainParse = type === "calendar" ? getDateRange(currentDate, mode) : action?.domain ? Array.isArray(action?.domain) ? [...action?.domain] : (0, import_utils5.evalJSONDomain)(action?.domain, context) : [];
|
|
872
878
|
const limit = type === "calendar" ? 2500 : pageLimit;
|
|
873
879
|
const offset = debouncedPage * pageLimit;
|
|
874
880
|
const fields = type === "calendar" ? convertFieldsToArray(viewData?.views?.calendar?.fields) || [] : typeof groupByList === "object" ? groupByList?.fields : void 0;
|
|
875
881
|
const groupby = typeof groupByList === "object" ? [groupByList?.contexts?.[0]?.group_by] : [];
|
|
876
|
-
const sort = order ? order : viewData?.views?.list?.default_order ? (0,
|
|
882
|
+
const sort = order ? order : viewData?.views?.list?.default_order ? (0, import_utils5.formatSortingString)(viewData?.views?.list?.default_order) : "";
|
|
877
883
|
return {
|
|
878
884
|
model: action.res_model,
|
|
879
885
|
specification,
|
|
@@ -901,7 +907,7 @@ var useListData = ({
|
|
|
901
907
|
const list = useGetListData2(
|
|
902
908
|
listDataProps,
|
|
903
909
|
[listDataProps],
|
|
904
|
-
!!listDataProps && !!specification && !(0,
|
|
910
|
+
!!listDataProps && !!specification && !(0, import_utils5.isObjectEmpty)(specification)
|
|
905
911
|
);
|
|
906
912
|
return {
|
|
907
913
|
...list,
|
package/dist/hooks.mjs
CHANGED
|
@@ -465,16 +465,17 @@ var useViewV2 = ({
|
|
|
465
465
|
}) => {
|
|
466
466
|
const { useGetView: useGetView2 } = (0, provider_exports.useService)();
|
|
467
467
|
const viewParams = useMemo3(() => {
|
|
468
|
+
if (!model || !views) return void 0;
|
|
468
469
|
return {
|
|
469
470
|
model,
|
|
470
471
|
views,
|
|
471
472
|
context,
|
|
472
473
|
id
|
|
473
474
|
};
|
|
474
|
-
}, [model]);
|
|
475
|
+
}, [model, views, context, id]);
|
|
475
476
|
const view = useGetView2(
|
|
476
477
|
viewParams || {},
|
|
477
|
-
!!viewParams
|
|
478
|
+
!!viewParams && !(0, utils_exports.isObjectEmpty)(viewParams)
|
|
478
479
|
);
|
|
479
480
|
return {
|
|
480
481
|
...view,
|
|
@@ -571,18 +572,23 @@ var AppProvider = ({
|
|
|
571
572
|
{ ...(0, utils_exports.evalJSONContext)(action?.context) }
|
|
572
573
|
]);
|
|
573
574
|
}, [menuContext, action?.context, env?.context?.lang]);
|
|
574
|
-
const
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
...Array.isArray(action?.views) ? action
|
|
575
|
+
const memoViews = useMemo5(() => {
|
|
576
|
+
if (!action) return [];
|
|
577
|
+
return [
|
|
578
|
+
...Array.isArray(action?.views) ? action.views.map(
|
|
578
579
|
(view2) => view2[1] === "list" ? [view2[0], "list"] : view2
|
|
579
580
|
) : [],
|
|
580
581
|
[
|
|
581
|
-
Array.isArray(action?.search_view_id) ? action
|
|
582
|
+
Array.isArray(action?.search_view_id) ? action.search_view_id[0] : action.search_view_id,
|
|
582
583
|
"search"
|
|
583
584
|
]
|
|
584
|
-
]
|
|
585
|
-
|
|
585
|
+
];
|
|
586
|
+
}, [action]);
|
|
587
|
+
const view = useViewV2({
|
|
588
|
+
context: viewContext,
|
|
589
|
+
// cũng nên memo nếu thay đổi liên tục
|
|
590
|
+
views: memoViews,
|
|
591
|
+
model: action?.res_model ? String(action.res_model) : void 0
|
|
586
592
|
});
|
|
587
593
|
return /* @__PURE__ */ jsx(
|
|
588
594
|
ReactContext.Provider,
|
|
@@ -710,7 +716,7 @@ import { useMemo as useMemo7, useState as useState5 } from "react";
|
|
|
710
716
|
import {
|
|
711
717
|
evalJSONDomain,
|
|
712
718
|
formatSortingString,
|
|
713
|
-
isObjectEmpty as
|
|
719
|
+
isObjectEmpty as isObjectEmpty4
|
|
714
720
|
} from "@fctc/interface-logic/utils";
|
|
715
721
|
|
|
716
722
|
// src/hooks/utils/use-click-outside.ts
|
|
@@ -886,7 +892,7 @@ var useListData = ({
|
|
|
886
892
|
const list = useGetListData2(
|
|
887
893
|
listDataProps,
|
|
888
894
|
[listDataProps],
|
|
889
|
-
!!listDataProps && !!specification && !
|
|
895
|
+
!!listDataProps && !!specification && !isObjectEmpty4(specification)
|
|
890
896
|
);
|
|
891
897
|
return {
|
|
892
898
|
...list,
|
package/dist/index.js
CHANGED
|
@@ -55,7 +55,7 @@ var require_moment = __commonJS({
|
|
|
55
55
|
function hasOwnProp(a, b) {
|
|
56
56
|
return Object.prototype.hasOwnProperty.call(a, b);
|
|
57
57
|
}
|
|
58
|
-
function
|
|
58
|
+
function isObjectEmpty5(obj) {
|
|
59
59
|
if (Object.getOwnPropertyNames) {
|
|
60
60
|
return Object.getOwnPropertyNames(obj).length === 0;
|
|
61
61
|
} else {
|
|
@@ -2194,7 +2194,7 @@ var require_moment = __commonJS({
|
|
|
2194
2194
|
strict = locale2;
|
|
2195
2195
|
locale2 = void 0;
|
|
2196
2196
|
}
|
|
2197
|
-
if (isObject(input) &&
|
|
2197
|
+
if (isObject(input) && isObjectEmpty5(input) || isArray(input) && input.length === 0) {
|
|
2198
2198
|
input = void 0;
|
|
2199
2199
|
}
|
|
2200
2200
|
c._isAMomentObject = true;
|
|
@@ -2613,7 +2613,7 @@ var require_moment = __commonJS({
|
|
|
2613
2613
|
return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;
|
|
2614
2614
|
}
|
|
2615
2615
|
function isMomentInputObject(input) {
|
|
2616
|
-
var objectTest = isObject(input) && !
|
|
2616
|
+
var objectTest = isObject(input) && !isObjectEmpty5(input), propertyTest = false, properties = [
|
|
2617
2617
|
"years",
|
|
2618
2618
|
"year",
|
|
2619
2619
|
"y",
|
|
@@ -2655,7 +2655,7 @@ var require_moment = __commonJS({
|
|
|
2655
2655
|
return arrayTest && dataTypeTest;
|
|
2656
2656
|
}
|
|
2657
2657
|
function isCalendarSpec(input) {
|
|
2658
|
-
var objectTest = isObject(input) && !
|
|
2658
|
+
var objectTest = isObject(input) && !isObjectEmpty5(input), propertyTest = false, properties = [
|
|
2659
2659
|
"sameDay",
|
|
2660
2660
|
"nextDay",
|
|
2661
2661
|
"lastDay",
|
|
@@ -4534,16 +4534,17 @@ var useViewV2 = ({
|
|
|
4534
4534
|
}) => {
|
|
4535
4535
|
const { useGetView: useGetView2 } = (0, provider_exports.useService)();
|
|
4536
4536
|
const viewParams = (0, import_react6.useMemo)(() => {
|
|
4537
|
+
if (!model || !views) return void 0;
|
|
4537
4538
|
return {
|
|
4538
4539
|
model,
|
|
4539
4540
|
views,
|
|
4540
4541
|
context,
|
|
4541
4542
|
id
|
|
4542
4543
|
};
|
|
4543
|
-
}, [model]);
|
|
4544
|
+
}, [model, views, context, id]);
|
|
4544
4545
|
const view = useGetView2(
|
|
4545
4546
|
viewParams || {},
|
|
4546
|
-
!!viewParams
|
|
4547
|
+
!!viewParams && !(0, utils_exports.isObjectEmpty)(viewParams)
|
|
4547
4548
|
);
|
|
4548
4549
|
return {
|
|
4549
4550
|
...view,
|
|
@@ -4640,18 +4641,23 @@ var AppProvider = ({
|
|
|
4640
4641
|
{ ...(0, utils_exports.evalJSONContext)(action?.context) }
|
|
4641
4642
|
]);
|
|
4642
4643
|
}, [menuContext, action?.context, env?.context?.lang]);
|
|
4643
|
-
const
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
...Array.isArray(action?.views) ? action
|
|
4644
|
+
const memoViews = (0, import_react8.useMemo)(() => {
|
|
4645
|
+
if (!action) return [];
|
|
4646
|
+
return [
|
|
4647
|
+
...Array.isArray(action?.views) ? action.views.map(
|
|
4647
4648
|
(view2) => view2[1] === "list" ? [view2[0], "list"] : view2
|
|
4648
4649
|
) : [],
|
|
4649
4650
|
[
|
|
4650
|
-
Array.isArray(action?.search_view_id) ? action
|
|
4651
|
+
Array.isArray(action?.search_view_id) ? action.search_view_id[0] : action.search_view_id,
|
|
4651
4652
|
"search"
|
|
4652
4653
|
]
|
|
4653
|
-
]
|
|
4654
|
-
|
|
4654
|
+
];
|
|
4655
|
+
}, [action]);
|
|
4656
|
+
const view = useViewV2({
|
|
4657
|
+
context: viewContext,
|
|
4658
|
+
// cũng nên memo nếu thay đổi liên tục
|
|
4659
|
+
views: memoViews,
|
|
4660
|
+
model: action?.res_model ? String(action.res_model) : void 0
|
|
4655
4661
|
});
|
|
4656
4662
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
4657
4663
|
ReactContext.Provider,
|
|
@@ -4776,7 +4782,7 @@ var useGetSpecification = ({
|
|
|
4776
4782
|
|
|
4777
4783
|
// src/hooks/core/use-list-data.ts
|
|
4778
4784
|
var import_react14 = require("react");
|
|
4779
|
-
var
|
|
4785
|
+
var import_utils5 = require("@fctc/interface-logic/utils");
|
|
4780
4786
|
|
|
4781
4787
|
// src/hooks/utils/use-click-outside.ts
|
|
4782
4788
|
var import_react11 = require("react");
|
|
@@ -4918,12 +4924,12 @@ var useListData = ({
|
|
|
4918
4924
|
if (!viewData || !action || !context) {
|
|
4919
4925
|
return null;
|
|
4920
4926
|
}
|
|
4921
|
-
const domainParse = type === "calendar" ? getDateRange(currentDate, mode) : action?.domain ? Array.isArray(action?.domain) ? [...action?.domain] : (0,
|
|
4927
|
+
const domainParse = type === "calendar" ? getDateRange(currentDate, mode) : action?.domain ? Array.isArray(action?.domain) ? [...action?.domain] : (0, import_utils5.evalJSONDomain)(action?.domain, context) : [];
|
|
4922
4928
|
const limit = type === "calendar" ? 2500 : pageLimit;
|
|
4923
4929
|
const offset = debouncedPage * pageLimit;
|
|
4924
4930
|
const fields = type === "calendar" ? convertFieldsToArray(viewData?.views?.calendar?.fields) || [] : typeof groupByList === "object" ? groupByList?.fields : void 0;
|
|
4925
4931
|
const groupby = typeof groupByList === "object" ? [groupByList?.contexts?.[0]?.group_by] : [];
|
|
4926
|
-
const sort = order ? order : viewData?.views?.list?.default_order ? (0,
|
|
4932
|
+
const sort = order ? order : viewData?.views?.list?.default_order ? (0, import_utils5.formatSortingString)(viewData?.views?.list?.default_order) : "";
|
|
4927
4933
|
return {
|
|
4928
4934
|
model: action.res_model,
|
|
4929
4935
|
specification,
|
|
@@ -4951,7 +4957,7 @@ var useListData = ({
|
|
|
4951
4957
|
const list = useGetListData2(
|
|
4952
4958
|
listDataProps,
|
|
4953
4959
|
[listDataProps],
|
|
4954
|
-
!!listDataProps && !!specification && !(0,
|
|
4960
|
+
!!listDataProps && !!specification && !(0, import_utils5.isObjectEmpty)(specification)
|
|
4955
4961
|
);
|
|
4956
4962
|
return {
|
|
4957
4963
|
...list,
|
|
@@ -5458,18 +5464,18 @@ var many2oneFieldController = (props) => {
|
|
|
5458
5464
|
// src/widget/basic/many2one-button-field/controller.ts
|
|
5459
5465
|
var import_environment2 = require("@fctc/interface-logic/environment");
|
|
5460
5466
|
var import_hooks6 = require("@fctc/interface-logic/hooks");
|
|
5461
|
-
var
|
|
5467
|
+
var import_utils8 = require("@fctc/interface-logic/utils");
|
|
5462
5468
|
var many2oneButtonController = (props) => {
|
|
5463
5469
|
const { domain, methods, relation, service, xNode } = props;
|
|
5464
5470
|
const actionDataString = sessionStorage.getItem("actionData");
|
|
5465
5471
|
const env = (0, import_environment2.getEnv)();
|
|
5466
|
-
const domainObject = (0,
|
|
5472
|
+
const domainObject = (0, import_utils8.evalJSONDomain)(domain, methods?.getValues() || {});
|
|
5467
5473
|
const actionData = actionDataString && actionDataString !== "undefined" ? JSON.parse(actionDataString) : {};
|
|
5468
5474
|
const { data: dataOfSelection } = (0, import_hooks6.useGetSelection)({
|
|
5469
5475
|
data: {
|
|
5470
5476
|
model: relation ?? "",
|
|
5471
5477
|
domain: domainObject,
|
|
5472
|
-
context: { ...env.context, ...(0,
|
|
5478
|
+
context: { ...env.context, ...(0, import_utils8.evalJSONContext)(actionData?.context) }
|
|
5473
5479
|
},
|
|
5474
5480
|
queryKey: [`data_${relation}`, domainObject],
|
|
5475
5481
|
service,
|
|
@@ -5486,7 +5492,7 @@ var many2oneButtonController = (props) => {
|
|
|
5486
5492
|
|
|
5487
5493
|
// src/widget/basic/many2many-field/controller.ts
|
|
5488
5494
|
var import_react17 = require("react");
|
|
5489
|
-
var
|
|
5495
|
+
var import_utils9 = require("@fctc/interface-logic/utils");
|
|
5490
5496
|
var many2manyFieldController = (props) => {
|
|
5491
5497
|
const {
|
|
5492
5498
|
relation,
|
|
@@ -5544,10 +5550,10 @@ var many2manyFieldController = (props) => {
|
|
|
5544
5550
|
return null;
|
|
5545
5551
|
}, [modelInstance]);
|
|
5546
5552
|
const default_order = viewResponse && viewResponse?.views?.list?.default_order;
|
|
5547
|
-
const optionsObject = tab?.options ? (0,
|
|
5553
|
+
const optionsObject = tab?.options ? (0, import_utils9.evalJSONContext)(tab?.options) : (options ? (0, import_utils9.evalJSONContext)(options) : {}) || {};
|
|
5548
5554
|
const fetchData = async () => {
|
|
5549
5555
|
try {
|
|
5550
|
-
const domainParse = typeof domain === "string" ? (0,
|
|
5556
|
+
const domainParse = typeof domain === "string" ? (0, import_utils9.evalJSONDomain)(domain, contextObject) : Array.isArray(domain) ? domain : [];
|
|
5551
5557
|
setDomainMany2Many(domainParse);
|
|
5552
5558
|
setPage(0);
|
|
5553
5559
|
} catch (err) {
|
|
@@ -5571,7 +5577,7 @@ var many2manyFieldController = (props) => {
|
|
|
5571
5577
|
context: contextObject,
|
|
5572
5578
|
fields: groupByDomain?.fields,
|
|
5573
5579
|
groupby: [groupByDomain?.contexts[0]?.group_by],
|
|
5574
|
-
sort: order ? order : default_order ? (0,
|
|
5580
|
+
sort: order ? order : default_order ? (0, import_utils9.formatSortingString)(default_order) : ""
|
|
5575
5581
|
};
|
|
5576
5582
|
const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
|
|
5577
5583
|
const {
|
|
@@ -5635,7 +5641,7 @@ var many2manyFieldController = (props) => {
|
|
|
5635
5641
|
// src/widget/basic/many2many-tags-field/controller.ts
|
|
5636
5642
|
var import_react18 = require("react");
|
|
5637
5643
|
var import_constants2 = require("@fctc/interface-logic/constants");
|
|
5638
|
-
var
|
|
5644
|
+
var import_utils10 = require("@fctc/interface-logic/utils");
|
|
5639
5645
|
var many2manyTagsController = (props) => {
|
|
5640
5646
|
const {
|
|
5641
5647
|
relation,
|
|
@@ -5650,9 +5656,9 @@ var many2manyTagsController = (props) => {
|
|
|
5650
5656
|
const isUser = relation === "res.users" || relation === "res.partner";
|
|
5651
5657
|
const { env } = (0, provider_exports.useEnv)();
|
|
5652
5658
|
const { useGetSelection: useGetSelection3 } = (0, provider_exports.useService)();
|
|
5653
|
-
const addtionalFields = optionsFields ? (0,
|
|
5659
|
+
const addtionalFields = optionsFields ? (0, import_utils10.evalJSONContext)(optionsFields) : null;
|
|
5654
5660
|
const domainObject = (0, import_react18.useMemo)(
|
|
5655
|
-
() => (0,
|
|
5661
|
+
() => (0, import_utils10.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues || {}))),
|
|
5656
5662
|
[domain, formValues]
|
|
5657
5663
|
);
|
|
5658
5664
|
const data = {
|
|
@@ -5697,7 +5703,7 @@ var many2manyTagsController = (props) => {
|
|
|
5697
5703
|
|
|
5698
5704
|
// src/widget/basic/status-bar-field/controller.ts
|
|
5699
5705
|
var import_react19 = require("react");
|
|
5700
|
-
var
|
|
5706
|
+
var import_utils11 = require("@fctc/interface-logic/utils");
|
|
5701
5707
|
var durationController = (props) => {
|
|
5702
5708
|
const { relation, domain, formValues, name, id, model, onRefetch, enabled } = props;
|
|
5703
5709
|
const specification = {
|
|
@@ -5713,7 +5719,7 @@ var durationController = (props) => {
|
|
|
5713
5719
|
const listDataProps = {
|
|
5714
5720
|
model: relation,
|
|
5715
5721
|
specification,
|
|
5716
|
-
domain: (0,
|
|
5722
|
+
domain: (0, import_utils11.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues))),
|
|
5717
5723
|
limit: 10,
|
|
5718
5724
|
offset: 0,
|
|
5719
5725
|
fields: "",
|
|
@@ -5763,10 +5769,10 @@ var durationController = (props) => {
|
|
|
5763
5769
|
};
|
|
5764
5770
|
|
|
5765
5771
|
// src/widget/basic/priority-field/controller.ts
|
|
5766
|
-
var
|
|
5772
|
+
var import_utils12 = require("@fctc/interface-logic/utils");
|
|
5767
5773
|
var priorityFieldController = (props) => {
|
|
5768
5774
|
const { name, model, index, actionData, context, onChange, specification } = props;
|
|
5769
|
-
const _context = { ...(0,
|
|
5775
|
+
const _context = { ...(0, import_utils12.evalJSONContext)(actionData?.context) };
|
|
5770
5776
|
const contextObject = { ...context, ..._context };
|
|
5771
5777
|
const { useSave: useSave3 } = (0, provider_exports.useService)();
|
|
5772
5778
|
const { mutateAsync: fetchSave } = useSave3();
|
|
@@ -6734,12 +6740,12 @@ var dateFieldController = (props) => {
|
|
|
6734
6740
|
|
|
6735
6741
|
// src/widget/basic/copy-link-button/controller.ts
|
|
6736
6742
|
var import_react21 = require("react");
|
|
6737
|
-
var
|
|
6743
|
+
var import_utils13 = require("@fctc/interface-logic/utils");
|
|
6738
6744
|
var copyLinkButtonController = (props) => {
|
|
6739
6745
|
const { value, defaultValue } = props;
|
|
6740
6746
|
const [isCopied, setIsCopied] = (0, import_react21.useState)(false);
|
|
6741
6747
|
const handleCopyToClipboard = async (value2) => {
|
|
6742
|
-
await (0,
|
|
6748
|
+
await (0, import_utils13.copyTextToClipboard)(value2);
|
|
6743
6749
|
setIsCopied(true);
|
|
6744
6750
|
setTimeout(() => setIsCopied(false), 2e3);
|
|
6745
6751
|
};
|
|
@@ -6752,12 +6758,12 @@ var copyLinkButtonController = (props) => {
|
|
|
6752
6758
|
};
|
|
6753
6759
|
|
|
6754
6760
|
// src/widget/basic/color-field/color-controller.ts
|
|
6755
|
-
var
|
|
6761
|
+
var import_utils14 = require("@fctc/interface-logic/utils");
|
|
6756
6762
|
var colorFieldController = (props) => {
|
|
6757
6763
|
const { value, isForm, name, formValues, idForm, model, actionData } = props;
|
|
6758
6764
|
const { env } = (0, provider_exports.useEnv)();
|
|
6759
6765
|
const { useSave: useSave3 } = (0, provider_exports.useService)();
|
|
6760
|
-
const _context = { ...(0,
|
|
6766
|
+
const _context = { ...(0, import_utils14.evalJSONContext)(actionData?.context) || {} };
|
|
6761
6767
|
const contextObject = { ...env.context, ..._context };
|
|
6762
6768
|
const idDefault = isForm ? idForm : formValues?.id;
|
|
6763
6769
|
const { mutate: onSave } = useSave3();
|
|
@@ -6786,7 +6792,7 @@ var colorFieldController = (props) => {
|
|
|
6786
6792
|
|
|
6787
6793
|
// src/widget/basic/binary-field/controller.ts
|
|
6788
6794
|
var import_react22 = require("react");
|
|
6789
|
-
var
|
|
6795
|
+
var import_utils15 = require("@fctc/interface-logic/utils");
|
|
6790
6796
|
var binaryFieldController = (props) => {
|
|
6791
6797
|
const { name, methods, readonly = false, value } = props;
|
|
6792
6798
|
const inputId = (0, import_react22.useId)();
|
|
@@ -6843,11 +6849,11 @@ var binaryFieldController = (props) => {
|
|
|
6843
6849
|
};
|
|
6844
6850
|
const checkIsImageLink = (url) => {
|
|
6845
6851
|
const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i;
|
|
6846
|
-
return imageExtensions.test(url) || (0,
|
|
6852
|
+
return imageExtensions.test(url) || (0, import_utils15.isBase64Image)(url) || isBlobUrl(url);
|
|
6847
6853
|
};
|
|
6848
6854
|
const getImageBase64WithMimeType = (base64) => {
|
|
6849
6855
|
if (typeof base64 !== "string" || base64.length < 10) return null;
|
|
6850
|
-
if ((0,
|
|
6856
|
+
if ((0, import_utils15.isBase64Image)(base64)) return base64;
|
|
6851
6857
|
let mimeType = null;
|
|
6852
6858
|
if (base64.startsWith("iVBORw0KGgo")) mimeType = "image/png";
|
|
6853
6859
|
else if (base64.startsWith("/9j/")) mimeType = "image/jpeg";
|
|
@@ -6950,7 +6956,7 @@ var tableHeadController = (props) => {
|
|
|
6950
6956
|
|
|
6951
6957
|
// src/widget/advance/table/table-view/controller.ts
|
|
6952
6958
|
var import_react24 = require("react");
|
|
6953
|
-
var
|
|
6959
|
+
var import_utils17 = require("@fctc/interface-logic/utils");
|
|
6954
6960
|
var tableController = ({ data }) => {
|
|
6955
6961
|
const [rows, setRows] = (0, import_react24.useState)(null);
|
|
6956
6962
|
const [columns, setColumns] = (0, import_react24.useState)(null);
|
|
@@ -6988,7 +6994,7 @@ var tableController = ({ data }) => {
|
|
|
6988
6994
|
let cols = [];
|
|
6989
6995
|
try {
|
|
6990
6996
|
cols = mergeFields?.filter((item) => {
|
|
6991
|
-
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ?
|
|
6997
|
+
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.invisible) : false);
|
|
6992
6998
|
})?.map((field) => {
|
|
6993
6999
|
return {
|
|
6994
7000
|
name: field?.name,
|
|
@@ -7172,7 +7178,7 @@ var tableGroupController = (props) => {
|
|
|
7172
7178
|
|
|
7173
7179
|
// src/widget/advance/search/controller.ts
|
|
7174
7180
|
var import_constants3 = require("@fctc/interface-logic/constants");
|
|
7175
|
-
var
|
|
7181
|
+
var import_utils19 = require("@fctc/interface-logic/utils");
|
|
7176
7182
|
var import_moment2 = __toESM(require_moment());
|
|
7177
7183
|
var import_react26 = require("react");
|
|
7178
7184
|
var searchController = ({
|
|
@@ -7189,9 +7195,9 @@ var searchController = ({
|
|
|
7189
7195
|
const [selectedTags, setSelectedTags] = (0, import_react26.useState)(null);
|
|
7190
7196
|
const [searchString, setSearchString] = (0, import_react26.useState)("");
|
|
7191
7197
|
const [searchMap, setSearchMap] = (0, import_react26.useState)({});
|
|
7192
|
-
const actionContext = typeof context === "string" ? (0,
|
|
7198
|
+
const actionContext = typeof context === "string" ? (0, import_utils19.evalJSONContext)(context) : context;
|
|
7193
7199
|
const contextSearch = { ...env.context, ...actionContext };
|
|
7194
|
-
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0,
|
|
7200
|
+
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils19.evalJSONDomain)(domain, contextSearch) : [];
|
|
7195
7201
|
const clearSearch = () => {
|
|
7196
7202
|
setFilterBy([]);
|
|
7197
7203
|
setGroupBy([]);
|
|
@@ -7206,7 +7212,7 @@ var searchController = ({
|
|
|
7206
7212
|
const dataModel = viewData?.models?.[model];
|
|
7207
7213
|
const searchViews = viewData?.views?.search;
|
|
7208
7214
|
const searchByItems = searchViews?.search_by?.filter(
|
|
7209
|
-
(item) => !
|
|
7215
|
+
(item) => !import_utils19.domainHelper.matchDomains(contextSearch, item.invisible)
|
|
7210
7216
|
)?.map(
|
|
7211
7217
|
({ string, name, filter_domain, operator, widget }, index) => ({
|
|
7212
7218
|
dataIndex: index,
|
|
@@ -7219,10 +7225,10 @@ var searchController = ({
|
|
|
7219
7225
|
})
|
|
7220
7226
|
);
|
|
7221
7227
|
const filterByItems = searchViews?.filter_by.filter((item) => {
|
|
7222
|
-
return !
|
|
7228
|
+
return !import_utils19.domainHelper.matchDomains(contextSearch, item?.invisible);
|
|
7223
7229
|
})?.map((item) => ({ ...item, active: false }));
|
|
7224
7230
|
const groupByItems = searchViews?.group_by.filter(
|
|
7225
|
-
(item) => !
|
|
7231
|
+
(item) => !import_utils19.domainHelper.matchDomains(contextSearch, item?.invisible)
|
|
7226
7232
|
).map((item) => ({
|
|
7227
7233
|
...item,
|
|
7228
7234
|
string: item.string ?? viewData?.models?.[model]?.[item?.name?.split("group_by_")?.[1]]?.string
|
|
@@ -7299,14 +7305,14 @@ var searchController = ({
|
|
|
7299
7305
|
}
|
|
7300
7306
|
let valueDomainItem = value?.value;
|
|
7301
7307
|
if (value?.modelType === "date") {
|
|
7302
|
-
valueDomainItem = (0,
|
|
7308
|
+
valueDomainItem = (0, import_utils19.validateAndParseDate)(value?.value);
|
|
7303
7309
|
} else if (value?.modelType === "datetime") {
|
|
7304
7310
|
if (value?.operator === "<=" || value?.operator === "<") {
|
|
7305
|
-
const parsedDate = (0,
|
|
7311
|
+
const parsedDate = (0, import_utils19.validateAndParseDate)(value?.value, true);
|
|
7306
7312
|
const hasTime = (0, import_moment2.default)(value?.value).format("HH:mm:ss") !== "00:00:00";
|
|
7307
7313
|
valueDomainItem = hasTime ? (0, import_moment2.default)(parsedDate).format("YYYY-MM-DD HH:mm:ss") : (0, import_moment2.default)(parsedDate).add(1, "day").subtract(1, "second").format("YYYY-MM-DD HH:mm:ss");
|
|
7308
7314
|
} else {
|
|
7309
|
-
valueDomainItem = (0,
|
|
7315
|
+
valueDomainItem = (0, import_utils19.validateAndParseDate)(value?.value, true);
|
|
7310
7316
|
}
|
|
7311
7317
|
}
|
|
7312
7318
|
const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
|
|
@@ -7385,7 +7391,7 @@ var searchController = ({
|
|
|
7385
7391
|
}, [searchMap]);
|
|
7386
7392
|
const handleAddTagSearch = (tag) => {
|
|
7387
7393
|
const { domain: domain2, groupIndex, value, type, context: context2, dataIndex } = tag;
|
|
7388
|
-
const domainFormat = new
|
|
7394
|
+
const domainFormat = new import_utils19.domainHelper.Domain(domain2);
|
|
7389
7395
|
if (type === import_constants3.SearchType.FILTER) {
|
|
7390
7396
|
addSearchItems(`${import_constants3.SearchType.FILTER}_${groupIndex}`, {
|
|
7391
7397
|
...tag,
|
package/dist/index.mjs
CHANGED
|
@@ -59,7 +59,7 @@ var require_moment = __commonJS({
|
|
|
59
59
|
function hasOwnProp(a, b) {
|
|
60
60
|
return Object.prototype.hasOwnProperty.call(a, b);
|
|
61
61
|
}
|
|
62
|
-
function
|
|
62
|
+
function isObjectEmpty5(obj) {
|
|
63
63
|
if (Object.getOwnPropertyNames) {
|
|
64
64
|
return Object.getOwnPropertyNames(obj).length === 0;
|
|
65
65
|
} else {
|
|
@@ -2198,7 +2198,7 @@ var require_moment = __commonJS({
|
|
|
2198
2198
|
strict = locale2;
|
|
2199
2199
|
locale2 = void 0;
|
|
2200
2200
|
}
|
|
2201
|
-
if (isObject(input) &&
|
|
2201
|
+
if (isObject(input) && isObjectEmpty5(input) || isArray(input) && input.length === 0) {
|
|
2202
2202
|
input = void 0;
|
|
2203
2203
|
}
|
|
2204
2204
|
c._isAMomentObject = true;
|
|
@@ -2617,7 +2617,7 @@ var require_moment = __commonJS({
|
|
|
2617
2617
|
return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;
|
|
2618
2618
|
}
|
|
2619
2619
|
function isMomentInputObject(input) {
|
|
2620
|
-
var objectTest = isObject(input) && !
|
|
2620
|
+
var objectTest = isObject(input) && !isObjectEmpty5(input), propertyTest = false, properties = [
|
|
2621
2621
|
"years",
|
|
2622
2622
|
"year",
|
|
2623
2623
|
"y",
|
|
@@ -2659,7 +2659,7 @@ var require_moment = __commonJS({
|
|
|
2659
2659
|
return arrayTest && dataTypeTest;
|
|
2660
2660
|
}
|
|
2661
2661
|
function isCalendarSpec(input) {
|
|
2662
|
-
var objectTest = isObject(input) && !
|
|
2662
|
+
var objectTest = isObject(input) && !isObjectEmpty5(input), propertyTest = false, properties = [
|
|
2663
2663
|
"sameDay",
|
|
2664
2664
|
"nextDay",
|
|
2665
2665
|
"lastDay",
|
|
@@ -4609,16 +4609,17 @@ var useViewV2 = ({
|
|
|
4609
4609
|
}) => {
|
|
4610
4610
|
const { useGetView: useGetView2 } = (0, provider_exports.useService)();
|
|
4611
4611
|
const viewParams = useMemo3(() => {
|
|
4612
|
+
if (!model || !views) return void 0;
|
|
4612
4613
|
return {
|
|
4613
4614
|
model,
|
|
4614
4615
|
views,
|
|
4615
4616
|
context,
|
|
4616
4617
|
id
|
|
4617
4618
|
};
|
|
4618
|
-
}, [model]);
|
|
4619
|
+
}, [model, views, context, id]);
|
|
4619
4620
|
const view = useGetView2(
|
|
4620
4621
|
viewParams || {},
|
|
4621
|
-
!!viewParams
|
|
4622
|
+
!!viewParams && !(0, utils_exports.isObjectEmpty)(viewParams)
|
|
4622
4623
|
);
|
|
4623
4624
|
return {
|
|
4624
4625
|
...view,
|
|
@@ -4715,18 +4716,23 @@ var AppProvider = ({
|
|
|
4715
4716
|
{ ...(0, utils_exports.evalJSONContext)(action?.context) }
|
|
4716
4717
|
]);
|
|
4717
4718
|
}, [menuContext, action?.context, env?.context?.lang]);
|
|
4718
|
-
const
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
...Array.isArray(action?.views) ? action
|
|
4719
|
+
const memoViews = useMemo5(() => {
|
|
4720
|
+
if (!action) return [];
|
|
4721
|
+
return [
|
|
4722
|
+
...Array.isArray(action?.views) ? action.views.map(
|
|
4722
4723
|
(view2) => view2[1] === "list" ? [view2[0], "list"] : view2
|
|
4723
4724
|
) : [],
|
|
4724
4725
|
[
|
|
4725
|
-
Array.isArray(action?.search_view_id) ? action
|
|
4726
|
+
Array.isArray(action?.search_view_id) ? action.search_view_id[0] : action.search_view_id,
|
|
4726
4727
|
"search"
|
|
4727
4728
|
]
|
|
4728
|
-
]
|
|
4729
|
-
|
|
4729
|
+
];
|
|
4730
|
+
}, [action]);
|
|
4731
|
+
const view = useViewV2({
|
|
4732
|
+
context: viewContext,
|
|
4733
|
+
// cũng nên memo nếu thay đổi liên tục
|
|
4734
|
+
views: memoViews,
|
|
4735
|
+
model: action?.res_model ? String(action.res_model) : void 0
|
|
4730
4736
|
});
|
|
4731
4737
|
return /* @__PURE__ */ jsx(
|
|
4732
4738
|
ReactContext.Provider,
|
|
@@ -4854,7 +4860,7 @@ import { useMemo as useMemo7, useState as useState5 } from "react";
|
|
|
4854
4860
|
import {
|
|
4855
4861
|
evalJSONDomain,
|
|
4856
4862
|
formatSortingString,
|
|
4857
|
-
isObjectEmpty as
|
|
4863
|
+
isObjectEmpty as isObjectEmpty4
|
|
4858
4864
|
} from "@fctc/interface-logic/utils";
|
|
4859
4865
|
|
|
4860
4866
|
// src/hooks/utils/use-click-outside.ts
|
|
@@ -5030,7 +5036,7 @@ var useListData = ({
|
|
|
5030
5036
|
const list = useGetListData2(
|
|
5031
5037
|
listDataProps,
|
|
5032
5038
|
[listDataProps],
|
|
5033
|
-
!!listDataProps && !!specification && !
|
|
5039
|
+
!!listDataProps && !!specification && !isObjectEmpty4(specification)
|
|
5034
5040
|
);
|
|
5035
5041
|
return {
|
|
5036
5042
|
...list,
|
package/dist/widget.js
CHANGED
|
@@ -55,7 +55,7 @@ var require_moment = __commonJS({
|
|
|
55
55
|
function hasOwnProp(a, b) {
|
|
56
56
|
return Object.prototype.hasOwnProperty.call(a, b);
|
|
57
57
|
}
|
|
58
|
-
function
|
|
58
|
+
function isObjectEmpty5(obj) {
|
|
59
59
|
if (Object.getOwnPropertyNames) {
|
|
60
60
|
return Object.getOwnPropertyNames(obj).length === 0;
|
|
61
61
|
} else {
|
|
@@ -2194,7 +2194,7 @@ var require_moment = __commonJS({
|
|
|
2194
2194
|
strict = locale2;
|
|
2195
2195
|
locale2 = void 0;
|
|
2196
2196
|
}
|
|
2197
|
-
if (isObject(input) &&
|
|
2197
|
+
if (isObject(input) && isObjectEmpty5(input) || isArray(input) && input.length === 0) {
|
|
2198
2198
|
input = void 0;
|
|
2199
2199
|
}
|
|
2200
2200
|
c._isAMomentObject = true;
|
|
@@ -2613,7 +2613,7 @@ var require_moment = __commonJS({
|
|
|
2613
2613
|
return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;
|
|
2614
2614
|
}
|
|
2615
2615
|
function isMomentInputObject(input) {
|
|
2616
|
-
var objectTest = isObject(input) && !
|
|
2616
|
+
var objectTest = isObject(input) && !isObjectEmpty5(input), propertyTest = false, properties = [
|
|
2617
2617
|
"years",
|
|
2618
2618
|
"year",
|
|
2619
2619
|
"y",
|
|
@@ -2655,7 +2655,7 @@ var require_moment = __commonJS({
|
|
|
2655
2655
|
return arrayTest && dataTypeTest;
|
|
2656
2656
|
}
|
|
2657
2657
|
function isCalendarSpec(input) {
|
|
2658
|
-
var objectTest = isObject(input) && !
|
|
2658
|
+
var objectTest = isObject(input) && !isObjectEmpty5(input), propertyTest = false, properties = [
|
|
2659
2659
|
"sameDay",
|
|
2660
2660
|
"nextDay",
|
|
2661
2661
|
"lastDay",
|
|
@@ -4344,7 +4344,7 @@ var import_react11 = require("react");
|
|
|
4344
4344
|
|
|
4345
4345
|
// src/hooks/core/use-list-data.ts
|
|
4346
4346
|
var import_react15 = require("react");
|
|
4347
|
-
var
|
|
4347
|
+
var import_utils5 = require("@fctc/interface-logic/utils");
|
|
4348
4348
|
|
|
4349
4349
|
// src/hooks/utils/use-click-outside.ts
|
|
4350
4350
|
var import_react12 = require("react");
|
|
@@ -4615,18 +4615,18 @@ var many2oneFieldController = (props) => {
|
|
|
4615
4615
|
// src/widget/basic/many2one-button-field/controller.ts
|
|
4616
4616
|
var import_environment2 = require("@fctc/interface-logic/environment");
|
|
4617
4617
|
var import_hooks6 = require("@fctc/interface-logic/hooks");
|
|
4618
|
-
var
|
|
4618
|
+
var import_utils8 = require("@fctc/interface-logic/utils");
|
|
4619
4619
|
var many2oneButtonController = (props) => {
|
|
4620
4620
|
const { domain, methods, relation, service, xNode } = props;
|
|
4621
4621
|
const actionDataString = sessionStorage.getItem("actionData");
|
|
4622
4622
|
const env = (0, import_environment2.getEnv)();
|
|
4623
|
-
const domainObject = (0,
|
|
4623
|
+
const domainObject = (0, import_utils8.evalJSONDomain)(domain, methods?.getValues() || {});
|
|
4624
4624
|
const actionData = actionDataString && actionDataString !== "undefined" ? JSON.parse(actionDataString) : {};
|
|
4625
4625
|
const { data: dataOfSelection } = (0, import_hooks6.useGetSelection)({
|
|
4626
4626
|
data: {
|
|
4627
4627
|
model: relation ?? "",
|
|
4628
4628
|
domain: domainObject,
|
|
4629
|
-
context: { ...env.context, ...(0,
|
|
4629
|
+
context: { ...env.context, ...(0, import_utils8.evalJSONContext)(actionData?.context) }
|
|
4630
4630
|
},
|
|
4631
4631
|
queryKey: [`data_${relation}`, domainObject],
|
|
4632
4632
|
service,
|
|
@@ -4643,7 +4643,7 @@ var many2oneButtonController = (props) => {
|
|
|
4643
4643
|
|
|
4644
4644
|
// src/widget/basic/many2many-field/controller.ts
|
|
4645
4645
|
var import_react17 = require("react");
|
|
4646
|
-
var
|
|
4646
|
+
var import_utils9 = require("@fctc/interface-logic/utils");
|
|
4647
4647
|
var many2manyFieldController = (props) => {
|
|
4648
4648
|
const {
|
|
4649
4649
|
relation,
|
|
@@ -4701,10 +4701,10 @@ var many2manyFieldController = (props) => {
|
|
|
4701
4701
|
return null;
|
|
4702
4702
|
}, [modelInstance]);
|
|
4703
4703
|
const default_order = viewResponse && viewResponse?.views?.list?.default_order;
|
|
4704
|
-
const optionsObject = tab?.options ? (0,
|
|
4704
|
+
const optionsObject = tab?.options ? (0, import_utils9.evalJSONContext)(tab?.options) : (options ? (0, import_utils9.evalJSONContext)(options) : {}) || {};
|
|
4705
4705
|
const fetchData = async () => {
|
|
4706
4706
|
try {
|
|
4707
|
-
const domainParse = typeof domain === "string" ? (0,
|
|
4707
|
+
const domainParse = typeof domain === "string" ? (0, import_utils9.evalJSONDomain)(domain, contextObject) : Array.isArray(domain) ? domain : [];
|
|
4708
4708
|
setDomainMany2Many(domainParse);
|
|
4709
4709
|
setPage(0);
|
|
4710
4710
|
} catch (err) {
|
|
@@ -4728,7 +4728,7 @@ var many2manyFieldController = (props) => {
|
|
|
4728
4728
|
context: contextObject,
|
|
4729
4729
|
fields: groupByDomain?.fields,
|
|
4730
4730
|
groupby: [groupByDomain?.contexts[0]?.group_by],
|
|
4731
|
-
sort: order ? order : default_order ? (0,
|
|
4731
|
+
sort: order ? order : default_order ? (0, import_utils9.formatSortingString)(default_order) : ""
|
|
4732
4732
|
};
|
|
4733
4733
|
const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
|
|
4734
4734
|
const {
|
|
@@ -4792,7 +4792,7 @@ var many2manyFieldController = (props) => {
|
|
|
4792
4792
|
// src/widget/basic/many2many-tags-field/controller.ts
|
|
4793
4793
|
var import_react18 = require("react");
|
|
4794
4794
|
var import_constants2 = require("@fctc/interface-logic/constants");
|
|
4795
|
-
var
|
|
4795
|
+
var import_utils10 = require("@fctc/interface-logic/utils");
|
|
4796
4796
|
var many2manyTagsController = (props) => {
|
|
4797
4797
|
const {
|
|
4798
4798
|
relation,
|
|
@@ -4807,9 +4807,9 @@ var many2manyTagsController = (props) => {
|
|
|
4807
4807
|
const isUser = relation === "res.users" || relation === "res.partner";
|
|
4808
4808
|
const { env } = (0, provider_exports.useEnv)();
|
|
4809
4809
|
const { useGetSelection: useGetSelection3 } = (0, provider_exports.useService)();
|
|
4810
|
-
const addtionalFields = optionsFields ? (0,
|
|
4810
|
+
const addtionalFields = optionsFields ? (0, import_utils10.evalJSONContext)(optionsFields) : null;
|
|
4811
4811
|
const domainObject = (0, import_react18.useMemo)(
|
|
4812
|
-
() => (0,
|
|
4812
|
+
() => (0, import_utils10.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues || {}))),
|
|
4813
4813
|
[domain, formValues]
|
|
4814
4814
|
);
|
|
4815
4815
|
const data = {
|
|
@@ -4854,7 +4854,7 @@ var many2manyTagsController = (props) => {
|
|
|
4854
4854
|
|
|
4855
4855
|
// src/widget/basic/status-bar-field/controller.ts
|
|
4856
4856
|
var import_react19 = require("react");
|
|
4857
|
-
var
|
|
4857
|
+
var import_utils11 = require("@fctc/interface-logic/utils");
|
|
4858
4858
|
var durationController = (props) => {
|
|
4859
4859
|
const { relation, domain, formValues, name, id, model, onRefetch, enabled } = props;
|
|
4860
4860
|
const specification = {
|
|
@@ -4870,7 +4870,7 @@ var durationController = (props) => {
|
|
|
4870
4870
|
const listDataProps = {
|
|
4871
4871
|
model: relation,
|
|
4872
4872
|
specification,
|
|
4873
|
-
domain: (0,
|
|
4873
|
+
domain: (0, import_utils11.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues))),
|
|
4874
4874
|
limit: 10,
|
|
4875
4875
|
offset: 0,
|
|
4876
4876
|
fields: "",
|
|
@@ -4920,10 +4920,10 @@ var durationController = (props) => {
|
|
|
4920
4920
|
};
|
|
4921
4921
|
|
|
4922
4922
|
// src/widget/basic/priority-field/controller.ts
|
|
4923
|
-
var
|
|
4923
|
+
var import_utils12 = require("@fctc/interface-logic/utils");
|
|
4924
4924
|
var priorityFieldController = (props) => {
|
|
4925
4925
|
const { name, model, index, actionData, context, onChange, specification } = props;
|
|
4926
|
-
const _context = { ...(0,
|
|
4926
|
+
const _context = { ...(0, import_utils12.evalJSONContext)(actionData?.context) };
|
|
4927
4927
|
const contextObject = { ...context, ..._context };
|
|
4928
4928
|
const { useSave: useSave3 } = (0, provider_exports.useService)();
|
|
4929
4929
|
const { mutateAsync: fetchSave } = useSave3();
|
|
@@ -5891,12 +5891,12 @@ var dateFieldController = (props) => {
|
|
|
5891
5891
|
|
|
5892
5892
|
// src/widget/basic/copy-link-button/controller.ts
|
|
5893
5893
|
var import_react21 = require("react");
|
|
5894
|
-
var
|
|
5894
|
+
var import_utils13 = require("@fctc/interface-logic/utils");
|
|
5895
5895
|
var copyLinkButtonController = (props) => {
|
|
5896
5896
|
const { value, defaultValue } = props;
|
|
5897
5897
|
const [isCopied, setIsCopied] = (0, import_react21.useState)(false);
|
|
5898
5898
|
const handleCopyToClipboard = async (value2) => {
|
|
5899
|
-
await (0,
|
|
5899
|
+
await (0, import_utils13.copyTextToClipboard)(value2);
|
|
5900
5900
|
setIsCopied(true);
|
|
5901
5901
|
setTimeout(() => setIsCopied(false), 2e3);
|
|
5902
5902
|
};
|
|
@@ -5909,12 +5909,12 @@ var copyLinkButtonController = (props) => {
|
|
|
5909
5909
|
};
|
|
5910
5910
|
|
|
5911
5911
|
// src/widget/basic/color-field/color-controller.ts
|
|
5912
|
-
var
|
|
5912
|
+
var import_utils14 = require("@fctc/interface-logic/utils");
|
|
5913
5913
|
var colorFieldController = (props) => {
|
|
5914
5914
|
const { value, isForm, name, formValues, idForm, model, actionData } = props;
|
|
5915
5915
|
const { env } = (0, provider_exports.useEnv)();
|
|
5916
5916
|
const { useSave: useSave3 } = (0, provider_exports.useService)();
|
|
5917
|
-
const _context = { ...(0,
|
|
5917
|
+
const _context = { ...(0, import_utils14.evalJSONContext)(actionData?.context) || {} };
|
|
5918
5918
|
const contextObject = { ...env.context, ..._context };
|
|
5919
5919
|
const idDefault = isForm ? idForm : formValues?.id;
|
|
5920
5920
|
const { mutate: onSave } = useSave3();
|
|
@@ -5943,7 +5943,7 @@ var colorFieldController = (props) => {
|
|
|
5943
5943
|
|
|
5944
5944
|
// src/widget/basic/binary-field/controller.ts
|
|
5945
5945
|
var import_react22 = require("react");
|
|
5946
|
-
var
|
|
5946
|
+
var import_utils15 = require("@fctc/interface-logic/utils");
|
|
5947
5947
|
var binaryFieldController = (props) => {
|
|
5948
5948
|
const { name, methods, readonly = false, value } = props;
|
|
5949
5949
|
const inputId = (0, import_react22.useId)();
|
|
@@ -6000,11 +6000,11 @@ var binaryFieldController = (props) => {
|
|
|
6000
6000
|
};
|
|
6001
6001
|
const checkIsImageLink = (url) => {
|
|
6002
6002
|
const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i;
|
|
6003
|
-
return imageExtensions.test(url) || (0,
|
|
6003
|
+
return imageExtensions.test(url) || (0, import_utils15.isBase64Image)(url) || isBlobUrl(url);
|
|
6004
6004
|
};
|
|
6005
6005
|
const getImageBase64WithMimeType = (base64) => {
|
|
6006
6006
|
if (typeof base64 !== "string" || base64.length < 10) return null;
|
|
6007
|
-
if ((0,
|
|
6007
|
+
if ((0, import_utils15.isBase64Image)(base64)) return base64;
|
|
6008
6008
|
let mimeType = null;
|
|
6009
6009
|
if (base64.startsWith("iVBORw0KGgo")) mimeType = "image/png";
|
|
6010
6010
|
else if (base64.startsWith("/9j/")) mimeType = "image/jpeg";
|
|
@@ -6107,7 +6107,7 @@ var tableHeadController = (props) => {
|
|
|
6107
6107
|
|
|
6108
6108
|
// src/widget/advance/table/table-view/controller.ts
|
|
6109
6109
|
var import_react24 = require("react");
|
|
6110
|
-
var
|
|
6110
|
+
var import_utils17 = require("@fctc/interface-logic/utils");
|
|
6111
6111
|
var tableController = ({ data }) => {
|
|
6112
6112
|
const [rows, setRows] = (0, import_react24.useState)(null);
|
|
6113
6113
|
const [columns, setColumns] = (0, import_react24.useState)(null);
|
|
@@ -6145,7 +6145,7 @@ var tableController = ({ data }) => {
|
|
|
6145
6145
|
let cols = [];
|
|
6146
6146
|
try {
|
|
6147
6147
|
cols = mergeFields?.filter((item) => {
|
|
6148
|
-
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ?
|
|
6148
|
+
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.invisible) : false);
|
|
6149
6149
|
})?.map((field) => {
|
|
6150
6150
|
return {
|
|
6151
6151
|
name: field?.name,
|
|
@@ -6329,7 +6329,7 @@ var tableGroupController = (props) => {
|
|
|
6329
6329
|
|
|
6330
6330
|
// src/widget/advance/search/controller.ts
|
|
6331
6331
|
var import_constants3 = require("@fctc/interface-logic/constants");
|
|
6332
|
-
var
|
|
6332
|
+
var import_utils19 = require("@fctc/interface-logic/utils");
|
|
6333
6333
|
var import_moment2 = __toESM(require_moment());
|
|
6334
6334
|
var import_react26 = require("react");
|
|
6335
6335
|
var searchController = ({
|
|
@@ -6346,9 +6346,9 @@ var searchController = ({
|
|
|
6346
6346
|
const [selectedTags, setSelectedTags] = (0, import_react26.useState)(null);
|
|
6347
6347
|
const [searchString, setSearchString] = (0, import_react26.useState)("");
|
|
6348
6348
|
const [searchMap, setSearchMap] = (0, import_react26.useState)({});
|
|
6349
|
-
const actionContext = typeof context === "string" ? (0,
|
|
6349
|
+
const actionContext = typeof context === "string" ? (0, import_utils19.evalJSONContext)(context) : context;
|
|
6350
6350
|
const contextSearch = { ...env.context, ...actionContext };
|
|
6351
|
-
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0,
|
|
6351
|
+
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils19.evalJSONDomain)(domain, contextSearch) : [];
|
|
6352
6352
|
const clearSearch = () => {
|
|
6353
6353
|
setFilterBy([]);
|
|
6354
6354
|
setGroupBy([]);
|
|
@@ -6363,7 +6363,7 @@ var searchController = ({
|
|
|
6363
6363
|
const dataModel = viewData?.models?.[model];
|
|
6364
6364
|
const searchViews = viewData?.views?.search;
|
|
6365
6365
|
const searchByItems = searchViews?.search_by?.filter(
|
|
6366
|
-
(item) => !
|
|
6366
|
+
(item) => !import_utils19.domainHelper.matchDomains(contextSearch, item.invisible)
|
|
6367
6367
|
)?.map(
|
|
6368
6368
|
({ string, name, filter_domain, operator, widget }, index) => ({
|
|
6369
6369
|
dataIndex: index,
|
|
@@ -6376,10 +6376,10 @@ var searchController = ({
|
|
|
6376
6376
|
})
|
|
6377
6377
|
);
|
|
6378
6378
|
const filterByItems = searchViews?.filter_by.filter((item) => {
|
|
6379
|
-
return !
|
|
6379
|
+
return !import_utils19.domainHelper.matchDomains(contextSearch, item?.invisible);
|
|
6380
6380
|
})?.map((item) => ({ ...item, active: false }));
|
|
6381
6381
|
const groupByItems = searchViews?.group_by.filter(
|
|
6382
|
-
(item) => !
|
|
6382
|
+
(item) => !import_utils19.domainHelper.matchDomains(contextSearch, item?.invisible)
|
|
6383
6383
|
).map((item) => ({
|
|
6384
6384
|
...item,
|
|
6385
6385
|
string: item.string ?? viewData?.models?.[model]?.[item?.name?.split("group_by_")?.[1]]?.string
|
|
@@ -6456,14 +6456,14 @@ var searchController = ({
|
|
|
6456
6456
|
}
|
|
6457
6457
|
let valueDomainItem = value?.value;
|
|
6458
6458
|
if (value?.modelType === "date") {
|
|
6459
|
-
valueDomainItem = (0,
|
|
6459
|
+
valueDomainItem = (0, import_utils19.validateAndParseDate)(value?.value);
|
|
6460
6460
|
} else if (value?.modelType === "datetime") {
|
|
6461
6461
|
if (value?.operator === "<=" || value?.operator === "<") {
|
|
6462
|
-
const parsedDate = (0,
|
|
6462
|
+
const parsedDate = (0, import_utils19.validateAndParseDate)(value?.value, true);
|
|
6463
6463
|
const hasTime = (0, import_moment2.default)(value?.value).format("HH:mm:ss") !== "00:00:00";
|
|
6464
6464
|
valueDomainItem = hasTime ? (0, import_moment2.default)(parsedDate).format("YYYY-MM-DD HH:mm:ss") : (0, import_moment2.default)(parsedDate).add(1, "day").subtract(1, "second").format("YYYY-MM-DD HH:mm:ss");
|
|
6465
6465
|
} else {
|
|
6466
|
-
valueDomainItem = (0,
|
|
6466
|
+
valueDomainItem = (0, import_utils19.validateAndParseDate)(value?.value, true);
|
|
6467
6467
|
}
|
|
6468
6468
|
}
|
|
6469
6469
|
const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
|
|
@@ -6542,7 +6542,7 @@ var searchController = ({
|
|
|
6542
6542
|
}, [searchMap]);
|
|
6543
6543
|
const handleAddTagSearch = (tag) => {
|
|
6544
6544
|
const { domain: domain2, groupIndex, value, type, context: context2, dataIndex } = tag;
|
|
6545
|
-
const domainFormat = new
|
|
6545
|
+
const domainFormat = new import_utils19.domainHelper.Domain(domain2);
|
|
6546
6546
|
if (type === import_constants3.SearchType.FILTER) {
|
|
6547
6547
|
addSearchItems(`${import_constants3.SearchType.FILTER}_${groupIndex}`, {
|
|
6548
6548
|
...tag,
|
package/dist/widget.mjs
CHANGED
|
@@ -59,7 +59,7 @@ var require_moment = __commonJS({
|
|
|
59
59
|
function hasOwnProp(a, b) {
|
|
60
60
|
return Object.prototype.hasOwnProperty.call(a, b);
|
|
61
61
|
}
|
|
62
|
-
function
|
|
62
|
+
function isObjectEmpty5(obj) {
|
|
63
63
|
if (Object.getOwnPropertyNames) {
|
|
64
64
|
return Object.getOwnPropertyNames(obj).length === 0;
|
|
65
65
|
} else {
|
|
@@ -2198,7 +2198,7 @@ var require_moment = __commonJS({
|
|
|
2198
2198
|
strict = locale2;
|
|
2199
2199
|
locale2 = void 0;
|
|
2200
2200
|
}
|
|
2201
|
-
if (isObject(input) &&
|
|
2201
|
+
if (isObject(input) && isObjectEmpty5(input) || isArray(input) && input.length === 0) {
|
|
2202
2202
|
input = void 0;
|
|
2203
2203
|
}
|
|
2204
2204
|
c._isAMomentObject = true;
|
|
@@ -2617,7 +2617,7 @@ var require_moment = __commonJS({
|
|
|
2617
2617
|
return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;
|
|
2618
2618
|
}
|
|
2619
2619
|
function isMomentInputObject(input) {
|
|
2620
|
-
var objectTest = isObject(input) && !
|
|
2620
|
+
var objectTest = isObject(input) && !isObjectEmpty5(input), propertyTest = false, properties = [
|
|
2621
2621
|
"years",
|
|
2622
2622
|
"year",
|
|
2623
2623
|
"y",
|
|
@@ -2659,7 +2659,7 @@ var require_moment = __commonJS({
|
|
|
2659
2659
|
return arrayTest && dataTypeTest;
|
|
2660
2660
|
}
|
|
2661
2661
|
function isCalendarSpec(input) {
|
|
2662
|
-
var objectTest = isObject(input) && !
|
|
2662
|
+
var objectTest = isObject(input) && !isObjectEmpty5(input), propertyTest = false, properties = [
|
|
2663
2663
|
"sameDay",
|
|
2664
2664
|
"nextDay",
|
|
2665
2665
|
"lastDay",
|
|
@@ -4400,7 +4400,7 @@ import { useMemo as useMemo7, useState as useState6 } from "react";
|
|
|
4400
4400
|
import {
|
|
4401
4401
|
evalJSONDomain,
|
|
4402
4402
|
formatSortingString,
|
|
4403
|
-
isObjectEmpty as
|
|
4403
|
+
isObjectEmpty as isObjectEmpty4
|
|
4404
4404
|
} from "@fctc/interface-logic/utils";
|
|
4405
4405
|
|
|
4406
4406
|
// src/hooks/utils/use-click-outside.ts
|