diff --git a/packages/web/src/buttons/ToolStripSaveButton.svelte b/packages/web/src/buttons/ToolStripSaveButton.svelte
new file mode 100644
index 00000000..bdbcc672
--- /dev/null
+++ b/packages/web/src/buttons/ToolStripSaveButton.svelte
@@ -0,0 +1,20 @@
+
+
+
diff --git a/packages/web/src/commands/stdCommands.ts b/packages/web/src/commands/stdCommands.ts
index 9ad588f5..c2902ff8 100644
--- a/packages/web/src/commands/stdCommands.ts
+++ b/packages/web/src/commands/stdCommands.ts
@@ -103,7 +103,7 @@ registerCommand({
category: 'New',
icon: 'img shell',
name: 'JavaScript Shell',
- menuName:' New JavaScript shell',
+ menuName: ' New JavaScript shell',
onClick: () => {
openNewTab({
title: 'Shell #',
@@ -480,7 +480,7 @@ export function registerFileCommands({
toolbar: true,
isRelatedToTab: true,
testEnabled: () => getCurrentEditor() != null,
- onClick: () => saveTabFile(getCurrentEditor(), false, folder, format, fileExtension),
+ onClick: () => saveTabFile(getCurrentEditor(), 'save', folder, format, fileExtension),
});
registerCommand({
id: idPrefix + '.saveAs',
@@ -488,7 +488,14 @@ export function registerFileCommands({
category,
name: 'Save As',
testEnabled: () => getCurrentEditor() != null,
- onClick: () => saveTabFile(getCurrentEditor(), true, folder, format, fileExtension),
+ onClick: () => saveTabFile(getCurrentEditor(), 'save-as', folder, format, fileExtension),
+ });
+ registerCommand({
+ id: idPrefix + '.saveToDisk',
+ category,
+ name: 'Save to disk',
+ testEnabled: () => getCurrentEditor() != null && getElectron() != null,
+ onClick: () => saveTabFile(getCurrentEditor(), 'save-to-disk', folder, format, fileExtension),
});
}
diff --git a/packages/web/src/tabs/DiagramTab.svelte b/packages/web/src/tabs/DiagramTab.svelte
index c3b0f9b2..f57ee5e4 100644
--- a/packages/web/src/tabs/DiagramTab.svelte
+++ b/packages/web/src/tabs/DiagramTab.svelte
@@ -26,6 +26,7 @@
import ToolStripContainer from '../buttons/ToolStripContainer.svelte';
import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte';
import invalidateCommands from '../commands/invalidateCommands';
+ import ToolStripSaveButton from '../buttons/ToolStripSaveButton.svelte';
export let tabid;
export let conid;
@@ -102,7 +103,7 @@
-
+
diff --git a/packages/web/src/tabs/QueryDesignTab.svelte b/packages/web/src/tabs/QueryDesignTab.svelte
index 5d9923ca..5a416d80 100644
--- a/packages/web/src/tabs/QueryDesignTab.svelte
+++ b/packages/web/src/tabs/QueryDesignTab.svelte
@@ -53,6 +53,7 @@
import ToolStripContainer from '../buttons/ToolStripContainer.svelte';
import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte';
import ToolStripExportButton, { createQuickExportHandlerRef } from '../buttons/ToolStripExportButton.svelte';
+ import ToolStripSaveButton from '../buttons/ToolStripSaveButton.svelte';
export let tabid;
export let conid;
@@ -293,7 +294,7 @@
-
+
diff --git a/packages/web/src/tabs/QueryTab.svelte b/packages/web/src/tabs/QueryTab.svelte
index b8f5e4be..43bc5244 100644
--- a/packages/web/src/tabs/QueryTab.svelte
+++ b/packages/web/src/tabs/QueryTab.svelte
@@ -73,6 +73,7 @@
import ToolStripExportButton, { createQuickExportHandlerRef } from '../buttons/ToolStripExportButton.svelte';
import ToolStripSplitButton from '../buttons/ToolStripSplitButton.svelte';
import ToolStripSplitDropDownButton from '../buttons/ToolStripSplitDropDownButton.svelte';
+import ToolStripSaveButton from '../buttons/ToolStripSaveButton.svelte';
export let tabid;
export let conid;
@@ -331,9 +332,8 @@
component={ToolStripSplitDropDownButton}
menu={[{ command: 'query.execute' }, { command: 'query.executeCurrent' }]}
/>
-
-
+
{#if resultCount == 1}
diff --git a/packages/web/src/tabs/ShellTab.svelte b/packages/web/src/tabs/ShellTab.svelte
index 840f4ca8..ad15ad46 100644
--- a/packages/web/src/tabs/ShellTab.svelte
+++ b/packages/web/src/tabs/ShellTab.svelte
@@ -39,6 +39,7 @@
import { getContext } from 'svelte';
import ToolStripCommandButton from '../buttons/ToolStripCommandButton.svelte';
import ToolStripContainer from '../buttons/ToolStripContainer.svelte';
+import ToolStripSaveButton from '../buttons/ToolStripSaveButton.svelte';
import invalidateCommands from '../commands/invalidateCommands';
import registerCommand from '../commands/registerCommand';
@@ -235,7 +236,7 @@ import ToolStripContainer from '../buttons/ToolStripContainer.svelte';
-
+
diff --git a/packages/web/src/utility/saveTabFile.ts b/packages/web/src/utility/saveTabFile.ts
index d41cbb00..778807fc 100644
--- a/packages/web/src/utility/saveTabFile.ts
+++ b/packages/web/src/utility/saveTabFile.ts
@@ -5,12 +5,13 @@ import { changeTab } from './common';
import SaveFileModal from '../modals/SaveFileModal.svelte';
import registerCommand from '../commands/registerCommand';
import { apiCall } from './api';
+import getElectron from './getElectron';
// export function saveTabEnabledStore(editorStore) {
// return derived(editorStore, editor => editor != null);
// }
-export default function saveTabFile(editor, saveAs, folder, format, fileExtension) {
+export default async function saveTabFile(editor, saveMode, folder, format, fileExtension) {
const tabs = get(openedTabs);
const tabid = editor.activator.tabid;
const data = editor.getData();
@@ -37,7 +38,29 @@ export default function saveTabFile(editor, saveAs, folder, format, fileExtensio
}));
};
- if ((savedFile || savedFilePath) && !saveAs) {
+ if (saveMode == 'save-to-disk') {
+ const electron = getElectron();
+ const file = await electron.showSaveDialog({
+ filters: [
+ { name: `${fileExtension.toUpperCase()} files`, extensions: [fileExtension] },
+ { name: `All files`, extensions: ['*'] },
+ ],
+ defaultPath: savedFilePath || `file.${fileExtension}`,
+ properties: ['showOverwriteConfirmation'],
+ });
+ if (file) {
+ await apiCall('files/save-as', { filePath: file, data, format });
+
+ const path = window.require('path');
+ const parsed = path.parse(file);
+
+ onSave(parsed.name, {
+ savedFile: null,
+ savedFolder: null,
+ savedFilePath: file,
+ });
+ }
+ } else if ((savedFile || savedFilePath) && saveMode == 'save') {
handleSave();
} else {
showModal(SaveFileModal, {