Disallowed moving quantity into parent/child relationship if domains differ
Generalized quantity up/down/left/right actions into 'move'
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
class QuantitiesController < ApplicationController
|
||||
before_action :init_session_filters
|
||||
before_action :find_project_by_project_id, only: [:index, :create, :filter]
|
||||
before_action :find_quantity, only: [:destroy, :toggle, :up, :down, :left, :right]
|
||||
before_action :find_quantity, only: [:destroy, :toggle, :move]
|
||||
before_action :authorize
|
||||
|
||||
def index
|
||||
@@ -40,26 +40,19 @@ class QuantitiesController < ApplicationController
|
||||
render :toggle
|
||||
end
|
||||
|
||||
def up
|
||||
@quantity.move_left if @quantity.left_sibling.present?
|
||||
prepare_quantities
|
||||
render :toggle
|
||||
end
|
||||
def move
|
||||
direction = params[:direction].to_sym
|
||||
case direction
|
||||
when :up
|
||||
@quantity.move_left
|
||||
when :down
|
||||
@quantity.move_right
|
||||
when :left
|
||||
@quantity.move_to_right_of(@quantity.parent)
|
||||
when :right
|
||||
@quantity.move_to_child_of(@quantity.left_sibling)
|
||||
end if @quantity.movable?(direction)
|
||||
|
||||
def down
|
||||
@quantity.move_right if @quantity.right_sibling.present?
|
||||
prepare_quantities
|
||||
render :toggle
|
||||
end
|
||||
|
||||
def left
|
||||
@quantity.move_to_right_of(@quantity.parent) if @quantity.parent.present?
|
||||
prepare_quantities
|
||||
render :toggle
|
||||
end
|
||||
|
||||
def right
|
||||
@quantity.move_to_child_of(@quantity.left_sibling) if @quantity.left_sibling.present?
|
||||
prepare_quantities
|
||||
render :toggle
|
||||
end
|
||||
|
||||
@@ -23,6 +23,22 @@ class Quantity < ActiveRecord::Base
|
||||
end
|
||||
end
|
||||
|
||||
def movable?(direction)
|
||||
case direction
|
||||
when :up
|
||||
self.left_sibling.present?
|
||||
when :down
|
||||
self.right_sibling.present?
|
||||
when :left
|
||||
self.parent.present?
|
||||
when :right
|
||||
left = self.left_sibling
|
||||
left.present? && (left.domain == self.domain)
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
def toggle_primary!
|
||||
self.toggle!(:primary)
|
||||
end
|
||||
|
||||
@@ -32,50 +32,19 @@
|
||||
<%= q.name %>
|
||||
</td>
|
||||
<td class="order">
|
||||
<% [:up, :down, :left, :right].each do |direction| %>
|
||||
<%=
|
||||
if q.left_sibling.present?
|
||||
link_to '', up_quantity_path(q), {
|
||||
if q.movable?(direction)
|
||||
link_to '', move_quantity_path(q, direction), {
|
||||
remote: true,
|
||||
method: :post,
|
||||
class: "icon icon-move-up"
|
||||
}
|
||||
else
|
||||
link_to '', '', {class: "icon"}
|
||||
end
|
||||
%>
|
||||
<%=
|
||||
if q.right_sibling.present?
|
||||
link_to '', down_quantity_path(q), {
|
||||
remote: true,
|
||||
method: :post,
|
||||
class: "icon icon-move-down"
|
||||
}
|
||||
else
|
||||
link_to '', '', {class: "icon"}
|
||||
end
|
||||
%>
|
||||
<%=
|
||||
if q.parent.present?
|
||||
link_to '', left_quantity_path(q), {
|
||||
remote: true,
|
||||
method: :post,
|
||||
class: "icon icon-move-left"
|
||||
}
|
||||
else
|
||||
link_to '', '', {class: "icon"}
|
||||
end
|
||||
%>
|
||||
<%=
|
||||
if q.left_sibling.present?
|
||||
link_to '', right_quantity_path(q), {
|
||||
remote: true,
|
||||
method: :post,
|
||||
class: "icon icon-move-right"
|
||||
class: "icon icon-move-#{direction}"
|
||||
}
|
||||
else
|
||||
link_to '', '', {class: "icon"}
|
||||
end
|
||||
%>
|
||||
<% end %>
|
||||
</td>
|
||||
<td class="domain"><%= q.domain %></td>
|
||||
<td class="description"><%= q.description %></td>
|
||||
|
||||
Reference in New Issue
Block a user