mirror of
				https://github.com/simon987/sist2.git
				synced 2025-11-04 01:36:51 +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