all files / src/nav/ nav.vue

92.31% Statements 12/13
100% Branches 2/2
90% Functions 9/10
92.31% Lines 12/13
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74                                                                                                                           
<template>
  <div class="w-nav" :class="{vertical}">
    <slot></slot>
  </div>
</template>
<script>
export default {
  name: 'WheelNav',
  provide() {
    return {
      'root': this,
      'vertical': this.vertical
    }
  },
  props: {
    selected: {
      type: String
    },
    vertical: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      items: [],
      namePath: []
    }
  },
  mounted () {
    this.updateChildren()
    this.listenToChildren()
  },
  updated() {
    this.updateChildren()
  },
  methods: {
    addItem(vm) {
      this.items.push(vm)
    },
    updateChildren() {
      this.items.forEach(vm => {
        if(this.selected === vm.name){
          vm.selected = true
        } else {
          vm.selected = false
        }
      })
    },
    listenToChildren() {
      this.items.forEach(vm => {
        vm.$on('update:selected', (name) => {
          this.$emit('update:selected', name)
        })
      })
    }
  },
}
</script>
<style lang="scss" scoped>
  @import '../../styles/_var.scss';
  .w-nav {
    display: flex;
    border-bottom: 1px solid $grey;
    color: $color;
    cursor: pointer;
    user-select: none;
    &.vertical {
      flex-direction: column;
      border: 1px solid $grey;
    }
  }
</style>