mirror of
https://github.com/dbgate/dbgate
synced 2024-11-15 08:16:28 +00:00
124 lines
3.4 KiB
Svelte
124 lines
3.4 KiB
Svelte
|
<script lang="ts" context="module">
|
||
|
async function openTextFile(fileName, fileType, folderName, tabComponent, icon) {
|
||
|
const connProps: any = {};
|
||
|
let tooltip = undefined;
|
||
|
|
||
|
const resp = await apiCall('files/load', {
|
||
|
folder: 'app:' + folderName,
|
||
|
file: fileName + '.' + fileType,
|
||
|
format: 'text',
|
||
|
});
|
||
|
|
||
|
openNewTab(
|
||
|
{
|
||
|
title: fileName,
|
||
|
icon,
|
||
|
tabComponent,
|
||
|
tooltip,
|
||
|
props: {
|
||
|
savedFile: fileName + '.' + fileType,
|
||
|
savedFolder: 'app:' + folderName,
|
||
|
savedFormat: 'text',
|
||
|
appFolder: folderName,
|
||
|
...connProps,
|
||
|
},
|
||
|
},
|
||
|
{ editor: resp }
|
||
|
);
|
||
|
}
|
||
|
|
||
|
export const extractKey = data => data.fileName;
|
||
|
export const createMatcher = ({ fileName }) => filter => filterName(filter, fileName);
|
||
|
const APP_ICONS = {
|
||
|
'command.sql': 'img app-command',
|
||
|
'query.sql': 'img app-query',
|
||
|
};
|
||
|
|
||
|
function getAppIcon( data) {
|
||
|
return APP_ICONS[data.fileType];
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<script lang="ts">
|
||
|
import _ from 'lodash';
|
||
|
import { filterName } from 'dbgate-tools';
|
||
|
import ImportExportModal from '../modals/ImportExportModal.svelte';
|
||
|
import { showModal } from '../modals/modalTools';
|
||
|
|
||
|
import { archiveFilesAsDataSheets, currentArchive, extensions, getCurrentDatabase } from '../stores';
|
||
|
|
||
|
import createQuickExportMenu from '../utility/createQuickExportMenu';
|
||
|
import { exportElectronFile } from '../utility/exportElectronFile';
|
||
|
import openNewTab from '../utility/openNewTab';
|
||
|
import AppObjectCore from './AppObjectCore.svelte';
|
||
|
import getConnectionLabel from '../utility/getConnectionLabel';
|
||
|
import InputTextModal from '../modals/InputTextModal.svelte';
|
||
|
import ConfirmModal from '../modals/ConfirmModal.svelte';
|
||
|
import {
|
||
|
isArchiveFileMarkedAsDataSheet,
|
||
|
markArchiveFileAsDataSheet,
|
||
|
markArchiveFileAsReadonly,
|
||
|
} from '../utility/archiveTools';
|
||
|
import { apiCall } from '../utility/api';
|
||
|
|
||
|
export let data;
|
||
|
|
||
|
const handleRename = () => {
|
||
|
showModal(InputTextModal, {
|
||
|
value: data.fileName,
|
||
|
label: 'New file name',
|
||
|
header: 'Rename file',
|
||
|
onConfirm: newFile => {
|
||
|
apiCall('apps/rename-file', {
|
||
|
file: data.fileName,
|
||
|
folder: data.folderName,
|
||
|
fileType: data.fileType,
|
||
|
newFile,
|
||
|
});
|
||
|
},
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const handleDelete = () => {
|
||
|
showModal(ConfirmModal, {
|
||
|
message: `Really delete file ${data.fileName}?`,
|
||
|
onConfirm: () => {
|
||
|
apiCall('apps/delete-file', {
|
||
|
file: data.fileName,
|
||
|
folder: data.folderName,
|
||
|
fileType: data.fileType,
|
||
|
});
|
||
|
},
|
||
|
});
|
||
|
};
|
||
|
const handleClick = () => {
|
||
|
if (data.fileType.endsWith('.sql')) {
|
||
|
handleOpenSqlFile();
|
||
|
}
|
||
|
};
|
||
|
const handleOpenSqlFile = () => {
|
||
|
openTextFile(data.fileName, data.fileType, data.folderName, 'QueryTab', 'img sql-file');
|
||
|
};
|
||
|
const handleOpenYamlFile = () => {
|
||
|
openTextFile(data.fileName, data.fileType, data.folderName, 'YamlEditorTab', 'img yaml');
|
||
|
};
|
||
|
|
||
|
function createMenu() {
|
||
|
return [
|
||
|
{ text: 'Delete', onClick: handleDelete },
|
||
|
{ text: 'Rename', onClick: handleRename },
|
||
|
data.fileType.endsWith('.sql') && { text: 'Open SQL', onClick: handleOpenSqlFile },
|
||
|
// data.fileType.endsWith('.yaml') && { text: 'Open YAML', onClick: handleOpenYamlFile },
|
||
|
];
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<AppObjectCore
|
||
|
{...$$restProps}
|
||
|
{data}
|
||
|
title={data.fileLabel}
|
||
|
icon={getAppIcon( data)}
|
||
|
menu={createMenu}
|
||
|
on:click={handleClick}
|
||
|
/>
|