@fctc/widget-logic 2.2.3 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/widget.js CHANGED
@@ -4049,7 +4049,6 @@ __export(widget_exports, {
4049
4049
  priorityFieldController: () => priorityFieldController,
4050
4050
  searchController: () => searchController,
4051
4051
  statusDropdownController: () => statusDropdownController,
4052
- tableBodyController: () => tableBodyController,
4053
4052
  tableController: () => tableController,
4054
4053
  tableGroupController: () => tableGroupController,
4055
4054
  tableHeadController: () => tableHeadController
@@ -5015,6 +5014,7 @@ var many2oneFieldController = (props) => {
5015
5014
  options: fieldOptions,
5016
5015
  showDetail
5017
5016
  } = props;
5017
+ const { env } = (0, provider_exports.useEnv)();
5018
5018
  const [options, setOptions] = (0, import_react15.useState)([]);
5019
5019
  const [inputValue, setInputValue] = (0, import_react15.useState)("");
5020
5020
  const [debouncedInputValue] = useDebounce(inputValue, 1e3);
@@ -5024,15 +5024,14 @@ var many2oneFieldController = (props) => {
5024
5024
  const [domainObject, setDomainObject] = (0, import_react15.useState)(null);
5025
5025
  const actionData = sessionStorageUtils.getActionData();
5026
5026
  const { menuList } = (0, store_exports.useAppSelector)(store_exports.selectNavbar);
5027
- const { context } = (0, store_exports.useAppSelector)(store_exports.selectEnv);
5028
5027
  const initValue = methods?.getValues(name);
5029
5028
  const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
5030
5029
  const contextObject = {
5031
5030
  ...(0, utils_exports.evalJSONContext)(actionData?.context) || {},
5032
5031
  ...fieldContext,
5033
- ...context
5032
+ ...env?.context
5034
5033
  };
5035
- const { useGetSelection: useGetSelection3 } = (0, provider_exports.useService)();
5034
+ const { useGetSelection: useGetSelection2 } = (0, provider_exports.useService)();
5036
5035
  const data = {
5037
5036
  model: relation,
5038
5037
  domain: domainObject,
@@ -5048,7 +5047,7 @@ var many2oneFieldController = (props) => {
5048
5047
  data: dataOfSelection,
5049
5048
  refetch,
5050
5049
  isFetching
5051
- } = useGetSelection3({
5050
+ } = useGetSelection2({
5052
5051
  data,
5053
5052
  queryKey,
5054
5053
  enabled: false
@@ -5202,52 +5201,49 @@ var many2oneButtonController = (props) => {
5202
5201
 
5203
5202
  // src/widget/basic/many2many-field/controller.ts
5204
5203
  var import_react16 = require("react");
5205
- var import_store8 = require("@fctc/interface-logic/store");
5206
5204
  var import_utils7 = require("@fctc/interface-logic/utils");
5207
5205
  var many2manyFieldController = (props) => {
5208
5206
  const {
5209
5207
  relation,
5210
5208
  domain,
5211
5209
  context,
5210
+ options,
5212
5211
  tab,
5213
- model,
5214
- aid,
5215
- setSelectedRowKeys: setSelectedRowKeys4,
5216
- fields,
5217
- setFields,
5212
+ setSelectedRowKeys: setSelectedRowKeys3,
5218
5213
  groupByDomain,
5219
- page,
5220
- options,
5221
- sessionStorageUtils
5214
+ enabled: enabledCallAPI,
5215
+ actionData
5222
5216
  } = props;
5223
- const appDispatch = (0, import_store8.useAppDispatch)();
5224
- const actionData = sessionStorageUtils.getActionData();
5225
- const [debouncedPage] = useDebounce(page, 500);
5226
- const [order, setOrder] = (0, import_react16.useState)();
5227
- const [isLoadedData, setIsLoadedData] = (0, import_react16.useState)(false);
5228
- const [domainMany2Many, setDomainMany2Many] = (0, import_react16.useState)(domain);
5229
5217
  const { env } = (0, provider_exports.useEnv)();
5230
5218
  const { useGetView: useGetView2, useGetListData: useGetListData3, useGetFormView } = (0, provider_exports.useService)();
5219
+ const [order, setOrder] = (0, import_react16.useState)();
5220
+ const [page, setPage] = (0, import_react16.useState)(0);
5221
+ const [domainMany2Many, setDomainMany2Many] = (0, import_react16.useState)(null);
5222
+ const [debouncedPage] = useDebounce(page, 500);
5223
+ const contextObject = {
5224
+ ...env.context,
5225
+ ...context || {}
5226
+ };
5231
5227
  const viewParams = {
5232
5228
  model: relation,
5233
5229
  views: [
5234
5230
  [false, "list"],
5235
5231
  [false, "search"]
5236
5232
  ],
5237
- context
5233
+ context: contextObject
5238
5234
  };
5239
- const { data: viewResponse } = useGetView2(viewParams, actionData);
5235
+ const { data: viewResponse } = useGetView2(viewParams, enabledCallAPI);
5240
5236
  const baseModel = (0, import_react16.useMemo)(
5241
5237
  () => ({
5242
5238
  name: String(relation),
5243
5239
  view: viewResponse || {},
5244
- actContext: context,
5240
+ actContext: contextObject,
5245
5241
  fields: [
5246
5242
  ...Object.values(viewResponse?.views?.list?.fields ?? {}),
5247
5243
  ...tab?.fields ? tab.fields : []
5248
5244
  ]
5249
5245
  }),
5250
- [model, viewResponse]
5246
+ [relation, viewResponse]
5251
5247
  );
5252
5248
  const initModel = (0, hooks_exports.useModel)();
5253
5249
  const modelInstance = (0, import_react16.useMemo)(() => {
@@ -5266,26 +5262,15 @@ var many2manyFieldController = (props) => {
5266
5262
  const optionsObject = tab?.options ? (0, import_utils7.evalJSONContext)(tab?.options) : (options ? (0, import_utils7.evalJSONContext)(options) : {}) || {};
5267
5263
  const fetchData = async () => {
5268
5264
  try {
5269
- setDomainMany2Many(domain);
5270
- appDispatch((0, import_store8.setFirstDomain)(domain));
5271
- appDispatch((0, import_store8.setViewDataStore)(viewResponse));
5272
- const modalData = viewResponse?.views?.list?.fields.map((field) => ({
5273
- ...viewResponse?.models?.[String(model)]?.[field?.name],
5274
- ...field
5275
- }));
5276
- if (!fields?.[`${aid}_${relation}_popupmany2many`] && modalData) {
5277
- setFields({
5278
- ...fields,
5279
- [`${aid}_${relation}_popupmany2many`]: modalData
5280
- });
5281
- }
5282
- appDispatch((0, import_store8.setPage)(0));
5265
+ const domainParse = typeof domain === "string" ? (0, import_utils7.evalJSONDomain)(domain, contextObject) : Array.isArray(domain) ? domain : [];
5266
+ setDomainMany2Many(domainParse);
5267
+ setPage(0);
5283
5268
  } catch (err) {
5284
5269
  console.log(err);
5285
5270
  }
5286
5271
  };
5287
5272
  const queryKey = [
5288
- `view-${relation}-${aid}`,
5273
+ `view-${relation}`,
5289
5274
  specification,
5290
5275
  domainMany2Many,
5291
5276
  debouncedPage,
@@ -5298,16 +5283,16 @@ var many2manyFieldController = (props) => {
5298
5283
  domain: domainMany2Many,
5299
5284
  offset: debouncedPage * 10,
5300
5285
  limit: 10,
5301
- context,
5286
+ context: contextObject,
5302
5287
  fields: groupByDomain?.fields,
5303
5288
  groupby: [groupByDomain?.contexts[0]?.group_by],
5304
5289
  sort: order ? order : default_order ? (0, import_utils7.formatSortingString)(default_order) : ""
5305
5290
  };
5306
- const enabled = isLoadedData && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5291
+ const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5307
5292
  const {
5308
5293
  data: dataResponse,
5309
- isLoading: isDataLoading,
5310
- isFetched: isDataResponseFetched,
5294
+ isLoading,
5295
+ isFetched,
5311
5296
  isPlaceholderData
5312
5297
  } = useGetListData3(data, queryKey, enabled);
5313
5298
  (0, import_react16.useEffect)(() => {
@@ -5315,75 +5300,56 @@ var many2manyFieldController = (props) => {
5315
5300
  fetchData();
5316
5301
  }
5317
5302
  return () => {
5318
- appDispatch((0, import_store8.setGroupByDomain)(null));
5319
- setFields((prevFields) => ({
5320
- ...prevFields,
5321
- [`${aid}_${relation}_popupmany2many`]: null
5322
- }));
5323
- appDispatch((0, import_store8.setPage)(0));
5324
- setSelectedRowKeys4([]);
5303
+ setPage(0);
5304
+ setSelectedRowKeys3([]);
5325
5305
  setDomainMany2Many(null);
5326
- setIsLoadedData(false);
5327
5306
  };
5328
5307
  }, [viewResponse]);
5329
- const { rows, columns, typeTable } = tableController({
5308
+ const { rows, columns, typeTable, onToggleColumnOptional } = tableController({
5330
5309
  data: {
5331
- fields: fields?.[`${aid}_${relation}_popupmany2many`] || viewResponse?.views?.list?.fields,
5310
+ fields: viewResponse?.views?.list?.fields,
5332
5311
  records: dataResponse?.records ?? dataResponse?.groups,
5333
5312
  dataModel: viewResponse?.models?.[String(relation)],
5334
- context: { ...env.context, ...context },
5313
+ context: contextObject,
5335
5314
  typeTable: dataResponse?.groups ? "group" : "list"
5336
5315
  }
5337
5316
  });
5338
- const dataFormView = {
5339
- id: null,
5340
- model: relation,
5341
- context
5342
- };
5343
- const {
5344
- refetch,
5345
- data: dataFormViewResponse,
5346
- isSuccess
5347
- } = useGetFormView({
5348
- data: dataFormView,
5349
- queryKey: [`form-view-action-${relation}`],
5350
- enabled: false
5317
+ const searchControllers = searchController({
5318
+ viewData: viewResponse,
5319
+ model: relation ?? "",
5320
+ context: contextObject,
5321
+ domain,
5322
+ fieldsList: [
5323
+ ...columns?.filter(
5324
+ (col) => col?.field?.type_co === "field" && col?.optional !== "hide"
5325
+ )?.map((col) => ({ ...col.field })) ?? []
5326
+ ]
5351
5327
  });
5352
- (0, import_react16.useEffect)(() => {
5353
- if (isSuccess && dataFormViewResponse) {
5354
- sessionStorage.setItem("actionData", JSON.stringify(dataFormViewResponse));
5355
- window.location.href = `/form/menu?model=${relation}`;
5356
- }
5357
- }, [isSuccess]);
5358
- (0, import_react16.useEffect)(() => {
5359
- if (domainMany2Many && !isLoadedData) {
5360
- setIsLoadedData(true);
5361
- }
5362
- }, [domainMany2Many]);
5363
5328
  const handleCreateNewOnPage = async () => {
5364
- try {
5365
- refetch();
5366
- } catch (error) {
5367
- console.log(error);
5368
- }
5369
5329
  };
5370
5330
  return {
5371
5331
  handleCreateNewOnPage,
5372
5332
  optionsObject,
5333
+ totalRows: dataResponse?.length ?? 0,
5373
5334
  rows,
5374
5335
  columns,
5336
+ onToggleColumnOptional,
5375
5337
  typeTable,
5376
- isDataLoading,
5377
- isDataResponseFetched,
5378
- isPlaceholderData
5338
+ isLoading,
5339
+ isFetched,
5340
+ isPlaceholderData,
5341
+ setPage,
5342
+ page,
5343
+ viewData: viewResponse,
5344
+ domain: domainMany2Many,
5345
+ setDomain: setDomainMany2Many,
5346
+ searchController: searchControllers
5379
5347
  };
5380
5348
  };
5381
5349
 
5382
5350
  // src/widget/basic/many2many-tags-field/controller.ts
5383
5351
  var import_react17 = require("react");
5384
5352
  var import_constants4 = require("@fctc/interface-logic/constants");
5385
- var import_environment8 = require("@fctc/interface-logic/environment");
5386
- var import_hooks15 = require("@fctc/interface-logic/hooks");
5387
5353
  var import_utils8 = require("@fctc/interface-logic/utils");
5388
5354
  var many2manyTagsController = (props) => {
5389
5355
  const {
@@ -5395,7 +5361,8 @@ var many2manyTagsController = (props) => {
5395
5361
  placeholderNoOption
5396
5362
  } = props;
5397
5363
  const isUser = relation === "res.users" || relation === "res.partner";
5398
- const env = (0, import_environment8.getEnv)();
5364
+ const { env } = (0, provider_exports.useEnv)();
5365
+ const { useGetSelection: useGetSelection2 } = (0, provider_exports.useService)();
5399
5366
  const addtionalFields = optionsFields ? (0, import_utils8.evalJSONContext)(optionsFields) : null;
5400
5367
  const domainObject = (0, import_react17.useMemo)(
5401
5368
  () => (0, import_utils8.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues || {}))),
@@ -5414,7 +5381,7 @@ var many2manyTagsController = (props) => {
5414
5381
  enabled: true,
5415
5382
  context: env.context
5416
5383
  };
5417
- const { data: dataOfSelection } = (0, import_hooks15.useGetSelection)({
5384
+ const { data: dataOfSelection } = useGetSelection2({
5418
5385
  data,
5419
5386
  queryKey: [`data_${relation}`, domainObject]
5420
5387
  });
@@ -5434,7 +5401,6 @@ var many2manyTagsController = (props) => {
5434
5401
  options,
5435
5402
  customNoOptionsMessage,
5436
5403
  tranfer,
5437
- dataOfSelection,
5438
5404
  isUser
5439
5405
  };
5440
5406
  };
@@ -5443,7 +5409,7 @@ var many2manyTagsController = (props) => {
5443
5409
  var import_react18 = require("react");
5444
5410
  var import_utils9 = require("@fctc/interface-logic/utils");
5445
5411
  var durationController = (props) => {
5446
- const { relation, domain, formValues, name, id, model, onRefetch } = props;
5412
+ const { relation, domain, formValues, name, id, model, onRefetch, enabled } = props;
5447
5413
  const specification = {
5448
5414
  id: 0,
5449
5415
  name: "",
@@ -5467,7 +5433,11 @@ var durationController = (props) => {
5467
5433
  },
5468
5434
  sort: ""
5469
5435
  };
5470
- const { data: dataResponse } = useGetListData3(listDataProps, queryKey);
5436
+ const { data: dataResponse } = useGetListData3(
5437
+ listDataProps,
5438
+ queryKey,
5439
+ enabled
5440
+ );
5471
5441
  const { mutate: fetchChangeStatus } = useChangeStatus();
5472
5442
  const handleClick = async (stage_id) => {
5473
5443
  setDisabled(true);
@@ -5503,41 +5473,28 @@ var durationController = (props) => {
5503
5473
  };
5504
5474
 
5505
5475
  // src/widget/basic/priority-field/controller.ts
5506
- var import_hooks16 = require("@fctc/interface-logic/hooks");
5507
5476
  var import_utils10 = require("@fctc/interface-logic/utils");
5508
5477
  var priorityFieldController = (props) => {
5509
- const {
5510
- value,
5511
- isForm,
5512
- name,
5513
- methods,
5514
- onChange,
5515
- model,
5516
- selection,
5517
- id,
5518
- actionData,
5519
- viewData,
5520
- context
5521
- } = props;
5478
+ const { name, model, index, actionData, context, onChange, specification } = props;
5522
5479
  const _context = { ...(0, import_utils10.evalJSONContext)(actionData?.context) };
5523
5480
  const contextObject = { ...context, ..._context };
5524
- const defaultPriority = parseInt(value) + 1;
5525
- const label = viewData?.models?.[model]?.[name ?? ""]?.string ?? name;
5526
- const { mutateAsync: fetchSave } = (0, import_hooks16.useSave)();
5481
+ const { useSave: useSave2 } = (0, provider_exports.useService)();
5482
+ const { mutateAsync: fetchSave } = useSave2();
5527
5483
  const savePriorities = async ({
5528
- value: value2,
5484
+ value,
5529
5485
  resetPriority
5530
5486
  }) => {
5531
- const priorityValue = value2 <= 0 ? 0 : value2 - 1;
5487
+ const priorityValue = value <= 0 ? 0 : value - 1;
5532
5488
  try {
5533
5489
  fetchSave({
5534
- ids: id ? [id] : [],
5535
- data: { [name ?? ""]: String(priorityValue) },
5536
- model: model ?? "",
5537
- context: contextObject
5490
+ ids: index ? [index] : [],
5491
+ data: { [String(name)]: String(priorityValue) },
5492
+ model: String(model),
5493
+ context: contextObject,
5494
+ specification
5538
5495
  });
5539
5496
  if (typeof onChange === "function") {
5540
- onChange(name ?? "", String(priorityValue));
5497
+ onChange(String(name), String(priorityValue));
5541
5498
  }
5542
5499
  } catch (error) {
5543
5500
  if (resetPriority) {
@@ -5546,14 +5503,7 @@ var priorityFieldController = (props) => {
5546
5503
  }
5547
5504
  };
5548
5505
  return {
5549
- selection,
5550
- isForm,
5551
- methods,
5552
- defaultPriority,
5553
- savePriorities,
5554
- label,
5555
- id,
5556
- onChange
5506
+ savePriorities
5557
5507
  };
5558
5508
  };
5559
5509
 
@@ -6516,11 +6466,11 @@ var import_utils12 = require("@fctc/interface-logic/utils");
6516
6466
  var colorFieldController = (props) => {
6517
6467
  const { value, isForm, name, formValues, idForm, model, actionData } = props;
6518
6468
  const { env } = (0, provider_exports.useEnv)();
6519
- const { useSave: useSave3 } = (0, provider_exports.useService)();
6469
+ const { useSave: useSave2 } = (0, provider_exports.useService)();
6520
6470
  const _context = { ...(0, import_utils12.evalJSONContext)(actionData?.context) || {} };
6521
6471
  const contextObject = { ...env.context, ..._context };
6522
6472
  const idDefault = isForm ? idForm : formValues?.id;
6523
- const { mutate: onSave } = useSave3();
6473
+ const { mutate: onSave } = useSave2();
6524
6474
  const savePickColor = async (colorObject) => {
6525
6475
  const { id } = colorObject;
6526
6476
  if (value === id) return;
@@ -6642,103 +6592,36 @@ var binaryFieldController = (props) => {
6642
6592
  };
6643
6593
  };
6644
6594
 
6645
- // src/widget/advance/table/table-body/controller.ts
6646
- var import_store9 = require("@fctc/interface-logic/store");
6647
- var import_react22 = require("react");
6648
- var tableBodyController = (props) => {
6649
- const {
6650
- checkedAll,
6651
- checkboxRef,
6652
- setIsAutoSelect,
6653
- selectedRowKeys,
6654
- row,
6655
- isAutoSelect,
6656
- selectedRowKeysRef,
6657
- onClickRow
6658
- } = props;
6659
- const appDispatch = (0, import_store9.useAppDispatch)();
6660
- const checked = (0, import_react22.useMemo)(() => {
6661
- if (!row?.id) return false;
6662
- if (selectedRowKeys?.includes(row.id)) {
6663
- return true;
6664
- }
6665
- return checkedAll;
6666
- }, [row?.id, selectedRowKeys, checkedAll]);
6667
- const handleCheckBoxSingle = (event) => {
6668
- event.stopPropagation();
6669
- if (checkedAll) {
6670
- checkboxRef.current = "uncheck";
6671
- setIsAutoSelect(true);
6672
- return;
6673
- }
6674
- const newSelectedRowKeys = selectedRowKeys?.includes(row.id) ? selectedRowKeys?.filter((key) => key !== row.id) : [...selectedRowKeys, row.id];
6675
- console.log("newSelectedRowKeys", newSelectedRowKeys);
6676
- appDispatch((0, import_store9.setSelectedRowKeys)(newSelectedRowKeys));
6677
- };
6678
- const handleClickRow = (col, row2) => {
6679
- onClickRow(col, row2);
6680
- };
6681
- (0, import_react22.useEffect)(() => {
6682
- if (!row?.id) return;
6683
- if (isAutoSelect) {
6684
- if (checkboxRef?.current === "uncheck") {
6685
- const filtered = selectedRowKeysRef.current.filter(
6686
- (id) => id !== row.id
6687
- );
6688
- selectedRowKeysRef.current = filtered;
6689
- appDispatch((0, import_store9.setSelectedRowKeys)(filtered));
6690
- } else {
6691
- const unique = Array.from(
6692
- /* @__PURE__ */ new Set([...selectedRowKeysRef?.current, row?.id])
6693
- );
6694
- selectedRowKeysRef.current = unique;
6695
- appDispatch((0, import_store9.setSelectedRowKeys)(unique));
6696
- }
6697
- }
6698
- }, [isAutoSelect]);
6699
- (0, import_react22.useEffect)(() => {
6700
- if (!checkedAll) {
6701
- checkboxRef.current = "enabled";
6702
- false;
6703
- }
6704
- }, [checkedAll]);
6705
- return {
6706
- handleCheckBoxSingle,
6707
- checked,
6708
- handleClickRow
6709
- };
6710
- };
6711
-
6712
6595
  // src/widget/advance/table/table-head/controller.ts
6713
- var import_store10 = require("@fctc/interface-logic/store");
6596
+ var import_store8 = require("@fctc/interface-logic/store");
6714
6597
  var tableHeadController = (props) => {
6715
6598
  const { typeTable, rows, selectedRowKeysRef } = props;
6716
- const appDispatch = (0, import_store10.useAppDispatch)();
6717
- const { groupByDomain } = (0, import_store10.useAppSelector)(import_store10.selectSearch);
6599
+ const appDispatch = (0, import_store8.useAppDispatch)();
6600
+ const { groupByDomain } = (0, import_store8.useAppSelector)(import_store8.selectSearch);
6718
6601
  const handleCheckBoxAll = (event) => {
6719
6602
  if (event?.target?.checked && typeTable === "list") {
6720
6603
  const allRowKeys = Array.isArray(rows) ? rows.map((record) => record?.id) : [];
6721
- appDispatch((0, import_store10.setSelectedRowKeys)(allRowKeys));
6604
+ appDispatch((0, import_store8.setSelectedRowKeys)(allRowKeys));
6722
6605
  } else if (event?.target?.checked && typeTable === "group") {
6723
6606
  const rowsIDs = document.querySelectorAll("tr[data-row-id]");
6724
6607
  const ids = Array.from(rowsIDs)?.map(
6725
6608
  (row) => Number(row?.getAttribute("data-row-id"))
6726
6609
  );
6727
6610
  if (ids?.length > 0) {
6728
- appDispatch((0, import_store10.setSelectedRowKeys)(ids));
6611
+ appDispatch((0, import_store8.setSelectedRowKeys)(ids));
6729
6612
  } else {
6730
6613
  const sum = countSum(
6731
6614
  rows,
6732
6615
  typeof groupByDomain === "object" ? groupByDomain?.contexts?.[0]?.group_by : void 0
6733
6616
  );
6734
6617
  const keys = Array.from({ length: sum }, (_) => void 0);
6735
- appDispatch((0, import_store10.setSelectedRowKeys)(keys));
6618
+ appDispatch((0, import_store8.setSelectedRowKeys)(keys));
6736
6619
  }
6737
6620
  if (selectedRowKeysRef) {
6738
6621
  selectedRowKeysRef.current = [];
6739
6622
  }
6740
6623
  } else {
6741
- appDispatch((0, import_store10.setSelectedRowKeys)([]));
6624
+ appDispatch((0, import_store8.setSelectedRowKeys)([]));
6742
6625
  }
6743
6626
  };
6744
6627
  return {
@@ -6747,12 +6630,12 @@ var tableHeadController = (props) => {
6747
6630
  };
6748
6631
 
6749
6632
  // src/widget/advance/table/table-view/controller.ts
6750
- var import_react23 = require("react");
6751
- var import_store11 = require("@fctc/interface-logic/store");
6633
+ var import_react22 = require("react");
6634
+ var import_store9 = require("@fctc/interface-logic/store");
6752
6635
  var import_utils14 = require("@fctc/interface-logic/utils");
6753
6636
  var tableController = ({ data }) => {
6754
- const [rows, setRows] = (0, import_react23.useState)(data.records || []);
6755
- const [columns, setColumns] = (0, import_react23.useState)([]);
6637
+ const [rows, setRows] = (0, import_react22.useState)(data.records || []);
6638
+ const [columns, setColumns] = (0, import_react22.useState)([]);
6756
6639
  const dataModelFields = data.fields?.map((field) => {
6757
6640
  return {
6758
6641
  ...data.dataModel?.[field?.name],
@@ -6780,7 +6663,7 @@ var tableController = ({ data }) => {
6780
6663
  return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6781
6664
  });
6782
6665
  };
6783
- (0, import_react23.useEffect)(() => {
6666
+ (0, import_react22.useEffect)(() => {
6784
6667
  setRows(transformData(data.records || null));
6785
6668
  }, [data.records]);
6786
6669
  const handleGetColumns = () => {
@@ -6801,7 +6684,7 @@ var tableController = ({ data }) => {
6801
6684
  }
6802
6685
  return cols;
6803
6686
  };
6804
- (0, import_react23.useEffect)(() => {
6687
+ (0, import_react22.useEffect)(() => {
6805
6688
  const columns2 = handleGetColumns();
6806
6689
  setColumns(columns2);
6807
6690
  }, [data.records]);
@@ -6826,9 +6709,9 @@ var tableController = ({ data }) => {
6826
6709
  };
6827
6710
 
6828
6711
  // src/widget/advance/table/table-group/controller.ts
6829
- var import_react24 = require("react");
6830
- var import_hooks17 = require("@fctc/interface-logic/hooks");
6831
- var import_store12 = require("@fctc/interface-logic/store");
6712
+ var import_react23 = require("react");
6713
+ var import_hooks15 = require("@fctc/interface-logic/hooks");
6714
+ var import_store10 = require("@fctc/interface-logic/store");
6832
6715
 
6833
6716
  // src/environment.ts
6834
6717
  var environment_exports = {};
@@ -6855,18 +6738,18 @@ var tableGroupController = (props) => {
6855
6738
  setIsAutoSelect,
6856
6739
  selectedRowKeysRef
6857
6740
  } = props;
6858
- const [pageGroup, setPageGroup] = (0, import_react24.useState)(0);
6859
- const { groupByDomain, selectedTags } = (0, import_store12.useAppSelector)(import_store12.selectSearch);
6860
- const { selectedRowKeys } = (0, import_store12.useAppSelector)(import_store12.selectList);
6861
- const appDispatch = (0, import_store12.useAppDispatch)();
6862
- const { toDataJS } = (0, import_hooks17.useOdooDataTransform)();
6741
+ const [pageGroup, setPageGroup] = (0, import_react23.useState)(0);
6742
+ const { groupByDomain, selectedTags } = (0, import_store10.useAppSelector)(import_store10.selectSearch);
6743
+ const { selectedRowKeys } = (0, import_store10.useAppSelector)(import_store10.selectList);
6744
+ const appDispatch = (0, import_store10.useAppDispatch)();
6745
+ const { toDataJS } = (0, import_hooks15.useOdooDataTransform)();
6863
6746
  const initVal = toDataJS(row, viewData, model);
6864
- const [isShowGroup, setIsShowGroup] = (0, import_react24.useState)(false);
6865
- const [colEmptyGroup, setColEmptyGroup] = (0, import_react24.useState)({
6747
+ const [isShowGroup, setIsShowGroup] = (0, import_react23.useState)(false);
6748
+ const [colEmptyGroup, setColEmptyGroup] = (0, import_react23.useState)({
6866
6749
  fromStart: 1,
6867
6750
  fromEnd: 1
6868
6751
  });
6869
- const processedData = (0, import_react24.useMemo)(() => {
6752
+ const processedData = (0, import_react23.useMemo)(() => {
6870
6753
  const calculateColSpanEmpty = () => {
6871
6754
  const startIndex = columns.findIndex(
6872
6755
  (col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
@@ -6881,7 +6764,7 @@ var tableGroupController = (props) => {
6881
6764
  };
6882
6765
  return calculateColSpanEmpty();
6883
6766
  }, [columns, row]);
6884
- const shouldFetchData = (0, import_react24.useMemo)(() => {
6767
+ const shouldFetchData = (0, import_react23.useMemo)(() => {
6885
6768
  return !!isShowGroup;
6886
6769
  }, [isShowGroup]);
6887
6770
  const enabled = shouldFetchData && !!processedData;
@@ -6906,7 +6789,7 @@ var tableGroupController = (props) => {
6906
6789
  isPlaceholderData,
6907
6790
  isLoading,
6908
6791
  isFetching
6909
- } = (0, import_hooks17.useGetListData)(listDataProps, queryKey, enabled);
6792
+ } = (0, import_hooks15.useGetListData)(listDataProps, queryKey, enabled);
6910
6793
  const {
6911
6794
  columns: columnsGroup,
6912
6795
  rows: rowsGroup,
@@ -6921,7 +6804,7 @@ var tableGroupController = (props) => {
6921
6804
  }
6922
6805
  });
6923
6806
  const leftPadding = level > 1 ? level * 8 + "px" : "0px";
6924
- (0, import_react24.useEffect)(() => {
6807
+ (0, import_react23.useEffect)(() => {
6925
6808
  if (isShowGroup && selectedTags?.length > 0) {
6926
6809
  setIsShowGroup(false);
6927
6810
  }
@@ -6944,24 +6827,24 @@ var tableGroupController = (props) => {
6944
6827
  const filteredIds = selectedRowKeys.filter(
6945
6828
  (id) => !ids.includes(id)
6946
6829
  );
6947
- appDispatch((0, import_store12.setSelectedRowKeys)(filteredIds));
6830
+ appDispatch((0, import_store10.setSelectedRowKeys)(filteredIds));
6948
6831
  } else if (!isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && checkedAll && !allIdsNull && isQueryFetched) {
6949
6832
  const clonedKeys = [...selectedRowKeys];
6950
- appDispatch((0, import_store12.setSelectedRowKeys)([...clonedKeys, -1]));
6951
- setTimeout(() => appDispatch((0, import_store12.setSelectedRowKeys)(clonedKeys)), 500);
6833
+ appDispatch((0, import_store10.setSelectedRowKeys)([...clonedKeys, -1]));
6834
+ setTimeout(() => appDispatch((0, import_store10.setSelectedRowKeys)(clonedKeys)), 500);
6952
6835
  } else if (isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && !checkedAll && !allIdsNull) {
6953
6836
  const filteredKeys = selectedRowKeys.filter((id) => id > -1);
6954
- appDispatch((0, import_store12.setSelectedRowKeys)(filteredKeys));
6837
+ appDispatch((0, import_store10.setSelectedRowKeys)(filteredKeys));
6955
6838
  }
6956
6839
  toggleShowGroup();
6957
6840
  };
6958
- (0, import_react24.useEffect)(() => {
6841
+ (0, import_react23.useEffect)(() => {
6959
6842
  if (!isQueryFetched || !rowsGroup || !checkedAll || allIdsNull || typeTableGroup === "group") {
6960
6843
  return;
6961
6844
  }
6962
6845
  const clonedKeys = [...selectedRowKeys];
6963
- (0, import_store12.setSelectedRowKeys)([...clonedKeys, -1]);
6964
- setTimeout(() => (0, import_store12.setSelectedRowKeys)(clonedKeys), 500);
6846
+ (0, import_store10.setSelectedRowKeys)([...clonedKeys, -1]);
6847
+ setTimeout(() => (0, import_store10.setSelectedRowKeys)(clonedKeys), 500);
6965
6848
  }, [isQueryFetched]);
6966
6849
  return {
6967
6850
  handleExpandChildGroup,
@@ -6998,23 +6881,24 @@ var tableGroupController = (props) => {
6998
6881
  var import_constants5 = require("@fctc/interface-logic/constants");
6999
6882
  var import_utils15 = require("@fctc/interface-logic/utils");
7000
6883
  var import_moment2 = __toESM(require_moment());
7001
- var import_react25 = require("react");
6884
+ var import_react24 = require("react");
7002
6885
  var searchController = ({
7003
6886
  viewData,
7004
- actionData,
7005
- fieldsList,
7006
- contextSearch,
7007
- setSearchMap,
7008
- searchMap
6887
+ model,
6888
+ domain,
6889
+ context,
6890
+ fieldsList
7009
6891
  }) => {
7010
- const [filterBy, setFilterBy] = (0, import_react25.useState)(null);
7011
- const [searchBy, setSearchBy] = (0, import_react25.useState)(null);
7012
- const [groupBy, setGroupBy] = (0, import_react25.useState)(null);
7013
- const [selectedTags, setSelectedTags] = (0, import_react25.useState)(null);
7014
- const [searchString, setSearchString] = (0, import_react25.useState)("");
7015
- const domainAction = actionData?.domain ? Array.isArray(actionData?.domain) ? [...actionData?.domain] : (0, import_utils15.evalJSONDomain)(actionData?.domain, contextSearch) : [];
7016
- const aid = actionData?.id;
7017
- const model = actionData?.res_model;
6892
+ const { env } = (0, provider_exports.useEnv)();
6893
+ const [filterBy, setFilterBy] = (0, import_react24.useState)(null);
6894
+ const [searchBy, setSearchBy] = (0, import_react24.useState)(null);
6895
+ const [groupBy, setGroupBy] = (0, import_react24.useState)(null);
6896
+ const [selectedTags, setSelectedTags] = (0, import_react24.useState)(null);
6897
+ const [searchString, setSearchString] = (0, import_react24.useState)("");
6898
+ const [searchMap, setSearchMap] = (0, import_react24.useState)({});
6899
+ const actionContext = typeof context === "string" ? (0, import_utils15.evalJSONContext)(context) : context;
6900
+ const contextSearch = { ...env.context, ...actionContext };
6901
+ const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils15.evalJSONDomain)(domain, contextSearch) : [];
7018
6902
  const clearSearch = () => {
7019
6903
  setFilterBy([]);
7020
6904
  setGroupBy([]);
@@ -7058,10 +6942,9 @@ var searchController = ({
7058
6942
  }
7059
6943
  }
7060
6944
  };
7061
- (0, import_react25.useEffect)(() => {
7062
- clearSearch();
6945
+ (0, import_react24.useEffect)(() => {
7063
6946
  fetchData();
7064
- }, [aid, model, viewData]);
6947
+ }, [model, viewData]);
7065
6948
  const onChangeSearchInput = (search_string) => {
7066
6949
  setSearchString(search_string);
7067
6950
  };
@@ -7098,27 +6981,27 @@ var searchController = ({
7098
6981
  };
7099
6982
  const formatDomain = () => {
7100
6983
  if (domainAction) {
7101
- const domain = [];
6984
+ const domain2 = [];
7102
6985
  if (domainAction?.length > 0) {
7103
- if (Object.keys(searchMap).length > 0) {
7104
- domain.push("&");
6986
+ if (Object.keys(searchMap).some((key) => !key.includes(import_constants5.SearchType.GROUP))) {
6987
+ domain2.push("&");
7105
6988
  }
7106
6989
  domainAction.forEach((domainItem) => {
7107
- domain.push(domainItem);
6990
+ domain2.push(domainItem);
7108
6991
  });
7109
6992
  }
7110
6993
  Object.keys(searchMap).forEach((key, keyIndex, keys) => {
7111
6994
  if (!key?.includes(import_constants5.SearchType.GROUP)) {
7112
6995
  if (keys.length > 1 && keyIndex < keys.length - 1) {
7113
- domain.push("&");
6996
+ domain2.push("&");
7114
6997
  }
7115
6998
  const valuesOfKey = searchMap[key];
7116
6999
  valuesOfKey.forEach((value, index) => {
7117
7000
  if (index < valuesOfKey.length - 1) {
7118
- domain.push("|");
7001
+ domain2.push("|");
7119
7002
  }
7120
7003
  if (value.domain) {
7121
- domain.push(...value.domain);
7004
+ domain2.push(...value.domain);
7122
7005
  return;
7123
7006
  }
7124
7007
  let valueDomainItem = value?.value;
@@ -7134,14 +7017,14 @@ var searchController = ({
7134
7017
  }
7135
7018
  }
7136
7019
  const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
7137
- domain.push([value.name, operator, valueDomainItem]);
7020
+ domain2.push([value.name, operator, valueDomainItem]);
7138
7021
  });
7139
7022
  }
7140
7023
  });
7141
- return [...domain];
7024
+ return [...domain2];
7142
7025
  }
7143
7026
  };
7144
- const setTagSearch = (0, import_react25.useCallback)(
7027
+ const setTagSearch = (0, import_react24.useCallback)(
7145
7028
  (updatedMap) => {
7146
7029
  if (!updatedMap) return;
7147
7030
  const tagsSearch = Object.entries(updatedMap).map(
@@ -7169,16 +7052,16 @@ var searchController = ({
7169
7052
  const contexts = [];
7170
7053
  let groupValues = [];
7171
7054
  objValues?.forEach((objValue) => {
7172
- const { context, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7055
+ const { context: context2, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7173
7056
  const indexAppend = groupIndex2 != null ? groupIndex2 : viewData?.views?.search?.filters_by?.length ?? 0;
7174
7057
  contexts.push(
7175
- ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({ group_by: item })) : [context]
7058
+ ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({ group_by: item })) : [context2]
7176
7059
  );
7177
7060
  groupValues[indexAppend] = {
7178
7061
  contexts: [
7179
- ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({
7062
+ ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({
7180
7063
  group_by: item
7181
- })) : [context]
7064
+ })) : [context2]
7182
7065
  ],
7183
7066
  strings: isDefault ? [value] : [...groupValues[indexAppend]?.strings ?? [], value]
7184
7067
  };
@@ -7204,40 +7087,39 @@ var searchController = ({
7204
7087
  },
7205
7088
  [searchMap]
7206
7089
  );
7207
- (0, import_react25.useEffect)(() => {
7208
- setSelectedTags(null);
7090
+ (0, import_react24.useEffect)(() => {
7209
7091
  setTagSearch(searchMap);
7210
7092
  }, [searchMap]);
7211
7093
  const handleAddTagSearch = (tag) => {
7212
7094
  const {
7213
- domain,
7095
+ domain: domain2,
7214
7096
  groupIndex,
7215
7097
  value,
7216
7098
  type,
7217
7099
  title,
7218
- context,
7100
+ context: context2,
7219
7101
  active,
7220
7102
  dataIndex
7221
7103
  } = tag;
7222
- const domainFormat = new import_utils15.domainHelper.Domain(domain);
7104
+ const domainFormat = new import_utils15.domainHelper.Domain(domain2);
7223
7105
  if (type === import_constants5.SearchType.FILTER) {
7224
7106
  addSearchItems(`${import_constants5.SearchType.FILTER}_${groupIndex}`, {
7225
7107
  ...tag,
7226
- domain: domain ? domainFormat.toList(context) : null
7108
+ domain: domain2 ? domainFormat.toList(context2) : null
7227
7109
  });
7228
7110
  } else if (type === import_constants5.SearchType.SEARCH) {
7229
7111
  addSearchItems(`${import_constants5.SearchType.SEARCH}_${String(dataIndex)}`, {
7230
7112
  ...tag,
7231
- domain: domain ? domainFormat.toList({
7232
- ...context,
7113
+ domain: domain2 ? domainFormat.toList({
7114
+ ...context2,
7233
7115
  self: value
7234
7116
  }) : null
7235
7117
  });
7236
7118
  } else if (type === import_constants5.SearchType.GROUP) {
7237
7119
  addSearchItems(`${import_constants5.SearchType.GROUP}`, {
7238
7120
  ...tag,
7239
- domain: domain ? domainFormat.toList({
7240
- context,
7121
+ domain: domain2 ? domainFormat.toList({
7122
+ context: context2,
7241
7123
  self: value
7242
7124
  }) : null
7243
7125
  });
@@ -7257,7 +7139,8 @@ var searchController = ({
7257
7139
  removeSearchItems,
7258
7140
  onSearchString: onChangeSearchInput,
7259
7141
  handleAddTagSearch,
7260
- domain: formatDomain()
7142
+ domain: formatDomain(),
7143
+ context: contextSearch
7261
7144
  };
7262
7145
  };
7263
7146
  // Annotate the CommonJS export names for ESM import in node:
@@ -7276,7 +7159,6 @@ var searchController = ({
7276
7159
  priorityFieldController,
7277
7160
  searchController,
7278
7161
  statusDropdownController,
7279
- tableBodyController,
7280
7162
  tableController,
7281
7163
  tableGroupController,
7282
7164
  tableHeadController