Skip to content
Snippets Groups Projects
ModeToolbar.vue 1.28 KiB
<template>
  <nav>
    <button
      v-for="mode in allModes"
      v-on:click="() => setMode(mode.name)"
      v-bind:key="mode.name"
      v-bind:class="isActive(mode) ? 'active' : 'inactive'"
    >
      <Icon v-bind:type="mode.icon" v-bind:theme="isActive(mode) ? 'light' : 'dark'" />
    </button>
  </nav>
</template>

<script>
import { mapState, mapGetters } from 'vuex'

import * as allModes from '@/experimental/modes'

export default {
  computed: {
    ...mapState({
      mode: state => state.ui.mode
    }),
    ...mapGetters({
      activeMode: 'ui/activeMode'
    })
  },
  methods: {
    setMode(mode) {
      this.$store.commit('ui/setMode', mode)
    },
    isActive(mode) {
      return this.mode === mode.name
    }
  },
  data() {
    return {
      allModes
    }
  }
}
</script>

<style scoped>
nav {
  position: absolute;
  bottom: 20px;
  left: 20px;
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
button {
  border: none;
  width: 50px;
  height: 50px;
  padding: 0;
  margin: 0;
  background: white;
  border-radius: 25px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: white;
  outline: none;
  box-shadow: 0px 0px 0px 2px rgba(0, 0, 0, 0.1);
  margin-right: 10px;
}
button.active {
  background: rgb(30, 30, 30);
}
</style>