diff --git a/packages/web/src/appobj/ArchiveFileAppObject.svelte b/packages/web/src/appobj/ArchiveFileAppObject.svelte index c563c0307..a92da5cd0 100644 --- a/packages/web/src/appobj/ArchiveFileAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFileAppObject.svelte @@ -12,15 +12,17 @@ }); } - async function openSqlFile(fileName, fileType, folderName) { + async function openTextFile(fileName, fileType, folderName, tabComponent, icon, wantConnection) { const connProps: any = {}; let tooltip = undefined; - const connection = _.get(getCurrentDatabase(), 'connection') || {}; - const database = _.get(getCurrentDatabase(), 'name'); - connProps.conid = connection._id; - connProps.database = database; - tooltip = `${getConnectionLabel(connection)}\n${database}`; + if (wantConnection) { + const connection = _.get(getCurrentDatabase(), 'connection') || {}; + const database = _.get(getCurrentDatabase(), 'name'); + connProps.conid = connection._id; + connProps.database = database; + tooltip = `${getConnectionLabel(connection)}\n${database}`; + } const resp = await axiosInstance.post('files/load', { folder: 'archive:' + folderName, file: fileName + '.' + fileType, @@ -30,8 +32,8 @@ openNewTab( { title: fileName, - icon: 'img sql-file', - tabComponent: 'QueryTab', + icon, + tabComponent, tooltip, props: { savedFile: fileName + '.' + fileType, @@ -68,7 +70,6 @@ import axiosInstance from '../utility/axiosInstance'; import createQuickExportMenu from '../utility/createQuickExportMenu'; import { exportElectronFile } from '../utility/exportElectronFile'; - import { openSqliteFile } from '../utility/openElectronFile'; import openNewTab from '../utility/openNewTab'; import AppObjectCore from './AppObjectCore.svelte'; import getConnectionLabel from '../utility/getConnectionLabel'; @@ -101,10 +102,18 @@ }; const handleClick = () => { if (data.fileType == 'jsonl') openArchive(data.fileName, data.folderName); - if (data.fileType.endsWith('.sql')) openSqlFile(data.fileName, data.fileType, data.folderName); + if (data.fileType.endsWith('.sql')) { + handleOpenSqlFile(); + } + if (data.fileType.endsWith('.yaml')) { + handleOpenYamlFile(); + } }; const handleOpenSqlFile = () => { - openSqlFile(data.fileName, data.fileType, data.folderName); + openTextFile(data.fileName, data.fileType, data.folderName, 'QueryTab', 'img sql-file', true); + }; + const handleOpenYamlFile = () => { + openTextFile(data.fileName, data.fileType, data.folderName, 'YamlEditorTab', 'img yaml', true); }; function createMenu() { @@ -139,6 +148,7 @@ }, }, data.fileType.endsWith('.sql') && { text: 'Open SQL', onClick: handleOpenSqlFile }, + data.fileType.endsWith('.yaml') && { text: 'Open YAML', onClick: handleOpenYamlFile }, ]; } diff --git a/packages/web/src/icons/FontIcon.svelte b/packages/web/src/icons/FontIcon.svelte index 63a5ca200..833bf73ed 100644 --- a/packages/web/src/icons/FontIcon.svelte +++ b/packages/web/src/icons/FontIcon.svelte @@ -96,6 +96,7 @@ 'img preview': 'mdi mdi-file-find color-icon-red', 'img favorite': 'mdi mdi-star color-icon-yellow', 'img query-design': 'mdi mdi-vector-polyline-edit color-icon-red', + 'img yaml': 'mdi mdi-code-brackets color-icon-red', 'img free-table': 'mdi mdi-table color-icon-green', 'img macro': 'mdi mdi-hammer-wrench', diff --git a/packages/web/src/query/AceEditor.svelte b/packages/web/src/query/AceEditor.svelte index a739d424f..363303f8e 100644 --- a/packages/web/src/query/AceEditor.svelte +++ b/packages/web/src/query/AceEditor.svelte @@ -10,6 +10,7 @@ import 'ace-builds/src-noconflict/mode-sqlserver'; import 'ace-builds/src-noconflict/mode-json'; import 'ace-builds/src-noconflict/mode-javascript'; + import 'ace-builds/src-noconflict/mode-yaml'; import 'ace-builds/src-noconflict/mode-markdown'; import 'ace-builds/src-noconflict/ext-searchbox'; import 'ace-builds/src-noconflict/ext-language_tools'; diff --git a/packages/web/src/tabs/YamlEditorTab.svelte b/packages/web/src/tabs/YamlEditorTab.svelte new file mode 100644 index 000000000..6cab222f6 --- /dev/null +++ b/packages/web/src/tabs/YamlEditorTab.svelte @@ -0,0 +1,89 @@ + + + + + setEditorData(e.detail)} + on:focus={() => { + activator.activate(); + invalidateCommands(); + }} + bind:this={domEditor} + mode="yaml" +/> diff --git a/packages/web/src/tabs/index.js b/packages/web/src/tabs/index.js index d9cc41ab7..5d2bdc252 100644 --- a/packages/web/src/tabs/index.js +++ b/packages/web/src/tabs/index.js @@ -14,6 +14,7 @@ import * as MarkdownPreviewTab from './MarkdownPreviewTab.svelte'; import * as FavoriteEditorTab from './FavoriteEditorTab.svelte'; import * as QueryDesignTab from './QueryDesignTab.svelte'; import * as CommandListTab from './CommandListTab.svelte'; +import * as YamlEditorTab from './YamlEditorTab.svelte'; export default { TableDataTab, @@ -32,4 +33,5 @@ export default { FavoriteEditorTab, QueryDesignTab, CommandListTab, + YamlEditorTab, }; diff --git a/packages/web/src/widgets/ArchiveWidget.svelte b/packages/web/src/widgets/ArchiveWidget.svelte index 72e6d51fd..b326dd424 100644 --- a/packages/web/src/widgets/ArchiveWidget.svelte +++ b/packages/web/src/widgets/ArchiveWidget.svelte @@ -8,10 +8,10 @@ - + - +