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,
 | 
			
		||||
   tables: true,
 | 
			
		||||
   views: true,
 | 
			
		||||
   materializedViews: true,
 | 
			
		||||
   triggers: true,
 | 
			
		||||
   triggerFunctions: true,
 | 
			
		||||
   routines: true,
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ export interface Customizations {
 | 
			
		||||
   schemas?: boolean;
 | 
			
		||||
   tables?: boolean;
 | 
			
		||||
   views?: boolean;
 | 
			
		||||
   materializedViews?: boolean;
 | 
			
		||||
   triggers?: boolean;
 | 
			
		||||
   triggerFunctions?: boolean;
 | 
			
		||||
   routines?: boolean;
 | 
			
		||||
 
 | 
			
		||||
@@ -141,10 +141,11 @@
 | 
			
		||||
         :selected-misc="selectedMisc"
 | 
			
		||||
         :selected-schema="selectedSchema"
 | 
			
		||||
         :context-event="miscContextEvent"
 | 
			
		||||
         @open-create-view-tab="openCreateElementTab('view')"
 | 
			
		||||
         @open-create-trigger-tab="openCreateElementTab('trigger')"
 | 
			
		||||
         @open-create-trigger-function-tab="openCreateElementTab('trigger-function')"
 | 
			
		||||
         @open-create-routine-tab="openCreateElementTab('routine')"
 | 
			
		||||
         @open-create-function-tab="openCreateElementTab('function')"
 | 
			
		||||
         @open-create-trigger-function-tab="openCreateElementTab('trigger-function')"
 | 
			
		||||
         @open-create-scheduler-tab="openCreateElementTab('scheduler')"
 | 
			
		||||
         @close-context="closeMiscFolderContext"
 | 
			
		||||
         @reload="refresh"
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,18 @@
 | 
			
		||||
      :context-event="props.contextEvent"
 | 
			
		||||
      @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
 | 
			
		||||
         v-if="props.selectedMisc === 'trigger'"
 | 
			
		||||
         class="context-element"
 | 
			
		||||
@@ -81,6 +93,7 @@ const props = defineProps({
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const emit = defineEmits([
 | 
			
		||||
   'open-create-view-tab',
 | 
			
		||||
   'open-create-trigger-tab',
 | 
			
		||||
   'open-create-routine-tab',
 | 
			
		||||
   'open-create-function-tab',
 | 
			
		||||
 
 | 
			
		||||
@@ -67,6 +67,55 @@
 | 
			
		||||
            </ul>
 | 
			
		||||
         </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">
 | 
			
		||||
            <details class="accordion">
 | 
			
		||||
               <summary
 | 
			
		||||
@@ -380,7 +429,14 @@ const searchTerm = computed(() => {
 | 
			
		||||
 | 
			
		||||
const filteredTables = computed(() => {
 | 
			
		||||
   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
 | 
			
		||||
      return props.database.tables;
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user