@fctc/widget-logic 2.0.3 → 2.0.7

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/index.js CHANGED
@@ -4082,7 +4082,6 @@ __export(index_exports, {
4082
4082
  useGetRowIds: () => useGetRowIds,
4083
4083
  useListData: () => useListData,
4084
4084
  useMenu: () => useMenu,
4085
- useMenuItem: () => useMenuItem,
4086
4085
  useProfile: () => useProfile,
4087
4086
  useSelectionState: () => useSelectionState,
4088
4087
  useStorageState: () => useStorageState,
@@ -4104,7 +4103,6 @@ __export(hooks_exports, {
4104
4103
  useDetail: () => useDetail,
4105
4104
  useListData: () => useListData,
4106
4105
  useMenu: () => useMenu,
4107
- useMenuItem: () => useMenuItem,
4108
4106
  useProfile: () => useProfile,
4109
4107
  useUser: () => useUser,
4110
4108
  useViewV2: () => useViewV2
@@ -4864,69 +4862,8 @@ var useAppProvider = () => {
4864
4862
  return context;
4865
4863
  };
4866
4864
 
4867
- // src/hooks/core/use-menu-item.tsx
4868
- var import_environment5 = require("@fctc/interface-logic/environment");
4869
- var import_hooks9 = require("@fctc/interface-logic/hooks");
4870
- var import_react11 = require("react");
4871
-
4872
- // src/utils.ts
4873
- var utils_exports = {};
4874
- __export(utils_exports, {
4875
- API_APP_URL: () => API_APP_URL,
4876
- API_PRESCHOOL_URL: () => API_PRESCHOOL_URL,
4877
- STORAGES: () => STORAGES,
4878
- combineContexts: () => combineContexts,
4879
- convertFieldsToArray: () => convertFieldsToArray,
4880
- countSum: () => countSum,
4881
- getDateRange: () => getDateRange,
4882
- languages: () => languages,
4883
- mergeButtons: () => mergeButtons,
4884
- setStorageItemAsync: () => setStorageItemAsync,
4885
- useGetRowIds: () => useGetRowIds,
4886
- useSelectionState: () => useSelectionState,
4887
- useStorageState: () => useStorageState
4888
- });
4889
- __reExport(utils_exports, require("@fctc/interface-logic/utils"));
4890
-
4891
- // src/hooks/core/use-menu-item.tsx
4892
- var useMenuItem = (props) => {
4893
- const { menu, activeMenuId } = props;
4894
- const model = menu?.action?.res_model;
4895
- const aid = menu?.action?.id?.id;
4896
- const id = menu?.id;
4897
- const context = (0, import_environment5.getEnv)().context;
4898
- const queryActionDetail = (0, import_hooks9.useGetActionDetail)({
4899
- aid,
4900
- id,
4901
- model,
4902
- context,
4903
- enabled: true,
4904
- queryKey: [`action-${aid}`]
4905
- }).data;
4906
- const [path, setPath] = (0, import_react11.useState)("");
4907
- const handleClick = () => {
4908
- if (location?.pathname === "/list/menu" && activeMenuId === menu?.id) {
4909
- return;
4910
- }
4911
- const hasListView = queryActionDetail.views.some(
4912
- ([id2, type]) => type === "list"
4913
- );
4914
- const viewType = hasListView ? "list" : "form";
4915
- const isAccountPayment = menu?.action?.res_model === "account.payment" && menu?.action?.id?.id === 1551;
4916
- const isConvertCurrencyMenu = menu?.action?.res_model === "currency.convert" && menu?.action?.id?.id === 1562;
4917
- const path2 = (0, utils_exports.formatUrlPath)({
4918
- viewType,
4919
- actionPath: isConvertCurrencyMenu ? "menu" : isAccountPayment ? "menu" : menu?.action?.path || "menu",
4920
- aid: menu?.action?.id?.id,
4921
- model: queryActionDetail.res_model
4922
- });
4923
- setPath(path2);
4924
- };
4925
- return { handleClick, path, queryActionDetail };
4926
- };
4927
-
4928
4865
  // src/hooks/utils/use-click-outside.ts
4929
- var import_react12 = require("react");
4866
+ var import_react11 = require("react");
4930
4867
  var DEFAULT_EVENTS = ["mousedown", "touchstart"];
4931
4868
  var useClickOutside = ({
4932
4869
  handler,
@@ -4934,8 +4871,8 @@ var useClickOutside = ({
4934
4871
  nodes = [],
4935
4872
  refs
4936
4873
  }) => {
4937
- const ref = (0, import_react12.useRef)(null);
4938
- (0, import_react12.useEffect)(() => {
4874
+ const ref = (0, import_react11.useRef)(null);
4875
+ (0, import_react11.useEffect)(() => {
4939
4876
  const listener = (event) => {
4940
4877
  const { target } = event;
4941
4878
  if (refs && refs?.length > 0 && refs?.some((r) => r.current?.contains(target))) {
@@ -4957,10 +4894,10 @@ var useClickOutside = ({
4957
4894
  };
4958
4895
 
4959
4896
  // src/hooks/utils/use-debounce.ts
4960
- var import_react13 = require("react");
4897
+ var import_react12 = require("react");
4961
4898
  function useDebounce(value, delay) {
4962
- const [debouncedValue, setDebouncedValue] = (0, import_react13.useState)(value);
4963
- (0, import_react13.useEffect)(() => {
4899
+ const [debouncedValue, setDebouncedValue] = (0, import_react12.useState)(value);
4900
+ (0, import_react12.useEffect)(() => {
4964
4901
  const handler = setTimeout(() => {
4965
4902
  setDebouncedValue(value);
4966
4903
  }, delay);
@@ -5215,20 +5152,20 @@ var ChevronBottomIcon = ({
5215
5152
  };
5216
5153
 
5217
5154
  // src/widget/basic/status-dropdown-field/controller.ts
5218
- var import_react14 = require("react");
5219
- var import_environment6 = require("@fctc/interface-logic/environment");
5220
- var import_hooks11 = require("@fctc/interface-logic/hooks");
5155
+ var import_react13 = require("react");
5156
+ var import_environment5 = require("@fctc/interface-logic/environment");
5157
+ var import_hooks10 = require("@fctc/interface-logic/hooks");
5221
5158
  var statusDropdownController = (props) => {
5222
5159
  const { selection, isForm, id, model, name, state, onRefetch } = props;
5223
- const env = (0, import_environment6.getEnv)();
5160
+ const env = (0, import_environment5.getEnv)();
5224
5161
  const colors = {
5225
5162
  normal: "bg-[#e9ecef]",
5226
5163
  done: "bg-primary",
5227
5164
  blocked: "bg-red-500"
5228
5165
  };
5229
- const [isOpen, setIsOpen] = (0, import_react14.useState)(false);
5230
- const buttonRef = (0, import_react14.useRef)(null);
5231
- (0, import_react14.useEffect)(() => {
5166
+ const [isOpen, setIsOpen] = (0, import_react13.useState)(false);
5167
+ const buttonRef = (0, import_react13.useRef)(null);
5168
+ (0, import_react13.useEffect)(() => {
5232
5169
  const handleClickOutside = (event) => {
5233
5170
  if (buttonRef.current && !buttonRef.current.contains(event.target)) {
5234
5171
  setIsOpen(false);
@@ -5239,7 +5176,7 @@ var statusDropdownController = (props) => {
5239
5176
  document.removeEventListener("mousedown", handleClickOutside);
5240
5177
  };
5241
5178
  }, []);
5242
- const { mutate: onSave } = (0, import_hooks11.useSave)();
5179
+ const { mutate: onSave } = (0, import_hooks10.useSave)();
5243
5180
  const handleClick = async (status) => {
5244
5181
  setIsOpen(!isOpen);
5245
5182
  onSave(
@@ -5269,7 +5206,26 @@ var statusDropdownController = (props) => {
5269
5206
  };
5270
5207
 
5271
5208
  // src/widget/basic/many2one-field/controller.ts
5272
- var import_react15 = require("react");
5209
+ var import_react14 = require("react");
5210
+
5211
+ // src/utils.ts
5212
+ var utils_exports = {};
5213
+ __export(utils_exports, {
5214
+ API_APP_URL: () => API_APP_URL,
5215
+ API_PRESCHOOL_URL: () => API_PRESCHOOL_URL,
5216
+ STORAGES: () => STORAGES,
5217
+ combineContexts: () => combineContexts,
5218
+ convertFieldsToArray: () => convertFieldsToArray,
5219
+ countSum: () => countSum,
5220
+ getDateRange: () => getDateRange,
5221
+ languages: () => languages,
5222
+ mergeButtons: () => mergeButtons,
5223
+ setStorageItemAsync: () => setStorageItemAsync,
5224
+ useGetRowIds: () => useGetRowIds,
5225
+ useSelectionState: () => useSelectionState,
5226
+ useStorageState: () => useStorageState
5227
+ });
5228
+ __reExport(utils_exports, require("@fctc/interface-logic/utils"));
5273
5229
 
5274
5230
  // src/provider.ts
5275
5231
  var provider_exports = {};
@@ -5290,22 +5246,22 @@ var many2oneFieldController = (props) => {
5290
5246
  options: fieldOptions,
5291
5247
  showDetail
5292
5248
  } = props;
5293
- const [options, setOptions] = (0, import_react15.useState)([]);
5294
- const [inputValue, setInputValue] = (0, import_react15.useState)("");
5249
+ const { env } = (0, provider_exports.useEnv)();
5250
+ const [options, setOptions] = (0, import_react14.useState)([]);
5251
+ const [inputValue, setInputValue] = (0, import_react14.useState)("");
5295
5252
  const [debouncedInputValue] = useDebounce(inputValue, 1e3);
5296
- const [isShowModalMany2Many, setIsShowModalMany2Many] = (0, import_react15.useState)(false);
5297
- const [tempSelectedOption, setTempSelectedOption] = (0, import_react15.useState)(null);
5298
- const [domainModal, setDomainModal] = (0, import_react15.useState)(null);
5299
- const [domainObject, setDomainObject] = (0, import_react15.useState)(null);
5253
+ const [isShowModalMany2Many, setIsShowModalMany2Many] = (0, import_react14.useState)(false);
5254
+ const [tempSelectedOption, setTempSelectedOption] = (0, import_react14.useState)(null);
5255
+ const [domainModal, setDomainModal] = (0, import_react14.useState)(null);
5256
+ const [domainObject, setDomainObject] = (0, import_react14.useState)(null);
5300
5257
  const actionData = sessionStorageUtils.getActionData();
5301
5258
  const { menuList } = (0, store_exports.useAppSelector)(store_exports.selectNavbar);
5302
- const { context } = (0, store_exports.useAppSelector)(store_exports.selectEnv);
5303
5259
  const initValue = methods?.getValues(name);
5304
5260
  const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
5305
5261
  const contextObject = {
5306
5262
  ...(0, utils_exports.evalJSONContext)(actionData?.context) || {},
5307
5263
  ...fieldContext,
5308
- ...context
5264
+ ...env?.context
5309
5265
  };
5310
5266
  const { useGetSelection: useGetSelection3 } = (0, provider_exports.useService)();
5311
5267
  const data = {
@@ -5328,18 +5284,18 @@ var many2oneFieldController = (props) => {
5328
5284
  queryKey,
5329
5285
  enabled: false
5330
5286
  });
5331
- const selectOptions = (0, import_react15.useMemo)(() => {
5287
+ const selectOptions = (0, import_react14.useMemo)(() => {
5332
5288
  return dataOfSelection?.records?.map((val) => ({
5333
5289
  value: val?.id,
5334
5290
  label: val?.display_name || val?.name
5335
5291
  })) || [];
5336
5292
  }, [dataOfSelection]);
5337
- (0, import_react15.useEffect)(() => {
5293
+ (0, import_react14.useEffect)(() => {
5338
5294
  setOptions(selectOptions);
5339
5295
  setDomainModal(domainObject);
5340
5296
  if (relation === "student.subject") (0, store_exports.setListSubject)(selectOptions);
5341
5297
  }, [selectOptions]);
5342
- (0, import_react15.useEffect)(() => {
5298
+ (0, import_react14.useEffect)(() => {
5343
5299
  setDomainObject(
5344
5300
  (0, utils_exports.evalJSONDomain)(
5345
5301
  domain,
@@ -5347,7 +5303,7 @@ var many2oneFieldController = (props) => {
5347
5303
  )
5348
5304
  );
5349
5305
  }, [domain, formValues]);
5350
- (0, import_react15.useEffect)(() => {
5306
+ (0, import_react14.useEffect)(() => {
5351
5307
  if (!propValue && tempSelectedOption) {
5352
5308
  methods.setValue(name, null);
5353
5309
  setTempSelectedOption(null);
@@ -5358,10 +5314,10 @@ var many2oneFieldController = (props) => {
5358
5314
  });
5359
5315
  }
5360
5316
  }, [propValue]);
5361
- const fetchMoreOptions = (0, import_react15.useCallback)(() => {
5317
+ const fetchMoreOptions = (0, import_react14.useCallback)(() => {
5362
5318
  refetch();
5363
5319
  }, [refetch]);
5364
- (0, import_react15.useEffect)(() => {
5320
+ (0, import_react14.useEffect)(() => {
5365
5321
  if (debouncedInputValue) {
5366
5322
  const filteredDomain = [...domainObject ?? []]?.filter(
5367
5323
  (d) => !(Array.isArray(d) && d[0] === "name" && d[1] === "ilike")
@@ -5376,7 +5332,7 @@ var many2oneFieldController = (props) => {
5376
5332
  }, 50);
5377
5333
  }
5378
5334
  }, [debouncedInputValue]);
5379
- const handleChooseRecord = (0, import_react15.useCallback)(
5335
+ const handleChooseRecord = (0, import_react14.useCallback)(
5380
5336
  (idRecord) => {
5381
5337
  const newOption = options.find(
5382
5338
  (option) => option.value === idRecord
@@ -5401,8 +5357,8 @@ var many2oneFieldController = (props) => {
5401
5357
  },
5402
5358
  [options, methods, name, onChange]
5403
5359
  );
5404
- const handleClose = (0, import_react15.useCallback)(() => setIsShowModalMany2Many(false), []);
5405
- const handleSelectChange = (0, import_react15.useCallback)(
5360
+ const handleClose = (0, import_react14.useCallback)(() => setIsShowModalMany2Many(false), []);
5361
+ const handleSelectChange = (0, import_react14.useCallback)(
5406
5362
  (selectedOption) => {
5407
5363
  if (!selectedOption) {
5408
5364
  methods.setValue(name, null, { shouldDirty: true });
@@ -5449,20 +5405,20 @@ var many2oneFieldController = (props) => {
5449
5405
  };
5450
5406
 
5451
5407
  // src/widget/basic/many2one-button-field/controller.ts
5452
- var import_environment7 = require("@fctc/interface-logic/environment");
5453
- var import_hooks13 = require("@fctc/interface-logic/hooks");
5454
- var import_utils6 = require("@fctc/interface-logic/utils");
5408
+ var import_environment6 = require("@fctc/interface-logic/environment");
5409
+ var import_hooks12 = require("@fctc/interface-logic/hooks");
5410
+ var import_utils5 = require("@fctc/interface-logic/utils");
5455
5411
  var many2oneButtonController = (props) => {
5456
5412
  const { domain, methods, relation } = props;
5457
5413
  const actionDataString = sessionStorage.getItem("actionData");
5458
- const env = (0, import_environment7.getEnv)();
5459
- const domainObject = (0, import_utils6.evalJSONDomain)(domain, methods?.getValues() || {});
5414
+ const env = (0, import_environment6.getEnv)();
5415
+ const domainObject = (0, import_utils5.evalJSONDomain)(domain, methods?.getValues() || {});
5460
5416
  const actionData = actionDataString && actionDataString !== "undefined" ? JSON.parse(actionDataString) : {};
5461
- const { data: dataOfSelection } = (0, import_hooks13.useGetSelection)({
5417
+ const { data: dataOfSelection } = (0, import_hooks12.useGetSelection)({
5462
5418
  data: {
5463
5419
  model: relation ?? "",
5464
5420
  domain: domainObject,
5465
- context: { ...env.context, ...(0, import_utils6.evalJSONContext)(actionData?.context) }
5421
+ context: { ...env.context, ...(0, import_utils5.evalJSONContext)(actionData?.context) }
5466
5422
  },
5467
5423
  queryKey: [`data_${relation}`, domainObject]
5468
5424
  });
@@ -5476,91 +5432,77 @@ var many2oneButtonController = (props) => {
5476
5432
  };
5477
5433
 
5478
5434
  // src/widget/basic/many2many-field/controller.ts
5479
- var import_react16 = require("react");
5480
- var import_store8 = require("@fctc/interface-logic/store");
5481
- var import_utils7 = require("@fctc/interface-logic/utils");
5435
+ var import_react15 = require("react");
5436
+ var import_utils6 = require("@fctc/interface-logic/utils");
5482
5437
  var many2manyFieldController = (props) => {
5483
5438
  const {
5484
5439
  relation,
5485
5440
  domain,
5486
5441
  context,
5442
+ options,
5487
5443
  tab,
5488
- model,
5489
- aid,
5490
5444
  setSelectedRowKeys: setSelectedRowKeys4,
5491
- fields,
5492
- setFields,
5493
5445
  groupByDomain,
5494
- page,
5495
- options,
5496
- sessionStorageUtils
5446
+ enabled: enabledCallAPI,
5447
+ actionData
5497
5448
  } = props;
5498
- const appDispatch = (0, import_store8.useAppDispatch)();
5499
- const actionData = sessionStorageUtils.getActionData();
5500
- const [debouncedPage] = useDebounce(page, 500);
5501
- const [order, setOrder] = (0, import_react16.useState)();
5502
- const [isLoadedData, setIsLoadedData] = (0, import_react16.useState)(false);
5503
- const [domainMany2Many, setDomainMany2Many] = (0, import_react16.useState)(domain);
5504
5449
  const { env } = (0, provider_exports.useEnv)();
5505
5450
  const { useGetView: useGetView2, useGetListData: useGetListData3, useGetFormView } = (0, provider_exports.useService)();
5451
+ const [order, setOrder] = (0, import_react15.useState)();
5452
+ const [page, setPage] = (0, import_react15.useState)(0);
5453
+ const [domainMany2Many, setDomainMany2Many] = (0, import_react15.useState)(null);
5454
+ const [debouncedPage] = useDebounce(page, 500);
5455
+ const contextObject = {
5456
+ ...env.context,
5457
+ ...context || {}
5458
+ };
5506
5459
  const viewParams = {
5507
5460
  model: relation,
5508
5461
  views: [
5509
5462
  [false, "list"],
5510
5463
  [false, "search"]
5511
5464
  ],
5512
- context
5465
+ context: contextObject
5513
5466
  };
5514
- const { data: viewResponse } = useGetView2(viewParams, actionData);
5515
- const baseModel = (0, import_react16.useMemo)(
5467
+ const { data: viewResponse } = useGetView2(viewParams, enabledCallAPI);
5468
+ const baseModel = (0, import_react15.useMemo)(
5516
5469
  () => ({
5517
5470
  name: String(relation),
5518
5471
  view: viewResponse || {},
5519
- actContext: context,
5472
+ actContext: contextObject,
5520
5473
  fields: [
5521
5474
  ...Object.values(viewResponse?.views?.list?.fields ?? {}),
5522
5475
  ...tab?.fields ? tab.fields : []
5523
5476
  ]
5524
5477
  }),
5525
- [model, viewResponse]
5478
+ [relation, viewResponse]
5526
5479
  );
5527
5480
  const initModel = (0, hooks_exports.useModel)();
5528
- const modelInstance = (0, import_react16.useMemo)(() => {
5481
+ const modelInstance = (0, import_react15.useMemo)(() => {
5529
5482
  if (viewResponse) {
5530
5483
  return initModel.initModel(baseModel);
5531
5484
  }
5532
5485
  return null;
5533
5486
  }, [baseModel, viewResponse]);
5534
- const specification = (0, import_react16.useMemo)(() => {
5487
+ const specification = (0, import_react15.useMemo)(() => {
5535
5488
  if (modelInstance) {
5536
5489
  return modelInstance.getSpecification();
5537
5490
  }
5538
5491
  return null;
5539
5492
  }, [modelInstance]);
5540
5493
  const default_order = viewResponse && viewResponse?.views?.list?.default_order;
5541
- const optionsObject = tab?.options ? (0, import_utils7.evalJSONContext)(tab?.options) : (options ? (0, import_utils7.evalJSONContext)(options) : {}) || {};
5494
+ const optionsObject = tab?.options ? (0, import_utils6.evalJSONContext)(tab?.options) : (options ? (0, import_utils6.evalJSONContext)(options) : {}) || {};
5542
5495
  const fetchData = async () => {
5543
5496
  try {
5544
- setDomainMany2Many(domain);
5545
- appDispatch((0, import_store8.setFirstDomain)(domain));
5546
- appDispatch((0, import_store8.setViewDataStore)(viewResponse));
5547
- const modalData = viewResponse?.views?.list?.fields.map((field) => ({
5548
- ...viewResponse?.models?.[String(model)]?.[field?.name],
5549
- ...field
5550
- }));
5551
- if (!fields?.[`${aid}_${relation}_popupmany2many`] && modalData) {
5552
- setFields({
5553
- ...fields,
5554
- [`${aid}_${relation}_popupmany2many`]: modalData
5555
- });
5556
- }
5557
- appDispatch((0, import_store8.setPage)(0));
5497
+ const domainParse = typeof domain === "string" ? (0, import_utils6.evalJSONDomain)(domain, contextObject) : Array.isArray(domain) ? domain : [];
5498
+ setDomainMany2Many(domainParse);
5499
+ setPage(0);
5558
5500
  } catch (err) {
5559
5501
  console.log(err);
5560
5502
  }
5561
5503
  };
5562
5504
  const queryKey = [
5563
- `view-${relation}-${aid}`,
5505
+ `view-${relation}`,
5564
5506
  specification,
5565
5507
  domainMany2Many,
5566
5508
  debouncedPage,
@@ -5573,93 +5515,76 @@ var many2manyFieldController = (props) => {
5573
5515
  domain: domainMany2Many,
5574
5516
  offset: debouncedPage * 10,
5575
5517
  limit: 10,
5576
- context,
5518
+ context: contextObject,
5577
5519
  fields: groupByDomain?.fields,
5578
5520
  groupby: [groupByDomain?.contexts[0]?.group_by],
5579
- sort: order ? order : default_order ? (0, import_utils7.formatSortingString)(default_order) : ""
5521
+ sort: order ? order : default_order ? (0, import_utils6.formatSortingString)(default_order) : ""
5580
5522
  };
5581
- const enabled = isLoadedData && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5523
+ const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5582
5524
  const {
5583
5525
  data: dataResponse,
5584
- isLoading: isDataLoading,
5585
- isFetched: isDataResponseFetched,
5526
+ isLoading,
5527
+ isFetched,
5586
5528
  isPlaceholderData
5587
5529
  } = useGetListData3(data, queryKey, enabled);
5588
- (0, import_react16.useEffect)(() => {
5530
+ (0, import_react15.useEffect)(() => {
5589
5531
  if (viewResponse) {
5590
5532
  fetchData();
5591
5533
  }
5592
5534
  return () => {
5593
- appDispatch((0, import_store8.setGroupByDomain)(null));
5594
- setFields((prevFields) => ({
5595
- ...prevFields,
5596
- [`${aid}_${relation}_popupmany2many`]: null
5597
- }));
5598
- appDispatch((0, import_store8.setPage)(0));
5535
+ setPage(0);
5599
5536
  setSelectedRowKeys4([]);
5600
5537
  setDomainMany2Many(null);
5601
- setIsLoadedData(false);
5602
5538
  };
5603
5539
  }, [viewResponse]);
5604
- const { rows, columns, typeTable } = tableController({
5540
+ const { rows, columns, typeTable, onToggleColumnOptional } = tableController({
5605
5541
  data: {
5606
- fields: fields?.[`${aid}_${relation}_popupmany2many`] || viewResponse?.views?.list?.fields,
5542
+ fields: viewResponse?.views?.list?.fields,
5607
5543
  records: dataResponse?.records ?? dataResponse?.groups,
5608
5544
  dataModel: viewResponse?.models?.[String(relation)],
5609
- context: { ...env.context, ...context },
5545
+ context: contextObject,
5610
5546
  typeTable: dataResponse?.groups ? "group" : "list"
5611
5547
  }
5612
5548
  });
5613
- const dataFormView = {
5614
- id: null,
5615
- model: relation,
5616
- context
5617
- };
5618
- const {
5619
- refetch,
5620
- data: dataFormViewResponse,
5621
- isSuccess
5622
- } = useGetFormView({
5623
- data: dataFormView,
5624
- queryKey: [`form-view-action-${relation}`],
5625
- enabled: false
5549
+ const searchControllers = searchController({
5550
+ viewData: viewResponse,
5551
+ model: relation ?? "",
5552
+ context: contextObject,
5553
+ domain,
5554
+ fieldsList: [
5555
+ ...columns?.filter(
5556
+ (col) => col?.field?.type_co === "field" && col?.optional !== "hide"
5557
+ )?.map((col) => ({ ...col.field })) ?? []
5558
+ ]
5626
5559
  });
5627
- (0, import_react16.useEffect)(() => {
5628
- if (isSuccess && dataFormViewResponse) {
5629
- sessionStorage.setItem("actionData", JSON.stringify(dataFormViewResponse));
5630
- window.location.href = `/form/menu?model=${relation}`;
5631
- }
5632
- }, [isSuccess]);
5633
- (0, import_react16.useEffect)(() => {
5634
- if (domainMany2Many && !isLoadedData) {
5635
- setIsLoadedData(true);
5636
- }
5637
- }, [domainMany2Many]);
5638
5560
  const handleCreateNewOnPage = async () => {
5639
- try {
5640
- refetch();
5641
- } catch (error) {
5642
- console.log(error);
5643
- }
5644
5561
  };
5645
5562
  return {
5646
5563
  handleCreateNewOnPage,
5647
5564
  optionsObject,
5565
+ totalRows: dataResponse?.length ?? 0,
5648
5566
  rows,
5649
5567
  columns,
5568
+ onToggleColumnOptional,
5650
5569
  typeTable,
5651
- isDataLoading,
5652
- isDataResponseFetched,
5653
- isPlaceholderData
5570
+ isLoading,
5571
+ isFetched,
5572
+ isPlaceholderData,
5573
+ setPage,
5574
+ page,
5575
+ viewData: viewResponse,
5576
+ domain: domainMany2Many,
5577
+ setDomain: setDomainMany2Many,
5578
+ searchController: searchControllers
5654
5579
  };
5655
5580
  };
5656
5581
 
5657
5582
  // src/widget/basic/many2many-tags-field/controller.ts
5658
- var import_react17 = require("react");
5583
+ var import_react16 = require("react");
5659
5584
  var import_constants4 = require("@fctc/interface-logic/constants");
5660
- var import_environment8 = require("@fctc/interface-logic/environment");
5661
- var import_hooks15 = require("@fctc/interface-logic/hooks");
5662
- var import_utils8 = require("@fctc/interface-logic/utils");
5585
+ var import_environment7 = require("@fctc/interface-logic/environment");
5586
+ var import_hooks14 = require("@fctc/interface-logic/hooks");
5587
+ var import_utils7 = require("@fctc/interface-logic/utils");
5663
5588
  var many2manyTagsController = (props) => {
5664
5589
  const {
5665
5590
  relation,
@@ -5670,10 +5595,10 @@ var many2manyTagsController = (props) => {
5670
5595
  placeholderNoOption
5671
5596
  } = props;
5672
5597
  const isUser = relation === "res.users" || relation === "res.partner";
5673
- const env = (0, import_environment8.getEnv)();
5674
- const addtionalFields = optionsFields ? (0, import_utils8.evalJSONContext)(optionsFields) : null;
5675
- const domainObject = (0, import_react17.useMemo)(
5676
- () => (0, import_utils8.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues || {}))),
5598
+ const env = (0, import_environment7.getEnv)();
5599
+ const addtionalFields = optionsFields ? (0, import_utils7.evalJSONContext)(optionsFields) : null;
5600
+ const domainObject = (0, import_react16.useMemo)(
5601
+ () => (0, import_utils7.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues || {}))),
5677
5602
  [domain, formValues]
5678
5603
  );
5679
5604
  const data = {
@@ -5689,7 +5614,7 @@ var many2manyTagsController = (props) => {
5689
5614
  enabled: true,
5690
5615
  context: env.context
5691
5616
  };
5692
- const { data: dataOfSelection } = (0, import_hooks15.useGetSelection)({
5617
+ const { data: dataOfSelection } = (0, import_hooks14.useGetSelection)({
5693
5618
  data,
5694
5619
  queryKey: [`data_${relation}`, domainObject]
5695
5620
  });
@@ -5715,8 +5640,8 @@ var many2manyTagsController = (props) => {
5715
5640
  };
5716
5641
 
5717
5642
  // src/widget/basic/status-bar-field/controller.ts
5718
- var import_react18 = require("react");
5719
- var import_utils9 = require("@fctc/interface-logic/utils");
5643
+ var import_react17 = require("react");
5644
+ var import_utils8 = require("@fctc/interface-logic/utils");
5720
5645
  var durationController = (props) => {
5721
5646
  const { relation, domain, formValues, name, id, model, onRefetch } = props;
5722
5647
  const specification = {
@@ -5726,13 +5651,13 @@ var durationController = (props) => {
5726
5651
  };
5727
5652
  const { useGetListData: useGetListData3, useChangeStatus } = (0, provider_exports.useService)();
5728
5653
  const { env } = (0, provider_exports.useEnv)();
5729
- const [disabled, setDisabled] = (0, import_react18.useState)(false);
5730
- const [modelStatus, setModalStatus] = (0, import_react18.useState)(false);
5654
+ const [disabled, setDisabled] = (0, import_react17.useState)(false);
5655
+ const [modelStatus, setModalStatus] = (0, import_react17.useState)(false);
5731
5656
  const queryKey = [`data-status-duration`, specification];
5732
5657
  const listDataProps = {
5733
5658
  model: relation,
5734
5659
  specification,
5735
- domain: (0, import_utils9.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues))),
5660
+ domain: (0, import_utils8.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues))),
5736
5661
  limit: 10,
5737
5662
  offset: 0,
5738
5663
  fields: "",
@@ -5778,8 +5703,8 @@ var durationController = (props) => {
5778
5703
  };
5779
5704
 
5780
5705
  // src/widget/basic/priority-field/controller.ts
5781
- var import_hooks16 = require("@fctc/interface-logic/hooks");
5782
- var import_utils10 = require("@fctc/interface-logic/utils");
5706
+ var import_hooks15 = require("@fctc/interface-logic/hooks");
5707
+ var import_utils9 = require("@fctc/interface-logic/utils");
5783
5708
  var priorityFieldController = (props) => {
5784
5709
  const {
5785
5710
  value,
@@ -5794,11 +5719,11 @@ var priorityFieldController = (props) => {
5794
5719
  viewData,
5795
5720
  context
5796
5721
  } = props;
5797
- const _context = { ...(0, import_utils10.evalJSONContext)(actionData?.context) };
5722
+ const _context = { ...(0, import_utils9.evalJSONContext)(actionData?.context) };
5798
5723
  const contextObject = { ...context, ..._context };
5799
5724
  const defaultPriority = parseInt(value) + 1;
5800
5725
  const label = viewData?.models?.[model]?.[name ?? ""]?.string ?? name;
5801
- const { mutateAsync: fetchSave } = (0, import_hooks16.useSave)();
5726
+ const { mutateAsync: fetchSave } = (0, import_hooks15.useSave)();
5802
5727
  const savePriorities = async ({
5803
5728
  value: value2,
5804
5729
  resetPriority
@@ -5833,10 +5758,10 @@ var priorityFieldController = (props) => {
5833
5758
  };
5834
5759
 
5835
5760
  // src/widget/basic/download-file-field/controller.ts
5836
- var import_react19 = require("react");
5761
+ var import_react18 = require("react");
5837
5762
  var downloadFileController = () => {
5838
- const inputId = (0, import_react19.useId)();
5839
- const [file, setFile] = (0, import_react19.useState)(null);
5763
+ const inputId = (0, import_react18.useId)();
5764
+ const [file, setFile] = (0, import_react18.useState)(null);
5840
5765
  const handleFileChange = (e) => {
5841
5766
  setFile(e.target.files[0]);
5842
5767
  };
@@ -6768,13 +6693,13 @@ var dateFieldController = (props) => {
6768
6693
  };
6769
6694
 
6770
6695
  // src/widget/basic/copy-link-button/controller.ts
6771
- var import_react20 = require("react");
6772
- var import_utils11 = require("@fctc/interface-logic/utils");
6696
+ var import_react19 = require("react");
6697
+ var import_utils10 = require("@fctc/interface-logic/utils");
6773
6698
  var copyLinkButtonController = (props) => {
6774
6699
  const { value, defaultValue } = props;
6775
- const [isCopied, setIsCopied] = (0, import_react20.useState)(false);
6700
+ const [isCopied, setIsCopied] = (0, import_react19.useState)(false);
6776
6701
  const handleCopyToClipboard = async (value2) => {
6777
- await (0, import_utils11.copyTextToClipboard)(value2);
6702
+ await (0, import_utils10.copyTextToClipboard)(value2);
6778
6703
  setIsCopied(true);
6779
6704
  setTimeout(() => setIsCopied(false), 2e3);
6780
6705
  };
@@ -6787,12 +6712,12 @@ var copyLinkButtonController = (props) => {
6787
6712
  };
6788
6713
 
6789
6714
  // src/widget/basic/color-field/color-controller.ts
6790
- var import_utils12 = require("@fctc/interface-logic/utils");
6715
+ var import_utils11 = require("@fctc/interface-logic/utils");
6791
6716
  var colorFieldController = (props) => {
6792
6717
  const { value, isForm, name, formValues, idForm, model, actionData } = props;
6793
6718
  const { env } = (0, provider_exports.useEnv)();
6794
6719
  const { useSave: useSave3 } = (0, provider_exports.useService)();
6795
- const _context = { ...(0, import_utils12.evalJSONContext)(actionData?.context) || {} };
6720
+ const _context = { ...(0, import_utils11.evalJSONContext)(actionData?.context) || {} };
6796
6721
  const contextObject = { ...env.context, ..._context };
6797
6722
  const idDefault = isForm ? idForm : formValues?.id;
6798
6723
  const { mutate: onSave } = useSave3();
@@ -6820,16 +6745,16 @@ var colorFieldController = (props) => {
6820
6745
  };
6821
6746
 
6822
6747
  // src/widget/basic/binary-field/controller.ts
6823
- var import_react21 = require("react");
6824
- var import_utils13 = require("@fctc/interface-logic/utils");
6748
+ var import_react20 = require("react");
6749
+ var import_utils12 = require("@fctc/interface-logic/utils");
6825
6750
  var binaryFieldController = (props) => {
6826
6751
  const { name, methods, readonly = false, value } = props;
6827
- const inputId = (0, import_react21.useId)();
6828
- const [selectedImage, setSelectedImage] = (0, import_react21.useState)(null);
6829
- const [initialImage, setInitialImage] = (0, import_react21.useState)(value || null);
6830
- const [isInsideTable, setIsInsideTable] = (0, import_react21.useState)(false);
6752
+ const inputId = (0, import_react20.useId)();
6753
+ const [selectedImage, setSelectedImage] = (0, import_react20.useState)(null);
6754
+ const [initialImage, setInitialImage] = (0, import_react20.useState)(value || null);
6755
+ const [isInsideTable, setIsInsideTable] = (0, import_react20.useState)(false);
6831
6756
  const { setValue } = methods;
6832
- const binaryRef = (0, import_react21.useRef)(null);
6757
+ const binaryRef = (0, import_react20.useRef)(null);
6833
6758
  const convertUrlToBase64 = async (url) => {
6834
6759
  try {
6835
6760
  const response = await fetch(url);
@@ -6878,11 +6803,11 @@ var binaryFieldController = (props) => {
6878
6803
  };
6879
6804
  const checkIsImageLink = (url) => {
6880
6805
  const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i;
6881
- return imageExtensions.test(url) || (0, import_utils13.isBase64Image)(url) || isBlobUrl(url);
6806
+ return imageExtensions.test(url) || (0, import_utils12.isBase64Image)(url) || isBlobUrl(url);
6882
6807
  };
6883
6808
  const getImageBase64WithMimeType = (base64) => {
6884
6809
  if (typeof base64 !== "string" || base64.length < 10) return null;
6885
- if ((0, import_utils13.isBase64Image)(base64)) return base64;
6810
+ if ((0, import_utils12.isBase64Image)(base64)) return base64;
6886
6811
  let mimeType = null;
6887
6812
  if (base64.startsWith("iVBORw0KGgo")) mimeType = "image/png";
6888
6813
  else if (base64.startsWith("/9j/")) mimeType = "image/jpeg";
@@ -6891,14 +6816,14 @@ var binaryFieldController = (props) => {
6891
6816
  else if (base64.startsWith("UklGR")) mimeType = "image/webp";
6892
6817
  return mimeType ? `data:${mimeType};base64,${base64}` : null;
6893
6818
  };
6894
- (0, import_react21.useEffect)(() => {
6819
+ (0, import_react20.useEffect)(() => {
6895
6820
  return () => {
6896
6821
  if (selectedImage) {
6897
6822
  URL.revokeObjectURL(selectedImage);
6898
6823
  }
6899
6824
  };
6900
6825
  }, [selectedImage]);
6901
- (0, import_react21.useEffect)(() => {
6826
+ (0, import_react20.useEffect)(() => {
6902
6827
  if (binaryRef.current) {
6903
6828
  const isInsideTable2 = !!binaryRef.current.closest("table");
6904
6829
  setIsInsideTable(isInsideTable2);
@@ -6918,8 +6843,8 @@ var binaryFieldController = (props) => {
6918
6843
  };
6919
6844
 
6920
6845
  // src/widget/advance/table/table-body/controller.ts
6921
- var import_store9 = require("@fctc/interface-logic/store");
6922
- var import_react22 = require("react");
6846
+ var import_store8 = require("@fctc/interface-logic/store");
6847
+ var import_react21 = require("react");
6923
6848
  var tableBodyController = (props) => {
6924
6849
  const {
6925
6850
  checkedAll,
@@ -6931,8 +6856,8 @@ var tableBodyController = (props) => {
6931
6856
  selectedRowKeysRef,
6932
6857
  onClickRow
6933
6858
  } = props;
6934
- const appDispatch = (0, import_store9.useAppDispatch)();
6935
- const checked = (0, import_react22.useMemo)(() => {
6859
+ const appDispatch = (0, import_store8.useAppDispatch)();
6860
+ const checked = (0, import_react21.useMemo)(() => {
6936
6861
  if (!row?.id) return false;
6937
6862
  if (selectedRowKeys?.includes(row.id)) {
6938
6863
  return true;
@@ -6948,12 +6873,12 @@ var tableBodyController = (props) => {
6948
6873
  }
6949
6874
  const newSelectedRowKeys = selectedRowKeys?.includes(row.id) ? selectedRowKeys?.filter((key) => key !== row.id) : [...selectedRowKeys, row.id];
6950
6875
  console.log("newSelectedRowKeys", newSelectedRowKeys);
6951
- appDispatch((0, import_store9.setSelectedRowKeys)(newSelectedRowKeys));
6876
+ appDispatch((0, import_store8.setSelectedRowKeys)(newSelectedRowKeys));
6952
6877
  };
6953
6878
  const handleClickRow = (col, row2) => {
6954
6879
  onClickRow(col, row2);
6955
6880
  };
6956
- (0, import_react22.useEffect)(() => {
6881
+ (0, import_react21.useEffect)(() => {
6957
6882
  if (!row?.id) return;
6958
6883
  if (isAutoSelect) {
6959
6884
  if (checkboxRef?.current === "uncheck") {
@@ -6961,17 +6886,17 @@ var tableBodyController = (props) => {
6961
6886
  (id) => id !== row.id
6962
6887
  );
6963
6888
  selectedRowKeysRef.current = filtered;
6964
- appDispatch((0, import_store9.setSelectedRowKeys)(filtered));
6889
+ appDispatch((0, import_store8.setSelectedRowKeys)(filtered));
6965
6890
  } else {
6966
6891
  const unique = Array.from(
6967
6892
  /* @__PURE__ */ new Set([...selectedRowKeysRef?.current, row?.id])
6968
6893
  );
6969
6894
  selectedRowKeysRef.current = unique;
6970
- appDispatch((0, import_store9.setSelectedRowKeys)(unique));
6895
+ appDispatch((0, import_store8.setSelectedRowKeys)(unique));
6971
6896
  }
6972
6897
  }
6973
6898
  }, [isAutoSelect]);
6974
- (0, import_react22.useEffect)(() => {
6899
+ (0, import_react21.useEffect)(() => {
6975
6900
  if (!checkedAll) {
6976
6901
  checkboxRef.current = "enabled";
6977
6902
  false;
@@ -6985,35 +6910,35 @@ var tableBodyController = (props) => {
6985
6910
  };
6986
6911
 
6987
6912
  // src/widget/advance/table/table-head/controller.ts
6988
- var import_store10 = require("@fctc/interface-logic/store");
6913
+ var import_store9 = require("@fctc/interface-logic/store");
6989
6914
  var tableHeadController = (props) => {
6990
6915
  const { typeTable, rows, selectedRowKeysRef } = props;
6991
- const appDispatch = (0, import_store10.useAppDispatch)();
6992
- const { groupByDomain } = (0, import_store10.useAppSelector)(import_store10.selectSearch);
6916
+ const appDispatch = (0, import_store9.useAppDispatch)();
6917
+ const { groupByDomain } = (0, import_store9.useAppSelector)(import_store9.selectSearch);
6993
6918
  const handleCheckBoxAll = (event) => {
6994
6919
  if (event?.target?.checked && typeTable === "list") {
6995
6920
  const allRowKeys = Array.isArray(rows) ? rows.map((record) => record?.id) : [];
6996
- appDispatch((0, import_store10.setSelectedRowKeys)(allRowKeys));
6921
+ appDispatch((0, import_store9.setSelectedRowKeys)(allRowKeys));
6997
6922
  } else if (event?.target?.checked && typeTable === "group") {
6998
6923
  const rowsIDs = document.querySelectorAll("tr[data-row-id]");
6999
6924
  const ids = Array.from(rowsIDs)?.map(
7000
6925
  (row) => Number(row?.getAttribute("data-row-id"))
7001
6926
  );
7002
6927
  if (ids?.length > 0) {
7003
- appDispatch((0, import_store10.setSelectedRowKeys)(ids));
6928
+ appDispatch((0, import_store9.setSelectedRowKeys)(ids));
7004
6929
  } else {
7005
6930
  const sum = countSum(
7006
6931
  rows,
7007
6932
  typeof groupByDomain === "object" ? groupByDomain?.contexts?.[0]?.group_by : void 0
7008
6933
  );
7009
6934
  const keys = Array.from({ length: sum }, (_) => void 0);
7010
- appDispatch((0, import_store10.setSelectedRowKeys)(keys));
6935
+ appDispatch((0, import_store9.setSelectedRowKeys)(keys));
7011
6936
  }
7012
6937
  if (selectedRowKeysRef) {
7013
6938
  selectedRowKeysRef.current = [];
7014
6939
  }
7015
6940
  } else {
7016
- appDispatch((0, import_store10.setSelectedRowKeys)([]));
6941
+ appDispatch((0, import_store9.setSelectedRowKeys)([]));
7017
6942
  }
7018
6943
  };
7019
6944
  return {
@@ -7022,12 +6947,12 @@ var tableHeadController = (props) => {
7022
6947
  };
7023
6948
 
7024
6949
  // src/widget/advance/table/table-view/controller.ts
7025
- var import_react23 = require("react");
7026
- var import_store11 = require("@fctc/interface-logic/store");
7027
- var import_utils14 = require("@fctc/interface-logic/utils");
6950
+ var import_react22 = require("react");
6951
+ var import_store10 = require("@fctc/interface-logic/store");
6952
+ var import_utils13 = require("@fctc/interface-logic/utils");
7028
6953
  var tableController = ({ data }) => {
7029
- const [rows, setRows] = (0, import_react23.useState)(data.records || []);
7030
- const [columns, setColumns] = (0, import_react23.useState)([]);
6954
+ const [rows, setRows] = (0, import_react22.useState)(data.records || []);
6955
+ const [columns, setColumns] = (0, import_react22.useState)([]);
7031
6956
  const dataModelFields = data.fields?.map((field) => {
7032
6957
  return {
7033
6958
  ...data.dataModel?.[field?.name],
@@ -7055,14 +6980,14 @@ var tableController = ({ data }) => {
7055
6980
  return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
7056
6981
  });
7057
6982
  };
7058
- (0, import_react23.useEffect)(() => {
6983
+ (0, import_react22.useEffect)(() => {
7059
6984
  setRows(transformData(data.records || null));
7060
6985
  }, [data.records]);
7061
6986
  const handleGetColumns = () => {
7062
6987
  let cols = [];
7063
6988
  try {
7064
6989
  cols = mergeFields?.filter((item) => {
7065
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils14.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_utils14.domainHelper.matchDomains(data.context, item?.invisible) : false);
6990
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils13.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_utils13.domainHelper.matchDomains(data.context, item?.invisible) : false);
7066
6991
  })?.map((field) => {
7067
6992
  return {
7068
6993
  name: field?.name,
@@ -7076,7 +7001,7 @@ var tableController = ({ data }) => {
7076
7001
  }
7077
7002
  return cols;
7078
7003
  };
7079
- (0, import_react23.useEffect)(() => {
7004
+ (0, import_react22.useEffect)(() => {
7080
7005
  const columns2 = handleGetColumns();
7081
7006
  setColumns(columns2);
7082
7007
  }, [data.records]);
@@ -7101,9 +7026,9 @@ var tableController = ({ data }) => {
7101
7026
  };
7102
7027
 
7103
7028
  // src/widget/advance/table/table-group/controller.ts
7104
- var import_react24 = require("react");
7105
- var import_hooks17 = require("@fctc/interface-logic/hooks");
7106
- var import_store12 = require("@fctc/interface-logic/store");
7029
+ var import_react23 = require("react");
7030
+ var import_hooks16 = require("@fctc/interface-logic/hooks");
7031
+ var import_store11 = require("@fctc/interface-logic/store");
7107
7032
 
7108
7033
  // src/environment.ts
7109
7034
  var environment_exports = {};
@@ -7130,18 +7055,18 @@ var tableGroupController = (props) => {
7130
7055
  setIsAutoSelect,
7131
7056
  selectedRowKeysRef
7132
7057
  } = props;
7133
- const [pageGroup, setPageGroup] = (0, import_react24.useState)(0);
7134
- const { groupByDomain, selectedTags } = (0, import_store12.useAppSelector)(import_store12.selectSearch);
7135
- const { selectedRowKeys } = (0, import_store12.useAppSelector)(import_store12.selectList);
7136
- const appDispatch = (0, import_store12.useAppDispatch)();
7137
- const { toDataJS } = (0, import_hooks17.useOdooDataTransform)();
7058
+ const [pageGroup, setPageGroup] = (0, import_react23.useState)(0);
7059
+ const { groupByDomain, selectedTags } = (0, import_store11.useAppSelector)(import_store11.selectSearch);
7060
+ const { selectedRowKeys } = (0, import_store11.useAppSelector)(import_store11.selectList);
7061
+ const appDispatch = (0, import_store11.useAppDispatch)();
7062
+ const { toDataJS } = (0, import_hooks16.useOdooDataTransform)();
7138
7063
  const initVal = toDataJS(row, viewData, model);
7139
- const [isShowGroup, setIsShowGroup] = (0, import_react24.useState)(false);
7140
- const [colEmptyGroup, setColEmptyGroup] = (0, import_react24.useState)({
7064
+ const [isShowGroup, setIsShowGroup] = (0, import_react23.useState)(false);
7065
+ const [colEmptyGroup, setColEmptyGroup] = (0, import_react23.useState)({
7141
7066
  fromStart: 1,
7142
7067
  fromEnd: 1
7143
7068
  });
7144
- const processedData = (0, import_react24.useMemo)(() => {
7069
+ const processedData = (0, import_react23.useMemo)(() => {
7145
7070
  const calculateColSpanEmpty = () => {
7146
7071
  const startIndex = columns.findIndex(
7147
7072
  (col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
@@ -7156,7 +7081,7 @@ var tableGroupController = (props) => {
7156
7081
  };
7157
7082
  return calculateColSpanEmpty();
7158
7083
  }, [columns, row]);
7159
- const shouldFetchData = (0, import_react24.useMemo)(() => {
7084
+ const shouldFetchData = (0, import_react23.useMemo)(() => {
7160
7085
  return !!isShowGroup;
7161
7086
  }, [isShowGroup]);
7162
7087
  const enabled = shouldFetchData && !!processedData;
@@ -7181,7 +7106,7 @@ var tableGroupController = (props) => {
7181
7106
  isPlaceholderData,
7182
7107
  isLoading,
7183
7108
  isFetching
7184
- } = (0, import_hooks17.useGetListData)(listDataProps, queryKey, enabled);
7109
+ } = (0, import_hooks16.useGetListData)(listDataProps, queryKey, enabled);
7185
7110
  const {
7186
7111
  columns: columnsGroup,
7187
7112
  rows: rowsGroup,
@@ -7196,7 +7121,7 @@ var tableGroupController = (props) => {
7196
7121
  }
7197
7122
  });
7198
7123
  const leftPadding = level > 1 ? level * 8 + "px" : "0px";
7199
- (0, import_react24.useEffect)(() => {
7124
+ (0, import_react23.useEffect)(() => {
7200
7125
  if (isShowGroup && selectedTags?.length > 0) {
7201
7126
  setIsShowGroup(false);
7202
7127
  }
@@ -7219,24 +7144,24 @@ var tableGroupController = (props) => {
7219
7144
  const filteredIds = selectedRowKeys.filter(
7220
7145
  (id) => !ids.includes(id)
7221
7146
  );
7222
- appDispatch((0, import_store12.setSelectedRowKeys)(filteredIds));
7147
+ appDispatch((0, import_store11.setSelectedRowKeys)(filteredIds));
7223
7148
  } else if (!isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && checkedAll && !allIdsNull && isQueryFetched) {
7224
7149
  const clonedKeys = [...selectedRowKeys];
7225
- appDispatch((0, import_store12.setSelectedRowKeys)([...clonedKeys, -1]));
7226
- setTimeout(() => appDispatch((0, import_store12.setSelectedRowKeys)(clonedKeys)), 500);
7150
+ appDispatch((0, import_store11.setSelectedRowKeys)([...clonedKeys, -1]));
7151
+ setTimeout(() => appDispatch((0, import_store11.setSelectedRowKeys)(clonedKeys)), 500);
7227
7152
  } else if (isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && !checkedAll && !allIdsNull) {
7228
7153
  const filteredKeys = selectedRowKeys.filter((id) => id > -1);
7229
- appDispatch((0, import_store12.setSelectedRowKeys)(filteredKeys));
7154
+ appDispatch((0, import_store11.setSelectedRowKeys)(filteredKeys));
7230
7155
  }
7231
7156
  toggleShowGroup();
7232
7157
  };
7233
- (0, import_react24.useEffect)(() => {
7158
+ (0, import_react23.useEffect)(() => {
7234
7159
  if (!isQueryFetched || !rowsGroup || !checkedAll || allIdsNull || typeTableGroup === "group") {
7235
7160
  return;
7236
7161
  }
7237
7162
  const clonedKeys = [...selectedRowKeys];
7238
- (0, import_store12.setSelectedRowKeys)([...clonedKeys, -1]);
7239
- setTimeout(() => (0, import_store12.setSelectedRowKeys)(clonedKeys), 500);
7163
+ (0, import_store11.setSelectedRowKeys)([...clonedKeys, -1]);
7164
+ setTimeout(() => (0, import_store11.setSelectedRowKeys)(clonedKeys), 500);
7240
7165
  }, [isQueryFetched]);
7241
7166
  return {
7242
7167
  handleExpandChildGroup,
@@ -7271,25 +7196,26 @@ var tableGroupController = (props) => {
7271
7196
 
7272
7197
  // src/widget/advance/search/controller.ts
7273
7198
  var import_constants5 = require("@fctc/interface-logic/constants");
7274
- var import_utils15 = require("@fctc/interface-logic/utils");
7199
+ var import_utils14 = require("@fctc/interface-logic/utils");
7275
7200
  var import_moment2 = __toESM(require_moment());
7276
- var import_react25 = require("react");
7201
+ var import_react24 = require("react");
7277
7202
  var searchController = ({
7278
7203
  viewData,
7279
- actionData,
7280
- fieldsList,
7281
- contextSearch,
7282
- setSearchMap,
7283
- searchMap
7204
+ model,
7205
+ domain,
7206
+ context,
7207
+ fieldsList
7284
7208
  }) => {
7285
- const [filterBy, setFilterBy] = (0, import_react25.useState)(null);
7286
- const [searchBy, setSearchBy] = (0, import_react25.useState)(null);
7287
- const [groupBy, setGroupBy] = (0, import_react25.useState)(null);
7288
- const [selectedTags, setSelectedTags] = (0, import_react25.useState)(null);
7289
- const [searchString, setSearchString] = (0, import_react25.useState)("");
7290
- const domainAction = actionData?.domain ? Array.isArray(actionData?.domain) ? [...actionData?.domain] : (0, import_utils15.evalJSONDomain)(actionData?.domain, contextSearch) : [];
7291
- const aid = actionData?.id;
7292
- const model = actionData?.res_model;
7209
+ const { env } = (0, provider_exports.useEnv)();
7210
+ const [filterBy, setFilterBy] = (0, import_react24.useState)(null);
7211
+ const [searchBy, setSearchBy] = (0, import_react24.useState)(null);
7212
+ const [groupBy, setGroupBy] = (0, import_react24.useState)(null);
7213
+ const [selectedTags, setSelectedTags] = (0, import_react24.useState)(null);
7214
+ const [searchString, setSearchString] = (0, import_react24.useState)("");
7215
+ const [searchMap, setSearchMap] = (0, import_react24.useState)({});
7216
+ const actionContext = typeof context === "string" ? (0, import_utils14.evalJSONContext)(context) : context;
7217
+ const contextSearch = { ...env.context, ...actionContext };
7218
+ const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils14.evalJSONDomain)(domain, contextSearch) : [];
7293
7219
  const clearSearch = () => {
7294
7220
  setFilterBy([]);
7295
7221
  setGroupBy([]);
@@ -7304,7 +7230,7 @@ var searchController = ({
7304
7230
  const dataModel = viewData?.models?.[model];
7305
7231
  const searchViews = viewData?.views?.search;
7306
7232
  const searchByItems = searchViews?.search_by?.filter(
7307
- (item) => !import_utils15.domainHelper.matchDomains(contextSearch, item.invisible)
7233
+ (item) => !import_utils14.domainHelper.matchDomains(contextSearch, item.invisible)
7308
7234
  )?.map(
7309
7235
  ({ string, name, filter_domain, operator, widget }, index) => ({
7310
7236
  dataIndex: index,
@@ -7317,10 +7243,10 @@ var searchController = ({
7317
7243
  })
7318
7244
  );
7319
7245
  const filterByItems = searchViews?.filter_by.filter((item) => {
7320
- return !import_utils15.domainHelper.matchDomains(contextSearch, item?.invisible);
7246
+ return !import_utils14.domainHelper.matchDomains(contextSearch, item?.invisible);
7321
7247
  })?.map((item) => ({ ...item, active: false }));
7322
7248
  const groupByItems = searchViews?.group_by.filter(
7323
- (item) => !import_utils15.domainHelper.matchDomains(contextSearch, item?.invisible)
7249
+ (item) => !import_utils14.domainHelper.matchDomains(contextSearch, item?.invisible)
7324
7250
  ).map((item) => ({
7325
7251
  ...item,
7326
7252
  string: item.string ?? viewData?.models?.[model]?.[item?.name?.split("group_by_")?.[1]]?.string
@@ -7333,10 +7259,9 @@ var searchController = ({
7333
7259
  }
7334
7260
  }
7335
7261
  };
7336
- (0, import_react25.useEffect)(() => {
7337
- clearSearch();
7262
+ (0, import_react24.useEffect)(() => {
7338
7263
  fetchData();
7339
- }, [aid, model, viewData]);
7264
+ }, [model, viewData]);
7340
7265
  const onChangeSearchInput = (search_string) => {
7341
7266
  setSearchString(search_string);
7342
7267
  };
@@ -7373,50 +7298,51 @@ var searchController = ({
7373
7298
  };
7374
7299
  const formatDomain = () => {
7375
7300
  if (domainAction) {
7376
- const domain = [];
7301
+ console.log("domainAction", domainAction);
7302
+ const domain2 = [];
7377
7303
  if (domainAction?.length > 0) {
7378
7304
  if (Object.keys(searchMap).length > 0) {
7379
- domain.push("&");
7305
+ domain2.push("&");
7380
7306
  }
7381
7307
  domainAction.forEach((domainItem) => {
7382
- domain.push(domainItem);
7308
+ domain2.push(domainItem);
7383
7309
  });
7384
7310
  }
7385
7311
  Object.keys(searchMap).forEach((key, keyIndex, keys) => {
7386
7312
  if (!key?.includes(import_constants5.SearchType.GROUP)) {
7387
7313
  if (keys.length > 1 && keyIndex < keys.length - 1) {
7388
- domain.push("&");
7314
+ domain2.push("&");
7389
7315
  }
7390
7316
  const valuesOfKey = searchMap[key];
7391
7317
  valuesOfKey.forEach((value, index) => {
7392
7318
  if (index < valuesOfKey.length - 1) {
7393
- domain.push("|");
7319
+ domain2.push("|");
7394
7320
  }
7395
7321
  if (value.domain) {
7396
- domain.push(...value.domain);
7322
+ domain2.push(...value.domain);
7397
7323
  return;
7398
7324
  }
7399
7325
  let valueDomainItem = value?.value;
7400
7326
  if (value?.modelType === "date") {
7401
- valueDomainItem = (0, import_utils15.validateAndParseDate)(value?.value);
7327
+ valueDomainItem = (0, import_utils14.validateAndParseDate)(value?.value);
7402
7328
  } else if (value?.modelType === "datetime") {
7403
7329
  if (value?.operator === "<=" || value?.operator === "<") {
7404
- const parsedDate = (0, import_utils15.validateAndParseDate)(value?.value, true);
7330
+ const parsedDate = (0, import_utils14.validateAndParseDate)(value?.value, true);
7405
7331
  const hasTime = (0, import_moment2.default)(value?.value).format("HH:mm:ss") !== "00:00:00";
7406
7332
  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");
7407
7333
  } else {
7408
- valueDomainItem = (0, import_utils15.validateAndParseDate)(value?.value, true);
7334
+ valueDomainItem = (0, import_utils14.validateAndParseDate)(value?.value, true);
7409
7335
  }
7410
7336
  }
7411
7337
  const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
7412
- domain.push([value.name, operator, valueDomainItem]);
7338
+ domain2.push([value.name, operator, valueDomainItem]);
7413
7339
  });
7414
7340
  }
7415
7341
  });
7416
- return [...domain];
7342
+ return [...domain2];
7417
7343
  }
7418
7344
  };
7419
- const setTagSearch = (0, import_react25.useCallback)(
7345
+ const setTagSearch = (0, import_react24.useCallback)(
7420
7346
  (updatedMap) => {
7421
7347
  if (!updatedMap) return;
7422
7348
  const tagsSearch = Object.entries(updatedMap).map(
@@ -7444,16 +7370,16 @@ var searchController = ({
7444
7370
  const contexts = [];
7445
7371
  let groupValues = [];
7446
7372
  objValues?.forEach((objValue) => {
7447
- const { context, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7373
+ const { context: context2, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7448
7374
  const indexAppend = groupIndex2 != null ? groupIndex2 : viewData?.views?.search?.filters_by?.length ?? 0;
7449
7375
  contexts.push(
7450
- ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({ group_by: item })) : [context]
7376
+ ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({ group_by: item })) : [context2]
7451
7377
  );
7452
7378
  groupValues[indexAppend] = {
7453
7379
  contexts: [
7454
- ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({
7380
+ ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({
7455
7381
  group_by: item
7456
- })) : [context]
7382
+ })) : [context2]
7457
7383
  ],
7458
7384
  strings: isDefault ? [value] : [...groupValues[indexAppend]?.strings ?? [], value]
7459
7385
  };
@@ -7479,40 +7405,39 @@ var searchController = ({
7479
7405
  },
7480
7406
  [searchMap]
7481
7407
  );
7482
- (0, import_react25.useEffect)(() => {
7483
- setSelectedTags(null);
7408
+ (0, import_react24.useEffect)(() => {
7484
7409
  setTagSearch(searchMap);
7485
7410
  }, [searchMap]);
7486
7411
  const handleAddTagSearch = (tag) => {
7487
7412
  const {
7488
- domain,
7413
+ domain: domain2,
7489
7414
  groupIndex,
7490
7415
  value,
7491
7416
  type,
7492
7417
  title,
7493
- context,
7418
+ context: context2,
7494
7419
  active,
7495
7420
  dataIndex
7496
7421
  } = tag;
7497
- const domainFormat = new import_utils15.domainHelper.Domain(domain);
7422
+ const domainFormat = new import_utils14.domainHelper.Domain(domain2);
7498
7423
  if (type === import_constants5.SearchType.FILTER) {
7499
7424
  addSearchItems(`${import_constants5.SearchType.FILTER}_${groupIndex}`, {
7500
7425
  ...tag,
7501
- domain: domain ? domainFormat.toList(context) : null
7426
+ domain: domain2 ? domainFormat.toList(context2) : null
7502
7427
  });
7503
7428
  } else if (type === import_constants5.SearchType.SEARCH) {
7504
7429
  addSearchItems(`${import_constants5.SearchType.SEARCH}_${String(dataIndex)}`, {
7505
7430
  ...tag,
7506
- domain: domain ? domainFormat.toList({
7507
- ...context,
7431
+ domain: domain2 ? domainFormat.toList({
7432
+ ...context2,
7508
7433
  self: value
7509
7434
  }) : null
7510
7435
  });
7511
7436
  } else if (type === import_constants5.SearchType.GROUP) {
7512
7437
  addSearchItems(`${import_constants5.SearchType.GROUP}`, {
7513
7438
  ...tag,
7514
- domain: domain ? domainFormat.toList({
7515
- context,
7439
+ domain: domain2 ? domainFormat.toList({
7440
+ context: context2,
7516
7441
  self: value
7517
7442
  }) : null
7518
7443
  });
@@ -7532,7 +7457,8 @@ var searchController = ({
7532
7457
  removeSearchItems,
7533
7458
  onSearchString: onChangeSearchInput,
7534
7459
  handleAddTagSearch,
7535
- domain: formatDomain()
7460
+ domain: formatDomain(),
7461
+ context: contextSearch
7536
7462
  };
7537
7463
  };
7538
7464
 
@@ -7611,7 +7537,6 @@ __reExport(index_exports, types_exports, module.exports);
7611
7537
  useGetRowIds,
7612
7538
  useListData,
7613
7539
  useMenu,
7614
- useMenuItem,
7615
7540
  useProfile,
7616
7541
  useSelectionState,
7617
7542
  useStorageState,