@fctc/widget-logic 2.5.1 → 2.5.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
@@ -4535,19 +4535,16 @@ var useViewV2 = ({
4535
4535
  }) => {
4536
4536
  const { useGetView: useGetView2 } = (0, provider_exports.useService)();
4537
4537
  const viewParams = (0, import_react6.useMemo)(() => {
4538
- if (!action) {
4539
- return void 0;
4540
- }
4541
4538
  return {
4542
4539
  model,
4543
4540
  views,
4544
4541
  context,
4545
4542
  id: isNaN(Number(aid)) ? action?.id : aid
4546
4543
  };
4547
- }, [action, context, aid]);
4544
+ }, [action, context, aid, model, views]);
4548
4545
  const view = useGetView2(
4549
- viewParams || {},
4550
- !!viewParams
4546
+ viewParams,
4547
+ !!model
4551
4548
  );
4552
4549
  return {
4553
4550
  ...view,
@@ -5494,24 +5491,62 @@ var many2oneButtonController = (props) => {
5494
5491
  var import_react17 = require("react");
5495
5492
  var import_utils8 = require("@fctc/interface-logic/utils");
5496
5493
  var many2manyFieldController = (props) => {
5497
- const { relation, domain, context, options, tab, setSelectedRowKeys: setSelectedRowKeys2 } = props;
5494
+ const {
5495
+ relation,
5496
+ domain,
5497
+ context,
5498
+ options,
5499
+ tab,
5500
+ setSelectedRowKeys: setSelectedRowKeys2,
5501
+ groupByDomain,
5502
+ enabled: enabledCallAPI,
5503
+ actionData
5504
+ } = props;
5498
5505
  const { env } = (0, provider_exports.useEnv)();
5499
- const { useGetFormView: useGetFormView2 } = (0, provider_exports.useService)();
5506
+ const { useGetView: useGetView2, useGetListData: useGetListData2, useGetFormView: useGetFormView2 } = (0, provider_exports.useService)();
5507
+ const [order, setOrder] = (0, import_react17.useState)();
5500
5508
  const [page, setPage] = (0, import_react17.useState)(0);
5501
5509
  const [domainMany2Many, setDomainMany2Many] = (0, import_react17.useState)(null);
5502
- const { action } = useAppProvider();
5510
+ const [debouncedPage] = useDebounce(page, 500);
5503
5511
  const contextObject = {
5504
5512
  ...env.context,
5505
5513
  ...context || {}
5506
5514
  };
5507
- const { data: viewResponse } = useViewV2({
5508
- model: String(relation),
5515
+ const viewParams = {
5516
+ model: relation,
5509
5517
  views: [
5510
5518
  [false, "list"],
5511
5519
  [false, "search"]
5512
5520
  ],
5513
5521
  context: contextObject
5514
- });
5522
+ };
5523
+ const { data: viewResponse } = useGetView2(viewParams, enabledCallAPI);
5524
+ const baseModel = (0, import_react17.useMemo)(
5525
+ () => ({
5526
+ name: String(relation),
5527
+ view: viewResponse || {},
5528
+ actContext: contextObject,
5529
+ fields: [
5530
+ ...Object.values(viewResponse?.views?.list?.fields ?? {}),
5531
+ ...tab?.fields ? tab.fields : []
5532
+ ]
5533
+ }),
5534
+ [relation, viewResponse]
5535
+ );
5536
+ const initModel = (0, import_hooks2.useModel)();
5537
+ const modelInstance = (0, import_react17.useMemo)(() => {
5538
+ if (viewResponse) {
5539
+ return initModel.initModel(baseModel);
5540
+ }
5541
+ return null;
5542
+ }, [baseModel, viewResponse]);
5543
+ const specification = (0, import_react17.useMemo)(() => {
5544
+ if (modelInstance) {
5545
+ return modelInstance.getSpecification();
5546
+ }
5547
+ return null;
5548
+ }, [modelInstance]);
5549
+ const default_order = viewResponse && viewResponse?.views?.list?.default_order;
5515
5550
  const optionsObject = tab?.options ? (0, import_utils8.evalJSONContext)(tab?.options) : (options ? (0, import_utils8.evalJSONContext)(options) : {}) || {};
5516
5551
  const fetchData = async () => {
5517
5552
  try {
@@ -5522,17 +5557,32 @@ var many2manyFieldController = (props) => {
5522
5557
  console.log(err);
5523
5558
  }
5524
5559
  };
5560
+ const queryKey = [
5561
+ `view-${relation}`,
5562
+ specification,
5563
+ domainMany2Many,
5564
+ debouncedPage,
5565
+ groupByDomain,
5566
+ order
5567
+ ];
5568
+ const data = {
5569
+ model: relation,
5570
+ specification,
5571
+ domain: domainMany2Many,
5572
+ offset: debouncedPage * 10,
5573
+ limit: 10,
5574
+ context: contextObject,
5575
+ fields: groupByDomain?.fields,
5576
+ groupby: [groupByDomain?.contexts[0]?.group_by],
5577
+ sort: order ? order : default_order ? (0, import_utils8.formatSortingString)(default_order) : ""
5578
+ };
5579
+ const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5525
5580
  const {
5526
5581
  data: dataResponse,
5582
+ isLoading,
5527
5583
  isFetched,
5528
- isPlaceholderData,
5529
- isLoading
5530
- } = useListData({
5531
- action,
5532
- context,
5533
- model: String(relation),
5534
- viewData: viewResponse
5535
- });
5584
+ isPlaceholderData
5585
+ } = useGetListData2(data, queryKey, enabled);
5536
5586
  (0, import_react17.useEffect)(() => {
5537
5587
  if (viewResponse) {
5538
5588
  fetchData();
@@ -5563,31 +5613,7 @@ var many2manyFieldController = (props) => {
5563
5613
  )?.map((col) => ({ ...col.field })) ?? []
5564
5614
  ]
5565
5615
  });
5566
- const {
5567
- refetch,
5568
- data: dataFormViewResponse,
5569
- isSuccess
5570
- } = useGetFormView2({
5571
- data: {
5572
- id: null,
5573
- model: relation ?? "",
5574
- context: contextObject
5575
- },
5576
- queryKey: [`form-view-action-${relation}`],
5577
- enabled: false
5578
- });
5579
- (0, import_react17.useEffect)(() => {
5580
- if (isSuccess && dataFormViewResponse) {
5581
- sessionStorage.setItem("actionData", JSON.stringify(dataFormViewResponse));
5582
- window.location.href = `/form/menu?model=${relation}`;
5583
- }
5584
- }, [isSuccess]);
5585
5616
  const handleCreateNewOnPage = async () => {
5586
- try {
5587
- refetch();
5588
- } catch (error) {
5589
- console.log(error);
5590
- }
5591
5617
  };
5592
5618
  return {
5593
5619
  handleCreateNewOnPage,
package/dist/index.mjs CHANGED
@@ -4610,19 +4610,16 @@ var useViewV2 = ({
4610
4610
  }) => {
4611
4611
  const { useGetView: useGetView2 } = (0, provider_exports.useService)();
4612
4612
  const viewParams = useMemo3(() => {
4613
- if (!action) {
4614
- return void 0;
4615
- }
4616
4613
  return {
4617
4614
  model,
4618
4615
  views,
4619
4616
  context,
4620
4617
  id: isNaN(Number(aid)) ? action?.id : aid
4621
4618
  };
4622
- }, [action, context, aid]);
4619
+ }, [action, context, aid, model, views]);
4623
4620
  const view = useGetView2(
4624
- viewParams || {},
4625
- !!viewParams
4621
+ viewParams,
4622
+ !!model
4626
4623
  );
4627
4624
  return {
4628
4625
  ...view,
@@ -5572,27 +5569,69 @@ var many2oneButtonController = (props) => {
5572
5569
  };
5573
5570
 
5574
5571
  // src/widget/basic/many2many-field/controller.ts
5575
- import { useEffect as useEffect11, useState as useState8 } from "react";
5576
- import { evalJSONContext as evalJSONContext4, evalJSONDomain as evalJSONDomain4 } from "@fctc/interface-logic/utils";
5572
+ import { useEffect as useEffect11, useMemo as useMemo9, useState as useState8 } from "react";
5573
+ import {
5574
+ evalJSONContext as evalJSONContext4,
5575
+ evalJSONDomain as evalJSONDomain4,
5576
+ formatSortingString as formatSortingString2
5577
+ } from "@fctc/interface-logic/utils";
5577
5578
  var many2manyFieldController = (props) => {
5578
- const { relation, domain, context, options, tab, setSelectedRowKeys: setSelectedRowKeys2 } = props;
5579
+ const {
5580
+ relation,
5581
+ domain,
5582
+ context,
5583
+ options,
5584
+ tab,
5585
+ setSelectedRowKeys: setSelectedRowKeys2,
5586
+ groupByDomain,
5587
+ enabled: enabledCallAPI,
5588
+ actionData
5589
+ } = props;
5579
5590
  const { env } = (0, provider_exports.useEnv)();
5580
- const { useGetFormView: useGetFormView2 } = (0, provider_exports.useService)();
5591
+ const { useGetView: useGetView2, useGetListData: useGetListData2, useGetFormView: useGetFormView2 } = (0, provider_exports.useService)();
5592
+ const [order, setOrder] = useState8();
5581
5593
  const [page, setPage] = useState8(0);
5582
5594
  const [domainMany2Many, setDomainMany2Many] = useState8(null);
5583
- const { action } = useAppProvider();
5595
+ const [debouncedPage] = useDebounce(page, 500);
5584
5596
  const contextObject = {
5585
5597
  ...env.context,
5586
5598
  ...context || {}
5587
5599
  };
5588
- const { data: viewResponse } = useViewV2({
5589
- model: String(relation),
5600
+ const viewParams = {
5601
+ model: relation,
5590
5602
  views: [
5591
5603
  [false, "list"],
5592
5604
  [false, "search"]
5593
5605
  ],
5594
5606
  context: contextObject
5595
- });
5607
+ };
5608
+ const { data: viewResponse } = useGetView2(viewParams, enabledCallAPI);
5609
+ const baseModel = useMemo9(
5610
+ () => ({
5611
+ name: String(relation),
5612
+ view: viewResponse || {},
5613
+ actContext: contextObject,
5614
+ fields: [
5615
+ ...Object.values(viewResponse?.views?.list?.fields ?? {}),
5616
+ ...tab?.fields ? tab.fields : []
5617
+ ]
5618
+ }),
5619
+ [relation, viewResponse]
5620
+ );
5621
+ const initModel = useModel();
5622
+ const modelInstance = useMemo9(() => {
5623
+ if (viewResponse) {
5624
+ return initModel.initModel(baseModel);
5625
+ }
5626
+ return null;
5627
+ }, [baseModel, viewResponse]);
5628
+ const specification = useMemo9(() => {
5629
+ if (modelInstance) {
5630
+ return modelInstance.getSpecification();
5631
+ }
5632
+ return null;
5633
+ }, [modelInstance]);
5634
+ const default_order = viewResponse && viewResponse?.views?.list?.default_order;
5596
5635
  const optionsObject = tab?.options ? evalJSONContext4(tab?.options) : (options ? evalJSONContext4(options) : {}) || {};
5597
5636
  const fetchData = async () => {
5598
5637
  try {
@@ -5603,17 +5642,32 @@ var many2manyFieldController = (props) => {
5603
5642
  console.log(err);
5604
5643
  }
5605
5644
  };
5645
+ const queryKey = [
5646
+ `view-${relation}`,
5647
+ specification,
5648
+ domainMany2Many,
5649
+ debouncedPage,
5650
+ groupByDomain,
5651
+ order
5652
+ ];
5653
+ const data = {
5654
+ model: relation,
5655
+ specification,
5656
+ domain: domainMany2Many,
5657
+ offset: debouncedPage * 10,
5658
+ limit: 10,
5659
+ context: contextObject,
5660
+ fields: groupByDomain?.fields,
5661
+ groupby: [groupByDomain?.contexts[0]?.group_by],
5662
+ sort: order ? order : default_order ? formatSortingString2(default_order) : ""
5663
+ };
5664
+ const enabled = enabledCallAPI && !!specification && !!relation && !!domainMany2Many && !!viewResponse;
5606
5665
  const {
5607
5666
  data: dataResponse,
5667
+ isLoading,
5608
5668
  isFetched,
5609
- isPlaceholderData,
5610
- isLoading
5611
- } = useListData({
5612
- action,
5613
- context,
5614
- model: String(relation),
5615
- viewData: viewResponse
5616
- });
5669
+ isPlaceholderData
5670
+ } = useGetListData2(data, queryKey, enabled);
5617
5671
  useEffect11(() => {
5618
5672
  if (viewResponse) {
5619
5673
  fetchData();
@@ -5644,31 +5698,7 @@ var many2manyFieldController = (props) => {
5644
5698
  )?.map((col) => ({ ...col.field })) ?? []
5645
5699
  ]
5646
5700
  });
5647
- const {
5648
- refetch,
5649
- data: dataFormViewResponse,
5650
- isSuccess
5651
- } = useGetFormView2({
5652
- data: {
5653
- id: null,
5654
- model: relation ?? "",
5655
- context: contextObject
5656
- },
5657
- queryKey: [`form-view-action-${relation}`],
5658
- enabled: false
5659
- });
5660
- useEffect11(() => {
5661
- if (isSuccess && dataFormViewResponse) {
5662
- sessionStorage.setItem("actionData", JSON.stringify(dataFormViewResponse));
5663
- window.location.href = `/form/menu?model=${relation}`;
5664
- }
5665
- }, [isSuccess]);
5666
5701
  const handleCreateNewOnPage = async () => {
5667
- try {
5668
- refetch();
5669
- } catch (error) {
5670
- console.log(error);
5671
- }
5672
5702
  };
5673
5703
  return {
5674
5704
  handleCreateNewOnPage,
@@ -5691,7 +5721,7 @@ var many2manyFieldController = (props) => {
5691
5721
  };
5692
5722
 
5693
5723
  // src/widget/basic/many2many-tags-field/controller.ts
5694
- import { useMemo as useMemo9 } from "react";
5724
+ import { useMemo as useMemo10 } from "react";
5695
5725
  import { WIDGETAVATAR, WIDGETCOLOR } from "@fctc/interface-logic/constants";
5696
5726
  import { evalJSONContext as evalJSONContext5, evalJSONDomain as evalJSONDomain5 } from "@fctc/interface-logic/utils";
5697
5727
  var many2manyTagsController = (props) => {
@@ -5709,7 +5739,7 @@ var many2manyTagsController = (props) => {
5709
5739
  const { env } = (0, provider_exports.useEnv)();
5710
5740
  const { useGetSelection: useGetSelection3 } = (0, provider_exports.useService)();
5711
5741
  const addtionalFields = optionsFields ? evalJSONContext5(optionsFields) : null;
5712
- const domainObject = useMemo9(
5742
+ const domainObject = useMemo10(
5713
5743
  () => evalJSONDomain5(domain, JSON.parse(JSON.stringify(formValues || {}))),
5714
5744
  [domain, formValues]
5715
5745
  );
@@ -6941,7 +6971,7 @@ var binaryFieldController = (props) => {
6941
6971
  };
6942
6972
 
6943
6973
  // src/widget/advance/table/table-head/controller.ts
6944
- import { useMemo as useMemo10, useRef as useRef5 } from "react";
6974
+ import { useMemo as useMemo11, useRef as useRef5 } from "react";
6945
6975
  var tableHeadController = (props) => {
6946
6976
  const {
6947
6977
  typeTable,
@@ -6954,19 +6984,19 @@ var tableHeadController = (props) => {
6954
6984
  const { rowIds: recordIds } = useGetRowIds(tableRef);
6955
6985
  const selectedRowKeysRef = useRef5(recordIds);
6956
6986
  const isGroupTable = typeTable === "group";
6957
- const recordsCheckedGroup = useMemo10(() => {
6987
+ const recordsCheckedGroup = useMemo11(() => {
6958
6988
  if (!rows || !groupByList) return 0;
6959
6989
  const groupBy = typeof groupByList === "object" ? groupByList?.contexts?.[0]?.group_by : void 0;
6960
6990
  return countSum(rows, groupBy);
6961
6991
  }, [rows, groupByList]);
6962
- const isAllGroupChecked = useMemo10(() => {
6992
+ const isAllGroupChecked = useMemo11(() => {
6963
6993
  if (!isGroupTable || !selectedRowKeys?.length) return false;
6964
6994
  const selectedLength = selectedRowKeys.filter((id) => id !== -1).length;
6965
6995
  const allRecordsSelected = recordIds.length === selectedRowKeys.length ? recordIds.length === selectedLength : false;
6966
6996
  const allGroupsSelected = recordsCheckedGroup === selectedRowKeys.length;
6967
6997
  return allGroupsSelected || allRecordsSelected;
6968
6998
  }, [isGroupTable, selectedRowKeys, recordIds, recordsCheckedGroup]);
6969
- const isAllNormalChecked = useMemo10(() => {
6999
+ const isAllNormalChecked = useMemo11(() => {
6970
7000
  if (isGroupTable || !selectedRowKeys?.length || !rows?.length) return false;
6971
7001
  return selectedRowKeys.length === rows.length && selectedRowKeys.every(
6972
7002
  (id) => rows.some((record) => record.id === id)
@@ -7096,7 +7126,7 @@ var tableController = ({ data }) => {
7096
7126
  };
7097
7127
 
7098
7128
  // src/widget/advance/table/table-group/controller.ts
7099
- import { useEffect as useEffect14, useMemo as useMemo11, useState as useState14 } from "react";
7129
+ import { useEffect as useEffect14, useMemo as useMemo12, useState as useState14 } from "react";
7100
7130
  import {
7101
7131
  useAppSelector as useAppSelector2,
7102
7132
  selectList
@@ -7124,7 +7154,7 @@ var tableGroupController = (props) => {
7124
7154
  fromEnd: 1
7125
7155
  });
7126
7156
  const domain = row?.__domain;
7127
- const processedData = useMemo11(() => {
7157
+ const processedData = useMemo12(() => {
7128
7158
  const calculateColSpanEmpty = () => {
7129
7159
  const startIndex = columns.findIndex(
7130
7160
  (col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
@@ -7139,7 +7169,7 @@ var tableGroupController = (props) => {
7139
7169
  };
7140
7170
  return calculateColSpanEmpty();
7141
7171
  }, [columns, row]);
7142
- const shouldFetchData = useMemo11(() => {
7172
+ const shouldFetchData = useMemo12(() => {
7143
7173
  return !!isShowGroup;
7144
7174
  }, [isShowGroup]);
7145
7175
  const enabled = shouldFetchData && !!processedData;
package/dist/widget.d.mts CHANGED
@@ -1,10 +1,8 @@
1
1
  import * as react from 'react';
2
2
  import { ChangeEvent } from 'react';
3
3
  import { IInputFieldProps } from './types.mjs';
4
- import { V as ViewResponse } from './use-view-v2-BWHqxo3S.mjs';
5
4
  import moment from 'moment';
6
5
  import '@fctc/interface-logic/types';
7
- import '@tanstack/query-core';
8
6
 
9
7
  type TStatus = 'normal' | 'done' | 'blocked';
10
8
  interface TStatusDropdownFieldProps extends IInputFieldProps {
@@ -85,7 +83,7 @@ declare const many2manyFieldController: (props: IMany2ManyControllerProps) => {
85
83
  isPlaceholderData: boolean;
86
84
  setPage: react.Dispatch<react.SetStateAction<number>>;
87
85
  page: number;
88
- viewData: ViewResponse | undefined;
86
+ viewData: any;
89
87
  domain: any;
90
88
  setDomain: react.Dispatch<any>;
91
89
  searchController: {
package/dist/widget.d.ts CHANGED
@@ -1,10 +1,8 @@
1
1
  import * as react from 'react';
2
2
  import { ChangeEvent } from 'react';
3
3
  import { IInputFieldProps } from './types.js';
4
- import { V as ViewResponse } from './use-view-v2-BWHqxo3S.js';
5
4
  import moment from 'moment';
6
5
  import '@fctc/interface-logic/types';
7
- import '@tanstack/query-core';
8
6
 
9
7
  type TStatus = 'normal' | 'done' | 'blocked';
10
8
  interface TStatusDropdownFieldProps extends IInputFieldProps {
@@ -85,7 +83,7 @@ declare const many2manyFieldController: (props: IMany2ManyControllerProps) => {
85
83
  isPlaceholderData: boolean;
86
84
  setPage: react.Dispatch<react.SetStateAction<number>>;
87
85
  page: number;
88
- viewData: ViewResponse | undefined;
86
+ viewData: any;
89
87
  domain: any;
90
88
  setDomain: react.Dispatch<any>;
91
89
  searchController: {