@fctc/widget-logic 2.7.1 → 2.7.3
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.d.mts +3 -4
- package/dist/hooks.d.ts +3 -4
- package/dist/hooks.js +113 -117
- package/dist/hooks.mjs +108 -112
- package/dist/index.js +159 -181
- package/dist/index.mjs +131 -153
- package/dist/widget.d.mts +0 -1
- package/dist/widget.d.ts +0 -1
- package/dist/widget.js +89 -79
- package/dist/widget.mjs +63 -53
- package/package.json +1 -1
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",
|
|
@@ -4164,7 +4164,7 @@ var import_hooks2 = require("@fctc/interface-logic/hooks");
|
|
|
4164
4164
|
var import_react8 = require("react");
|
|
4165
4165
|
|
|
4166
4166
|
// src/hooks/core/use-menu.ts
|
|
4167
|
-
var
|
|
4167
|
+
var import_react3 = require("react");
|
|
4168
4168
|
|
|
4169
4169
|
// src/hooks/core/use-call-action.ts
|
|
4170
4170
|
var import_react = require("react");
|
|
@@ -4212,92 +4212,6 @@ var useCallAction = () => {
|
|
|
4212
4212
|
return [actionData, callAction];
|
|
4213
4213
|
};
|
|
4214
4214
|
|
|
4215
|
-
// src/hooks/core/use-menu.ts
|
|
4216
|
-
var useMenu = ({
|
|
4217
|
-
context,
|
|
4218
|
-
specification
|
|
4219
|
-
}) => {
|
|
4220
|
-
const { env } = (0, provider_exports.useEnv)();
|
|
4221
|
-
const { useGetMenu: useGetMenu2 } = (0, provider_exports.useService)();
|
|
4222
|
-
const [action, callAction] = useCallAction();
|
|
4223
|
-
const menuData = useGetMenu2(
|
|
4224
|
-
context,
|
|
4225
|
-
specification,
|
|
4226
|
-
!!context && Object.keys(context).length > 0
|
|
4227
|
-
);
|
|
4228
|
-
const [menuId, setMenuId] = (0, import_react2.useState)(void 0);
|
|
4229
|
-
const configedIconData = (0, import_react2.useMemo)(() => {
|
|
4230
|
-
const data = menuData.data;
|
|
4231
|
-
return data?.map((item) => {
|
|
4232
|
-
return {
|
|
4233
|
-
...item,
|
|
4234
|
-
child_id: item?.child_id?.map((child) => {
|
|
4235
|
-
return {
|
|
4236
|
-
...child,
|
|
4237
|
-
url_icon: env?.envFile?.VITE_APP_DOMAIN + "/" + child.url_icon
|
|
4238
|
-
};
|
|
4239
|
-
}) ?? [],
|
|
4240
|
-
url_icon: env?.envFile?.VITE_APP_DOMAIN + "/" + item.url_icon
|
|
4241
|
-
};
|
|
4242
|
-
});
|
|
4243
|
-
}, [menuData.data, env?.envFile?.VITE_APP_DOMAIN]);
|
|
4244
|
-
const handleChangeMenu = async ({ menu }) => {
|
|
4245
|
-
const aidMenu = menu?.action?.id?.id;
|
|
4246
|
-
if (menu) {
|
|
4247
|
-
setMenuId(menu.id?.toString() ?? "");
|
|
4248
|
-
}
|
|
4249
|
-
if (aidMenu) {
|
|
4250
|
-
const actionResponse = await callAction({
|
|
4251
|
-
aid: Number(aidMenu)
|
|
4252
|
-
});
|
|
4253
|
-
return actionResponse;
|
|
4254
|
-
}
|
|
4255
|
-
};
|
|
4256
|
-
return {
|
|
4257
|
-
...menuData,
|
|
4258
|
-
data: configedIconData,
|
|
4259
|
-
action: { handleChangeMenu },
|
|
4260
|
-
state: { menuId, action },
|
|
4261
|
-
context,
|
|
4262
|
-
isLoading: menuData.isLoading,
|
|
4263
|
-
isError: menuData.isError,
|
|
4264
|
-
error: menuData.error,
|
|
4265
|
-
refetch: menuData.refetch
|
|
4266
|
-
};
|
|
4267
|
-
};
|
|
4268
|
-
|
|
4269
|
-
// src/hooks/core/use-detail.ts
|
|
4270
|
-
var import_react_query = require("@tanstack/react-query");
|
|
4271
|
-
var import_react3 = require("react");
|
|
4272
|
-
var useDetail = (sub) => {
|
|
4273
|
-
const { setUserInfo, env } = (0, provider_exports.useEnv)();
|
|
4274
|
-
const { useGetDetail: useGetDetail2 } = (0, provider_exports.useService)();
|
|
4275
|
-
const fetchGetDetail = useGetDetail2();
|
|
4276
|
-
const userDetailQuery = (0, import_react_query.useQuery)({
|
|
4277
|
-
queryKey: ["userDetailQuery", sub],
|
|
4278
|
-
queryFn: () => {
|
|
4279
|
-
return fetchGetDetail.mutateAsync({
|
|
4280
|
-
model: "res.users",
|
|
4281
|
-
ids: [sub],
|
|
4282
|
-
specification: { image_256: {} }
|
|
4283
|
-
});
|
|
4284
|
-
},
|
|
4285
|
-
enabled: !!sub
|
|
4286
|
-
});
|
|
4287
|
-
(0, import_react3.useEffect)(() => {
|
|
4288
|
-
if (userDetailQuery.data) {
|
|
4289
|
-
const userPicture = userDetailQuery.data;
|
|
4290
|
-
setUserInfo({ ...env?.user, image: userPicture?.[0]?.image_256 });
|
|
4291
|
-
}
|
|
4292
|
-
}, [userDetailQuery.isFetched]);
|
|
4293
|
-
return { ...userDetailQuery };
|
|
4294
|
-
};
|
|
4295
|
-
|
|
4296
|
-
// src/hooks/core/use-profile.ts
|
|
4297
|
-
var import_react_query2 = require("@tanstack/react-query");
|
|
4298
|
-
var import_react5 = require("react");
|
|
4299
|
-
var import_react_i18next = require("react-i18next");
|
|
4300
|
-
|
|
4301
4215
|
// src/utils.ts
|
|
4302
4216
|
var utils_exports = {};
|
|
4303
4217
|
__export(utils_exports, {
|
|
@@ -4319,7 +4233,7 @@ var languages = [
|
|
|
4319
4233
|
];
|
|
4320
4234
|
|
|
4321
4235
|
// src/utils/function.ts
|
|
4322
|
-
var
|
|
4236
|
+
var import_react2 = require("react");
|
|
4323
4237
|
var countSum = (data, field) => {
|
|
4324
4238
|
if (!data || !field) return 0;
|
|
4325
4239
|
return data.reduce(
|
|
@@ -4440,7 +4354,7 @@ var STORAGES = {
|
|
|
4440
4354
|
USER_INFO: "USER_INFO"
|
|
4441
4355
|
};
|
|
4442
4356
|
function useAsyncState(initialValue = [true, null]) {
|
|
4443
|
-
return (0,
|
|
4357
|
+
return (0, import_react2.useReducer)(
|
|
4444
4358
|
(_state, action = null) => [false, action],
|
|
4445
4359
|
initialValue
|
|
4446
4360
|
);
|
|
@@ -4458,7 +4372,7 @@ async function setStorageItemAsync(key, value) {
|
|
|
4458
4372
|
}
|
|
4459
4373
|
function useStorageState(key) {
|
|
4460
4374
|
const [state, setState] = useAsyncState();
|
|
4461
|
-
(0,
|
|
4375
|
+
(0, import_react2.useEffect)(() => {
|
|
4462
4376
|
try {
|
|
4463
4377
|
const storedValue = localStorage.getItem(key);
|
|
4464
4378
|
setState(storedValue);
|
|
@@ -4466,7 +4380,7 @@ function useStorageState(key) {
|
|
|
4466
4380
|
console.error("Local storage is unavailable:", e);
|
|
4467
4381
|
}
|
|
4468
4382
|
}, [key]);
|
|
4469
|
-
const setValue = (0,
|
|
4383
|
+
const setValue = (0, import_react2.useCallback)(
|
|
4470
4384
|
(value) => {
|
|
4471
4385
|
setState(value);
|
|
4472
4386
|
setStorageItemAsync(key, value);
|
|
@@ -4479,7 +4393,91 @@ function useStorageState(key) {
|
|
|
4479
4393
|
// src/utils.ts
|
|
4480
4394
|
__reExport(utils_exports, require("@fctc/interface-logic/utils"));
|
|
4481
4395
|
|
|
4396
|
+
// src/hooks/core/use-menu.ts
|
|
4397
|
+
var useMenu = ({
|
|
4398
|
+
context,
|
|
4399
|
+
specification
|
|
4400
|
+
}) => {
|
|
4401
|
+
const { env } = (0, provider_exports.useEnv)();
|
|
4402
|
+
const { useGetMenu: useGetMenu2 } = (0, provider_exports.useService)();
|
|
4403
|
+
const [action, callAction] = useCallAction();
|
|
4404
|
+
const menuData = useGetMenu2(
|
|
4405
|
+
context,
|
|
4406
|
+
specification,
|
|
4407
|
+
!!context && !(0, utils_exports.isObjectEmpty)(context)
|
|
4408
|
+
);
|
|
4409
|
+
const [menuId, setMenuId] = (0, import_react3.useState)(void 0);
|
|
4410
|
+
const configedIconData = (0, import_react3.useMemo)(() => {
|
|
4411
|
+
const data = menuData.data;
|
|
4412
|
+
return data?.map((item) => {
|
|
4413
|
+
return {
|
|
4414
|
+
...item,
|
|
4415
|
+
child_id: item?.child_id?.map((child) => {
|
|
4416
|
+
return {
|
|
4417
|
+
...child,
|
|
4418
|
+
url_icon: env?.envFile?.VITE_APP_DOMAIN + "/" + child.url_icon
|
|
4419
|
+
};
|
|
4420
|
+
}) ?? [],
|
|
4421
|
+
url_icon: env?.envFile?.VITE_APP_DOMAIN + "/" + item.url_icon
|
|
4422
|
+
};
|
|
4423
|
+
});
|
|
4424
|
+
}, [menuData.data, env?.envFile?.VITE_APP_DOMAIN]);
|
|
4425
|
+
const handleChangeMenu = async ({ menu }) => {
|
|
4426
|
+
const aidMenu = menu?.action?.id?.id;
|
|
4427
|
+
if (menu) {
|
|
4428
|
+
setMenuId(menu.id?.toString() ?? "");
|
|
4429
|
+
}
|
|
4430
|
+
if (aidMenu) {
|
|
4431
|
+
const actionResponse = await callAction({
|
|
4432
|
+
aid: Number(aidMenu)
|
|
4433
|
+
});
|
|
4434
|
+
return actionResponse;
|
|
4435
|
+
}
|
|
4436
|
+
};
|
|
4437
|
+
return {
|
|
4438
|
+
...menuData,
|
|
4439
|
+
data: configedIconData,
|
|
4440
|
+
action: { handleChangeMenu },
|
|
4441
|
+
state: { menuId, action },
|
|
4442
|
+
context,
|
|
4443
|
+
isLoading: menuData.isLoading,
|
|
4444
|
+
isError: menuData.isError,
|
|
4445
|
+
error: menuData.error,
|
|
4446
|
+
refetch: menuData.refetch
|
|
4447
|
+
};
|
|
4448
|
+
};
|
|
4449
|
+
|
|
4450
|
+
// src/hooks/core/use-detail.ts
|
|
4451
|
+
var import_react_query = require("@tanstack/react-query");
|
|
4452
|
+
var import_react4 = require("react");
|
|
4453
|
+
var useDetail = (sub) => {
|
|
4454
|
+
const { setUserInfo, env } = (0, provider_exports.useEnv)();
|
|
4455
|
+
const { useGetDetail: useGetDetail2 } = (0, provider_exports.useService)();
|
|
4456
|
+
const fetchGetDetail = useGetDetail2();
|
|
4457
|
+
const userDetailQuery = (0, import_react_query.useQuery)({
|
|
4458
|
+
queryKey: ["userDetailQuery", sub],
|
|
4459
|
+
queryFn: () => {
|
|
4460
|
+
return fetchGetDetail.mutateAsync({
|
|
4461
|
+
model: "res.users",
|
|
4462
|
+
ids: [sub],
|
|
4463
|
+
specification: { image_256: {} }
|
|
4464
|
+
});
|
|
4465
|
+
},
|
|
4466
|
+
enabled: !!sub
|
|
4467
|
+
});
|
|
4468
|
+
(0, import_react4.useEffect)(() => {
|
|
4469
|
+
if (userDetailQuery.data) {
|
|
4470
|
+
const userPicture = userDetailQuery.data;
|
|
4471
|
+
setUserInfo({ ...env?.user, image: userPicture?.[0]?.image_256 });
|
|
4472
|
+
}
|
|
4473
|
+
}, [userDetailQuery.isFetched]);
|
|
4474
|
+
return { ...userDetailQuery };
|
|
4475
|
+
};
|
|
4476
|
+
|
|
4482
4477
|
// src/hooks/core/use-profile.ts
|
|
4478
|
+
var import_react_query2 = require("@tanstack/react-query");
|
|
4479
|
+
var import_react5 = require("react");
|
|
4480
|
+
var import_react_i18next = require("react-i18next");
|
|
4483
4481
|
var useProfile = () => {
|
|
4484
4482
|
const { setUid, setLang, setUserInfo, env } = (0, provider_exports.useEnv)();
|
|
4485
4483
|
const { useGetProfile: useGetProfile2 } = (0, provider_exports.useService)();
|
|
@@ -4527,21 +4525,31 @@ var useUser = () => {
|
|
|
4527
4525
|
// src/hooks/core/use-view-v2.ts
|
|
4528
4526
|
var import_react6 = require("react");
|
|
4529
4527
|
var useViewV2 = ({
|
|
4530
|
-
|
|
4528
|
+
action,
|
|
4531
4529
|
context,
|
|
4532
|
-
|
|
4533
|
-
model
|
|
4530
|
+
aid
|
|
4534
4531
|
}) => {
|
|
4535
4532
|
const { useGetView: useGetView2 } = (0, provider_exports.useService)();
|
|
4536
4533
|
const viewParams = (0, import_react6.useMemo)(() => {
|
|
4537
|
-
if (
|
|
4534
|
+
if (!action || !action?.res_model) {
|
|
4535
|
+
return void 0;
|
|
4536
|
+
}
|
|
4537
|
+
const actionResult = action;
|
|
4538
4538
|
return {
|
|
4539
|
-
model,
|
|
4540
|
-
views
|
|
4539
|
+
model: String(actionResult?.res_model),
|
|
4540
|
+
views: [
|
|
4541
|
+
...Array.isArray(actionResult?.views) ? actionResult?.views.map(
|
|
4542
|
+
(view2) => view2[1] === "list" ? [view2[0], "list"] : view2
|
|
4543
|
+
) : [],
|
|
4544
|
+
[
|
|
4545
|
+
Array.isArray(actionResult?.search_view_id) ? actionResult?.search_view_id[0] : actionResult?.search_view_id,
|
|
4546
|
+
"search"
|
|
4547
|
+
]
|
|
4548
|
+
],
|
|
4541
4549
|
context,
|
|
4542
|
-
id
|
|
4550
|
+
id: isNaN(Number(aid)) ? action?.id : aid
|
|
4543
4551
|
};
|
|
4544
|
-
}, [
|
|
4552
|
+
}, [action, context, aid]);
|
|
4545
4553
|
const view = useGetView2({
|
|
4546
4554
|
viewParams: viewParams || {},
|
|
4547
4555
|
enabled: !!viewParams
|
|
@@ -4641,22 +4649,10 @@ var AppProvider = ({
|
|
|
4641
4649
|
{ ...(0, utils_exports.evalJSONContext)(action?.context) }
|
|
4642
4650
|
]);
|
|
4643
4651
|
}, [menuContext, action?.context, env?.context?.lang]);
|
|
4644
|
-
const memoViews = (0, import_react8.useMemo)(() => {
|
|
4645
|
-
if (!action) return [];
|
|
4646
|
-
return [
|
|
4647
|
-
...Array.isArray(action?.views) ? action.views.map(
|
|
4648
|
-
(view2) => view2[1] === "list" ? [view2[0], "list"] : view2
|
|
4649
|
-
) : [],
|
|
4650
|
-
[
|
|
4651
|
-
Array.isArray(action?.search_view_id) ? action.search_view_id[0] : action.search_view_id,
|
|
4652
|
-
"search"
|
|
4653
|
-
]
|
|
4654
|
-
];
|
|
4655
|
-
}, [action]);
|
|
4656
4652
|
const view = useViewV2({
|
|
4653
|
+
action,
|
|
4657
4654
|
context: viewContext,
|
|
4658
|
-
|
|
4659
|
-
model: action?.res_model ? String(action.res_model) : void 0
|
|
4655
|
+
aid
|
|
4660
4656
|
});
|
|
4661
4657
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
4662
4658
|
ReactContext.Provider,
|
|
@@ -4781,7 +4777,7 @@ var useGetSpecification = ({
|
|
|
4781
4777
|
|
|
4782
4778
|
// src/hooks/core/use-list-data.ts
|
|
4783
4779
|
var import_react14 = require("react");
|
|
4784
|
-
var
|
|
4780
|
+
var import_utils5 = require("@fctc/interface-logic/utils");
|
|
4785
4781
|
|
|
4786
4782
|
// src/hooks/utils/use-click-outside.ts
|
|
4787
4783
|
var import_react11 = require("react");
|
|
@@ -4923,12 +4919,12 @@ var useListData = ({
|
|
|
4923
4919
|
if (!viewData || !action || !context) {
|
|
4924
4920
|
return null;
|
|
4925
4921
|
}
|
|
4926
|
-
const domainParse = type === "calendar" ? getDateRange(currentDate, mode) : action?.domain ? Array.isArray(action?.domain) ? [...action?.domain] : (0,
|
|
4922
|
+
const domainParse = type === "calendar" ? getDateRange(currentDate, mode) : action?.domain ? Array.isArray(action?.domain) ? [...action?.domain] : (0, import_utils5.evalJSONDomain)(action?.domain, context) : [];
|
|
4927
4923
|
const limit = type === "calendar" ? 2500 : pageLimit;
|
|
4928
4924
|
const offset = debouncedPage * pageLimit;
|
|
4929
4925
|
const fields = type === "calendar" ? convertFieldsToArray(viewData?.views?.calendar?.fields) || [] : typeof groupByList === "object" ? groupByList?.fields : void 0;
|
|
4930
4926
|
const groupby = typeof groupByList === "object" ? [groupByList?.contexts?.[0]?.group_by] : [];
|
|
4931
|
-
const sort = order ? order : viewData?.views?.list?.default_order ? (0,
|
|
4927
|
+
const sort = order ? order : viewData?.views?.list?.default_order ? (0, import_utils5.formatSortingString)(viewData?.views?.list?.default_order) : "";
|
|
4932
4928
|
return {
|
|
4933
4929
|
model: action.res_model,
|
|
4934
4930
|
specification,
|
|
@@ -4956,7 +4952,7 @@ var useListData = ({
|
|
|
4956
4952
|
const list = useGetListData2(
|
|
4957
4953
|
listDataProps,
|
|
4958
4954
|
[listDataProps],
|
|
4959
|
-
!!listDataProps && !!specification && !(0,
|
|
4955
|
+
!!listDataProps && !!specification && !(0, import_utils5.isObjectEmpty)(specification)
|
|
4960
4956
|
);
|
|
4961
4957
|
return {
|
|
4962
4958
|
...list,
|
|
@@ -5463,18 +5459,18 @@ var many2oneFieldController = (props) => {
|
|
|
5463
5459
|
// src/widget/basic/many2one-button-field/controller.ts
|
|
5464
5460
|
var import_environment2 = require("@fctc/interface-logic/environment");
|
|
5465
5461
|
var import_hooks6 = require("@fctc/interface-logic/hooks");
|
|
5466
|
-
var
|
|
5462
|
+
var import_utils8 = require("@fctc/interface-logic/utils");
|
|
5467
5463
|
var many2oneButtonController = (props) => {
|
|
5468
5464
|
const { domain, methods, relation, service, xNode } = props;
|
|
5469
5465
|
const actionDataString = sessionStorage.getItem("actionData");
|
|
5470
5466
|
const env = (0, import_environment2.getEnv)();
|
|
5471
|
-
const domainObject = (0,
|
|
5467
|
+
const domainObject = (0, import_utils8.evalJSONDomain)(domain, methods?.getValues() || {});
|
|
5472
5468
|
const actionData = actionDataString && actionDataString !== "undefined" ? JSON.parse(actionDataString) : {};
|
|
5473
5469
|
const { data: dataOfSelection } = (0, import_hooks6.useGetSelection)({
|
|
5474
5470
|
data: {
|
|
5475
5471
|
model: relation ?? "",
|
|
5476
5472
|
domain: domainObject,
|
|
5477
|
-
context: { ...env.context, ...(0,
|
|
5473
|
+
context: { ...env.context, ...(0, import_utils8.evalJSONContext)(actionData?.context) }
|
|
5478
5474
|
},
|
|
5479
5475
|
queryKey: [`data_${relation}`, domainObject],
|
|
5480
5476
|
service,
|
|
@@ -5491,7 +5487,7 @@ var many2oneButtonController = (props) => {
|
|
|
5491
5487
|
|
|
5492
5488
|
// src/widget/basic/many2many-field/controller.ts
|
|
5493
5489
|
var import_react17 = require("react");
|
|
5494
|
-
var
|
|
5490
|
+
var import_utils9 = require("@fctc/interface-logic/utils");
|
|
5495
5491
|
var many2manyFieldController = (props) => {
|
|
5496
5492
|
const {
|
|
5497
5493
|
relation,
|
|
@@ -5501,8 +5497,7 @@ var many2manyFieldController = (props) => {
|
|
|
5501
5497
|
tab,
|
|
5502
5498
|
setSelectedRowKeys: setSelectedRowKeys2,
|
|
5503
5499
|
groupByDomain,
|
|
5504
|
-
enabled: enabledCallAPI
|
|
5505
|
-
actionData
|
|
5500
|
+
enabled: enabledCallAPI
|
|
5506
5501
|
} = props;
|
|
5507
5502
|
const { env } = (0, provider_exports.useEnv)();
|
|
5508
5503
|
const { useGetView: useGetView2, useGetListData: useGetListData2, useGetFormView: useGetFormView2 } = (0, provider_exports.useService)();
|
|
@@ -5526,36 +5521,19 @@ var many2manyFieldController = (props) => {
|
|
|
5526
5521
|
viewParams,
|
|
5527
5522
|
enabled: enabledCallAPI
|
|
5528
5523
|
});
|
|
5529
|
-
const
|
|
5530
|
-
()
|
|
5531
|
-
|
|
5532
|
-
|
|
5533
|
-
|
|
5534
|
-
fields: [
|
|
5535
|
-
|
|
5536
|
-
|
|
5537
|
-
]
|
|
5538
|
-
}),
|
|
5539
|
-
[relation, viewResponse]
|
|
5540
|
-
);
|
|
5541
|
-
const initModel = (0, import_hooks2.useModel)();
|
|
5542
|
-
const modelInstance = (0, import_react17.useMemo)(() => {
|
|
5543
|
-
if (viewResponse) {
|
|
5544
|
-
return initModel.initModel(baseModel);
|
|
5545
|
-
}
|
|
5546
|
-
return null;
|
|
5547
|
-
}, [baseModel, viewResponse]);
|
|
5548
|
-
const specification = (0, import_react17.useMemo)(() => {
|
|
5549
|
-
if (modelInstance) {
|
|
5550
|
-
return modelInstance.getSpecification();
|
|
5551
|
-
}
|
|
5552
|
-
return null;
|
|
5553
|
-
}, [modelInstance]);
|
|
5524
|
+
const { specification } = useGetSpecification({
|
|
5525
|
+
model: String(relation),
|
|
5526
|
+
viewData: viewResponse || {},
|
|
5527
|
+
fields: [
|
|
5528
|
+
...Object.values(viewResponse?.views?.list?.fields ?? {}),
|
|
5529
|
+
...tab?.fields ? tab.fields : []
|
|
5530
|
+
]
|
|
5531
|
+
});
|
|
5554
5532
|
const default_order = viewResponse && viewResponse?.views?.list?.default_order;
|
|
5555
|
-
const optionsObject = tab?.options ? (0,
|
|
5533
|
+
const optionsObject = tab?.options ? (0, import_utils9.evalJSONContext)(tab?.options) : (options ? (0, import_utils9.evalJSONContext)(options) : {}) || {};
|
|
5556
5534
|
const fetchData = async () => {
|
|
5557
5535
|
try {
|
|
5558
|
-
const domainParse = typeof domain === "string" ? (0,
|
|
5536
|
+
const domainParse = typeof domain === "string" ? (0, import_utils9.evalJSONDomain)(domain, contextObject) : Array.isArray(domain) ? domain : [];
|
|
5559
5537
|
setDomainMany2Many(domainParse);
|
|
5560
5538
|
setPage(0);
|
|
5561
5539
|
} catch (err) {
|
|
@@ -5579,7 +5557,7 @@ var many2manyFieldController = (props) => {
|
|
|
5579
5557
|
context: contextObject,
|
|
5580
5558
|
fields: groupByDomain?.fields,
|
|
5581
5559
|
groupby: [groupByDomain?.contexts[0]?.group_by],
|
|
5582
|
-
sort: order ? order : default_order ? (0,
|
|
5560
|
+
sort: order ? order : default_order ? (0, import_utils9.formatSortingString)(default_order) : ""
|
|
5583
5561
|
};
|
|
5584
5562
|
const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
|
|
5585
5563
|
const {
|
|
@@ -5643,7 +5621,7 @@ var many2manyFieldController = (props) => {
|
|
|
5643
5621
|
// src/widget/basic/many2many-tags-field/controller.ts
|
|
5644
5622
|
var import_react18 = require("react");
|
|
5645
5623
|
var import_constants2 = require("@fctc/interface-logic/constants");
|
|
5646
|
-
var
|
|
5624
|
+
var import_utils10 = require("@fctc/interface-logic/utils");
|
|
5647
5625
|
var many2manyTagsController = (props) => {
|
|
5648
5626
|
const {
|
|
5649
5627
|
relation,
|
|
@@ -5658,9 +5636,9 @@ var many2manyTagsController = (props) => {
|
|
|
5658
5636
|
const isUser = relation === "res.users" || relation === "res.partner";
|
|
5659
5637
|
const { env } = (0, provider_exports.useEnv)();
|
|
5660
5638
|
const { useGetSelection: useGetSelection3 } = (0, provider_exports.useService)();
|
|
5661
|
-
const addtionalFields = optionsFields ? (0,
|
|
5639
|
+
const addtionalFields = optionsFields ? (0, import_utils10.evalJSONContext)(optionsFields) : null;
|
|
5662
5640
|
const domainObject = (0, import_react18.useMemo)(
|
|
5663
|
-
() => (0,
|
|
5641
|
+
() => (0, import_utils10.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues || {}))),
|
|
5664
5642
|
[domain, formValues]
|
|
5665
5643
|
);
|
|
5666
5644
|
const data = {
|
|
@@ -5705,7 +5683,7 @@ var many2manyTagsController = (props) => {
|
|
|
5705
5683
|
|
|
5706
5684
|
// src/widget/basic/status-bar-field/controller.ts
|
|
5707
5685
|
var import_react19 = require("react");
|
|
5708
|
-
var
|
|
5686
|
+
var import_utils11 = require("@fctc/interface-logic/utils");
|
|
5709
5687
|
var durationController = (props) => {
|
|
5710
5688
|
const { relation, domain, formValues, name, id, model, onRefetch, enabled } = props;
|
|
5711
5689
|
const specification = {
|
|
@@ -5721,7 +5699,7 @@ var durationController = (props) => {
|
|
|
5721
5699
|
const listDataProps = {
|
|
5722
5700
|
model: relation,
|
|
5723
5701
|
specification,
|
|
5724
|
-
domain: (0,
|
|
5702
|
+
domain: (0, import_utils11.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues))),
|
|
5725
5703
|
limit: 10,
|
|
5726
5704
|
offset: 0,
|
|
5727
5705
|
fields: "",
|
|
@@ -5771,10 +5749,10 @@ var durationController = (props) => {
|
|
|
5771
5749
|
};
|
|
5772
5750
|
|
|
5773
5751
|
// src/widget/basic/priority-field/controller.ts
|
|
5774
|
-
var
|
|
5752
|
+
var import_utils12 = require("@fctc/interface-logic/utils");
|
|
5775
5753
|
var priorityFieldController = (props) => {
|
|
5776
5754
|
const { name, model, index, actionData, context, onChange, specification } = props;
|
|
5777
|
-
const _context = { ...(0,
|
|
5755
|
+
const _context = { ...(0, import_utils12.evalJSONContext)(actionData?.context) };
|
|
5778
5756
|
const contextObject = { ...context, ..._context };
|
|
5779
5757
|
const { useSave: useSave3 } = (0, provider_exports.useService)();
|
|
5780
5758
|
const { mutateAsync: fetchSave } = useSave3();
|
|
@@ -6742,12 +6720,12 @@ var dateFieldController = (props) => {
|
|
|
6742
6720
|
|
|
6743
6721
|
// src/widget/basic/copy-link-button/controller.ts
|
|
6744
6722
|
var import_react21 = require("react");
|
|
6745
|
-
var
|
|
6723
|
+
var import_utils13 = require("@fctc/interface-logic/utils");
|
|
6746
6724
|
var copyLinkButtonController = (props) => {
|
|
6747
6725
|
const { value, defaultValue } = props;
|
|
6748
6726
|
const [isCopied, setIsCopied] = (0, import_react21.useState)(false);
|
|
6749
6727
|
const handleCopyToClipboard = async (value2) => {
|
|
6750
|
-
await (0,
|
|
6728
|
+
await (0, import_utils13.copyTextToClipboard)(value2);
|
|
6751
6729
|
setIsCopied(true);
|
|
6752
6730
|
setTimeout(() => setIsCopied(false), 2e3);
|
|
6753
6731
|
};
|
|
@@ -6760,12 +6738,12 @@ var copyLinkButtonController = (props) => {
|
|
|
6760
6738
|
};
|
|
6761
6739
|
|
|
6762
6740
|
// src/widget/basic/color-field/color-controller.ts
|
|
6763
|
-
var
|
|
6741
|
+
var import_utils14 = require("@fctc/interface-logic/utils");
|
|
6764
6742
|
var colorFieldController = (props) => {
|
|
6765
6743
|
const { value, isForm, name, formValues, idForm, model, actionData } = props;
|
|
6766
6744
|
const { env } = (0, provider_exports.useEnv)();
|
|
6767
6745
|
const { useSave: useSave3 } = (0, provider_exports.useService)();
|
|
6768
|
-
const _context = { ...(0,
|
|
6746
|
+
const _context = { ...(0, import_utils14.evalJSONContext)(actionData?.context) || {} };
|
|
6769
6747
|
const contextObject = { ...env.context, ..._context };
|
|
6770
6748
|
const idDefault = isForm ? idForm : formValues?.id;
|
|
6771
6749
|
const { mutate: onSave } = useSave3();
|
|
@@ -6794,7 +6772,7 @@ var colorFieldController = (props) => {
|
|
|
6794
6772
|
|
|
6795
6773
|
// src/widget/basic/binary-field/controller.ts
|
|
6796
6774
|
var import_react22 = require("react");
|
|
6797
|
-
var
|
|
6775
|
+
var import_utils15 = require("@fctc/interface-logic/utils");
|
|
6798
6776
|
var binaryFieldController = (props) => {
|
|
6799
6777
|
const { name, methods, readonly = false, value } = props;
|
|
6800
6778
|
const inputId = (0, import_react22.useId)();
|
|
@@ -6851,11 +6829,11 @@ var binaryFieldController = (props) => {
|
|
|
6851
6829
|
};
|
|
6852
6830
|
const checkIsImageLink = (url) => {
|
|
6853
6831
|
const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i;
|
|
6854
|
-
return imageExtensions.test(url) || (0,
|
|
6832
|
+
return imageExtensions.test(url) || (0, import_utils15.isBase64Image)(url) || isBlobUrl(url);
|
|
6855
6833
|
};
|
|
6856
6834
|
const getImageBase64WithMimeType = (base64) => {
|
|
6857
6835
|
if (typeof base64 !== "string" || base64.length < 10) return null;
|
|
6858
|
-
if ((0,
|
|
6836
|
+
if ((0, import_utils15.isBase64Image)(base64)) return base64;
|
|
6859
6837
|
let mimeType = null;
|
|
6860
6838
|
if (base64.startsWith("iVBORw0KGgo")) mimeType = "image/png";
|
|
6861
6839
|
else if (base64.startsWith("/9j/")) mimeType = "image/jpeg";
|
|
@@ -6958,7 +6936,7 @@ var tableHeadController = (props) => {
|
|
|
6958
6936
|
|
|
6959
6937
|
// src/widget/advance/table/table-view/controller.ts
|
|
6960
6938
|
var import_react24 = require("react");
|
|
6961
|
-
var
|
|
6939
|
+
var import_utils17 = require("@fctc/interface-logic/utils");
|
|
6962
6940
|
var tableController = ({ data }) => {
|
|
6963
6941
|
const [rows, setRows] = (0, import_react24.useState)(null);
|
|
6964
6942
|
const [columns, setColumns] = (0, import_react24.useState)(null);
|
|
@@ -6996,7 +6974,7 @@ var tableController = ({ data }) => {
|
|
|
6996
6974
|
let cols = [];
|
|
6997
6975
|
try {
|
|
6998
6976
|
cols = mergeFields?.filter((item) => {
|
|
6999
|
-
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ?
|
|
6977
|
+
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);
|
|
7000
6978
|
})?.map((field) => {
|
|
7001
6979
|
return {
|
|
7002
6980
|
name: field?.name,
|
|
@@ -7180,7 +7158,7 @@ var tableGroupController = (props) => {
|
|
|
7180
7158
|
|
|
7181
7159
|
// src/widget/advance/search/controller.ts
|
|
7182
7160
|
var import_constants3 = require("@fctc/interface-logic/constants");
|
|
7183
|
-
var
|
|
7161
|
+
var import_utils19 = require("@fctc/interface-logic/utils");
|
|
7184
7162
|
var import_moment2 = __toESM(require_moment());
|
|
7185
7163
|
var import_react26 = require("react");
|
|
7186
7164
|
var searchController = ({
|
|
@@ -7197,9 +7175,9 @@ var searchController = ({
|
|
|
7197
7175
|
const [selectedTags, setSelectedTags] = (0, import_react26.useState)(null);
|
|
7198
7176
|
const [searchString, setSearchString] = (0, import_react26.useState)("");
|
|
7199
7177
|
const [searchMap, setSearchMap] = (0, import_react26.useState)({});
|
|
7200
|
-
const actionContext = typeof context === "string" ? (0,
|
|
7178
|
+
const actionContext = typeof context === "string" ? (0, import_utils19.evalJSONContext)(context) : context;
|
|
7201
7179
|
const contextSearch = { ...env.context, ...actionContext };
|
|
7202
|
-
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0,
|
|
7180
|
+
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils19.evalJSONDomain)(domain, contextSearch) : [];
|
|
7203
7181
|
const clearSearch = () => {
|
|
7204
7182
|
setFilterBy([]);
|
|
7205
7183
|
setGroupBy([]);
|
|
@@ -7214,7 +7192,7 @@ var searchController = ({
|
|
|
7214
7192
|
const dataModel = viewData?.models?.[model];
|
|
7215
7193
|
const searchViews = viewData?.views?.search;
|
|
7216
7194
|
const searchByItems = searchViews?.search_by?.filter(
|
|
7217
|
-
(item) => !
|
|
7195
|
+
(item) => !import_utils19.domainHelper.matchDomains(contextSearch, item.invisible)
|
|
7218
7196
|
)?.map(
|
|
7219
7197
|
({ string, name, filter_domain, operator, widget }, index) => ({
|
|
7220
7198
|
dataIndex: index,
|
|
@@ -7227,10 +7205,10 @@ var searchController = ({
|
|
|
7227
7205
|
})
|
|
7228
7206
|
);
|
|
7229
7207
|
const filterByItems = searchViews?.filter_by.filter((item) => {
|
|
7230
|
-
return !
|
|
7208
|
+
return !import_utils19.domainHelper.matchDomains(contextSearch, item?.invisible);
|
|
7231
7209
|
})?.map((item) => ({ ...item, active: false }));
|
|
7232
7210
|
const groupByItems = searchViews?.group_by.filter(
|
|
7233
|
-
(item) => !
|
|
7211
|
+
(item) => !import_utils19.domainHelper.matchDomains(contextSearch, item?.invisible)
|
|
7234
7212
|
).map((item) => ({
|
|
7235
7213
|
...item,
|
|
7236
7214
|
string: item.string ?? viewData?.models?.[model]?.[item?.name?.split("group_by_")?.[1]]?.string
|
|
@@ -7307,14 +7285,14 @@ var searchController = ({
|
|
|
7307
7285
|
}
|
|
7308
7286
|
let valueDomainItem = value?.value;
|
|
7309
7287
|
if (value?.modelType === "date") {
|
|
7310
|
-
valueDomainItem = (0,
|
|
7288
|
+
valueDomainItem = (0, import_utils19.validateAndParseDate)(value?.value);
|
|
7311
7289
|
} else if (value?.modelType === "datetime") {
|
|
7312
7290
|
if (value?.operator === "<=" || value?.operator === "<") {
|
|
7313
|
-
const parsedDate = (0,
|
|
7291
|
+
const parsedDate = (0, import_utils19.validateAndParseDate)(value?.value, true);
|
|
7314
7292
|
const hasTime = (0, import_moment2.default)(value?.value).format("HH:mm:ss") !== "00:00:00";
|
|
7315
7293
|
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");
|
|
7316
7294
|
} else {
|
|
7317
|
-
valueDomainItem = (0,
|
|
7295
|
+
valueDomainItem = (0, import_utils19.validateAndParseDate)(value?.value, true);
|
|
7318
7296
|
}
|
|
7319
7297
|
}
|
|
7320
7298
|
const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
|
|
@@ -7393,7 +7371,7 @@ var searchController = ({
|
|
|
7393
7371
|
}, [searchMap]);
|
|
7394
7372
|
const handleAddTagSearch = (tag) => {
|
|
7395
7373
|
const { domain: domain2, groupIndex, value, type, context: context2, dataIndex } = tag;
|
|
7396
|
-
const domainFormat = new
|
|
7374
|
+
const domainFormat = new import_utils19.domainHelper.Domain(domain2);
|
|
7397
7375
|
if (type === import_constants3.SearchType.FILTER) {
|
|
7398
7376
|
addSearchItems(`${import_constants3.SearchType.FILTER}_${groupIndex}`, {
|
|
7399
7377
|
...tag,
|