Default to null user when asignee is unselected
Also implemented same behavior on the Issue Boards assignee block. Fixed the default state for search/filter dropdown for issuables.
This commit is contained in:
parent
e12d754b04
commit
adc59353fa
4 changed files with 22 additions and 12 deletions
|
@ -27,6 +27,9 @@ gl.issueBoards.BoardSidebar = Vue.extend({
|
|||
computed: {
|
||||
showSidebar () {
|
||||
return Object.keys(this.issue).length;
|
||||
},
|
||||
assigneeId() {
|
||||
return this.issue.assignee ? this.issue.assignee.id : 0;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
$els.each((function(_this) {
|
||||
return function(i, dropdown) {
|
||||
var options = {};
|
||||
var $block, $collapsedSidebar, $dropdown, $loading, $selectbox, $value, abilityName, assignTo, assigneeTemplate, collapsedAssigneeTemplate, defaultLabel, defaultNullUser, firstUser, issueURL, selectedId, showAnyUser, showNullUser, showMenuAbove;
|
||||
var $block, $collapsedSidebar, $dropdown, $loading, $selectbox, $value, abilityName, assignTo, assigneeTemplate, collapsedAssigneeTemplate, defaultLabel, defaultNullUser, firstUser, issueURL, selectedId, selectedIdDefault, showAnyUser, showNullUser, showMenuAbove;
|
||||
$dropdown = $(dropdown);
|
||||
options.projectId = $dropdown.data('project-id');
|
||||
options.groupId = $dropdown.data('group-id');
|
||||
|
@ -51,8 +51,8 @@
|
|||
$value = $block.find('.value');
|
||||
$collapsedSidebar = $block.find('.sidebar-collapsed-user');
|
||||
$loading = $block.find('.block-loading').fadeOut();
|
||||
selectedId = $dropdown.data('selected');
|
||||
if (!selectedId) selectedId = (defaultNullUser && showNullUser) ? 0 : null;
|
||||
selectedIdDefault = (defaultNullUser && showNullUser) ? 0 : null;
|
||||
selectedId = $dropdown.data('selected') || selectedIdDefault;
|
||||
|
||||
var updateIssueBoardsIssue = function () {
|
||||
$loading.removeClass('hidden').fadeIn();
|
||||
|
@ -188,12 +188,14 @@
|
|||
fieldName: $dropdown.data('field-name'),
|
||||
toggleLabel: function(selected, el) {
|
||||
if (selected && 'id' in selected && $(el).hasClass('is-active')) {
|
||||
$dropdown.find('.dropdown-toggle-text').removeClass('is-default');
|
||||
if (selected.text) {
|
||||
return selected.text;
|
||||
} else {
|
||||
return selected.name;
|
||||
}
|
||||
} else {
|
||||
$dropdown.find('.dropdown-toggle-text').addClass('is-default');
|
||||
return defaultLabel;
|
||||
}
|
||||
},
|
||||
|
@ -206,11 +208,12 @@
|
|||
},
|
||||
vue: $dropdown.hasClass('js-issue-board-sidebar'),
|
||||
clicked: function(user, $el, e) {
|
||||
var isIssueIndex, isMRIndex, page, selected;
|
||||
var isIssueIndex, isMRIndex, page, selected, isSelecting;
|
||||
page = $('body').data('page');
|
||||
isIssueIndex = page === 'projects:issues:index';
|
||||
isMRIndex = (page === page && page === 'projects:merge_requests:index');
|
||||
selectedId = user.id;
|
||||
isSelecting = (user.id !== selectedId);
|
||||
selectedId = isSelecting ? user.id : selectedIdDefault;
|
||||
if ($dropdown.hasClass('js-filter-bulk-update') || $dropdown.hasClass('js-issuable-form-dropdown')) {
|
||||
e.preventDefault();
|
||||
if (selectedId === gon.current_user_id) {
|
||||
|
@ -227,7 +230,7 @@
|
|||
} else if ($dropdown.hasClass('js-filter-submit')) {
|
||||
return $dropdown.closest('form').submit();
|
||||
} else if ($dropdown.hasClass('js-issue-board-sidebar')) {
|
||||
if (user.id) {
|
||||
if (user.id && isSelecting) {
|
||||
gl.issueBoards.boardStoreIssueSet('assignee', new ListUser({
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
|
@ -249,6 +252,9 @@
|
|||
},
|
||||
opened: function(e) {
|
||||
const $el = $(e.currentTarget);
|
||||
if ($dropdown.hasClass('js-issue-board-sidebar')) {
|
||||
selectedId = parseInt($dropdown[0].dataset.selected, 10) || selectedIdDefault;
|
||||
}
|
||||
$el.find('.is-active').removeClass('is-active');
|
||||
$el.find(`li[data-user-id="${selectedId}"] .dropdown-menu-user-link`).addClass('is-active');
|
||||
},
|
||||
|
|
|
@ -28,8 +28,9 @@
|
|||
":value" => "issue.assignee.id",
|
||||
"v-if" => "issue.assignee" }
|
||||
.dropdown
|
||||
%button.dropdown-menu-toggle.js-user-search.js-author-search.js-issue-board-sidebar{ type: "button", data: { toggle: "dropdown", field_name: "issue[assignee_id]", first_user: (current_user.username if current_user), current_user: "true", project_id: @project.id, null_user: "true" },
|
||||
%button.dropdown-menu-toggle.js-user-search.js-author-search.js-issue-board-sidebar{ type: "button", data: { toggle: "dropdown", field_name: "issue[assignee_id]", first_user: (current_user.username if current_user), current_user: "true", project_id: @project.id, null_user: "true", null_user_default: "true" },
|
||||
":data-issuable-id" => "issue.id",
|
||||
":data-selected" => "assigneeId",
|
||||
":data-issue-update" => "'#{namespace_project_issues_path(@project.namespace, @project)}/' + issue.id + '.json'" }
|
||||
Select assignee
|
||||
= icon("chevron-down")
|
||||
|
|
|
@ -117,7 +117,7 @@
|
|||
.issues_bulk_update.hide
|
||||
= form_tag [:bulk_update, @project.namespace.becomes(Namespace), @project, type], method: :post, class: 'bulk-update' do
|
||||
.filter-item.inline
|
||||
= dropdown_tag("Status", options: { toggle_class: "js-issue-status", title: "Change status", dropdown_class: "dropdown-menu-status dropdown-menu-selectable", data: { field_name: "update[state_event]" } } ) do
|
||||
= dropdown_tag("Status", options: { toggle_class: "js-issue-status", title: "Change status", dropdown_class: "dropdown-menu-status dropdown-menu-selectable", data: { field_name: "update[state_event]", default_label: "Status" } } ) do
|
||||
%ul
|
||||
%li
|
||||
%a{ href: "#", data: { id: "reopen" } } Open
|
||||
|
@ -125,13 +125,13 @@
|
|||
%a{ href: "#", data: { id: "close" } } Closed
|
||||
.filter-item.inline
|
||||
= dropdown_tag("Assignee", options: { toggle_class: "js-user-search js-update-assignee js-filter-submit js-filter-bulk-update", title: "Assign to", filter: true, dropdown_class: "dropdown-menu-user dropdown-menu-selectable",
|
||||
placeholder: "Search authors", data: { first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]" } })
|
||||
placeholder: "Search authors", data: { first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]", default_label: "Assignee" } })
|
||||
.filter-item.inline
|
||||
= dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select js-extra-options js-filter-submit js-filter-bulk-update', filter: true, dropdown_class: "dropdown-menu-selectable dropdown-menu-milestone", placeholder: "Search milestones", data: { show_no: true, field_name: "update[milestone_id]", project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :json), use_id: true } })
|
||||
= dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select js-extra-options js-filter-submit js-filter-bulk-update', filter: true, dropdown_class: "dropdown-menu-selectable dropdown-menu-milestone", placeholder: "Search milestones", data: { show_no: true, field_name: "update[milestone_id]", project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :json), use_id: true, default_label: "Milestone" } })
|
||||
.filter-item.inline.labels-filter
|
||||
= render "shared/issuable/label_dropdown", classes: ['js-filter-bulk-update', 'js-multiselect'], dropdown_title: 'Apply a label', show_create: false, show_footer: false, extra_options: false, filter_submit: false, data_options: { persist_when_hide: "true", field_name: "update[label_ids][]", show_no: false, show_any: false, use_id: true }
|
||||
= render "shared/issuable/label_dropdown", classes: ['js-filter-bulk-update', 'js-multiselect'], dropdown_title: 'Apply a label', show_create: false, show_footer: false, extra_options: false, filter_submit: false, data_options: { persist_when_hide: "true", field_name: "update[label_ids][]", show_no: false, show_any: false, use_id: true, default_label: "Labels" }
|
||||
.filter-item.inline
|
||||
= dropdown_tag("Subscription", options: { toggle_class: "js-subscription-event", title: "Change subscription", dropdown_class: "dropdown-menu-selectable", data: { field_name: "update[subscription_event]" } } ) do
|
||||
= dropdown_tag("Subscription", options: { toggle_class: "js-subscription-event", title: "Change subscription", dropdown_class: "dropdown-menu-selectable", data: { field_name: "update[subscription_event]", default_label: "Subscription" } } ) do
|
||||
%ul
|
||||
%li
|
||||
%a{ href: "#", data: { id: "subscribe" } } Subscribe
|
||||
|
|
Loading…
Reference in a new issue