diff options
author | Phil Hughes <me@iamphill.com> | 2016-08-09 10:12:32 +0100 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2016-08-17 17:17:39 +0100 |
commit | 271887632e0dc0e4fe755762ae352f59c628651c (patch) | |
tree | 0f3e0f23f9047f370d75a3a5ba0593168a4e0a60 | |
parent | 522d53da1de7f42856eff75ed9fee51cd378d953 (diff) | |
download | gitlab-ce-271887632e0dc0e4fe755762ae352f59c628651c.tar.gz |
Added ability to generate default lists
8 files changed, 64 insertions, 12 deletions
diff --git a/app/assets/javascripts/boards/boards_bundle.js.es6 b/app/assets/javascripts/boards/boards_bundle.js.es6 index 2fb34399b77..95785bb415c 100644 --- a/app/assets/javascripts/boards/boards_bundle.js.es6 +++ b/app/assets/javascripts/boards/boards_bundle.js.es6 @@ -20,7 +20,8 @@ $(function () { el: '#board-app', props: { disabled: Boolean, - endpoint: String + endpoint: String, + issueLinkBase: String }, data: { state: BoardsStore.state, diff --git a/app/assets/javascripts/boards/components/board.js.es6 b/app/assets/javascripts/boards/components/board.js.es6 index c7cd493bf39..a5fb1809760 100644 --- a/app/assets/javascripts/boards/components/board.js.es6 +++ b/app/assets/javascripts/boards/components/board.js.es6 @@ -2,7 +2,8 @@ const Board = Vue.extend({ props: { list: Object, - disabled: Boolean + disabled: Boolean, + issueLinkBase: String }, data: function () { return { 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 4b0b5be0317..1682d137de0 100644 --- a/app/assets/javascripts/boards/components/board_blank_state.js.es6 +++ b/app/assets/javascripts/boards/components/board_blank_state.js.es6 @@ -1,8 +1,44 @@ -(function () { +(() => { const BoardBlankState = Vue.extend({ + data: function () { + return { + predefinedLabels: [ + new Label({ title: 'Development', color: '#5CB85C' }), + new Label({ title: 'Testing', color: '#F0AD4E' }), + new Label({ title: 'Production', color: '#FF5F00' }), + new Label({ title: 'Ready', color: '#FF0000' }) + ] + } + }, methods: { addDefaultLists: function () { + BoardsStore.removeBlankState(); + + _.each(this.predefinedLabels, (label, i) => { + BoardsStore.addList({ + title: label.title, + position: i, + type: 'label', + label: { + title: label.title, + color: label.color + } + }); + }); + + // Save the labels + gl.boardService + .generateDefaultLists() + .then((resp) => { + const data = resp.json(); + _.each(data, (listObj) => { + const list = BoardsStore.findList('title', listObj.title); + list.id = listObj.id; + list.label.id = listObj.label.id; + list.getIssues(); + }); + }); }, clearBlankState: function () { BoardsStore.removeBlankState(); diff --git a/app/assets/javascripts/boards/services/board_service.js.es6 b/app/assets/javascripts/boards/services/board_service.js.es6 index c8a3b4f3dd6..3f5fddecca1 100644 --- a/app/assets/javascripts/boards/services/board_service.js.es6 +++ b/app/assets/javascripts/boards/services/board_service.js.es6 @@ -3,7 +3,12 @@ class BoardService { Vue.http.options.root = root; this.lists = Vue.resource(`${root}{/id}.json`, {}); - this.list = Vue.resource(`${root}/lists{/id}.json`, {}); + this.list = Vue.resource(`${root}/lists{/id}.json`, {}, { + generate: { + method: 'POST', + url: `${root}/lists/generate.json` + } + }); this.issue = Vue.resource(`${root}/issues{/id}.json`, {}); this.issues = Vue.resource(`${root}/lists{/id}/issues.json`, {}); } @@ -17,6 +22,12 @@ class BoardService { return this.lists.get(); } + generateDefaultLists () { + this.setCSRF(); + + return this.list.generate({}); + } + createList (labelId) { this.setCSRF(); diff --git a/app/assets/javascripts/boards/stores/boards_store.js.es6 b/app/assets/javascripts/boards/stores/boards_store.js.es6 index 84acbeef102..4e5cafa0400 100644 --- a/app/assets/javascripts/boards/stores/boards_store.js.es6 +++ b/app/assets/javascripts/boards/stores/boards_store.js.es6 @@ -39,7 +39,7 @@ }, shouldAddBlankState: function () { // Decide whether to add the blank state - return !_.find(this.state.lists, function (list) { + return !!_.find(this.state.lists, function (list) { return list.type === 'backlog' || list.type === 'done'; }); }, diff --git a/app/views/projects/boards/components/_blank_state.html.haml b/app/views/projects/boards/components/_blank_state.html.haml index 72769736f2f..661314dba8c 100644 --- a/app/views/projects/boards/components/_blank_state.html.haml +++ b/app/views/projects/boards/components/_blank_state.html.haml @@ -4,9 +4,9 @@ %p Add the following default lists to your Issue Board with one click: %ul.board-blank-state-list - %li - %span.label-color{ style: "background-color: red;" } - Development + %li{ "v-for" => "label in predefinedLabels" } + %span.label-color{ ":style" => "{ backgroundColor: label.color } " } + {{ label.title }} %p Starting out with the default set of lists will get you right on the way to making the most of your board. %button.btn.btn-create.btn-inverted.btn-block{ type: "button", "@click" => "addDefaultLists" } diff --git a/app/views/projects/boards/components/_board.html.haml b/app/views/projects/boards/components/_board.html.haml index baf367af676..8461c62d7d4 100644 --- a/app/views/projects/boards/components/_board.html.haml +++ b/app/views/projects/boards/components/_board.html.haml @@ -2,7 +2,8 @@ "v-cloak" => true, "v-for" => "list in state.lists | orderBy 'position'", ":list" => "list", - ":disabled" => "#{current_user.nil?}" } + ":disabled" => "disabled", + ":issue-link-base" => "issueLinkBase" } .board{ ":class" => "{ 'is-draggable': !isPreset }" } .board-inner %header.board-header{ ":class" => "{ 'has-border': list.label }", ":style" => "{ borderTopColor: (list.label ? list.label.color : null) }" } @@ -27,7 +28,7 @@ ":issues" => "list.issues", ":loading" => "list.loading", ":disabled" => "disabled", - ":issue-link-base" => "'#{namespace_project_issues_path(@project.namespace, @project)}'" } + ":issue-link-base" => "issueLinkBase" } .board-list-loading.text-center{ "v-if" => "loading" } = icon("spinner spin") %ul.board-list{ "v-el:list" => true, diff --git a/app/views/projects/boards/show.html.haml b/app/views/projects/boards/show.html.haml index 4e033cea034..700bcc21258 100644 --- a/app/views/projects/boards/show.html.haml +++ b/app/views/projects/boards/show.html.haml @@ -10,8 +10,10 @@ = render 'shared/issuable/filter', type: :boards -.boards-list#board-app{ ":endpoint" => "'#{namespace_project_board_path(@project.namespace, @project)}'", - ":disabled" => "#{current_user.nil?}" } +.boards-list#board-app{ "v-cloak" => true, + ":endpoint" => "'#{namespace_project_board_path(@project.namespace, @project)}'", + ":disabled" => "#{current_user.nil?}", + ":issue-link-base" => "'#{namespace_project_issues_path(@project.namespace, @project)}'" } .boards-app-loading.text-center{ "v-if" => "loading" } = icon("spinner spin") = render "projects/boards/components/board" |