support remove fields for mongo

This commit is contained in:
Jan Prochazka
2024-08-26 13:25:51 +02:00
parent 8e17516d54
commit 32ebd86171
6 changed files with 63 additions and 9 deletions

View File

@@ -112,6 +112,8 @@ export interface DataEditorTypesBehaviour {
supportNullType?: boolean; supportNullType?: boolean;
supportJsonType?: boolean; supportJsonType?: boolean;
supportObjectIdType?: boolean; supportObjectIdType?: boolean;
supportFieldRemoval?: boolean;
} }
export interface FilterBehaviourProvider { export interface FilterBehaviourProvider {

View File

@@ -81,10 +81,21 @@
category: 'Data grid', category: 'Data grid',
name: 'Set NULL', name: 'Set NULL',
keyText: 'CtrlOrCommand+0', keyText: 'CtrlOrCommand+0',
testEnabled: () => getCurrentDataGrid()?.getGrider()?.editable, testEnabled: () =>
getCurrentDataGrid()?.getGrider()?.editable && !getCurrentDataGrid()?.getEditorTypes()?.supportFieldRemoval,
onClick: () => getCurrentDataGrid().setFixedValue(null), onClick: () => getCurrentDataGrid().setFixedValue(null),
}); });
registerCommand({
id: 'dataGrid.removeField',
category: 'Data grid',
name: 'Remove field',
keyText: 'CtrlOrCommand+0',
testEnabled: () =>
getCurrentDataGrid()?.getGrider()?.editable && getCurrentDataGrid()?.getEditorTypes()?.supportFieldRemoval,
onClick: () => getCurrentDataGrid().setFixedValue(undefined),
});
registerCommand({ registerCommand({
id: 'dataGrid.undo', id: 'dataGrid.undo',
category: 'Data grid', category: 'Data grid',
@@ -823,6 +834,10 @@
}); });
} }
export function getEditorTypes() {
return display?.driver?.dataEditorTypesBehaviour;
}
export function addJsonDocumentEnabled() { export function addJsonDocumentEnabled() {
return grider.editable; return grider.editable;
} }
@@ -1703,7 +1718,8 @@
{ command: 'dataGrid.deleteSelectedRows' }, { command: 'dataGrid.deleteSelectedRows' },
{ command: 'dataGrid.insertNewRow' }, { command: 'dataGrid.insertNewRow' },
{ command: 'dataGrid.cloneRows' }, { command: 'dataGrid.cloneRows' },
{ command: 'dataGrid.setNull' }, { command: 'dataGrid.setNull', hideDisabled: true },
{ command: 'dataGrid.removeField', hideDisabled: true },
{ placeTag: 'edit' }, { placeTag: 'edit' },
{ divider: true }, { divider: true },
{ command: 'dataGrid.findColumn' }, { command: 'dataGrid.findColumn' },

View File

