uploads: refactor "My Uploads" page for multi-file uploads.

* Make thumbnails on the "My Uploads" page show an icon with an image
  count when an upload contains multiple files.

* Make the "My Uploads" page show each upload, not each individual file.
  If an upload contains multiple files, they're shown grouped together
  under a single upload. This does mean that failed or duplicate uploads
  will show up on this page now. This is because this page shows each
  upload attempt, not each uniquely uploaded file.
This commit is contained in:
evazion
2022-02-13 15:26:10 -06:00
parent 879363b585
commit 53a3beee35
10 changed files with 60 additions and 62 deletions

View File

@@ -8,27 +8,11 @@
</div>
<%= render(MediaAssetGalleryComponent.new) do |gallery| %>
<% @media_assets.each do |media_asset| %>
<% upload = media_asset.uploads.order(id: :desc).select { |upload| upload.uploader == CurrentUser.user }.first %>
<% gallery.media_asset(media_asset: media_asset, size: gallery.size, link_target: media_asset.post || upload) do |preview| %>
<% preview.footer do %>
<div class="text-center text-muted text-xs h-12">
<% if media_asset.post.present? %>
<div class="leading-none">
<%= link_to "post ##{media_asset.post.id}", media_asset.post, class: "leading-none" %>
</div>
<% end %>
<% if upload.source.present? %>
<%= external_link_to upload.source, Addressable::URI.parse(upload.source).domain %>
<% else %>
<em>No source</em>
<% end %>
</div>
<% end %>
<% @uploads.each do |upload| %>
<% gallery.media_asset do %>
<%= render "uploads/preview", upload: upload, size: gallery.size %>
<% end %>
<% end %>
<% end %>
<%= numbered_paginator(@media_assets) %>
<%= numbered_paginator(@uploads) %>

View File

@@ -0,0 +1,30 @@
<% media_asset = upload.upload_media_assets.sort_by(&:id).first&.media_asset %>
<%= render(MediaAssetPreviewComponent.new(media_asset: media_asset, size: size, link_target: upload, save_data: CurrentUser.save_data)) do |preview| %>
<% if upload.media_asset_count > 1 %>
<% preview.header do %>
<div class="media-asset-image-count-icon absolute top-0.5 right-0.5 p-1 m-0.5 leading-none rounded text-xs font-arial font-bold">
<%= multiple_images_icon %>
<span class="align-middle"><%= upload.media_asset_count %></span>
</div>
<% end %>
<% end %>
<% preview.footer do %>
<div class="text-center text-muted text-xs">
<div class="leading-none">
<% if upload.media_asset_count == 1 && media_asset&.post.present? %>
<%= link_to "post ##{media_asset.post.id}", media_asset.post, class: "leading-none" %>
<% else %>
<%= link_to "upload ##{upload.id}", upload, class: "leading-none" %>
<% end %>
</div>
<% if upload.source.present? %>
<%= external_link_to upload.source, Addressable::URI.parse(upload.source).domain %>
<% else %>
<em>No source</em>
<% end %>
</div>
<% end %>
<% end %>

View File

@@ -9,28 +9,13 @@
<%= table_for @uploads, class: "striped", width: "100%" do |t| %>
<% t.column "Upload", td: { class: "text-center" } do |upload| %>
<% upload.media_assets.first.tap do |media_asset| %>
<% if media_asset.present? %>
<% if media_asset.post.present? %>
<%= render MediaAssetPreviewComponent.new(media_asset: media_asset, link_target: media_asset.post, save_data: CurrentUser.save_data) %>
<% else %>
<%= render MediaAssetPreviewComponent.new(media_asset: media_asset, link_target: upload, save_data: CurrentUser.save_data) %>
<% end %>
<% end %>
<% end %>
<%= render "uploads/preview", upload: upload, size: "180" %>
<% end %>
<% t.column "Info", td: { class: "col-expand" } do |upload| %>
<div>
<% upload.media_assets.first.tap do |media_asset| %>
<% if media_asset&.post.present? %>
<strong>Post</strong>
<span><%= link_to "##{media_asset.post.id}", media_asset.post %></span>
<% else %>
<strong>Upload</strong>
<span><%= link_to "##{upload.id}", upload %></span>
<% end %>
<% end %>
<strong>Upload</strong>
<span><%= link_to "##{upload.id}", upload %></span>
</div>
<div>