mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 13:23:58 +00:00
copy & paste fixes
This commit is contained in:
@@ -165,22 +165,26 @@ export function batchUpdateChangeSet(
|
|||||||
return changeSet;
|
return changeSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractFields(item: ChangeSetItem): UpdateField[] {
|
function extractFields(item: ChangeSetItem, allowNulls = true): UpdateField[] {
|
||||||
return _.keys(item.fields).map((targetColumn) => ({
|
return _.keys(item.fields)
|
||||||
targetColumn,
|
.filter((targetColumn) => allowNulls || item.fields[targetColumn] != null)
|
||||||
exprType: 'value',
|
.map((targetColumn) => ({
|
||||||
value: item.fields[targetColumn],
|
targetColumn,
|
||||||
}));
|
exprType: 'value',
|
||||||
|
value: item.fields[targetColumn],
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
function insertToSql(item: ChangeSetItem): Insert {
|
function insertToSql(item: ChangeSetItem): Insert {
|
||||||
|
const fields = extractFields(item, false);
|
||||||
|
if (fields.length == 0) return null;
|
||||||
return {
|
return {
|
||||||
targetTable: {
|
targetTable: {
|
||||||
pureName: item.pureName,
|
pureName: item.pureName,
|
||||||
schemaName: item.schemaName,
|
schemaName: item.schemaName,
|
||||||
},
|
},
|
||||||
commandType: 'insert',
|
commandType: 'insert',
|
||||||
fields: extractFields(item),
|
fields,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,17 +240,19 @@ function deleteToSql(item: ChangeSetItem): Delete {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function changeSetToSql(changeSet: ChangeSet): Command[] {
|
export function changeSetToSql(changeSet: ChangeSet): Command[] {
|
||||||
return [
|
return _.compact([
|
||||||
...changeSet.inserts.map(insertToSql),
|
...changeSet.inserts.map(insertToSql),
|
||||||
...changeSet.updates.map(updateToSql),
|
...changeSet.updates.map(updateToSql),
|
||||||
...changeSet.deletes.map(deleteToSql),
|
...changeSet.deletes.map(deleteToSql),
|
||||||
];
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function revertChangeSetRowChanges(changeSet: ChangeSet, definition: ChangeSetRowDefinition): ChangeSet {
|
export function revertChangeSetRowChanges(changeSet: ChangeSet, definition: ChangeSetRowDefinition): ChangeSet {
|
||||||
console.log('definition', definition);
|
// console.log('definition', definition);
|
||||||
const [field, item] = findExistingChangeSetItem(changeSet, definition);
|
const [field, item] = findExistingChangeSetItem(changeSet, definition);
|
||||||
console.log('field, item', field, item);
|
// console.log('field, item', field, item);
|
||||||
|
// console.log('changeSet[field]', changeSet[field]);
|
||||||
|
// console.log('changeSet[field] filtered', changeSet[field].filter((x) => x != item);
|
||||||
if (item)
|
if (item)
|
||||||
return {
|
return {
|
||||||
...changeSet,
|
...changeSet,
|
||||||
|
|||||||
@@ -379,6 +379,7 @@ export default function DataGridCore(props) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const insertedRows = getChangeSetInsertedRows(changeSet, display.baseTable);
|
const insertedRows = getChangeSetInsertedRows(changeSet, display.baseTable);
|
||||||
|
|
||||||
const rowCountNewIncluded = loadedRows.length + insertedRows.length;
|
const rowCountNewIncluded = loadedRows.length + insertedRows.length;
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
@@ -618,29 +619,29 @@ export default function DataGridCore(props) {
|
|||||||
let allRows = loadedAndInsertedRows;
|
let allRows = loadedAndInsertedRows;
|
||||||
|
|
||||||
if (selectedCells.length <= 1) {
|
if (selectedCells.length <= 1) {
|
||||||
if (isRegularCell(currentCell)) {
|
const startRow = isRegularCell(currentCell) ? currentCell[0] : loadedAndInsertedRows.length;
|
||||||
let rowIndex = currentCell[0];
|
const startCol = isRegularCell(currentCell) ? currentCell[1] : 0;
|
||||||
for (const rowData of pasteRows) {
|
let rowIndex = startRow;
|
||||||
if (rowIndex >= allRows.length) {
|
for (const rowData of pasteRows) {
|
||||||
chs = changeSetInsertNewRow(chs, display.baseTable);
|
if (rowIndex >= allRows.length) {
|
||||||
allRows = [...loadedRows, ...getChangeSetInsertedRows(chs, display.baseTable)];
|
chs = changeSetInsertNewRow(chs, display.baseTable);
|
||||||
}
|
allRows = [...loadedRows, ...getChangeSetInsertedRows(chs, display.baseTable)];
|
||||||
let colIndex = currentCell[1];
|
|
||||||
const row = allRows[rowIndex];
|
|
||||||
for (const cell of rowData) {
|
|
||||||
chs = setChangeSetValue(
|
|
||||||
chs,
|
|
||||||
display.getChangeSetField(
|
|
||||||
row,
|
|
||||||
realColumnUniqueNames[colIndex],
|
|
||||||
rowIndex >= loadedRows.length ? rowIndex - loadedRows.length : null
|
|
||||||
),
|
|
||||||
cell
|
|
||||||
);
|
|
||||||
colIndex += 1;
|
|
||||||
}
|
|
||||||
rowIndex += 1;
|
|
||||||
}
|
}
|
||||||
|
let colIndex = startCol;
|
||||||
|
const row = allRows[rowIndex];
|
||||||
|
for (const cell of rowData) {
|
||||||
|
chs = setChangeSetValue(
|
||||||
|
chs,
|
||||||
|
display.getChangeSetField(
|
||||||
|
row,
|
||||||
|
realColumnUniqueNames[colIndex],
|
||||||
|
rowIndex >= loadedRows.length ? rowIndex - loadedRows.length : null
|
||||||
|
),
|
||||||
|
cell == '(NULL)' ? null : cell
|
||||||
|
);
|
||||||
|
colIndex += 1;
|
||||||
|
}
|
||||||
|
rowIndex += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (selectedCells.length > 1) {
|
if (selectedCells.length > 1) {
|
||||||
@@ -671,14 +672,17 @@ export default function DataGridCore(props) {
|
|||||||
function copyToClipboard() {
|
function copyToClipboard() {
|
||||||
const rowIndexes = _.uniq(selectedCells.map((x) => x[0])).sort();
|
const rowIndexes = _.uniq(selectedCells.map((x) => x[0])).sort();
|
||||||
const lines = rowIndexes.map((rowIndex) => {
|
const lines = rowIndexes.map((rowIndex) => {
|
||||||
const colIndexes = selectedCells
|
let colIndexes = selectedCells
|
||||||
.filter((x) => x[0] == rowIndex)
|
.filter((x) => x[0] == rowIndex)
|
||||||
.map((x) => x[1])
|
.map((x) => x[1])
|
||||||
.sort();
|
.sort();
|
||||||
|
if (colIndexes.includes('header')) {
|
||||||
|
colIndexes = _.range(0, columnSizes.count);
|
||||||
|
}
|
||||||
const rowData = loadedAndInsertedRows[rowIndex];
|
const rowData = loadedAndInsertedRows[rowIndex];
|
||||||
const line = colIndexes
|
const line = colIndexes
|
||||||
.map((col) => realColumnUniqueNames[col])
|
.map((col) => realColumnUniqueNames[col])
|
||||||
.map((col) => (rowData[col] == null ? '' : rowData[col]))
|
.map((col) => (rowData[col] == null ? '(NULL)' : rowData[col]))
|
||||||
.join('\t');
|
.join('\t');
|
||||||
return line;
|
return line;
|
||||||
});
|
});
|
||||||
@@ -831,7 +835,9 @@ export default function DataGridCore(props) {
|
|||||||
|
|
||||||
const { errorMessage } = resp.data || {};
|
const { errorMessage } = resp.data || {};
|
||||||
if (errorMessage) {
|
if (errorMessage) {
|
||||||
showModal((modalState) => <ErrorMessageModal modalState={modalState} message={errorMessage} title='Error when saving' />);
|
showModal((modalState) => (
|
||||||
|
<ErrorMessageModal modalState={modalState} message={errorMessage} title="Error when saving" />
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
dispatchChangeSet({ type: 'reset', value: createChangeSet() });
|
dispatchChangeSet({ type: 'reset', value: createChangeSet() });
|
||||||
setConfirmSql(null);
|
setConfirmSql(null);
|
||||||
@@ -1017,6 +1023,7 @@ export default function DataGridCore(props) {
|
|||||||
if (row != null) {
|
if (row != null) {
|
||||||
let newRow = null;
|
let newRow = null;
|
||||||
const rowCount = rowCountNewIncluded;
|
const rowCount = rowCountNewIncluded;
|
||||||
|
if (rowCount == 0) return;
|
||||||
|
|
||||||
if (row < firstVisibleRowScrollIndex) newRow = row;
|
if (row < firstVisibleRowScrollIndex) newRow = row;
|
||||||
else if (row + 1 >= firstVisibleRowScrollIndex + visibleRowCountLowerBound)
|
else if (row + 1 >= firstVisibleRowScrollIndex + visibleRowCountLowerBound)
|
||||||
|
|||||||
@@ -46,6 +46,13 @@ export default function SqlEditor({
|
|||||||
};
|
};
|
||||||
}, [onKeyDown]);
|
}, [onKeyDown]);
|
||||||
|
|
||||||
|
// React.useEffect(() => {
|
||||||
|
// if (currentEditorRef.current.editor)
|
||||||
|
// currentEditorRef.current.editor.setOptions({
|
||||||
|
// showGutter: false,
|
||||||
|
// });
|
||||||
|
// }, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Wrapper ref={containerRef}>
|
<Wrapper ref={containerRef}>
|
||||||
<AceEditor
|
<AceEditor
|
||||||
|
|||||||
Reference in New Issue
Block a user