query designer - undo

This commit is contained in:
Jan Prochazka
2020-12-30 18:33:17 +01:00
parent d71f27f8b3
commit 7a5187e283
6 changed files with 85 additions and 34 deletions

View File

@@ -128,10 +128,13 @@ export default function Designer({ value, onChange, conid, database }) {
const bringToFront = React.useCallback(
(table) => {
onChange((current) => ({
...current,
tables: [...(current.tables || []).filter((x) => x.designerId != table.designerId), table],
}));
onChange(
(current) => ({
...current,
tables: [...(current.tables || []).filter((x) => x.designerId != table.designerId), table],
}),
true
);
},
[onChange]
);
@@ -260,14 +263,17 @@ export default function Designer({ value, onChange, conid, database }) {
const handleSelectColumn = React.useCallback(
(column) => {
onChange((current) => ({
...current,
columns: (current.columns || []).find(
(x) => x.designerId == column.designerId && x.columnName == column.columnName
)
? current.columns
: [...cleanupDesignColumns(current.columns), _.pick(column, ['designerId', 'columnName'])],
}));
onChange(
(current) => ({
...current,
columns: (current.columns || []).find(
(x) => x.designerId == column.designerId && x.columnName == column.columnName
)
? current.columns
: [...cleanupDesignColumns(current.columns), _.pick(column, ['designerId', 'columnName'])],
}),
true
);
},
[onChange]
);
@@ -275,19 +281,20 @@ export default function Designer({ value, onChange, conid, database }) {
const handleChangeColumn = React.useCallback(
(column, changeFunc) => {
onChange((current) => {
const existing = (current.columns || []).find(
const currentColumns = (current || {}).columns || [];
const existing = currentColumns.find(
(x) => x.designerId == column.designerId && x.columnName == column.columnName
);
if (existing) {
return {
...current,
columns: current.columns.map((x) => (x == existing ? changeFunc(existing) : x)),
columns: currentColumns.map((x) => (x == existing ? changeFunc(existing) : x)),
};
} else {
return {
...current,
columns: [
...cleanupDesignColumns(current.columns),
...cleanupDesignColumns(currentColumns),
changeFunc(_.pick(column, ['designerId', 'columnName'])),
],
};

View File

@@ -6,7 +6,7 @@ import InlineButton from '../widgets/InlineButton';
import { findDesignerFilterType } from './designerTools';
function getTableDisplayName(column, tables) {
const table = tables.find((x) => x.designerId == column.designerId);
const table = (tables || []).find((x) => x.designerId == column.designerId);
if (table) return table.alias || table.pureName;
return '';
}

View File

@@ -2,7 +2,7 @@ import React from 'react';
import useHasPermission from '../utility/useHasPermission';
import ToolbarButton from '../widgets/ToolbarButton';
export default function QueryDesignToolbar({ execute, isDatabaseDefined, busy, save }) {
export default function QueryDesignToolbar({ execute, isDatabaseDefined, busy, save, modelState, dispatchModel }) {
const hasPermission = useHasPermission();
return (
<>
@@ -14,6 +14,12 @@ export default function QueryDesignToolbar({ execute, isDatabaseDefined, busy, s
Save
</ToolbarButton>
)}
<ToolbarButton disabled={!modelState.canUndo} onClick={() => dispatchModel({ type: 'undo' })} icon="icon undo">
Undo
</ToolbarButton>
<ToolbarButton disabled={!modelState.canRedo} onClick={() => dispatchModel({ type: 'redo' })} icon="icon redo">
Redo
</ToolbarButton>
</>
);
}