@fctc/widget-logic 2.4.5 → 2.4.7
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 +37 -33
- package/dist/index.mjs +23 -19
- package/dist/widget.d.mts +6 -6
- package/dist/widget.d.ts +6 -6
- package/dist/widget.js +35 -31
- package/dist/widget.mjs +21 -17
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -4908,7 +4908,7 @@ var useListData = ({
|
|
|
4908
4908
|
const [mode, setMode] = (0, import_react14.useState)("month");
|
|
4909
4909
|
const [type, setType] = (0, import_react14.useState)("list");
|
|
4910
4910
|
const [currentDate, setCurrentDate] = (0, import_react14.useState)(/* @__PURE__ */ new Date());
|
|
4911
|
-
const [selectedRowKeys,
|
|
4911
|
+
const [selectedRowKeys, setSelectedRowKeys2] = (0, import_react14.useState)([]);
|
|
4912
4912
|
const [debouncedPage] = useDebounce(page, 500);
|
|
4913
4913
|
const [debouncedDomain] = useDebounce(domain, 500);
|
|
4914
4914
|
const { specification } = useGetSpecification({
|
|
@@ -4976,7 +4976,7 @@ var useListData = ({
|
|
|
4976
4976
|
setPageLimit,
|
|
4977
4977
|
setGroupByList,
|
|
4978
4978
|
setCurrentDate,
|
|
4979
|
-
setSelectedRowKeys:
|
|
4979
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
4980
4980
|
}
|
|
4981
4981
|
};
|
|
4982
4982
|
};
|
|
@@ -5489,7 +5489,7 @@ var many2manyFieldController = (props) => {
|
|
|
5489
5489
|
context,
|
|
5490
5490
|
options,
|
|
5491
5491
|
tab,
|
|
5492
|
-
setSelectedRowKeys:
|
|
5492
|
+
setSelectedRowKeys: setSelectedRowKeys2,
|
|
5493
5493
|
groupByDomain,
|
|
5494
5494
|
enabled: enabledCallAPI,
|
|
5495
5495
|
actionData
|
|
@@ -5581,7 +5581,7 @@ var many2manyFieldController = (props) => {
|
|
|
5581
5581
|
}
|
|
5582
5582
|
return () => {
|
|
5583
5583
|
setPage(0);
|
|
5584
|
-
|
|
5584
|
+
setSelectedRowKeys2([]);
|
|
5585
5585
|
setDomainMany2Many(null);
|
|
5586
5586
|
};
|
|
5587
5587
|
}, [viewResponse]);
|
|
@@ -6873,11 +6873,16 @@ var binaryFieldController = (props) => {
|
|
|
6873
6873
|
};
|
|
6874
6874
|
|
|
6875
6875
|
// src/widget/advance/table/table-head/controller.ts
|
|
6876
|
-
var import_store2 = require("@fctc/interface-logic/store");
|
|
6877
6876
|
var import_react23 = require("react");
|
|
6878
6877
|
var tableHeadController = (props) => {
|
|
6879
|
-
const {
|
|
6880
|
-
|
|
6878
|
+
const {
|
|
6879
|
+
typeTable,
|
|
6880
|
+
rows,
|
|
6881
|
+
tableRef,
|
|
6882
|
+
groupByList,
|
|
6883
|
+
selectedRowKeys,
|
|
6884
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
6885
|
+
} = props;
|
|
6881
6886
|
const { rowIds: recordIds } = useGetRowIds(tableRef);
|
|
6882
6887
|
const selectedRowKeysRef = (0, import_react23.useRef)(recordIds);
|
|
6883
6888
|
const isGroupTable = typeTable === "group";
|
|
@@ -6903,27 +6908,27 @@ var tableHeadController = (props) => {
|
|
|
6903
6908
|
const handleCheckBoxAll = (event) => {
|
|
6904
6909
|
if (event?.target?.checked && typeTable === "list") {
|
|
6905
6910
|
const allRowKeys = Array.isArray(rows) ? rows.map((record) => record?.id) : [];
|
|
6906
|
-
|
|
6911
|
+
setSelectedRowKeys2(allRowKeys);
|
|
6907
6912
|
} else if (event?.target?.checked && typeTable === "group") {
|
|
6908
6913
|
const rowsIDs = document.querySelectorAll("tr[data-row-id]");
|
|
6909
6914
|
const ids = Array.from(rowsIDs)?.map(
|
|
6910
6915
|
(row) => Number(row?.getAttribute("data-row-id"))
|
|
6911
6916
|
);
|
|
6912
6917
|
if (ids?.length > 0) {
|
|
6913
|
-
|
|
6918
|
+
setSelectedRowKeys2(ids);
|
|
6914
6919
|
} else {
|
|
6915
6920
|
const sum = countSum(
|
|
6916
6921
|
rows,
|
|
6917
6922
|
typeof groupByList === "object" ? groupByList?.contexts?.[0]?.group_by : void 0
|
|
6918
6923
|
);
|
|
6919
6924
|
const keys = Array.from({ length: sum }, (_) => void 0);
|
|
6920
|
-
|
|
6925
|
+
setSelectedRowKeys2(keys);
|
|
6921
6926
|
}
|
|
6922
6927
|
if (selectedRowKeysRef) {
|
|
6923
6928
|
selectedRowKeysRef.current = [];
|
|
6924
6929
|
}
|
|
6925
6930
|
} else {
|
|
6926
|
-
|
|
6931
|
+
setSelectedRowKeys2([]);
|
|
6927
6932
|
}
|
|
6928
6933
|
};
|
|
6929
6934
|
return {
|
|
@@ -6935,7 +6940,7 @@ var tableHeadController = (props) => {
|
|
|
6935
6940
|
|
|
6936
6941
|
// src/widget/advance/table/table-view/controller.ts
|
|
6937
6942
|
var import_react24 = require("react");
|
|
6938
|
-
var
|
|
6943
|
+
var import_utils16 = require("@fctc/interface-logic/utils");
|
|
6939
6944
|
var tableController = ({ data }) => {
|
|
6940
6945
|
const [rows, setRows] = (0, import_react24.useState)(null);
|
|
6941
6946
|
const [columns, setColumns] = (0, import_react24.useState)(null);
|
|
@@ -6973,7 +6978,7 @@ var tableController = ({ data }) => {
|
|
|
6973
6978
|
let cols = [];
|
|
6974
6979
|
try {
|
|
6975
6980
|
cols = mergeFields?.filter((item) => {
|
|
6976
|
-
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ?
|
|
6981
|
+
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils16.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_utils16.domainHelper.matchDomains(data.context, item?.invisible) : false);
|
|
6977
6982
|
})?.map((field) => {
|
|
6978
6983
|
return {
|
|
6979
6984
|
name: field?.name,
|
|
@@ -7024,7 +7029,7 @@ var tableController = ({ data }) => {
|
|
|
7024
7029
|
|
|
7025
7030
|
// src/widget/advance/table/table-group/controller.ts
|
|
7026
7031
|
var import_react25 = require("react");
|
|
7027
|
-
var
|
|
7032
|
+
var import_store2 = require("@fctc/interface-logic/store");
|
|
7028
7033
|
var tableGroupController = (props) => {
|
|
7029
7034
|
const { env } = (0, provider_exports.useEnv)();
|
|
7030
7035
|
const { useGetListData: useGetListData2 } = (0, provider_exports.useService)();
|
|
@@ -7038,10 +7043,10 @@ var tableGroupController = (props) => {
|
|
|
7038
7043
|
context,
|
|
7039
7044
|
checkedAll,
|
|
7040
7045
|
groupByList,
|
|
7041
|
-
setSelectedRowKeys:
|
|
7046
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
7042
7047
|
} = props;
|
|
7043
7048
|
const [pageGroup, setPageGroup] = (0, import_react25.useState)(0);
|
|
7044
|
-
const { selectedRowKeys } = (0,
|
|
7049
|
+
const { selectedRowKeys } = (0, import_store2.useAppSelector)(import_store2.selectList);
|
|
7045
7050
|
const [isShowGroup, setIsShowGroup] = (0, import_react25.useState)(false);
|
|
7046
7051
|
const [colEmptyGroup, setColEmptyGroup] = (0, import_react25.useState)({
|
|
7047
7052
|
fromStart: 1,
|
|
@@ -7120,15 +7125,14 @@ var tableGroupController = (props) => {
|
|
|
7120
7125
|
const filteredIds = selectedRowKeys.filter(
|
|
7121
7126
|
(id) => !ids.includes(id)
|
|
7122
7127
|
);
|
|
7123
|
-
|
|
7128
|
+
setSelectedRowKeys2(filteredIds);
|
|
7124
7129
|
} else if (!isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && checkedAll && !allIdsNull) {
|
|
7125
7130
|
const clonedKeys = [...selectedRowKeys];
|
|
7126
|
-
|
|
7127
|
-
setTimeout(() =>
|
|
7131
|
+
setSelectedRowKeys2([...clonedKeys, -1]);
|
|
7132
|
+
setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
|
|
7128
7133
|
} else if (isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && !checkedAll && !allIdsNull) {
|
|
7129
|
-
console.log("abc");
|
|
7130
7134
|
const filteredKeys = selectedRowKeys.filter((id) => id > -1);
|
|
7131
|
-
|
|
7135
|
+
setSelectedRowKeys2(filteredKeys);
|
|
7132
7136
|
}
|
|
7133
7137
|
toggleShowGroup();
|
|
7134
7138
|
};
|
|
@@ -7137,8 +7141,8 @@ var tableGroupController = (props) => {
|
|
|
7137
7141
|
return;
|
|
7138
7142
|
}
|
|
7139
7143
|
const clonedKeys = [...selectedRowKeys];
|
|
7140
|
-
|
|
7141
|
-
setTimeout(() =>
|
|
7144
|
+
setSelectedRowKeys2([...clonedKeys, -1]);
|
|
7145
|
+
setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
|
|
7142
7146
|
}, [isDataGroupFetched]);
|
|
7143
7147
|
return {
|
|
7144
7148
|
onExpandChildGroup,
|
|
@@ -7158,7 +7162,7 @@ var tableGroupController = (props) => {
|
|
|
7158
7162
|
|
|
7159
7163
|
// src/widget/advance/search/controller.ts
|
|
7160
7164
|
var import_constants3 = require("@fctc/interface-logic/constants");
|
|
7161
|
-
var
|
|
7165
|
+
var import_utils18 = require("@fctc/interface-logic/utils");
|
|
7162
7166
|
var import_moment2 = __toESM(require_moment());
|
|
7163
7167
|
var import_react26 = require("react");
|
|
7164
7168
|
var searchController = ({
|
|
@@ -7175,9 +7179,9 @@ var searchController = ({
|
|
|
7175
7179
|
const [selectedTags, setSelectedTags] = (0, import_react26.useState)(null);
|
|
7176
7180
|
const [searchString, setSearchString] = (0, import_react26.useState)("");
|
|
7177
7181
|
const [searchMap, setSearchMap] = (0, import_react26.useState)({});
|
|
7178
|
-
const actionContext = typeof context === "string" ? (0,
|
|
7182
|
+
const actionContext = typeof context === "string" ? (0, import_utils18.evalJSONContext)(context) : context;
|
|
7179
7183
|
const contextSearch = { ...env.context, ...actionContext };
|
|
7180
|
-
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0,
|
|
7184
|
+
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils18.evalJSONDomain)(domain, contextSearch) : [];
|
|
7181
7185
|
const clearSearch = () => {
|
|
7182
7186
|
setFilterBy([]);
|
|
7183
7187
|
setGroupBy([]);
|
|
@@ -7192,7 +7196,7 @@ var searchController = ({
|
|
|
7192
7196
|
const dataModel = viewData?.models?.[model];
|
|
7193
7197
|
const searchViews = viewData?.views?.search;
|
|
7194
7198
|
const searchByItems = searchViews?.search_by?.filter(
|
|
7195
|
-
(item) => !
|
|
7199
|
+
(item) => !import_utils18.domainHelper.matchDomains(contextSearch, item.invisible)
|
|
7196
7200
|
)?.map(
|
|
7197
7201
|
({ string, name, filter_domain, operator, widget }, index) => ({
|
|
7198
7202
|
dataIndex: index,
|
|
@@ -7205,10 +7209,10 @@ var searchController = ({
|
|
|
7205
7209
|
})
|
|
7206
7210
|
);
|
|
7207
7211
|
const filterByItems = searchViews?.filter_by.filter((item) => {
|
|
7208
|
-
return !
|
|
7212
|
+
return !import_utils18.domainHelper.matchDomains(contextSearch, item?.invisible);
|
|
7209
7213
|
})?.map((item) => ({ ...item, active: false }));
|
|
7210
7214
|
const groupByItems = searchViews?.group_by.filter(
|
|
7211
|
-
(item) => !
|
|
7215
|
+
(item) => !import_utils18.domainHelper.matchDomains(contextSearch, item?.invisible)
|
|
7212
7216
|
).map((item) => ({
|
|
7213
7217
|
...item,
|
|
7214
7218
|
string: item.string ?? viewData?.models?.[model]?.[item?.name?.split("group_by_")?.[1]]?.string
|
|
@@ -7285,14 +7289,14 @@ var searchController = ({
|
|
|
7285
7289
|
}
|
|
7286
7290
|
let valueDomainItem = value?.value;
|
|
7287
7291
|
if (value?.modelType === "date") {
|
|
7288
|
-
valueDomainItem = (0,
|
|
7292
|
+
valueDomainItem = (0, import_utils18.validateAndParseDate)(value?.value);
|
|
7289
7293
|
} else if (value?.modelType === "datetime") {
|
|
7290
7294
|
if (value?.operator === "<=" || value?.operator === "<") {
|
|
7291
|
-
const parsedDate = (0,
|
|
7295
|
+
const parsedDate = (0, import_utils18.validateAndParseDate)(value?.value, true);
|
|
7292
7296
|
const hasTime = (0, import_moment2.default)(value?.value).format("HH:mm:ss") !== "00:00:00";
|
|
7293
7297
|
valueDomainItem = hasTime ? (0, import_moment2.default)(parsedDate).format("YYYY-MM-DD HH:mm:ss") : (0, import_moment2.default)(parsedDate).add(1, "day").subtract(1, "second").format("YYYY-MM-DD HH:mm:ss");
|
|
7294
7298
|
} else {
|
|
7295
|
-
valueDomainItem = (0,
|
|
7299
|
+
valueDomainItem = (0, import_utils18.validateAndParseDate)(value?.value, true);
|
|
7296
7300
|
}
|
|
7297
7301
|
}
|
|
7298
7302
|
const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
|
|
@@ -7371,7 +7375,7 @@ var searchController = ({
|
|
|
7371
7375
|
}, [searchMap]);
|
|
7372
7376
|
const handleAddTagSearch = (tag) => {
|
|
7373
7377
|
const { domain: domain2, groupIndex, value, type, context: context2, dataIndex } = tag;
|
|
7374
|
-
const domainFormat = new
|
|
7378
|
+
const domainFormat = new import_utils18.domainHelper.Domain(domain2);
|
|
7375
7379
|
if (type === import_constants3.SearchType.FILTER) {
|
|
7376
7380
|
addSearchItems(`${import_constants3.SearchType.FILTER}_${groupIndex}`, {
|
|
7377
7381
|
...tag,
|
package/dist/index.mjs
CHANGED
|
@@ -4987,7 +4987,7 @@ var useListData = ({
|
|
|
4987
4987
|
const [mode, setMode] = useState5("month");
|
|
4988
4988
|
const [type, setType] = useState5("list");
|
|
4989
4989
|
const [currentDate, setCurrentDate] = useState5(/* @__PURE__ */ new Date());
|
|
4990
|
-
const [selectedRowKeys,
|
|
4990
|
+
const [selectedRowKeys, setSelectedRowKeys2] = useState5([]);
|
|
4991
4991
|
const [debouncedPage] = useDebounce(page, 500);
|
|
4992
4992
|
const [debouncedDomain] = useDebounce(domain, 500);
|
|
4993
4993
|
const { specification } = useGetSpecification({
|
|
@@ -5055,7 +5055,7 @@ var useListData = ({
|
|
|
5055
5055
|
setPageLimit,
|
|
5056
5056
|
setGroupByList,
|
|
5057
5057
|
setCurrentDate,
|
|
5058
|
-
setSelectedRowKeys:
|
|
5058
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
5059
5059
|
}
|
|
5060
5060
|
};
|
|
5061
5061
|
};
|
|
@@ -5574,7 +5574,7 @@ var many2manyFieldController = (props) => {
|
|
|
5574
5574
|
context,
|
|
5575
5575
|
options,
|
|
5576
5576
|
tab,
|
|
5577
|
-
setSelectedRowKeys:
|
|
5577
|
+
setSelectedRowKeys: setSelectedRowKeys2,
|
|
5578
5578
|
groupByDomain,
|
|
5579
5579
|
enabled: enabledCallAPI,
|
|
5580
5580
|
actionData
|
|
@@ -5666,7 +5666,7 @@ var many2manyFieldController = (props) => {
|
|
|
5666
5666
|
}
|
|
5667
5667
|
return () => {
|
|
5668
5668
|
setPage(0);
|
|
5669
|
-
|
|
5669
|
+
setSelectedRowKeys2([]);
|
|
5670
5670
|
setDomainMany2Many(null);
|
|
5671
5671
|
};
|
|
5672
5672
|
}, [viewResponse]);
|
|
@@ -6958,11 +6958,16 @@ var binaryFieldController = (props) => {
|
|
|
6958
6958
|
};
|
|
6959
6959
|
|
|
6960
6960
|
// src/widget/advance/table/table-head/controller.ts
|
|
6961
|
-
import { useAppDispatch, setSelectedRowKeys } from "@fctc/interface-logic/store";
|
|
6962
6961
|
import { useMemo as useMemo11, useRef as useRef5 } from "react";
|
|
6963
6962
|
var tableHeadController = (props) => {
|
|
6964
|
-
const {
|
|
6965
|
-
|
|
6963
|
+
const {
|
|
6964
|
+
typeTable,
|
|
6965
|
+
rows,
|
|
6966
|
+
tableRef,
|
|
6967
|
+
groupByList,
|
|
6968
|
+
selectedRowKeys,
|
|
6969
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
6970
|
+
} = props;
|
|
6966
6971
|
const { rowIds: recordIds } = useGetRowIds(tableRef);
|
|
6967
6972
|
const selectedRowKeysRef = useRef5(recordIds);
|
|
6968
6973
|
const isGroupTable = typeTable === "group";
|
|
@@ -6988,27 +6993,27 @@ var tableHeadController = (props) => {
|
|
|
6988
6993
|
const handleCheckBoxAll = (event) => {
|
|
6989
6994
|
if (event?.target?.checked && typeTable === "list") {
|
|
6990
6995
|
const allRowKeys = Array.isArray(rows) ? rows.map((record) => record?.id) : [];
|
|
6991
|
-
|
|
6996
|
+
setSelectedRowKeys2(allRowKeys);
|
|
6992
6997
|
} else if (event?.target?.checked && typeTable === "group") {
|
|
6993
6998
|
const rowsIDs = document.querySelectorAll("tr[data-row-id]");
|
|
6994
6999
|
const ids = Array.from(rowsIDs)?.map(
|
|
6995
7000
|
(row) => Number(row?.getAttribute("data-row-id"))
|
|
6996
7001
|
);
|
|
6997
7002
|
if (ids?.length > 0) {
|
|
6998
|
-
|
|
7003
|
+
setSelectedRowKeys2(ids);
|
|
6999
7004
|
} else {
|
|
7000
7005
|
const sum = countSum(
|
|
7001
7006
|
rows,
|
|
7002
7007
|
typeof groupByList === "object" ? groupByList?.contexts?.[0]?.group_by : void 0
|
|
7003
7008
|
);
|
|
7004
7009
|
const keys = Array.from({ length: sum }, (_) => void 0);
|
|
7005
|
-
|
|
7010
|
+
setSelectedRowKeys2(keys);
|
|
7006
7011
|
}
|
|
7007
7012
|
if (selectedRowKeysRef) {
|
|
7008
7013
|
selectedRowKeysRef.current = [];
|
|
7009
7014
|
}
|
|
7010
7015
|
} else {
|
|
7011
|
-
|
|
7016
|
+
setSelectedRowKeys2([]);
|
|
7012
7017
|
}
|
|
7013
7018
|
};
|
|
7014
7019
|
return {
|
|
@@ -7126,7 +7131,7 @@ var tableGroupController = (props) => {
|
|
|
7126
7131
|
context,
|
|
7127
7132
|
checkedAll,
|
|
7128
7133
|
groupByList,
|
|
7129
|
-
setSelectedRowKeys:
|
|
7134
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
7130
7135
|
} = props;
|
|
7131
7136
|
const [pageGroup, setPageGroup] = useState14(0);
|
|
7132
7137
|
const { selectedRowKeys } = useAppSelector2(selectList);
|
|
@@ -7208,15 +7213,14 @@ var tableGroupController = (props) => {
|
|
|
7208
7213
|
const filteredIds = selectedRowKeys.filter(
|
|
7209
7214
|
(id) => !ids.includes(id)
|
|
7210
7215
|
);
|
|
7211
|
-
|
|
7216
|
+
setSelectedRowKeys2(filteredIds);
|
|
7212
7217
|
} else if (!isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && checkedAll && !allIdsNull) {
|
|
7213
7218
|
const clonedKeys = [...selectedRowKeys];
|
|
7214
|
-
|
|
7215
|
-
setTimeout(() =>
|
|
7219
|
+
setSelectedRowKeys2([...clonedKeys, -1]);
|
|
7220
|
+
setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
|
|
7216
7221
|
} else if (isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && !checkedAll && !allIdsNull) {
|
|
7217
|
-
console.log("abc");
|
|
7218
7222
|
const filteredKeys = selectedRowKeys.filter((id) => id > -1);
|
|
7219
|
-
|
|
7223
|
+
setSelectedRowKeys2(filteredKeys);
|
|
7220
7224
|
}
|
|
7221
7225
|
toggleShowGroup();
|
|
7222
7226
|
};
|
|
@@ -7225,8 +7229,8 @@ var tableGroupController = (props) => {
|
|
|
7225
7229
|
return;
|
|
7226
7230
|
}
|
|
7227
7231
|
const clonedKeys = [...selectedRowKeys];
|
|
7228
|
-
|
|
7229
|
-
setTimeout(() =>
|
|
7232
|
+
setSelectedRowKeys2([...clonedKeys, -1]);
|
|
7233
|
+
setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
|
|
7230
7234
|
}, [isDataGroupFetched]);
|
|
7231
7235
|
return {
|
|
7232
7236
|
onExpandChildGroup,
|
package/dist/widget.d.mts
CHANGED
|
@@ -200,6 +200,12 @@ declare const binaryFieldController: (props: IInputFieldProps) => {
|
|
|
200
200
|
getImageBase64WithMimeType: (base64: any) => string | null;
|
|
201
201
|
};
|
|
202
202
|
|
|
203
|
+
declare const tableHeadController: (props: any) => {
|
|
204
|
+
handleCheckBoxAll: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
205
|
+
checkedAll: any;
|
|
206
|
+
selectedRowKeysRef: react.MutableRefObject<any[]>;
|
|
207
|
+
};
|
|
208
|
+
|
|
203
209
|
interface ITableHeadProps {
|
|
204
210
|
typeTable: string;
|
|
205
211
|
rows: any[];
|
|
@@ -208,12 +214,6 @@ interface ITableHeadProps {
|
|
|
208
214
|
selectedRowKeys: any;
|
|
209
215
|
}
|
|
210
216
|
|
|
211
|
-
declare const tableHeadController: (props: ITableHeadProps) => {
|
|
212
|
-
handleCheckBoxAll: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
213
|
-
checkedAll: any;
|
|
214
|
-
selectedRowKeysRef: react.MutableRefObject<any[]>;
|
|
215
|
-
};
|
|
216
|
-
|
|
217
217
|
interface ITableProps {
|
|
218
218
|
data: {
|
|
219
219
|
fields: any[];
|
package/dist/widget.d.ts
CHANGED
|
@@ -200,6 +200,12 @@ declare const binaryFieldController: (props: IInputFieldProps) => {
|
|
|
200
200
|
getImageBase64WithMimeType: (base64: any) => string | null;
|
|
201
201
|
};
|
|
202
202
|
|
|
203
|
+
declare const tableHeadController: (props: any) => {
|
|
204
|
+
handleCheckBoxAll: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
205
|
+
checkedAll: any;
|
|
206
|
+
selectedRowKeysRef: react.MutableRefObject<any[]>;
|
|
207
|
+
};
|
|
208
|
+
|
|
203
209
|
interface ITableHeadProps {
|
|
204
210
|
typeTable: string;
|
|
205
211
|
rows: any[];
|
|
@@ -208,12 +214,6 @@ interface ITableHeadProps {
|
|
|
208
214
|
selectedRowKeys: any;
|
|
209
215
|
}
|
|
210
216
|
|
|
211
|
-
declare const tableHeadController: (props: ITableHeadProps) => {
|
|
212
|
-
handleCheckBoxAll: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
213
|
-
checkedAll: any;
|
|
214
|
-
selectedRowKeysRef: react.MutableRefObject<any[]>;
|
|
215
|
-
};
|
|
216
|
-
|
|
217
217
|
interface ITableProps {
|
|
218
218
|
data: {
|
|
219
219
|
fields: any[];
|
package/dist/widget.js
CHANGED
|
@@ -4644,7 +4644,7 @@ var many2manyFieldController = (props) => {
|
|
|
4644
4644
|
context,
|
|
4645
4645
|
options,
|
|
4646
4646
|
tab,
|
|
4647
|
-
setSelectedRowKeys:
|
|
4647
|
+
setSelectedRowKeys: setSelectedRowKeys2,
|
|
4648
4648
|
groupByDomain,
|
|
4649
4649
|
enabled: enabledCallAPI,
|
|
4650
4650
|
actionData
|
|
@@ -4736,7 +4736,7 @@ var many2manyFieldController = (props) => {
|
|
|
4736
4736
|
}
|
|
4737
4737
|
return () => {
|
|
4738
4738
|
setPage(0);
|
|
4739
|
-
|
|
4739
|
+
setSelectedRowKeys2([]);
|
|
4740
4740
|
setDomainMany2Many(null);
|
|
4741
4741
|
};
|
|
4742
4742
|
}, [viewResponse]);
|
|
@@ -6028,11 +6028,16 @@ var binaryFieldController = (props) => {
|
|
|
6028
6028
|
};
|
|
6029
6029
|
|
|
6030
6030
|
// src/widget/advance/table/table-head/controller.ts
|
|
6031
|
-
var import_store2 = require("@fctc/interface-logic/store");
|
|
6032
6031
|
var import_react23 = require("react");
|
|
6033
6032
|
var tableHeadController = (props) => {
|
|
6034
|
-
const {
|
|
6035
|
-
|
|
6033
|
+
const {
|
|
6034
|
+
typeTable,
|
|
6035
|
+
rows,
|
|
6036
|
+
tableRef,
|
|
6037
|
+
groupByList,
|
|
6038
|
+
selectedRowKeys,
|
|
6039
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
6040
|
+
} = props;
|
|
6036
6041
|
const { rowIds: recordIds } = useGetRowIds(tableRef);
|
|
6037
6042
|
const selectedRowKeysRef = (0, import_react23.useRef)(recordIds);
|
|
6038
6043
|
const isGroupTable = typeTable === "group";
|
|
@@ -6058,27 +6063,27 @@ var tableHeadController = (props) => {
|
|
|
6058
6063
|
const handleCheckBoxAll = (event) => {
|
|
6059
6064
|
if (event?.target?.checked && typeTable === "list") {
|
|
6060
6065
|
const allRowKeys = Array.isArray(rows) ? rows.map((record) => record?.id) : [];
|
|
6061
|
-
|
|
6066
|
+
setSelectedRowKeys2(allRowKeys);
|
|
6062
6067
|
} else if (event?.target?.checked && typeTable === "group") {
|
|
6063
6068
|
const rowsIDs = document.querySelectorAll("tr[data-row-id]");
|
|
6064
6069
|
const ids = Array.from(rowsIDs)?.map(
|
|
6065
6070
|
(row) => Number(row?.getAttribute("data-row-id"))
|
|
6066
6071
|
);
|
|
6067
6072
|
if (ids?.length > 0) {
|
|
6068
|
-
|
|
6073
|
+
setSelectedRowKeys2(ids);
|
|
6069
6074
|
} else {
|
|
6070
6075
|
const sum = countSum(
|
|
6071
6076
|
rows,
|
|
6072
6077
|
typeof groupByList === "object" ? groupByList?.contexts?.[0]?.group_by : void 0
|
|
6073
6078
|
);
|
|
6074
6079
|
const keys = Array.from({ length: sum }, (_) => void 0);
|
|
6075
|
-
|
|
6080
|
+
setSelectedRowKeys2(keys);
|
|
6076
6081
|
}
|
|
6077
6082
|
if (selectedRowKeysRef) {
|
|
6078
6083
|
selectedRowKeysRef.current = [];
|
|
6079
6084
|
}
|
|
6080
6085
|
} else {
|
|
6081
|
-
|
|
6086
|
+
setSelectedRowKeys2([]);
|
|
6082
6087
|
}
|
|
6083
6088
|
};
|
|
6084
6089
|
return {
|
|
@@ -6090,7 +6095,7 @@ var tableHeadController = (props) => {
|
|
|
6090
6095
|
|
|
6091
6096
|
// src/widget/advance/table/table-view/controller.ts
|
|
6092
6097
|
var import_react24 = require("react");
|
|
6093
|
-
var
|
|
6098
|
+
var import_utils16 = require("@fctc/interface-logic/utils");
|
|
6094
6099
|
var tableController = ({ data }) => {
|
|
6095
6100
|
const [rows, setRows] = (0, import_react24.useState)(null);
|
|
6096
6101
|
const [columns, setColumns] = (0, import_react24.useState)(null);
|
|
@@ -6128,7 +6133,7 @@ var tableController = ({ data }) => {
|
|
|
6128
6133
|
let cols = [];
|
|
6129
6134
|
try {
|
|
6130
6135
|
cols = mergeFields?.filter((item) => {
|
|
6131
|
-
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ?
|
|
6136
|
+
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils16.domainHelper.matchDomains(data.context, item?.column_invisible) : item?.invisible ? import_utils16.domainHelper.matchDomains(data.context, item?.invisible) : false);
|
|
6132
6137
|
})?.map((field) => {
|
|
6133
6138
|
return {
|
|
6134
6139
|
name: field?.name,
|
|
@@ -6179,7 +6184,7 @@ var tableController = ({ data }) => {
|
|
|
6179
6184
|
|
|
6180
6185
|
// src/widget/advance/table/table-group/controller.ts
|
|
6181
6186
|
var import_react25 = require("react");
|
|
6182
|
-
var
|
|
6187
|
+
var import_store2 = require("@fctc/interface-logic/store");
|
|
6183
6188
|
var tableGroupController = (props) => {
|
|
6184
6189
|
const { env } = (0, provider_exports.useEnv)();
|
|
6185
6190
|
const { useGetListData: useGetListData2 } = (0, provider_exports.useService)();
|
|
@@ -6193,10 +6198,10 @@ var tableGroupController = (props) => {
|
|
|
6193
6198
|
context,
|
|
6194
6199
|
checkedAll,
|
|
6195
6200
|
groupByList,
|
|
6196
|
-
setSelectedRowKeys:
|
|
6201
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
6197
6202
|
} = props;
|
|
6198
6203
|
const [pageGroup, setPageGroup] = (0, import_react25.useState)(0);
|
|
6199
|
-
const { selectedRowKeys } = (0,
|
|
6204
|
+
const { selectedRowKeys } = (0, import_store2.useAppSelector)(import_store2.selectList);
|
|
6200
6205
|
const [isShowGroup, setIsShowGroup] = (0, import_react25.useState)(false);
|
|
6201
6206
|
const [colEmptyGroup, setColEmptyGroup] = (0, import_react25.useState)({
|
|
6202
6207
|
fromStart: 1,
|
|
@@ -6275,15 +6280,14 @@ var tableGroupController = (props) => {
|
|
|
6275
6280
|
const filteredIds = selectedRowKeys.filter(
|
|
6276
6281
|
(id) => !ids.includes(id)
|
|
6277
6282
|
);
|
|
6278
|
-
|
|
6283
|
+
setSelectedRowKeys2(filteredIds);
|
|
6279
6284
|
} else if (!isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && checkedAll && !allIdsNull) {
|
|
6280
6285
|
const clonedKeys = [...selectedRowKeys];
|
|
6281
|
-
|
|
6282
|
-
setTimeout(() =>
|
|
6286
|
+
setSelectedRowKeys2([...clonedKeys, -1]);
|
|
6287
|
+
setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
|
|
6283
6288
|
} else if (isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && !checkedAll && !allIdsNull) {
|
|
6284
|
-
console.log("abc");
|
|
6285
6289
|
const filteredKeys = selectedRowKeys.filter((id) => id > -1);
|
|
6286
|
-
|
|
6290
|
+
setSelectedRowKeys2(filteredKeys);
|
|
6287
6291
|
}
|
|
6288
6292
|
toggleShowGroup();
|
|
6289
6293
|
};
|
|
@@ -6292,8 +6296,8 @@ var tableGroupController = (props) => {
|
|
|
6292
6296
|
return;
|
|
6293
6297
|
}
|
|
6294
6298
|
const clonedKeys = [...selectedRowKeys];
|
|
6295
|
-
|
|
6296
|
-
setTimeout(() =>
|
|
6299
|
+
setSelectedRowKeys2([...clonedKeys, -1]);
|
|
6300
|
+
setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
|
|
6297
6301
|
}, [isDataGroupFetched]);
|
|
6298
6302
|
return {
|
|
6299
6303
|
onExpandChildGroup,
|
|
@@ -6313,7 +6317,7 @@ var tableGroupController = (props) => {
|
|
|
6313
6317
|
|
|
6314
6318
|
// src/widget/advance/search/controller.ts
|
|
6315
6319
|
var import_constants3 = require("@fctc/interface-logic/constants");
|
|
6316
|
-
var
|
|
6320
|
+
var import_utils18 = require("@fctc/interface-logic/utils");
|
|
6317
6321
|
var import_moment2 = __toESM(require_moment());
|
|
6318
6322
|
var import_react26 = require("react");
|
|
6319
6323
|
var searchController = ({
|
|
@@ -6330,9 +6334,9 @@ var searchController = ({
|
|
|
6330
6334
|
const [selectedTags, setSelectedTags] = (0, import_react26.useState)(null);
|
|
6331
6335
|
const [searchString, setSearchString] = (0, import_react26.useState)("");
|
|
6332
6336
|
const [searchMap, setSearchMap] = (0, import_react26.useState)({});
|
|
6333
|
-
const actionContext = typeof context === "string" ? (0,
|
|
6337
|
+
const actionContext = typeof context === "string" ? (0, import_utils18.evalJSONContext)(context) : context;
|
|
6334
6338
|
const contextSearch = { ...env.context, ...actionContext };
|
|
6335
|
-
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0,
|
|
6339
|
+
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, import_utils18.evalJSONDomain)(domain, contextSearch) : [];
|
|
6336
6340
|
const clearSearch = () => {
|
|
6337
6341
|
setFilterBy([]);
|
|
6338
6342
|
setGroupBy([]);
|
|
@@ -6347,7 +6351,7 @@ var searchController = ({
|
|
|
6347
6351
|
const dataModel = viewData?.models?.[model];
|
|
6348
6352
|
const searchViews = viewData?.views?.search;
|
|
6349
6353
|
const searchByItems = searchViews?.search_by?.filter(
|
|
6350
|
-
(item) => !
|
|
6354
|
+
(item) => !import_utils18.domainHelper.matchDomains(contextSearch, item.invisible)
|
|
6351
6355
|
)?.map(
|
|
6352
6356
|
({ string, name, filter_domain, operator, widget }, index) => ({
|
|
6353
6357
|
dataIndex: index,
|
|
@@ -6360,10 +6364,10 @@ var searchController = ({
|
|
|
6360
6364
|
})
|
|
6361
6365
|
);
|
|
6362
6366
|
const filterByItems = searchViews?.filter_by.filter((item) => {
|
|
6363
|
-
return !
|
|
6367
|
+
return !import_utils18.domainHelper.matchDomains(contextSearch, item?.invisible);
|
|
6364
6368
|
})?.map((item) => ({ ...item, active: false }));
|
|
6365
6369
|
const groupByItems = searchViews?.group_by.filter(
|
|
6366
|
-
(item) => !
|
|
6370
|
+
(item) => !import_utils18.domainHelper.matchDomains(contextSearch, item?.invisible)
|
|
6367
6371
|
).map((item) => ({
|
|
6368
6372
|
...item,
|
|
6369
6373
|
string: item.string ?? viewData?.models?.[model]?.[item?.name?.split("group_by_")?.[1]]?.string
|
|
@@ -6440,14 +6444,14 @@ var searchController = ({
|
|
|
6440
6444
|
}
|
|
6441
6445
|
let valueDomainItem = value?.value;
|
|
6442
6446
|
if (value?.modelType === "date") {
|
|
6443
|
-
valueDomainItem = (0,
|
|
6447
|
+
valueDomainItem = (0, import_utils18.validateAndParseDate)(value?.value);
|
|
6444
6448
|
} else if (value?.modelType === "datetime") {
|
|
6445
6449
|
if (value?.operator === "<=" || value?.operator === "<") {
|
|
6446
|
-
const parsedDate = (0,
|
|
6450
|
+
const parsedDate = (0, import_utils18.validateAndParseDate)(value?.value, true);
|
|
6447
6451
|
const hasTime = (0, import_moment2.default)(value?.value).format("HH:mm:ss") !== "00:00:00";
|
|
6448
6452
|
valueDomainItem = hasTime ? (0, import_moment2.default)(parsedDate).format("YYYY-MM-DD HH:mm:ss") : (0, import_moment2.default)(parsedDate).add(1, "day").subtract(1, "second").format("YYYY-MM-DD HH:mm:ss");
|
|
6449
6453
|
} else {
|
|
6450
|
-
valueDomainItem = (0,
|
|
6454
|
+
valueDomainItem = (0, import_utils18.validateAndParseDate)(value?.value, true);
|
|
6451
6455
|
}
|
|
6452
6456
|
}
|
|
6453
6457
|
const operator = value?.modelType === "date" || value?.modelType === "datetime" || value?.modelType === "boolean" || value?.modelType === "integer" ? value?.operator ?? "=" : value.operator ?? "ilike";
|
|
@@ -6526,7 +6530,7 @@ var searchController = ({
|
|
|
6526
6530
|
}, [searchMap]);
|
|
6527
6531
|
const handleAddTagSearch = (tag) => {
|
|
6528
6532
|
const { domain: domain2, groupIndex, value, type, context: context2, dataIndex } = tag;
|
|
6529
|
-
const domainFormat = new
|
|
6533
|
+
const domainFormat = new import_utils18.domainHelper.Domain(domain2);
|
|
6530
6534
|
if (type === import_constants3.SearchType.FILTER) {
|
|
6531
6535
|
addSearchItems(`${import_constants3.SearchType.FILTER}_${groupIndex}`, {
|
|
6532
6536
|
...tag,
|
package/dist/widget.mjs
CHANGED
|
@@ -4706,7 +4706,7 @@ var many2manyFieldController = (props) => {
|
|
|
4706
4706
|
context,
|
|
4707
4707
|
options,
|
|
4708
4708
|
tab,
|
|
4709
|
-
setSelectedRowKeys:
|
|
4709
|
+
setSelectedRowKeys: setSelectedRowKeys2,
|
|
4710
4710
|
groupByDomain,
|
|
4711
4711
|
enabled: enabledCallAPI,
|
|
4712
4712
|
actionData
|
|
@@ -4798,7 +4798,7 @@ var many2manyFieldController = (props) => {
|
|
|
4798
4798
|
}
|
|
4799
4799
|
return () => {
|
|
4800
4800
|
setPage(0);
|
|
4801
|
-
|
|
4801
|
+
setSelectedRowKeys2([]);
|
|
4802
4802
|
setDomainMany2Many(null);
|
|
4803
4803
|
};
|
|
4804
4804
|
}, [viewResponse]);
|
|
@@ -6090,11 +6090,16 @@ var binaryFieldController = (props) => {
|
|
|
6090
6090
|
};
|
|
6091
6091
|
|
|
6092
6092
|
// src/widget/advance/table/table-head/controller.ts
|
|
6093
|
-
import { useAppDispatch, setSelectedRowKeys } from "@fctc/interface-logic/store";
|
|
6094
6093
|
import { useMemo as useMemo11, useRef as useRef5 } from "react";
|
|
6095
6094
|
var tableHeadController = (props) => {
|
|
6096
|
-
const {
|
|
6097
|
-
|
|
6095
|
+
const {
|
|
6096
|
+
typeTable,
|
|
6097
|
+
rows,
|
|
6098
|
+
tableRef,
|
|
6099
|
+
groupByList,
|
|
6100
|
+
selectedRowKeys,
|
|
6101
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
6102
|
+
} = props;
|
|
6098
6103
|
const { rowIds: recordIds } = useGetRowIds(tableRef);
|
|
6099
6104
|
const selectedRowKeysRef = useRef5(recordIds);
|
|
6100
6105
|
const isGroupTable = typeTable === "group";
|
|
@@ -6120,27 +6125,27 @@ var tableHeadController = (props) => {
|
|
|
6120
6125
|
const handleCheckBoxAll = (event) => {
|
|
6121
6126
|
if (event?.target?.checked && typeTable === "list") {
|
|
6122
6127
|
const allRowKeys = Array.isArray(rows) ? rows.map((record) => record?.id) : [];
|
|
6123
|
-
|
|
6128
|
+
setSelectedRowKeys2(allRowKeys);
|
|
6124
6129
|
} else if (event?.target?.checked && typeTable === "group") {
|
|
6125
6130
|
const rowsIDs = document.querySelectorAll("tr[data-row-id]");
|
|
6126
6131
|
const ids = Array.from(rowsIDs)?.map(
|
|
6127
6132
|
(row) => Number(row?.getAttribute("data-row-id"))
|
|
6128
6133
|
);
|
|
6129
6134
|
if (ids?.length > 0) {
|
|
6130
|
-
|
|
6135
|
+
setSelectedRowKeys2(ids);
|
|
6131
6136
|
} else {
|
|
6132
6137
|
const sum = countSum(
|
|
6133
6138
|
rows,
|
|
6134
6139
|
typeof groupByList === "object" ? groupByList?.contexts?.[0]?.group_by : void 0
|
|
6135
6140
|
);
|
|
6136
6141
|
const keys = Array.from({ length: sum }, (_) => void 0);
|
|
6137
|
-
|
|
6142
|
+
setSelectedRowKeys2(keys);
|
|
6138
6143
|
}
|
|
6139
6144
|
if (selectedRowKeysRef) {
|
|
6140
6145
|
selectedRowKeysRef.current = [];
|
|
6141
6146
|
}
|
|
6142
6147
|
} else {
|
|
6143
|
-
|
|
6148
|
+
setSelectedRowKeys2([]);
|
|
6144
6149
|
}
|
|
6145
6150
|
};
|
|
6146
6151
|
return {
|
|
@@ -6258,7 +6263,7 @@ var tableGroupController = (props) => {
|
|
|
6258
6263
|
context,
|
|
6259
6264
|
checkedAll,
|
|
6260
6265
|
groupByList,
|
|
6261
|
-
setSelectedRowKeys:
|
|
6266
|
+
setSelectedRowKeys: setSelectedRowKeys2
|
|
6262
6267
|
} = props;
|
|
6263
6268
|
const [pageGroup, setPageGroup] = useState14(0);
|
|
6264
6269
|
const { selectedRowKeys } = useAppSelector2(selectList);
|
|
@@ -6340,15 +6345,14 @@ var tableGroupController = (props) => {
|
|
|
6340
6345
|
const filteredIds = selectedRowKeys.filter(
|
|
6341
6346
|
(id) => !ids.includes(id)
|
|
6342
6347
|
);
|
|
6343
|
-
|
|
6348
|
+
setSelectedRowKeys2(filteredIds);
|
|
6344
6349
|
} else if (!isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && checkedAll && !allIdsNull) {
|
|
6345
6350
|
const clonedKeys = [...selectedRowKeys];
|
|
6346
|
-
|
|
6347
|
-
setTimeout(() =>
|
|
6351
|
+
setSelectedRowKeys2([...clonedKeys, -1]);
|
|
6352
|
+
setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
|
|
6348
6353
|
} else if (isShowGroup && selectedRowKeys?.length > 0 && typeTableGroup === "list" && !checkedAll && !allIdsNull) {
|
|
6349
|
-
console.log("abc");
|
|
6350
6354
|
const filteredKeys = selectedRowKeys.filter((id) => id > -1);
|
|
6351
|
-
|
|
6355
|
+
setSelectedRowKeys2(filteredKeys);
|
|
6352
6356
|
}
|
|
6353
6357
|
toggleShowGroup();
|
|
6354
6358
|
};
|
|
@@ -6357,8 +6361,8 @@ var tableGroupController = (props) => {
|
|
|
6357
6361
|
return;
|
|
6358
6362
|
}
|
|
6359
6363
|
const clonedKeys = [...selectedRowKeys];
|
|
6360
|
-
|
|
6361
|
-
setTimeout(() =>
|
|
6364
|
+
setSelectedRowKeys2([...clonedKeys, -1]);
|
|
6365
|
+
setTimeout(() => setSelectedRowKeys2(clonedKeys), 500);
|
|
6362
6366
|
}, [isDataGroupFetched]);
|
|
6363
6367
|
return {
|
|
6364
6368
|
onExpandChildGroup,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fctc/widget-logic",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.7",
|
|
4
4
|
"types": "dist/index.d.ts",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"test": "jest"
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"@fctc/interface-logic": "^2.4.
|
|
77
|
+
"@fctc/interface-logic": "^2.4.7",
|
|
78
78
|
"@headlessui/react": "^2.2.6",
|
|
79
79
|
"@tanstack/react-query": "^5.84.0",
|
|
80
80
|
"i18next": "^25.3.2",
|