diff --git a/app/assets/stylesheets/files.css b/app/assets/stylesheets/files.css index 03de9e2d..058f6a00 100644 --- a/app/assets/stylesheets/files.css +++ b/app/assets/stylesheets/files.css @@ -45,3 +45,7 @@ .box-metadata { padding-right: 1rem; } + +#uploaded-file-filters > li.list-inline-item.active { + font-weight: bold; +} diff --git a/app/controllers/streams_controller.rb b/app/controllers/streams_controller.rb index c9ab064c..2b745368 100644 --- a/app/controllers/streams_controller.rb +++ b/app/controllers/streams_controller.rb @@ -7,9 +7,27 @@ class StreamsController < ApplicationController skip_authorize_resource only: %i[normalized_dump resourcelist] protect_from_forgery with: :null_session, if: :jwt_token + # rubocop:disable Metrics/AbcSize + # GET /organizations/1/streams/2 def show - @uploads = @stream.uploads.active.order(created_at: :desc).page(params[:page]) + @uploads = @stream.uploads.active + @current_filter = params[:filter] + + if params[:filter].present? + filter_status = params[:filter].to_sym + + filtered_ids = @uploads.select do |upload| + upload.files.any? { |file| file.pod_metadata_status == filter_status } + end.map(&:id) + + @uploads = Upload.where(id: filtered_ids) + end + + # Reset to page 1 if a filter is applied + page_number = params[:filter].present? ? 1 : params[:page] + @uploads = @uploads.order(created_at: :desc).page(page_number) end + # rubocop:enable Metrics/AbcSize def resourcelist authorize! :read, @stream diff --git a/app/views/streams/_stream_uploads.html.erb b/app/views/streams/_stream_uploads.html.erb index daee116e..5102264f 100644 --- a/app/views/streams/_stream_uploads.html.erb +++ b/app/views/streams/_stream_uploads.html.erb @@ -1,7 +1,9 @@ -<%= render 'uploads/file_table' do %> - <% uploads.each do |upload| %> - <%= render 'uploads/file_rows', upload: upload %> - <% end %> -<% end %> + + <%= render 'uploads/file_table', filtering_enabled: true do %> + <% uploads.each do |upload| %> + <%= render 'uploads/file_rows', upload: upload %> + <% end %> + <% end %> -<%= paginate uploads %> + <%= paginate uploads %> + diff --git a/app/views/uploads/_file_rows.html.erb b/app/views/uploads/_file_rows.html.erb index 864a8007..1362e886 100644 --- a/app/views/uploads/_file_rows.html.erb +++ b/app/views/uploads/_file_rows.html.erb @@ -27,7 +27,14 @@ <%= render 'uploads/file_rows', upload: u %> <% end %> <% end %> -<% upload.files.each do |file| %> +<% files_to_render = if params[:filter].present? + upload.files.select { |f| f.pod_metadata_status.to_s == params[:filter].to_s } + else + upload.files + end %> + +<% files_to_render.each do |file| %> + <%= render(MetadataStatusIconComponent.new(status: file.pod_metadata_status)) %> diff --git a/app/views/uploads/_file_table.html.erb b/app/views/uploads/_file_table.html.erb index 2498056a..0aad22d2 100644 --- a/app/views/uploads/_file_table.html.erb +++ b/app/views/uploads/_file_table.html.erb @@ -1,9 +1,21 @@ -