ModalCard.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <template>
  2. <article class="card modal-card">
  3. <section class="col col-right">
  4. <header>
  5. <h1>{{ item.title }}</h1>
  6. <h4>{{ item.field_short_description }}</h4>
  7. <span class="ref">{{ item.field_reference }}</span>
  8. </header>
  9. <nav class="tools">
  10. <section class="tool flags">
  11. <span class="btn mdi mdi-folder-outline"/>
  12. <div class="tool-content">
  13. <ul>
  14. <li v-if="flagcolls" v-for="coll in flagcolls" :key="coll.id">
  15. <span
  16. class="flag mdi"
  17. :class="[
  18. flagIsLoading(coll.id) ? 'mdi-loading mdi-spin' : flagIsActive(coll.id) ? 'mdi-close-circle isActive' : 'mdi-plus'
  19. ]"
  20. :collid="coll.id"
  21. @click.prevent="onFlagActionCard"
  22. >
  23. {{ coll.name }}
  24. </span>
  25. </li>
  26. </ul>
  27. </div>
  28. </section>
  29. </nav>
  30. </section>
  31. <section class="col col-left images" v-switcher>
  32. <figure
  33. v-for="(img, index) in item.images"
  34. :key="img.url"
  35. >
  36. <img
  37. class="lazy"
  38. v-lazy="index"
  39. :data-src="img.img_styles.card_full"
  40. :title="img.title"
  41. />
  42. <img
  43. class="blank"
  44. :src="blanksrc"
  45. @click="lightbox_index = index"
  46. >
  47. </figure>
  48. </section>
  49. <CoolLightBox
  50. :items="item.images"
  51. :index="lightbox_index"
  52. srcName="src"
  53. loop="true"
  54. @close="lightbox_index = null">
  55. </CoolLightBox>
  56. </article>
  57. </template>
  58. <script>
  59. import { mapState, mapActions } from 'vuex'
  60. import cardMixins from 'vuejs/components/cardMixins'
  61. export default {
  62. name: "ModalCard",
  63. props: ['item'],
  64. mixins: [cardMixins],
  65. data() {
  66. return {
  67. blanksrc:`${drupalSettings.path.themePath}/assets/img/blank.gif`,
  68. loadingFlag: false,
  69. lightbox_index: null
  70. }
  71. },
  72. computed: {
  73. ...mapState({
  74. flagcolls: state => state.User.flagcolls
  75. })
  76. },
  77. methods: {
  78. ...mapActions({
  79. flagUnflag: 'User/flagUnflag'
  80. }),
  81. flagIsActive(collid) {
  82. // console.log(this.item.uuid);
  83. // console.log(this.flagcolls[collid].items_uuids);
  84. return this.flagcolls[collid].items_uuids.indexOf(this.item.uuid) !== -1;
  85. },
  86. flagIsLoading(collid) {
  87. // console.log(this.item.uuid);
  88. // console.log(this.flagcolls[collid].items_uuids);
  89. return collid === this.loadingFlag;
  90. },
  91. onFlagActionCard (e) {
  92. console.log("Card onFlagActionCard", e);
  93. if (!this.loadingFlag) {
  94. let collid = e.target.getAttribute('collid');
  95. let isActive = this.flagIsActive(collid);
  96. let action = isActive ? 'unflag' : 'flag';
  97. // console.log('collid', collid);
  98. // console.log("this.item", this.item);
  99. this.loadingFlag = collid;
  100. this.flagUnflag({ action: action, uuid: this.item.uuid, collid: collid})
  101. .then(data => {
  102. console.log("onFlagActionCard then", data);
  103. this.loadingFlag = false;
  104. })
  105. }
  106. }
  107. }
  108. }
  109. </script>
  110. <style lang="scss" scoped>
  111. </style>