mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 20:06:00 +00:00
79 lines
2.3 KiB
TypeScript
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,
|
|
});
|
|
}
|
|
}
|