@fctc/widget-logic 3.3.9 → 3.4.0

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
@@ -6951,88 +6951,76 @@ var tableHeadController = (props) => {
6951
6951
  var import_react24 = require("react");
6952
6952
  var import_utils17 = require("@fctc/interface-logic/utils");
6953
6953
  var tableController = ({ data }) => {
6954
- const [rows, setRows] = (0, import_react24.useState)(null);
6955
- const [columns, setColumns] = (0, import_react24.useState)(null);
6956
- const dataModelFields = data?.fields?.map((field) => {
6957
- return {
6954
+ const [rows, setRows] = (0, import_react24.useState)([]);
6955
+ const [columnVisibility, setColumnVisibility] = (0, import_react24.useState)({});
6956
+ const dataModelFields = (0, import_react24.useMemo)(() => {
6957
+ return data?.fields?.map((field) => ({
6958
6958
  ...data.dataModel?.[field?.name],
6959
6959
  ...field,
6960
6960
  string: field?.string || data.dataModel?.[field?.name]?.string
6961
- };
6962
- });
6963
- const mergeFields = mergeButtons(dataModelFields);
6964
- const transformData = (dataList) => {
6965
- if (!dataList) return;
6966
- return dataList?.map((item) => {
6967
- const transformedItem = { ...item };
6968
- Object.keys(item).forEach((field) => {
6969
- if (field !== "__domain") {
6970
- if (item[field] && typeof item[field] === "object" && item[field].display_name) {
6971
- transformedItem[field] = item[field];
6972
- } else if (Array.isArray(item[field]) && item[field].length > 0) {
6973
- if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
6974
- transformedItem["string"] = item[field]?.[1];
6961
+ })) ?? [];
6962
+ }, [data?.fields, data?.dataModel]);
6963
+ const mergeFields = (0, import_react24.useMemo)(
6964
+ () => mergeButtons(dataModelFields),
6965
+ [dataModelFields]
6966
+ );
6967
+ const transformData = (0, import_react24.useCallback)(
6968
+ (dataList) => {
6969
+ if (!dataList) return [];
6970
+ return dataList.map((item) => {
6971
+ const transformedItem = { ...item };
6972
+ Object.keys(item).forEach((field) => {
6973
+ if (field !== "__domain") {
6974
+ if (item[field] && typeof item[field] === "object" && item[field].display_name) {
6975
+ transformedItem[field] = item[field];
6976
+ } else if (Array.isArray(item[field]) && item[field].length > 0) {
6977
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
6978
+ transformedItem["string"] = item[field]?.[1];
6979
+ }
6980
+ transformedItem[field] = item[field];
6975
6981
  }
6976
- transformedItem[field] = item[field];
6977
6982
  }
6978
- }
6983
+ });
6984
+ return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6979
6985
  });
6980
- return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6981
- });
6982
- };
6986
+ },
6987
+ [data?.typeTable]
6988
+ );
6983
6989
  (0, import_react24.useEffect)(() => {
6984
- setRows(transformData(data.records));
6985
- }, [data.records]);
6986
- const handleGetColumns = () => {
6987
- let cols = [];
6990
+ setRows(transformData(data?.records));
6991
+ }, [data?.records, transformData]);
6992
+ const columns = (0, import_react24.useMemo)(() => {
6988
6993
  try {
6989
- cols = mergeFields?.filter((item) => {
6990
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.invisible) : false);
6994
+ return mergeFields?.filter((item) => {
6995
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils17.domainHelper.matchDomains(
6996
+ data.context,
6997
+ item?.column_invisible
6998
+ ) : item?.invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.invisible) : false);
6991
6999
  })?.map((field) => {
7000
+ const overridden = columnVisibility[field?.name];
6992
7001
  return {
6993
7002
  name: field?.name,
6994
- optional: field?.optional,
7003
+ optional: overridden ?? field?.optional,
6995
7004
  title: field?.type_co === "button" ? "" : field?.string,
6996
7005
  field: { ...field }
6997
7006
  };
6998
- });
7007
+ }) ?? [];
6999
7008
  } catch (error) {
7000
7009
  console.error("Error in useTable:", error);
7010
+ return [];
7001
7011
  }
7002
- return cols;
7003
- };
7004
- (0, import_react24.useEffect)(() => {
7005
- if (!columns) {
7006
- setColumns(handleGetColumns());
7007
- }
7008
- }, [data]);
7009
- const onToggleColumnOptional = (item) => {
7010
- const tempColumn = [...columns]?.map((val) => {
7011
- if (item?.name === val?.name) {
7012
- return {
7013
- ...val,
7014
- optional: item?.optional === "show" ? "hide" : "show"
7015
- };
7016
- }
7017
- return val;
7018
- });
7019
- setColumns(tempColumn);
7020
- };
7021
- (0, import_react24.useEffect)(() => {
7022
- if (data?.fields != null) {
7023
- setColumns(null);
7024
- }
7025
- return () => {
7026
- if (data?.fields != null) {
7027
- setColumns(null);
7028
- }
7029
- };
7030
- }, [data?.fields]);
7012
+ }, [mergeFields, data?.context, columnVisibility]);
7013
+ const onToggleColumnOptional = (0, import_react24.useCallback)((item) => {
7014
+ setColumnVisibility((prev) => ({
7015
+ ...prev,
7016
+ [item?.name]: item?.optional === "show" ? "hide" : "show"
7017
+ }));
7018
+ }, []);
7031
7019
  return {
7032
7020
  rows,
7033
7021
  columns,
7034
7022
  onToggleColumnOptional,
7035
- typeTable: data.typeTable
7023
+ typeTable: data?.typeTable
7036
7024
  };
