<template>
  <form @submit.prevent="submit">
    <FormElement :error="fieldHasErrors('name')" class="control">
      <label class="control__label">{{ $t('apiTokenForm.nameLabel') }}</label>
      <div class="control__elements">
        <input
          ref="name"
          v-model="values.name"
          :class="{ 'input--error': fieldHasErrors('name') }"
          type="text"
          class="input input--large"
          @blur="$v.values.name.$touch()"
        />
        <div v-if="fieldHasErrors('name')" class="error">
          {{ $t('error.requiredField') }}
        </div>
      </div>
    </FormElement>
    <FormElement :error="fieldHasErrors('group')" class="control">
      <label class="control__label">{{
        $t('apiTokenForm.workspaceLabel')
      }}</label>
      <Dropdown
        v-model="values.group"
        class="col-4"
        @hide="$v.values.group.$touch()"
      >
        <DropdownItem
          v-for="group in groups"
          :key="group.id"
          :name="group.name"
          :value="group.id"
        ></DropdownItem>
      </Dropdown>
      <div class="control__elements">
        <div v-if="fieldHasErrors('group')" class="error">
          {{ $t('error.requiredField') }}
        </div>
      </div>
    </FormElement>
    <slot></slot>
  </form>
</template>

<script>
import { mapState } from 'vuex'
import { required } from 'vuelidate/lib/validators'

import form from '@baserow/modules/core/mixins/form'

export default {
  name: 'APITokenForm',
  mixins: [form],
  data() {
    return {
      values: {
        name: '',
        group: '',
      },
    }
  },
  computed: {
    ...mapState({
      groups: (state) => state.group.items,
    }),
  },
  mounted() {
    this.$refs.name.focus()
  },
  validations: {
    values: {
      name: { required },
      group: { required },
    },
  },
}
</script>