@@ -48,10 +48,19 @@
category: 'Data form', category: 'Data form',
name: 'Set NULL', name: 'Set NULL',
keyText: 'CtrlOrCommand+0', keyText: 'CtrlOrCommand+0',
testEnabled: () => getCurrentDataForm() != null, testEnabled: () => getCurrentDataForm() != null && !getCurrentDataForm()?.getEditorTypes()?.supportFieldRemoval,
onClick: () => getCurrentDataForm().setFixedValue(null), onClick: () => getCurrentDataForm().setFixedValue(null),
}); });
registerCommand({
id: 'dataForm.removeField',
category: 'Data form',
name: 'Remove field',
keyText: 'CtrlOrCommand+0',
testEnabled: () => getCurrentDataForm() != null && getCurrentDataForm()?.getEditorTypes()?.supportFieldRemoval,
onClick: () => getCurrentDataForm().setFixedValue(undefined),
});
registerCommand({ registerCommand({
id: 'dataForm.undo', id: 'dataForm.undo',
category: 'Data form', category: 'Data form',
@@ -321,6 +330,10 @@
export const activator = createActivator('FormView', false); export const activator = createActivator('FormView', false);
export function getEditorTypes() {
return display?.driver?.dataEditorTypesBehaviour;
}
const handleTableMouseDown = event => { const handleTableMouseDown = event => {
if (event.target.closest('.buttonLike')) return; if (event.target.closest('.buttonLike')) return;
if (event.target.closest('.resizeHandleControl')) return; if (event.target.closest('.resizeHandleControl')) return;
@@ -411,10 +424,11 @@
{ divider: true }, { divider: true },
{ placeTag: 'save' }, { placeTag: 'save' },
{ command: 'dataForm.revertRowChanges' }, { command: 'dataForm.revertRowChanges' },
{ command: 'dataForm.setNull' }, { command: 'dataForm.setNull', hideDisabled: true },
{ command: 'dataForm.removeField', hideDisabled: true },
{ divider: true }, { divider: true },
{ command: 'dataForm.undo' }, { command: 'dataForm.undo', hideDisabled: true },
{ command: 'dataForm.redo' }, { command: 'dataForm.redo', hideDisabled: true },
{ divider: true }, { divider: true },
{ command: 'dataForm.goToFirst' }, { command: 'dataForm.goToFirst' },
{ command: 'dataForm.goToPrevious' }, { command: 'dataForm.goToPrevious' },

View File

@@ -121,7 +121,13 @@
const resp = await apiCall('database-connections/update-collection', { const resp = await apiCall('database-connections/update-collection', {
conid, conid,
database, database,
changeSet, changeSet: {
...changeSet,
updates: changeSet.updates.map(update => ({
...update,
fields: _.mapValues(update.fields, (v, k) => (v === undefined ? { $undefined: true } : v)),
})),
},
}); });
const { errorMessage } = resp || {}; const { errorMessage } = resp || {};
if (errorMessage) { if (errorMessage) {

View File

@@ -330,7 +330,14 @@ const driver = {
} }
} else { } else {
const resdoc = await collection.updateOne(convertObjectId(update.condition), { const resdoc = await collection.updateOne(convertObjectId(update.condition), {
$set: convertObjectId(update.fields), $set: convertObjectId(_.pickBy(update.fields, (v, k) => !v?.$undefined)),
$unset: _.fromPairs(
Object.keys(update.fields)
.filter((k) => update.fields[k]?.$undefined)
.map((k) => [k, ''])
),
// $set: convertObjectId(update.fields),
}); });
res.updated.push(resdoc._id); res.updated.push(resdoc._id);
} }

View File

@@ -2,6 +2,8 @@ const { driverBase } = global.DBGATE_PACKAGES['dbgate-tools'];
const { convertToMongoCondition, convertToMongoSort } = require('./convertToMongoCondition'); const { convertToMongoCondition, convertToMongoSort } = require('./convertToMongoCondition');
const Dumper = require('./Dumper'); const Dumper = require('./Dumper');
const { mongoSplitterOptions } = require('dbgate-query-splitter/lib/options'); const { mongoSplitterOptions } = require('dbgate-query-splitter/lib/options');
const _pickBy = require('lodash/pickBy');
const _fromPairs = require('lodash/fromPairs');
function jsonStringifyWithObjectId(obj) { function jsonStringifyWithObjectId(obj) {
return JSON.stringify(obj, undefined, 2).replace( return JSON.stringify(obj, undefined, 2).replace(
@@ -96,7 +98,12 @@ const driver = {
res += `db.${update.pureName}.updateOne(${jsonStringifyWithObjectId( res += `db.${update.pureName}.updateOne(${jsonStringifyWithObjectId(
update.condition update.condition
)}, ${jsonStringifyWithObjectId({ )}, ${jsonStringifyWithObjectId({
$set: update.fields, $set: _pickBy(update.fields, (v, k) => v !== undefined),
$unset: _fromPairs(
Object.keys(update.fields)
.filter((k) => update.fields[k] === undefined)
.map((k) => [k, ''])
),
})});\n`; })});\n`;
} }
} }
@@ -140,6 +147,8 @@ const driver = {
supportJsonType: true, supportJsonType: true,
supportObjectIdType: true, supportObjectIdType: true,
supportNullType: true, supportNullType: true,
supportFieldRemoval: true,
}, },
}; };