mirror of
https://github.com/Fabio286/antares.git
synced 2025-06-05 21:59:22 +02:00
feat(UI): automatic scroll to selected tab element in left bar
This commit is contained in:
@ -16,9 +16,10 @@
|
|||||||
<ul class="menu menu-nav pt-0">
|
<ul class="menu menu-nav pt-0">
|
||||||
<li
|
<li
|
||||||
v-for="table of filteredTables"
|
v-for="table of filteredTables"
|
||||||
|
:ref="breadcrumbs.schema === database.name && [breadcrumbs.table, breadcrumbs.view].includes(table.name) ? 'explorebar-selected' : ''"
|
||||||
:key="table.name"
|
:key="table.name"
|
||||||
class="menu-item"
|
class="menu-item"
|
||||||
:class="{'text-bold': breadcrumbs.schema === database.name && [breadcrumbs.table, breadcrumbs.view].includes(table.name)}"
|
:class="{'selected': breadcrumbs.schema === database.name && [breadcrumbs.table, breadcrumbs.view].includes(table.name)}"
|
||||||
@mousedown.left="selectTable({schema: database.name, table})"
|
@mousedown.left="selectTable({schema: database.name, table})"
|
||||||
@dblclick="openDataTab({schema: database.name, table})"
|
@dblclick="openDataTab({schema: database.name, table})"
|
||||||
@contextmenu.prevent="showTableContext($event, table)"
|
@contextmenu.prevent="showTableContext($event, table)"
|
||||||
@ -59,8 +60,9 @@
|
|||||||
<li
|
<li
|
||||||
v-for="trigger of filteredTriggers"
|
v-for="trigger of filteredTriggers"
|
||||||
:key="trigger.name"
|
:key="trigger.name"
|
||||||
|
:ref="breadcrumbs.schema === database.name && breadcrumbs.trigger === trigger.name ? 'explorebar-selected' : ''"
|
||||||
class="menu-item"
|
class="menu-item"
|
||||||
:class="{'text-bold': breadcrumbs.schema === database.name && breadcrumbs.trigger === trigger.name}"
|
:class="{'selected': breadcrumbs.schema === database.name && breadcrumbs.trigger === trigger.name}"
|
||||||
@mousedown="selectMisc({schema: database.name, misc: trigger, type: 'trigger'})"
|
@mousedown="selectMisc({schema: database.name, misc: trigger, type: 'trigger'})"
|
||||||
@dblclick="openMiscPermanentTab({schema: database.name, misc: trigger, type: 'trigger'})"
|
@dblclick="openMiscPermanentTab({schema: database.name, misc: trigger, type: 'trigger'})"
|
||||||
@contextmenu.prevent="showMiscContext($event, {...trigger, type: 'trigger'})"
|
@contextmenu.prevent="showMiscContext($event, {...trigger, type: 'trigger'})"
|
||||||
@ -92,8 +94,9 @@
|
|||||||
<li
|
<li
|
||||||
v-for="(procedure, i) of filteredProcedures"
|
v-for="(procedure, i) of filteredProcedures"
|
||||||
:key="`${procedure.name}-${i}`"
|
:key="`${procedure.name}-${i}`"
|
||||||
|
:ref="breadcrumbs.schema === database.name && breadcrumbs.routine === procedure.name ? 'explorebar-selected' : ''"
|
||||||
class="menu-item"
|
class="menu-item"
|
||||||
:class="{'text-bold': breadcrumbs.schema === database.name && breadcrumbs.routine === procedure.name}"
|
:class="{'selected': breadcrumbs.schema === database.name && breadcrumbs.routine === procedure.name}"
|
||||||
@mousedown="selectMisc({schema: database.name, misc: procedure, type: 'routine'})"
|
@mousedown="selectMisc({schema: database.name, misc: procedure, type: 'routine'})"
|
||||||
@dblclick="openMiscPermanentTab({schema: database.name, misc: procedure, type: 'routine'})"
|
@dblclick="openMiscPermanentTab({schema: database.name, misc: procedure, type: 'routine'})"
|
||||||
@contextmenu.prevent="showMiscContext($event, {...procedure, type: 'procedure'})"
|
@contextmenu.prevent="showMiscContext($event, {...procedure, type: 'procedure'})"
|
||||||
@ -125,8 +128,9 @@
|
|||||||
<li
|
<li
|
||||||
v-for="(func, i) of filteredTriggerFunctions"
|
v-for="(func, i) of filteredTriggerFunctions"
|
||||||
:key="`${func.name}-${i}`"
|
:key="`${func.name}-${i}`"
|
||||||
|
:ref="breadcrumbs.schema === database.name && breadcrumbs.triggerFunction === func.name ? 'explorebar-selected' : ''"
|
||||||
class="menu-item"
|
class="menu-item"
|
||||||
:class="{'text-bold': breadcrumbs.schema === database.name && breadcrumbs.triggerFunction === func.name}"
|
:class="{'selected': breadcrumbs.schema === database.name && breadcrumbs.triggerFunction === func.name}"
|
||||||
@mousedown="selectMisc({schema: database.name, misc: func, type: 'triggerFunction'})"
|
@mousedown="selectMisc({schema: database.name, misc: func, type: 'triggerFunction'})"
|
||||||
@dblclick="openMiscPermanentTab({schema: database.name, misc: func, type: 'triggerFunction'})"
|
@dblclick="openMiscPermanentTab({schema: database.name, misc: func, type: 'triggerFunction'})"
|
||||||
@contextmenu.prevent="showMiscContext($event, {...func, type: 'triggerFunction'})"
|
@contextmenu.prevent="showMiscContext($event, {...func, type: 'triggerFunction'})"
|
||||||
@ -158,8 +162,9 @@
|
|||||||
<li
|
<li
|
||||||
v-for="(func, i) of filteredFunctions"
|
v-for="(func, i) of filteredFunctions"
|
||||||
:key="`${func.name}-${i}`"
|
:key="`${func.name}-${i}`"
|
||||||
|
:ref="breadcrumbs.schema === database.name && breadcrumbs.function === func.name ? 'explorebar-selected' : ''"
|
||||||
class="menu-item"
|
class="menu-item"
|
||||||
:class="{'text-bold': breadcrumbs.schema === database.name && breadcrumbs.function === func.name}"
|
:class="{'selected': breadcrumbs.schema === database.name && breadcrumbs.function === func.name}"
|
||||||
@mousedown="selectMisc({schema: database.name, misc: func, type: 'function'})"
|
@mousedown="selectMisc({schema: database.name, misc: func, type: 'function'})"
|
||||||
@dblclick="openMiscPermanentTab({schema: database.name, misc: func, type: 'function'})"
|
@dblclick="openMiscPermanentTab({schema: database.name, misc: func, type: 'function'})"
|
||||||
@contextmenu.prevent="showMiscContext($event, {...func, type: 'function'})"
|
@contextmenu.prevent="showMiscContext($event, {...func, type: 'function'})"
|
||||||
@ -191,8 +196,9 @@
|
|||||||
<li
|
<li
|
||||||
v-for="scheduler of filteredSchedulers"
|
v-for="scheduler of filteredSchedulers"
|
||||||
:key="scheduler.name"
|
:key="scheduler.name"
|
||||||
|
:ref="breadcrumbs.schema === database.name && breadcrumbs.scheduler === scheduler.name ? 'explorebar-selected' : ''"
|
||||||
class="menu-item"
|
class="menu-item"
|
||||||
:class="{'text-bold': breadcrumbs.schema === database.name && breadcrumbs.scheduler === scheduler.name}"
|
:class="{'selected': breadcrumbs.schema === database.name && breadcrumbs.scheduler === scheduler.name}"
|
||||||
@mousedown="selectMisc({schema: database.name, misc: scheduler, type: 'scheduler'})"
|
@mousedown="selectMisc({schema: database.name, misc: scheduler, type: 'scheduler'})"
|
||||||
@dblclick="openMiscPermanentTab({schema: database.name, misc: scheduler, type: 'scheduler'})"
|
@dblclick="openMiscPermanentTab({schema: database.name, misc: scheduler, type: 'scheduler'})"
|
||||||
@contextmenu.prevent="showMiscContext($event, {...scheduler, type: 'scheduler'})"
|
@contextmenu.prevent="showMiscContext($event, {...scheduler, type: 'scheduler'})"
|
||||||
@ -278,6 +284,27 @@ export default {
|
|||||||
return this.database.tables.reduce((acc, curr) => acc + curr.size, 0);
|
return this.database.tables.reduce((acc, curr) => acc + curr.size, 0);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
watch: {
|
||||||
|
breadcrumbs (newVal, oldVal) {
|
||||||
|
if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
|
||||||
|
setTimeout(() => {
|
||||||
|
const element = this.$refs['explorebar-selected'] ? this.$refs['explorebar-selected'][0] : null;
|
||||||
|
if (element) {
|
||||||
|
const rect = element.getBoundingClientRect();
|
||||||
|
const elemTop = rect.top;
|
||||||
|
const elemBottom = rect.bottom;
|
||||||
|
const isVisible = (elemTop >= 0) && (elemBottom <= window.innerHeight);
|
||||||
|
|
||||||
|
if (!isVisible) {
|
||||||
|
element.setAttribute('tabindex', '-1');
|
||||||
|
element.focus();
|
||||||
|
element.removeAttribute('tabindex');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions({
|
...mapActions({
|
||||||
changeBreadcrumbs: 'workspaces/changeBreadcrumbs',
|
changeBreadcrumbs: 'workspaces/changeBreadcrumbs',
|
||||||
@ -386,6 +413,10 @@ export default {
|
|||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.workspace-explorebar-database {
|
.workspace-explorebar-database {
|
||||||
|
.selected {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
.database-name {
|
.database-name {
|
||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
@ -167,7 +167,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.menu-item {
|
.menu-item {
|
||||||
&:hover {
|
&:hover,
|
||||||
|
&.selected {
|
||||||
color: $body-font-color-dark;
|
color: $body-font-color-dark;
|
||||||
background: rgba($color: #fff, $alpha: 0.05);
|
background: rgba($color: #fff, $alpha: 0.05);
|
||||||
}
|
}
|
||||||
|
@ -18,20 +18,11 @@
|
|||||||
background: #ababab;
|
background: #ababab;
|
||||||
}
|
}
|
||||||
|
|
||||||
#titlebar {
|
.menu {
|
||||||
background: $bg-color-light;
|
.menu-item a {
|
||||||
box-shadow: 0 0 1px 0 #000;
|
|
||||||
|
|
||||||
.titlebar-elements {
|
|
||||||
.titlebar-element {
|
|
||||||
&:hover {
|
&:hover {
|
||||||
opacity: 1;
|
color: $body-font-color;
|
||||||
background: rgba($color: rgb(172, 172, 172), $alpha: 0.2);
|
background: rgba($color: #000, $alpha: 0.1);
|
||||||
}
|
|
||||||
|
|
||||||
&.close-button:hover {
|
|
||||||
background: red;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,6 +102,24 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#titlebar {
|
||||||
|
background: $bg-color-light;
|
||||||
|
box-shadow: 0 0 1px 0 #000;
|
||||||
|
|
||||||
|
.titlebar-elements {
|
||||||
|
.titlebar-element {
|
||||||
|
&:hover {
|
||||||
|
opacity: 1;
|
||||||
|
background: rgba($color: rgb(172, 172, 172), $alpha: 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.close-button:hover {
|
||||||
|
background: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#settingbar {
|
#settingbar {
|
||||||
width: $settingbar-width;
|
width: $settingbar-width;
|
||||||
height: calc(100vh - #{$excluding-size});
|
height: calc(100vh - #{$excluding-size});
|
||||||
@ -180,6 +189,13 @@
|
|||||||
background: $bg-color-light-gray;
|
background: $bg-color-light-gray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.menu-item {
|
||||||
|
&:hover,
|
||||||
|
&.selected {
|
||||||
|
background: rgba($color: #000, $alpha: 0.05);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.table-size {
|
.table-size {
|
||||||
opacity: 0.4;
|
opacity: 0.4;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user