7037
7025
  };
7038
7026
 
package/dist/index.mjs CHANGED
@@ -7029,96 +7029,84 @@ var tableHeadController = (props) => {
7029
7029
  };
7030
7030
 
7031
7031
  // src/widget/advance/table/table-view/controller.ts
7032
- import { useEffect as useEffect13, useState as useState12 } from "react";
7032
+ import { useCallback as useCallback5, useEffect as useEffect13, useMemo as useMemo11, useState as useState12 } from "react";
7033
7033
  import { domainHelper } from "@fctc/interface-logic/utils";
7034
7034
  var tableController = ({ data }) => {
7035
- const [rows, setRows] = useState12(null);
7036
- const [columns, setColumns] = useState12(null);
7037
- const dataModelFields = data?.fields?.map((field) => {
7038
- return {
7035
+ const [rows, setRows] = useState12([]);
7036
+ const [columnVisibility, setColumnVisibility] = useState12({});
7037
+ const dataModelFields = useMemo11(() => {
7038
+ return data?.fields?.map((field) => ({
7039
7039
  ...data.dataModel?.[field?.name],
7040
7040
  ...field,
7041
7041
  string: field?.string || data.dataModel?.[field?.name]?.string
7042
- };
7043
- });
7044
- const mergeFields = mergeButtons(dataModelFields);
7045
- const transformData = (dataList) => {
7046
- if (!dataList) return;
7047
- return dataList?.map((item) => {
7048
- const transformedItem = { ...item };
7049
- Object.keys(item).forEach((field) => {
7050
- if (field !== "__domain") {
7051
- if (item[field] && typeof item[field] === "object" && item[field].display_name) {
7052
- transformedItem[field] = item[field];
7053
- } else if (Array.isArray(item[field]) && item[field].length > 0) {
7054
- if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
7055
- transformedItem["string"] = item[field]?.[1];
7042
+ })) ?? [];
7043
+ }, [data?.fields, data?.dataModel]);
7044
+ const mergeFields = useMemo11(
7045
+ () => mergeButtons(dataModelFields),
7046
+ [dataModelFields]
7047
+ );
7048
+ const transformData = useCallback5(
7049
+ (dataList) => {
7050
+ if (!dataList) return [];
7051
+ return dataList.map((item) => {
7052
+ const transformedItem = { ...item };
7053
+ Object.keys(item).forEach((field) => {
7054
+ if (field !== "__domain") {
7055
+ if (item[field] && typeof item[field] === "object" && item[field].display_name) {
7056
+ transformedItem[field] = item[field];
7057
+ } else if (Array.isArray(item[field]) && item[field].length > 0) {
7058
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
7059
+ transformedItem["string"] = item[field]?.[1];
7060
+ }
7061
+ transformedItem[field] = item[field];
7056
7062
  }
7057
- transformedItem[field] = item[field];
7058
7063
  }
7059
- }
7064
+ });
7065
+ return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
7060
7066
  });
7061
- return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
7062
- });
7063
- };
7067
+ },
7068
+ [data?.typeTable]
7069
+ );
7064
7070
  useEffect13(() => {
7065
- setRows(transformData(data.records));
7066
- }, [data.records]);
7067
- const handleGetColumns = () => {
7068
- let cols = [];
7071
+ setRows(transformData(data?.records));
7072
+ }, [data?.records, transformData]);
7073
+ const columns = useMemo11(() => {
7069
7074
  try {
7070
- cols = mergeFields?.filter((item) => {
7071
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? domainHelper.matchDomains(data.context, item?.invisible) : false);
7075
+ return mergeFields?.filter((item) => {
7076
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(
7077
+ data.context,
7078
+ item?.column_invisible
7079
+ ) : item?.invisible ? domainHelper.matchDomains(data.context, item?.invisible) : false);
7072
7080
  })?.map((field) => {
7081
+ const overridden = columnVisibility[field?.name];
7073
7082
  return {
7074
7083
  name: field?.name,
7075
- optional: field?.optional,
7084
+ optional: overridden ?? field?.optional,
7076
7085
  title: field?.type_co === "button" ? "" : field?.string,
7077
7086
  field: { ...field }
7078
7087
  };
7079
- });
7088
+ }) ?? [];
7080
7089
  } catch (error) {
7081
7090
  console.error("Error in useTable:", error);
7091
+ return [];
7082
7092
  }
7083
- return cols;
7084
- };
7085
- useEffect13(() => {
7086
- if (!columns) {
7087
- setColumns(handleGetColumns());
7088
- }
7089
- }, [data]);
7090
- const onToggleColumnOptional = (item) => {
7091
- const tempColumn = [...columns]?.map((val) => {
7092
- if (item?.name === val?.name) {
7093
- return {
7094
- ...val,
7095
- optional: item?.optional === "show" ? "hide" : "show"
7096
- };
7097
- }
7098
- return val;
7099
- });
7100
- setColumns(tempColumn);
7101
- };
7102
- useEffect13(() => {
7103
- if (data?.fields != null) {
7104
- setColumns(null);
7105
- }
7106
- return () => {
7107
- if (data?.fields != null) {
7108
- setColumns(null);
7109
- }
7110
- };
7111
- }, [data?.fields]);
7093
+ }, [mergeFields, data?.context, columnVisibility]);
7094
+ const onToggleColumnOptional = useCallback5((item) => {
7095
+ setColumnVisibility((prev) => ({
7096
+ ...prev,
7097
+ [item?.name]: item?.optional === "show" ? "hide" : "show"
7098
+ }));
7099
+ }, []);
7112
7100
  return {
7113
7101
  rows,
7114
7102
  columns,
7115
7103
  onToggleColumnOptional,
7116
- typeTable: data.typeTable
7104
+ typeTable: data?.typeTable
7117
7105
  };
