@fctc/widget-logic 3.4.1 → 3.4.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/hooks.js CHANGED
@@ -458,7 +458,7 @@ var import_react_i18next = require("react-i18next");
458
458
  var useProfile = ({ service }) => {
459
459
  const { setUid, setLang, setUserInfo, env } = (0, provider_exports.useEnv)();
460
460
  const { useGetProfile: useGetProfile2 } = (0, provider_exports.useService)();
461
- const getProfile = useGetProfile2();
461
+ const getProfile = useGetProfile2("service", service);
462
462
  const { i18n } = (0, import_react_i18next.useTranslation)();
463
463
  const userInfoQuery = (0, import_react_query2.useQuery)({
464
464
  queryKey: ["userInfo"],
package/dist/hooks.mjs CHANGED
@@ -439,7 +439,7 @@ import { useTranslation } from "react-i18next";
439
439
  var useProfile = ({ service }) => {
440
440
  const { setUid, setLang, setUserInfo, env } = (0, provider_exports.useEnv)();
441
441
  const { useGetProfile: useGetProfile2 } = (0, provider_exports.useService)();
442
- const getProfile = useGetProfile2();
442
+ const getProfile = useGetProfile2("service", service);
443
443
  const { i18n } = useTranslation();
444
444
  const userInfoQuery = useQuery2({
445
445
  queryKey: ["userInfo"],
package/dist/index.js CHANGED
@@ -4508,7 +4508,7 @@ var import_react_i18next = require("react-i18next");
4508
4508
  var useProfile = ({ service }) => {
4509
4509
  const { setUid, setLang, setUserInfo, env } = (0, provider_exports.useEnv)();
4510
4510
  const { useGetProfile: useGetProfile2 } = (0, provider_exports.useService)();
4511
- const getProfile = useGetProfile2();
4511
+ const getProfile = useGetProfile2("service", service);
4512
4512
  const { i18n: i18n2 } = (0, import_react_i18next.useTranslation)();
4513
4513
  const userInfoQuery = (0, import_react_query2.useQuery)({
4514
4514
  queryKey: ["userInfo"],
@@ -6953,88 +6953,76 @@ var tableHeadController = (props) => {
6953
6953
  var import_react24 = require("react");
6954
6954
  var import_utils17 = require("@fctc/interface-logic/utils");
6955
6955
  var tableController = ({ data }) => {
6956
- const [rows, setRows] = (0, import_react24.useState)(null);
6957
- const [columns, setColumns] = (0, import_react24.useState)(null);
6958
- const dataModelFields = data?.fields?.map((field) => {
6959
- return {
6956
+ const [rows, setRows] = (0, import_react24.useState)([]);
6957
+ const [columnVisibility, setColumnVisibility] = (0, import_react24.useState)({});
6958
+ const dataModelFields = (0, import_react24.useMemo)(() => {
6959
+ return data?.fields?.map((field) => ({
6960
6960
  ...data.dataModel?.[field?.name],
6961
6961
  ...field,
6962
6962
  string: field?.string || data.dataModel?.[field?.name]?.string
6963
- };
6964
- });
6965
- const mergeFields = mergeButtons(dataModelFields);
6966
- const transformData = (dataList) => {
6967
- if (!dataList) return;
6968
- return dataList?.map((item) => {
6969
- const transformedItem = { ...item };
6970
- Object.keys(item).forEach((field) => {
6971
- if (field !== "__domain") {
6972
- if (item[field] && typeof item[field] === "object" && item[field].display_name) {
6973
- transformedItem[field] = item[field];
6974
- } else if (Array.isArray(item[field]) && item[field].length > 0) {
6975
- if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
6976
- transformedItem["string"] = item[field]?.[1];
6963
+ })) ?? [];
6964
+ }, [data?.fields, data?.dataModel]);
6965
+ const mergeFields = (0, import_react24.useMemo)(
6966
+ () => mergeButtons(dataModelFields),
6967
+ [dataModelFields]
6968
+ );
6969
+ const transformData = (0, import_react24.useCallback)(
6970
+ (dataList) => {
6971
+ if (!dataList) return [];
6972
+ return dataList.map((item) => {
6973
+ const transformedItem = { ...item };
6974
+ Object.keys(item).forEach((field) => {
6975
+ if (field !== "__domain") {
6976
+ if (item[field] && typeof item[field] === "object" && item[field].display_name) {
6977
+ transformedItem[field] = item[field];
6978
+ } else if (Array.isArray(item[field]) && item[field].length > 0) {
6979
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
6980
+ transformedItem["string"] = item[field]?.[1];
6981
+ }
6982
+ transformedItem[field] = item[field];
6977
6983
  }
6978
- transformedItem[field] = item[field];
6979
6984
  }
6980
- }
6985
+ });
6986
+ return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6981
6987
  });
6982
- return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
6983
- });
6984
- };
6988
+ },
6989
+ [data?.typeTable]
6990
+ );
6985
6991
  (0, import_react24.useEffect)(() => {
6986
- setRows(transformData(data.records));
6987
- }, [data.records]);
6988
- const handleGetColumns = () => {
6989
- let cols = [];
6992
+ setRows(transformData(data?.records));
6993
+ }, [data?.records, transformData]);
6994
+ const columns = (0, import_react24.useMemo)(() => {
6990
6995
  try {
6991
- cols = mergeFields?.filter((item) => {
6992
- 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);
6996
+ return mergeFields?.filter((item) => {
6997
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils17.domainHelper.matchDomains(
6998
+ data.context,
6999
+ item?.column_invisible
7000
+ ) : item?.invisible ? import_utils17.domainHelper.matchDomains(data.context, item?.invisible) : false);
6993
7001
  })?.map((field) => {
7002
+ const overridden = columnVisibility[field?.name];
6994
7003
  return {
6995
7004
  name: field?.name,
6996
- optional: field?.optional,
7005
+ optional: overridden ?? field?.optional,
6997
7006
  title: field?.type_co === "button" ? "" : field?.string,
6998
7007
  field: { ...field }
6999
7008
  };
7000
- });
7009
+ }) ?? [];
7001
7010
  } catch (error) {
7002
7011
  console.error("Error in useTable:", error);
7012
+ return [];
7003
7013
  }
7004
- return cols;
7005
- };
7006
- (0, import_react24.useEffect)(() => {
7007
- if (!columns) {
7008
- setColumns(handleGetColumns());
7009
- }
7010
- }, [data]);
7011
- const onToggleColumnOptional = (item) => {
7012
- const tempColumn = [...columns]?.map((val) => {
7013
- if (item?.name === val?.name) {
7014
- return {
7015
- ...val,
7016
- optional: item?.optional === "show" ? "hide" : "show"
7017
- };
7018
- }
7019
- return val;
7020
- });
7021
- setColumns(tempColumn);
7022
- };
7023
- (0, import_react24.useEffect)(() => {
7024
- if (data?.fields != null) {
7025
- setColumns(null);
7026
- }
7027
- return () => {
7028
- if (data?.fields != null) {
7029
- setColumns(null);
7030
- }
7031
- };
7032
- }, [data?.fields]);
7014
+ }, [mergeFields, data?.context, columnVisibility]);
7015
+ const onToggleColumnOptional = (0, import_react24.useCallback)((item) => {
7016
+ setColumnVisibility((prev) => ({
7017
+ ...prev,
7018
+ [item?.name]: item?.optional === "show" ? "hide" : "show"
7019
+ }));
7020
+ }, []);
7033
7021
  return {
7034
7022
  rows,
7035
7023
  columns,
7036
7024
  onToggleColumnOptional,
7037
- typeTable: data.typeTable
7025
+ typeTable: data?.typeTable
7038
7026
  };
7039
7027
  };
7040
7028
 
package/dist/index.mjs CHANGED
@@ -4583,7 +4583,7 @@ import { useTranslation } from "react-i18next";
4583
4583
  var useProfile = ({ service }) => {
4584
4584
  const { setUid, setLang, setUserInfo, env } = (0, provider_exports.useEnv)();
4585
4585
  const { useGetProfile: useGetProfile2 } = (0, provider_exports.useService)();
4586
- const getProfile = useGetProfile2();
4586
+ const getProfile = useGetProfile2("service", service);
4587
4587
  const { i18n: i18n2 } = useTranslation();
4588
4588
  const userInfoQuery = useQuery2({
4589
4589
  queryKey: ["userInfo"],
@@ -7031,96 +7031,84 @@ var tableHeadController = (props) => {
7031
7031
  };
7032
7032
 
7033
7033
  // src/widget/advance/table/table-view/controller.ts
7034
- import { useEffect as useEffect13, useState as useState12 } from "react";
7034
+ import { useCallback as useCallback5, useEffect as useEffect13, useMemo as useMemo11, useState as useState12 } from "react";
7035
7035
  import { domainHelper } from "@fctc/interface-logic/utils";
7036
7036
  var tableController = ({ data }) => {
7037
- const [rows, setRows] = useState12(null);
7038
- const [columns, setColumns] = useState12(null);
7039
- const dataModelFields = data?.fields?.map((field) => {
7040
- return {
7037
+ const [rows, setRows] = useState12([]);
7038
+ const [columnVisibility, setColumnVisibility] = useState12({});
7039
+ const dataModelFields = useMemo11(() => {
7040
+ return data?.fields?.map((field) => ({
7041
7041
  ...data.dataModel?.[field?.name],
7042
7042
  ...field,
7043
7043
  string: field?.string || data.dataModel?.[field?.name]?.string
7044
- };
7045
- });
7046
- const mergeFields = mergeButtons(dataModelFields);
7047
- const transformData = (dataList) => {
7048
- if (!dataList) return;
7049
- return dataList?.map((item) => {
7050
- const transformedItem = { ...item };
7051
- Object.keys(item).forEach((field) => {
7052
- if (field !== "__domain") {
7053
- if (item[field] && typeof item[field] === "object" && item[field].display_name) {
7054
- transformedItem[field] = item[field];
7055
- } else if (Array.isArray(item[field]) && item[field].length > 0) {
7056
- if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
7057
- transformedItem["string"] = item[field]?.[1];
7044
+ })) ?? [];
7045
+ }, [data?.fields, data?.dataModel]);
7046
+ const mergeFields = useMemo11(
7047
+ () => mergeButtons(dataModelFields),
7048
+ [dataModelFields]
7049
+ );
7050
+ const transformData = useCallback5(
7051
+ (dataList) => {
7052
+ if (!dataList) return [];
7053
+ return dataList.map((item) => {
7054
+ const transformedItem = { ...item };
7055
+ Object.keys(item).forEach((field) => {
7056
+ if (field !== "__domain") {
7057
+ if (item[field] && typeof item[field] === "object" && item[field].display_name) {
7058
+ transformedItem[field] = item[field];
7059
+ } else if (Array.isArray(item[field]) && item[field].length > 0) {
7060
+ if (data.typeTable === "group" && item[field]?.length === 2 && typeof item[field]?.[1] === "string") {
7061
+ transformedItem["string"] = item[field]?.[1];
7062
+ }
7063
+ transformedItem[field] = item[field];
7058
7064
  }
7059
- transformedItem[field] = item[field];
7060
7065
  }
7061
- }
7066
+ });
7067
+ return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
7062
7068
  });
7063
- return item.display_name ? { ...transformedItem, item: item.display_name } : transformedItem;
7064
- });
7065
- };
7069
+ },
7070
+ [data?.typeTable]
7071
+ );
7066
7072
  useEffect13(() => {
7067
- setRows(transformData(data.records));
7068
- }, [data.records]);
7069
- const handleGetColumns = () => {
7070
- let cols = [];
7073
+ setRows(transformData(data?.records));
7074
+ }, [data?.records, transformData]);
7075
+ const columns = useMemo11(() => {
7071
7076
  try {
7072
- cols = mergeFields?.filter((item) => {
7073
- 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);
7077
+ return mergeFields?.filter((item) => {
7078
+ return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? domainHelper.matchDomains(
7079
+ data.context,
7080
+ item?.column_invisible
7081
+ ) : item?.invisible ? domainHelper.matchDomains(data.context, item?.invisible) : false);
7074
7082
  })?.map((field) => {
7083
+ const overridden = columnVisibility[field?.name];
7075
7084
  return {
7076
7085
  name: field?.name,
7077
- optional: field?.optional,
7086
+ optional: overridden ?? field?.optional,
7078
7087
  title: field?.type_co === "button" ? "" : field?.string,
7079
7088
  field: { ...field }
7080
7089
  };
7081
- });
7090
+ }) ?? [];
7082
7091
  } catch (error) {
7083
7092
  console.error("Error in useTable:", error);
7093
+ return [];
7084
7094
  }
7085
- return cols;
7086
- };
7087
- useEffect13(() => {
7088
- if (!columns) {
7089
- setColumns(handleGetColumns());
7090
- }
7091
- }, [data]);
7092
- const onToggleColumnOptional = (item) => {
7093
- const tempColumn = [...columns]?.map((val) => {
7094
- if (item?.name === val?.name) {
7095
- return {
7096
- ...val,
7097
- optional: item?.optional === "show" ? "hide" : "show"
7098
- };
7099
- }
7100
- return val;
7101
- });
7102
- setColumns(tempColumn);
7103
- };
7104
- useEffect13(() => {
7105
- if (data?.fields != null) {
7106
- setColumns(null);
7107
- }
7108
- return () => {
7109
- if (data?.fields != null) {
7110
- setColumns(null);
7111
- }
7112
- };
7113
- }, [data?.fields]);
7095
+ }, [mergeFields, data?.context, columnVisibility]);
7096
+ const onToggleColumnOptional = useCallback5((item) => {
7097
+ setColumnVisibility((prev) => ({
7098
+ ...prev,
7099
+ [item?.name]: item?.optional === "show" ? "hide" : "show"
7100
+ }));
7101
+ }, []);
7114
7102
  return {
7115
7103
  rows,
7116
7104
  columns,
7117
7105
  onToggleColumnOptional,
7118
- typeTable: data.typeTable
7106
+ typeTable: data?.typeTable
7119
7107
  };
7120
7108
  };
7121
7109
 
7122
7110
  // src/widget/advance/table/table-group/controller.ts
7123
- import { useEffect as useEffect14, useMemo as useMemo11, useState as useState13 } from "react";
7111
+ import { useEffect as useEffect14, useMemo as useMemo12, useState as useState13 } from "react";
7124
7112
  import { useAppSelector as useAppSelector2, selectList } from "@fctc/interface-logic/store";
7125
7113
  var tableGroupController = (props) => {
7126
7114
  const { env } = (0, provider_exports.useEnv)();
@@ -7145,7 +7133,7 @@ var tableGroupController = (props) => {
7145
7133
  fromEnd: 1
7146
7134
  });
7147
7135
  const domain = row?.__domain;
7148
- const processedData = useMemo11(() => {
7136
+ const processedData = useMemo12(() => {
7149
7137
  const calculateColSpanEmpty = () => {
7150
7138
  const startIndex = columns.findIndex(
7151
7139
  (col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
@@ -7160,7 +7148,7 @@ var tableGroupController = (props) => {
7160
7148
  };
7161
7149
  return calculateColSpanEmpty();
7162
7150
  }, [columns, row]);
7163
- const shouldFetchData = useMemo11(() => {
7151
+ const shouldFetchData = useMemo12(() => {
7164
7152
  return !!isShowGroup;
7165
7153
  }, [isShowGroup]);
7166
7154
  const enabled = shouldFetchData && !!processedData;
@@ -7262,7 +7250,7 @@ import {
7262
7250
  evalJSONDomain as evalJSONDomain6,
7263
7251
  validateAndParseDate
7264
7252
  } from "@fctc/interface-logic/utils";
7265
- import { useCallback as useCallback5, useEffect as useEffect15, useState as useState14 } from "react";
7253
+ import { useCallback as useCallback6, useEffect as useEffect15, useState as useState14 } from "react";
7266
7254
  var searchController = ({
7267
7255
  viewData,
7268
7256
  model,
@@ -7405,7 +7393,7 @@ var searchController = ({
7405
7393
  return [...domain2];
7406
7394
  }
7407
7395
  };
7408
- const setTagSearch = useCallback5(
7396
+ const setTagSearch = useCallback6(
7409
7397
  (updatedMap) => {
7410
7398
  if (!updatedMap) return;
7411
7399
  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.4.1",
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.4",
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.3",
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.4",
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
+ }