@fctc/widget-logic 2.0.8 → 2.0.10

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.mjs CHANGED
@@ -4091,7 +4091,7 @@ var statusDropdownController = (props) => {
4091
4091
  };
4092
4092
 
4093
4093
  // src/widget/basic/many2one-field/controller.ts
4094
- import { useCallback as useCallback2, useEffect as useEffect10, useMemo as useMemo9, useState as useState7 } from "react";
4094
+ import { useCallback as useCallback2, useEffect as useEffect10, useMemo as useMemo9, useState as useState8 } from "react";
4095
4095
 
4096
4096
  // src/hooks.ts
4097
4097
  var hooks_exports = {};
@@ -4106,6 +4106,7 @@ __export(hooks_exports, {
4106
4106
  useDetail: () => useDetail,
4107
4107
  useListData: () => useListData,
4108
4108
  useMenu: () => useMenu,
4109
+ useMenuItem: () => useMenuItem,
4109
4110
  useProfile: () => useProfile,
4110
4111
  useUser: () => useUser,
4111
4112
  useViewV2: () => useViewV2
@@ -4888,6 +4889,68 @@ var useAppProvider = () => {
4888
4889
  return context;
4889
4890
  };
4890
4891
 
4892
+ // src/hooks/core/use-menu-item.tsx
4893
+ import { getEnv as getEnv6 } from "@fctc/interface-logic/environment";
4894
+ import { useGetActionDetail } from "@fctc/interface-logic/hooks";
4895
+ import { useState as useState6 } from "react";
4896
+
4897
+ // src/utils.ts
4898
+ var utils_exports = {};
4899
+ __export(utils_exports, {
4900
+ API_APP_URL: () => API_APP_URL,
4901
+ API_PRESCHOOL_URL: () => API_PRESCHOOL_URL,
4902
+ STORAGES: () => STORAGES,
4903
+ combineContexts: () => combineContexts,
4904
+ convertFieldsToArray: () => convertFieldsToArray,
4905
+ countSum: () => countSum,
4906
+ getDateRange: () => getDateRange,
4907
+ languages: () => languages,
4908
+ mergeButtons: () => mergeButtons,
4909
+ setStorageItemAsync: () => setStorageItemAsync,
4910
+ useGetRowIds: () => useGetRowIds,
4911
+ useSelectionState: () => useSelectionState,
4912
+ useStorageState: () => useStorageState
4913
+ });
4914
+ __reExport(utils_exports, utils_star);
4915
+ import * as utils_star from "@fctc/interface-logic/utils";
4916
+
4917
+ // src/hooks/core/use-menu-item.tsx
4918
+ var useMenuItem = (props) => {
4919
+ const { menu, activeMenuId } = props;
4920
+ const model = menu?.action?.res_model;
4921
+ const aid = menu?.action?.id?.id;
4922
+ const id = menu?.id;
4923
+ const context = getEnv6().context;
4924
+ const queryActionDetail = useGetActionDetail({
4925
+ aid,
4926
+ id,
4927
+ model,
4928
+ context,
4929
+ enabled: true,
4930
+ queryKey: [`action-${aid}`]
4931
+ }).data;
4932
+ const [path, setPath] = useState6("");
4933
+ const handleClick = () => {
4934
+ if (location?.pathname === "/list/menu" && activeMenuId === menu?.id) {
4935
+ return;
4936
+ }
4937
+ const hasListView = queryActionDetail.views.some(
4938
+ ([id2, type]) => type === "list"
4939
+ );
4940
+ const viewType = hasListView ? "list" : "form";
4941
+ const isAccountPayment = menu?.action?.res_model === "account.payment" && menu?.action?.id?.id === 1551;
4942
+ const isConvertCurrencyMenu = menu?.action?.res_model === "currency.convert" && menu?.action?.id?.id === 1562;
4943
+ const path2 = (0, utils_exports.formatUrlPath)({
4944
+ viewType,
4945
+ actionPath: isConvertCurrencyMenu ? "menu" : isAccountPayment ? "menu" : menu?.action?.path || "menu",
4946
+ aid: menu?.action?.id?.id,
4947
+ model: queryActionDetail.res_model
4948
+ });
4949
+ setPath(path2);
4950
+ };
4951
+ return { handleClick, path, queryActionDetail };
4952
+ };
4953
+
4891
4954
  // src/hooks/utils/use-click-outside.ts
4892
4955
  import { useEffect as useEffect8, useRef as useRef3 } from "react";
4893
4956
  var DEFAULT_EVENTS = ["mousedown", "touchstart"];
@@ -4920,9 +4983,9 @@ var useClickOutside = ({
4920
4983
  };
4921
4984
 
4922
4985
  // src/hooks/utils/use-debounce.ts
4923
- import { useEffect as useEffect9, useState as useState6 } from "react";
4986
+ import { useEffect as useEffect9, useState as useState7 } from "react";
4924
4987
  function useDebounce(value, delay) {
4925
- const [debouncedValue, setDebouncedValue] = useState6(value);
4988
+ const [debouncedValue, setDebouncedValue] = useState7(value);
4926
4989
  useEffect9(() => {
4927
4990
  const handler = setTimeout(() => {
4928
4991
  setDebouncedValue(value);
@@ -4938,26 +5001,6 @@ function useDebounce(value, delay) {
4938
5001
  __reExport(hooks_exports, hooks_star);
4939
5002
  import * as hooks_star from "@fctc/interface-logic/hooks";
4940
5003
 
4941
- // src/utils.ts
4942
- var utils_exports = {};
4943
- __export(utils_exports, {
4944
- API_APP_URL: () => API_APP_URL,
4945
- API_PRESCHOOL_URL: () => API_PRESCHOOL_URL,
4946
- STORAGES: () => STORAGES,
4947
- combineContexts: () => combineContexts,
4948
- convertFieldsToArray: () => convertFieldsToArray,
4949
- countSum: () => countSum,
4950
- getDateRange: () => getDateRange,
4951
- languages: () => languages,
4952
- mergeButtons: () => mergeButtons,
4953
- setStorageItemAsync: () => setStorageItemAsync,
4954
- useGetRowIds: () => useGetRowIds,
4955
- useSelectionState: () => useSelectionState,
4956
- useStorageState: () => useStorageState
4957
- });
4958
- __reExport(utils_exports, utils_star2);
4959
- import * as utils_star2 from "@fctc/interface-logic/utils";
4960
-
4961
5004
  // src/provider.ts
4962
5005
  var provider_exports = {};
4963
5006
  __reExport(provider_exports, provider_star);
@@ -4978,22 +5021,22 @@ var many2oneFieldController = (props) => {
4978
5021
  options: fieldOptions,
4979
5022
  showDetail
4980
5023
  } = props;
4981
- const [options, setOptions] = useState7([]);
4982
- const [inputValue, setInputValue] = useState7("");
5024
+ const { env } = (0, provider_exports.useEnv)();
5025
+ const [options, setOptions] = useState8([]);
5026
+ const [inputValue, setInputValue] = useState8("");
4983
5027
  const [debouncedInputValue] = useDebounce(inputValue, 1e3);
4984
- const [isShowModalMany2Many, setIsShowModalMany2Many] = useState7(false);
4985
- const [tempSelectedOption, setTempSelectedOption] = useState7(null);
4986
- const [domainModal, setDomainModal] = useState7(null);
4987
- const [domainObject, setDomainObject] = useState7(null);
5028
+ const [isShowModalMany2Many, setIsShowModalMany2Many] = useState8(false);
5029
+ const [tempSelectedOption, setTempSelectedOption] = useState8(null);
5030
+ const [domainModal, setDomainModal] = useState8(null);
5031
+ const [domainObject, setDomainObject] = useState8(null);
4988
5032
  const actionData = sessionStorageUtils.getActionData();
4989
5033
  const { menuList } = (0, store_exports.useAppSelector)(store_exports.selectNavbar);
4990
- const { context } = (0, store_exports.useAppSelector)(store_exports.selectEnv);
4991
5034
  const initValue = methods?.getValues(name);
4992
5035
  const optionsObject = (0, utils_exports.evalJSONContext)(fieldOptions) || {};
4993
5036
  const contextObject = {
4994
5037
  ...(0, utils_exports.evalJSONContext)(actionData?.context) || {},
4995
5038
  ...fieldContext,
4996
- ...context
5039
+ ...env?.context
4997
5040
  };
4998
5041
  const { useGetSelection: useGetSelection2 } = (0, provider_exports.useService)();
4999
5042
  const data = {
@@ -5137,13 +5180,13 @@ var many2oneFieldController = (props) => {
5137
5180
  };
5138
5181
 
5139
5182
  // src/widget/basic/many2one-button-field/controller.ts
5140
- import { getEnv as getEnv6 } from "@fctc/interface-logic/environment";
5183
+ import { getEnv as getEnv7 } from "@fctc/interface-logic/environment";
5141
5184
  import { useGetSelection } from "@fctc/interface-logic/hooks";
5142
5185
  import { evalJSONDomain as evalJSONDomain3, evalJSONContext as evalJSONContext3 } from "@fctc/interface-logic/utils";
5143
5186
  var many2oneButtonController = (props) => {
5144
5187
  const { domain, methods, relation } = props;
5145
5188
  const actionDataString = sessionStorage.getItem("actionData");
5146
- const env = getEnv6();
5189
+ const env = getEnv7();
5147
5190
  const domainObject = evalJSONDomain3(domain, methods?.getValues() || {});
5148
5191
  const actionData = actionDataString && actionDataString !== "undefined" ? JSON.parse(actionDataString) : {};
5149
5192
  const { data: dataOfSelection } = useGetSelection({
@@ -5164,16 +5207,10 @@ var many2oneButtonController = (props) => {
5164
5207
  };
5165
5208
 
5166
5209
  // src/widget/basic/many2many-field/controller.ts
5167
- import { useEffect as useEffect11, useMemo as useMemo10, useState as useState8 } from "react";
5168
- import {
5169
- useAppDispatch as useAppDispatch5,
5170
- setFirstDomain,
5171
- setViewDataStore,
5172
- setPage,
5173
- setGroupByDomain
5174
- } from "@fctc/interface-logic/store";
5210
+ import { useEffect as useEffect11, useMemo as useMemo10, useState as useState9 } from "react";
5175
5211
  import {
5176
5212
  evalJSONContext as evalJSONContext4,
5213
+ evalJSONDomain as evalJSONDomain4,
5177
5214
  formatSortingString as formatSortingString2
5178
5215
  } from "@fctc/interface-logic/utils";
5179
5216
  var many2manyFieldController = (props) => {
@@ -5181,45 +5218,43 @@ var many2manyFieldController = (props) => {
5181
5218
  relation,
5182
5219
  domain,
5183
5220
  context,
5221
+ options,
5184
5222
  tab,
5185
- model,
5186
- aid,
5187
- setSelectedRowKeys: setSelectedRowKeys4,
5188
- fields,
5189
- setFields,
5223
+ setSelectedRowKeys: setSelectedRowKeys3,
5190
5224
  groupByDomain,
5191
- page,
5192
- options,
5193
- sessionStorageUtils
5225
+ enabled: enabledCallAPI,
5226
+ actionData
5194
5227
  } = props;
5195
- const appDispatch = useAppDispatch5();
5196
- const actionData = sessionStorageUtils.getActionData();
5197
- const [debouncedPage] = useDebounce(page, 500);
5198
- const [order, setOrder] = useState8();
5199
- const [isLoadedData, setIsLoadedData] = useState8(false);
5200
- const [domainMany2Many, setDomainMany2Many] = useState8(domain);
5201
5228
  const { env } = (0, provider_exports.useEnv)();
5202
5229
  const { useGetView: useGetView2, useGetListData: useGetListData3, useGetFormView } = (0, provider_exports.useService)();
5230
+ const [order, setOrder] = useState9();
5231
+ const [page, setPage] = useState9(0);
5232
+ const [domainMany2Many, setDomainMany2Many] = useState9(null);
5233
+ const [debouncedPage] = useDebounce(page, 500);
5234
+ const contextObject = {
5235
+ ...env.context,
5236
+ ...context || {}
5237
+ };
5203
5238
  const viewParams = {
5204
5239
  model: relation,
5205
5240
  views: [
5206
5241
  [false, "list"],
5207
5242
  [false, "search"]
5208
5243
  ],
5209
- context
5244
+ context: contextObject
5210
5245
  };
5211
- const { data: viewResponse } = useGetView2(viewParams, actionData);
5246
+ const { data: viewResponse } = useGetView2(viewParams, enabledCallAPI);
5212
5247
  const baseModel = useMemo10(
5213
5248
  () => ({
5214
5249
  name: String(relation),
5215
5250
  view: viewResponse || {},
5216
- actContext: context,
5251
+ actContext: contextObject,
5217
5252
  fields: [
5218
5253
  ...Object.values(viewResponse?.views?.list?.fields ?? {}),
5219
5254
  ...tab?.fields ? tab.fields : []
5220
5255
  ]
5221
5256
  }),
5222
- [model, viewResponse]
5257
+ [relation, viewResponse]
5223
5258
  );
5224
5259
  const initModel = (0, hooks_exports.useModel)();
5225
5260
  const modelInstance = useMemo10(() => {
@@ -5238,26 +5273,15 @@ var many2manyFieldController = (props) => {
5238
5273
  const optionsObject = tab?.options ? evalJSONContext4(tab?.options) : (options ? evalJSONContext4(options) : {}) || {};
5239
5274
  const fetchData = async () => {
5240
5275
  try {
5241
- setDomainMany2Many(domain);
5242
- appDispatch(setFirstDomain(domain));
5243
- appDispatch(setViewDataStore(viewResponse));
5244
- const modalData = viewResponse?.views?.list?.fields.map((field) => ({
5245
- ...viewResponse?.models?.[String(model)]?.[field?.name],
5246
- ...field
5247
- }));
5248
- if (!fields?.[`${aid}_${relation}_popupmany2many`] && modalData) {
5249
- setFields({
5250
- ...fields,
5251
- [`${aid}_${relation}_popupmany2many`]: modalData
5252
- });
5253
- }
5254
- appDispatch(setPage(0));
5276
+ const domainParse = typeof domain === "string" ? evalJSONDomain4(domain, contextObject) : Array.isArray(domain) ? domain : [];
5277
+ setDomainMany2Many(domainParse);
5278
+ setPage(0);
5255
5279
  } catch (err) {
5256
5280
  console.log(err);
5257
5281
  }
5258
5282
  };
5259
5283
  const queryKey = [
5260
- `view-${relation}-${aid}`,
5284
+ `view-${relation}`,
5261
5285
  specification,
5262
5286
  domainMany2Many,
5263
5287
  debouncedPage,
@@ -5270,16 +5294,16 @@ var many2manyFieldController = (props) => {
5270
5294
  domain: domainMany2Many,
5271
5295
  offset: debouncedPage * 10,
5272
5296
  limit: 10,
5273
- context,
5297
+ context: contextObject,
5274
5298
  fields: groupByDomain?.fields,
5275
5299
  groupby: [groupByDomain?.contexts[0]?.group_by],
5276
5300
  sort: order ? order : default_order ? formatSortingString2(default_order) : ""
5277
5301
  };
5278
- const enabled = isLoadedData && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5302
+ const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5279
5303
  const {
5280
5304
  data: dataResponse,
5281
- isLoading: isDataLoading,
5282
- isFetched: isDataResponseFetched,
5305
+ isLoading,
5306
+ isFetched,
5283
5307
  isPlaceholderData
5284
5308
  } = useGetListData3(data, queryKey, enabled);
5285
5309
  useEffect11(() => {
@@ -5287,74 +5311,57 @@ var many2manyFieldController = (props) => {
5287
5311
  fetchData();
5288
5312
  }
5289
5313
  return () => {
5290
- appDispatch(setGroupByDomain(null));
5291
- setFields((prevFields) => ({
5292
- ...prevFields,
5293
- [`${aid}_${relation}_popupmany2many`]: null
5294
- }));
5295
- appDispatch(setPage(0));
5296
- setSelectedRowKeys4([]);
5314
+ setPage(0);
5315
+ setSelectedRowKeys3([]);
5297
5316
  setDomainMany2Many(null);
5298
- setIsLoadedData(false);
5299
5317
  };
5300
5318
  }, [viewResponse]);
5301
- const { rows, columns, typeTable } = tableController({
5319
+ const { rows, columns, typeTable, onToggleColumnOptional } = tableController({
5302
5320
  data: {
5303
- fields: fields?.[`${aid}_${relation}_popupmany2many`] || viewResponse?.views?.list?.fields,
5321
+ fields: viewResponse?.views?.list?.fields,
5304
5322
  records: dataResponse?.records ?? dataResponse?.groups,
5305
5323
  dataModel: viewResponse?.models?.[String(relation)],
5306
- context: { ...env.context, ...context },
5324
+ context: contextObject,
5307
5325
  typeTable: dataResponse?.groups ? "group" : "list"
5308
5326
  }
5309
5327
  });
5310
- const dataFormView = {
5311
- id: null,
5312
- model: relation,
5313
- context
5314
- };
5315
- const {
5316
- refetch,
5317
- data: dataFormViewResponse,
5318
- isSuccess
5319
- } = useGetFormView({
5320
- data: dataFormView,
5321
- queryKey: [`form-view-action-${relation}`],
5322
- enabled: false
5328
+ const searchControllers = searchController({
5329
+ viewData: viewResponse,
5330
+ model: relation ?? "",
5331
+ context: contextObject,
5332
+ domain,
5333
+ fieldsList: [
5334
+ ...columns?.filter(
5335
+ (col) => col?.field?.type_co === "field" && col?.optional !== "hide"
5336
+ )?.map((col) => ({ ...col.field })) ?? []
5337
+ ]
5323
5338
  });
5324
- useEffect11(() => {
5325
- if (isSuccess && dataFormViewResponse) {
5326
- sessionStorage.setItem("actionData", JSON.stringify(dataFormViewResponse));
5327
- window.location.href = `/form/menu?model=${relation}`;
5328
- }
5329
- }, [isSuccess]);
5330
- useEffect11(() => {
5331
- if (domainMany2Many && !isLoadedData) {
5332
- setIsLoadedData(true);
5333
- }
5334
- }, [domainMany2Many]);
5335
5339
  const handleCreateNewOnPage = async () => {
5336
- try {
5337
- refetch();
5338
- } catch (error) {
5339
- console.log(error);
5340
- }
5341
5340
  };
5342
5341
  return {
5343
5342
  handleCreateNewOnPage,
5344
5343
  optionsObject,
5344
+ totalRows: dataResponse?.length ?? 0,
5345
5345
  rows,
5346
5346
  columns,
5347
+ onToggleColumnOptional,
5347
5348
  typeTable,
5348
- isDataLoading,
5349
- isDataResponseFetched,
5350
- isPlaceholderData
5349
+ isLoading,
5350
+ isFetched,
5351
+ isPlaceholderData,
5352
+ setPage,
5353
+ page,
5354
+ viewData: viewResponse,
5355
+ domain: domainMany2Many,
5356
+ setDomain: setDomainMany2Many,
5357
+ searchController: searchControllers
5351
5358
  };
5352
5359
  };
5353
5360
 
5354
5361
  // src/widget/basic/many2many-tags-field/controller.ts
5355
5362
  import { useMemo as useMemo11 } from "react";
5356
5363
  import { WIDGETAVATAR, WIDGETCOLOR } from "@fctc/interface-logic/constants";
5357
- import { evalJSONContext as evalJSONContext5, evalJSONDomain as evalJSONDomain4 } from "@fctc/interface-logic/utils";
5364
+ import { evalJSONContext as evalJSONContext5, evalJSONDomain as evalJSONDomain5 } from "@fctc/interface-logic/utils";
5358
5365
  var many2manyTagsController = (props) => {
5359
5366
  const {
5360
5367
  relation,
@@ -5369,7 +5376,7 @@ var many2manyTagsController = (props) => {
5369
5376
  const { useGetSelection: useGetSelection2 } = (0, provider_exports.useService)();
5370
5377
  const addtionalFields = optionsFields ? evalJSONContext5(optionsFields) : null;
5371
5378
  const domainObject = useMemo11(
5372
- () => evalJSONDomain4(domain, JSON.parse(JSON.stringify(formValues || {}))),
5379
+ () => evalJSONDomain5(domain, JSON.parse(JSON.stringify(formValues || {}))),
5373
5380
  [domain, formValues]
5374
5381
  );
5375
5382
  const data = {
@@ -5410,8 +5417,8 @@ var many2manyTagsController = (props) => {
5410
5417
  };
5411
5418
 
5412
5419
  // src/widget/basic/status-bar-field/controller.ts
5413
- import { useState as useState9 } from "react";
5414
- import { evalJSONDomain as evalJSONDomain5 } from "@fctc/interface-logic/utils";
5420
+ import { useState as useState10 } from "react";
5421
+ import { evalJSONDomain as evalJSONDomain6 } from "@fctc/interface-logic/utils";
5415
5422
  var durationController = (props) => {
5416
5423
  const { relation, domain, formValues, name, id, model, onRefetch, enabled } = props;
5417
5424
  const specification = {
@@ -5421,13 +5428,13 @@ var durationController = (props) => {
5421
5428
  };
5422
5429
  const { useGetListData: useGetListData3, useChangeStatus } = (0, provider_exports.useService)();
5423
5430
  const { env } = (0, provider_exports.useEnv)();
5424
- const [disabled, setDisabled] = useState9(false);
5425
- const [modelStatus, setModalStatus] = useState9(false);
5431
+ const [disabled, setDisabled] = useState10(false);
5432
+ const [modelStatus, setModalStatus] = useState10(false);
5426
5433
  const queryKey = [`data-status-duration`, specification];
5427
5434
  const listDataProps = {
5428
5435
  model: relation,
5429
5436
  specification,
5430
- domain: evalJSONDomain5(domain, JSON.parse(JSON.stringify(formValues))),
5437
+ domain: evalJSONDomain6(domain, JSON.parse(JSON.stringify(formValues))),
5431
5438
  limit: 10,
5432
5439
  offset: 0,
5433
5440
  fields: "",
@@ -5511,10 +5518,10 @@ var priorityFieldController = (props) => {
5511
5518
  };
5512
5519
 
5513
5520
  // src/widget/basic/download-file-field/controller.ts
5514
- import { useId, useState as useState10 } from "react";
5521
+ import { useId, useState as useState11 } from "react";
5515
5522
  var downloadFileController = () => {
5516
5523
  const inputId = useId();
5517
- const [file, setFile] = useState10(null);
5524
+ const [file, setFile] = useState11(null);
5518
5525
  const handleFileChange = (e) => {
5519
5526
  setFile(e.target.files[0]);
5520
5527
  };
@@ -6446,11 +6453,11 @@ var dateFieldController = (props) => {
6446
6453
  };
6447
6454
 
6448
6455
  // src/widget/basic/copy-link-button/controller.ts
6449
- import { useState as useState11 } from "react";
6456
+ import { useState as useState12 } from "react";
6450
6457
  import { copyTextToClipboard } from "@fctc/interface-logic/utils";
6451
6458
  var copyLinkButtonController = (props) => {
6452
6459
  const { value, defaultValue } = props;
6453
- const [isCopied, setIsCopied] = useState11(false);
6460
+ const [isCopied, setIsCopied] = useState12(false);
6454
6461
  const handleCopyToClipboard = async (value2) => {
6455
6462
  await copyTextToClipboard(value2);
6456
6463
  setIsCopied(true);
@@ -6498,14 +6505,14 @@ var colorFieldController = (props) => {
6498
6505
  };
6499
6506
 
6500
6507
  // src/widget/basic/binary-field/controller.ts
6501
- import { useEffect as useEffect12, useId as useId2, useRef as useRef4, useState as useState12 } from "react";
6508
+ import { useEffect as useEffect12, useId as useId2, useRef as useRef4, useState as useState13 } from "react";
6502
6509
  import { isBase64Image } from "@fctc/interface-logic/utils";
6503
6510
  var binaryFieldController = (props) => {
6504
6511
  const { name, methods, readonly = false, value } = props;
6505
6512
  const inputId = useId2();
6506
- const [selectedImage, setSelectedImage] = useState12(null);
6507
- const [initialImage, setInitialImage] = useState12(value || null);
6508
- const [isInsideTable, setIsInsideTable] = useState12(false);
6513
+ const [selectedImage, setSelectedImage] = useState13(null);
6514
+ const [initialImage, setInitialImage] = useState13(value || null);
6515
+ const [isInsideTable, setIsInsideTable] = useState13(false);
6509
6516
  const { setValue } = methods;
6510
6517
  const binaryRef = useRef4(null);
6511
6518
  const convertUrlToBase64 = async (url) => {
@@ -6595,112 +6602,41 @@ var binaryFieldController = (props) => {
6595
6602
  };
6596
6603
  };
6597
6604
 
6598
- // src/widget/advance/table/table-body/controller.ts
6599
- import {
6600
- useAppDispatch as useAppDispatch6,
6601
- setSelectedRowKeys,
6602
- useAppSelector as useAppSelector4,
6603
- selectList as selectList3
6604
- } from "@fctc/interface-logic/store";
6605
- import { useEffect as useEffect13, useMemo as useMemo12 } from "react";
6606
- var tableBodyController = (props) => {
6607
- const {
6608
- checkedAll,
6609
- checkboxRef,
6610
- setIsAutoSelect,
6611
- row,
6612
- isAutoSelect,
6613
- selectedRowKeysRef,
6614
- onClickRow
6615
- } = props;
6616
- const appDispatch = useAppDispatch6();
6617
- const { selectedRowKeys } = useAppSelector4(selectList3);
6618
- const checked = useMemo12(() => {
6619
- if (!row?.id) return false;
6620
- if (selectedRowKeys?.includes(row.id)) {
6621
- return true;
6622
- }
6623
- return checkedAll;
6624
- }, [row?.id, selectedRowKeys, checkedAll]);
6625
- const handleCheckBoxSingle = (event) => {
6626
- event.stopPropagation();
6627
- if (checkedAll) {
6628
- checkboxRef.current = "uncheck";
6629
- setIsAutoSelect(true);
6630
- return;
6631
- }
6632
- const newSelectedRowKeys = selectedRowKeys?.includes(row.id) ? selectedRowKeys?.filter((key) => key !== row.id) : [...selectedRowKeys, row.id];
6633
- appDispatch(setSelectedRowKeys(newSelectedRowKeys));
6634
- };
6635
- const handleClickRow = (col, row2) => {
6636
- onClickRow(col, row2);
6637
- };
6638
- useEffect13(() => {
6639
- if (!row?.id) return;
6640
- if (isAutoSelect) {
6641
- if (checkboxRef?.current === "uncheck") {
6642
- const filtered = selectedRowKeysRef.current.filter(
6643
- (id) => id !== row.id
6644
- );
6645
- selectedRowKeysRef.current = filtered;
6646
- appDispatch(setSelectedRowKeys(filtered));
6647
- } else {
6648
- const unique = Array.from(
6649
- /* @__PURE__ */ new Set([...selectedRowKeysRef?.current, row?.id])
6650
- );
6651
- selectedRowKeysRef.current = unique;
6652
- appDispatch(setSelectedRowKeys(unique));
6653
- }
6654
- }
6655
- }, [isAutoSelect]);
6656
- useEffect13(() => {
6657
- if (!checkedAll) {
6658
- checkboxRef.current = "enabled";
6659
- false;
6660
- }
6661
- }, [checkedAll]);
6662
- return {
6663
- handleCheckBoxSingle,
6664
- checked,
6665
- handleClickRow
6666
- };
6667
- };
6668
-
6669
6605
  // src/widget/advance/table/table-head/controller.ts
6670
6606
  import {
6671
- useAppDispatch as useAppDispatch7,
6672
- useAppSelector as useAppSelector5,
6607
+ useAppDispatch as useAppDispatch5,
6608
+ useAppSelector as useAppSelector4,
6673
6609
  selectSearch as selectSearch3,
6674
- setSelectedRowKeys as setSelectedRowKeys2
6610
+ setSelectedRowKeys
6675
6611
  } from "@fctc/interface-logic/store";
6676
6612
  var tableHeadController = (props) => {
6677
6613
  const { typeTable, rows, selectedRowKeysRef } = props;
6678
- const appDispatch = useAppDispatch7();
6679
- const { groupByDomain } = useAppSelector5(selectSearch3);
6614
+ const appDispatch = useAppDispatch5();
6615
+ const { groupByDomain } = useAppSelector4(selectSearch3);
6680
6616
  const handleCheckBoxAll = (event) => {
6681
6617
  if (event?.target?.checked && typeTable === "list") {
6682
6618
  const allRowKeys = Array.isArray(rows) ? rows.map((record) => record?.id) : [];
6683
- appDispatch(setSelectedRowKeys2(allRowKeys));
6619
+ appDispatch(setSelectedRowKeys(allRowKeys));
6684
6620
  } else if (event?.target?.checked && typeTable === "group") {
6685
6621
  const rowsIDs = document.querySelectorAll("tr[data-row-id]");
6686
6622
  const ids = Array.from(rowsIDs)?.map(
6687
6623
  (row) => Number(row?.getAttribute("data-row-id"))
6688
6624
  );
6689
6625
  if (ids?.length > 0) {
6690
- appDispatch(setSelectedRowKeys2(ids));
6626
+ appDispatch(setSelectedRowKeys(ids));
6691
6627
  } else {
6692
6628
  const sum = countSum(
6693
6629
  rows,
6694
6630
  typeof groupByDomain === "object" ? groupByDomain?.contexts?.[0]?.group_by : void 0
6695
6631
  );
6696
6632
  const keys = Array.from({ length: sum }, (_) => void 0);
6697
- appDispatch(setSelectedRowKeys2(keys));
6633
+ appDispatch(setSelectedRowKeys(keys));
6698
6634
  }
6699
6635
  if (selectedRowKeysRef) {
6700
6636
  selectedRowKeysRef.current = [];
6701
6637
  }
6702
6638
  } else {
6703
- appDispatch(setSelectedRowKeys2([]));
6639
+ appDispatch(setSelectedRowKeys([]));
6704
6640
  }
6705
6641
  };
6706
6642
  return {
@@ -6709,16 +6645,16 @@ var tableHeadController = (props) => {
6709
6645
  };
6710
6646
 
6711
6647
  // src/widget/advance/table/table-view/controller.ts
6712
- import { useEffect as useEffect14, useMemo as useMemo13, useRef as useRef5, useState as useState13 } from "react";
6648
+ import { useEffect as useEffect13, useMemo as useMemo12, useRef as useRef5, useState as useState14 } from "react";
6713
6649
  import {
6714
- useAppSelector as useAppSelector6,
6650
+ useAppSelector as useAppSelector5,
6715
6651
  selectSearch as selectSearch4,
6716
- selectList as selectList4
6652
+ selectList as selectList3
6717
6653
  } from "@fctc/interface-logic/store";
6718
6654
  import { domainHelper } from "@fctc/interface-logic/utils";
6719
6655
  var tableController = ({ data }) => {
6720
- const [rows, setRows] = useState13(data.records || []);
6721
- const [columns, setColumns] = useState13([]);
6656
+ const [rows, setRows] = useState14(data.records || []);
6657
+ const [columns, setColumns] = useState14([]);
6722
6658
  const dataModelFields = data.fields?.map((field) => {
6723
6659
  return {
6724
6660
  ...data.dataModel?.[field?.name],
@@ -6746,7 +6682,7 @@ var tableController = ({ data }) => {
6746
6682
  return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6747
6683
  });
6748
6684
  };
6749
- useEffect14(() => {
6685
+ useEffect13(() => {
6750
6686
  setRows(transformData(data.records || null));
6751
6687
  }, [data.records]);
6752
6688
  const handleGetColumns = () => {
@@ -6767,7 +6703,7 @@ var tableController = ({ data }) => {
6767
6703
  }
6768
6704
  return cols;
6769
6705
  };
6770
- useEffect14(() => {
6706
+ useEffect13(() => {
6771
6707
  const columns2 = handleGetColumns();
6772
6708
  setColumns(columns2);
6773
6709
  }, [data.records]);
@@ -6792,17 +6728,17 @@ var tableController = ({ data }) => {
6792
6728
  };
6793
6729
 
6794
6730
  // src/widget/advance/table/table-group/controller.ts
6795
- import { useEffect as useEffect15, useMemo as useMemo14, useState as useState14 } from "react";
6731
+ import { useEffect as useEffect14, useMemo as useMemo13, useState as useState15 } from "react";
6796
6732
  import {
6797
6733
  useOdooDataTransform,
6798
6734
  useGetListData as useGetListData2
6799
6735
  } from "@fctc/interface-logic/hooks";
6800
6736
  import {
6801
- useAppSelector as useAppSelector7,
6737
+ useAppSelector as useAppSelector6,
6802
6738
  selectSearch as selectSearch5,
6803
- selectList as selectList5,
6804
- useAppDispatch as useAppDispatch8,
6805
- setSelectedRowKeys as setSelectedRowKeys3
6739
+ selectList as selectList4,
6740
+ useAppDispatch as useAppDispatch6,
6741
+ setSelectedRowKeys as setSelectedRowKeys2
6806
6742
  } from "@fctc/interface-logic/store";
6807
6743
 
6808
6744
  // src/environment.ts
@@ -6831,18 +6767,18 @@ var tableGroupController = (props) => {
6831
6767
  setIsAutoSelect,
6832
6768
  selectedRowKeysRef
6833
6769
  } = props;
6834
- const [pageGroup, setPageGroup] = useState14(0);
6835
- const { groupByDomain, selectedTags } = useAppSelector7(selectSearch5);
6836
- const { selectedRowKeys } = useAppSelector7(selectList5);
6837
- const appDispatch = useAppDispatch8();
6770
+ const [pageGroup, setPageGroup] = useState15(0);
6771
+ const { groupByDomain, selectedTags } = useAppSelector6(selectSearch5);
6772
+ const { selectedRowKeys } = useAppSelector6(selectList4);
6773
+ const appDispatch = useAppDispatch6();
6838
6774
  const { toDataJS } = useOdooDataTransform();
6839
6775
  const initVal = toDataJS(row, viewData, model);
6840
- const [isShowGroup, setIsShowGroup] = useState14(false);
6841
- const [colEmptyGroup, setColEmptyGroup] = useState14({
6776
+ const [isShowGroup, setIsShowGroup] = useState15(false);
6777
+ const [colEmptyGroup, setColEmptyGroup] = useState15({
6842
6778
  fromStart: 1,
6843
6779
  fromEnd: 1
6844
6780
  });
6845
- const processedData = useMemo14(() => {
6781
+ const processedData = useMemo13(() => {
6846
6782
  const calculateColSpanEmpty = () => {
6847
6783
  const startIndex = columns.findIndex(
6848
6784
  (col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
@@ -6857,7 +6793,7 @@ var tableGroupController = (props) => {
6857
6793
  };
6858
6794
  return calculateColSpanEmpty();
6859
6795
  }, [columns, row]);
6860
- const shouldFetchData = useMemo14(() => {
6796
+ const shouldFetchData = useMemo13(() => {
6861
6797
  return !!isShowGroup;
6862
6798
  }, [isShowGroup]);
6863
6799
  const enabled = shouldFetchData && !!processedData;
@@ -6897,7 +6833,7 @@ var tableGroupController = (props) => {
6897
6833
  }
6898
6834
  });
6899
6835
  const leftPadding = level > 1 ? level * 8 + "px" : "0px";
6900
- useEffect15(() => {
6836
+ useEffect14(() => {
6901
6837
  if (isShowGroup && selectedTags?.length > 0) {
6902
6838
  setIsShowGroup(false);
6903
6839
  }
@@ -6920,24 +6856,24 @@ var tableGroupController = (props) => {
6920
6856
  const filteredIds = selectedRowKeys.filter(
6921
6857
  (id) => !ids.includes(id)
6922
6858
  );
6923
- appDispatch(setSelectedRowKeys3(filteredIds));
6859
+ appDispatch(setSelectedRowKeys2(filteredIds));
6924
6860
  } else if (!isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && checkedAll && !allIdsNull && isQueryFetched) {
6925
6861
  const clonedKeys = [...selectedRowKeys];
6926
- appDispatch(setSelectedRowKeys3([...clonedKeys, -1]));
6927
- setTimeout(() => appDispatch(setSelectedRowKeys3(clonedKeys)), 500);
6862
+ appDispatch(setSelectedRowKeys2([...clonedKeys, -1]));
6863
+ setTimeout(() => appDispatch(setSelectedRowKeys2(clonedKeys)), 500);
6928
6864
  } else if (isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && !checkedAll && !allIdsNull) {
6929
6865
  const filteredKeys = selectedRowKeys.filter((id) => id > -1);
6930
- appDispatch(setSelectedRowKeys3(filteredKeys));
6866
+ appDispatch(setSelectedRowKeys2(filteredKeys));
6931
6867
  }
6932
6868
  toggleShowGroup();
6933
6869
  };
6934
- useEffect15(() => {
6870
+ useEffect14(() => {
6935
6871
  if (!isQueryFetched || !rowsGroup || !checkedAll || allIdsNull || typeTableGroup === "group") {
6936
6872
  return;
6937
6873
  }
6938
6874
  const clonedKeys = [...selectedRowKeys];
6939
- setSelectedRowKeys3([...clonedKeys, -1]);
6940
- setTimeout(() => setSelectedRowKeys3(clonedKeys), 500);
6875
+ setSelectedRowKeys2([...clonedKeys, -1]);
6876
+ setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
6941
6877
  }, [isQueryFetched]);
6942
6878
  return {
6943
6879
  handleExpandChildGroup,
@@ -6975,26 +6911,28 @@ var import_moment2 = __toESM(require_moment());
6975
6911
  import { SearchType } from "@fctc/interface-logic/constants";
6976
6912
  import {
6977
6913
  domainHelper as domainHelper2,
6978
- evalJSONDomain as evalJSONDomain6,
6914
+ evalJSONContext as evalJSONContext8,
6915
+ evalJSONDomain as evalJSONDomain7,
6979
6916
  validateAndParseDate
6980
6917
  } from "@fctc/interface-logic/utils";
6981
- import { useCallback as useCallback3, useEffect as useEffect16, useState as useState15 } from "react";
6918
+ import { useCallback as useCallback3, useEffect as useEffect15, useState as useState16 } from "react";
6982
6919
  var searchController = ({
6983
6920
  viewData,
6984
- actionData,
6985
- fieldsList,
6986
- contextSearch,
6987
- setSearchMap,
6988
- searchMap
6921
+ model,
6922
+ domain,
6923
+ context,
6924
+ fieldsList
6989
6925
  }) => {
6990
- const [filterBy, setFilterBy] = useState15(null);
6991
- const [searchBy, setSearchBy] = useState15(null);
6992
- const [groupBy, setGroupBy] = useState15(null);
6993
- const [selectedTags, setSelectedTags] = useState15(null);
6994
- const [searchString, setSearchString] = useState15("");
6995
- const domainAction = actionData?.domain ? Array.isArray(actionData?.domain) ? [...actionData?.domain] : evalJSONDomain6(actionData?.domain, contextSearch) : [];
6996
- const aid = actionData?.id;
6997
- const model = actionData?.res_model;
6926
+ const { env } = (0, provider_exports.useEnv)();
6927
+ const [filterBy, setFilterBy] = useState16(null);
6928
+ const [searchBy, setSearchBy] = useState16(null);
6929
+ const [groupBy, setGroupBy] = useState16(null);
6930
+ const [selectedTags, setSelectedTags] = useState16(null);
6931
+ const [searchString, setSearchString] = useState16("");
6932
+ const [searchMap, setSearchMap] = useState16({});
6933
+ const actionContext = typeof context === "string" ? evalJSONContext8(context) : context;
6934
+ const contextSearch = { ...env.context, ...actionContext };
6935
+ const domainAction = domain ? Array.isArray(domain) ? [...domain] : evalJSONDomain7(domain, contextSearch) : [];
6998
6936
  const clearSearch = () => {
6999
6937
  setFilterBy([]);
7000
6938
  setGroupBy([]);
@@ -7038,10 +6976,9 @@ var searchController = ({
7038
6976
  }
7039
6977
  }
7040
6978
  };
7041
- useEffect16(() => {
7042
- clearSearch();
6979
+ useEffect15(() => {
7043
6980
  fetchData();
7044
- }, [aid, model, viewData]);
6981
+ }, [model, viewData]);
7045
6982
  const onChangeSearchInput = (search_string) => {
7046
6983
  setSearchString(search_string);
7047
6984
  };
@@ -7078,27 +7015,27 @@ var searchController = ({
7078
7015
  };
7079
7016
  const formatDomain = () => {
7080
7017
  if (domainAction) {
7081
- const domain = [];
7018
+ const domain2 = [];
7082
7019
  if (domainAction?.length > 0) {
7083
- if (Object.keys(searchMap).length > 0) {
7084
- domain.push("&");
7020
+ if (Object.keys(searchMap).some((key) => !key.includes(SearchType.GROUP))) {
7021
+ domain2.push("&");
7085
7022
  }
7086
7023
  domainAction.forEach((domainItem) => {
7087
- domain.push(domainItem);
7024
+ domain2.push(domainItem);
7088
7025
  });
7089
7026
  }
7090
7027
  Object.keys(searchMap).forEach((key, keyIndex, keys) => {
7091
7028
  if (!key?.includes(SearchType.GROUP)) {
7092
7029
  if (keys.length > 1 && keyIndex < keys.length - 1) {
7093
- domain.push("&");
7030
+ domain2.push("&");
7094
7031
  }
7095
7032
  const valuesOfKey = searchMap[key];
7096
7033
  valuesOfKey.forEach((value, index) => {
7097
7034
  if (index < valuesOfKey.length - 1) {
7098
- domain.push("|");
7035
+ domain2.push("|");
7099
7036
  }
7100
7037
  if (value.domain) {
7101
- domain.push(...value.domain);
7038
+ domain2.push(...value.domain);
7102
7039
  return;
7103
7040
  }
7104
7041
  let valueDomainItem = value?.value;
@@ -7114,11 +7051,11 @@ var searchController = ({
7114
7051
  }
7115
7052
  }
7116
7053
  const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
7117
- domain.push([value.name, operator, valueDomainItem]);
7054
+ domain2.push([value.name, operator, valueDomainItem]);
7118
7055
  });
7119
7056
  }
7120
7057
  });
7121
- return [...domain];
7058
+ return [...domain2];
7122
7059
  }
7123
7060
  };
7124
7061
  const setTagSearch = useCallback3(
@@ -7149,16 +7086,16 @@ var searchController = ({
7149
7086
  const contexts = [];
7150
7087
  let groupValues = [];
7151
7088
  objValues?.forEach((objValue) => {
7152
- const { context, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7089
+ const { context: context2, value, active, groupIndex: groupIndex2, isDefault } = objValue;
7153
7090
  const indexAppend = groupIndex2 != null ? groupIndex2 : viewData?.views?.search?.filters_by?.length ?? 0;
7154
7091
  contexts.push(
7155
- ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({ group_by: item })) : [context]
7092
+ ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({ group_by: item })) : [context2]
7156
7093
  );
7157
7094
  groupValues[indexAppend] = {
7158
7095
  contexts: [
7159
- ...Array.isArray(context?.group_by) ? context.group_by.map((item) => ({
7096
+ ...Array.isArray(context2?.group_by) ? context2.group_by.map((item) => ({
7160
7097
  group_by: item
7161
- })) : [context]
7098
+ })) : [context2]
7162
7099
  ],
7163
7100
  strings: isDefault ? [value] : [...groupValues[indexAppend]?.strings ?? [], value]
7164
7101
  };
@@ -7184,40 +7121,39 @@ var searchController = ({
7184
7121
  },
7185
7122
  [searchMap]
7186
7123
  );
7187
- useEffect16(() => {
7188
- setSelectedTags(null);
7124
+ useEffect15(() => {
7189
7125
  setTagSearch(searchMap);
7190
7126
  }, [searchMap]);
7191
7127
  const handleAddTagSearch = (tag) => {
7192
7128
  const {
7193
- domain,
7129
+ domain: domain2,
7194
7130
  groupIndex,
7195
7131
  value,
7196
7132
  type,
7197
7133
  title,
7198
- context,
7134
+ context: context2,
7199
7135
  active,
7200
7136
  dataIndex
7201
7137
  } = tag;
7202
- const domainFormat = new domainHelper2.Domain(domain);
7138
+ const domainFormat = new domainHelper2.Domain(domain2);
7203
7139
  if (type === SearchType.FILTER) {
7204
7140
  addSearchItems(`${SearchType.FILTER}_${groupIndex}`, {
7205
7141
  ...tag,
7206
- domain: domain ? domainFormat.toList(context) : null
7142
+ domain: domain2 ? domainFormat.toList(context2) : null
7207
7143
  });
7208
7144
  } else if (type === SearchType.SEARCH) {
7209
7145
  addSearchItems(`${SearchType.SEARCH}_${String(dataIndex)}`, {
7210
7146
  ...tag,
7211
- domain: domain ? domainFormat.toList({
7212
- ...context,
7147
+ domain: domain2 ? domainFormat.toList({
7148
+ ...context2,
7213
7149
  self: value
7214
7150
  }) : null
7215
7151
  });
7216
7152
  } else if (type === SearchType.GROUP) {
7217
7153
  addSearchItems(`${SearchType.GROUP}`, {
7218
7154
  ...tag,
7219
- domain: domain ? domainFormat.toList({
7220
- context,
7155
+ domain: domain2 ? domainFormat.toList({
7156
+ context: context2,
7221
7157
  self: value
7222
7158
  }) : null
7223
7159
  });
@@ -7237,7 +7173,8 @@ var searchController = ({
7237
7173
  removeSearchItems,
7238
7174
  onSearchString: onChangeSearchInput,
7239
7175
  handleAddTagSearch,
7240
- domain: formatDomain()
7176
+ domain: formatDomain(),
7177
+ context: contextSearch
7241
7178
  };
7242
7179
  };
7243
7180
  export {
@@ -7255,7 +7192,6 @@ export {
7255
7192
  priorityFieldController,
7256
7193
  searchController,
7257
7194
  statusDropdownController,
7258
- tableBodyController,
7259
7195
  tableController,
7260
7196
  tableGroupController,
7261
7197
  tableHeadController