7118
7106
  };
7119
7107
 
7120
7108
  // src/widget/advance/table/table-group/controller.ts
7121
- import { useEffect as useEffect14, useMemo as useMemo11, useState as useState13 } from "react";
7109
+ import { useEffect as useEffect14, useMemo as useMemo12, useState as useState13 } from "react";
7122
7110
  import { useAppSelector as useAppSelector2, selectList } from "@fctc/interface-logic/store";
7123
7111
  var tableGroupController = (props) => {
7124
7112
  const { env } = (0, provider_exports.useEnv)();
@@ -7143,7 +7131,7 @@ var tableGroupController = (props) => {
7143
7131
  fromEnd: 1
7144
7132
  });
7145
7133
  const domain = row?.__domain;
7146
- const processedData = useMemo11(() => {
7134
+ const processedData = useMemo12(() => {
7147
7135
  const calculateColSpanEmpty = () => {
7148
7136
  const startIndex = columns.findIndex(
7149
7137
  (col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
@@ -7158,7 +7146,7 @@ var tableGroupController = (props) => {
7158
7146
  };
7159
7147
  return calculateColSpanEmpty();
7160
7148
  }, [columns, row]);
7161
- const shouldFetchData = useMemo11(() => {
7149
+ const shouldFetchData = useMemo12(() => {
7162
7150
  return !!isShowGroup;
7163
7151
  }, [isShowGroup]);
7164
7152
  const enabled = shouldFetchData && !!processedData;
@@ -7260,7 +7248,7 @@ import {
7260
7248
  evalJSONDomain as evalJSONDomain6,
7261
7249
  validateAndParseDate
7262
7250
  } from "@fctc/interface-logic/utils";
7263
- import { useCallback as useCallback5, useEffect as useEffect15, useState as useState14 } from "react";
7251
+ import { useCallback as useCallback6, useEffect as useEffect15, useState as useState14 } from "react";
7264
7252
  var searchController = ({
7265
7253
  viewData,
7266
7254
  model,
@@ -7403,7 +7391,7 @@ var searchController = ({
7403
7391
  return [...domain2];
7404
7392
  }
7405
7393
  };
7406
- const setTagSearch = useCallback5(
7394
+ const setTagSearch = useCallback6(
7407
7395
  (updatedMap) => {
7408
7396
  if (!updatedMap) return;
7409
7397
  const tagsSearch = Object.entries(updatedMap).map(
package/dist/widget.d.mts CHANGED
@@ -70,7 +70,7 @@ interface IMany2ManyControllerProps extends IInputFieldProps {
70
70
  }
71
71
 
72
72
  declare const many2manyFieldController: (props: IMany2ManyControllerProps) => {
73
- rows: any;
73
+ rows: any[];
74
74
  columns: any;
75
75
  optionsObject: any;
76
76
  viewData: any;
@@ -245,7 +245,7 @@ interface ISelctionStateProps {
245
245
  }
246
246
 
247
247
  declare const tableController: ({ data }: ITableProps) => {
248
- rows: any;
248
+ rows: any[];
249
249
  columns: any;
250
250
  onToggleColumnOptional: (item: any) => void;
251
251
  typeTable: "list" | "group" | "calendar" | undefined;
@@ -262,7 +262,7 @@ declare const tableGroupController: (props: any) => {
262
262
  isDataPlaceHolder: boolean;
263
263
  nameGroupWithCount: string;
264
264
  columnsGroup: any;
265
- rowsGroup: any;
265
+ rowsGroup: any[];
266
266
  dataGroup: any;
267
267
  pageGroup: any;
268
268
  setPageGroup: react.Dispatch<any>;
package/dist/widget.d.ts CHANGED
@@ -70,7 +70,7 @@ interface IMany2ManyControllerProps extends IInputFieldProps {
70
70
  }
71
71
 
72
72
  declare const many2manyFieldController: (props: IMany2ManyControllerProps) => {
73
- rows: any;
73
+ rows: any[];
74
74
  columns: any;
75
75
  optionsObject: any;
76
76
  viewData: any;
@@ -245,7 +245,7 @@ interface ISelctionStateProps {
245
245
  }
246
246
 
247
247
  declare const tableController: ({ data }: ITableProps) => {
248
- rows: any;
248
+ rows: any[];
249
249
  columns: any;
250
250
  onToggleColumnOptional: (item: any) => void;
251
251
  typeTable: "list" | "group" | "calendar" | undefined;
@@ -262,7 +262,7 @@ declare const tableGroupController: (props: any) => {
262
262
  isDataPlaceHolder: boolean;
263
263
  nameGroupWithCount: string;
264
264
  columnsGroup: any;
265
- rowsGroup: any;
265
+ rowsGroup: any[];
266
266
  dataGroup: any;
267
267
  pageGroup: any;
268
268
  setPageGroup: react.Dispatch<any>;
package/dist/widget.js CHANGED
@@ -6196,88 +6196,76 @@ var tableHeadController = (props) => {
6196
6196
  var import_react24 = require("react");
6197
6197
  var import_utils17 = require("@fctc/interface-logic/utils");
6198
6198
  var tableController = ({ data }) => {
6199
- const [rows, setRows] = (0, import_react24.useState)(null);
6200
- const [columns, setColumns] = (0, import_react24.useState)(null);
6201
- const dataModelFields = data?.fields?.map((field) => {
6202
- return {
6199
+ const [rows, setRows] = (0, import_react24.useState)([]);
6200
+ const [columnVisibility, setColumnVisibility] = (0, import_react24.useState)({});
6201
+ const dataModelFields = (0, import_react24.useMemo)(() => {
6202
+ return data?.fields?.map((field) => ({
6203
6203
  ...data.dataModel?.[field?.name],
6204
6204
  ...field,
6205
6205
  string: field?.string || data.dataModel?.[field?.name]?.string
6206
- };
6207
- });
6208
- const mergeFields = mergeButtons(dataModelFields);
6209
- const transformData = (dataList) => {
6210
- if (!dataList) return;
6211
- return dataList?.map((item) => {
6212
- const transformedItem = { ...item };
6213
- Object.keys(item).forEach((field) => {
6214
- if (field !== "__domain") {
6215
- if (item[field] && typeof item[field] === "object" && item[field].display_name) {
6216
- transformedItem[field] = item[field];
6217
- } else if (Array.isArray(item[field]) && item[field].length > 0) {
6218
- if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
6219
- transformedItem["string"] = item[field]?.[1];
6206
+ })) ?? [];
6207
+ }, [data?.fields, data?.dataModel]);
6208
+ const mergeFields = (0, import_react24.useMemo)(
6209
+ () => mergeButtons(dataModelFields),
6210
+ [dataModelFields]
6211
+ );
6212
+ const transformData = (0, import_react24.useCallback)(
6213
+ (dataList) => {
6214
+ if (!dataList) return [];
6215
+ return dataList.map((item) => {
6216
+ const transformedItem = { ...item };
6217
+ Object.keys(item).forEach((field) => {
6218
+ if (field !== "__domain") {
6219
+ if (item[field] && typeof item[field] === "object" && item[field].display_name) {
6220
+ transformedItem[field] = item[field];
6221
+ } else if (Array.isArray(item[field]) && item[field].length > 0) {
6222
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
6223
+ transformedItem["string"] = item[field]?.[1];
6224
+ }
6225
+ transformedItem[field] = item[field];
6220
6226
  }
6221
- transformedItem[field] = item[field];
6222
6227
  }
6223
- }
6228
+ });
6229
+ return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6224
6230
  });
6225
- return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6226
- });
6227
- };
6231
+ },
6232
+ [data?.typeTable]
6233
+ );
6228
6234
  (0, import_react24.useEffect)(() => {
6229
- setRows(transformData(data.records));
6230
- }, [data.records]);
6231
- const handleGetColumns = () => {
6232
- let cols = [];
6235
+ setRows(transformData(data?.records));
6236
+ }, [data?.records, transformData]);
6237
+ const columns = (0, import_react24.useMemo)(() => {
6233
6238
  try {
6234
- cols = mergeFields?.filter((item) => {
6235
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.invisible) : false);
6239
+ return mergeFields?.filter((item) => {
6240
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils17.domainHelper.matchDomains(
6241
+ data.context,
6242
+ item?.column_invisible
6243
+ ) : item?.invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.invisible) : false);
6236
6244
  })?.map((field) => {
6245
+ const overridden = columnVisibility[field?.name];
6237
6246
  return {
6238
6247
  name: field?.name,
6239
- optional: field?.optional,
6248
+ optional: overridden ?? field?.optional,
6240
6249
  title: field?.type_co === "button" ? "" : field?.string,
6241
6250
  field: { ...field }
6242
6251
  };
6243
- });
6252
+ }) ?? [];
6244
6253
  } catch (error) {
6245
6254
  console.error("Error in useTable:", error);
6255
+ return [];
6246
6256
  }
6247
- return cols;
6248
- };
6249
- (0, import_react24.useEffect)(() => {
6250
- if (!columns) {
6251
- setColumns(handleGetColumns());
6252
- }
6253
- }, [data]);
6254
- const onToggleColumnOptional = (item) => {
6255
- const tempColumn = [...columns]?.map((val) => {
6256
- if (item?.name === val?.name) {
6257
- return {
6258
- ...val,
6259
- optional: item?.optional === "show" ? "hide" : "show"
6260
- };
6261
- }
6262
- return val;
6263
- });
6264
- setColumns(tempColumn);
6265
- };
6266
- (0, import_react24.useEffect)(() => {
6267
- if (data?.fields != null) {
6268
- setColumns(null);
6269
- }
6270
- return () => {
6271
- if (data?.fields != null) {
6272
- setColumns(null);
6273
- }
6274
- };
6275
- }, [data?.fields]);
6257
+ }, [mergeFields, data?.context, columnVisibility]);
6258
+ const onToggleColumnOptional = (0, import_react24.useCallback)((item) => {
6259
+ setColumnVisibility((prev) => ({
6260
+ ...prev,
6261
+ [item?.name]: item?.optional === "show" ? "hide" : "show"
6262
+ }));
6263
+ }, []);
6276
6264
  return {
6277
6265
  rows,
6278
6266
  columns,
6279
6267
  onToggleColumnOptional,
6280
- typeTable: data.typeTable
6268
+ typeTable: data?.typeTable
6281
6269
  };
6282
6270
  };
6283
6271
 
package/dist/widget.mjs CHANGED
@@ -6251,96 +6251,84 @@ var tableHeadController = (props) => {
6251
6251
  };
6252
6252
 
6253
6253
  // src/widget/advance/table/table-view/controller.ts
6254
- import { useEffect as useEffect13, useState as useState12 } from "react";
6254
+ import { useCallback as useCallback5, useEffect as useEffect13, useMemo as useMemo11, useState as useState12 } from "react";
6255
6255
  import { domainHelper } from "@fctc/interface-logic/utils";
6256
6256
  var tableController = ({ data }) => {
6257
- const [rows, setRows] = useState12(null);
6258
- const [columns, setColumns] = useState12(null);
6259
- const dataModelFields = data?.fields?.map((field) => {
6260
- return {
6257
+ const [rows, setRows] = useState12([]);
6258
+ const [columnVisibility, setColumnVisibility] = useState12({});
6259
+ const dataModelFields = useMemo11(() => {
6260
+ return data?.fields?.map((field) => ({
6261
6261
  ...data.dataModel?.[field?.name],
6262
6262
  ...field,
6263
6263
  string: field?.string || data.dataModel?.[field?.name]?.string
6264
- };
6265
- });
6266
- const mergeFields = mergeButtons(dataModelFields);
6267
- const transformData = (dataList) => {
6268
- if (!dataList) return;
6269
- return dataList?.map((item) => {
6270
- const transformedItem = { ...item };
6271
- Object.keys(item).forEach((field) => {
6272
- if (field !== "__domain") {
6273
- if (item[field] && typeof item[field] === "object" && item[field].display_name) {
6274
- transformedItem[field] = item[field];
6275
- } else if (Array.isArray(item[field]) && item[field].length > 0) {
6276
- if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
6277
- transformedItem["string"] = item[field]?.[1];
6264
+ })) ?? [];
6265
+ }, [data?.fields, data?.dataModel]);
6266
+ const mergeFields = useMemo11(
6267
+ () => mergeButtons(dataModelFields),
6268
+ [dataModelFields]
6269
+ );
6270
+ const transformData = useCallback5(
6271
+ (dataList) => {
6272
+ if (!dataList) return [];
6273
+ return dataList.map((item) => {
6274
+ const transformedItem = { ...item };
6275
+ Object.keys(item).forEach((field) => {
6276
+ if (field !== "__domain") {
6277
+ if (item[field] && typeof item[field] === "object" && item[field].display_name) {
6278
+ transformedItem[field] = item[field];
6279
+ } else if (Array.isArray(item[field]) && item[field].length > 0) {
6280
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
6281
+ transformedItem["string"] = item[field]?.[1];
6282
+ }
6283
+ transformedItem[field] = item[field];
6278
6284
  }
6279
- transformedItem[field] = item[field];
6280
6285
  }
6281
- }
6286
+ });
6287
+ return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6282
6288
  });
6283
- return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6284
- });
6285
- };
6289
+ },
6290
+ [data?.typeTable]
6291
+ );
6286
6292
  useEffect13(() => {
6287
- setRows(transformData(data.records));
6288
- }, [data.records]);
6289
- const handleGetColumns = () => {
6290
- let cols = [];
6293
+ setRows(transformData(data?.records));
6294
+ }, [data?.records, transformData]);
6295
+ const columns = useMemo11(() => {
6291
6296
  try {
6292
- cols = mergeFields?.filter((item) => {
6293
- return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? domainHelper.matchDomains(data.context, item?.invisible) : false);
6297
+ return mergeFields?.filter((item) => {
6298
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(
6299
+ data.context,
6300
+ item?.column_invisible
6301
+ ) : item?.invisible ? domainHelper.matchDomains(data.context, item?.invisible) : false);
6294
6302
  })?.map((field) => {
6303
+ const overridden = columnVisibility[field?.name];
6295
6304
  return {
6296
6305
  name: field?.name,
6297
- optional: field?.optional,
6306
+ optional: overridden ?? field?.optional,
6298
6307
  title: field?.type_co === "button" ? "" : field?.string,
6299
6308
  field: { ...field }
6300
6309
  };
6301
- });
6310
+ }) ?? [];
6302
6311
  } catch (error) {
6303
6312
  console.error("Error in useTable:", error);
6313
+ return [];
6304
6314
  }
6305
- return cols;
6306
- };
6307
- useEffect13(() => {
6308
- if (!columns) {
6309
- setColumns(handleGetColumns());
6310
- }
6311
- }, [data]);
6312
- const onToggleColumnOptional = (item) => {
6313
- const tempColumn = [...columns]?.map((val) => {
6314
- if (item?.name === val?.name) {
6315
- return {
6316
- ...val,
6317
- optional: item?.optional === "show" ? "hide" : "show"
6318
- };
6319
- }
6320
- return val;
6321
- });
6322
- setColumns(tempColumn);
6323
- };
6324
- useEffect13(() => {
6325
- if (data?.fields != null) {
6326
- setColumns(null);
6327
- }
6328
- return () => {
6329
- if (data?.fields != null) {
6330
- setColumns(null);
6331
- }
6332
- };
6333
- }, [data?.fields]);
6315
+ }, [mergeFields, data?.context, columnVisibility]);
6316
+ const onToggleColumnOptional = useCallback5((item) => {
6317
+ setColumnVisibility((prev) => ({
6318
+ ...prev,
6319
+ [item?.name]: item?.optional === "show" ? "hide" : "show"
6320
+ }));
6321
+ }, []);
6334
6322
  return {
6335
6323
  rows,
6336
6324
  columns,
6337
6325
  onToggleColumnOptional,
6338
- typeTable: data.typeTable
6326
+ typeTable: data?.typeTable
6339
6327
  };
6340
6328
  };
6341
6329
 
6342
6330
  // src/widget/advance/table/table-group/controller.ts
6343
- import { useEffect as useEffect14, useMemo as useMemo11, useState as useState13 } from "react";
6331
+ import { useEffect as useEffect14, useMemo as useMemo12, useState as useState13 } from "react";
6344
6332
  import { useAppSelector as useAppSelector2, selectList } from "@fctc/interface-logic/store";
6345
6333
  var tableGroupController = (props) => {
6346
6334
  const { env } = (0, provider_exports.useEnv)();
@@ -6365,7 +6353,7 @@ var tableGroupController = (props) => {
6365
6353
  fromEnd: 1
6366
6354
  });
6367
6355
  const domain = row?.__domain;
6368
- const processedData = useMemo11(() => {
6356
+ const processedData = useMemo12(() => {
6369
6357
  const calculateColSpanEmpty = () => {
6370
6358
  const startIndex = columns.findIndex(
6371
6359
  (col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
@@ -6380,7 +6368,7 @@ var tableGroupController = (props) => {
6380
6368
  };
6381
6369
  return calculateColSpanEmpty();
6382
6370
  }, [columns, row]);
6383
- const shouldFetchData = useMemo11(() => {
6371
+ const shouldFetchData = useMemo12(() => {
6384
6372
  return !!isShowGroup;
6385
6373
  }, [isShowGroup]);
6386
6374
  const enabled = shouldFetchData && !!processedData;
@@ -6482,7 +6470,7 @@ import {
6482
6470
  evalJSONDomain as evalJSONDomain6,
6483
6471
  validateAndParseDate
6484
6472
  } from "@fctc/interface-logic/utils";
6485
- import { useCallback as useCallback5, useEffect as useEffect15, useState as useState14 } from "react";
6473
+ import { useCallback as useCallback6, useEffect as useEffect15, useState as useState14 } from "react";
6486
6474
  var searchController = ({
6487
6475
  viewData,
6488
6476
  model,
@@ -6625,7 +6613,7 @@ var searchController = ({
6625
6613
  return [...domain2];
6626
6614
  }
6627
6615
  };
6628
- const setTagSearch = useCallback5(
6616
+ const setTagSearch = useCallback6(
6629
6617
  (updatedMap) => {
6630
6618
  if (!updatedMap) return;
6631
6619
  const tagsSearch = Object.entries(updatedMap).map(
package/package.json CHANGED
@@ -1,94 +1,94 @@
1
- {
2
- "name": "@fctc/widget-logic",
3
- "version": "3.3.9",
4
- "types": "dist/index.d.ts",
5
- "main": "dist/index.cjs",
6
- "module": "dist/index.mjs",
7
- "exports": {
8
- ".": {
9
- "types": "./dist/index.d.ts",
10
- "import": "./dist/index.mjs",
11
- "require": "./dist/index.cjs"
12
- },
13
- "./hooks": {
14
- "types": "./dist/hooks.d.ts",
15
- "import": "./dist/hooks.mjs",
16
- "require": "./dist/hooks.cjs"
17
- },
18
- "./widget": {
19
- "types": "./dist/widget.d.ts",
20
- "import": "./dist/widget.mjs",
21
- "require": "./dist/widget.cjs"
22
- },
23
- "./icons": {
24
- "types": "./dist/icons.d.ts",
25
- "import": "./dist/icons.mjs",
26
- "require": "./dist/icons.cjs"
27
- },
28
- "./utils": {
29
- "types": "./dist/utils.d.ts",
30
- "import": "./dist/utils.mjs",
31
- "require": "./dist/utils.cjs"
32
- },
33
- "./store": {
34
- "types": "./dist/store.d.ts",
35
- "import": "./dist/store.mjs",
36
- "require": "./dist/store.cjs"
37
- },
38
- "./config": {
39
- "types": "./dist/config.d.ts",
40
- "import": "./dist/config.mjs",
41
- "require": "./dist/config.cjs"
42
- },
43
- "./constants": {
44
- "types": "./dist/constants.d.ts",
45
- "import": "./dist/constants.mjs",
46
- "require": "./dist/constants.cjs"
47
- },
48
- "./environment": {
49
- "types": "./dist/environment.d.ts",
50
- "import": "./dist/environment.mjs",
51
- "require": "./dist/environment.cjs"
52
- },
53
- "./provider": {
54
- "types": "./dist/provider.d.ts",
55
- "import": "./dist/provider.mjs",
56
- "require": "./dist/provider.cjs"
57
- },
58
- "./services": {
59
- "types": "./dist/services.d.ts",
60
- "import": "./dist/services.mjs",
61
- "require": "./dist/services.cjs"
62
- },
63
- "./types": {
64
- "types": "./dist/types.d.ts",
65
- "import": "./dist/types.mjs",
66
- "require": "./dist/types.cjs"
67
- }
68
- },
69
- "files": [
70
- "dist"
71
- ],
72
- "scripts": {
73
- "build": "tsup",
74
- "test": "jest"
75
- },
76
- "dependencies": {
77
- "@fctc/interface-logic": "^3.0.3",
78
- "@headlessui/react": "^2.2.6",
79
- "@tanstack/react-query": "^5.84.0",
80
- "i18next": "^25.3.2",
81
- "i18next-browser-languagedetector": "^8.2.0",
82
- "react-i18next": "^15.6.1",
83
- "react-tooltip": "^5.29.1"
84
- },
85
- "devDependencies": {
86
- "@types/react": "^18.3.1",
87
- "jest": "^29.7.0",
88
- "react": "18.0.0",
89
- "tsup": "^8.0.0",
90
- "typescript": "^5.8.2"
91
- },
92
- "packageManager": "yarn@1.22.0",
93
- "peerDependencies": {}
94
- }
1
+ {
2
+ "name": "@fctc/widget-logic",
3
+ "version": "3.4.0",
4
+ "types": "dist/index.d.ts",
5
+ "main": "dist/index.cjs",
6
+ "module": "dist/index.mjs",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.cjs"
12
+ },
13
+ "./hooks": {
14
+ "types": "./dist/hooks.d.ts",
15
+ "import": "./dist/hooks.mjs",
16
+ "require": "./dist/hooks.cjs"
17
+ },
18
+ "./widget": {
19
+ "types": "./dist/widget.d.ts",
20
+ "import": "./dist/widget.mjs",
21
+ "require": "./dist/widget.cjs"
22
+ },
23
+ "./icons": {
24
+ "types": "./dist/icons.d.ts",
25
+ "import": "./dist/icons.mjs",
26
+ "require": "./dist/icons.cjs"
27
+ },
28
+ "./utils": {
29
+ "types": "./dist/utils.d.ts",
30
+ "import": "./dist/utils.mjs",
31
+ "require": "./dist/utils.cjs"
32
+ },
33
+ "./store": {
34
+ "types": "./dist/store.d.ts",
35
+ "import": "./dist/store.mjs",
36
+ "require": "./dist/store.cjs"
37
+ },
38
+ "./config": {
39
+ "types": "./dist/config.d.ts",
40
+ "import": "./dist/config.mjs",
41
+ "require": "./dist/config.cjs"
42
+ },
43
+ "./constants": {
44
+ "types": "./dist/constants.d.ts",
45
+ "import": "./dist/constants.mjs",
46
+ "require": "./dist/constants.cjs"
47
+ },
48
+ "./environment": {
49
+ "types": "./dist/environment.d.ts",
50
+ "import": "./dist/environment.mjs",
51
+ "require": "./dist/environment.cjs"
52
+ },
53
+ "./provider": {
54
+ "types": "./dist/provider.d.ts",
55
+ "import": "./dist/provider.mjs",
56
+ "require": "./dist/provider.cjs"
57
+ },
58
+ "./services": {
59
+ "types": "./dist/services.d.ts",
60
+ "import": "./dist/services.mjs",
61
+ "require": "./dist/services.cjs"
62
+ },
63
+ "./types": {
64
+ "types": "./dist/types.d.ts",
65
+ "import": "./dist/types.mjs",
66
+ "require": "./dist/types.cjs"
67
+ }
68
+ },
69
+ "files": [
70
+ "dist"
71
+ ],
72
+ "scripts": {
73
+ "build": "tsup",
74
+ "test": "jest"
75
+ },
76
+ "dependencies": {
77
+ "@fctc/interface-logic": "^3.0.3",
78
+ "@headlessui/react": "^2.2.6",
79
+ "@tanstack/react-query": "^5.84.0",
80
+ "i18next": "^25.3.2",
81
+ "i18next-browser-languagedetector": "^8.2.0",
82
+ "react-i18next": "^15.6.1",
83
+ "react-tooltip": "^5.29.1"
84
+ },
85
+ "devDependencies": {
86
+ "@types/react": "^18.3.1",
87
+ "jest": "^29.7.0",
88
+ "react": "18.0.0",
89
+ "tsup": "^8.0.0",
90
+ "typescript": "^5.8.2"
91
+ },
92
+ "packageManager": "yarn@1.22.0",
93
+ "peerDependencies": {}
94
+ }