/* global ListIssue */ import Vue from 'vue'; import bp from '../../../breakpoints'; const ModalStore = gl.issueBoards.ModalStore; gl.issueBoards.ModalList = Vue.extend({ props: { issueLinkBase: { type: String, required: true, }, rootPath: { type: String, required: true, }, emptyStateSvg: { type: String, required: true, }, }, data() { return ModalStore.store; }, watch: { activeTab() { if (this.activeTab === 'all') { ModalStore.purgeUnselectedIssues(); } }, }, computed: { loopIssues() { if (this.activeTab === 'all') { return this.issues; } return this.selectedIssues; }, groupedIssues() { const groups = []; this.loopIssues.forEach((issue, i) => { const index = i % this.columns; if (!groups[index]) { groups.push([]); } groups[index].push(issue); }); return groups; }, }, methods: { scrollHandler() { const currentPage = Math.floor(this.issues.length / this.perPage); if ((this.scrollTop() > this.scrollHeight() - 100) && !this.loadingNewPage && currentPage === this.page) { this.loadingNewPage = true; this.page += 1; } }, toggleIssue(e, issue) { if (e.target.tagName !== 'A') { ModalStore.toggleIssue(issue); } }, listHeight() { return this.$refs.list.getBoundingClientRect().height; }, scrollHeight() { return this.$refs.list.scrollHeight; }, scrollTop() { return this.$refs.list.scrollTop + this.listHeight(); }, showIssue(issue) { if (this.activeTab === 'all') return true; const index = ModalStore.selectedIssueIndex(issue); return index !== -1; }, setColumnCount() { const breakpoint = bp.getBreakpointSize(); if (breakpoint === 'lg' || breakpoint === 'md') { this.columns = 3; } else if (breakpoint === 'sm') { this.columns = 2; } else { this.columns = 1; } }, }, mounted() { this.scrollHandlerWrapper = this.scrollHandler.bind(this); this.setColumnCountWrapper = this.setColumnCount.bind(this); this.setColumnCount(); this.$refs.list.addEventListener('scroll', this.scrollHandlerWrapper); window.addEventListener('resize', this.setColumnCountWrapper); }, beforeDestroy() { this.$refs.list.removeEventListener('scroll', this.scrollHandlerWrapper); window.removeEventListener('resize', this.setColumnCountWrapper); }, components: { 'issue-card-inner': gl.issueBoards.IssueCardInner, }, template: `

There are no issues to show.

`, });