1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

[WIP] Refactor table size persistence

Signed-off-by: Alex Culliere <alozhkin@mirantis.com>
This commit is contained in:
Alex Culliere 2021-03-24 18:48:44 +02:00
parent a834e918ca
commit 8d658cc143
2 changed files with 31 additions and 11 deletions

View File

@ -6,7 +6,7 @@ import { computed, observable } from "mobx";
import { disposeOnUnmount, observer } from "mobx-react"; import { disposeOnUnmount, observer } from "mobx-react";
import { ConfirmDialog, ConfirmDialogParams } from "../confirm-dialog"; import { ConfirmDialog, ConfirmDialogParams } from "../confirm-dialog";
import { Table, TableCell, TableCellProps, TableHead, TableProps, TableRow, TableRowProps, TableSortCallback } from "../table"; import { Table, TableCell, TableCellProps, TableHead, TableProps, TableRow, TableRowProps, TableSortCallback } from "../table";
import { autobind, createStorage, cssNames, IClassName, isReactNode, noop, prevDefault, stopPropagation } from "../../utils"; import { autobind, createStorage, cssNames, IClassName, isReactNode, noop, prevDefault, stopPropagation, StorageHelper } from "../../utils";
import { AddRemoveButtons, AddRemoveButtonsProps } from "../add-remove-buttons"; import { AddRemoveButtons, AddRemoveButtonsProps } from "../add-remove-buttons";
import { NoItems } from "../no-items"; import { NoItems } from "../no-items";
import { Spinner } from "../spinner"; import { Spinner } from "../spinner";
@ -96,13 +96,16 @@ const defaultProps: Partial<ItemListLayoutProps> = {
customizeTableRowProps: () => ({} as TableRowProps), customizeTableRowProps: () => ({} as TableRowProps),
}; };
type ItemListLayoutStorage = {
showFilters: boolean,
cellSizes: Record<string, number[]>
};
@observer @observer
export class ItemListLayout extends React.Component<ItemListLayoutProps> { export class ItemListLayout extends React.Component<ItemListLayoutProps> {
static defaultProps = defaultProps as object; static defaultProps = defaultProps as object;
private storage = createStorage("item_list_layout", { private storage: StorageHelper<ItemListLayoutStorage>;
showFilters: false, // setup defaults
});
get showFilters(): boolean { get showFilters(): boolean {
return this.storage.get().showFilters; return this.storage.get().showFilters;
@ -113,22 +116,37 @@ export class ItemListLayout extends React.Component<ItemListLayoutProps> {
} }
@observable cellSizes: number[]; @observable cellSizes: number[];
get persistentCellSizes(): number[] { get persistentCellSizes(): number[] {
const { clusterId, tableId, renderTableHeader: { length } } = this.props; const { tableId, renderTableHeader: { length } } = this.props;
const savedSizes = userStore.getTableSizing(clusterId, tableId); const savedSizes = this.storage.get().cellSizes[tableId] || [];
return savedSizes.length !== length ? new Array<number>(length) : savedSizes; return savedSizes.length !== length ? new Array<number>(length) : savedSizes;
} }
set persistentCellSizes(sizes: number[]) { set persistentCellSizes(sizes: number[]) {
const { clusterId, tableId } = this.props; const { tableId } = this.props;
const currentCellSizes = this.storage.get().cellSizes;
userStore.setTableSizing(clusterId, tableId, sizes);
this.storage.merge({
cellSizes: {
...currentCellSizes,
[tableId]: sizes
}
});
} }
constructor(props: ItemListLayoutProps) { constructor(props: ItemListLayoutProps) {
super(props); super(props);
// create storage
this.storage = createStorage<ItemListLayoutStorage>("item_list_layout", {
showFilters: false,
cellSizes: {
[props.tableId]: []
}
});
// create a registry to remember column sizes // create a registry to remember column sizes
this.cellSizes = new Array<number>(props.renderTableHeader.length); this.cellSizes = new Array<number>(props.renderTableHeader.length);

View File

@ -123,9 +123,11 @@ export class TableCell extends React.Component<TableCellProps> {
{resizable && ( {resizable && (
<ResizingAnchor <ResizingAnchor
onStart={() => prevDefault(() => {})} onStart={() => prevDefault(() => {})}
onDrag={newSize => this.props.onResize(newSize)} onDrag={newSize =>
this.props.onResize(newSize)
}
onEnd={() => this.props.onResizeComplete()} onEnd={() => this.props.onResizeComplete()}
getCurrentExtent={() => size} getCurrentExtent={() => size || 0}
direction={ResizeDirection.HORIZONTAL} direction={ResizeDirection.HORIZONTAL}
placement={ResizeSide.TRAILING} placement={ResizeSide.TRAILING}
growthDirection={ResizeGrowthDirection.LEFT_TO_RIGHT} growthDirection={ResizeGrowthDirection.LEFT_TO_RIGHT}