add validation to dropdown items

This commit is contained in:
zmagod 2018-04-19 14:02:42 +02:00
parent 23653d1d95
commit ce52eb851b
3 changed files with 68 additions and 33 deletions

View file

@ -189,8 +189,16 @@
}).on('ajax:error', function(e, xhr) { }).on('ajax:error', function(e, xhr) {
animateSpinner(null, false); animateSpinner(null, false);
if (modalID) { if (modalID) {
var field = { "name": xhr.responseJSON.message } if(xhr.responseJSON.message.hasOwnProperty('repository_list_items')) {
$(form).renderFormErrors('repository_column', field, true, e); var message = xhr.responseJSON.message['repository_list_items'];
$('.dnd-error').remove();
$('.bootstrap-tagsinput').after(
"<i class='dnd-error'>" + message + "</i>"
);
} else {
var field = { "name": xhr.responseJSON.message }
$(form).renderFormErrors('repository_column', field, true, e);
}
} else { } else {
HelperModule.flashAlertMsg(xhr.responseJSON.message, 'danger'); HelperModule.flashAlertMsg(xhr.responseJSON.message, 'danger');
} }

View file

@ -28,28 +28,35 @@ class RepositoryColumnsController < ApplicationController
@repository_column.created_by = current_user @repository_column.created_by = current_user
respond_to do |format| respond_to do |format|
if @repository_column.save format.json do
generate_repository_list_items(params[:list_items]) if @repository_column.save
format.json do if generate_repository_list_items(params[:list_items])
render json: { render json: {
id: @repository_column.id, id: @repository_column.id,
name: escape_input(@repository_column.name), name: escape_input(@repository_column.name),
message: t('libraries.repository_columns.create.success_flash', message: t('libraries.repository_columns.create.success_flash',
name: @repository_column.name), name: @repository_column.name),
edit_url: edit_url:
edit_repository_repository_column_path(@repository, edit_repository_repository_column_path(@repository,
@repository_column), @repository_column),
update_url: update_url:
repository_repository_column_path(@repository, repository_repository_column_path(@repository,
@repository_column), @repository_column),
destroy_html_url: destroy_html_url:
repository_columns_destroy_html_path(@repository, repository_columns_destroy_html_path(@repository,
@repository_column) @repository_column)
}, },
status: :ok status: :ok
end else
else render json: {
format.json do message: {
repository_list_items:
t('libraries.repository_columns.repository_list_items_limit',
limit: Constants::REPOSITORY_LIST_ITEMS_PER_COLUMN)
}
}, status: :unprocessable_entity
end
else
render json: { message: @repository_column.errors.full_messages }, render json: { message: @repository_column.errors.full_messages },
status: :unprocessable_entity status: :unprocessable_entity
end end
@ -74,13 +81,22 @@ class RepositoryColumnsController < ApplicationController
format.json do format.json do
@repository_column.update_attributes(repository_column_params) @repository_column.update_attributes(repository_column_params)
if @repository_column.save if @repository_column.save
update_repository_list_items(params[:list_items]) if update_repository_list_items(params[:list_items])
render json: { render json: {
id: @repository_column.id, id: @repository_column.id,
name: escape_input(@repository_column.name), name: escape_input(@repository_column.name),
message: t('libraries.repository_columns.update.success_flash', message: t('libraries.repository_columns.update.success_flash',
name: @repository_column.name) name: @repository_column.name)
}, status: :ok }, status: :ok
else
render json: {
message: {
repository_list_items:
t('libraries.repository_columns.repository_list_items_limit',
limit: Constants::REPOSITORY_LIST_ITEMS_PER_COLUMN)
}
}, status: :unprocessable_entity
end
else else
render json: { message: @repository_column.errors.full_messages }, render json: { message: @repository_column.errors.full_messages },
status: :unprocessable_entity status: :unprocessable_entity
@ -163,8 +179,12 @@ class RepositoryColumnsController < ApplicationController
def generate_repository_list_items(item_names) def generate_repository_list_items(item_names)
return unless @repository_column.data_type == 'RepositoryListValue' return unless @repository_column.data_type == 'RepositoryListValue'
column_items = @repository_column.repository_list_items.size column_items = @repository_column.repository_list_items.size
success = true
item_names.split(',').uniq.each do |name| item_names.split(',').uniq.each do |name|
next if column_items >= Constants::REPOSITORY_LIST_ITEMS_PER_COLUMN if column_items >= Constants::REPOSITORY_LIST_ITEMS_PER_COLUMN
success = false
next
end
RepositoryListItem.create( RepositoryListItem.create(
repository: @repository, repository: @repository,
repository_column: @repository_column, repository_column: @repository_column,
@ -174,6 +194,7 @@ class RepositoryColumnsController < ApplicationController
) )
column_items += 1 column_items += 1
end end
success
end end
def update_repository_list_items(item_names) def update_repository_list_items(item_names)
@ -193,9 +214,13 @@ class RepositoryColumnsController < ApplicationController
list_item_id list_item_id
).destroy_all ).destroy_all
end end
success = true
items_list.each do |name| items_list.each do |name|
next if @repository_column.repository_list_items.find_by_data(name) next if @repository_column.repository_list_items.find_by_data(name)
next if column_items >= Constants::REPOSITORY_LIST_ITEMS_PER_COLUMN if column_items >= Constants::REPOSITORY_LIST_ITEMS_PER_COLUMN
success = false
next
end
RepositoryListItem.create( RepositoryListItem.create(
repository: @repository, repository: @repository,
repository_column: @repository_column, repository_column: @repository_column,
@ -205,5 +230,6 @@ class RepositoryColumnsController < ApplicationController
) )
column_items += 1 column_items += 1
end end
success
end end
end end

View file

@ -1007,6 +1007,7 @@ en:
repository_columns: repository_columns:
head_title: '%{repository} | Manage Columns' head_title: '%{repository} | Manage Columns'
repository_list_items_limit: "Dropdown items limit reached max. %{limit}"
update: update:
success_flash: "Column %{name} was successfully updated." success_flash: "Column %{name} was successfully updated."
create: create: