From 0fa57599a5a6fdd25711276f9fab72ca934502ab Mon Sep 17 00:00:00 2001 From: Phil Hughes Date: Fri, 5 Aug 2016 14:00:06 +0100 Subject: [PATCH] Hides the welcome board forever after it being hidden by the user --- .../javascripts/boards/boards_bundle.js.es6 | 14 ++++++++--- .../components/board_blank_state.js.es6 | 4 +-- .../javascripts/boards/models/list.js.es6 | 12 +++++---- .../boards/stores/boards_store.js.es6 | 25 +++++++++++++------ .../boards/components/_blank_state.html.haml | 2 +- .../boards/components/_board.html.haml | 7 +++--- 6 files changed, 42 insertions(+), 22 deletions(-) diff --git a/app/assets/javascripts/boards/boards_bundle.js.es6 b/app/assets/javascripts/boards/boards_bundle.js.es6 index 9b6331d54d8..bae7fa153d7 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 6208a8e039a..61cf3282c02 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 6482eda828c..0e62987dbb8 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 9612d82788a..4d430f2a77b 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 6e25aa966e1..1379a295912 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 31b2305edca..318050d5850 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" -- GitLab