Library.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <template>
  2. <div class="library">
  3. <!-- BACKGROUND (mode) -->
  4. <component :is="'library-' + mode" @open-node="openNode" />
  5. <!-- FOREGROUND (nodes) -->
  6. <node-book
  7. v-if="nodebook.length"
  8. :nodes="nodebook"
  9. class="library-node-book no-events-container"
  10. @open-node="openNode"
  11. @close-node="closeNode"
  12. @select-node="openNode"
  13. />
  14. </div>
  15. </template>
  16. <script>
  17. import { mapGetters } from 'vuex'
  18. import {
  19. LibraryList,
  20. LibraryMap,
  21. LibraryTree
  22. } from './library'
  23. import { NodeBook } from '@/components/layouts'
  24. export default {
  25. name: 'Library',
  26. components: {
  27. LibraryList,
  28. LibraryMap,
  29. LibraryTree,
  30. NodeBook
  31. },
  32. props: {
  33. query: { type: Object, required: true }
  34. },
  35. computed: {
  36. ...mapGetters(['mode', 'nodebook'])
  37. },
  38. watch: {
  39. query (query) {
  40. this.$store.dispatch('UPDATE_NODEBOOK', query)
  41. }
  42. },
  43. methods: {
  44. openNode (ids) {
  45. this.$store.dispatch('OPEN_NODE', ids)
  46. },
  47. closeNode (ids) {
  48. this.$store.dispatch('CLOSE_NODE', ids)
  49. }
  50. },
  51. created () {
  52. this.$store.dispatch('UPDATE_NODEBOOK', this.query)
  53. }
  54. }
  55. </script>
  56. <style lang="scss" scoped>
  57. .library {
  58. height: 100%;
  59. &-node-book {
  60. position: relative;
  61. margin-bottom: -100%;
  62. // compensate header border
  63. height: calc(100% + 2px);
  64. top: calc(-100% - 2px);
  65. @include media-breakpoint-down($layout-bp-down) {
  66. margin-bottom: -100vh;
  67. }
  68. }
  69. }
  70. </style>