@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/index.js CHANGED
@@ -4068,6 +4068,7 @@ __export(index_exports, {
4068
4068
  searchController: () => searchController,
4069
4069
  setStorageItemAsync: () => setStorageItemAsync,
4070
4070
  statusDropdownController: () => statusDropdownController,
4071
+ tableBodyController: () => tableBodyController,
4071
4072
  tableController: () => tableController,
4072
4073
  tableGroupController: () => tableGroupController,
4073
4074
  tableHeadController: () => tableHeadController,
@@ -5289,7 +5290,6 @@ var many2oneFieldController = (props) => {
5289
5290
  options: fieldOptions,
5290
5291
  showDetail
5291
5292
  } = props;
5292
- const { env } = (0, provider_exports.useEnv)();
5293
5293
  const [options, setOptions] = (0, import_react15.useState)([]);
5294
5294
  const [inputValue, setInputValue] = (0, import_react15.useState)("");
5295
5295
  const [debouncedInputValue] = useDebounce(inputValue, 1e3);
@@ -5299,14 +5299,15 @@ var many2oneFieldController = (props) => {
5299
5299
  const [domainObject, setDomainObject] = (0, import_react15.useState)(null);
5300
5300
  const actionData = sessionStorageUtils.getActionData();
5301
5301
  const { menuList } = (0, store_exports.useAppSelector)(store_exports.selectNavbar);
5302
+ const { context } = (0, store_exports.useAppSelector)(store_exports.selectEnv);
5302
5303
  const initValue = methods?.getValues(name);
5303
5304
  const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
5304
5305
  const contextObject = {
5305
5306
  ...(0, utils_exports.evalJSONContext)(actionData?.context) || {},
5306
5307
  ...fieldContext,
5307
- ...env?.context
5308
+ ...context
5308
5309
  };
5309
- const { useGetSelection: useGetSelection2 } = (0, provider_exports.useService)();
5310
+ const { useGetSelection: useGetSelection3 } = (0, provider_exports.useService)();
5310
5311
  const data = {
5311
5312
  model: relation,
5312
5313
  domain: domainObject,
@@ -5322,7 +5323,7 @@ var many2oneFieldController = (props) => {
5322
5323
  data: dataOfSelection,
5323
5324
  refetch,
5324
5325
  isFetching
5325
- } = useGetSelection2({
5326
+ } = useGetSelection3({
5326
5327
  data,
5327
5328
  queryKey,
5328
5329
  enabled: false
@@ -5476,49 +5477,52 @@ var many2oneButtonController = (props) => {
5476
5477
 
5477
5478
  // src/widget/basic/many2many-field/controller.ts
5478
5479
  var import_react16 = require("react");
5480
+ var import_store8 = require("@fctc/interface-logic/store");
5479
5481
  var import_utils7 = require("@fctc/interface-logic/utils");
5480
5482
  var many2manyFieldController = (props) => {
5481
5483
  const {
5482
5484
  relation,
5483
5485
  domain,
5484
5486
  context,
5485
- options,
5486
5487
  tab,
5487
- setSelectedRowKeys: setSelectedRowKeys3,
5488
+ model,
5489
+ aid,
5490
+ setSelectedRowKeys: setSelectedRowKeys4,
5491
+ fields,
5492
+ setFields,
5488
5493
  groupByDomain,
5489
- enabled: enabledCallAPI,
5490
- actionData
5494
+ page,
5495
+ options,
5496
+ sessionStorageUtils
5491
5497
  } = 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);
5492
5504
  const { env } = (0, provider_exports.useEnv)();
5493
5505
  const { useGetView: useGetView2, useGetListData: useGetListData3, useGetFormView } = (0, provider_exports.useService)();
5494
- const [order, setOrder] = (0, import_react16.useState)();
5495
- const [page, setPage] = (0, import_react16.useState)(0);
5496
- const [domainMany2Many, setDomainMany2Many] = (0, import_react16.useState)(null);
5497
- const [debouncedPage] = useDebounce(page, 500);
5498
- const contextObject = {
5499
- ...env.context,
5500
- ...context || {}
5501
- };
5502
5506
  const viewParams = {
5503
5507
  model: relation,
5504
5508
  views: [
5505
5509
  [false, "list"],
5506
5510
  [false, "search"]
5507
5511
  ],
5508
- context: contextObject
5512
+ context
5509
5513
  };
5510
- const { data: viewResponse } = useGetView2(viewParams, enabledCallAPI);
5514
+ const { data: viewResponse } = useGetView2(viewParams, actionData);
5511
5515
  const baseModel = (0, import_react16.useMemo)(
5512
5516
  () => ({
5513
5517
  name: String(relation),
5514
5518
  view: viewResponse || {},
5515
- actContext: contextObject,
5519
+ actContext: context,
5516
5520
  fields: [
5517
5521
  ...Object.values(viewResponse?.views?.list?.fields ?? {}),
5518
5522
  ...tab?.fields ? tab.fields : []
5519
5523
  ]
5520
5524
  }),
5521
- [relation, viewResponse]
5525
+ [model, viewResponse]
5522
5526
  );
5523
5527
  const initModel = (0, hooks_exports.useModel)();
5524
5528
  const modelInstance = (0, import_react16.useMemo)(() => {
@@ -5537,15 +5541,26 @@ var many2manyFieldController = (props) => {
5537
5541
  const optionsObject = tab?.options ? (0, import_utils7.evalJSONContext)(tab?.options) : (options ? (0, import_utils7.evalJSONContext)(options) : {}) || {};
5538
5542
  const fetchData = async () => {
5539
5543
  try {
5540
- const domainParse = typeof domain === "string" ? (0, import_utils7.evalJSONDomain)(domain, contextObject) : Array.isArray(domain) ? domain : [];
5541
- setDomainMany2Many(domainParse);
5542
- setPage(0);
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));
5543
5558
  } catch (err) {
5544
5559
  console.log(err);
5545
5560
  }
5546
5561
  };
5547
5562
  const queryKey = [
5548
- `view-${relation}`,
5563
+ `view-${relation}-${aid}`,
5549
5564
  specification,
5550
5565
  domainMany2Many,
5551
5566
  debouncedPage,
@@ -5558,16 +5573,16 @@ var many2manyFieldController = (props) => {
5558
5573
  domain: domainMany2Many,
5559
5574
  offset: debouncedPage * 10,
5560
5575
  limit: 10,
5561
- context: contextObject,
5576
+ context,
5562
5577
  fields: groupByDomain?.fields,
5563
5578
  groupby: [groupByDomain?.contexts[0]?.group_by],
5564
5579
  sort: order ? order : default_order ? (0, import_utils7.formatSortingString)(default_order) : ""
5565
5580
  };
5566
- const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5581
+ const enabled = isLoadedData && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5567
5582
  const {
5568
5583
  data: dataResponse,
5569
- isLoading,
5570
- isFetched,
5584
+ isLoading: isDataLoading,
5585
+ isFetched: isDataResponseFetched,
5571
5586
  isPlaceholderData
5572
5587
  } = useGetListData3(data, queryKey, enabled);
5573
5588
  (0, import_react16.useEffect)(() => {
@@ -5575,56 +5590,75 @@ var many2manyFieldController = (props) => {
5575
5590
  fetchData();
5576
5591
  }
5577
5592
  return () => {
5578
- setPage(0);
5579
- setSelectedRowKeys3([]);
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));
5599
+ setSelectedRowKeys4([]);
5580
5600
  setDomainMany2Many(null);
5601
+ setIsLoadedData(false);
5581
5602
  };
5582
5603
  }, [viewResponse]);
5583
- const { rows, columns, typeTable, onToggleColumnOptional } = tableController({
5604
+ const { rows, columns, typeTable } = tableController({
5584
5605
  data: {
5585
- fields: viewResponse?.views?.list?.fields,
5606
+ fields: fields?.[`${aid}_${relation}_popupmany2many`] || viewResponse?.views?.list?.fields,
5586
5607
  records: dataResponse?.records ?? dataResponse?.groups,
5587
5608
  dataModel: viewResponse?.models?.[String(relation)],
5588
- context: contextObject,
5609
+ context: { ...env.context, ...context },
5589
5610
  typeTable: dataResponse?.groups ? "group" : "list"
5590
5611
  }
5591
5612
  });
5592
- const searchControllers = searchController({
5593
- viewData: viewResponse,
5594
- model: relation ?? "",
5595
- context: contextObject,
5596
- domain,
5597
- fieldsList: [
5598
- ...columns?.filter(
5599
- (col) => col?.field?.type_co === "field" && col?.optional !== "hide"
5600
- )?.map((col) => ({ ...col.field })) ?? []
5601
- ]
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
5602
5626
  });
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]);
5603
5638
  const handleCreateNewOnPage = async () => {
5639
+ try {
5640
+ refetch();
5641
+ } catch (error) {
5642
+ console.log(error);
5643
+ }
5604
5644
  };
5605
5645
  return {
5606
5646
  handleCreateNewOnPage,
5607
5647
  optionsObject,
5608
- totalRows: dataResponse?.length ?? 0,
5609
5648
  rows,
5610
5649
  columns,
5611
- onToggleColumnOptional,
5612
5650
  typeTable,
5613
- isLoading,
5614
- isFetched,
5615
- isPlaceholderData,
5616
- setPage,
5617
- page,
5618
- viewData: viewResponse,
5619
- domain: domainMany2Many,
5620
- setDomain: setDomainMany2Many,
5621
- searchController: searchControllers
5651
+ isDataLoading,
5652
+ isDataResponseFetched,
5653
+ isPlaceholderData
5622
5654
  };
5623
5655
  };
5624
5656
 
5625
5657
  // src/widget/basic/many2many-tags-field/controller.ts
5626
5658
  var import_react17 = require("react");
5627
5659
  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");
5628
5662
  var import_utils8 = require("@fctc/interface-logic/utils");
5629
5663
  var many2manyTagsController = (props) => {
5630
5664
  const {
@@ -5636,8 +5670,7 @@ var many2manyTagsController = (props) => {
5636
5670
  placeholderNoOption
5637
5671
  } = props;
5638
5672
  const isUser = relation === "res.users" || relation === "res.partner";
5639
- const { env } = (0, provider_exports.useEnv)();
5640
- const { useGetSelection: useGetSelection2 } = (0, provider_exports.useService)();
5673
+ const env = (0, import_environment8.getEnv)();
5641
5674
  const addtionalFields = optionsFields ? (0, import_utils8.evalJSONContext)(optionsFields) : null;
5642
5675
  const domainObject = (0, import_react17.useMemo)(
5643
5676
  () => (0, import_utils8.evalJSONDomain)(domain, JSON.parse(JSON.stringify(formValues || {}))),
@@ -5656,7 +5689,7 @@ var many2manyTagsController = (props) => {
5656
5689
  enabled: true,
5657
5690
  context: env.context
5658
5691
  };
5659
- const { data: dataOfSelection } = useGetSelection2({
5692
+ const { data: dataOfSelection } = (0, import_hooks15.useGetSelection)({
5660
5693
  data,
5661
5694
  queryKey: [`data_${relation}`, domainObject]
5662
5695
  });
@@ -5676,6 +5709,7 @@ var many2manyTagsController = (props) => {
5676
5709
  options,
5677
5710
  customNoOptionsMessage,
5678
5711
  tranfer,
5712
+ dataOfSelection,
5679
5713
  isUser
5680
5714
  };
5681
5715
  };
@@ -5684,7 +5718,7 @@ var many2manyTagsController = (props) => {
5684
5718
  var import_react18 = require("react");
5685
5719
  var import_utils9 = require("@fctc/interface-logic/utils");
5686
5720
  var durationController = (props) => {
5687
- const { relation, domain, formValues, name, id, model, onRefetch, enabled } = props;
5721
+ const { relation, domain, formValues, name, id, model, onRefetch } = props;
5688
5722
  const specification = {
5689
5723
  id: 0,
5690
5724
  name: "",
@@ -5708,11 +5742,7 @@ var durationController = (props) => {
5708
5742
  },
5709
5743
  sort: ""
5710
5744
  };
5711
- const { data: dataResponse } = useGetListData3(
5712
- listDataProps,
5713
- queryKey,
5714
- enabled
5715
- );
5745
+ const { data: dataResponse } = useGetListData3(listDataProps, queryKey);
5716
5746
  const { mutate: fetchChangeStatus } = useChangeStatus();
5717
5747
  const handleClick = async (stage_id) => {
5718
5748
  setDisabled(true);
@@ -5748,28 +5778,41 @@ var durationController = (props) => {
5748
5778
  };
5749
5779
 
5750
5780
  // src/widget/basic/priority-field/controller.ts
5781
+ var import_hooks16 = require("@fctc/interface-logic/hooks");
5751
5782
  var import_utils10 = require("@fctc/interface-logic/utils");
5752
5783
  var priorityFieldController = (props) => {
5753
- const { name, model, index, actionData, context, onChange, specification } = props;
5784
+ const {
5785
+ value,
5786
+ isForm,
5787
+ name,
5788
+ methods,
5789
+ onChange,
5790
+ model,
5791
+ selection,
5792
+ id,
5793
+ actionData,
5794
+ viewData,
5795
+ context
5796
+ } = props;
5754
5797
  const _context = { ...(0, import_utils10.evalJSONContext)(actionData?.context) };
5755
5798
  const contextObject = { ...context, ..._context };
5756
- const { useSave: useSave2 } = (0, provider_exports.useService)();
5757
- const { mutateAsync: fetchSave } = useSave2();
5799
+ const defaultPriority = parseInt(value) + 1;
5800
+ const label = viewData?.models?.[model]?.[name ?? ""]?.string ?? name;
5801
+ const { mutateAsync: fetchSave } = (0, import_hooks16.useSave)();
5758
5802
  const savePriorities = async ({
5759
- value,
5803
+ value: value2,
5760
5804
  resetPriority
5761
5805
  }) => {
5762
- const priorityValue = value <= 0 ? 0 : value - 1;
5806
+ const priorityValue = value2 <= 0 ? 0 : value2 - 1;
5763
5807
  try {
5764
5808
  fetchSave({
5765
- ids: index ? [index] : [],
5766
- data: { [String(name)]: String(priorityValue) },
5767
- model: String(model),
5768
- context: contextObject,
5769
- specification
5809
+ ids: id ? [id] : [],
5810
+ data: { [name ?? ""]: String(priorityValue) },
5811
+ model: model ?? "",
5812
+ context: contextObject
5770
5813
  });
5771
5814
  if (typeof onChange === "function") {
5772
- onChange(String(name), String(priorityValue));
5815
+ onChange(name ?? "", String(priorityValue));
5773
5816
  }
5774
5817
  } catch (error) {
5775
5818
  if (resetPriority) {
@@ -5778,7 +5821,14 @@ var priorityFieldController = (props) => {
5778
5821
  }
5779
5822
  };
5780
5823
  return {
5781
- savePriorities
5824
+ selection,
5825
+ isForm,
5826
+ methods,
5827
+ defaultPriority,
5828
+ savePriorities,
5829
+ label,
5830
+ id,
5831
+ onChange
5782
5832
  };
5783
5833
  };
5784
5834
 
@@ -6741,11 +6791,11 @@ var import_utils12 = require("@fctc/interface-logic/utils");
6741
6791
  var colorFieldController = (props) => {
6742
6792
  const { value, isForm, name, formValues, idForm, model, actionData } = props;
6743
6793
  const { env } = (0, provider_exports.useEnv)();
6744
- const { useSave: useSave2 } = (0, provider_exports.useService)();
6794
+ const { useSave: useSave3 } = (0, provider_exports.useService)();
6745
6795
  const _context = { ...(0, import_utils12.evalJSONContext)(actionData?.context) || {} };
6746
6796
  const contextObject = { ...env.context, ..._context };
6747
6797
  const idDefault = isForm ? idForm : formValues?.id;
6748
- const { mutate: onSave } = useSave2();
6798
+ const { mutate: onSave } = useSave3();
6749
6799
  const savePickColor = async (colorObject) => {
6750
6800
  const { id } = colorObject;
6751
6801
  if (value === id) return;
@@ -6867,36 +6917,103 @@ var binaryFieldController = (props) => {
6867
6917
  };
6868
6918
  };
6869
6919
 
6920
+ // src/widget/advance/table/table-body/controller.ts
6921
+ var import_store9 = require("@fctc/interface-logic/store");
6922
+ var import_react22 = require("react");
6923
+ var tableBodyController = (props) => {
6924
+ const {
6925
+ checkedAll,
6926
+ checkboxRef,
6927
+ setIsAutoSelect,
6928
+ selectedRowKeys,
6929
+ row,
6930
+ isAutoSelect,
6931
+ selectedRowKeysRef,
6932
+ onClickRow
6933
+ } = props;
6934
+ const appDispatch = (0, import_store9.useAppDispatch)();
6935
+ const checked = (0, import_react22.useMemo)(() => {
6936
+ if (!row?.id) return false;
6937
+ if (selectedRowKeys?.includes(row.id)) {
6938
+ return true;
6939
+ }
6940
+ return checkedAll;
6941
+ }, [row?.id, selectedRowKeys, checkedAll]);
6942
+ const handleCheckBoxSingle = (event) => {
6943
+ event.stopPropagation();
6944
+ if (checkedAll) {
6945
+ checkboxRef.current = "uncheck";
6946
+ setIsAutoSelect(true);
6947
+ return;
6948
+ }
6949
+ const newSelectedRowKeys = selectedRowKeys?.includes(row.id) ? selectedRowKeys?.filter((key) => key !== row.id) : [...selectedRowKeys, row.id];
6950
+ console.log("newSelectedRowKeys", newSelectedRowKeys);
6951
+ appDispatch((0, import_store9.setSelectedRowKeys)(newSelectedRowKeys));
6952
+ };
6953
+ const handleClickRow = (col, row2) => {
6954
+ onClickRow(col, row2);
6955
+ };
6956
+ (0, import_react22.useEffect)(() => {
6957
+ if (!row?.id) return;
6958
+ if (isAutoSelect) {
6959
+ if (checkboxRef?.current === "uncheck") {
6960
+ const filtered = selectedRowKeysRef.current.filter(
6961
+ (id) => id !== row.id
6962
+ );
6963
+ selectedRowKeysRef.current = filtered;
6964
+ appDispatch((0, import_store9.setSelectedRowKeys)(filtered));
6965
+ } else {
6966
+ const unique = Array.from(
6967
+ /* @__PURE__ */ new Set([...selectedRowKeysRef?.current, row?.id])
6968
+ );
6969
+ selectedRowKeysRef.current = unique;
6970
+ appDispatch((0, import_store9.setSelectedRowKeys)(unique));
6971
+ }
6972
+ }
6973
+ }, [isAutoSelect]);
6974
+ (0, import_react22.useEffect)(() => {
6975
+ if (!checkedAll) {
6976
+ checkboxRef.current = "enabled";
6977
+ false;
6978
+ }
6979
+ }, [checkedAll]);
6980
+ return {
6981
+ handleCheckBoxSingle,
6982
+ checked,
6983
+ handleClickRow
6984
+ };
6985
+ };
6986
+
6870
6987
  // src/widget/advance/table/table-head/controller.ts
6871
- var import_store8 = require("@fctc/interface-logic/store");
6988
+ var import_store10 = require("@fctc/interface-logic/store");
6872
6989
  var tableHeadController = (props) => {
6873
6990
  const { typeTable, rows, selectedRowKeysRef } = props;
6874
- const appDispatch = (0, import_store8.useAppDispatch)();
6875
- const { groupByDomain } = (0, import_store8.useAppSelector)(import_store8.selectSearch);
6991
+ const appDispatch = (0, import_store10.useAppDispatch)();
6992
+ const { groupByDomain } = (0, import_store10.useAppSelector)(import_store10.selectSearch);
6876
6993
  const handleCheckBoxAll = (event) => {
6877
6994
  if (event?.target?.checked && typeTable === "list") {
6878
6995
  const allRowKeys = Array.isArray(rows) ? rows.map((record) => record?.id) : [];
6879
- appDispatch((0, import_store8.setSelectedRowKeys)(allRowKeys));
6996
+ appDispatch((0, import_store10.setSelectedRowKeys)(allRowKeys));
6880
6997
  } else if (event?.target?.checked && typeTable === "group") {
6881
6998
  const rowsIDs = document.querySelectorAll("tr[data-row-id]");
6882
6999
  const ids = Array.from(rowsIDs)?.map(
6883
7000
  (row) => Number(row?.getAttribute("data-row-id"))
6884
7001
  );
6885
7002
  if (ids?.length > 0) {
6886
- appDispatch((0, import_store8.setSelectedRowKeys)(ids));
7003
+ appDispatch((0, import_store10.setSelectedRowKeys)(ids));
6887
7004
  } else {
6888
7005
  const sum = countSum(
6889
7006
  rows,
6890
7007
  typeof groupByDomain === "object" ? groupByDomain?.contexts?.[0]?.group_by : void 0
6891
7008
  );
6892
7009
  const keys = Array.from({ length: sum }, (_) => void 0);
6893
- appDispatch((0, import_store8.setSelectedRowKeys)(keys));
7010
+ appDispatch((0, import_store10.setSelectedRowKeys)(keys));
6894
7011
  }
6895
7012
  if (selectedRowKeysRef) {
6896
7013
  selectedRowKeysRef.current = [];
6897
7014
  }
6898
7015
  } else {
6899
- appDispatch((0, import_store8.setSelectedRowKeys)([]));
7016
+ appDispatch((0, import_store10.setSelectedRowKeys)([]));
6900
7017
  }
6901
7018
  };
6902
7019
  return {
@@ -6905,12 +7022,12 @@ var tableHeadController = (props) => {
6905
7022
  };
6906
7023
 
6907
7024
  // src/widget/advance/table/table-view/controller.ts
6908
- var import_react22 = require("react");
6909
- var import_store9 = require("@fctc/interface-logic/store");
7025
+ var import_react23 = require("react");
7026
+ var import_store11 = require("@fctc/interface-logic/store");
6910
7027
  var import_utils14 = require("@fctc/interface-logic/utils");
6911
7028
  var tableController = ({ data }) => {
6912
- const [rows, setRows] = (0, import_react22.useState)(data.records || []);
6913
- const [columns, setColumns] = (0, import_react22.useState)([]);
7029
+ const [rows, setRows] = (0, import_react23.useState)(data.records || []);
7030
+ const [columns, setColumns] = (0, import_react23.useState)([]);
6914
7031
  const dataModelFields = data.fields?.map((field) => {
6915
7032
  return {
6916
7033
  ...data.dataModel?.[field?.name],
@@ -6938,7 +7055,7 @@ var tableController = ({ data }) => {
6938
7055
  return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6939
7056
  });
6940
7057
  };
6941
- (0, import_react22.useEffect)(() => {
7058
+ (0, import_react23.useEffect)(() => {
6942
7059
  setRows(transformData(data.records || null));
6943
7060
  }, [data.records]);
6944
7061
  const handleGetColumns = () => {
@@ -6959,7 +7076,7 @@ var tableController = ({ data }) => {
6959
7076
  }
6960
7077
  return cols;
6961
7078
  };
6962
- (0, import_react22.useEffect)(() => {
7079
+ (0, import_react23.useEffect)(() => {
6963
7080
  const columns2 = handleGetColumns();
6964
7081
  setColumns(columns2);
6965
7082
  }, [data.records]);
@@ -6984,9 +7101,9 @@ var tableController = ({ data }) => {
6984
7101
  };
6985
7102
 
6986
7103
  // src/widget/advance/table/table-group/controller.ts
6987
- var import_react23 = require("react");
6988
- var import_hooks15 = require("@fctc/interface-logic/hooks");
6989
- var import_store10 = require("@fctc/interface-logic/store");
7104
+ var import_react24 = require("react");
7105
+ var import_hooks17 = require("@fctc/interface-logic/hooks");
7106
+ var import_store12 = require("@fctc/interface-logic/store");
6990
7107
 
6991
7108
  // src/environment.ts
6992
7109
  var environment_exports = {};
@@ -7013,18 +7130,18 @@ var tableGroupController = (props) => {
7013
7130
  setIsAutoSelect,
7014
7131
  selectedRowKeysRef
7015
7132
  } = props;
7016
- const [pageGroup, setPageGroup] = (0, import_react23.useState)(0);
7017
- const { groupByDomain, selectedTags } = (0, import_store10.useAppSelector)(import_store10.selectSearch);
7018
- const { selectedRowKeys } = (0, import_store10.useAppSelector)(import_store10.selectList);
7019
- const appDispatch = (0, import_store10.useAppDispatch)();
7020
- const { toDataJS } = (0, import_hooks15.useOdooDataTransform)();
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)();
7021
7138
  const initVal = toDataJS(row, viewData, model);
7022
- const [isShowGroup, setIsShowGroup] = (0, import_react23.useState)(false);
7023
- const [colEmptyGroup, setColEmptyGroup] = (0, import_react23.useState)({
7139
+ const [isShowGroup, setIsShowGroup] = (0, import_react24.useState)(false);
7140
+ const [colEmptyGroup, setColEmptyGroup] = (0, import_react24.useState)({
7024
7141
  fromStart: 1,
7025
7142
  fromEnd: 1
7026
7143
  });
7027
- const processedData = (0, import_react23.useMemo)(() => {
7144
+ const processedData = (0, import_react24.useMemo)(() => {
7028
7145
  const calculateColSpanEmpty = () => {
7029
7146
  const startIndex = columns.findIndex(
7030
7147
  (col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
@@ -7039,7 +7156,7 @@ var tableGroupController = (props) => {
7039
7156
  };
7040
7157
  return calculateColSpanEmpty();
7041
7158
  }, [columns, row]);
7042
- const shouldFetchData = (0, import_react23.useMemo)(() => {
7159
+ const shouldFetchData = (0, import_react24.useMemo)(() => {
7043
7160
  return !!isShowGroup;
7044
7161
  }, [isShowGroup]);
7045
7162
  const enabled = shouldFetchData && !!processedData;
@@ -7064,7 +7181,7 @@ var tableGroupController = (props) => {
7064
7181
  isPlaceholderData,
7065
7182
  isLoading,
7066
7183
  isFetching
7067
- } = (0, import_hooks15.useGetListData)(listDataProps, queryKey, enabled);
7184
+ } = (0, import_hooks17.useGetListData)(listDataProps, queryKey, enabled);
7068
7185
  const {
7069
7186
  columns: columnsGroup,
7070
7187
  rows: rowsGroup,
@@ -7079,7 +7196,7 @@ var tableGroupController = (props) => {
7079
7196
  }
7080
7197
  });
7081
7198
  const leftPadding = level > 1 ? level * 8 + "px" : "0px";
7082
- (0, import_react23.useEffect)(() => {
7199
+ (0, import_react24.useEffect)(() => {
7083
7200
  if (isShowGroup && selectedTags?.length > 0) {
7084
7201
  setIsShowGroup(false);
7085
7202
  }
@@ -7102,24 +7219,24 @@ var tableGroupController = (props) => {
7102
7219
  const filteredIds = selectedRowKeys.filter(
7103
7220
  (id) => !ids.includes(id)
7104
7221
  );
7105
- appDispatch((0, import_store10.setSelectedRowKeys)(filteredIds));
7222
+ appDispatch((0, import_store12.setSelectedRowKeys)(filteredIds));
7106
7223
  } else if (!isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && checkedAll && !allIdsNull && isQueryFetched) {
7107
7224
  const clonedKeys = [...selectedRowKeys];
7108
- appDispatch((0, import_store10.setSelectedRowKeys)([...clonedKeys, -1]));
7109
- setTimeout(() => appDispatch((0, import_store10.setSelectedRowKeys)(clonedKeys)), 500);
7225
+ appDispatch((0, import_store12.setSelectedRowKeys)([...clonedKeys, -1]));
7226
+ setTimeout(() => appDispatch((0, import_store12.setSelectedRowKeys)(clonedKeys)), 500);
7110
7227
  } else if (isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && !checkedAll && !allIdsNull) {
7111
7228
  const filteredKeys = selectedRowKeys.filter((id) => id > -1);
7112
- appDispatch((0, import_store10.setSelectedRowKeys)(filteredKeys));
7229
+ appDispatch((0, import_store12.setSelectedRowKeys)(filteredKeys));
7113
7230
  }
7114
7231
  toggleShowGroup();
7115
7232
  };
7116
- (0, import_react23.useEffect)(() => {
7233
+ (0, import_react24.useEffect)(() => {
7117
7234
  if (!isQueryFetched || !rowsGroup || !checkedAll || allIdsNull || typeTableGroup === "group") {
7118
7235
  return;
7119
7236
  }
7120
7237
  const clonedKeys = [...selectedRowKeys];
7121
- (0, import_store10.setSelectedRowKeys)([...clonedKeys, -1]);
7122
- setTimeout(() => (0, import_store10.setSelectedRowKeys)(clonedKeys), 500);
7238
+ (0, import_store12.setSelectedRowKeys)([...clonedKeys, -1]);
7239
+ setTimeout(() => (0, import_store12.setSelectedRowKeys)(clonedKeys), 500);
7123
7240
  }, [isQueryFetched]);
7124
7241
  return {
7125
7242
  handleExpandChildGroup,
@@ -7156,24 +7273,23 @@ var tableGroupController = (props) => {
7156
7273
  var import_constants5 = require("@fctc/interface-logic/constants");
7157
7274
  var import_utils15 = require("@fctc/interface-logic/utils");
7158
7275
  var import_moment2 = __toESM(require_moment());
7159
- var import_react24 = require("react");
7276
+ var import_react25 = require("react");
7160
7277
  var searchController = ({
7161
7278
  viewData,
7162
- model,
7163
- domain,
7164
- context,
7165
- fieldsList
7279
+ actionData,
7280
+ fieldsList,
7281
+ contextSearch,
7282
+ setSearchMap,
7283
+ searchMap
7166
7284
  }) => {
7167
- const { env } = (0, provider_exports.useEnv)();
7168
- const [filterBy, setFilterBy] = (0, import_react24.useState)(null);
7169
- const [searchBy, setSearchBy] = (0, import_react24.useState)(null);
7170
- const [groupBy, setGroupBy] = (0, import_react24.useState)(null);
7171
- const [selectedTags, setSelectedTags] = (0, import_react24.useState)(null);
7172
- const [searchString, setSearchString] = (0, import_react24.useState)("");
7173
- const [searchMap, setSearchMap] = (0, import_react24.useState)({});
7174
- const actionContext = typeof context === "string" ? (0, import_utils15.evalJSONContext)(context) : context;
7175
- const contextSearch = { ...env.context, ...actionContext };
7176
- const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils15.evalJSONDomain)(domain, contextSearch) : [];
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;
7177
7293
  const clearSearch = () => {
7178
7294
  setFilterBy([]);
7179
7295
  setGroupBy([]);
@@ -7217,9 +7333,10 @@ var searchController = ({
7217
7333
  }
7218
7334
  }
7219
7335
  };
7220
- (0, import_react24.useEffect)(() => {
7336
+ (0, import_react25.useEffect)(() => {
7337
+ clearSearch();
7221
7338
  fetchData();
7222
- }, [model, viewData]);
7339
+ }, [aid, model, viewData]);
7223
7340
  const onChangeSearchInput = (search_string) => {
7224
7341
  setSearchString(search_string);
7225
7342
  };
@@ -7256,27 +7373,27 @@ var searchController = ({
7256
7373
  };
7257
7374
  const formatDomain = () => {
7258
7375
  if (domainAction) {
7259
- const domain2 = [];
7376
+ const domain = [];
7260
7377
  if (domainAction?.length > 0) {
7261
- if (Object.keys(searchMap).some((key) => !key.includes(import_constants5.SearchType.GROUP))) {
7262
- domain2.push("&");
7378
+ if (Object.keys(searchMap).length > 0) {
7379
+ domain.push("&");
7263
7380
  }
7264
7381
  domainAction.forEach((domainItem) => {
7265
- domain2.push(domainItem);
7382
+ domain.push(domainItem);
7266
7383
  });
7267
7384
  }
7268
7385
  Object.keys(searchMap).forEach((key, keyIndex, keys) => {
7269
7386
  if (!key?.includes(import_constants5.SearchType.GROUP)) {
7270
7387
  if (keys.length > 1 && keyIndex < keys.length - 1) {
7271
- domain2.push("&");
7388
+ domain.push("&");
7272
7389
  }
7273
7390
  const valuesOfKey = searchMap[key];
7274
7391
  valuesOfKey.forEach((value, index) => {
7275
7392
  if (index < valuesOfKey.length - 1) {
7276
- domain2.push("|");
7393
+ domain.push("|");
7277
7394
  }
7278
7395
  if (value.domain) {
7279
- domain2.push(...value.domain);
7396
+ domain.push(...value.domain);
7280
7397
  return;
7281
7398
  }
7282
7399
  let valueDomainItem = value?.value;
@@ -7292,14 +7409,14 @@ var searchController = ({
7292
7409
  }
7293
7410
  }
7294
7411
  const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
7295
- domain2.push([value.name, operator, valueDomainItem]);
7412
+ domain.push([value.name, operator, valueDomainItem]);
7296
7413
  });
7297
7414
  }
7298
7415
  });
7299
- return [...domain2];
7416
+ return [...domain];
7300
7417
  }
7301
7418
  };
7302
- const setTagSearch = (0, import_react24.useCallback)(
7419
+ const setTagSearch = (0, import_react25.useCallback)(
7303
7420
  (updatedMap) => {
7304
7421
  if (!updatedMap) return;
7305
7422
  const tagsSearch = Object.entries(updatedMap).map(
@@ -7327,16 +7444,16 @@ var searchController = ({
7327
7444
  const contexts = [];
7328
7445
  let groupValues = [];
7329
7446
  objValues?.forEach((objValue) => {
7330
- const { context: context2, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7447
+ const { context, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7331
7448
  const indexAppend = groupIndex2 != null ? groupIndex2 : viewData?.views?.search?.filters_by?.length ?? 0;
7332
7449
  contexts.push(
7333
- ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({ group_by: item })) : [context2]
7450
+ ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({ group_by: item })) : [context]
7334
7451
  );
7335
7452
  groupValues[indexAppend] = {
7336
7453
  contexts: [
7337
- ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({
7454
+ ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({
7338
7455
  group_by: item
7339
- })) : [context2]
7456
+ })) : [context]
7340
7457
  ],
7341
7458
  strings: isDefault ? [value] : [...groupValues[indexAppend]?.strings ?? [], value]
7342
7459
  };
@@ -7362,39 +7479,40 @@ var searchController = ({
7362
7479
  },
7363
7480
  [searchMap]
7364
7481
  );
7365
- (0, import_react24.useEffect)(() => {
7482
+ (0, import_react25.useEffect)(() => {
7483
+ setSelectedTags(null);
7366
7484
  setTagSearch(searchMap);
7367
7485
  }, [searchMap]);
7368
7486
  const handleAddTagSearch = (tag) => {
7369
7487
  const {
7370
- domain: domain2,
7488
+ domain,
7371
7489
  groupIndex,
7372
7490
  value,
7373
7491
  type,
7374
7492
  title,
7375
- context: context2,
7493
+ context,
7376
7494
  active,
7377
7495
  dataIndex
7378
7496
  } = tag;
7379
- const domainFormat = new import_utils15.domainHelper.Domain(domain2);
7497
+ const domainFormat = new import_utils15.domainHelper.Domain(domain);
7380
7498
  if (type === import_constants5.SearchType.FILTER) {
7381
7499
  addSearchItems(`${import_constants5.SearchType.FILTER}_${groupIndex}`, {
7382
7500
  ...tag,
7383
- domain: domain2 ? domainFormat.toList(context2) : null
7501
+ domain: domain ? domainFormat.toList(context) : null
7384
7502
  });
7385
7503
  } else if (type === import_constants5.SearchType.SEARCH) {
7386
7504
  addSearchItems(`${import_constants5.SearchType.SEARCH}_${String(dataIndex)}`, {
7387
7505
  ...tag,
7388
- domain: domain2 ? domainFormat.toList({
7389
- ...context2,
7506
+ domain: domain ? domainFormat.toList({
7507
+ ...context,
7390
7508
  self: value
7391
7509
  }) : null
7392
7510
  });
7393
7511
  } else if (type === import_constants5.SearchType.GROUP) {
7394
7512
  addSearchItems(`${import_constants5.SearchType.GROUP}`, {
7395
7513
  ...tag,
7396
- domain: domain2 ? domainFormat.toList({
7397
- context: context2,
7514
+ domain: domain ? domainFormat.toList({
7515
+ context,
7398
7516
  self: value
7399
7517
  }) : null
7400
7518
  });
@@ -7414,8 +7532,7 @@ var searchController = ({
7414
7532
  removeSearchItems,
7415
7533
  onSearchString: onChangeSearchInput,
7416
7534
  handleAddTagSearch,
7417
- domain: formatDomain(),
7418
- context: contextSearch
7535
+ domain: formatDomain()
7419
7536
  };
7420
7537
  };
7421
7538
 
@@ -7480,6 +7597,7 @@ __reExport(index_exports, types_exports, module.exports);
7480
7597
  searchController,
7481
7598
  setStorageItemAsync,
7482
7599
  statusDropdownController,
7600
+ tableBodyController,
7483
7601
  tableController,
7484
7602
  tableGroupController,
7485
7603
  tableHeadController,