Add toolbar for storage locations [SCI-10861]

This commit is contained in:
Anton 2024-07-18 11:46:30 +02:00
parent 33626e0ddd
commit 782256f655
5 changed files with 104 additions and 1 deletions

View file

@ -52,7 +52,11 @@ class StorageLocationsController < ApplicationController
def actions_toolbar
render json: {
actions: [] # TODO: Add actions
actions:
Toolbars::StorageLocationsService.new(
current_user,
storage_location_ids: JSON.parse(params[:items]).map { |i| i['id'] }
).actions
}
end

View file

@ -47,6 +47,10 @@ Canaid::Permissions.register_for(Team) do
true # TODO: Add permission check
end
can :manage_storage_locations do |user, team|
true # TODO: Add permission check
end
can :create_reports do |user, team|
team.permission_granted?(user, TeamPermissions::REPORTS_CREATE)
end

View file

@ -0,0 +1,86 @@
# frozen_string_literal: true
module Toolbars
class StorageLocationsService
attr_reader :current_user
include Canaid::Helpers::PermissionsHelper
include Rails.application.routes.url_helpers
def initialize(current_user, storage_location_ids: [])
@current_user = current_user
@storage_locations = StorageLocation.where(id: storage_location_ids)
@single = @storage_locations.length == 1
end
def actions
return [] if @storage_locations.none?
[
edit_action,
move_action,
duplicate_action,
delete_action
].compact
end
private
def edit_action
return unless @single
return unless can_manage_storage_locations?(current_user.current_team)
{
name: 'edit',
label: I18n.t('storage_locations.index.toolbar.edit'),
icon: 'sn-icon sn-icon-edit',
path: storage_location_path(@storage_locations.first),
type: :emit
}
end
def move_action
return unless @single
return unless can_manage_storage_locations?(current_user.current_team)
{
name: 'set_as_default',
label: I18n.t("storage_locations.index.toolbar.move"),
icon: 'sn-icon sn-icon-move',
path: move_storage_location_path(@storage_locations.first),
type: :emit
}
end
def duplicate_action
return unless @single
return unless can_manage_storage_locations?(current_user.current_team)
{
name: 'duplicate',
label: I18n.t('storage_locations.index.toolbar.duplicate'),
icon: 'sn-icon sn-icon-duplicate',
path: copy_storage_location_path(@storage_locations.first),
type: :emit
}
end
def delete_action
return unless @single
return unless can_manage_storage_locations?(current_user.current_team)
{
name: 'delete',
label: I18n.t('storage_locations.index.toolbar.delete'),
icon: 'sn-icon sn-icon-delete',
path: storage_location_path(@storage_locations.first),
type: :emit
}
end
end
end

View file

@ -2670,6 +2670,11 @@ en:
head_title: "Locations"
new_location: "New location"
new_box: "New box"
toolbar:
edit: 'Edit'
move: 'Move'
duplicate: 'Duplicate'
delete: 'Delete'
table:
name: "Location name"
id: "ID"

View file

@ -811,6 +811,10 @@ Rails.application.routes.draw do
collection do
get :actions_toolbar
end
member do
post :move
post :copy
end
resources :storage_location_repository_rows, only: %i(index create destroy update)
end