diff --git a/packages/web/src/appobj/ArchiveFileAppObject.svelte b/packages/web/src/appobj/ArchiveFileAppObject.svelte index 02c92fbdf..6eb04de32 100644 --- a/packages/web/src/appobj/ArchiveFileAppObject.svelte +++ b/packages/web/src/appobj/ArchiveFileAppObject.svelte @@ -41,7 +41,10 @@ } export const extractKey = data => data.fileName; - export const createMatcher = ({ fileName }) => filter => filterName(filter, fileName); + export const createMatcher = + ({ fileName }) => + filter => + filterName(filter, fileName); const ARCHIVE_ICONS = { 'table.yaml': 'img table', 'view.sql': 'img view', @@ -67,7 +70,7 @@ import ImportExportModal from '../modals/ImportExportModal.svelte'; import { showModal } from '../modals/modalTools'; - import { archiveFilesAsDataSheets, currentArchive, extensions, getCurrentDatabase } from '../stores'; + import { archiveFilesAsDataSheets, currentArchive, extensions, getCurrentDatabase, getExtensions } from '../stores'; import createQuickExportMenu from '../utility/createQuickExportMenu'; import { exportQuickExportFile } from '../utility/exportFileTools'; @@ -198,6 +201,25 @@ ), data.fileType.endsWith('.sql') && { text: 'Open SQL', onClick: handleOpenSqlFile }, data.fileType.endsWith('.yaml') && { text: 'Open YAML', onClick: handleOpenYamlFile }, + data.fileType == 'jsonl' && { + text: 'Open in profiler', + submenu: getExtensions() + .drivers.filter(eng => eng.profilerFormatterFunction) + .map(eng => ({ + text: eng.title, + onClick: () => { + openNewTab({ + title: 'Profiler', + icon: 'img profiler', + tabComponent: 'ProfilerTab', + props: { + jslid: `archive://${data.folderName}/${data.fileName}`, + formatterFunction: eng.profilerFormatterFunction, + }, + }); + }, + })), + }, ]; } diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts index 382753290..fcfe0baf2 100644 --- a/packages/web/src/stores.ts +++ b/packages/web/src/stores.ts @@ -216,7 +216,7 @@ export const getCurrentDatabase = () => currentDatabaseValue; let currentSettingsValue = null; export const getCurrentSettings = () => currentSettingsValue || {}; -let extensionsValue = null; +let extensionsValue: ExtensionsDirectory = null; extensions.subscribe(value => { extensionsValue = value; }); diff --git a/packages/web/src/tabs/ProfilerTab.svelte b/packages/web/src/tabs/ProfilerTab.svelte index c57c2e9f4..5f2b7caf1 100644 --- a/packages/web/src/tabs/ProfilerTab.svelte +++ b/packages/web/src/tabs/ProfilerTab.svelte @@ -8,7 +8,7 @@ category: 'Profiler', name: 'Start profiling', icon: 'icon play', - testEnabled: () => getCurrentEditor() && !getCurrentEditor()?.isProfiling(), + testEnabled: () => getCurrentEditor()?.startProfilingEnabled(), onClick: () => getCurrentEditor().startProfiling(), }); @@ -17,7 +17,7 @@ category: 'Profiler', name: 'Stop profiling', icon: 'icon play-stop', - testEnabled: () => getCurrentEditor()?.isProfiling(), + testEnabled: () => getCurrentEditor()?.stopProfilingEnabled(), onClick: () => getCurrentEditor().stopProfiling(), }); @@ -55,9 +55,10 @@ export let conid; export let database; + export let jslid; + export let formatterFunction; let profiling = false; - let jslid; let sessionId; let intervalId; @@ -104,6 +105,10 @@ invalidateCommands(); } + export function startProfilingEnabled() { + return conid && database && !isProfiling; + } + export function stopProfiling() { profiling = false; apiCall('sessions/stop-profiler', { sesid: sessionId }); @@ -111,6 +116,10 @@ invalidateCommands(); } + export function stopProfilingEnabled() { + return conid && database && isProfiling; + } + export function saveEnabled() { return !!jslid; } @@ -132,7 +141,11 @@ {#if jslid} - + {:else} {/if}