mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-24 23:26:00 +00:00
plugins widget
This commit is contained in:
31
packages/web/src/plugins/AvailablePluginsList.svelte
Normal file
31
packages/web/src/plugins/AvailablePluginsList.svelte
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import _ from 'lodash';
|
||||||
|
|
||||||
|
import SearchBoxWrapper from '../elements/SearchBoxWrapper.svelte';
|
||||||
|
import SearchInput from '../elements/SearchInput.svelte';
|
||||||
|
import useFetch from '../utility/useFetch';
|
||||||
|
import WidgetsInnerContainer from '../widgets/WidgetsInnerContainer.svelte';
|
||||||
|
import PluginsList from './PluginsList.svelte';
|
||||||
|
|
||||||
|
let filter = '';
|
||||||
|
let search = '';
|
||||||
|
|
||||||
|
$: plugins = useFetch({
|
||||||
|
url: 'plugins/search',
|
||||||
|
params: {
|
||||||
|
filter: search,
|
||||||
|
},
|
||||||
|
defaultValue: [],
|
||||||
|
});
|
||||||
|
|
||||||
|
const setDebouncedFilter = _.debounce(value => (search = value), 500);
|
||||||
|
|
||||||
|
$: setDebouncedFilter(filter);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<SearchBoxWrapper>
|
||||||
|
<SearchInput placeholder="Search extensions on web" {filter} bind:value={filter} />
|
||||||
|
</SearchBoxWrapper>
|
||||||
|
<WidgetsInnerContainer>
|
||||||
|
<PluginsList plugins={$plugins} />
|
||||||
|
</WidgetsInnerContainer>
|
||||||
11
packages/web/src/plugins/InstalledPluginsList.svelte
Normal file
11
packages/web/src/plugins/InstalledPluginsList.svelte
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { useInstalledPlugins } from '../utility/metadataLoaders';
|
||||||
|
import PluginsList from './PluginsList.svelte';
|
||||||
|
import WidgetsInnerContainer from '../widgets/WidgetsInnerContainer.svelte';
|
||||||
|
|
||||||
|
$: plugins = useInstalledPlugins();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<WidgetsInnerContainer>
|
||||||
|
<PluginsList plugins={$plugins} />
|
||||||
|
</WidgetsInnerContainer>
|
||||||
51
packages/web/src/plugins/PluginsList.svelte
Normal file
51
packages/web/src/plugins/PluginsList.svelte
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import openNewTab from '../utility/openNewTab';
|
||||||
|
|
||||||
|
import { extractPluginAuthor, extractPluginIcon } from './manifestExtractors';
|
||||||
|
|
||||||
|
export let plugins: any[];
|
||||||
|
|
||||||
|
function openPlugin(packageManifest) {
|
||||||
|
openNewTab({
|
||||||
|
title: packageManifest.name,
|
||||||
|
icon: 'icon plugin',
|
||||||
|
tabComponent: 'PluginTab',
|
||||||
|
props: {
|
||||||
|
packageName: packageManifest.name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#each plugins as packageManifest (packageManifest.name)}
|
||||||
|
<div class="wrapper" on:click={() => openPlugin(packageManifest)}>
|
||||||
|
<img class="icon" src={extractPluginIcon(packageManifest)} />
|
||||||
|
<div class="ml-1">
|
||||||
|
<div class="flex">
|
||||||
|
<div class="bold">{packageManifest.name}</div>
|
||||||
|
<div class="ml-1">{packageManifest.version}</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{packageManifest.description}
|
||||||
|
</div>
|
||||||
|
<div class="bold">
|
||||||
|
{extractPluginAuthor(packageManifest)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.wrapper {
|
||||||
|
margin: 1px 3px 10px 5px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.wrapper:hover {
|
||||||
|
background-color: var(--theme-bg-selected);
|
||||||
|
}
|
||||||
|
.icon {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -3,7 +3,6 @@ import * as ViewDataTab from './ViewDataTab.svelte';
|
|||||||
import * as TableStructureTab from './TableStructureTab.svelte';
|
import * as TableStructureTab from './TableStructureTab.svelte';
|
||||||
import * as QueryTab from './QueryTab.svelte';
|
import * as QueryTab from './QueryTab.svelte';
|
||||||
import * as ShellTab from './ShellTab.svelte';
|
import * as ShellTab from './ShellTab.svelte';
|
||||||
// import InfoPageTab from './InfoPageTab';
|
|
||||||
import * as ArchiveFileTab from './ArchiveFileTab.svelte';
|
import * as ArchiveFileTab from './ArchiveFileTab.svelte';
|
||||||
import * as FreeTableTab from './FreeTableTab.svelte';
|
import * as FreeTableTab from './FreeTableTab.svelte';
|
||||||
// import PluginTab from './PluginTab';
|
// import PluginTab from './PluginTab';
|
||||||
@@ -19,7 +18,6 @@ export default {
|
|||||||
ViewDataTab,
|
ViewDataTab,
|
||||||
TableStructureTab,
|
TableStructureTab,
|
||||||
QueryTab,
|
QueryTab,
|
||||||
// InfoPageTab,
|
|
||||||
ShellTab,
|
ShellTab,
|
||||||
ArchiveFileTab,
|
ArchiveFileTab,
|
||||||
FreeTableTab,
|
FreeTableTab,
|
||||||
|
|||||||
16
packages/web/src/widgets/PluginsWidget.svelte
Normal file
16
packages/web/src/widgets/PluginsWidget.svelte
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import AvailablePluginsList from '../plugins/AvailablePluginsList.svelte';
|
||||||
|
import InstalledPluginsList from '../plugins/InstalledPluginsList.svelte';
|
||||||
|
|
||||||
|
import WidgetColumnBar from './WidgetColumnBar.svelte';
|
||||||
|
import WidgetColumnBarItem from './WidgetColumnBarItem.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<WidgetColumnBar>
|
||||||
|
<WidgetColumnBarItem title="Installed extensions" name="installed" height="50%">
|
||||||
|
<InstalledPluginsList />
|
||||||
|
</WidgetColumnBarItem>
|
||||||
|
<WidgetColumnBarItem title="Available extensions" name="all">
|
||||||
|
<AvailablePluginsList />
|
||||||
|
</WidgetColumnBarItem>
|
||||||
|
</WidgetColumnBar>
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
import ArchiveWidget from './ArchiveWidget.svelte';
|
import ArchiveWidget from './ArchiveWidget.svelte';
|
||||||
import DatabaseWidget from './DatabaseWidget.svelte';
|
import DatabaseWidget from './DatabaseWidget.svelte';
|
||||||
import FilesWidget from './FilesWidget.svelte';
|
import FilesWidget from './FilesWidget.svelte';
|
||||||
|
import PluginsWidget from './PluginsWidget.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if $selectedWidget == 'database'}
|
{#if $selectedWidget == 'database'}
|
||||||
@@ -14,3 +15,6 @@
|
|||||||
{#if $selectedWidget == 'archive'}
|
{#if $selectedWidget == 'archive'}
|
||||||
<ArchiveWidget />
|
<ArchiveWidget />
|
||||||
{/if}
|
{/if}
|
||||||
|
{#if $selectedWidget == 'plugins'}
|
||||||
|
<PluginsWidget />
|
||||||
|
{/if}
|
||||||
|
|||||||
Reference in New Issue
Block a user