@fctc/widget-logic 2.2.2 → 2.2.3

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