@schema-render/search-table-react
Version:
Conditional search table component.
75 lines (74 loc) • 3.1 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { useAsyncEffect, useMemoizedFn, utils } from "@schema-render/core-react";
import { useMemo, useRef, useState } from "react";
import ColumnSettingModal from "../../components/ColumnSettingModal";
import { defaultColumnsMergeAlgo } from "./helpers/setting";
const { pick } = utils;
export default function useSortColumns({ baseColumns, table, globalStateRef }) {
const sortColumnsRef = useRef([]);
const [modalVisible, setModalVisible] = useState(false);
const [settingColumns, setSettingColumns] = useState([]);
const { isTabChanging } = globalStateRef.current;
// 「基础列」、「设置列」变换时,排序列重新生成
useMemo(()=>{
// Tab 切换中不需要执行
if (isTabChanging) {
return;
}
if (settingColumns.length) {
const mergeAlgo = table.settingColumnsMergeAlgo || defaultColumnsMergeAlgo;
sortColumnsRef.current = mergeAlgo(baseColumns, settingColumns);
} else {
// 浅复制一层,避免基础列数据被污染
sortColumnsRef.current = [
...baseColumns
];
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
baseColumns,
settingColumns
]);
// 打开列设置弹窗
const openSettingModal = useMemoizedFn(()=>{
setModalVisible(true);
});
// 关闭列设置弹窗
const closeSettingModal = useMemoizedFn(()=>{
setModalVisible(false);
});
// 保存排序数据
const handleOk = useMemoizedFn((newSortColumns)=>{
var _table_onSettingChanged;
sortColumnsRef.current = newSortColumns;
closeSettingModal();
// 触发设置改变事件
const storeColumns = newSortColumns.map((col)=>pick(col, 'title', 'dataIndex', 'width', 'hidden', 'fixed'));
(_table_onSettingChanged = table.onSettingChanged) === null || _table_onSettingChanged === void 0 ? void 0 : _table_onSettingChanged.call(table, {
columns: storeColumns
}, table.settingId);
});
const sortModalHolder = /*#__PURE__*/ _jsx(ColumnSettingModal, {
open: modalVisible,
sortColumns: sortColumnsRef.current,
defaultColumns: baseColumns,
onCancel: closeSettingModal,
onOk: handleOk
});
// 组件加载完毕、settingId 变化时,重新获取存储数据
useAsyncEffect(async ()=>{
var _table_getSetting, _data_columns;
const data = await ((_table_getSetting = table.getSetting) === null || _table_getSetting === void 0 ? void 0 : _table_getSetting.call(table, table.settingId));
if (data === null || data === void 0 ? void 0 : (_data_columns = data.columns) === null || _data_columns === void 0 ? void 0 : _data_columns.length) {
setSettingColumns(data.columns);
}
}, [
table.settingId
]);
return {
sortColumns: sortColumnsRef.current,
sortModalHolder,
openSettingModal,
closeSettingModal
};
}