SYNC: Handle error when saving to team files

This commit is contained in:
SPRINX0\prochazka
2025-11-24 17:34:40 +01:00
committed by Diflow
parent 67ee130a9e
commit 5553e3cd8d
4 changed files with 44 additions and 21 deletions

View File

@@ -115,7 +115,7 @@ registerCommand({
toolbar: true, toolbar: true,
icon: 'icon new-connection', icon: 'icon new-connection',
toolbarName: __t('command.new.connection', { defaultMessage: 'Add connection' }), toolbarName: __t('command.new.connection', { defaultMessage: 'Add connection' }),
category: __t('command.new', { defaultMessage: 'New'}), category: __t('command.new', { defaultMessage: 'New' }),
toolbarOrder: 1, toolbarOrder: 1,
name: __t('command.new.connection', { defaultMessage: 'Connection' }), name: __t('command.new.connection', { defaultMessage: 'Connection' }),
testEnabled: () => !getCurrentConfig()?.runAsPortal && !getCurrentConfig()?.storageDatabase, testEnabled: () => !getCurrentConfig()?.runAsPortal && !getCurrentConfig()?.storageDatabase,
@@ -561,7 +561,10 @@ registerCommand({
testEnabled: () => true, testEnabled: () => true,
onClick: () => { onClick: () => {
showModal(ConfirmModal, { showModal(ConfirmModal, {
message: _t('command.file.resetLayoutConfirm', { defaultMessage: 'Really reset layout data? All opened tabs, settings and layout data will be lost. Connections and saved files will be preserved. After this, restart DbGate for applying changes.' }), message: _t('command.file.resetLayoutConfirm', {
defaultMessage:
'Really reset layout data? All opened tabs, settings and layout data will be lost. Connections and saved files will be preserved. After this, restart DbGate for applying changes.',
}),
onConfirm: async () => { onConfirm: async () => {
await apiCall('config/delete-settings'); await apiCall('config/delete-settings');
localStorage.clear(); localStorage.clear();
@@ -665,7 +668,9 @@ registerCommand({
'currentArchive', 'currentArchive',
]; ];
for (const key of keys) removeLocalStorage(key); for (const key of keys) removeLocalStorage(key);
showSnackbarSuccess(_t('command.view.restart', { defaultMessage: 'Restart DbGate (or reload on web) for applying changes' })); showSnackbarSuccess(
_t('command.view.restart', { defaultMessage: 'Restart DbGate (or reload on web) for applying changes' })
);
}, },
}); });
@@ -799,7 +804,9 @@ registerCommand({
registerCommand({ registerCommand({
id: 'file.exit', id: 'file.exit',
category: __t('command.file', { defaultMessage: 'File' }), category: __t('command.file', { defaultMessage: 'File' }),
name: isMac() ? __t('command.file.quit', { defaultMessage: 'Quit' }) : __t('command.file.exit', { defaultMessage: 'Exit' }), name: isMac()
? __t('command.file.quit', { defaultMessage: 'Quit' })
: __t('command.file.exit', { defaultMessage: 'Exit' }),
// keyText: isMac() ? 'Command+Q' : null, // keyText: isMac() ? 'Command+Q' : null,
testEnabled: () => getElectron() != null, testEnabled: () => getElectron() != null,
onClick: () => getElectron().send('quit-app'), onClick: () => getElectron().send('quit-app'),
@@ -862,6 +869,7 @@ export function registerFileCommands({
undoRedo = false, undoRedo = false,
executeAdditionalCondition = null, executeAdditionalCondition = null,
copyPaste = false, copyPaste = false,
defaultTeamFolder = false,
}) { }) {
if (save) { if (save) {
registerCommand({ registerCommand({
@@ -874,7 +882,7 @@ export function registerFileCommands({
toolbar: true, toolbar: true,
isRelatedToTab: true, isRelatedToTab: true,
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => saveTabFile(getCurrentEditor(), 'save', folder, format, fileExtension), onClick: () => saveTabFile(getCurrentEditor(), 'save', folder, format, fileExtension, defaultTeamFolder),
}); });
registerCommand({ registerCommand({
id: idPrefix + '.saveAs', id: idPrefix + '.saveAs',
@@ -882,14 +890,14 @@ export function registerFileCommands({
category, category,
name: __t('command.saveAs', { defaultMessage: 'Save As' }), name: __t('command.saveAs', { defaultMessage: 'Save As' }),
testEnabled: () => getCurrentEditor() != null, testEnabled: () => getCurrentEditor() != null,
onClick: () => saveTabFile(getCurrentEditor(), 'save-as', folder, format, fileExtension), onClick: () => saveTabFile(getCurrentEditor(), 'save-as', folder, format, fileExtension, defaultTeamFolder),
}); });
registerCommand({ registerCommand({
id: idPrefix + '.saveToDisk', id: idPrefix + '.saveToDisk',
category, category,
name: __t('command.saveToDisk', { defaultMessage: 'Save to disk' }), name: __t('command.saveToDisk', { defaultMessage: 'Save to disk' }),
testEnabled: () => getCurrentEditor() != null && getElectron() != null, testEnabled: () => getCurrentEditor() != null && getElectron() != null,
onClick: () => saveTabFile(getCurrentEditor(), 'save-to-disk', folder, format, fileExtension), onClick: () => saveTabFile(getCurrentEditor(), 'save-to-disk', folder, format, fileExtension, defaultTeamFolder),
}); });
} }

View File

@@ -14,6 +14,8 @@
import { closeCurrentModal, showModal } from './modalTools'; import { closeCurrentModal, showModal } from './modalTools';
import FormCloudFolderSelect from '../forms/FormCloudFolderSelect.svelte'; import FormCloudFolderSelect from '../forms/FormCloudFolderSelect.svelte';
import FormCheckboxField from '../forms/FormCheckboxField.svelte'; import FormCheckboxField from '../forms/FormCheckboxField.svelte';
import { useConfig } from '../utility/metadataLoaders';
import { showSnackbarError } from '../utility/snackbar';
export let data; export let data;
export let name; export let name;
@@ -24,26 +26,37 @@
export let onSave = undefined; export let onSave = undefined;
export let folid; export let folid;
export let skipLocal = false; export let skipLocal = false;
export let defaultTeamFolder = false;
// export let cntid; // export let cntid;
const values = writable({ name, cloudFolder: folid ?? '__local' }); const configValue = useConfig();
const values = writable({
name,
cloudFolder: folid ?? '__local',
saveToTeamFolder: !!(getCurrentConfig()?.storageDatabase && defaultTeamFolder),
});
const electron = getElectron(); const electron = getElectron();
const handleSubmit = async e => { const handleSubmit = async e => {
const { name, cloudFolder } = e.detail; const { name, cloudFolder } = e.detail;
if ($values['saveToTeamFolder']) { if ($values['saveToTeamFolder']) {
const { teamFileId } = await apiCall('team-files/create-new', { fileType: folder, file: name, data }); const resp = await apiCall('team-files/create-new', { fileType: folder, file: name, data });
closeCurrentModal(); if (resp.apiErrorMessage) {
if (onSave) { showSnackbarError(resp.apiErrorMessage);
onSave(name, { } else if (resp.teamFileId) {
savedFile: name, closeCurrentModal();
savedFolder: folder, if (onSave) {
savedFilePath: null, onSave(name, {
savedCloudFolderId: null, savedFile: name,
savedCloudContentId: null, savedFolder: folder,
savedTeamFileId: teamFileId, savedFilePath: null,
}); savedCloudFolderId: null,
savedCloudContentId: null,
savedTeamFileId: resp.teamFileId,
});
}
} }
} else if (cloudFolder === '__local') { } else if (cloudFolder === '__local') {
await apiCall('files/save', { folder, file: name, data, format }); await apiCall('files/save', { folder, file: name, data, format });
@@ -124,7 +137,7 @@
]} ]}
/> />
{/if} {/if}
{#if getCurrentConfig().storageDatabase} {#if $configValue?.storageDatabase}
<FormCheckboxField label="Save to team folder" name="saveToTeamFolder" /> <FormCheckboxField label="Save to team folder" name="saveToTeamFolder" />
{/if} {/if}

View File

@@ -8,6 +8,7 @@
folder: 'diagrams', folder: 'diagrams',
format: 'json', format: 'json',
fileExtension: 'diagram', fileExtension: 'diagram',
defaultTeamFolder: true,
undoRedo: true, undoRedo: true,
}); });

View File

@@ -11,7 +11,7 @@ import getElectron from './getElectron';
// return derived(editorStore, editor => editor != null); // return derived(editorStore, editor => editor != null);
// } // }
export default async function saveTabFile(editor, saveMode, folder, format, fileExtension) { export default async function saveTabFile(editor, saveMode, folder, format, fileExtension, defaultTeamFolder) {
const tabs = get(openedTabs); const tabs = get(openedTabs);
const tabid = editor.activator.tabid; const tabid = editor.activator.tabid;
const data = editor.getData(); const data = editor.getData();
@@ -94,6 +94,7 @@ export default async function saveTabFile(editor, saveMode, folder, format, file
filePath: savedFilePath, filePath: savedFilePath,
onSave, onSave,
folid: savedCloudFolderId, folid: savedCloudFolderId,
defaultTeamFolder,
// cntid: savedCloudContentId, // cntid: savedCloudContentId,
}); });
} }