mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
Merge pull request #375 from dbeaver/feat/context-filter
refactor(plugin-data-spreadsheet-new): CB-666 column.name -> column.l…
This commit is contained in:
+32
-41
@@ -23,40 +23,17 @@ export class DataGridContextMenuOrderService {
|
||||
return DataGridContextMenuOrderService.menuOrderToken;
|
||||
}
|
||||
|
||||
private getColumnName(model: IDatabaseDataModel<any>, resultIndex: number, columnIndex: number) {
|
||||
const data = model.source.getAction(resultIndex, ResultSetDataAction);
|
||||
return data.getColumn(columnIndex)?.name;
|
||||
}
|
||||
|
||||
private async changeOrder(
|
||||
model: IDatabaseDataModel<any>,
|
||||
resultIndex: number,
|
||||
columnIndex: number,
|
||||
order: Order
|
||||
) {
|
||||
const columnName = this.getColumnName(model, resultIndex, columnIndex)!;
|
||||
const data = model.source.getAction(resultIndex, ResultSetDataAction);
|
||||
const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction);
|
||||
const columnLabel = data.getColumn(columnIndex)?.label || '';
|
||||
|
||||
constraints.setOrder(columnName, order, true);
|
||||
await model.refresh();
|
||||
}
|
||||
|
||||
private getOrder(model: IDatabaseDataModel<any>, resultIndex: number, columnIndex: number) {
|
||||
const columnName = this.getColumnName(model, resultIndex, columnIndex)!;
|
||||
const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction);
|
||||
|
||||
return constraints.getOrder(columnName);
|
||||
}
|
||||
|
||||
private getSortingConstraints(model: IDatabaseDataModel<any>, resultIndex: number) {
|
||||
const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction);
|
||||
return constraints.getOrderConstraints();
|
||||
}
|
||||
|
||||
private async removeSortingFromConstraints(model: IDatabaseDataModel<any>, resultIndex: number) {
|
||||
const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction);
|
||||
|
||||
constraints.deleteOrders();
|
||||
constraints.setOrder(columnLabel, order, true);
|
||||
await model.refresh();
|
||||
}
|
||||
|
||||
@@ -86,10 +63,14 @@ export class DataGridContextMenuOrderService {
|
||||
await this.changeOrder(context.data.model, context.data.resultIndex, context.data.column, EOrder.asc);
|
||||
},
|
||||
type: 'radio',
|
||||
isChecked: context => this.getOrder(
|
||||
context.data.model,
|
||||
context.data.resultIndex,
|
||||
context.data.column) === EOrder.asc,
|
||||
isChecked: context => {
|
||||
const { model, resultIndex, column } = context.data;
|
||||
const data = model.source.getAction(resultIndex, ResultSetDataAction);
|
||||
const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction);
|
||||
const columnLabel = data.getColumn(column)?.label || '';
|
||||
|
||||
return constraints.getOrder(columnLabel) === EOrder.asc;
|
||||
},
|
||||
title: 'ASC',
|
||||
}
|
||||
);
|
||||
@@ -105,10 +86,14 @@ export class DataGridContextMenuOrderService {
|
||||
await this.changeOrder(context.data.model, context.data.resultIndex, context.data.column, EOrder.desc);
|
||||
},
|
||||
type: 'radio',
|
||||
isChecked: context => this.getOrder(
|
||||
context.data.model,
|
||||
context.data.resultIndex,
|
||||
context.data.column) === EOrder.desc,
|
||||
isChecked: context => {
|
||||
const { model, resultIndex, column } = context.data;
|
||||
const data = model.source.getAction(resultIndex, ResultSetDataAction);
|
||||
const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction);
|
||||
const columnLabel = data.getColumn(column)?.label || '';
|
||||
|
||||
return constraints.getOrder(columnLabel) === EOrder.desc;
|
||||
},
|
||||
title: 'DESC',
|
||||
}
|
||||
);
|
||||
@@ -124,10 +109,14 @@ export class DataGridContextMenuOrderService {
|
||||
await this.changeOrder(context.data.model, context.data.resultIndex, context.data.column, null);
|
||||
},
|
||||
type: 'radio',
|
||||
isChecked: context => this.getOrder(
|
||||
context.data.model,
|
||||
context.data.resultIndex,
|
||||
context.data.column) === null,
|
||||
isChecked: context => {
|
||||
const { model, resultIndex, column } = context.data;
|
||||
const data = model.source.getAction(resultIndex, ResultSetDataAction);
|
||||
const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction);
|
||||
const columnLabel = data.getColumn(column)?.label || '';
|
||||
|
||||
return constraints.getOrder(columnLabel) === null;
|
||||
},
|
||||
title: 'data_grid_table_disable_sorting',
|
||||
}
|
||||
);
|
||||
@@ -139,12 +128,14 @@ export class DataGridContextMenuOrderService {
|
||||
return context.contextType === DataGridContextMenuService.cellContext;
|
||||
},
|
||||
isHidden: context => {
|
||||
const sortingConstraints = this.getSortingConstraints(context.data.model, context.data.resultIndex);
|
||||
return sortingConstraints.length === 0;
|
||||
const constraints = context.data.model.source.getAction(context.data.resultIndex, ResultSetConstraintAction);
|
||||
return constraints.getOrderConstraints().length < 2;
|
||||
},
|
||||
isDisabled: context => context.data.model.isLoading(),
|
||||
onClick: async context => {
|
||||
await this.removeSortingFromConstraints(context.data.model, context.data.resultIndex);
|
||||
const constraints = context.data.model.source.getAction(context.data.resultIndex, ResultSetConstraintAction);
|
||||
constraints.deleteOrders();
|
||||
await context.data.model.refresh();
|
||||
},
|
||||
title: 'data_grid_table_disable_all_sorting',
|
||||
}
|
||||
|
||||
+4
-4
@@ -40,19 +40,19 @@ const styles = css`
|
||||
interface Props {
|
||||
model: IDatabaseDataModel<any, IDatabaseDataResult>;
|
||||
resultIndex: number;
|
||||
columnName: string;
|
||||
attribute: string;
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export const OrderButton: React.FC<Props> = observer(function OrderButtton({
|
||||
model,
|
||||
resultIndex,
|
||||
columnName,
|
||||
attribute,
|
||||
className,
|
||||
}) {
|
||||
const translate = useTranslate();
|
||||
const constraints = model.source.getAction(resultIndex, ResultSetConstraintAction);
|
||||
const currentOrder = constraints.getOrder(columnName);
|
||||
const currentOrder = constraints.getOrder(attribute);
|
||||
const loading = model.isLoading();
|
||||
|
||||
let icon = 'sort-arrow-unknown';
|
||||
@@ -69,7 +69,7 @@ export const OrderButton: React.FC<Props> = observer(function OrderButtton({
|
||||
}
|
||||
|
||||
const nextOrder = getNextOrder(currentOrder);
|
||||
constraints.setOrder(columnName, nextOrder, e.ctrlKey || e.metaKey);
|
||||
constraints.setOrder(attribute, nextOrder, e.ctrlKey || e.metaKey);
|
||||
model.refresh();
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -100,8 +100,8 @@ export const TableColumnHeader: React.FC<HeaderRendererProps<any>> = observer(fu
|
||||
</icon>
|
||||
<name>{columnName}</name>
|
||||
</shrink-container>
|
||||
{sortable && column?.name && (
|
||||
<OrderButton model={model} resultIndex={resultIndex} columnName={column.name} />
|
||||
{sortable && column?.label && (
|
||||
<OrderButton model={model} resultIndex={resultIndex} attribute={column.label} />
|
||||
)}
|
||||
</table-header>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user