Fixes #294 - Possibility to specify the order of objects.
This commit is contained in:
parent
5c333430ca
commit
cdd2980a2a
6 changed files with 47 additions and 6 deletions
|
@ -6,8 +6,8 @@ class App.ObjectManagerAttribute extends App.Model
|
||||||
{ name: 'name', display: 'Name', tag: 'input', type: 'text', limit: 100, null: false },
|
{ name: 'name', display: 'Name', tag: 'input', type: 'text', limit: 100, null: false },
|
||||||
{ name: 'display', display: 'Display', tag: 'input', type: 'text', limit: 100, null: false },
|
{ name: 'display', display: 'Display', tag: 'input', type: 'text', limit: 100, null: false },
|
||||||
{ name: 'object', display: 'Object', tag: 'input', readonly: 1 },
|
{ name: 'object', display: 'Object', tag: 'input', readonly: 1 },
|
||||||
{ name: 'position', display: 'Position', tag: 'input', readonly: 1 },
|
|
||||||
{ name: 'active', display: 'Active', tag: 'active', default: true },
|
{ name: 'active', display: 'Active', tag: 'active', default: true },
|
||||||
{ name: 'data_type', display: 'Format', tag: 'object_manager_attribute', null: false },
|
{ name: 'data_type', display: 'Format', tag: 'object_manager_attribute', null: false },
|
||||||
{ name: 'updated_at', display: 'Updated', tag: 'datetime', readonly: 1 },
|
{ name: 'updated_at', display: 'Updated', tag: 'datetime', readonly: 1 },
|
||||||
|
{ name: 'position', display: 'Position', tag: 'integer', type: 'number', limit: 100, null: true },
|
||||||
]
|
]
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
<th class=""><%- @T('Display') %></th>
|
<th class=""><%- @T('Display') %></th>
|
||||||
<th class=""><%- @T('Name') %></th>
|
<th class=""><%- @T('Name') %></th>
|
||||||
<th class="" style="width: 200px;"><%- @T('Type') %></th>
|
<th class="" style="width: 200px;"><%- @T('Type') %></th>
|
||||||
|
<th><%- @T('Position') %></th>
|
||||||
<th class="" style="width: 140px;"><%- @T('Action') %></th>
|
<th class="" style="width: 140px;"><%- @T('Action') %></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -64,6 +65,7 @@
|
||||||
<td><%= item.display %></td>
|
<td><%= item.display %></td>
|
||||||
<td><%= item.name %></td>
|
<td><%= item.name %></td>
|
||||||
<td><%= item.data_type %></td>
|
<td><%= item.data_type %></td>
|
||||||
|
<td><%= item.position %></td>
|
||||||
<td>
|
<td>
|
||||||
<% if item.to_create is true: %>
|
<% if item.to_create is true: %>
|
||||||
<%- @T('will be created') %>
|
<%- @T('will be created') %>
|
||||||
|
|
|
@ -29,7 +29,7 @@ class ObjectManagerAttributesController < ApplicationController
|
||||||
)
|
)
|
||||||
raise Exceptions::UnprocessableEntity, 'already exists' if exists
|
raise Exceptions::UnprocessableEntity, 'already exists' if exists
|
||||||
|
|
||||||
add_attribute_using_params(permitted_params.merge(position: 1550), status: :created)
|
add_attribute_using_params(permitted_params, status: :created)
|
||||||
end
|
end
|
||||||
|
|
||||||
# PUT /object_manager_attributes/1
|
# PUT /object_manager_attributes/1
|
||||||
|
|
|
@ -367,6 +367,12 @@ possible types
|
||||||
return record
|
return record
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# add maximum position only for new records with blank position
|
||||||
|
if !record && data[:position].blank?
|
||||||
|
maximum_position = where(object_lookup_id: data[:object_lookup_id]).maximum(:position)
|
||||||
|
data[:position] = maximum_position.present? ? maximum_position + 1 : 1
|
||||||
|
end
|
||||||
|
|
||||||
# do not allow to overwrite certain attributes
|
# do not allow to overwrite certain attributes
|
||||||
if !force
|
if !force
|
||||||
data[:editable] = true
|
data[:editable] = true
|
||||||
|
|
|
@ -1039,7 +1039,7 @@ RSpec.describe 'ObjectManager Attributes', type: :request do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'position handling', authenticated_as: -> { admin } do
|
context 'position handling', authenticated_as: -> { admin } do
|
||||||
let(:params) do
|
let(:base_params) do
|
||||||
{
|
{
|
||||||
name: "customerdescription_#{SecureRandom.uuid.tr('-', '_')}",
|
name: "customerdescription_#{SecureRandom.uuid.tr('-', '_')}",
|
||||||
object: 'Ticket',
|
object: 'Ticket',
|
||||||
|
@ -1060,15 +1060,35 @@ RSpec.describe 'ObjectManager Attributes', type: :request do
|
||||||
before { post '/api/v1/object_manager_attributes', params: params, as: :json }
|
before { post '/api/v1/object_manager_attributes', params: params, as: :json }
|
||||||
|
|
||||||
context 'when creating a new attribute' do
|
context 'when creating a new attribute' do
|
||||||
it 'defaults to 1550' do
|
let(:params) { base_params }
|
||||||
expect(new_attribute_object.position).to eq 1550
|
|
||||||
|
context 'with no position attribute provided' do
|
||||||
|
let(:maximum_position) do
|
||||||
|
ObjectManager::Attribute
|
||||||
|
.for_object(params[:object])
|
||||||
|
.maximum(:position)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'defaults to the maximum available position' do
|
||||||
|
expect(new_attribute_object.position).to eq maximum_position
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with a position attribute given' do
|
||||||
|
let(:position) { 50 }
|
||||||
|
let(:params) { base_params.merge(position: position) }
|
||||||
|
|
||||||
|
it 'defaults to given position' do
|
||||||
|
expect(new_attribute_object.position).to eq position
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when updating an existing attribute' do
|
context 'when updating an existing attribute' do
|
||||||
let(:alternative_position) { 123 }
|
let(:alternative_position) { 123 }
|
||||||
let(:alternative_display) { 'another description' }
|
let(:alternative_display) { 'another description' }
|
||||||
let(:alternative_params) { params.deep_dup.update(display: alternative_display) }
|
let(:params) { base_params }
|
||||||
|
let(:alternative_params) { base_params.merge(display: alternative_display) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
new_attribute_object.update! position: alternative_position
|
new_attribute_object.update! position: alternative_position
|
||||||
|
|
|
@ -29,6 +29,19 @@ RSpec.describe 'System > Objects', type: :system do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when creating a new attribute' do
|
||||||
|
before do
|
||||||
|
visit '/#system/object_manager'
|
||||||
|
find('.js-new').click
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'has the position feild with no default value' do
|
||||||
|
within '.modal' do
|
||||||
|
expect(page).to have_field('position', with: '')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when creating but then discarding fields again' do
|
context 'when creating but then discarding fields again' do
|
||||||
before do
|
before do
|
||||||
visit '/#system/object_manager'
|
visit '/#system/object_manager'
|
||||||
|
|
Loading…
Reference in a new issue