NodeViewHeaderProd.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <div
  3. class="node-view-header-prod" :class="'node-view-header-' + mode"
  4. >
  5. <div class="node-view-header-wrapper d-flex w-100">
  6. <h4 class="mr-auto">
  7. <div class="node-view-header-type">
  8. {{ $t('variants.' + node.variant) }} {{ withOrigin ? $t('from') : '' }}
  9. </div>
  10. <div v-if="withOrigin" class="node-view-header-parent">
  11. <node-view-title :node="node.parents[0]" edition tag="div" />
  12. </div>
  13. </h4>
  14. <button-close v-if="mode === 'view'" @click="onClose()" :style="`--offset: ${offset}px;`" />
  15. </div>
  16. </div>
  17. </template>
  18. <script>
  19. import { trim, toCommaList } from '@/helpers/common'
  20. import { NodeViewTitle } from '@/components/nodes'
  21. export default {
  22. name: 'NodeViewHeaderProd',
  23. components: {
  24. NodeViewTitle
  25. },
  26. props: {
  27. node: { type: Object, required: true },
  28. mode: { type: String, required: true },
  29. showOrigin: { type: Boolean, required: true }
  30. },
  31. computed: {
  32. parent () {
  33. if (!this.node || !this.node.parents) return
  34. return this.node.parents.find(parent => parent.variant === 'depart')
  35. },
  36. withOrigin () {
  37. return (this.showOrigin || this.mode === 'card') && this.node.parents && this.node.parents.length
  38. }
  39. },
  40. data () {
  41. return {
  42. offset: 0
  43. }
  44. },
  45. methods: {
  46. trim,
  47. toCommaList,
  48. onClose () {
  49. this.$parent.$emit('close-node', this.node.id)
  50. }
  51. },
  52. mounted () {
  53. const parentContH = this.$el.parentElement.offsetWidth
  54. const parentH = this.$el.parentElement.parentElement.offsetWidth
  55. this.offset = (parentH - parentContH) * -1
  56. }
  57. }
  58. </script>
  59. <style lang="scss" scoped>
  60. .node-view-header {
  61. &-prod {
  62. font: {
  63. family: $font-family-base;
  64. font-weight: $font-weight-bold;
  65. size: inherit;
  66. line-height: inherit;
  67. }
  68. @each $color, $value in $theme-colors {
  69. .node-view-#{$color} & {
  70. color: darken($value, 32%);
  71. }
  72. }
  73. }
  74. &-parent {
  75. font-family: $font-family-text;
  76. }
  77. &-card {
  78. h4 {
  79. font-size: 0.8rem;
  80. @include media-breakpoint-up($size-bp) {
  81. font-size: 1.25rem;
  82. }
  83. }
  84. }
  85. &-view {
  86. h4 {
  87. font-size: 1rem;
  88. @include media-breakpoint-up($size-bp) {
  89. font-size: 1.4525rem;
  90. }
  91. }
  92. }
  93. .btn-close {
  94. position: relative;
  95. display: flex;
  96. float: right;
  97. @include media-breakpoint-up($layout-bp) {
  98. right: var(--offset);
  99. }
  100. }
  101. }
  102. </style>