Commit 54cae7e6 authored by Simon Knox's avatar Simon Knox

use popup dialog component and move Edit button outside dropdown

parent 84d1dfcb
...@@ -145,6 +145,29 @@ $(() => { ...@@ -145,6 +145,29 @@ $(() => {
}, },
}); });
gl.boardConfigToggle = new Vue({
el: document.querySelector('.js-board-config'),
methods: {
showPage: page => gl.issueBoards.BoardsStore.showPage(page),
},
computed: {
buttonText() {
return Math.random > 0.5 ? 'Edit board' : 'View scope';
},
},
template: `
<div class="prepend-left-10">
<button
class="btn btn-inverted"
type="button"
@click.prevent="showPage('edit')"
>
{{ buttonText }}
</button>
</div>
`,
});
gl.IssueBoardsModalAddBtn = new Vue({ gl.IssueBoardsModalAddBtn = new Vue({
mixins: [gl.issueBoards.ModalMixins], mixins: [gl.issueBoards.ModalMixins],
el: document.getElementById('js-add-issues-btn'), el: document.getElementById('js-add-issues-btn'),
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
import Vue from 'vue'; import Vue from 'vue';
import PopupDialog from '~/vue_shared/components/popup_dialog.vue'; import PopupDialog from '~/vue_shared/components/popup_dialog.vue';
import boardMilestoneSelect from './milestone_select'; import boardMilestoneSelect from './milestone_select';
import extraMilestones from '../mixins/extra_milestones';
(() => { (() => {
window.gl = window.gl || {}; window.gl = window.gl || {};
...@@ -23,15 +22,12 @@ import extraMilestones from '../mixins/extra_milestones'; ...@@ -23,15 +22,12 @@ import extraMilestones from '../mixins/extra_milestones';
board: { board: {
id: false, id: false,
name: '', name: '',
milestone: extraMilestones[0],
milestone_id: extraMilestones[0].id,
}, },
issue: {}, issue: {},
currentBoard: Store.state.currentBoard, currentBoard: Store.state.currentBoard,
currentPage: Store.state.currentPage, currentPage: Store.state.currentPage,
milestones: [], milestones: [],
milestoneDropdownOpen: false, milestoneDropdownOpen: false,
extraMilestones,
}; };
}, },
components: { components: {
......
/* global BoardService */ /* global BoardService, MilestoneSelect */
import extraMilestones from '../mixins/extra_milestones'; import extraMilestones from '../mixins/extra_milestones';
...@@ -26,39 +26,45 @@ export default { ...@@ -26,39 +26,45 @@ export default {
}, },
mounted() { mounted() {
BoardService.loadMilestones.call(this); BoardService.loadMilestones.call(this);
MilestoneSelect();
}, },
template: ` template: `
<div> <div class="dropdown">
<div class="text-center"> <button data-toggle="dropdown" class="dropdown-menu-toggle">{{ board.milestone ? board.milestone.title : 'Milestone' }}</button>
<i <div class="dropdown-menu">
v-if="loading" <div class="dropdown-content">
class="fa fa-spinner fa-spin"></i> <div class="text-center">
</div>
<ul
class="board-milestone-list"
v-if="!loading">
<li v-for="milestone in extraMilestones">
<a
href="#"
@click.prevent.stop="selectMilestone(milestone)">
<i
class="fa fa-check"
v-if="board.milestone_id === milestone.id"></i>
{{ milestone.title }}
</a>
</li>
<li class="divider"></li>
<li v-for="milestone in milestones">
<a
href="#"
@click.prevent.stop="selectMilestone(milestone)">
<i <i
class="fa fa-check" v-if="loading"
v-if="board.milestone_id === milestone.id"></i> class="fa fa-spinner fa-spin"></i>
{{ milestone.title }} </div>
</a> <ul
</li> class="board-milestone-list"
</ul> v-if="!loading">
<li v-for="milestone in extraMilestones">
<a
href="#"
@click.prevent.stop="selectMilestone(milestone)">
<i
class="fa fa-check"
v-if="board.milestone_id === milestone.id"></i>
{{ milestone.title }}
</a>
</li>
<li class="divider"></li>
<li v-for="milestone in milestones">
<a
href="#"
@click.prevent.stop="selectMilestone(milestone)">
<i
class="fa fa-check"
v-if="board.milestone_id === milestone.id"></i>
{{ milestone.title }}
</a>
</li>
</ul>
</div>
</div>
</div> </div>
`, `,
}; };
...@@ -12,7 +12,11 @@ gl.issueBoards.BoardsStore = { ...@@ -12,7 +12,11 @@ gl.issueBoards.BoardsStore = {
filter: { filter: {
path: '', path: '',
}, },
state: {}, state: {
currentBoard: {},
currentPage: '',
reload: false,
},
detail: { detail: {
issue: {} issue: {}
}, },
...@@ -30,6 +34,10 @@ gl.issueBoards.BoardsStore = { ...@@ -30,6 +34,10 @@ gl.issueBoards.BoardsStore = {
this.state.currentPage = ''; this.state.currentPage = '';
this.state.reload = false; this.state.reload = false;
}, },
showPage(page) {
this.state.reload = false;
this.state.currentPage = page;
},
addList (listObj, defaultAvatar) { addList (listObj, defaultAvatar) {
const list = new List(listObj, defaultAvatar); const list = new List(listObj, defaultAvatar);
this.state.lists.push(list); this.state.lists.push(list);
......
...@@ -54,16 +54,18 @@ export default { ...@@ -54,16 +54,18 @@ export default {
<div class="modal-dialog" role="document"> <div class="modal-dialog" role="document">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" <slot name="header">
class="close" <button type="button"
@click="close" class="close"
aria-label="Close"> @click="close"
<span aria-hidden="true">&times;</span> aria-label="Close">
</button> <span aria-hidden="true">&times;</span>
<h4 class="modal-title">{{this.title}}</h4> </button>
<h4 class="modal-title">{{this.title}}</h4>
</slot>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<slot name="body"> <slot>
<p>{{this.body}}</p> <p>{{this.body}}</p>
</slot> </slot>
</div> </div>
......
...@@ -30,9 +30,6 @@ ...@@ -30,9 +30,6 @@
%li %li
%a{ "href" => "#", "@click.prevent" => "showPage('new')" } %a{ "href" => "#", "@click.prevent" => "showPage('new')" }
Create new board Create new board
%li
%a{ "href" => "#", "@click.prevent" => "showPage('edit')" }
Edit board
%li{ "v-if" => "showDelete" } %li{ "v-if" => "showDelete" }
%a{ "href" => "#", "@click.prevent" => "showPage('delete')" } %a{ "href" => "#", "@click.prevent" => "showPage('delete')" }
%span.text-danger %span.text-danger
......
#edit-board-modal.modal.fade{ tabindex: -1 } %popup-dialog{ ":title": "title" }
.modal-dialog.modal-md %template{ slot: "body" }
.modal-content %p{ "v-if" => "currentPage === 'delete'" }
.modal-header Are you sure you want to delete this board?
%a.close{ href: "#", "data-dismiss" => "modal" } × %form{ "v-else" => true,
%h4 "@submit.prevent" => "submit" }
{{ title }} %input{ type: "hidden",
%div{ "v-if" => "currentPage === 'delete'" } id: "board-milestone",
.modal-body "v-model.number" => "board.milestone_id" }
%p %div
Are you sure you want to delete this board? %label.label-light{ for: "board-new-name" }
.modal-footer Board name
= link_to current_board_path(board), %input.form-control{ type: "text",
class: "btn btn-danger pull-left", id: "board-new-name",
method: :delete do "v-model" => "board.name" }
Delete - if current_board_parent.issue_board_milestone_available?(current_user)
%button.btn.btn-default.pull-right{ type: "button", %board-milestone-select{ ":board": "board",
"@click" => "cancel", ":milestone-path": "milestonePath",
data: { dismiss: "modal" } } ":select-milestone": "selectMilestone" }
Cancel %template{ slot: "footer" }
%form{ "v-else" => true, = link_to current_board_path(board),
"@submit.prevent" => "submit" } class: "btn btn-danger pull-left",
.modal-body "v-if": "currentPage === 'delete'",
%input{ type: "hidden", method: :delete do
id: "board-milestone", Delete
"v-model.number" => "board.milestone_id" } %button.btn.btn-primary.pull-left{ type: "button",
%div "v-else": true,
%label.label-light{ for: "board-new-name" } "@click" => "submit",
Board name ":disabled" => "submitDisabled",
%input.form-control{ type: "text", "ref" => "'submit-btn'" }
id: "board-new-name", {{ buttonText }}
"v-model" => "board.name" } %button.btn.btn-default.pull-right{ type: "button",
- if current_board_parent.issue_board_milestone_available?(current_user) "@click" => "cancel",
.dropdown.board-inner-milestone-dropdown{ ":class" => "{ open: milestoneDropdownOpen }" } data: { dismiss: "modal" } }
%label.label-light{ for: "board-milestone" } Cancel
Board milestone
%button.dropdown-menu-toggle.wide{ type: "button",
"@click.stop.prevent" => "loadMilestones($event)" }
{{ milestoneToggleText }}
= icon("chevron-down")
.dropdown-menu.dropdown-menu-selectable{ "v-if" => "milestoneDropdownOpen",
ref: "milestoneDropdown" }
.dropdown-content
%ul
%li{ "v-for" => "milestone in extraMilestones" }
%a{ href: "#",
":class" => "{ 'is-active': milestone.id === board.milestone_id }",
"@click.stop.prevent" => "selectMilestone(milestone)" }
{{ milestone.title }}
%li.divider
%li{ "v-for" => "milestone in milestones" }
%a{ href: "#",
":class" => "{ 'is-active': milestone.id === board.milestone_id }",
"@click.stop.prevent" => "selectMilestone(milestone)" }
{{ milestone.title }}
= dropdown_loading
.modal-footer
%button.btn.btn-primary.pull-left{ type: "submit",
":disabled" => "submitDisabled",
"ref" => "'submit-btn'" }
{{ buttonText }}
%button.btn.btn-default.pull-right{ type: "button",
"@click.prevent" => "cancel",
data: { dismiss: "modal" } }
Cancel
...@@ -124,6 +124,7 @@ ...@@ -124,6 +124,7 @@
= icon('times') = icon('times')
.filter-dropdown-container .filter-dropdown-container
- if type == :boards - if type == :boards
.js-board-config
- if can?(current_user, :admin_list, board.parent) - if can?(current_user, :admin_list, board.parent)
.dropdown.prepend-left-10#js-add-list .dropdown.prepend-left-10#js-add-list
%button.btn.btn-create.btn-inverted.js-new-board-list{ type: "button", data: board_list_data } %button.btn.btn-create.btn-inverted.js-new-board-list{ type: "button", data: board_list_data }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment