diff --git a/app/assets/javascripts/boards/boards_bundle.js.es6 b/app/assets/javascripts/boards/boards_bundle.js.es6 index 9b6331d54d870d9f3ae5db86f7383aa0acbcbbc9..bae7fa153d76cef71ebaa6127668518174afbb5f 100644 --- a/app/assets/javascripts/boards/boards_bundle.js.es6 +++ b/app/assets/javascripts/boards/boards_bundle.js.es6 @@ -7,15 +7,23 @@ //= require_tree ./components $(function () { - window.service = new BoardService($('#board-app').data('endpoint')); + if (!window.gl) { + window.gl = {}; + } + gl.boardService = new BoardService($('#board-app').data('endpoint')); - new Vue({ + if (gl.IssueBoardsApp) { + gl.IssueBoardsApp.$destroy(true); + BoardsStore.reset(); + } + + gl.IssueBoardsApp = new Vue({ el: '#board-app', data: { state: BoardsStore.state }, ready: function () { - service.all() + gl.boardService.all() .then((resp) => { const boards = resp.json(); diff --git a/app/assets/javascripts/boards/components/board_blank_state.js.es6 b/app/assets/javascripts/boards/components/board_blank_state.js.es6 index 6208a8e039af8f651b79ec055a3ee178426d079b..61cf3282c02d5f263169a77a20a38f0c0f4157ba 100644 --- a/app/assets/javascripts/boards/components/board_blank_state.js.es6 +++ b/app/assets/javascripts/boards/components/board_blank_state.js.es6 @@ -2,10 +2,10 @@ const BoardBlankState = Vue.extend({ methods: { addDefaultLists: function () { - + }, clearBlankState: function () { - BoardsStore.removeList('blank'); + BoardsStore.removeBlankState(); } } }); diff --git a/app/assets/javascripts/boards/models/list.js.es6 b/app/assets/javascripts/boards/models/list.js.es6 index 6482eda828caf0f8675fbd2baa6fbf5c11bd5ff5..0e62987dbb8700f28cc57fe30a94d6fbc13b1598 100644 --- a/app/assets/javascripts/boards/models/list.js.es6 +++ b/app/assets/javascripts/boards/models/list.js.es6 @@ -12,7 +12,7 @@ class List { if (this.type !== 'blank') { this.loading = true; - service.getIssuesForList(this.id) + gl.boardService.getIssuesForList(this.id) .then((resp) => { const data = resp.json(); this.loading = false; @@ -25,7 +25,7 @@ class List { } save () { - service.createList(this.label.id) + gl.boardService.createList(this.label.id) .then((resp) => { const data = resp.json(); @@ -36,11 +36,13 @@ class List { } destroy () { - service.destroyList(this.id); + if (this.type !== 'blank') { + gl.boardService.destroyList(this.id); + } } update () { - service.updateList(this); + gl.boardService.updateList(this); } canSearch () { @@ -52,7 +54,7 @@ class List { issue.addLabel(this.label); - service.moveIssue(issue.id, listFrom.id, this.id); + gl.boardService.moveIssue(issue.id, listFrom.id, this.id); } findIssue (id) { diff --git a/app/assets/javascripts/boards/stores/boards_store.js.es6 b/app/assets/javascripts/boards/stores/boards_store.js.es6 index 9612d82788ad5360bea1819d74360e9c77005b13..4d430f2a77bcbc8d159bbf63ebba74563feae860 100644 --- a/app/assets/javascripts/boards/stores/boards_store.js.es6 +++ b/app/assets/javascripts/boards/stores/boards_store.js.es6 @@ -9,6 +9,15 @@ label: [] } }, + reset: function () { + this.state.lists = []; + this.state.filters = { + author: {}, + assignee: {}, + milestone: {}, + label: [] + }; + }, new: function (board, persist = true) { const doneList = this.getDoneList(), list = new List(board); @@ -35,6 +44,8 @@ return addBlankState; }, addBlankState: function () { + if ($.cookie('issue_board_welcome_hidden') === 'true') return; + const doneList = this.getDoneList(), addBlankState = this.shouldAddBlankState(); @@ -49,24 +60,22 @@ }, removeBlankState: function () { this.removeList('blank'); + + $.cookie('issue_board_welcome_hidden', 'true', { + path: '/', + expires: 365 * 10 + }); }, getDoneList: function () { return this.findList('type', 'done'); }, removeList: function (id) { const list = this.findList('id', id); - - if (id !== 'blank') { - list.destroy(); - } + list.destroy(); this.state.lists = _.reject(this.state.lists, (list) => { return list.id === id; }); - - if (id !== 'blank') { - this.addBlankState(); - } }, moveList: function (oldIndex, newIndex) { const listFrom = this.findList('position', oldIndex), diff --git a/app/views/projects/boards/components/_blank_state.html.haml b/app/views/projects/boards/components/_blank_state.html.haml index 6e25aa966e1601524877464706edd8bdf54c1f91..1379a295912eac5c10860ff9d992bc9e08169e7b 100644 --- a/app/views/projects/boards/components/_blank_state.html.haml +++ b/app/views/projects/boards/components/_blank_state.html.haml @@ -11,4 +11,4 @@ %button.btn.btn-create.btn-inverted.btn-block{ type: "button", "@click" => "addDefaultLists" } Add default lists %button.btn.btn-default.btn-block{ type: "button", "@click" => "clearBlankState" } - Nevermind, i'll use my own + Nevermind, I'll use my own diff --git a/app/views/projects/boards/components/_board.html.haml b/app/views/projects/boards/components/_board.html.haml index 31b2305edca4ac10b600d83c941f29295440ade5..318050d585048e9aaec6fac490bd9972f1d3eec4 100644 --- a/app/views/projects/boards/components/_board.html.haml +++ b/app/views/projects/boards/components/_board.html.haml @@ -4,13 +4,13 @@ %header.board-inner-container.board-header{ ":class" => "{ 'has-border': board.label }", ":style" => "{ borderTopColor: board.label.color }" } %h3.board-title {{ board.title }} - %span.pull-right + %span.pull-right{ "v-if" => "board.type !== 'blank'" } {{ board.issues.length }} %board-delete{ "inline-template" => true, "v-if" => "!isPreset", ":board-id" => "board.id" } %button.board-delete.has-tooltip.pull-right{ type: "button", title: "Delete board", "aria-label" => "Delete board", data: { placement: "bottom" }, "@click" => "deleteBoard" } = icon("trash") .board-inner-container.board-search-container{ "v-if" => "board.canSearch()" } - %input.form-control{ type: "text", placeholder: "Search issues", "v-model" => "query" } + %input.form-control{ type: "text", placeholder: "Search issues", "v-model" => "query", "debounce" => "250" } = icon("search", class: "board-search-icon", "v-show" => "!query") %button.board-search-clear-btn{ type: "button", role: "button", "aria-label" => "Clear search", "@click" => "clearSearch", "v-show" => "query" } = icon("times", class: "board-search-clear") @@ -29,4 +29,5 @@ "v-show" => "!loading", ":data-board" => "boardId" } = render "projects/boards/components/card" - = render "projects/boards/components/blank_state" + - if current_user + = render "projects/boards/components/blank_state"