<template>
  <div class="grid-view__cell active">
    <div class="grid-field-rating">
      <Rating
        :read-only="readOnly"
        :rating-style="field.style"
        :color="field.color"
        :value="value"
        :max-value="field.max_value"
        @update="update"
      />
    </div>
  </div>
</template>

<script>
import gridField from '@baserow/modules/database/mixins/gridField'
import Rating from '@baserow/modules/database/components/Rating'

export default {
  components: { Rating },
  mixins: [gridField],
  mounted() {
    window.addEventListener('keyup', this.keyup)
  },
  beforeDestroy() {
    window.removeEventListener('keyup', this.keyup)
  },
  methods: {
    update(newValue) {
      this.$emit('update', newValue, this.value)
    },
    keyup(event) {
      // Allow keyboard modification
      const { key } = event
      let newValue = this.value

      if ('0123456789'.includes(key)) {
        // Transform digit in value
        newValue = parseInt(key, 10)
      } else {
        // +, > to increase -, < to decrease
        switch (key) {
          case '+':
          case '>':
            newValue = this.value + 1
            break
          case '-':
          case '<':
            newValue = this.value - 1
            break
        }
      }
      if (newValue !== this.value) {
        // Clamp value
        if (newValue > this.field.max_value) {
          newValue = this.field.max_value
        }
        if (newValue < 0) {
          newValue = 0
        }
        this.$emit('update', newValue, this.value)
      }
    },
  },
}
</script>