CI / Test (pull_request) Successful in 43s
- One card per app (grouped by client_id) showing distinct device and category counts; the whole card opens the details modal (with hover and focus highlight) instead of a separate Details button - Details modal: access list styled like the OAuth consent dialog via a shared RsScopeListComponent, plus per-token device, connected date and expiry, each with its own Revoke - "folder" -> "category" in the card, modal, consent dialog and the auth-created notification - Make revoke a real DELETE: it was a GET link that Turbo 8's prefetch-on-hover fired on its own, silently deleting authorizations. Missing or foreign authorizations now return 404 instead of 500. - Move "Launch app" to the app level (GET /services/storage/apps/:client_id/launch); no token id in the URL Part of #254
29 lines
1.2 KiB
ERB
29 lines
1.2 KiB
ERB
<div class="h-full" data-controller="modal" data-action="keydown.esc->modal#close">
|
|
<button type="button"
|
|
class="rs-auth-card group flex h-full w-full items-center gap-4 rounded-lg border
|
|
border-gray-200 bg-white p-5 text-left transition
|
|
hover:border-gray-400 hover:bg-gray-50
|
|
focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500"
|
|
data-action="click->modal#open">
|
|
<div class="h-14 w-14 flex-none">
|
|
<%= render AppCatalog::WebAppIconComponent.new(web_app: @web_app) %>
|
|
</div>
|
|
|
|
<div class="min-w-0 flex-grow">
|
|
<h4 class="text-lg font-bold truncate"><%= name %></h4>
|
|
<p class="text-sm text-gray-500 truncate"><%= @auth.client_id %></p>
|
|
<p class="mt-2 text-sm text-gray-600">
|
|
<%= device_summary %>
|
|
<span class="mx-1 text-gray-300">·</span>
|
|
<%= category_summary %>
|
|
</p>
|
|
</div>
|
|
|
|
<span class="flex-none text-gray-300 transition group-hover:text-gray-500" aria-hidden="true">
|
|
<%= render partial: "icons/chevron-right", locals: { custom_class: "h-5 w-5" } %>
|
|
</span>
|
|
</button>
|
|
|
|
<%= render RsAuthDetailsModalComponent.new(authorizations: @authorizations) %>
|
|
</div>
|