mirror of
				https://github.com/Fabio286/antares.git
				synced 2025-06-05 21:59:22 +02:00 
			
		
		
		
	Connections sort
This commit is contained in:
		
							
								
								
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -11273,6 +11273,11 @@ | |||||||
|         "is-plain-obj": "^1.0.0" |         "is-plain-obj": "^1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "sortablejs": { | ||||||
|  |       "version": "1.10.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz", | ||||||
|  |       "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" | ||||||
|  |     }, | ||||||
|     "source-list-map": { |     "source-list-map": { | ||||||
|       "version": "2.0.1", |       "version": "2.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", |       "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", | ||||||
| @@ -12554,6 +12559,11 @@ | |||||||
|       "integrity": "sha512-oEqYpXKaFN+TaXU+mRLEx8dX0ah85aAJEe61mpdoUrq0Bhe/6sWhyZX1JjMQLhVsHAkncyhedhmCdDVSasUtDw==", |       "integrity": "sha512-oEqYpXKaFN+TaXU+mRLEx8dX0ah85aAJEe61mpdoUrq0Bhe/6sWhyZX1JjMQLhVsHAkncyhedhmCdDVSasUtDw==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "vue-click-outside": { | ||||||
|  |       "version": "1.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/vue-click-outside/-/vue-click-outside-1.1.0.tgz", | ||||||
|  |       "integrity": "sha512-pNyvAA9mRXJwPHlHJyjMb4IONSc7khS5lxGcMyE2EIKgNMAO279PWM9Hyq0d5J4FkiSRdmFLwnbjDd5UtPizHQ==" | ||||||
|  |     }, | ||||||
|     "vue-eslint-parser": { |     "vue-eslint-parser": { | ||||||
|       "version": "7.0.0", |       "version": "7.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.0.0.tgz", |       "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.0.0.tgz", | ||||||
| @@ -12631,6 +12641,14 @@ | |||||||
|       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", |       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "vuedraggable": { | ||||||
|  |       "version": "2.23.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.23.2.tgz", | ||||||
|  |       "integrity": "sha512-PgHCjUpxEAEZJq36ys49HfQmXglattf/7ofOzUrW2/rRdG7tu6fK84ir14t1jYv4kdXewTEa2ieKEAhhEMdwkQ==", | ||||||
|  |       "requires": { | ||||||
|  |         "sortablejs": "^1.10.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "vuex": { |     "vuex": { | ||||||
|       "version": "3.4.0", |       "version": "3.4.0", | ||||||
|       "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.4.0.tgz", |       "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.4.0.tgz", | ||||||
|   | |||||||
| @@ -35,7 +35,9 @@ | |||||||
|     "pg": "^8.2.1", |     "pg": "^8.2.1", | ||||||
|     "source-map-support": "^0.5.16", |     "source-map-support": "^0.5.16", | ||||||
|     "spectre.css": "^0.5.8", |     "spectre.css": "^0.5.8", | ||||||
|  |     "vue-click-outside": "^1.1.0", | ||||||
|     "vue-i18n": "^8.17.7", |     "vue-i18n": "^8.17.7", | ||||||
|  |     "vuedraggable": "^2.23.2", | ||||||
|     "vuex": "^3.4.0", |     "vuex": "^3.4.0", | ||||||
|     "vuex-persist": "^2.2.0" |     "vuex-persist": "^2.2.0" | ||||||
|   }, |   }, | ||||||
|   | |||||||
							
								
								
									
										94
									
								
								src/renderer/components/BaseContextMenu.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								src/renderer/components/BaseContextMenu.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | |||||||
|  | <template> | ||||||
|  |    <div class="context"> | ||||||
|  |       <!-- <a | ||||||
|  |          class="context-overlay c-hand" | ||||||
|  |          @click="$emit('close')" | ||||||
|  |          @contextmenu="$emit('close')" | ||||||
|  |       /> --> | ||||||
|  |       <div | ||||||
|  |          v-click-outside="close" | ||||||
|  |          class="context-container" | ||||||
|  |          :style="position" | ||||||
|  |       > | ||||||
|  |          <slot /> | ||||||
|  |       </div> | ||||||
|  |    </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import ClickOutside from 'vue-click-outside'; | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |    name: 'BaseContextMenu', | ||||||
|  |    directives: { | ||||||
|  |       ClickOutside | ||||||
|  |    }, | ||||||
|  |    props: { | ||||||
|  |       contextEvent: MouseEvent | ||||||
|  |    }, | ||||||
|  |    computed: { | ||||||
|  |       position () { | ||||||
|  |          return { | ||||||
|  |             top: this.contextEvent.clientY + 'px', | ||||||
|  |             left: this.contextEvent.clientX + 'px' | ||||||
|  |          }; | ||||||
|  |       } | ||||||
|  |    }, | ||||||
|  |    methods: { | ||||||
|  |       close () { | ||||||
|  |          this.$emit('close'); | ||||||
|  |       } | ||||||
|  |    } | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss"> | ||||||
|  |    .context{ | ||||||
|  |       display: flex; | ||||||
|  |       position: absolute; | ||||||
|  |       z-index: 400; | ||||||
|  |       justify-content: center; | ||||||
|  |       align-items: center; | ||||||
|  |       overflow: hidden; | ||||||
|  |       padding: 0.4rem; | ||||||
|  |       position: fixed; | ||||||
|  |       right: 0; | ||||||
|  |       top: 0; | ||||||
|  |       left: 0; | ||||||
|  |       bottom: 0; | ||||||
|  |       pointer-events: none; | ||||||
|  |  | ||||||
|  |       .context-container{ | ||||||
|  |          max-width: 150px; | ||||||
|  |          z-index: 1; | ||||||
|  |          box-shadow: 0px 1px 1px 0px #000; | ||||||
|  |          padding: 0; | ||||||
|  |          background: #1d1d1d; | ||||||
|  |          border-radius: 0.1rem; | ||||||
|  |          display: flex; | ||||||
|  |          flex-direction: column; | ||||||
|  |          max-height: 75vh; | ||||||
|  |          padding: 0.3rem; | ||||||
|  |          width: 100%; | ||||||
|  |          position: absolute; | ||||||
|  |          pointer-events: initial; | ||||||
|  |  | ||||||
|  |          .context-element{ | ||||||
|  |             display: flex; | ||||||
|  |             align-items: center; | ||||||
|  |          } | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       .context-overlay{ | ||||||
|  |          background: transparent; | ||||||
|  |          bottom: 0; | ||||||
|  |          cursor: default; | ||||||
|  |          display: block; | ||||||
|  |          left: 0; | ||||||
|  |          position: absolute; | ||||||
|  |          right: 0; | ||||||
|  |          top: 0; | ||||||
|  |       } | ||||||
|  |    } | ||||||
|  |  | ||||||
|  | </style> | ||||||
| @@ -1,17 +1,33 @@ | |||||||
| <template> | <template> | ||||||
|    <div id="settingbar"> |    <div id="settingbar"> | ||||||
|       <div class="settingbar-top-elements"> |       <div class="settingbar-top-elements"> | ||||||
|  |          <BaseContextMenu | ||||||
|  |             v-if="isContext" | ||||||
|  |             :context-event="contextEvent" | ||||||
|  |             @close="isContext = false" | ||||||
|  |          > | ||||||
|  |             <div class="context-element"> | ||||||
|  |                <i class="material-icons md-18 text-light pr-1">edit</i> Edit | ||||||
|  |             </div> | ||||||
|  |             <div class="context-element"> | ||||||
|  |                <i class="material-icons md-18 text-light pr-1">delete</i> Delete | ||||||
|  |             </div> | ||||||
|  |          </BaseContextMenu> | ||||||
|          <ul class="settingbar-elements"> |          <ul class="settingbar-elements"> | ||||||
|  |             <draggable v-model="connections"> | ||||||
|                <li |                <li | ||||||
|                   v-for="connection in connections" |                   v-for="connection in connections" | ||||||
|                   :key="connection.uid" |                   :key="connection.uid" | ||||||
|  |                   draggable="true" | ||||||
|                   class="settingbar-element btn btn-link tooltip tooltip-right" |                   class="settingbar-element btn btn-link tooltip tooltip-right" | ||||||
|                   :class="{'selected': connection.uid === selectedWorkspace}" |                   :class="{'selected': connection.uid === selectedWorkspace}" | ||||||
|                   :data-tooltip="`${connection.user}@${connection.host}:${connection.port}`" |                   :data-tooltip="`${connection.user}@${connection.host}:${connection.port}`" | ||||||
|                   @click="selectWorkspace(connection.uid)" |                   @click="selectWorkspace(connection.uid)" | ||||||
|  |                   @contextmenu.prevent="contextMenu($event)" | ||||||
|                > |                > | ||||||
|                   <i class="settingbar-element-icon dbi" :class="`dbi-${connection.client} ${connected.includes(connection.uid) ? 'badge' : ''}`" /> |                   <i class="settingbar-element-icon dbi" :class="`dbi-${connection.client} ${connected.includes(connection.uid) ? 'badge' : ''}`" /> | ||||||
|                </li> |                </li> | ||||||
|  |             </draggable> | ||||||
|             <li |             <li | ||||||
|                class="settingbar-element btn btn-link tooltip tooltip-right pt-3" |                class="settingbar-element btn btn-link tooltip tooltip-right pt-3" | ||||||
|                data-tooltip="Add connection" |                data-tooltip="Add connection" | ||||||
| @@ -34,21 +50,47 @@ | |||||||
|  |  | ||||||
| <script> | <script> | ||||||
| import { mapActions, mapGetters } from 'vuex'; | import { mapActions, mapGetters } from 'vuex'; | ||||||
|  | import draggable from 'vuedraggable'; | ||||||
|  | import BaseContextMenu from '@/components/BaseContextMenu'; | ||||||
|  |  | ||||||
| export default { | export default { | ||||||
|    name: 'TheSettingBar', |    name: 'TheSettingBar', | ||||||
|  |    components: { | ||||||
|  |       draggable, | ||||||
|  |       BaseContextMenu | ||||||
|  |    }, | ||||||
|  |    data () { | ||||||
|  |       return { | ||||||
|  |          dragElement: null, | ||||||
|  |          isContext: false, | ||||||
|  |          contextEvent: null | ||||||
|  |       }; | ||||||
|  |    }, | ||||||
|    computed: { |    computed: { | ||||||
|       ...mapGetters({ |       ...mapGetters({ | ||||||
|          connections: 'connections/getConnections', |          getConnections: 'connections/getConnections', | ||||||
|          connected: 'workspaces/getConnected', |          connected: 'workspaces/getConnected', | ||||||
|          selectedWorkspace: 'workspaces/getSelected' |          selectedWorkspace: 'workspaces/getSelected' | ||||||
|       }) |       }), | ||||||
|  |       connections: { | ||||||
|  |          get () { | ||||||
|  |             return this.getConnections; | ||||||
|  |          }, | ||||||
|  |          set (value) { | ||||||
|  |             this.updateConnections(value); | ||||||
|  |          } | ||||||
|  |       } | ||||||
|    }, |    }, | ||||||
|    methods: { |    methods: { | ||||||
|       ...mapActions({ |       ...mapActions({ | ||||||
|  |          updateConnections: 'connections/updateConnections', | ||||||
|          showNewConnModal: 'connections/showNewConnModal', |          showNewConnModal: 'connections/showNewConnModal', | ||||||
|          selectWorkspace: 'workspaces/selectWorkspace' |          selectWorkspace: 'workspaces/selectWorkspace' | ||||||
|       }) |       }), | ||||||
|  |       contextMenu (event) { | ||||||
|  |          this.contextEvent = event; | ||||||
|  |          this.isContext = true; | ||||||
|  |       } | ||||||
|    } |    } | ||||||
| }; | }; | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -15,6 +15,9 @@ export default { | |||||||
|       ADD_CONNECTION (state, connection) { |       ADD_CONNECTION (state, connection) { | ||||||
|          state.connections.push(connection); |          state.connections.push(connection); | ||||||
|       }, |       }, | ||||||
|  |       UPDATE_CONNECTIONS (state, connections) { | ||||||
|  |          state.connections = connections; | ||||||
|  |       }, | ||||||
|       SHOW_NEW_CONNECTION_MODAL (state) { |       SHOW_NEW_CONNECTION_MODAL (state) { | ||||||
|          state.is_new_modal = true; |          state.is_new_modal = true; | ||||||
|       }, |       }, | ||||||
| @@ -26,6 +29,9 @@ export default { | |||||||
|       addConnection ({ commit }, connection) { |       addConnection ({ commit }, connection) { | ||||||
|          commit('ADD_CONNECTION', connection); |          commit('ADD_CONNECTION', connection); | ||||||
|       }, |       }, | ||||||
|  |       updateConnections ({ commit }, connections) { | ||||||
|  |          commit('UPDATE_CONNECTIONS', connections); | ||||||
|  |       }, | ||||||
|       // Modals |       // Modals | ||||||
|       showNewConnModal ({ commit }) { |       showNewConnModal ({ commit }) { | ||||||
|          commit('SHOW_NEW_CONNECTION_MODAL'); |          commit('SHOW_NEW_CONNECTION_MODAL'); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user