@fctc/widget-logic 1.10.6 → 2.0.2

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.mjs CHANGED
@@ -4086,6 +4086,7 @@ __export(index_exports, {
4086
4086
  useGetRowIds: () => useGetRowIds,
4087
4087
  useListData: () => useListData,
4088
4088
  useMenu: () => useMenu,
4089
+ useMenuItem: () => useMenuItem,
4089
4090
  useProfile: () => useProfile,
4090
4091
  useSelectionState: () => useSelectionState,
4091
4092
  useStorageState: () => useStorageState,
@@ -4106,6 +4107,7 @@ __export(hooks_exports, {
4106
4107
  useDetail: () => useDetail,
4107
4108
  useListData: () => useListData,
4108
4109
  useMenu: () => useMenu,
4110
+ useMenuItem: () => useMenuItem,
4109
4111
  useProfile: () => useProfile,
4110
4112
  useUser: () => useUser,
4111
4113
  useViewV2: () => useViewV2
@@ -4888,6 +4890,68 @@ var useAppProvider = () => {
4888
4890
  return context;
4889
4891
  };
4890
4892
 
4893
+ // src/hooks/core/use-menu-item.tsx
4894
+ import { getEnv as getEnv5 } from "@fctc/interface-logic/environment";
4895
+ import { useGetActionDetail } from "@fctc/interface-logic/hooks";
4896
+ import { useState as useState5 } from "react";
4897
+
4898
+ // src/utils.ts
4899
+ var utils_exports = {};
4900
+ __export(utils_exports, {
4901
+ API_APP_URL: () => API_APP_URL,
4902
+ API_PRESCHOOL_URL: () => API_PRESCHOOL_URL,
4903
+ STORAGES: () => STORAGES,
4904
+ combineContexts: () => combineContexts,
4905
+ convertFieldsToArray: () => convertFieldsToArray,
4906
+ countSum: () => countSum,
4907
+ getDateRange: () => getDateRange,
4908
+ languages: () => languages,
4909
+ mergeButtons: () => mergeButtons,
4910
+ setStorageItemAsync: () => setStorageItemAsync,
4911
+ useGetRowIds: () => useGetRowIds,
4912
+ useSelectionState: () => useSelectionState,
4913
+ useStorageState: () => useStorageState
4914
+ });
4915
+ __reExport(utils_exports, utils_star);
4916
+ import * as utils_star from "@fctc/interface-logic/utils";
4917
+
4918
+ // src/hooks/core/use-menu-item.tsx
4919
+ var useMenuItem = (props) => {
4920
+ const { menu, activeMenuId } = props;
4921
+ const model = menu?.action?.res_model;
4922
+ const aid = menu?.action?.id?.id;
4923
+ const id = menu?.id;
4924
+ const context = getEnv5().context;
4925
+ const queryActionDetail = useGetActionDetail({
4926
+ aid,
4927
+ id,
4928
+ model,
4929
+ context,
4930
+ enabled: true,
4931
+ queryKey: [`action-${aid}`]
4932
+ }).data;
4933
+ const [path, setPath] = useState5("");
4934
+ const handleClick = () => {
4935
+ if (location?.pathname === "/list/menu" && activeMenuId === menu?.id) {
4936
+ return;
4937
+ }
4938
+ const hasListView = queryActionDetail.views.some(
4939
+ ([id2, type]) => type === "list"
4940
+ );
4941
+ const viewType = hasListView ? "list" : "form";
4942
+ const isAccountPayment = menu?.action?.res_model === "account.payment" && menu?.action?.id?.id === 1551;
4943
+ const isConvertCurrencyMenu = menu?.action?.res_model === "currency.convert" && menu?.action?.id?.id === 1562;
4944
+ const path2 = (0, utils_exports.formatUrlPath)({
4945
+ viewType,
4946
+ actionPath: isConvertCurrencyMenu ? "menu" : isAccountPayment ? "menu" : menu?.action?.path || "menu",
4947
+ aid: menu?.action?.id?.id,
4948
+ model: queryActionDetail.res_model
4949
+ });
4950
+ setPath(path2);
4951
+ };
4952
+ return { handleClick, path, queryActionDetail };
4953
+ };
4954
+
4891
4955
  // src/hooks/utils/use-click-outside.ts
4892
4956
  import { useEffect as useEffect7, useRef as useRef2 } from "react";
4893
4957
  var DEFAULT_EVENTS = ["mousedown", "touchstart"];
@@ -4920,9 +4984,9 @@ var useClickOutside = ({
4920
4984
  };
4921
4985
 
4922
4986
  // src/hooks/utils/use-debounce.ts
4923
- import { useEffect as useEffect8, useState as useState5 } from "react";
4987
+ import { useEffect as useEffect8, useState as useState6 } from "react";
4924
4988
  function useDebounce(value, delay) {
4925
- const [debouncedValue, setDebouncedValue] = useState5(value);
4989
+ const [debouncedValue, setDebouncedValue] = useState6(value);
4926
4990
  useEffect8(() => {
4927
4991
  const handler = setTimeout(() => {
4928
4992
  setDebouncedValue(value);
@@ -5180,18 +5244,18 @@ var ChevronBottomIcon = ({
5180
5244
  };
5181
5245
 
5182
5246
  // src/widget/basic/status-dropdown-field/controller.ts
5183
- import { useEffect as useEffect9, useRef as useRef3, useState as useState6 } from "react";
5184
- import { getEnv as getEnv5 } from "@fctc/interface-logic/environment";
5247
+ import { useEffect as useEffect9, useRef as useRef3, useState as useState7 } from "react";
5248
+ import { getEnv as getEnv6 } from "@fctc/interface-logic/environment";
5185
5249
  import { useSave } from "@fctc/interface-logic/hooks";
5186
5250
  var statusDropdownController = (props) => {
5187
5251
  const { selection, isForm, id, model, name, state, onRefetch } = props;
5188
- const env = getEnv5();
5252
+ const env = getEnv6();
5189
5253
  const colors = {
5190
5254
  normal: "bg-[#e9ecef]",
5191
5255
  done: "bg-primary",
5192
5256
  blocked: "bg-red-500"
5193
5257
  };
5194
- const [isOpen, setIsOpen] = useState6(false);
5258
+ const [isOpen, setIsOpen] = useState7(false);
5195
5259
  const buttonRef = useRef3(null);
5196
5260
  useEffect9(() => {
5197
5261
  const handleClickOutside = (event) => {
@@ -5234,27 +5298,7 @@ var statusDropdownController = (props) => {
5234
5298
  };
5235
5299
 
5236
5300
  // src/widget/basic/many2one-field/controller.ts
5237
- import { useCallback as useCallback2, useEffect as useEffect10, useMemo as useMemo9, useState as useState7 } from "react";
5238
-
5239
- // src/utils.ts
5240
- var utils_exports = {};
5241
- __export(utils_exports, {
5242
- API_APP_URL: () => API_APP_URL,
5243
- API_PRESCHOOL_URL: () => API_PRESCHOOL_URL,
5244
- STORAGES: () => STORAGES,
5245
- combineContexts: () => combineContexts,
5246
- convertFieldsToArray: () => convertFieldsToArray,
5247
- countSum: () => countSum,
5248
- getDateRange: () => getDateRange,
5249
- languages: () => languages,
5250
- mergeButtons: () => mergeButtons,
5251
- setStorageItemAsync: () => setStorageItemAsync,
5252
- useGetRowIds: () => useGetRowIds,
5253
- useSelectionState: () => useSelectionState,
5254
- useStorageState: () => useStorageState
5255
- });
5256
- __reExport(utils_exports, utils_star2);
5257
- import * as utils_star2 from "@fctc/interface-logic/utils";
5301
+ import { useCallback as useCallback2, useEffect as useEffect10, useMemo as useMemo9, useState as useState8 } from "react";
5258
5302
 
5259
5303
  // src/provider.ts
5260
5304
  var provider_exports = {};
@@ -5276,22 +5320,22 @@ var many2oneFieldController = (props) => {
5276
5320
  options: fieldOptions,
5277
5321
  showDetail
5278
5322
  } = props;
5279
- const { env } = (0, provider_exports.useEnv)();
5280
- const [options, setOptions] = useState7([]);
5281
- const [inputValue, setInputValue] = useState7("");
5323
+ const [options, setOptions] = useState8([]);
5324
+ const [inputValue, setInputValue] = useState8("");
5282
5325
  const [debouncedInputValue] = useDebounce(inputValue, 1e3);
5283
- const [isShowModalMany2Many, setIsShowModalMany2Many] = useState7(false);
5284
- const [tempSelectedOption, setTempSelectedOption] = useState7(null);
5285
- const [domainModal, setDomainModal] = useState7(null);
5286
- const [domainObject, setDomainObject] = useState7(null);
5326
+ const [isShowModalMany2Many, setIsShowModalMany2Many] = useState8(false);
5327
+ const [tempSelectedOption, setTempSelectedOption] = useState8(null);
5328
+ const [domainModal, setDomainModal] = useState8(null);
5329
+ const [domainObject, setDomainObject] = useState8(null);
5287
5330
  const actionData = sessionStorageUtils.getActionData();
5288
5331
  const { menuList } = (0, store_exports.useAppSelector)(store_exports.selectNavbar);
5332
+ const { context } = (0, store_exports.useAppSelector)(store_exports.selectEnv);
5289
5333
  const initValue = methods?.getValues(name);
5290
5334
  const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
5291
5335
  const contextObject = {
5292
5336
  ...(0, utils_exports.evalJSONContext)(actionData?.context) || {},
5293
5337
  ...fieldContext,
5294
- ...env?.context
5338
+ ...context
5295
5339
  };
5296
5340
  const { useGetSelection: useGetSelection3 } = (0, provider_exports.useService)();
5297
5341
  const data = {
@@ -5435,13 +5479,13 @@ var many2oneFieldController = (props) => {
5435
5479
  };
5436
5480
 
5437
5481
  // src/widget/basic/many2one-button-field/controller.ts
5438
- import { getEnv as getEnv6 } from "@fctc/interface-logic/environment";
5482
+ import { getEnv as getEnv7 } from "@fctc/interface-logic/environment";
5439
5483
  import { useGetSelection } from "@fctc/interface-logic/hooks";
5440
5484
  import { evalJSONDomain as evalJSONDomain3, evalJSONContext as evalJSONContext3 } from "@fctc/interface-logic/utils";
5441
5485
  var many2oneButtonController = (props) => {
5442
5486
  const { domain, methods, relation } = props;
5443
5487
  const actionDataString = sessionStorage.getItem("actionData");
5444
- const env = getEnv6();
5488
+ const env = getEnv7();
5445
5489
  const domainObject = evalJSONDomain3(domain, methods?.getValues() || {});
5446
5490
  const actionData = actionDataString && actionDataString !== "undefined" ? JSON.parse(actionDataString) : {};
5447
5491
  const { data: dataOfSelection } = useGetSelection({
@@ -5462,10 +5506,16 @@ var many2oneButtonController = (props) => {
5462
5506
  };
5463
5507
 
5464
5508
  // src/widget/basic/many2many-field/controller.ts
5465
- import { useEffect as useEffect11, useMemo as useMemo10, useState as useState8 } from "react";
5509
+ import { useEffect as useEffect11, useMemo as useMemo10, useState as useState9 } from "react";
5510
+ import {
5511
+ useAppDispatch as useAppDispatch5,
5512
+ setFirstDomain,
5513
+ setViewDataStore,
5514
+ setPage,
5515
+ setGroupByDomain
5516
+ } from "@fctc/interface-logic/store";
5466
5517
  import {
5467
5518
  evalJSONContext as evalJSONContext4,
5468
- evalJSONDomain as evalJSONDomain4,
5469
5519
  formatSortingString as formatSortingString2
5470
5520
  } from "@fctc/interface-logic/utils";
5471
5521
  var many2manyFieldController = (props) => {
@@ -5473,44 +5523,45 @@ var many2manyFieldController = (props) => {
5473
5523
  relation,
5474
5524
  domain,
5475
5525
  context,
5476
- options,
5477
5526
  tab,
5527
+ model,
5528
+ aid,
5478
5529
  setSelectedRowKeys: setSelectedRowKeys4,
5530
+ fields,
5531
+ setFields,
5479
5532
  groupByDomain,
5480
- enabled: enabledCallAPI,
5481
- actionData
5533
+ page,
5534
+ options,
5535
+ sessionStorageUtils
5482
5536
  } = props;
5537
+ const appDispatch = useAppDispatch5();
5538
+ const actionData = sessionStorageUtils.getActionData();
5539
+ const [debouncedPage] = useDebounce(page, 500);
5540
+ const [order, setOrder] = useState9();
5541
+ const [isLoadedData, setIsLoadedData] = useState9(false);
5542
+ const [domainMany2Many, setDomainMany2Many] = useState9(domain);
5483
5543
  const { env } = (0, provider_exports.useEnv)();
5484
5544
  const { useGetView: useGetView2, useGetListData: useGetListData3, useGetFormView } = (0, provider_exports.useService)();
5485
- const [order, setOrder] = useState8();
5486
- const [isLoadedData, setIsLoadedData] = useState8(false);
5487
- const [page, setPage] = useState8(0);
5488
- const [domainMany2Many, setDomainMany2Many] = useState8(null);
5489
- const [debouncedPage] = useDebounce(page, 500);
5490
- const contextObject = {
5491
- ...env.context,
5492
- ...context || {}
5493
- };
5494
5545
  const viewParams = {
5495
5546
  model: relation,
5496
5547
  views: [
5497
5548
  [false, "list"],
5498
5549
  [false, "search"]
5499
5550
  ],
5500
- context: contextObject
5551
+ context
5501
5552
  };
5502
- const { data: viewResponse } = useGetView2(viewParams, enabledCallAPI);
5553
+ const { data: viewResponse } = useGetView2(viewParams, actionData);
5503
5554
  const baseModel = useMemo10(
5504
5555
  () => ({
5505
5556
  name: String(relation),
5506
5557
  view: viewResponse || {},
5507
- actContext: contextObject,
5558
+ actContext: context,
5508
5559
  fields: [
5509
5560
  ...Object.values(viewResponse?.views?.list?.fields ?? {}),
5510
5561
  ...tab?.fields ? tab.fields : []
5511
5562
  ]
5512
5563
  }),
5513
- [relation, viewResponse]
5564
+ [model, viewResponse]
5514
5565
  );
5515
5566
  const initModel = (0, hooks_exports.useModel)();
5516
5567
  const modelInstance = useMemo10(() => {
@@ -5529,15 +5580,26 @@ var many2manyFieldController = (props) => {
5529
5580
  const optionsObject = tab?.options ? evalJSONContext4(tab?.options) : (options ? evalJSONContext4(options) : {}) || {};
5530
5581
  const fetchData = async () => {
5531
5582
  try {
5532
- const domainParse = typeof domain === "string" ? evalJSONDomain4(domain, contextObject) : Array.isArray(domain) ? domain : [];
5533
- setDomainMany2Many(domainParse);
5534
- setPage(0);
5583
+ setDomainMany2Many(domain);
5584
+ appDispatch(setFirstDomain(domain));
5585
+ appDispatch(setViewDataStore(viewResponse));
5586
+ const modalData = viewResponse?.views?.list?.fields.map((field) => ({
5587
+ ...viewResponse?.models?.[String(model)]?.[field?.name],
5588
+ ...field
5589
+ }));
5590
+ if (!fields?.[`${aid}_${relation}_popupmany2many`] && modalData) {
5591
+ setFields({
5592
+ ...fields,
5593
+ [`${aid}_${relation}_popupmany2many`]: modalData
5594
+ });
5595
+ }
5596
+ appDispatch(setPage(0));
5535
5597
  } catch (err) {
5536
5598
  console.log(err);
5537
5599
  }
5538
5600
  };
5539
5601
  const queryKey = [
5540
- `view-${relation}`,
5602
+ `view-${relation}-${aid}`,
5541
5603
  specification,
5542
5604
  domainMany2Many,
5543
5605
  debouncedPage,
@@ -5550,16 +5612,16 @@ var many2manyFieldController = (props) => {
5550
5612
  domain: domainMany2Many,
5551
5613
  offset: debouncedPage * 10,
5552
5614
  limit: 10,
5553
- context: contextObject,
5615
+ context,
5554
5616
  fields: groupByDomain?.fields,
5555
5617
  groupby: [groupByDomain?.contexts[0]?.group_by],
5556
5618
  sort: order ? order : default_order ? formatSortingString2(default_order) : ""
5557
5619
  };
5558
- const enabled = enabledCallAPI && isLoadedData && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5620
+ const enabled = isLoadedData && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5559
5621
  const {
5560
5622
  data: dataResponse,
5561
- isLoading,
5562
- isFetched,
5623
+ isLoading: isDataLoading,
5624
+ isFetched: isDataResponseFetched,
5563
5625
  isPlaceholderData
5564
5626
  } = useGetListData3(data, queryKey, enabled);
5565
5627
  useEffect11(() => {
@@ -5567,65 +5629,76 @@ var many2manyFieldController = (props) => {
5567
5629
  fetchData();
5568
5630
  }
5569
5631
  return () => {
5570
- setPage(0);
5632
+ appDispatch(setGroupByDomain(null));
5633
+ setFields((prevFields) => ({
5634
+ ...prevFields,
5635
+ [`${aid}_${relation}_popupmany2many`]: null
5636
+ }));
5637
+ appDispatch(setPage(0));
5571
5638
  setSelectedRowKeys4([]);
5572
5639
  setDomainMany2Many(null);
5573
5640
  setIsLoadedData(false);
5574
5641
  };
5575
5642
  }, [viewResponse]);
5576
- const { rows, columns, typeTable, onToggleColumnOptional } = tableController({
5643
+ const { rows, columns, typeTable } = tableController({
5577
5644
  data: {
5578
- fields: viewResponse?.views?.list?.fields,
5645
+ fields: fields?.[`${aid}_${relation}_popupmany2many`] || viewResponse?.views?.list?.fields,
5579
5646
  records: dataResponse?.records ?? dataResponse?.groups,
5580
5647
  dataModel: viewResponse?.models?.[String(relation)],
5581
- context: contextObject,
5648
+ context: { ...env.context, ...context },
5582
5649
  typeTable: dataResponse?.groups ? "group" : "list"
5583
5650
  }
5584
5651
  });
5585
- const searchControllers = searchController({
5586
- viewData: viewResponse,
5587
- model: relation ?? "",
5588
- context: contextObject,
5589
- domain: domainMany2Many,
5590
- fieldsList: [
5591
- ...columns?.filter(
5592
- (col) => col?.field?.type_co === "field" && col?.optional !== "hide"
5593
- )?.map((col) => ({ ...col.field })) ?? []
5594
- ]
5652
+ const dataFormView = {
5653
+ id: null,
5654
+ model: relation,
5655
+ context
5656
+ };
5657
+ const {
5658
+ refetch,
5659
+ data: dataFormViewResponse,
5660
+ isSuccess
5661
+ } = useGetFormView({
5662
+ data: dataFormView,
5663
+ queryKey: [`form-view-action-${relation}`],
5664
+ enabled: false
5595
5665
  });
5666
+ useEffect11(() => {
5667
+ if (isSuccess && dataFormViewResponse) {
5668
+ sessionStorage.setItem("actionData", JSON.stringify(dataFormViewResponse));
5669
+ window.location.href = `/form/menu?model=${relation}`;
5670
+ }
5671
+ }, [isSuccess]);
5596
5672
  useEffect11(() => {
5597
5673
  if (domainMany2Many && !isLoadedData) {
5598
5674
  setIsLoadedData(true);
5599
5675
  }
5600
5676
  }, [domainMany2Many]);
5601
5677
  const handleCreateNewOnPage = async () => {
5678
+ try {
5679
+ refetch();
5680
+ } catch (error) {
5681
+ console.log(error);
5682
+ }
5602
5683
  };
5603
5684
  return {
5604
5685
  handleCreateNewOnPage,
5605
5686
  optionsObject,
5606
- totalRows: dataResponse?.length ?? 0,
5607
5687
  rows,
5608
5688
  columns,
5609
- onToggleColumnOptional,
5610
5689
  typeTable,
5611
- isLoading,
5612
- isFetched,
5613
- isPlaceholderData,
5614
- setPage,
5615
- page,
5616
- viewData: viewResponse,
5617
- domain: domainMany2Many,
5618
- setDomain: setDomainMany2Many,
5619
- searchController: searchControllers
5690
+ isDataLoading,
5691
+ isDataResponseFetched,
5692
+ isPlaceholderData
5620
5693
  };
5621
5694
  };
5622
5695
 
5623
5696
  // src/widget/basic/many2many-tags-field/controller.ts
5624
5697
  import { useMemo as useMemo11 } from "react";
5625
5698
  import { WIDGETAVATAR, WIDGETCOLOR } from "@fctc/interface-logic/constants";
5626
- import { getEnv as getEnv7 } from "@fctc/interface-logic/environment";
5699
+ import { getEnv as getEnv8 } from "@fctc/interface-logic/environment";
5627
5700
  import { useGetSelection as useGetSelection2 } from "@fctc/interface-logic/hooks";
5628
- import { evalJSONContext as evalJSONContext5, evalJSONDomain as evalJSONDomain5 } from "@fctc/interface-logic/utils";
5701
+ import { evalJSONContext as evalJSONContext5, evalJSONDomain as evalJSONDomain4 } from "@fctc/interface-logic/utils";
5629
5702
  var many2manyTagsController = (props) => {
5630
5703
  const {
5631
5704
  relation,
@@ -5636,10 +5709,10 @@ var many2manyTagsController = (props) => {
5636
5709
  placeholderNoOption
5637
5710
  } = props;
5638
5711
  const isUser = relation === "res.users" || relation === "res.partner";
5639
- const env = getEnv7();
5712
+ const env = getEnv8();
5640
5713
  const addtionalFields = optionsFields ? evalJSONContext5(optionsFields) : null;
5641
5714
  const domainObject = useMemo11(
5642
- () => evalJSONDomain5(domain, JSON.parse(JSON.stringify(formValues || {}))),
5715
+ () => evalJSONDomain4(domain, JSON.parse(JSON.stringify(formValues || {}))),
5643
5716
  [domain, formValues]
5644
5717
  );
5645
5718
  const data = {
@@ -5681,8 +5754,8 @@ var many2manyTagsController = (props) => {
5681
5754
  };
5682
5755
 
5683
5756
  // src/widget/basic/status-bar-field/controller.ts
5684
- import { useState as useState9 } from "react";
5685
- import { evalJSONDomain as evalJSONDomain6 } from "@fctc/interface-logic/utils";
5757
+ import { useState as useState10 } from "react";
5758
+ import { evalJSONDomain as evalJSONDomain5 } from "@fctc/interface-logic/utils";
5686
5759
  var durationController = (props) => {
5687
5760
  const { relation, domain, formValues, name, id, model, onRefetch } = props;
5688
5761
  const specification = {
@@ -5692,13 +5765,13 @@ var durationController = (props) => {
5692
5765
  };
5693
5766
  const { useGetListData: useGetListData3, useChangeStatus } = (0, provider_exports.useService)();
5694
5767
  const { env } = (0, provider_exports.useEnv)();
5695
- const [disabled, setDisabled] = useState9(false);
5696
- const [modelStatus, setModalStatus] = useState9(false);
5768
+ const [disabled, setDisabled] = useState10(false);
5769
+ const [modelStatus, setModalStatus] = useState10(false);
5697
5770
  const queryKey = [`data-status-duration`, specification];
5698
5771
  const listDataProps = {
5699
5772
  model: relation,
5700
5773
  specification,
5701
- domain: evalJSONDomain6(domain, JSON.parse(JSON.stringify(formValues))),
5774
+ domain: evalJSONDomain5(domain, JSON.parse(JSON.stringify(formValues))),
5702
5775
  limit: 10,
5703
5776
  offset: 0,
5704
5777
  fields: "",
@@ -5799,10 +5872,10 @@ var priorityFieldController = (props) => {
5799
5872
  };
5800
5873
 
5801
5874
  // src/widget/basic/download-file-field/controller.ts
5802
- import { useId, useState as useState10 } from "react";
5875
+ import { useId, useState as useState11 } from "react";
5803
5876
  var downloadFileController = () => {
5804
5877
  const inputId = useId();
5805
- const [file, setFile] = useState10(null);
5878
+ const [file, setFile] = useState11(null);
5806
5879
  const handleFileChange = (e) => {
5807
5880
  setFile(e.target.files[0]);
5808
5881
  };
@@ -6734,11 +6807,11 @@ var dateFieldController = (props) => {
6734
6807
  };
6735
6808
 
6736
6809
  // src/widget/basic/copy-link-button/controller.ts
6737
- import { useState as useState11 } from "react";
6810
+ import { useState as useState12 } from "react";
6738
6811
  import { copyTextToClipboard } from "@fctc/interface-logic/utils";
6739
6812
  var copyLinkButtonController = (props) => {
6740
6813
  const { value, defaultValue } = props;
6741
- const [isCopied, setIsCopied] = useState11(false);
6814
+ const [isCopied, setIsCopied] = useState12(false);
6742
6815
  const handleCopyToClipboard = async (value2) => {
6743
6816
  await copyTextToClipboard(value2);
6744
6817
  setIsCopied(true);
@@ -6786,14 +6859,14 @@ var colorFieldController = (props) => {
6786
6859
  };
6787
6860
 
6788
6861
  // src/widget/basic/binary-field/controller.ts
6789
- import { useEffect as useEffect12, useId as useId2, useRef as useRef4, useState as useState12 } from "react";
6862
+ import { useEffect as useEffect12, useId as useId2, useRef as useRef4, useState as useState13 } from "react";
6790
6863
  import { isBase64Image } from "@fctc/interface-logic/utils";
6791
6864
  var binaryFieldController = (props) => {
6792
6865
  const { name, methods, readonly = false, value } = props;
6793
6866
  const inputId = useId2();
6794
- const [selectedImage, setSelectedImage] = useState12(null);
6795
- const [initialImage, setInitialImage] = useState12(value || null);
6796
- const [isInsideTable, setIsInsideTable] = useState12(false);
6867
+ const [selectedImage, setSelectedImage] = useState13(null);
6868
+ const [initialImage, setInitialImage] = useState13(value || null);
6869
+ const [isInsideTable, setIsInsideTable] = useState13(false);
6797
6870
  const { setValue } = methods;
6798
6871
  const binaryRef = useRef4(null);
6799
6872
  const convertUrlToBase64 = async (url) => {
@@ -6884,7 +6957,7 @@ var binaryFieldController = (props) => {
6884
6957
  };
6885
6958
 
6886
6959
  // src/widget/advance/table/table-body/controller.ts
6887
- import { useAppDispatch as useAppDispatch5, setSelectedRowKeys } from "@fctc/interface-logic/store";
6960
+ import { useAppDispatch as useAppDispatch6, setSelectedRowKeys } from "@fctc/interface-logic/store";
6888
6961
  import { useEffect as useEffect13, useMemo as useMemo12 } from "react";
6889
6962
  var tableBodyController = (props) => {
6890
6963
  const {
@@ -6897,7 +6970,7 @@ var tableBodyController = (props) => {
6897
6970
  selectedRowKeysRef,
6898
6971
  onClickRow
6899
6972
  } = props;
6900
- const appDispatch = useAppDispatch5();
6973
+ const appDispatch = useAppDispatch6();
6901
6974
  const checked = useMemo12(() => {
6902
6975
  if (!row?.id) return false;
6903
6976
  if (selectedRowKeys?.includes(row.id)) {
@@ -6952,14 +7025,14 @@ var tableBodyController = (props) => {
6952
7025
 
6953
7026
  // src/widget/advance/table/table-head/controller.ts
6954
7027
  import {
6955
- useAppDispatch as useAppDispatch6,
7028
+ useAppDispatch as useAppDispatch7,
6956
7029
  useAppSelector as useAppSelector4,
6957
7030
  selectSearch as selectSearch3,
6958
7031
  setSelectedRowKeys as setSelectedRowKeys2
6959
7032
  } from "@fctc/interface-logic/store";
6960
7033
  var tableHeadController = (props) => {
6961
7034
  const { typeTable, rows, selectedRowKeysRef } = props;
6962
- const appDispatch = useAppDispatch6();
7035
+ const appDispatch = useAppDispatch7();
6963
7036
  const { groupByDomain } = useAppSelector4(selectSearch3);
6964
7037
  const handleCheckBoxAll = (event) => {
6965
7038
  if (event?.target?.checked && typeTable === "list") {
@@ -6993,7 +7066,7 @@ var tableHeadController = (props) => {
6993
7066
  };
6994
7067
 
6995
7068
  // src/widget/advance/table/table-view/controller.ts
6996
- import { useEffect as useEffect14, useMemo as useMemo13, useRef as useRef5, useState as useState13 } from "react";
7069
+ import { useEffect as useEffect14, useMemo as useMemo13, useRef as useRef5, useState as useState14 } from "react";
6997
7070
  import {
6998
7071
  useAppSelector as useAppSelector5,
6999
7072
  selectSearch as selectSearch4,
@@ -7001,8 +7074,8 @@ import {
7001
7074
  } from "@fctc/interface-logic/store";
7002
7075
  import { domainHelper } from "@fctc/interface-logic/utils";
7003
7076
  var tableController = ({ data }) => {
7004
- const [rows, setRows] = useState13(data.records || []);
7005
- const [columns, setColumns] = useState13([]);
7077
+ const [rows, setRows] = useState14(data.records || []);
7078
+ const [columns, setColumns] = useState14([]);
7006
7079
  const dataModelFields = data.fields?.map((field) => {
7007
7080
  return {
7008
7081
  ...data.dataModel?.[field?.name],
@@ -7076,7 +7149,7 @@ var tableController = ({ data }) => {
7076
7149
  };
7077
7150
 
7078
7151
  // src/widget/advance/table/table-group/controller.ts
7079
- import { useEffect as useEffect15, useMemo as useMemo14, useState as useState14 } from "react";
7152
+ import { useEffect as useEffect15, useMemo as useMemo14, useState as useState15 } from "react";
7080
7153
  import {
7081
7154
  useOdooDataTransform,
7082
7155
  useGetListData as useGetListData2
@@ -7085,7 +7158,7 @@ import {
7085
7158
  useAppSelector as useAppSelector6,
7086
7159
  selectSearch as selectSearch5,
7087
7160
  selectList as selectList4,
7088
- useAppDispatch as useAppDispatch7,
7161
+ useAppDispatch as useAppDispatch8,
7089
7162
  setSelectedRowKeys as setSelectedRowKeys3
7090
7163
  } from "@fctc/interface-logic/store";
7091
7164
 
@@ -7115,14 +7188,14 @@ var tableGroupController = (props) => {
7115
7188
  setIsAutoSelect,
7116
7189
  selectedRowKeysRef
7117
7190
  } = props;
7118
- const [pageGroup, setPageGroup] = useState14(0);
7191
+ const [pageGroup, setPageGroup] = useState15(0);
7119
7192
  const { groupByDomain, selectedTags } = useAppSelector6(selectSearch5);
7120
7193
  const { selectedRowKeys } = useAppSelector6(selectList4);
7121
- const appDispatch = useAppDispatch7();
7194
+ const appDispatch = useAppDispatch8();
7122
7195
  const { toDataJS } = useOdooDataTransform();
7123
7196
  const initVal = toDataJS(row, viewData, model);
7124
- const [isShowGroup, setIsShowGroup] = useState14(false);
7125
- const [colEmptyGroup, setColEmptyGroup] = useState14({
7197
+ const [isShowGroup, setIsShowGroup] = useState15(false);
7198
+ const [colEmptyGroup, setColEmptyGroup] = useState15({
7126
7199
  fromStart: 1,
7127
7200
  fromEnd: 1
7128
7201
  });
@@ -7259,28 +7332,26 @@ var import_moment2 = __toESM(require_moment());
7259
7332
  import { SearchType } from "@fctc/interface-logic/constants";
7260
7333
  import {
7261
7334
  domainHelper as domainHelper2,
7262
- evalJSONContext as evalJSONContext8,
7263
- evalJSONDomain as evalJSONDomain7,
7335
+ evalJSONDomain as evalJSONDomain6,
7264
7336
  validateAndParseDate
7265
7337
  } from "@fctc/interface-logic/utils";
7266
- import { useCallback as useCallback3, useEffect as useEffect16, useState as useState15 } from "react";
7338
+ import { useCallback as useCallback3, useEffect as useEffect16, useState as useState16 } from "react";
7267
7339
  var searchController = ({
7268
7340
  viewData,
7269
- model,
7270
- domain,
7271
- context,
7272
- fieldsList
7341
+ actionData,
7342
+ fieldsList,
7343
+ contextSearch,
7344
+ setSearchMap,
7345
+ searchMap
7273
7346
  }) => {
7274
- const { env } = (0, provider_exports.useEnv)();
7275
- const [filterBy, setFilterBy] = useState15(null);
7276
- const [searchBy, setSearchBy] = useState15(null);
7277
- const [groupBy, setGroupBy] = useState15(null);
7278
- const [selectedTags, setSelectedTags] = useState15(null);
7279
- const [searchString, setSearchString] = useState15("");
7280
- const [searchMap, setSearchMap] = useState15({});
7281
- const actionContext = typeof context === "string" ? evalJSONContext8(context) : context;
7282
- const contextSearch = { ...env.context, ...actionContext };
7283
- const domainAction = domain ? Array.isArray(domain) ? [...domain] : evalJSONDomain7(domain, contextSearch) : [];
7347
+ const [filterBy, setFilterBy] = useState16(null);
7348
+ const [searchBy, setSearchBy] = useState16(null);
7349
+ const [groupBy, setGroupBy] = useState16(null);
7350
+ const [selectedTags, setSelectedTags] = useState16(null);
7351
+ const [searchString, setSearchString] = useState16("");
7352
+ const domainAction = actionData?.domain ? Array.isArray(actionData?.domain) ? [...actionData?.domain] : evalJSONDomain6(actionData?.domain, contextSearch) : [];
7353
+ const aid = actionData?.id;
7354
+ const model = actionData?.res_model;
7284
7355
  const clearSearch = () => {
7285
7356
  setFilterBy([]);
7286
7357
  setGroupBy([]);
@@ -7325,8 +7396,9 @@ var searchController = ({
7325
7396
  }
7326
7397
  };
7327
7398
  useEffect16(() => {
7399
+ clearSearch();
7328
7400
  fetchData();
7329
- }, [model, viewData]);
7401
+ }, [aid, model, viewData]);
7330
7402
  const onChangeSearchInput = (search_string) => {
7331
7403
  setSearchString(search_string);
7332
7404
  };
@@ -7363,27 +7435,27 @@ var searchController = ({
7363
7435
  };
7364
7436
  const formatDomain = () => {
7365
7437
  if (domainAction) {
7366
- const domain2 = [];
7438
+ const domain = [];
7367
7439
  if (domainAction?.length > 0) {
7368
7440
  if (Object.keys(searchMap).length > 0) {
7369
- domain2.push("&");
7441
+ domain.push("&");
7370
7442
  }
7371
7443
  domainAction.forEach((domainItem) => {
7372
- domain2.push(domainItem);
7444
+ domain.push(domainItem);
7373
7445
  });
7374
7446
  }
7375
7447
  Object.keys(searchMap).forEach((key, keyIndex, keys) => {
7376
7448
  if (!key?.includes(SearchType.GROUP)) {
7377
7449
  if (keys.length > 1 && keyIndex < keys.length - 1) {
7378
- domain2.push("&");
7450
+ domain.push("&");
7379
7451
  }
7380
7452
  const valuesOfKey = searchMap[key];
7381
7453
  valuesOfKey.forEach((value, index) => {
7382
7454
  if (index < valuesOfKey.length - 1) {
7383
- domain2.push("|");
7455
+ domain.push("|");
7384
7456
  }
7385
7457
  if (value.domain) {
7386
- domain2.push(...value.domain);
7458
+ domain.push(...value.domain);
7387
7459
  return;
7388
7460
  }
7389
7461
  let valueDomainItem = value?.value;
@@ -7399,11 +7471,11 @@ var searchController = ({
7399
7471
  }
7400
7472
  }
7401
7473
  const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
7402
- domain2.push([value.name, operator, valueDomainItem]);
7474
+ domain.push([value.name, operator, valueDomainItem]);
7403
7475
  });
7404
7476
  }
7405
7477
  });
7406
- return [...domain2];
7478
+ return [...domain];
7407
7479
  }
7408
7480
  };
7409
7481
  const setTagSearch = useCallback3(
@@ -7434,16 +7506,16 @@ var searchController = ({
7434
7506
  const contexts = [];
7435
7507
  let groupValues = [];
7436
7508
  objValues?.forEach((objValue) => {
7437
- const { context: context2, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7509
+ const { context, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7438
7510
  const indexAppend = groupIndex2 != null ? groupIndex2 : viewData?.views?.search?.filters_by?.length ?? 0;
7439
7511
  contexts.push(
7440
- ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({ group_by: item })) : [context2]
7512
+ ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({ group_by: item })) : [context]
7441
7513
  );
7442
7514
  groupValues[indexAppend] = {
7443
7515
  contexts: [
7444
- ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({
7516
+ ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({
7445
7517
  group_by: item
7446
- })) : [context2]
7518
+ })) : [context]
7447
7519
  ],
7448
7520
  strings: isDefault ? [value] : [...groupValues[indexAppend]?.strings ?? [], value]
7449
7521
  };
@@ -7475,34 +7547,34 @@ var searchController = ({
7475
7547
  }, [searchMap]);
7476
7548
  const handleAddTagSearch = (tag) => {
7477
7549
  const {
7478
- domain: domain2,
7550
+ domain,
7479
7551
  groupIndex,
7480
7552
  value,
7481
7553
  type,
7482
7554
  title,
7483
- context: context2,
7555
+ context,
7484
7556
  active,
7485
7557
  dataIndex
7486
7558
  } = tag;
7487
- const domainFormat = new domainHelper2.Domain(domain2);
7559
+ const domainFormat = new domainHelper2.Domain(domain);
7488
7560
  if (type === SearchType.FILTER) {
7489
7561
  addSearchItems(`${SearchType.FILTER}_${groupIndex}`, {
7490
7562
  ...tag,
7491
- domain: domain2 ? domainFormat.toList(context2) : null
7563
+ domain: domain ? domainFormat.toList(context) : null
7492
7564
  });
7493
7565
  } else if (type === SearchType.SEARCH) {
7494
7566
  addSearchItems(`${SearchType.SEARCH}_${String(dataIndex)}`, {
7495
7567
  ...tag,
7496
- domain: domain2 ? domainFormat.toList({
7497
- ...context2,
7568
+ domain: domain ? domainFormat.toList({
7569
+ ...context,
7498
7570
  self: value
7499
7571
  }) : null
7500
7572
  });
7501
7573
  } else if (type === SearchType.GROUP) {
7502
7574
  addSearchItems(`${SearchType.GROUP}`, {
7503
7575
  ...tag,
7504
- domain: domain2 ? domainFormat.toList({
7505
- context: context2,
7576
+ domain: domain ? domainFormat.toList({
7577
+ context,
7506
7578
  self: value
7507
7579
  }) : null
7508
7580
  });
@@ -7522,8 +7594,7 @@ var searchController = ({
7522
7594
  removeSearchItems,
7523
7595
  onSearchString: onChangeSearchInput,
7524
7596
  handleAddTagSearch,
7525
- domain: formatDomain(),
7526
- context: contextSearch
7597
+ domain: formatDomain()
7527
7598
  };
7528
7599
  };
7529
7600
 
@@ -7604,6 +7675,7 @@ export {
7604
7675
  useGetRowIds,
7605
7676
  useListData,
7606
7677
  useMenu,
7678
+ useMenuItem,
7607
7679
  useProfile,
7608
7680
  useSelectionState,
7609
7681
  useStorageState,