gitlab-org--gitlab-foss/app/assets/javascripts/boards/boards_bundle.js.es6

112 lines
3.2 KiB
JavaScript
Raw Normal View History

/* eslint-disable one-var, quote-props, comma-dangle, space-before-function-paren, import/newline-after-import, no-multi-spaces, max-len */
/* global Vue */
/* global BoardService */
function requireAll(context) { return context.keys().map(context); }
window.Vue = require('vue');
window.Vue.use(require('vue-resource'));
requireAll(require.context('./models', true, /^\.\/.*\.(js|es6)$/));
requireAll(require.context('./stores', true, /^\.\/.*\.(js|es6)$/));
requireAll(require.context('./services', true, /^\.\/.*\.(js|es6)$/));
requireAll(require.context('./mixins', true, /^\.\/.*\.(js|es6)$/));
requireAll(require.context('./filters', true, /^\.\/.*\.(js|es6)$/));
require('./components/board');
require('./components/board_sidebar');
require('./components/new_list_dropdown');
require('./components/modal/index');
require('../vue_shared/vue_resource_interceptor');
2016-07-28 11:33:04 +00:00
$(() => {
2017-01-12 03:49:57 +00:00
const $boardApp = document.getElementById('board-app');
const Store = gl.issueBoards.BoardsStore;
2017-01-25 16:53:09 +00:00
const ModalStore = gl.issueBoards.ModalStore;
window.gl = window.gl || {};
2016-07-28 11:33:04 +00:00
if (gl.IssueBoardsApp) {
gl.IssueBoardsApp.$destroy(true);
}
Store.create();
gl.IssueBoardsApp = new Vue({
el: $boardApp,
components: {
2016-10-04 14:27:02 +00:00
'board': gl.issueBoards.Board,
'board-sidebar': gl.issueBoards.BoardSidebar,
'board-add-issues-modal': gl.issueBoards.IssuesModal,
},
2016-07-28 11:33:04 +00:00
data: {
state: Store.state,
loading: true,
endpoint: $boardApp.dataset.endpoint,
boardId: $boardApp.dataset.boardId,
disabled: $boardApp.dataset.disabled === 'true',
issueLinkBase: $boardApp.dataset.issueLinkBase,
rootPath: $boardApp.dataset.rootPath,
bulkUpdatePath: $boardApp.dataset.bulkUpdatePath,
detailIssue: Store.detail
2016-07-28 11:33:04 +00:00
},
computed: {
detailIssueVisible () {
return Object.keys(this.detailIssue.issue).length;
},
},
created () {
gl.boardService = new BoardService(this.endpoint, this.bulkUpdatePath, this.boardId);
2016-08-08 15:15:05 +00:00
},
2016-11-03 00:37:33 +00:00
mounted () {
Store.disabled = this.disabled;
gl.boardService.all()
2016-08-19 13:16:07 +00:00
.then((resp) => {
2016-08-17 12:57:36 +00:00
resp.json().forEach((board) => {
const list = Store.addList(board);
if (list.type === 'done') {
list.position = Infinity;
}
2016-08-17 12:57:36 +00:00
});
2016-11-09 09:23:48 +00:00
this.state.lists = _.sortBy(this.state.lists, 'position');
Store.addBlankState();
2016-08-08 15:15:05 +00:00
this.loading = false;
2016-07-28 11:33:04 +00:00
});
}
});
gl.IssueBoardsSearch = new Vue({
2017-02-03 20:42:30 +00:00
el: document.getElementById('js-boards-search'),
data: {
filters: Store.state.filters
},
mounted () {
gl.issueBoards.newListDropdownInit();
}
});
gl.IssueBoardsModalAddBtn = new Vue({
2017-01-31 16:46:57 +00:00
mixins: [gl.issueBoards.ModalMixins],
2017-02-03 20:42:30 +00:00
el: document.getElementById('js-add-issues-btn'),
data: {
modal: ModalStore.store,
store: Store.state,
},
computed: {
disabled() {
return !this.store.lists.filter(list => list.type !== 'blank' && list.type !== 'done').length;
},
},
template: `
<button
class="btn btn-create pull-right prepend-left-10 has-tooltip"
type="button"
:disabled="disabled"
2017-01-31 16:46:57 +00:00
@click="toggleModal(true)">
Add issues
</button>
`,
});
2016-07-28 11:33:04 +00:00
});