diff --git a/app/controllers/concerns/active_storage/check_blob_permissions.rb b/app/controllers/concerns/active_storage/check_blob_permissions.rb index 2c99d9b7e..d23952ff6 100644 --- a/app/controllers/concerns/active_storage/check_blob_permissions.rb +++ b/app/controllers/concerns/active_storage/check_blob_permissions.rb @@ -28,6 +28,8 @@ module ActiveStorage check_tinymce_asset_read_permissions(attachment.record) when 'Experiment' can_read_experiment?(attachment.record) + when 'StorageLocation' + can_read_storage_location?(attachment.record) when 'Report' can_read_project?(attachment.record.project) when 'User' diff --git a/app/controllers/storage_locations_controller.rb b/app/controllers/storage_locations_controller.rb index 2c14340bb..aa3622e38 100644 --- a/app/controllers/storage_locations_controller.rb +++ b/app/controllers/storage_locations_controller.rb @@ -10,7 +10,10 @@ class StorageLocationsController < ApplicationController def index respond_to do |format| - format.html + format.html do + @parent_location = StorageLocation.viewable_by_user(current_user) + .find_by(id: storage_location_params[:parent_id]) if storage_location_params[:parent_id] + end format.json do storage_locations = Lists::StorageLocationsService.new(current_user, current_team, params).call render json: storage_locations, each_serializer: Lists::StorageLocationSerializer, diff --git a/app/javascript/vue/storage_locations/modals/assign/position_selector.vue b/app/javascript/vue/storage_locations/modals/assign/position_selector.vue index 0bdbd9ef0..1385c8978 100644 --- a/app/javascript/vue/storage_locations/modals/assign/position_selector.vue +++ b/app/javascript/vue/storage_locations/modals/assign/position_selector.vue @@ -62,7 +62,7 @@ export default { return available_positions_storage_location_path(this.selectedContainerId); }, availableRows() { - return Object.keys(this.availablePositions).map((row) => [row, row]); + return Object.keys(this.availablePositions).map((row) => [row, this.convertNumberToLetter(row)]); }, availableColumns() { return (this.availablePositions[this.selectedRow] || []).map((col) => [col, col]); @@ -74,6 +74,12 @@ export default { selectedRow: null, selectedColumn: null }; + }, + methods: { + convertNumberToLetter(number) { + const charCode = 96 + parseInt(number, 10); + return String.fromCharCode(charCode).toUpperCase(); + } } }; diff --git a/app/javascript/vue/storage_locations/renderers/storage_name_renderer.vue b/app/javascript/vue/storage_locations/renderers/storage_name_renderer.vue new file mode 100644 index 000000000..4a448a265 --- /dev/null +++ b/app/javascript/vue/storage_locations/renderers/storage_name_renderer.vue @@ -0,0 +1,45 @@ + + + diff --git a/app/javascript/vue/storage_locations/table.vue b/app/javascript/vue/storage_locations/table.vue index e93efbe14..5647fbaee 100644 --- a/app/javascript/vue/storage_locations/table.vue +++ b/app/javascript/vue/storage_locations/table.vue @@ -54,6 +54,7 @@ import MoveModal from './modals/move.vue'; import ConfirmationModal from '../shared/confirmation_modal.vue'; import ShareObjectModal from '../shared/share_modal.vue'; import DescriptionRenderer from './renderers/description.vue'; +import NameRenderer from './renderers/storage_name_renderer.vue'; export default { name: 'RepositoriesTable', @@ -63,7 +64,8 @@ export default { MoveModal, ConfirmationModal, ShareObjectModal, - DescriptionRenderer + DescriptionRenderer, + NameRenderer }, props: { dataSource: { @@ -104,7 +106,7 @@ export default { headerName: this.i18n.t('storage_locations.index.table.name'), sortable: true, notSelectable: true, - cellRenderer: this.nameRenderer + cellRenderer: 'NameRenderer' }, { field: 'code', @@ -220,28 +222,6 @@ export default { HelperModule.flashAlertMsg(this.i18n.t('errors.general'), 'danger'); }); }, - // Renderers - nameRenderer(params) { - const { - name, - urls, - shared, - ishared - } = params.data; - let containerIcon = ''; - if (params.data.container) { - containerIcon = ''; - } - let sharedIcon = ''; - if (shared || ishared) { - sharedIcon = ''; - } - return ` - ${sharedIcon}${containerIcon} - ${name} - `; - }, updateTable() { this.reloadingTable = true; this.objectToMove = null; diff --git a/app/serializers/lists/storage_location_serializer.rb b/app/serializers/lists/storage_location_serializer.rb index 933f4609c..825a14c5c 100644 --- a/app/serializers/lists/storage_location_serializer.rb +++ b/app/serializers/lists/storage_location_serializer.rb @@ -8,12 +8,19 @@ module Lists include ActionView::Helpers::TextHelper attributes :id, :code, :name, :container, :description, :owned_by, :created_by, - :created_on, :urls, :metadata, :file_name, :sub_location_count, :is_empty, :sa_description + :created_on, :urls, :metadata, :file_name, :sub_location_count, :is_empty, + :img_url, :sa_description def owned_by object['team_name'] end + def img_url + return unless object.image.attached? + + Rails.application.routes.url_helpers.url_for(object.image) + end + def is_empty object.empty? end diff --git a/app/views/storage_locations/index.html.erb b/app/views/storage_locations/index.html.erb index bbdf5b1f9..a87d4abfd 100644 --- a/app/views/storage_locations/index.html.erb +++ b/app/views/storage_locations/index.html.erb @@ -5,7 +5,7 @@
-

<%= t('storage_locations.index.head_title') %>

+

<%= @parent_location ? @parent_location.name : t('storage_locations.index.head_title') %>