Commit 202a5949 by zhaochengxiang

调整虚拟table

parent dbe5d4d9
...@@ -215,6 +215,10 @@ tr.drop-over-upward td { ...@@ -215,6 +215,10 @@ tr.drop-over-upward td {
color: #5B5B5B; color: #5B5B5B;
} }
.anchor {
background-color: #e7f7ff;
}
.m-common { .m-common {
margin: 20px 15px; margin: 20px 15px;
} }
......
...@@ -248,8 +248,6 @@ const ExpandedModelTable = (props) => { ...@@ -248,8 +248,6 @@ const ExpandedModelTable = (props) => {
useEffect(() => { useEffect(() => {
setSelectedRowKeys(checked?[id]:[]); setSelectedRowKeys(checked?[id]:[]);
console.log('data map', dataMap);
if (dataMap.has(id)) { if (dataMap.has(id)) {
setData([dataMap.get(id)]); setData([dataMap.get(id)]);
} else { } else {
......
...@@ -357,7 +357,7 @@ const ModelTable = (props) => { ...@@ -357,7 +357,7 @@ const ModelTable = (props) => {
expandedDataMapRef.current.set(id, value); expandedDataMapRef.current.set(id, value);
} }
let expandRow = undefined; let expandable = undefined;
let needExpand = false; let needExpand = false;
(data||[]).forEach(record => { (data||[]).forEach(record => {
if (record?.alreadyCheckedOut) { if (record?.alreadyCheckedOut) {
...@@ -366,9 +366,12 @@ const ModelTable = (props) => { ...@@ -366,9 +366,12 @@ const ModelTable = (props) => {
}) })
if (needExpand) { if (needExpand) {
expandRow = (_pid, row) => { expandable = {
if (!row?.alreadyCheckedOut) return null; expandedRowHeight: 100,
rowExpandable: (row) => {
return row?.alreadyCheckedOut;
},
expandRowRender: (row) => {
return ( return (
<div style={{ padding: 10 }}> <div style={{ padding: 10 }}>
<ExpandedModelTable <ExpandedModelTable
...@@ -384,6 +387,7 @@ const ModelTable = (props) => { ...@@ -384,6 +387,7 @@ const ModelTable = (props) => {
) )
} }
} }
}
const handleItemClick = (e, data) => { const handleItemClick = (e, data) => {
const { key, item } = data; const { key, item } = data;
...@@ -480,15 +484,13 @@ const ModelTable = (props) => { ...@@ -480,15 +484,13 @@ const ModelTable = (props) => {
columns={columns} columns={columns}
rows={data||[]} rows={data||[]}
rowHeight={51} rowHeight={51}
expandedRowHeight={100} rowClassName={(row) => {
rowExpandable={(row) => { return (row.id === anchorId)?'anchor':''
return row?.alreadyCheckedOut;
}} }}
anchorId={anchorId} expandable={expandable}
contextMenu={{ contextMenu={{
menu: onMenuRender menu: onMenuRender
}} }}
expandRow={expandRow}
selectedRows={selectedRowKeys} selectedRows={selectedRowKeys}
onSelectedRowsChange={onSelectChange} onSelectedRowsChange={onSelectChange}
getComparator={getComparator} getComparator={getComparator}
......
.anchor {
background-color: #e7f7ff;
}
\ No newline at end of file
...@@ -10,8 +10,6 @@ import { DownOutlined, UpOutlined } from '@ant-design/icons'; ...@@ -10,8 +10,6 @@ import { DownOutlined, UpOutlined } from '@ant-design/icons';
import { nanoid } from 'nanoid'; import { nanoid } from 'nanoid';
import { downNode, upNode } from './virtual-table-helper'; import { downNode, upNode } from './virtual-table-helper';
import './index.less';
export enum RowAction { export enum RowAction {
None, Expand, Select None, Expand, Select
} }
...@@ -32,22 +30,23 @@ export interface RowData { ...@@ -32,22 +30,23 @@ export interface RowData {
} }
interface Props<Row> { interface Props<Row> {
gridRef?: React.RefObject<DataGridHandle>
contextMenu?: { contextMenu?: {
id: string id: string
menu: (row: RowData | undefined) => ReactElement menu: (row: RowData | undefined) => ReactElement
} }
checkable: Boolean checkable: Boolean
gridRef?: React.RefObject<DataGridHandle> expandable?: {
// setRows?: (rows: any) => void expandedRowHeight?: number
expandRow?: (pid: string, row: Row) => React.ReactElement
rowExpandable?: (row: Row) => Boolean rowExpandable?: (row: Row) => Boolean
expandRowRender?: (row: Row) => React.ReactElement
}
getComparator?: (sortColumn: string) => (a: Row, b: Row) => number getComparator?: (sortColumn: string) => (a: Row, b: Row) => number
loadMoreRows?: (length: number) => Promise<Row[]> | undefined loadMoreRows?: (length: number) => Promise<Row[]> | undefined
selectedRows?: Array<any> selectedRows?: Array<any>
onSelectedRowsChange?: (selectedRows: Array<any>) => void onSelectedRowsChange?: (selectedRows: Array<any>) => void
rowHeight?: number rowHeight?: number
expandedRowHeight?: number rowClassName?: (row: RowData) => string
anchorId?: string
} }
const CheckboxFormatter = forwardRef<HTMLInputElement, CheckboxFormatterProps>( const CheckboxFormatter = forwardRef<HTMLInputElement, CheckboxFormatterProps>(
...@@ -60,12 +59,11 @@ const CheckboxFormatter = forwardRef<HTMLInputElement, CheckboxFormatterProps>( ...@@ -60,12 +59,11 @@ const CheckboxFormatter = forwardRef<HTMLInputElement, CheckboxFormatterProps>(
} }
); );
export function getExpandingCol<Row extends RowData, SR>({ colSpan, expand, expandable }: { export function getExpandingCol<Row extends RowData, SR>({ colSpan, expandRender, expandable }: {
colSpan: () => number colSpan: () => number
expand?: (pid: string, row: Row) => React.ReactElement expandRender?: (row: Row) => React.ReactElement
expandable?: (row: Row) => Boolean expandable?: (row: Row) => Boolean
}) { }) {
console.log('span', colSpan());
const col: Column<Row, SR> = { const col: Column<Row, SR> = {
key: 'expanded', key: 'expanded',
name: '', name: '',
...@@ -79,15 +77,15 @@ export function getExpandingCol<Row extends RowData, SR>({ colSpan, expand, expa ...@@ -79,15 +77,15 @@ export function getExpandingCol<Row extends RowData, SR>({ colSpan, expand, expa
}, },
formatter({ row, isCellSelected, onRowChange }) { formatter({ row, isCellSelected, onRowChange }) {
if (row.__type__ === RowType.Detail) { if (row.__type__ === RowType.Detail) {
if (expand) { if (expandRender) {
return expand(row.__pid__!, row.__row__) return expandRender(row.__row__)
} }
return ( return (
<div>{row.__pid__}</div> <div>{row.__pid__}</div>
); );
} }
if (!expandable || !expandable(row)) return <></>; if (!expandable || !expandable(row)) return null;
// 展开收起 // 展开收起
return ( return (
...@@ -111,12 +109,11 @@ export function getExpandingCol<Row extends RowData, SR>({ colSpan, expand, expa ...@@ -111,12 +109,11 @@ export function getExpandingCol<Row extends RowData, SR>({ colSpan, expand, expa
function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: DataGridProps<Row, SR, K> & Props<Row>) { function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: DataGridProps<Row, SR, K> & Props<Row>) {
const { const {
gridRef, gridRef,
expandRow, expandable,
rowExpandable,
getComparator, getComparator,
loadMoreRows, loadMoreRows,
onSelectedRowsChange, onSelectedRowsChange,
contextMenu, columns, rows, checkable, selectedRows, rowHeight = 45, expandedRowHeight = 1000, anchorId, ...rest } = props contextMenu, columns, rows, checkable, selectedRows, rowHeight = 45, rowClassName, ...rest } = props
const rowKeyGetter = (row: Row): K => { const rowKeyGetter = (row: Row): K => {
return row.id as K; return row.id as K;
...@@ -174,19 +171,19 @@ function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: Dat ...@@ -174,19 +171,19 @@ function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: Dat
// 组装功能s列 // 组装功能s列
const cols = useMemo(() => { const cols = useMemo(() => {
if (expandRow && checkable) { if (expandable && checkable) {
const cols: readonly Column<Row, SR>[] = [ const cols: readonly Column<Row, SR>[] = [
getExpandingCol<Row, SR>({ getExpandingCol<Row, SR>({
colSpan: () => columns.length+2, expand: expandRow, expandable: rowExpandable colSpan: () => columns.length+2, expandRender: expandable.expandRowRender, expandable: expandable.rowExpandable
}), }),
{ ...SelectColumn, key: 'select', frozen: false }, { ...SelectColumn, key: 'select', frozen: false },
...columns, ...columns,
] ]
return cols return cols
} else if (expandRow) { } else if (expandable) {
const cols: readonly Column<Row, SR>[] = [ const cols: readonly Column<Row, SR>[] = [
getExpandingCol<Row, SR>({ getExpandingCol<Row, SR>({
colSpan: () => columns.length+1, expand: expandRow, expandable: rowExpandable colSpan: () => columns.length+1, expandRender: expandable.expandRowRender, expandable: expandable.rowExpandable
}), }),
...columns, ...columns,
] ]
...@@ -202,7 +199,7 @@ function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: Dat ...@@ -202,7 +199,7 @@ function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: Dat
return columns return columns
//eslint-disable-next-line react-hooks/exhaustive-deps //eslint-disable-next-line react-hooks/exhaustive-deps
}, [columns, expandRow, checkable]) }, [columns, expandable, checkable])
// 处理滚动 // 处理滚动
const handleScroll = useCallback((event: React.UIEvent<HTMLDivElement>) => { const handleScroll = useCallback((event: React.UIEvent<HTMLDivElement>) => {
...@@ -231,7 +228,7 @@ function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: Dat ...@@ -231,7 +228,7 @@ function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: Dat
disable={props.row.__type__===RowType.Detail} disable={props.row.__type__===RowType.Detail}
> >
<GridRow <GridRow
className={(props.row.id===anchorId)?'anchor': ''} className={rowClassName(props.row)}
id={`row-${props.row.id}`} id={`row-${props.row.id}`}
onContextMenu={(e: React.MouseEvent) => { onContextMenu={(e: React.MouseEvent) => {
setContextItem(props.row); setContextItem(props.row);
...@@ -248,7 +245,7 @@ function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: Dat ...@@ -248,7 +245,7 @@ function FC<Row extends RowData, SR, K extends React.Key = React.Key>(props: Dat
onRowsChange={onRowsChange} onRowsChange={onRowsChange}
// headerRowHeight={45} // headerRowHeight={45}
rowHeight={(args) => (args.type === 'ROW' && args.row.__type__ === RowType.Detail ? expandedRowHeight : rowHeight)} rowHeight={(args) => (args.type === 'ROW' && args.row.__type__ === RowType.Detail ? (expandable.expandedRowHeight||100) : rowHeight)}
// defaultColumnOptions={{ // defaultColumnOptions={{
// sortable: true, // sortable: true,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment