mirror of
				https://github.com/simon987/sist2.git
				synced 2025-10-31 16:06:53 +00:00 
			
		
		
		
	Rework index picker
This commit is contained in:
		
							parent
							
								
									d0a1deca30
								
							
						
					
					
						commit
						b2631a86c8
					
				
							
								
								
									
										2
									
								
								sist2-vue/dist/css/chunk-vendors.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								sist2-vue/dist/css/chunk-vendors.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								sist2-vue/dist/css/index.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								sist2-vue/dist/css/index.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										6
									
								
								sist2-vue/dist/js/chunk-vendors.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								sist2-vue/dist/js/chunk-vendors.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								sist2-vue/dist/js/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								sist2-vue/dist/js/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										15
									
								
								sist2-vue/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										15
									
								
								sist2-vue/package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -23,7 +23,6 @@ | ||||
|         "vue-color": "^2.8.1", | ||||
|         "vue-i18n": "^8.24.4", | ||||
|         "vue-masonry-wall": "^0.3.2", | ||||
|         "vue-multiselect": "^2.1.6", | ||||
|         "vue-router": "^3.2.0", | ||||
|         "vue-simple-suggest": "^1.11.1", | ||||
|         "vuex": "^3.4.0" | ||||
| @ -13604,15 +13603,6 @@ | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/vue-multiselect": { | ||||
|       "version": "2.1.6", | ||||
|       "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.6.tgz", | ||||
|       "integrity": "sha512-s7jmZPlm9FeueJg1RwJtnE9KNPtME/7C8uRWSfp9/yEN4M8XcS/d+bddoyVwVnvFyRh9msFo0HWeW0vTL8Qv+w==", | ||||
|       "engines": { | ||||
|         "node": ">= 4.0.0", | ||||
|         "npm": ">= 3.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/vue-observe-visibility": { | ||||
|       "version": "0.4.6", | ||||
|       "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz", | ||||
| @ -26376,11 +26366,6 @@ | ||||
|         "vue-observe-visibility": "^0.4.6" | ||||
|       } | ||||
|     }, | ||||
|     "vue-multiselect": { | ||||
|       "version": "2.1.6", | ||||
|       "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-2.1.6.tgz", | ||||
|       "integrity": "sha512-s7jmZPlm9FeueJg1RwJtnE9KNPtME/7C8uRWSfp9/yEN4M8XcS/d+bddoyVwVnvFyRh9msFo0HWeW0vTL8Qv+w==" | ||||
|     }, | ||||
|     "vue-observe-visibility": { | ||||
|       "version": "0.4.6", | ||||
|       "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz", | ||||
|  | ||||
| @ -22,7 +22,6 @@ | ||||
|     "vue-color": "^2.8.1", | ||||
|     "vue-i18n": "^8.24.4", | ||||
|     "vue-masonry-wall": "^0.3.2", | ||||
|     "vue-multiselect": "^2.1.6", | ||||
|     "vue-router": "^3.2.0", | ||||
|     "vue-simple-suggest": "^1.11.1", | ||||
|     "vuex": "^3.4.0" | ||||
|  | ||||
| @ -1,93 +1,95 @@ | ||||
| <template> | ||||
|   <VueMultiselect | ||||
|       multiple | ||||
|       label="name" | ||||
|       :value="selectedIndices" | ||||
|       :options="indices" | ||||
|       :close-on-select="indices.length <= 1" | ||||
|       :placeholder="$t('indexPickerPlaceholder')" | ||||
|       @select="addItem" | ||||
|       @remove="removeItem"> | ||||
| 
 | ||||
|     <template slot="option" slot-scope="idx"> | ||||
|       <b-row> | ||||
|         <b-col> | ||||
|           <span class="mr-1">{{ idx.option.name }}</span> | ||||
|           <SmallBadge pill :text="idx.option.version"></SmallBadge> | ||||
|         </b-col> | ||||
|       </b-row> | ||||
|       <b-row class="mt-1"> | ||||
|         <b-col> | ||||
|           <span>{{ formatIdxDate(idx.option.timestamp) }}</span> | ||||
|         </b-col> | ||||
|       </b-row> | ||||
|     </template> | ||||
| 
 | ||||
|   </VueMultiselect> | ||||
|   <div v-if="isMobile"> | ||||
|     <b-form-select | ||||
|         :value="selectedIndicesIds" | ||||
|         @change="onSelect($event)" | ||||
|         :options="indices" multiple :select-size="6" text-field="name" | ||||
|         value-field="id"></b-form-select> | ||||
|   </div> | ||||
|   <div v-else> | ||||
|     <b-list-group id="index-picker-desktop"> | ||||
|       <b-list-group-item | ||||
|           v-for="idx in indices" | ||||
|           @click="toggleIndex(idx)" | ||||
|           class="d-flex justify-content-between align-items-center list-group-item-action pointer"> | ||||
|         <div class="d-flex"> | ||||
|           <b-checkbox @change="toggleIndex(idx)" :checked="isSelected(idx)"></b-checkbox> | ||||
|           {{ idx.name }} | ||||
|           <span class="text-muted timestamp-text ml-2">{{ formatIdxDate(idx.timestamp) }}</span> | ||||
|         </div> | ||||
|         <b-badge class="version-badge">v{{ idx.version }}</b-badge> | ||||
|       </b-list-group-item> | ||||
|     </b-list-group> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script lang="ts"> | ||||
| import VueMultiselect from "vue-multiselect" | ||||
| import SmallBadge from "./SmallBadge.vue" | ||||
| import {mapActions, mapGetters} from "vuex"; | ||||
| import {Index} from "@/Sist2Api"; | ||||
| import Vue from "vue"; | ||||
| import {format} from "date-fns"; | ||||
| 
 | ||||
| export default Vue.extend({ | ||||
|   components: { | ||||
|     VueMultiselect, | ||||
|     SmallBadge | ||||
|   }, | ||||
|   data() { | ||||
|     return { | ||||
|       loading: true | ||||
|       loading: true, | ||||
|     } | ||||
|   }, | ||||
|   computed: { | ||||
|     ...mapGetters([ | ||||
|       "indices", "selectedIndices" | ||||
|     ]), | ||||
|     selectedIndicesIds() { | ||||
|       return this.selectedIndices.map(idx => idx.id) | ||||
|     }, | ||||
|     isMobile() { | ||||
|       return window.innerWidth <= 650; | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
|     ...mapActions({ | ||||
|       setSelectedIndices: "setSelectedIndices" | ||||
|     }), | ||||
|     removeItem(val: Index): void { | ||||
|       this.setSelectedIndices(this.selectedIndices.filter((item: Index) => item !== val)) | ||||
|     }, | ||||
|     addItem(val: Index): void { | ||||
|       this.setSelectedIndices([...this.selectedIndices, val]) | ||||
|     onSelect(value) { | ||||
|       this.setSelectedIndices(this.indices.filter(idx => value.includes(idx.id))); | ||||
|     }, | ||||
|     formatIdxDate(timestamp: number): string { | ||||
|       return format(new Date(timestamp * 1000), "yyyy-MM-dd"); | ||||
|     }, | ||||
|     toggleIndex(index) { | ||||
|       if (this.isSelected(index)) { | ||||
|         this.setSelectedIndices(this.selectedIndices.filter(idx => idx.id != index.id)); | ||||
|       } else { | ||||
|         this.setSelectedIndices([index, ...this.selectedIndices]); | ||||
|       } | ||||
|     }, | ||||
|     isSelected(index) { | ||||
|       return this.selectedIndices.find(idx => idx.id == index.id) != null; | ||||
|     } | ||||
|   }, | ||||
| }) | ||||
| </script> | ||||
| 
 | ||||
| <style src="vue-multiselect/dist/vue-multiselect.min.css"></style> | ||||
| 
 | ||||
| <style> | ||||
| .multiselect__option { | ||||
|   padding: 5px 10px; | ||||
| <style scoped> | ||||
| .timestamp-text { | ||||
|   line-height: 24px; | ||||
|   font-size: 80%; | ||||
| } | ||||
| 
 | ||||
| .multiselect__content-wrapper { | ||||
|   overflow: hidden; | ||||
| .version-badge { | ||||
|   color: #222 !important; | ||||
|   background: none; | ||||
| } | ||||
| 
 | ||||
| .theme-black .multiselect__tags { | ||||
|   background: #37474F; | ||||
|   border: 1px solid #616161 !important | ||||
| .list-group-item { | ||||
|   padding: 0.2em 0.4em; | ||||
| } | ||||
| 
 | ||||
| .theme-black .multiselect__input { | ||||
|   color: #dbdbdb; | ||||
|   background: #37474F; | ||||
| } | ||||
| 
 | ||||
| .theme-black .multiselect__content-wrapper { | ||||
|   border: none | ||||
| #index-picker-desktop { | ||||
|   overflow-y: auto; | ||||
|   max-height: 132px; | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										7
									
								
								src/web/static_generated.c
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								src/web/static_generated.c
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user