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:
parent
a834e918ca
commit
8d658cc143
@ -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);
|
||||||
|
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user