This commit is contained in:
Jan Prochazka
2020-10-02 13:51:56 +02:00
parent 73b5b86ace
commit c13f8b4786
3 changed files with 37 additions and 1 deletions

View File

@@ -287,6 +287,17 @@ export abstract class GridDisplay {
this.reload(); this.reload();
} }
setFilters(dct) {
this.setConfig((cfg) => ({
...cfg,
filters: {
...cfg.filters,
...dct,
},
}));
this.reload();
}
setSort(uniqueName, order) { setSort(uniqueName, order) {
this.setConfig((cfg) => ({ this.setConfig((cfg) => ({
...cfg, ...cfg,

View File

@@ -9,6 +9,7 @@ export default function DataGridContextMenu({
setNull, setNull,
reload, reload,
exportGrid, exportGrid,
filterSelectedValue,
}) { }) {
return ( return (
<> <>
@@ -35,6 +36,9 @@ export default function DataGridContextMenu({
<DropDownMenuItem onClick={exportGrid} > <DropDownMenuItem onClick={exportGrid} >
Export Export
</DropDownMenuItem> </DropDownMenuItem>
<DropDownMenuItem onClick={filterSelectedValue} keyText="Ctrl+F">
Filter selected value
</DropDownMenuItem>
</> </>
); );
} }

View File

@@ -7,7 +7,7 @@ import useDimensions from '../utility/useDimensions';
import axios from '../utility/axios'; import axios from '../utility/axios';
import DataFilterControl from './DataFilterControl'; import DataFilterControl from './DataFilterControl';
import stableStringify from 'json-stable-stringify'; import stableStringify from 'json-stable-stringify';
import { getFilterType } from '@dbgate/filterparser'; import { getFilterType, getFilterValueExpression } from '@dbgate/filterparser';
import { cellFromEvent, getCellRange, topLeftCell, isRegularCell, nullCell, emptyCellArray } from './selection'; import { cellFromEvent, getCellRange, topLeftCell, isRegularCell, nullCell, emptyCellArray } from './selection';
import keycodes from '../utility/keycodes'; import keycodes from '../utility/keycodes';
import DataGridRow from './DataGridRow'; import DataGridRow from './DataGridRow';
@@ -560,6 +560,7 @@ export default function DataGridCore(props) {
reload={() => display.reload()} reload={() => display.reload()}
setNull={setNull} setNull={setNull}
exportGrid={exportGrid} exportGrid={exportGrid}
filterSelectedValue={filterSelectedValue}
/> />
); );
}; };
@@ -824,6 +825,21 @@ export default function DataGridCore(props) {
setChangeSet(updatedChangeSet); setChangeSet(updatedChangeSet);
} }
function filterSelectedValue() {
const flts = {};
for (const cell of selectedCells) {
if (!isRegularCell(cell)) continue;
const modelIndex = columnSizes.realToModel(cell[1]);
const columnName = columns[modelIndex].uniqueName;
let value = loadedRows[cell[0]][columnName];
let svalue = getFilterValueExpression(value, columns[modelIndex].dataType);
if (_.has(flts, columnName)) flts[columnName] += ',' + svalue;
else flts[columnName] = svalue;
}
display.setFilters(flts);
}
function revertAllChanges() { function revertAllChanges() {
setChangeSet(createChangeSet()); setChangeSet(createChangeSet());
} }
@@ -936,6 +952,11 @@ export default function DataGridCore(props) {
revertRowChanges(); revertRowChanges();
} }
if (event.keyCode == keycodes.f && event.ctrlKey) {
event.preventDefault();
filterSelectedValue();
}
if (event.keyCode == keycodes.z && event.ctrlKey) { if (event.keyCode == keycodes.z && event.ctrlKey) {
event.preventDefault(); event.preventDefault();
undo(); undo();