Files
dbgate/packages/web/src/utility/saveTabFile.ts
2022-09-29 13:58:09 +02:00

79 lines
2.3 KiB
TypeScript

import { derived, get } from 'svelte/store';
import { showModal } from '../modals/modalTools';
import { openedTabs } from '../stores';
import { changeTab, markTabSaved } 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 async function saveTabFile(editor, saveMode, folder, format, fileExtension) {
const tabs = get(openedTabs);
const tabid = editor.activator.tabid;
const data = editor.getData();
const { savedFile, savedFilePath, savedFolder } = tabs.find(x => x.tabid == tabid).props || {};
const handleSave = async () => {
if (savedFile) {
await apiCall('files/save', { folder: savedFolder || folder, file: savedFile, data, format });
}
if (savedFilePath) {
await apiCall('files/save-as', { filePath: savedFilePath, data, format });
}
markTabSaved(tabid);
};
const onSave = (title, newProps) => {
changeTab(tabid, tab => ({
...tab,
title,
unsaved: false,
props: {
...tab.props,
savedFormat: format,
...newProps,
},
}));
};
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, {
data,
folder,
format,
fileExtension,
name: savedFile || 'newFile',
filePath: savedFilePath,
onSave,
});
}
}