@fctc/widget-logic 5.2.7 → 5.2.9
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 +8 -5
- package/dist/hooks.mjs +8 -5
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +121 -41
- package/dist/index.mjs +103 -23
- package/dist/widget.d.mts +22 -1
- package/dist/widget.d.ts +22 -1
- package/dist/widget.js +121 -41
- package/dist/widget.mjs +102 -23
- package/package.json +92 -92
package/dist/widget.js
CHANGED
|
@@ -4042,6 +4042,7 @@ __export(widget_exports, {
|
|
|
4042
4042
|
downLoadBinaryController: () => downLoadBinaryController,
|
|
4043
4043
|
downloadFileController: () => downloadFileController,
|
|
4044
4044
|
durationController: () => durationController,
|
|
4045
|
+
many2manyBinaryController: () => many2manyBinaryController,
|
|
4045
4046
|
many2manyFieldController: () => many2manyFieldController,
|
|
4046
4047
|
many2manyTagsController: () => many2manyTagsController,
|
|
4047
4048
|
many2oneButtonController: () => many2oneButtonController,
|
|
@@ -4147,6 +4148,7 @@ var languages = [
|
|
|
4147
4148
|
{ id: "vi_VN", name: "VIE" },
|
|
4148
4149
|
{ id: "en_US", name: "ENG" }
|
|
4149
4150
|
];
|
|
4151
|
+
var isBlobUrl = (url) => url.startsWith("blob:");
|
|
4150
4152
|
|
|
4151
4153
|
// src/utils/function.ts
|
|
4152
4154
|
var import_react3 = require("react");
|
|
@@ -4375,11 +4377,14 @@ var useGetSpecification = ({
|
|
|
4375
4377
|
viewData,
|
|
4376
4378
|
fields
|
|
4377
4379
|
}) => {
|
|
4378
|
-
const baseModel =
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4380
|
+
const baseModel = (0, import_react11.useMemo)(
|
|
4381
|
+
() => ({
|
|
4382
|
+
name: String(model),
|
|
4383
|
+
view: viewData,
|
|
4384
|
+
fields
|
|
4385
|
+
}),
|
|
4386
|
+
[model, viewData, fields]
|
|
4387
|
+
);
|
|
4383
4388
|
const initModel = (0, import_hooks3.useModel)();
|
|
4384
4389
|
const modelInstance = (0, import_react11.useMemo)(() => {
|
|
4385
4390
|
if (viewData) {
|
|
@@ -5577,8 +5582,82 @@ var binaryFieldController = (props) => {
|
|
|
5577
5582
|
};
|
|
5578
5583
|
};
|
|
5579
5584
|
|
|
5580
|
-
// src/widget/
|
|
5585
|
+
// src/widget/basic/many2many-binary-field/controller.tsx
|
|
5581
5586
|
var import_react23 = require("react");
|
|
5587
|
+
var many2manyBinaryController = (props) => {
|
|
5588
|
+
const {
|
|
5589
|
+
name,
|
|
5590
|
+
methods,
|
|
5591
|
+
value,
|
|
5592
|
+
onChange: handleOnchange,
|
|
5593
|
+
service,
|
|
5594
|
+
xNode,
|
|
5595
|
+
path
|
|
5596
|
+
} = props;
|
|
5597
|
+
const inputId = (0, import_react23.useId)();
|
|
5598
|
+
const { useUploadFile: useUploadFile2 } = (0, provider_exports.useService)();
|
|
5599
|
+
const { mutateAsync } = useUploadFile2();
|
|
5600
|
+
const binaryRef = (0, import_react23.useRef)(null);
|
|
5601
|
+
const [initialFiles, setInitialFiles] = (0, import_react23.useState)(
|
|
5602
|
+
Array.isArray(value) ? value : value ? [value] : []
|
|
5603
|
+
);
|
|
5604
|
+
const checkIsImageLink = (url) => {
|
|
5605
|
+
const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i;
|
|
5606
|
+
return imageExtensions.test(url) || (0, utils_exports.isBase64Image)(url) || isBlobUrl(url);
|
|
5607
|
+
};
|
|
5608
|
+
const sanitizeForBE = (list) => list.filter((x) => x?.datas && !isBlobUrl(x.datas)).map((x) => ({ name: x.name, datas: x.datas, mimetype: x.mimetype }));
|
|
5609
|
+
const handleFileChange = async (files, e, oldValues) => {
|
|
5610
|
+
try {
|
|
5611
|
+
const uploadedUrls = await Promise.all(
|
|
5612
|
+
files.map(async (f) => {
|
|
5613
|
+
const formData = new FormData();
|
|
5614
|
+
formData.append("file", f);
|
|
5615
|
+
const res = await mutateAsync({ formData, service, xNode, path });
|
|
5616
|
+
return res?.url;
|
|
5617
|
+
})
|
|
5618
|
+
);
|
|
5619
|
+
const uploadedItems = files.map((f, i) => ({
|
|
5620
|
+
name: f.name,
|
|
5621
|
+
datas: uploadedUrls[i] ?? "",
|
|
5622
|
+
mimetype: f.type
|
|
5623
|
+
}));
|
|
5624
|
+
const finalList = [...oldValues, ...uploadedItems];
|
|
5625
|
+
methods?.setValue(name, finalList, { shouldDirty: true });
|
|
5626
|
+
const payloadForBE = sanitizeForBE(finalList);
|
|
5627
|
+
handleOnchange && handleOnchange(name ?? "", payloadForBE);
|
|
5628
|
+
} catch (err) {
|
|
5629
|
+
console.error(err);
|
|
5630
|
+
} finally {
|
|
5631
|
+
e.target.value = "";
|
|
5632
|
+
}
|
|
5633
|
+
};
|
|
5634
|
+
const handleRemoveAt = (idx) => {
|
|
5635
|
+
const current = methods?.getValues(name) || [];
|
|
5636
|
+
const next = current.filter((_, i) => i !== idx);
|
|
5637
|
+
setInitialFiles((p) => p.filter((_, i) => i !== idx));
|
|
5638
|
+
methods?.setValue(name, next.length ? next : null, { shouldDirty: true });
|
|
5639
|
+
const payloadForBE = next.length ? sanitizeForBE(next) : null;
|
|
5640
|
+
handleOnchange && handleOnchange(name ?? "", payloadForBE);
|
|
5641
|
+
};
|
|
5642
|
+
const handleRemoveAll = () => {
|
|
5643
|
+
setInitialFiles([]);
|
|
5644
|
+
methods?.setValue(name, null, { shouldDirty: true });
|
|
5645
|
+
handleOnchange && handleOnchange(name ?? "", null);
|
|
5646
|
+
};
|
|
5647
|
+
return {
|
|
5648
|
+
inputId,
|
|
5649
|
+
initialFiles,
|
|
5650
|
+
binaryRef,
|
|
5651
|
+
handleFileChange,
|
|
5652
|
+
handleRemoveAt,
|
|
5653
|
+
handleRemoveAll,
|
|
5654
|
+
checkIsImageLink,
|
|
5655
|
+
setInitialFiles
|
|
5656
|
+
};
|
|
5657
|
+
};
|
|
5658
|
+
|
|
5659
|
+
// src/widget/advance/table/table-head/controller.ts
|
|
5660
|
+
var import_react24 = require("react");
|
|
5582
5661
|
var tableHeadController = (props) => {
|
|
5583
5662
|
const {
|
|
5584
5663
|
typeTable,
|
|
@@ -5589,21 +5668,21 @@ var tableHeadController = (props) => {
|
|
|
5589
5668
|
setSelectedRowKeys
|
|
5590
5669
|
} = props;
|
|
5591
5670
|
const { rowIds: recordIds } = useGetRowIds(tableRef);
|
|
5592
|
-
const selectedRowKeysRef = (0,
|
|
5671
|
+
const selectedRowKeysRef = (0, import_react24.useRef)(recordIds);
|
|
5593
5672
|
const isGroupTable = typeTable === "group";
|
|
5594
|
-
const recordsCheckedGroup = (0,
|
|
5673
|
+
const recordsCheckedGroup = (0, import_react24.useMemo)(() => {
|
|
5595
5674
|
if (!rows || !groupByList) return 0;
|
|
5596
5675
|
const groupBy = typeof groupByList === "object" ? groupByList?.contexts?.[0]?.group_by : void 0;
|
|
5597
5676
|
return countSum(rows, groupBy);
|
|
5598
5677
|
}, [rows, groupByList]);
|
|
5599
|
-
const isAllGroupChecked = (0,
|
|
5678
|
+
const isAllGroupChecked = (0, import_react24.useMemo)(() => {
|
|
5600
5679
|
if (!isGroupTable || !selectedRowKeys?.length) return false;
|
|
5601
5680
|
const selectedLength = selectedRowKeys.filter((id) => id !== -1).length;
|
|
5602
5681
|
const allRecordsSelected = recordIds.length === selectedRowKeys.length ? recordIds.length === selectedLength : false;
|
|
5603
5682
|
const allGroupsSelected = recordsCheckedGroup === selectedRowKeys.length;
|
|
5604
5683
|
return allGroupsSelected || allRecordsSelected;
|
|
5605
5684
|
}, [isGroupTable, selectedRowKeys, recordIds, recordsCheckedGroup]);
|
|
5606
|
-
const isAllNormalChecked = (0,
|
|
5685
|
+
const isAllNormalChecked = (0, import_react24.useMemo)(() => {
|
|
5607
5686
|
if (isGroupTable || !selectedRowKeys?.length || !rows?.length) return false;
|
|
5608
5687
|
return selectedRowKeys.length === rows.length && selectedRowKeys.every(
|
|
5609
5688
|
(id) => rows.some((record) => record.id === id)
|
|
@@ -5644,23 +5723,23 @@ var tableHeadController = (props) => {
|
|
|
5644
5723
|
};
|
|
5645
5724
|
|
|
5646
5725
|
// src/widget/advance/table/table-view/controller.ts
|
|
5647
|
-
var
|
|
5648
|
-
var
|
|
5726
|
+
var import_react25 = require("react");
|
|
5727
|
+
var import_utils18 = require("@fctc/interface-logic/utils");
|
|
5649
5728
|
var tableController = ({ data }) => {
|
|
5650
|
-
const [rows, setRows] = (0,
|
|
5651
|
-
const [columnVisibility, setColumnVisibility] = (0,
|
|
5652
|
-
const dataModelFields = (0,
|
|
5729
|
+
const [rows, setRows] = (0, import_react25.useState)([]);
|
|
5730
|
+
const [columnVisibility, setColumnVisibility] = (0, import_react25.useState)({});
|
|
5731
|
+
const dataModelFields = (0, import_react25.useMemo)(() => {
|
|
5653
5732
|
return data?.fields?.map((field) => ({
|
|
5654
5733
|
...data.dataModel?.[field?.name],
|
|
5655
5734
|
...field,
|
|
5656
5735
|
string: field?.string || data.dataModel?.[field?.name]?.string
|
|
5657
5736
|
})) ?? [];
|
|
5658
5737
|
}, [data?.fields, data?.dataModel]);
|
|
5659
|
-
const mergeFields = (0,
|
|
5738
|
+
const mergeFields = (0, import_react25.useMemo)(
|
|
5660
5739
|
() => mergeButtons(dataModelFields),
|
|
5661
5740
|
[dataModelFields]
|
|
5662
5741
|
);
|
|
5663
|
-
const transformData = (0,
|
|
5742
|
+
const transformData = (0, import_react25.useCallback)(
|
|
5664
5743
|
(dataList) => {
|
|
5665
5744
|
if (!dataList) return [];
|
|
5666
5745
|
return dataList.map((item) => {
|
|
@@ -5682,16 +5761,16 @@ var tableController = ({ data }) => {
|
|
|
5682
5761
|
},
|
|
5683
5762
|
[data?.typeTable]
|
|
5684
5763
|
);
|
|
5685
|
-
(0,
|
|
5764
|
+
(0, import_react25.useEffect)(() => {
|
|
5686
5765
|
setRows(transformData(data?.records));
|
|
5687
5766
|
}, [data?.records, transformData]);
|
|
5688
|
-
const columns = (0,
|
|
5767
|
+
const columns = (0, import_react25.useMemo)(() => {
|
|
5689
5768
|
try {
|
|
5690
5769
|
return mergeFields?.filter((item) => {
|
|
5691
|
-
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ?
|
|
5770
|
+
return item?.widget !== "details_Receive_money" && !(item?.column_invisible ? import_utils18.domainHelper.matchDomains(
|
|
5692
5771
|
data.context,
|
|
5693
5772
|
item?.column_invisible
|
|
5694
|
-
) : item?.invisible ?
|
|
5773
|
+
) : item?.invisible ? import_utils18.domainHelper.matchDomains(data.context, item?.invisible) : false);
|
|
5695
5774
|
})?.map((field) => {
|
|
5696
5775
|
const overridden = columnVisibility[field?.name];
|
|
5697
5776
|
return {
|
|
@@ -5706,7 +5785,7 @@ var tableController = ({ data }) => {
|
|
|
5706
5785
|
return [];
|
|
5707
5786
|
}
|
|
5708
5787
|
}, [mergeFields, data?.context, columnVisibility]);
|
|
5709
|
-
const onToggleColumnOptional = (0,
|
|
5788
|
+
const onToggleColumnOptional = (0, import_react25.useCallback)((item) => {
|
|
5710
5789
|
setColumnVisibility((prev) => ({
|
|
5711
5790
|
...prev,
|
|
5712
5791
|
[item?.name]: item?.optional === "show" ? "hide" : "show"
|
|
@@ -5721,7 +5800,7 @@ var tableController = ({ data }) => {
|
|
|
5721
5800
|
};
|
|
5722
5801
|
|
|
5723
5802
|
// src/widget/advance/table/table-group/controller.ts
|
|
5724
|
-
var
|
|
5803
|
+
var import_react26 = require("react");
|
|
5725
5804
|
var import_store = require("@fctc/interface-logic/store");
|
|
5726
5805
|
var tableGroupController = (props) => {
|
|
5727
5806
|
const { env } = (0, provider_exports.useEnv)();
|
|
@@ -5738,15 +5817,15 @@ var tableGroupController = (props) => {
|
|
|
5738
5817
|
groupByList,
|
|
5739
5818
|
setSelectedRowKeys
|
|
5740
5819
|
} = props;
|
|
5741
|
-
const [pageGroup, setPageGroup] = (0,
|
|
5820
|
+
const [pageGroup, setPageGroup] = (0, import_react26.useState)(0);
|
|
5742
5821
|
const { selectedRowKeys } = (0, import_store.useAppSelector)(import_store.selectList);
|
|
5743
|
-
const [isShowGroup, setIsShowGroup] = (0,
|
|
5744
|
-
const [colEmptyGroup, setColEmptyGroup] = (0,
|
|
5822
|
+
const [isShowGroup, setIsShowGroup] = (0, import_react26.useState)(false);
|
|
5823
|
+
const [colEmptyGroup, setColEmptyGroup] = (0, import_react26.useState)({
|
|
5745
5824
|
fromStart: 1,
|
|
5746
5825
|
fromEnd: 1
|
|
5747
5826
|
});
|
|
5748
5827
|
const domain = row?.__domain;
|
|
5749
|
-
const processedData = (0,
|
|
5828
|
+
const processedData = (0, import_react26.useMemo)(() => {
|
|
5750
5829
|
const calculateColSpanEmpty = () => {
|
|
5751
5830
|
const startIndex = columns.findIndex(
|
|
5752
5831
|
(col) => col.field.type === "monetary" && typeof row[col.key] === "number" || col.field.aggregator === "sum"
|
|
@@ -5761,7 +5840,7 @@ var tableGroupController = (props) => {
|
|
|
5761
5840
|
};
|
|
5762
5841
|
return calculateColSpanEmpty();
|
|
5763
5842
|
}, [columns, row]);
|
|
5764
|
-
const shouldFetchData = (0,
|
|
5843
|
+
const shouldFetchData = (0, import_react26.useMemo)(() => {
|
|
5765
5844
|
return !!isShowGroup;
|
|
5766
5845
|
}, [isShowGroup]);
|
|
5767
5846
|
const enabled = shouldFetchData && !!processedData;
|
|
@@ -5830,7 +5909,7 @@ var tableGroupController = (props) => {
|
|
|
5830
5909
|
}
|
|
5831
5910
|
toggleShowGroup();
|
|
5832
5911
|
};
|
|
5833
|
-
(0,
|
|
5912
|
+
(0, import_react26.useEffect)(() => {
|
|
5834
5913
|
if (!isDataGroupFetched || !rowsGroup || !checkedAll || allIdsNull || typeTableGroup === "group") {
|
|
5835
5914
|
return;
|
|
5836
5915
|
}
|
|
@@ -5856,7 +5935,7 @@ var tableGroupController = (props) => {
|
|
|
5856
5935
|
|
|
5857
5936
|
// src/widget/advance/search/controller.ts
|
|
5858
5937
|
var import_moment2 = __toESM(require_moment());
|
|
5859
|
-
var
|
|
5938
|
+
var import_react27 = require("react");
|
|
5860
5939
|
|
|
5861
5940
|
// src/constants.ts
|
|
5862
5941
|
var constants_exports = {};
|
|
@@ -5871,14 +5950,14 @@ var searchController = ({
|
|
|
5871
5950
|
fieldsList
|
|
5872
5951
|
}) => {
|
|
5873
5952
|
const { env } = (0, provider_exports.useEnv)();
|
|
5874
|
-
const [filterBy, setFilterBy] = (0,
|
|
5875
|
-
const [searchBy, setSearchBy] = (0,
|
|
5876
|
-
const [groupBy, setGroupBy] = (0,
|
|
5877
|
-
const [selectedTags, setSelectedTags] = (0,
|
|
5878
|
-
const [searchString, setSearchString] = (0,
|
|
5879
|
-
const [searchMap, setSearchMap] = (0,
|
|
5880
|
-
const [hoveredIndex, setHoveredIndex] = (0,
|
|
5881
|
-
const [hoveredIndexSearchList, setHoveredIndexSearchList] = (0,
|
|
5953
|
+
const [filterBy, setFilterBy] = (0, import_react27.useState)(null);
|
|
5954
|
+
const [searchBy, setSearchBy] = (0, import_react27.useState)(null);
|
|
5955
|
+
const [groupBy, setGroupBy] = (0, import_react27.useState)(null);
|
|
5956
|
+
const [selectedTags, setSelectedTags] = (0, import_react27.useState)(null);
|
|
5957
|
+
const [searchString, setSearchString] = (0, import_react27.useState)("");
|
|
5958
|
+
const [searchMap, setSearchMap] = (0, import_react27.useState)({});
|
|
5959
|
+
const [hoveredIndex, setHoveredIndex] = (0, import_react27.useState)(0);
|
|
5960
|
+
const [hoveredIndexSearchList, setHoveredIndexSearchList] = (0, import_react27.useState)(0);
|
|
5882
5961
|
const actionContext = typeof context === "string" ? (0, utils_exports.evalJSONContext)(context) : context;
|
|
5883
5962
|
const contextSearch = { ...env.context, ...actionContext };
|
|
5884
5963
|
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, utils_exports.evalJSONDomain)(domain, contextSearch) : [];
|
|
@@ -5925,7 +6004,7 @@ var searchController = ({
|
|
|
5925
6004
|
}
|
|
5926
6005
|
}
|
|
5927
6006
|
};
|
|
5928
|
-
(0,
|
|
6007
|
+
(0, import_react27.useEffect)(() => {
|
|
5929
6008
|
fetchData();
|
|
5930
6009
|
}, [model, viewData]);
|
|
5931
6010
|
const onChangeSearchInput = (search_string) => {
|
|
@@ -6007,7 +6086,7 @@ var searchController = ({
|
|
|
6007
6086
|
return [...domain2];
|
|
6008
6087
|
}
|
|
6009
6088
|
};
|
|
6010
|
-
const setTagSearch = (0,
|
|
6089
|
+
const setTagSearch = (0, import_react27.useCallback)(
|
|
6011
6090
|
(updatedMap) => {
|
|
6012
6091
|
if (!updatedMap) return;
|
|
6013
6092
|
const tagsSearch = Object.entries(updatedMap).map(
|
|
@@ -6070,7 +6149,7 @@ var searchController = ({
|
|
|
6070
6149
|
},
|
|
6071
6150
|
[searchMap]
|
|
6072
6151
|
);
|
|
6073
|
-
(0,
|
|
6152
|
+
(0, import_react27.useEffect)(() => {
|
|
6074
6153
|
setTagSearch(searchMap);
|
|
6075
6154
|
}, [searchMap]);
|
|
6076
6155
|
const handleAddTagSearch = (tag) => {
|
|
@@ -6189,6 +6268,7 @@ var searchController = ({
|
|
|
6189
6268
|
downLoadBinaryController,
|
|
6190
6269
|
downloadFileController,
|
|
6191
6270
|
durationController,
|
|
6271
|
+
many2manyBinaryController,
|
|
6192
6272
|
many2manyFieldController,
|
|
6193
6273
|
many2manyTagsController,
|
|
6194
6274
|
many2oneButtonController,
|
package/dist/widget.mjs
CHANGED
|
@@ -4214,6 +4214,7 @@ var languages = [
|
|
|
4214
4214
|
{ id: "vi_VN", name: "VIE" },
|
|
4215
4215
|
{ id: "en_US", name: "ENG" }
|
|
4216
4216
|
];
|
|
4217
|
+
var isBlobUrl = (url) => url.startsWith("blob:");
|
|
4217
4218
|
|
|
4218
4219
|
// src/utils/function.ts
|
|
4219
4220
|
import { useCallback as useCallback2, useEffect as useEffect2, useReducer } from "react";
|
|
@@ -4443,11 +4444,14 @@ var useGetSpecification = ({
|
|
|
4443
4444
|
viewData,
|
|
4444
4445
|
fields
|
|
4445
4446
|
}) => {
|
|
4446
|
-
const baseModel =
|
|
4447
|
-
|
|
4448
|
-
|
|
4449
|
-
|
|
4450
|
-
|
|
4447
|
+
const baseModel = useMemo5(
|
|
4448
|
+
() => ({
|
|
4449
|
+
name: String(model),
|
|
4450
|
+
view: viewData,
|
|
4451
|
+
fields
|
|
4452
|
+
}),
|
|
4453
|
+
[model, viewData, fields]
|
|
4454
|
+
);
|
|
4451
4455
|
const initModel = useModel();
|
|
4452
4456
|
const modelInstance = useMemo5(() => {
|
|
4453
4457
|
if (viewData) {
|
|
@@ -5649,8 +5653,82 @@ var binaryFieldController = (props) => {
|
|
|
5649
5653
|
};
|
|
5650
5654
|
};
|
|
5651
5655
|
|
|
5656
|
+
// src/widget/basic/many2many-binary-field/controller.tsx
|
|
5657
|
+
import { useId as useId2, useRef as useRef4, useState as useState13 } from "react";
|
|
5658
|
+
var many2manyBinaryController = (props) => {
|
|
5659
|
+
const {
|
|
5660
|
+
name,
|
|
5661
|
+
methods,
|
|
5662
|
+
value,
|
|
5663
|
+
onChange: handleOnchange,
|
|
5664
|
+
service,
|
|
5665
|
+
xNode,
|
|
5666
|
+
path
|
|
5667
|
+
} = props;
|
|
5668
|
+
const inputId = useId2();
|
|
5669
|
+
const { useUploadFile: useUploadFile2 } = (0, provider_exports.useService)();
|
|
5670
|
+
const { mutateAsync } = useUploadFile2();
|
|
5671
|
+
const binaryRef = useRef4(null);
|
|
5672
|
+
const [initialFiles, setInitialFiles] = useState13(
|
|
5673
|
+
Array.isArray(value) ? value : value ? [value] : []
|
|
5674
|
+
);
|
|
5675
|
+
const checkIsImageLink = (url) => {
|
|
5676
|
+
const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i;
|
|
5677
|
+
return imageExtensions.test(url) || (0, utils_exports.isBase64Image)(url) || isBlobUrl(url);
|
|
5678
|
+
};
|
|
5679
|
+
const sanitizeForBE = (list) => list.filter((x) => x?.datas && !isBlobUrl(x.datas)).map((x) => ({ name: x.name, datas: x.datas, mimetype: x.mimetype }));
|
|
5680
|
+
const handleFileChange = async (files, e, oldValues) => {
|
|
5681
|
+
try {
|
|
5682
|
+
const uploadedUrls = await Promise.all(
|
|
5683
|
+
files.map(async (f) => {
|
|
5684
|
+
const formData = new FormData();
|
|
5685
|
+
formData.append("file", f);
|
|
5686
|
+
const res = await mutateAsync({ formData, service, xNode, path });
|
|
5687
|
+
return res?.url;
|
|
5688
|
+
})
|
|
5689
|
+
);
|
|
5690
|
+
const uploadedItems = files.map((f, i) => ({
|
|
5691
|
+
name: f.name,
|
|
5692
|
+
datas: uploadedUrls[i] ?? "",
|
|
5693
|
+
mimetype: f.type
|
|
5694
|
+
}));
|
|
5695
|
+
const finalList = [...oldValues, ...uploadedItems];
|
|
5696
|
+
methods?.setValue(name, finalList, { shouldDirty: true });
|
|
5697
|
+
const payloadForBE = sanitizeForBE(finalList);
|
|
5698
|
+
handleOnchange && handleOnchange(name ?? "", payloadForBE);
|
|
5699
|
+
} catch (err) {
|
|
5700
|
+
console.error(err);
|
|
5701
|
+
} finally {
|
|
5702
|
+
e.target.value = "";
|
|
5703
|
+
}
|
|
5704
|
+
};
|
|
5705
|
+
const handleRemoveAt = (idx) => {
|
|
5706
|
+
const current = methods?.getValues(name) || [];
|
|
5707
|
+
const next = current.filter((_, i) => i !== idx);
|
|
5708
|
+
setInitialFiles((p) => p.filter((_, i) => i !== idx));
|
|
5709
|
+
methods?.setValue(name, next.length ? next : null, { shouldDirty: true });
|
|
5710
|
+
const payloadForBE = next.length ? sanitizeForBE(next) : null;
|
|
5711
|
+
handleOnchange && handleOnchange(name ?? "", payloadForBE);
|
|
5712
|
+
};
|
|
5713
|
+
const handleRemoveAll = () => {
|
|
5714
|
+
setInitialFiles([]);
|
|
5715
|
+
methods?.setValue(name, null, { shouldDirty: true });
|
|
5716
|
+
handleOnchange && handleOnchange(name ?? "", null);
|
|
5717
|
+
};
|
|
5718
|
+
return {
|
|
5719
|
+
inputId,
|
|
5720
|
+
initialFiles,
|
|
5721
|
+
binaryRef,
|
|
5722
|
+
handleFileChange,
|
|
5723
|
+
handleRemoveAt,
|
|
5724
|
+
handleRemoveAll,
|
|
5725
|
+
checkIsImageLink,
|
|
5726
|
+
setInitialFiles
|
|
5727
|
+
};
|
|
5728
|
+
};
|
|
5729
|
+
|
|
5652
5730
|
// src/widget/advance/table/table-head/controller.ts
|
|
5653
|
-
import { useMemo as useMemo10, useRef as
|
|
5731
|
+
import { useMemo as useMemo10, useRef as useRef5 } from "react";
|
|
5654
5732
|
var tableHeadController = (props) => {
|
|
5655
5733
|
const {
|
|
5656
5734
|
typeTable,
|
|
@@ -5661,7 +5739,7 @@ var tableHeadController = (props) => {
|
|
|
5661
5739
|
setSelectedRowKeys
|
|
5662
5740
|
} = props;
|
|
5663
5741
|
const { rowIds: recordIds } = useGetRowIds(tableRef);
|
|
5664
|
-
const selectedRowKeysRef =
|
|
5742
|
+
const selectedRowKeysRef = useRef5(recordIds);
|
|
5665
5743
|
const isGroupTable = typeTable === "group";
|
|
5666
5744
|
const recordsCheckedGroup = useMemo10(() => {
|
|
5667
5745
|
if (!rows || !groupByList) return 0;
|
|
@@ -5716,11 +5794,11 @@ var tableHeadController = (props) => {
|
|
|
5716
5794
|
};
|
|
5717
5795
|
|
|
5718
5796
|
// src/widget/advance/table/table-view/controller.ts
|
|
5719
|
-
import { useCallback as useCallback6, useEffect as useEffect14, useMemo as useMemo11, useState as
|
|
5797
|
+
import { useCallback as useCallback6, useEffect as useEffect14, useMemo as useMemo11, useState as useState14 } from "react";
|
|
5720
5798
|
import { domainHelper } from "@fctc/interface-logic/utils";
|
|
5721
5799
|
var tableController = ({ data }) => {
|
|
5722
|
-
const [rows, setRows] =
|
|
5723
|
-
const [columnVisibility, setColumnVisibility] =
|
|
5800
|
+
const [rows, setRows] = useState14([]);
|
|
5801
|
+
const [columnVisibility, setColumnVisibility] = useState14({});
|
|
5724
5802
|
const dataModelFields = useMemo11(() => {
|
|
5725
5803
|
return data?.fields?.map((field) => ({
|
|
5726
5804
|
...data.dataModel?.[field?.name],
|
|
@@ -5793,7 +5871,7 @@ var tableController = ({ data }) => {
|
|
|
5793
5871
|
};
|
|
5794
5872
|
|
|
5795
5873
|
// src/widget/advance/table/table-group/controller.ts
|
|
5796
|
-
import { useEffect as useEffect15, useMemo as useMemo12, useState as
|
|
5874
|
+
import { useEffect as useEffect15, useMemo as useMemo12, useState as useState15 } from "react";
|
|
5797
5875
|
import { useAppSelector, selectList } from "@fctc/interface-logic/store";
|
|
5798
5876
|
var tableGroupController = (props) => {
|
|
5799
5877
|
const { env } = (0, provider_exports.useEnv)();
|
|
@@ -5810,10 +5888,10 @@ var tableGroupController = (props) => {
|
|
|
5810
5888
|
groupByList,
|
|
5811
5889
|
setSelectedRowKeys
|
|
5812
5890
|
} = props;
|
|
5813
|
-
const [pageGroup, setPageGroup] =
|
|
5891
|
+
const [pageGroup, setPageGroup] = useState15(0);
|
|
5814
5892
|
const { selectedRowKeys } = useAppSelector(selectList);
|
|
5815
|
-
const [isShowGroup, setIsShowGroup] =
|
|
5816
|
-
const [colEmptyGroup, setColEmptyGroup] =
|
|
5893
|
+
const [isShowGroup, setIsShowGroup] = useState15(false);
|
|
5894
|
+
const [colEmptyGroup, setColEmptyGroup] = useState15({
|
|
5817
5895
|
fromStart: 1,
|
|
5818
5896
|
fromEnd: 1
|
|
5819
5897
|
});
|
|
@@ -5928,7 +6006,7 @@ var tableGroupController = (props) => {
|
|
|
5928
6006
|
|
|
5929
6007
|
// src/widget/advance/search/controller.ts
|
|
5930
6008
|
var import_moment2 = __toESM(require_moment());
|
|
5931
|
-
import { useCallback as useCallback7, useEffect as useEffect16, useState as
|
|
6009
|
+
import { useCallback as useCallback7, useEffect as useEffect16, useState as useState16 } from "react";
|
|
5932
6010
|
|
|
5933
6011
|
// src/constants.ts
|
|
5934
6012
|
var constants_exports = {};
|
|
@@ -5944,14 +6022,14 @@ var searchController = ({
|
|
|
5944
6022
|
fieldsList
|
|
5945
6023
|
}) => {
|
|
5946
6024
|
const { env } = (0, provider_exports.useEnv)();
|
|
5947
|
-
const [filterBy, setFilterBy] =
|
|
5948
|
-
const [searchBy, setSearchBy] =
|
|
5949
|
-
const [groupBy, setGroupBy] =
|
|
5950
|
-
const [selectedTags, setSelectedTags] =
|
|
5951
|
-
const [searchString, setSearchString] =
|
|
5952
|
-
const [searchMap, setSearchMap] =
|
|
5953
|
-
const [hoveredIndex, setHoveredIndex] =
|
|
5954
|
-
const [hoveredIndexSearchList, setHoveredIndexSearchList] =
|
|
6025
|
+
const [filterBy, setFilterBy] = useState16(null);
|
|
6026
|
+
const [searchBy, setSearchBy] = useState16(null);
|
|
6027
|
+
const [groupBy, setGroupBy] = useState16(null);
|
|
6028
|
+
const [selectedTags, setSelectedTags] = useState16(null);
|
|
6029
|
+
const [searchString, setSearchString] = useState16("");
|
|
6030
|
+
const [searchMap, setSearchMap] = useState16({});
|
|
6031
|
+
const [hoveredIndex, setHoveredIndex] = useState16(0);
|
|
6032
|
+
const [hoveredIndexSearchList, setHoveredIndexSearchList] = useState16(0);
|
|
5955
6033
|
const actionContext = typeof context === "string" ? (0, utils_exports.evalJSONContext)(context) : context;
|
|
5956
6034
|
const contextSearch = { ...env.context, ...actionContext };
|
|
5957
6035
|
const domainAction = domain ? Array.isArray(domain) ? [...domain] : (0, utils_exports.evalJSONDomain)(domain, contextSearch) : [];
|
|
@@ -6261,6 +6339,7 @@ export {
|
|
|
6261
6339
|
downLoadBinaryController,
|
|
6262
6340
|
downloadFileController,
|
|
6263
6341
|
durationController,
|
|
6342
|
+
many2manyBinaryController,
|
|
6264
6343
|
many2manyFieldController,
|
|
6265
6344
|
many2manyTagsController,
|
|
6266
6345
|
many2oneButtonController,
|