Convert label creation from API to controller endpoint
This commit is contained in:
parent
fd51f19c97
commit
af5e54f9ce
|
@ -5,7 +5,7 @@
|
||||||
namespacesPath: "/api/:version/namespaces.json",
|
namespacesPath: "/api/:version/namespaces.json",
|
||||||
groupProjectsPath: "/api/:version/groups/:id/projects.json",
|
groupProjectsPath: "/api/:version/groups/:id/projects.json",
|
||||||
projectsPath: "/api/:version/projects.json?simple=true",
|
projectsPath: "/api/:version/projects.json?simple=true",
|
||||||
labelsPath: "/api/:version/projects/:id/labels",
|
labelsPath: "/:namespace_path/:project_path/labels",
|
||||||
licensePath: "/api/:version/licenses/:key",
|
licensePath: "/api/:version/licenses/:key",
|
||||||
gitignorePath: "/api/:version/gitignores/:key",
|
gitignorePath: "/api/:version/gitignores/:key",
|
||||||
gitlabCiYmlPath: "/api/:version/gitlab_ci_ymls/:key",
|
gitlabCiYmlPath: "/api/:version/gitlab_ci_ymls/:key",
|
||||||
|
@ -65,13 +65,14 @@
|
||||||
return callback(projects);
|
return callback(projects);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
newLabel: function(project_id, data, callback) {
|
newLabel: function(namespace_path, project_path, data, callback) {
|
||||||
var url = Api.buildUrl(Api.labelsPath)
|
var url = Api.buildUrl(Api.labelsPath)
|
||||||
.replace(':id', project_id);
|
.replace(':namespace_path', namespace_path)
|
||||||
|
.replace(':project_path', project_path);
|
||||||
return $.ajax({
|
return $.ajax({
|
||||||
url: url,
|
url: url,
|
||||||
type: "POST",
|
type: "POST",
|
||||||
data: data,
|
data: {'label': data},
|
||||||
dataType: "json"
|
dataType: "json"
|
||||||
}).done(function(label) {
|
}).done(function(label) {
|
||||||
return callback(label);
|
return callback(label);
|
||||||
|
|
|
@ -3,8 +3,7 @@ $(() => {
|
||||||
|
|
||||||
$('.js-new-board-list').each(function () {
|
$('.js-new-board-list').each(function () {
|
||||||
const $this = $(this);
|
const $this = $(this);
|
||||||
|
new gl.CreateLabelDropdown($this.closest('.dropdown').find('.dropdown-new-label'), $this.data('namespace-path'), $this.data('project-path'));
|
||||||
new gl.CreateLabelDropdown($this.closest('.dropdown').find('.dropdown-new-label'), $this.data('project-id'));
|
|
||||||
|
|
||||||
$this.glDropdown({
|
$this.glDropdown({
|
||||||
data(term, callback) {
|
data(term, callback) {
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
(function (w) {
|
(function (w) {
|
||||||
class CreateLabelDropdown {
|
class CreateLabelDropdown {
|
||||||
constructor ($el, projectId) {
|
constructor ($el, namespacePath, projectPath) {
|
||||||
this.$el = $el;
|
this.$el = $el;
|
||||||
this.projectId = projectId;
|
this.namespacePath = namespacePath;
|
||||||
|
this.projectPath = projectPath;
|
||||||
this.$dropdownBack = $('.dropdown-menu-back', this.$el.closest('.dropdown'));
|
this.$dropdownBack = $('.dropdown-menu-back', this.$el.closest('.dropdown'));
|
||||||
this.$cancelButton = $('.js-cancel-label-btn', this.$el);
|
this.$cancelButton = $('.js-cancel-label-btn', this.$el);
|
||||||
this.$newLabelField = $('#new_label_name', this.$el);
|
this.$newLabelField = $('#new_label_name', this.$el);
|
||||||
|
@ -91,8 +92,8 @@
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
Api.newLabel(this.projectId, {
|
Api.newLabel(this.namespacePath, this.projectPath, {
|
||||||
name: this.$newLabelField.val(),
|
title: this.$newLabelField.val(),
|
||||||
color: this.$newColorField.val()
|
color: this.$newColorField.val()
|
||||||
}, (label) => {
|
}, (label) => {
|
||||||
this.$newLabelCreateButton.enable();
|
this.$newLabelCreateButton.enable();
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
var _this;
|
var _this;
|
||||||
_this = this;
|
_this = this;
|
||||||
$('.js-label-select').each(function(i, dropdown) {
|
$('.js-label-select').each(function(i, dropdown) {
|
||||||
var $block, $colorPreview, $dropdown, $form, $loading, $selectbox, $sidebarCollapsedValue, $value, abilityName, defaultLabel, enableLabelCreateButton, issueURLSplit, issueUpdateURL, labelHTMLTemplate, labelNoneHTMLTemplate, labelUrl, projectId, saveLabelData, selectedLabel, showAny, showNo, $sidebarLabelTooltip;
|
var $block, $colorPreview, $dropdown, $form, $loading, $selectbox, $sidebarCollapsedValue, $value, abilityName, defaultLabel, enableLabelCreateButton, issueURLSplit, issueUpdateURL, labelHTMLTemplate, labelNoneHTMLTemplate, labelUrl, namespacePath, projectPath, saveLabelData, selectedLabel, showAny, showNo, $sidebarLabelTooltip;
|
||||||
$dropdown = $(dropdown);
|
$dropdown = $(dropdown);
|
||||||
projectId = $dropdown.data('project-id');
|
namespacePath = $dropdown.data('namespace-path');
|
||||||
|
projectPath = $dropdown.data('project-path');
|
||||||
labelUrl = $dropdown.data('labels');
|
labelUrl = $dropdown.data('labels');
|
||||||
issueUpdateURL = $dropdown.data('issueUpdate');
|
issueUpdateURL = $dropdown.data('issueUpdate');
|
||||||
selectedLabel = $dropdown.data('selected');
|
selectedLabel = $dropdown.data('selected');
|
||||||
|
@ -35,7 +36,7 @@
|
||||||
$sidebarLabelTooltip.tooltip();
|
$sidebarLabelTooltip.tooltip();
|
||||||
|
|
||||||
if ($dropdown.closest('.dropdown').find('.dropdown-new-label').length) {
|
if ($dropdown.closest('.dropdown').find('.dropdown-new-label').length) {
|
||||||
new gl.CreateLabelDropdown($dropdown.closest('.dropdown').find('.dropdown-new-label'), projectId);
|
new gl.CreateLabelDropdown($dropdown.closest('.dropdown').find('.dropdown-new-label'), namespacePath, projectPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
saveLabelData = function() {
|
saveLabelData = function() {
|
||||||
|
|
|
@ -30,9 +30,15 @@ class Projects::LabelsController < Projects::ApplicationController
|
||||||
@label = @project.labels.create(label_params)
|
@label = @project.labels.create(label_params)
|
||||||
|
|
||||||
if @label.valid?
|
if @label.valid?
|
||||||
redirect_to namespace_project_labels_path(@project.namespace, @project)
|
respond_to do |format|
|
||||||
|
format.html { redirect_to namespace_project_labels_path(@project.namespace, @project) }
|
||||||
|
format.json { render json: @label }
|
||||||
|
end
|
||||||
else
|
else
|
||||||
render 'new'
|
respond_to do |format|
|
||||||
|
format.html { render 'new' }
|
||||||
|
format.json { render json: { message: @label.errors.messages }, status: 400 }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
%input.pull-left.form-control{ type: "search", placeholder: "Filter by name...", "v-model" => "filters.search", "debounce" => "250" }
|
%input.pull-left.form-control{ type: "search", placeholder: "Filter by name...", "v-model" => "filters.search", "debounce" => "250" }
|
||||||
- if can?(current_user, :admin_list, @project)
|
- if can?(current_user, :admin_list, @project)
|
||||||
.dropdown.pull-right
|
.dropdown.pull-right
|
||||||
%button.btn.btn-create.js-new-board-list{ type: "button", data: { toggle: "dropdown", labels: labels_filter_path, project_id: @project.try(:id) } }
|
%button.btn.btn-create.js-new-board-list{ type: "button", data: { toggle: "dropdown", labels: labels_filter_path, namespace_path: @project.try(:namespace).try(:path), project_path: @project.try(:path) } }
|
||||||
Create new list
|
Create new list
|
||||||
.dropdown-menu.dropdown-menu-paging.dropdown-menu-align-right.dropdown-menu-issues-board-new.dropdown-menu-selectable
|
.dropdown-menu.dropdown-menu-paging.dropdown-menu-align-right.dropdown-menu-issues-board-new.dropdown-menu-selectable
|
||||||
= render partial: "shared/issuable/label_page_default", locals: { show_footer: true, show_create: true, show_boards_content: true, title: "Create a new list" }
|
= render partial: "shared/issuable/label_page_default", locals: { show_footer: true, show_create: true, show_boards_content: true, title: "Create a new list" }
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
- show_footer = local_assigns.fetch(:show_footer, true)
|
- show_footer = local_assigns.fetch(:show_footer, true)
|
||||||
- data_options = local_assigns.fetch(:data_options, {})
|
- data_options = local_assigns.fetch(:data_options, {})
|
||||||
- classes = local_assigns.fetch(:classes, [])
|
- classes = local_assigns.fetch(:classes, [])
|
||||||
- dropdown_data = {toggle: 'dropdown', field_name: 'label_name[]', show_no: "true", show_any: "true", selected: params[:label_name], project_id: @project.try(:id), labels: labels_filter_path, default_label: "Label"}
|
- dropdown_data = {toggle: 'dropdown', field_name: 'label_name[]', show_no: "true", show_any: "true", selected: params[:label_name], namespace_path: @project.try(:namespace).try(:path), project_path: @project.try(:path), labels: labels_filter_path, default_label: "Label"}
|
||||||
- dropdown_data.merge!(data_options)
|
- dropdown_data.merge!(data_options)
|
||||||
- classes << 'js-extra-options' if extra_options
|
- classes << 'js-extra-options' if extra_options
|
||||||
- classes << 'js-filter-submit' if filter_submit
|
- classes << 'js-filter-submit' if filter_submit
|
||||||
|
|
|
@ -128,7 +128,7 @@
|
||||||
- issuable.labels_array.each do |label|
|
- issuable.labels_array.each do |label|
|
||||||
= hidden_field_tag "#{issuable.to_ability_name}[label_names][]", label.id, id: nil
|
= hidden_field_tag "#{issuable.to_ability_name}[label_names][]", label.id, id: nil
|
||||||
.dropdown
|
.dropdown
|
||||||
%button.dropdown-menu-toggle.js-label-select.js-multiselect{type: "button", data: {toggle: "dropdown", field_name: "#{issuable.to_ability_name}[label_names][]", ability_name: issuable.to_ability_name, show_no: "true", show_any: "true", project_id: (@project.id if @project), issue_update: issuable_json_path(issuable), labels: (namespace_project_labels_path(@project.namespace, @project, :json) if @project)}}
|
%button.dropdown-menu-toggle.js-label-select.js-multiselect{type: "button", data: {toggle: "dropdown", field_name: "#{issuable.to_ability_name}[label_names][]", ability_name: issuable.to_ability_name, show_no: "true", show_any: "true", namespace_path: @project.try(:namespace).try(:path), project_path: @project.try(:path), issue_update: issuable_json_path(issuable), labels: (namespace_project_labels_path(@project.namespace, @project, :json) if @project)}}
|
||||||
%span.dropdown-toggle-text
|
%span.dropdown-toggle-text
|
||||||
Label
|
Label
|
||||||
= icon('chevron-down')
|
= icon('chevron-down')
|
||||||
|
|
Loading…
Reference in New Issue