rename table ctx menu

This commit is contained in:
Jan Prochazka
2021-09-10 20:26:45 +02:00
parent 016e96d0e6
commit a5f39da8ae
3 changed files with 66 additions and 24 deletions

View File

@@ -44,6 +44,10 @@
label: 'Drop table',
isDrop: true,
},
{
label: 'Rename table',
isRename: true,
},
{
label: 'Query designer',
isQueryDesigner: true,
@@ -353,6 +357,7 @@
import createQuickExportMenu from '../utility/createQuickExportMenu';
import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte';
import axiosInstance from '../utility/axiosInstance';
import { alterDatabaseDialog, renameDatabaseObjectDialog } from '../utility/alterDatabaseTools';
export let data;
@@ -508,34 +513,20 @@
});
} else if (menu.isDrop) {
const { conid, database } = data;
const db = generateDbPairingId(await getDatabaseInfo({ conid, database }));
console.log('DB', db);
const driver = await getDriver();
const dbUpdated = {
alterDatabaseDialog(conid, database, db => ({
...db,
[data.objectTypeField]: (db[data.objectTypeField] || []).filter(
x => x.schemaName != data.schemaName || x.pureName != data.pureName
),
};
const sql = getAlterDatabaseScript(db, dbUpdated, {}, db, driver);
showModal(ConfirmSqlModal, {
sql,
onConfirm: async () => {
const resp = await axiosInstance.request({
url: 'database-connections/run-script',
method: 'post',
params: {
conid,
database,
},
data: { sql },
});
await axiosInstance.post('database-connections/sync-model', { conid, database });
},
engine: driver.engine,
});
}));
} else if (menu.isRename) {
const { conid, database } = data;
renameDatabaseObjectDialog(conid, database, data.pureName, (db, newName) => ({
...db,
[data.objectTypeField]: (db[data.objectTypeField] || []).map(x =>
x.schemaName == data.schemaName && x.pureName == data.pureName ? { ...x, pureName: newName } : x
),
}));
} else {
openDatabaseObjectDetail(menu.tab, menu.scriptTemplate, data, menu.forceNewTab, menu.initialData);
}

View File

@@ -150,3 +150,9 @@ useSettings().subscribe(value => {
invalidateCommands();
});
export const getCurrentSettings = () => currentSettingsValue || {};
let extensionsValue = null;
extensions.subscribe(value => {
extensionsValue = value;
});
export const getExtensions = () => extensionsValue;

View File

@@ -0,0 +1,45 @@
import { findEngineDriver, generateDbPairingId, getAlterDatabaseScript } from 'dbgate-tools';
import InputTextModal from '../modals/InputTextModal.svelte';
import { showModal } from '../modals/modalTools';
import { getExtensions } from '../stores';
import { getConnectionInfo, getDatabaseInfo } from './metadataLoaders';
import ConfirmSqlModal from '../modals/ConfirmSqlModal.svelte';
import axiosInstance from './axiosInstance';
export async function alterDatabaseDialog(conid, database, updateFunc) {
const conn = await getConnectionInfo({ conid });
const driver = findEngineDriver(conn, getExtensions());
const db = generateDbPairingId(await getDatabaseInfo({ conid, database }));
const dbUpdated = updateFunc(db);
const sql = getAlterDatabaseScript(db, dbUpdated, {}, db, driver);
showModal(ConfirmSqlModal, {
sql,
onConfirm: async () => {
const resp = await axiosInstance.request({
url: 'database-connections/run-script',
method: 'post',
params: {
conid,
database,
},
data: { sql },
});
await axiosInstance.post('database-connections/sync-model', { conid, database });
},
engine: driver.engine,
});
}
export async function renameDatabaseObjectDialog(conid, database, oldName, updateFunc) {
showModal(InputTextModal, {
value: oldName,
label: 'New name',
header: 'Rename object',
onConfirm: newName => {
alterDatabaseDialog(conid, database, db => updateFunc(db, newName));
},
});
}