You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
1.9 KiB

  1. <template>
  2. <base-card
  3. title="Create Label"
  4. agree-text="Create"
  5. cancel-text="Cancel"
  6. :disabled="!valid"
  7. @agree="create"
  8. @cancel="cancel"
  9. >
  10. <template #content>
  11. <v-form
  12. ref="form"
  13. v-model="valid"
  14. >
  15. <v-text-field
  16. v-model="labelName"
  17. :rules="nameRules"
  18. label="Label name"
  19. prepend-icon="label"
  20. />
  21. <v-select
  22. v-model="suffixKey"
  23. :items="keys"
  24. label="Key"
  25. prepend-icon="mdi-keyboard"
  26. />
  27. <v-color-picker
  28. v-model="color"
  29. :rules="colorRules"
  30. show-swatches
  31. hide-mode-switch
  32. width="800"
  33. mode="hexa"
  34. class="ma-2"
  35. />
  36. </v-form>
  37. </template>
  38. </base-card>
  39. </template>
  40. <script>
  41. import BaseCard from '@/components/molecules/BaseCard'
  42. export default {
  43. components: {
  44. BaseCard
  45. },
  46. props: {
  47. createLabel: {
  48. type: Function,
  49. default: () => {},
  50. required: true
  51. },
  52. keys: {
  53. type: Array,
  54. default: () => 'abcdefghijklmnopqrstuvwxyz'.split('')
  55. }
  56. },
  57. data() {
  58. return {
  59. valid: false,
  60. labelName: '',
  61. suffixKey: '',
  62. color: '',
  63. nameRules: [
  64. v => !!v || 'Label name is required',
  65. v =>
  66. (v && v.length <= 30) || 'Label name must be less than 30 characters'
  67. ],
  68. colorRules: [
  69. v => !!v || 'Color is required'
  70. ]
  71. }
  72. },
  73. methods: {
  74. cancel() {
  75. this.$emit('close')
  76. },
  77. validate() {
  78. return this.$refs.form.validate()
  79. },
  80. reset() {
  81. this.$refs.form.reset()
  82. },
  83. create() {
  84. if (this.validate()) {
  85. this.createLabel({
  86. text: this.labelName,
  87. suffix_key: this.suffixKey,
  88. background_color: this.color
  89. })
  90. this.reset()
  91. this.cancel()
  92. }
  93. }
  94. }
  95. }
  96. </script>