Files
gpustack-ui/src/hooks/use-expanded-row-keys.ts
T
2025-03-12 10:43:59 +08:00

62 lines
1.6 KiB
TypeScript

import { useCallback, useState } from 'react';
export default function useExpandedRowKeys(defaultKeys: React.Key[] = []) {
const [expandedRowKeys, setExpandedRowKeys] =
useState<React.Key[]>(defaultKeys);
const [currentExpand, setCurrentExpand] = useState<React.Key | null>(null);
const handleExpandChange = useCallback(
(expanded: boolean, record: any, rowKey: any) => {
if (expanded) {
setExpandedRowKeys((keys) => [...keys, rowKey]);
setCurrentExpand(rowKey);
} else {
setExpandedRowKeys((keys) => keys.filter((key) => key !== rowKey));
setCurrentExpand(null);
}
},
[]
);
const handleExpandAll = useCallback(
(expanded: boolean, keys: React.Key[] = []) => {
if (!expanded) {
setExpandedRowKeys([]);
setCurrentExpand(null);
}
if (expanded) {
setExpandedRowKeys((prevKeys) => [...new Set([...prevKeys, ...keys])]);
}
},
[]
);
const updateExpandedRowKeys = (keys: React.Key[]) => {
setExpandedRowKeys(keys);
};
const removeExpandedRowKey = (keys: React.Key[]) => {
// remove expanded row keys that are in the deleted keys
const newExpandedRowKeys = expandedRowKeys.filter(
(key) => !keys.includes(key)
);
setExpandedRowKeys(newExpandedRowKeys);
};
const clearExpandedRowKeys = () => {
setExpandedRowKeys([]);
setCurrentExpand(null);
};
return {
expandedRowKeys,
currentExpand,
setCurrentExpand,
clearExpandedRowKeys,
updateExpandedRowKeys,
removeExpandedRowKey,
handleExpandChange,
handleExpandAll
};
}