NodeViewChildListGroup.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <nav class="node-view-child-list-group">
  3. <b-collapse :id="'collapse-child-list-' + id" v-model="visible">
  4. <b-list-group>
  5. <b-list-group-item
  6. v-for="child in orderedChildren" :key="child.id"
  7. :variant="child.variant"
  8. href="javascript:;"
  9. @click="$parent.$emit('open-child', { childId: child.id })"
  10. >
  11. {{ $t('variants.' + child.variant) }}
  12. </b-list-group-item>
  13. </b-list-group>
  14. </b-collapse>
  15. <b-button
  16. class="btn-children"
  17. :class="visible ? null : 'collapsed'"
  18. :aria-expanded="visible ? 'true' : 'false'"
  19. :aria-controls="'collapse-child-list-' + id"
  20. @click.stop="visible = !visible"
  21. variant="dark"
  22. block
  23. >
  24. {{ $t('children')}} <span class="collapse-icon" :class="{ collapsed: !visible }">></span>
  25. </b-button>
  26. </nav>
  27. </template>
  28. <script>
  29. import { orderByVariant } from '@/helpers/common'
  30. export default {
  31. name: 'NodeViewChildListGroup',
  32. props: {
  33. children: { type: Array, required: true },
  34. id: { type: Number, required: true }
  35. },
  36. data () {
  37. return {
  38. visible: window.innerWidth > 769
  39. }
  40. },
  41. computed: {
  42. orderedChildren () {
  43. return orderByVariant(this.children)
  44. }
  45. }
  46. }
  47. </script>
  48. <style lang="scss" scoped>
  49. .node-view-child-list-group {
  50. position: relative;
  51. z-index: 1;
  52. .list-group {
  53. font-family: $font-family-base;
  54. font-weight: $font-weight-bold;
  55. @include media-breakpoint-up($size-bp) {
  56. font-size: 1.75rem;
  57. }
  58. }
  59. .btn-children {
  60. display: flex;
  61. border-radius: 0 !important;
  62. font-weight: $font-weight-bold;
  63. padding: $list-group-item-padding-y $list-group-item-padding-x;
  64. .collapse-icon {
  65. font-weight: inherit;
  66. margin-left: auto;
  67. transform: translate(15px, 0px) rotate(270deg);
  68. &.collapsed {
  69. transform: translate(-3px, 0px) rotate(90deg) ;
  70. }
  71. }
  72. @include media-breakpoint-up('tb') {
  73. display: none;
  74. }
  75. }
  76. }
  77. </style>