LibraryOptions.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div v-if="show" class="d-flex justify-content-between">
  3. <b-form-group
  4. :label="$t('options.display.title')"
  5. v-slot="{ ariaDescribedby }"
  6. >
  7. <b-form-radio-group
  8. id="mode-select"
  9. v-model="currentMode" :options="modes"
  10. name="mode-select" :aria-describedby="ariaDescribedby" buttons
  11. size="sm"
  12. />
  13. </b-form-group>
  14. <b-form-group
  15. v-if="currentMode !== 'tree-map'"
  16. :label="$t('options.filters.title')"
  17. >
  18. <b-form-group
  19. :label="$t('options.filters.choices.tags')"
  20. label-for="tags-select"
  21. >
  22. <multiple-tags-select
  23. id="tags-select" :button-text="$t('options.filters.choices.tags')"
  24. v-model="selectedTags" :options="tags"
  25. />
  26. </b-form-group>
  27. <b-form-group
  28. :label="$t('options.filters.choices.strangeness')"
  29. label-for="strangeness-input"
  30. >
  31. <b-form-input
  32. id="strangeness-input"
  33. type="range" min="0" max="5"
  34. v-model="strangeness"
  35. />
  36. </b-form-group>
  37. </b-form-group>
  38. <b-form-group
  39. :label="$t('options.search.title')"
  40. label-for="search-input"
  41. >
  42. <b-input-group size="sm" append="search-icon">
  43. <b-form-input v-model="search" id="search-input" trim />
  44. </b-input-group>
  45. </b-form-group>
  46. </div>
  47. </template>
  48. <script>
  49. import MultipleTagsSelect from '@/components/formItems/MultipleTagsSelect'
  50. export default {
  51. name: 'LibraryOptions',
  52. components: {
  53. MultipleTagsSelect
  54. },
  55. props: {
  56. show: { type: Boolean, required: true },
  57. mode: { type: String, required: true },
  58. tags: { type: Array, default: () => ([]) }
  59. },
  60. data () {
  61. return {
  62. modes: [
  63. { text: this.$t('options.display.choices.tree-map'), value: 'tree-map' },
  64. { text: this.$t('options.display.choices.card-map'), value: 'card-map' },
  65. { text: this.$t('options.display.choices.card-list'), value: 'card-list' }
  66. ],
  67. currentMode: this.mode,
  68. selectedTags: [],
  69. strangeness: 0,
  70. search: ''
  71. }
  72. },
  73. watch: {
  74. currentMode (mode) {
  75. this.$router.push({ query: { mode } })
  76. }
  77. }
  78. }
  79. </script>
  80. <style lang="scss" scoped>
  81. ::v-deep fieldset > div {
  82. display: flex;
  83. }
  84. </style>