mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
perf(UI): views grouped in folders
This commit is contained in:
@ -31,6 +31,7 @@ export const customizations: Customizations = {
|
|||||||
schemas: true,
|
schemas: true,
|
||||||
tables: true,
|
tables: true,
|
||||||
views: true,
|
views: true,
|
||||||
|
materializedViews: true,
|
||||||
triggers: true,
|
triggers: true,
|
||||||
triggerFunctions: true,
|
triggerFunctions: true,
|
||||||
routines: true,
|
routines: true,
|
||||||
|
@ -28,6 +28,7 @@ export interface Customizations {
|
|||||||
schemas?: boolean;
|
schemas?: boolean;
|
||||||
tables?: boolean;
|
tables?: boolean;
|
||||||
views?: boolean;
|
views?: boolean;
|
||||||
|
materializedViews?: boolean;
|
||||||
triggers?: boolean;
|
triggers?: boolean;
|
||||||
triggerFunctions?: boolean;
|
triggerFunctions?: boolean;
|
||||||
routines?: boolean;
|
routines?: boolean;
|
||||||
|
@ -141,10 +141,11 @@
|
|||||||
:selected-misc="selectedMisc"
|
:selected-misc="selectedMisc"
|
||||||
:selected-schema="selectedSchema"
|
:selected-schema="selectedSchema"
|
||||||
:context-event="miscContextEvent"
|
:context-event="miscContextEvent"
|
||||||
|
@open-create-view-tab="openCreateElementTab('view')"
|
||||||
@open-create-trigger-tab="openCreateElementTab('trigger')"
|
@open-create-trigger-tab="openCreateElementTab('trigger')"
|
||||||
|
@open-create-trigger-function-tab="openCreateElementTab('trigger-function')"
|
||||||
@open-create-routine-tab="openCreateElementTab('routine')"
|
@open-create-routine-tab="openCreateElementTab('routine')"
|
||||||
@open-create-function-tab="openCreateElementTab('function')"
|
@open-create-function-tab="openCreateElementTab('function')"
|
||||||
@open-create-trigger-function-tab="openCreateElementTab('trigger-function')"
|
|
||||||
@open-create-scheduler-tab="openCreateElementTab('scheduler')"
|
@open-create-scheduler-tab="openCreateElementTab('scheduler')"
|
||||||
@close-context="closeMiscFolderContext"
|
@close-context="closeMiscFolderContext"
|
||||||
@reload="refresh"
|
@reload="refresh"
|
||||||
|
@ -3,6 +3,18 @@
|
|||||||
:context-event="props.contextEvent"
|
:context-event="props.contextEvent"
|
||||||
@close-context="closeContext"
|
@close-context="closeContext"
|
||||||
>
|
>
|
||||||
|
<div
|
||||||
|
v-if="props.selectedMisc === 'view'"
|
||||||
|
class="context-element"
|
||||||
|
@click="emit('open-create-view-tab')"
|
||||||
|
>
|
||||||
|
<span class="d-flex">
|
||||||
|
<BaseIcon
|
||||||
|
class="text-light mt-1 mr-1"
|
||||||
|
icon-name="mdiTableCog"
|
||||||
|
:size="18"
|
||||||
|
/> {{ t('database.createNewView') }}</span>
|
||||||
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="props.selectedMisc === 'trigger'"
|
v-if="props.selectedMisc === 'trigger'"
|
||||||
class="context-element"
|
class="context-element"
|
||||||
@ -81,6 +93,7 @@ const props = defineProps({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits([
|
const emit = defineEmits([
|
||||||
|
'open-create-view-tab',
|
||||||
'open-create-trigger-tab',
|
'open-create-trigger-tab',
|
||||||
'open-create-routine-tab',
|
'open-create-routine-tab',
|
||||||
'open-create-function-tab',
|
'open-create-function-tab',
|
||||||
|
@ -67,6 +67,55 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div v-if="filteredViews.length" class="database-misc">
|
||||||
|
<details class="accordion">
|
||||||
|
<summary
|
||||||
|
class="accordion-header misc-name"
|
||||||
|
:class="{'text-bold': breadcrumbs.schema === database.name && breadcrumbs.trigger}"
|
||||||
|
@contextmenu.prevent="showMiscFolderContext($event, 'view')"
|
||||||
|
>
|
||||||
|
<BaseIcon
|
||||||
|
class="misc-icon mr-1"
|
||||||
|
icon-name="mdiFolderEye"
|
||||||
|
:size="18"
|
||||||
|
/>
|
||||||
|
<BaseIcon
|
||||||
|
class="misc-icon open-folder mr-1"
|
||||||
|
icon-name="mdiFolderOpen"
|
||||||
|
:size="18"
|
||||||
|
/>
|
||||||
|
{{ t('database.view', 2) }}
|
||||||
|
</summary>
|
||||||
|
<div class="accordion-body">
|
||||||
|
<div>
|
||||||
|
<ul class="menu menu-nav pt-0">
|
||||||
|
<li
|
||||||
|
v-for="view of filteredViews"
|
||||||
|
:key="view.name"
|
||||||
|
class="menu-item"
|
||||||
|
:class="{'selected': breadcrumbs.schema === database.name && breadcrumbs.view === view.name}"
|
||||||
|
@mousedown.left="selectTable({schema: database.name, table: view})"
|
||||||
|
@dblclick="openDataTab({schema: database.name, table: view})"
|
||||||
|
@contextmenu.prevent="showTableContext($event, view)"
|
||||||
|
>
|
||||||
|
<a class="table-name">
|
||||||
|
<div v-if="checkLoadingStatus(view.name, 'table')" class="icon loading mr-1" />
|
||||||
|
<BaseIcon
|
||||||
|
v-else
|
||||||
|
class="table-icon mr-1"
|
||||||
|
icon-name="mdiTableEye"
|
||||||
|
:size="18"
|
||||||
|
:style="`min-width: 18px`"
|
||||||
|
/>
|
||||||
|
<span v-html="highlightWord(view.name)" />
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</details>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div v-if="filteredTriggers.length && customizations.triggers" class="database-misc">
|
<div v-if="filteredTriggers.length && customizations.triggers" class="database-misc">
|
||||||
<details class="accordion">
|
<details class="accordion">
|
||||||
<summary
|
<summary
|
||||||
@ -380,7 +429,14 @@ const searchTerm = computed(() => {
|
|||||||
|
|
||||||
const filteredTables = computed(() => {
|
const filteredTables = computed(() => {
|
||||||
if (props.searchMethod === 'elements')
|
if (props.searchMethod === 'elements')
|
||||||
return props.database.tables.filter(table => table.name.search(searchTerm.value) >= 0);
|
return props.database.tables.filter(table => table.name.search(searchTerm.value) >= 0 && table.type === 'table');
|
||||||
|
else
|
||||||
|
return props.database.tables;
|
||||||
|
});
|
||||||
|
|
||||||
|
const filteredViews = computed(() => {
|
||||||
|
if (props.searchMethod === 'elements')
|
||||||
|
return props.database.tables.filter(table => table.name.search(searchTerm.value) >= 0 && table.type === 'view');
|
||||||
else
|
else
|
||||||
return props.database.tables;
|
return props.database.tables;
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user