feat(portal): compute image and flavor UI improvements#912
Conversation
Move Reject to ContentHeader kebab for accepted shared images, add Manage Access, and show unstyled Accept/Reject in the info box for pending/rejected state. Hide More Actions when no items apply.
…on parity - Images: More Actions for all shared images; Accept for pending; ID and owner use ClipboardText - Flavors detail: Metadata button for view-only; "Edit Metadata" when editable - Flavors list: fetch flavor_specs permissions; gate Metadata on permissions; default popup icon; pass canEdit to EditSpecModal - Flavors list: Manage Access disabled for public flavors
|
Warning Review limit reached
More reviews will be available in 11 minutes and 24 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (7)
📝 WalkthroughWalkthroughThis PR implements permission-aware UI improvements for flavor and image management. Flavor specs permissions ( ChangesImage and Flavor Permissions and UI Refinements
Sequence Diagram(s)sequenceDiagram
participant User
participant FlavorList
participant FlavorDetail
participant EditModal
participant Permissions
User->>FlavorList: view flavors
FlavorList->>Permissions: request canManageSpecs, canListSpecs
Permissions-->>FlavorList: return permissions
FlavorList->>FlavorList: render Access Type column
FlavorList->>FlavorList: Metadata label by canManageSpecs
User->>FlavorDetail: click Details
FlavorDetail->>Permissions: expand query for flavor_specs:list
Permissions-->>FlavorDetail: return canListSpecs, canManageSpecs
FlavorDetail->>FlavorDetail: gate More Actions by permissions
User->>EditModal: click Metadata
EditModal->>EditModal: resolvedCanEdit from canManageSpecs
EditModal->>EditModal: title = canManageSpecs ? "Edit" : "View"
EditModal->>EditModal: size = "xl"
sequenceDiagram
participant User
participant ImageDetail
participant MoreActions
participant ConfirmModal
participant Handler
User->>ImageDetail: view shared image
ImageDetail->>MoreActions: show menu (if accepted member)
User->>MoreActions: click Reject
MoreActions->>ConfirmModal: open Reject confirmation
User->>ConfirmModal: confirm
ConfirmModal->>Handler: handleMemberStatusChange("rejected")
Handler->>ImageDetail: update member status
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR enhances the Compute Images and Flavors UX by aligning detail-page actions with list-row actions, improving copyability of identifiers, and refining flavor metadata/access behavior based on more granular permissions.
Changes:
- Images: add shared-image Accept/Reject actions to the detail page header menu and make key IDs copyable via
ClipboardText. - Flavors: introduce
flavor_specs:list(view-only) support for opening the metadata modal, adjust labeling (“Metadata” vs “Edit Metadata”), and disable Manage Access for public flavors. - Flavors list polish: switch row “Details” to a fully clickable menu item, add an “Access Type” column, and remove redundant Flavor ID column in Manage Access.
Reviewed changes
Copilot reviewed 15 out of 17 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/aurora/src/locales/en/messages.ts | Compiled Lingui messages updated (includes “Access Type”). |
| packages/aurora/src/locales/en/messages.po | Adds “Access Type” string. |
| packages/aurora/src/locales/de/messages.ts | Compiled Lingui messages updated (includes “Access Type”). |
| packages/aurora/src/locales/de/messages.po | Adds “Access Type” msgid (untranslated). |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/images/$imageId.tsx | Adds shared-image Accept/Reject actions to detail header and confirmation modals. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageDetailsView.tsx | Uses ClipboardText for IDs and simplifies shared-image inline actions. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx | Adds flavor_specs:list support and disables Manage Access for public flavors. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsx | Makes Flavor ID copyable via ClipboardText. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/List.tsx | Fetches and propagates flavor_specs:* permissions for list-row gating/labels. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/FlavorListContainer.tsx | Adds Access Type column, updates row menu (clickable Details), gates metadata item by permissions, disables Manage Access for public. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/EditSpecModal.tsx | Adds canEdit prop, dynamic modal title, and increases modal size for better wrapping. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/ManageAccessModal.tsx | Removes Flavor ID column and adjusts grid column counts/colSpans. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/TenantAccessRow.tsx | Removes Flavor ID cell to match updated Manage Access grid. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/TenantAccessFormRow.tsx | Removes Flavor ID field/cell to match updated Manage Access grid. |
| packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/SpecRow.tsx | Adds break-all to prevent long metadata values from breaking layout. |
| packages/aurora/src/client/components/ContentHeader/ContentHeader.tsx | Minor spacing tweak for header actions. |
| .changeset/silver-tigers-jump.md | Release note entry for the UI changes. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Actionable comments posted: 6
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.changeset/silver-tigers-jump.md:
- Line 14: Update the changeset text to distinguish the two permission-gated
labels: clarify that users with view-only spec access (flavor_specs:list) see a
"Metadata" button, while users with create/delete permissions see the button
labeled "Edit Metadata" (per PR `#907`). Replace the current single sentence with
a brief line that explicitly lists both cases and their corresponding labels so
the release note is unambiguous.
- Line 8: Update the changelog line to accurately state that the More Actions
button appears only for accepted shared images (not all shared images);
reference the PR objective `#902` and the SharedImageBox behavior so the text
clarifies that pending/suggested shared images keep inline Accept/Reject actions
and do not show the More Actions menu.
- Around line 13-17: The Flavors changeset is missing two user-visible UI
updates: add a line documenting the new "Access Type" column (shows "Private" or
"Public") introduced in PR `#908` and note that the Manage Access modal's DataGrid
no longer includes the redundant "Flavor ID" column as changed in PR `#909`;
update the "Flavors" section to mention these two items (referencing the Access
Type column and the Manage Access modal / DataGrid Flavor ID removal) so release
notes reflect both UI changes.
In
`@packages/aurora/src/client/routes/_auth/projects/`$projectId/compute/-components/Flavors/-components/EditSpecModal.tsx:
- Around line 251-272: The modal title uses resolvedCanEdit but the inner
EditSpecContent still derives permissions from permissionsPromise; fix by making
canEdit the single source-of-truth: when building permissionsPromise in
EditSpecModal, if canEdit === false return a resolved promise like
Promise.resolve({ canCreate: false, canDelete: false }) (or else pass
resolvedCanEdit down as an explicit prop) and pass resolvedCanEdit (or the
explicit canCreate/canDelete booleans) into EditSpecContent so the body cannot
render add/delete controls when canEdit is false; update usages of
permissionsPromise, resolvedCanEdit, EditSpecModal and EditSpecContent
accordingly.
In
`@packages/aurora/src/client/routes/_auth/projects/`$projectId/compute/images/$imageId.tsx:
- Around line 323-329: The hasMoreActions boolean currently omits the owner
"Manage Access" permission path and doesn't verify whether shared-member actions
are actually applicable (e.g., member status), causing empty/hidden menus;
update the hasMoreActions computation (used by headerActions) to include the
owner Manage Access condition (the same check used when rendering the Manage
Access item) and add a status/status-gate for isSharedWithMe paths so only
members with actionable statuses contribute true; ensure checks reference
permissions (permissions.canUpdateMember, permissions.canDeleteMember,
permissions.canUpdate, permissions.canDelete), isSharedWithMe, image.protected,
and the same member-status predicate used in the Manage Access menu item so the
popup only appears when there are real actions.
In `@packages/aurora/src/locales/de/messages.po`:
- Around line 172-173: The msgid "Access Type" in the translation entry
currently has an empty msgstr; update the msgstr for that msgid to the correct
German translation (e.g., "Zugriffstyp" or preferred locale wording) so the
Flavors list header shows the localized value; edit the msgstr for msgid "Access
Type" in the messages.po (the entry containing msgid "Access Type") to contain
the German string.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 3cc4ab68-4263-408f-85f4-bf4b9ebb5d9d
📒 Files selected for processing (17)
.changeset/silver-tigers-jump.mdpackages/aurora/src/client/components/ContentHeader/ContentHeader.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/EditSpecModal.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/FlavorListContainer.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/ManageAccessModal.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/SpecRow.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/TenantAccessFormRow.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/TenantAccessRow.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/List.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageDetailsView.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/flavors/-components/FlavorDetailsView.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/images/$imageId.tsxpackages/aurora/src/locales/de/messages.popackages/aurora/src/locales/de/messages.tspackages/aurora/src/locales/en/messages.popackages/aurora/src/locales/en/messages.ts
💤 Files with no reviewable changes (2)
- packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/TenantAccessRow.tsx
- packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/TenantAccessFormRow.tsx
- More Actions only shown for actionable member statuses (pending/accepted), not for rejected or loading states — prevents empty popup menus - headerActions condition scoped to non-shared images for edit buttons - hasMoreActions includes owner Manage Access condition - EditSpecModal: skip permissions network call when canEdit prop is provided, use it directly as source of truth for add/delete controls - Add German translation for "Access Type" (Zugriffstyp) - Update changeset with accurate descriptions per PR objectives
# Conflicts: # packages/aurora/src/locales/de/messages.ts # packages/aurora/src/locales/en/messages.ts
…reject for accepted
…oundary Rejected promises from canUser/getExtraSpecs (e.g. unknown rule in policy file) were propagating through React.use() and crashing the app. Wrapping the Suspense in an ErrorBoundary keeps the error inside the modal.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/aurora/src/client/routes/_auth/projects/$projectId/compute/images/$imageId.tsx (1)
132-132:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove unused Accept modal state and JSX.
The
acceptModalOpenstate is initialized but never set totrueanywhere in the codebase—no menu item or button triggers it. The Accept modal rendered at lines 417-433 is unreachable. According to the PR objectives, pending shared-image members use the inline Accept button inSharedImageBox, while accepted members only see the Reject action in the More Actions menu. The Accept modal serves no purpose and should be removed.🧹 Proposed cleanup
- const [acceptModalOpen, setAcceptModalOpen] = useState(false) const [rejectModalOpen, setRejectModalOpen] = useState(false){toastData && <Toast {...toastData} />} - {acceptModalOpen && ( - <Modal - title={t`Accept Shared Image`} - open={acceptModalOpen} - onCancel={() => setAcceptModalOpen(false)} - confirmButtonLabel={t`Accept`} - onConfirm={() => { - setAcceptModalOpen(false) - handleMemberStatusChange("accepted") - }} - > - <p> - {t`Accept access to image`} <strong>{String(image.name ?? image.id)}</strong>?{" "} - {t`It will appear in your image list.`} - </p> - </Modal> - )} - {rejectModalOpen && (Also applies to: 417-433
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/aurora/src/client/routes/_auth/projects/`$projectId/compute/images/$imageId.tsx at line 132, Remove the unused Accept modal state and its corresponding JSX rendering. Delete the state variable declaration for acceptModalOpen and setAcceptModalOpen since it is never set to true and serves no purpose in the application flow. Also delete the Accept modal JSX component that renders when acceptModalOpen is true (this modal is unreachable and redundant since the Accept functionality is already provided by the inline Accept button in SharedImageBox for pending members). These removals align with the PR objective where pending shared-image members use the inline Accept button while accepted members only see the Reject action in the More Actions menu.
🧹 Nitpick comments (1)
packages/aurora/src/client/routes/_auth/projects/$projectId/compute/images/$imageId.tsx (1)
323-330: ⚡ Quick winConsider extracting intermediate variables for clarity.
The
hasMoreActionslogic now correctly includes the owner Manage Access path and gates shared-member actions by status (addressing the prior review), but the compound boolean remains dense. Extracting named flags would improve readability and make the four action categories explicit.♻️ Optional refactor
const isDeactivated = image.status === IMAGE_STATUSES.DEACTIVATED const isPrivate = image.visibility === IMAGE_VISIBILITY.PRIVATE const isMemberAccepted = myMemberData?.status === "accepted" const isImageOwner = image.owner === projectId + + const hasSharedMemberActions = + isSharedWithMe && isMemberAccepted && permissions.canUpdateMember + + const hasOwnerUpdateActions = !isSharedWithMe && permissions.canUpdate + + const hasOwnerDeleteAction = + !isSharedWithMe && permissions.canDelete && !image.protected + + const hasOwnerManageAccessAction = + !isSharedWithMe && + isImageOwner && + image.visibility === IMAGE_VISIBILITY.SHARED && + (permissions.canCreateMember || permissions.canDeleteMember) + const hasMoreActions = - (isSharedWithMe && isMemberAccepted && permissions.canUpdateMember) || - (!isSharedWithMe && permissions.canUpdate) || - (!isSharedWithMe && permissions.canDelete && !image.protected) || - (!isSharedWithMe && - isImageOwner && - image.visibility === IMAGE_VISIBILITY.SHARED && - (permissions.canCreateMember || permissions.canDeleteMember)) + hasSharedMemberActions || + hasOwnerUpdateActions || + hasOwnerDeleteAction || + hasOwnerManageAccessAction🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/aurora/src/client/routes/_auth/projects/`$projectId/compute/images/$imageId.tsx around lines 323 - 330, The hasMoreActions logic is compound and difficult to read with four distinct action categories merged into a single boolean expression. Extract each of the four logical branches into named intermediate boolean variables with descriptive names that clarify what action each condition enables (for example, variables for shared member update capability, owner update capability, owner delete capability, and owner manage access capability), then simplify the hasMoreActions assignment to use these named flags with OR operators for improved readability and maintainability.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In
`@packages/aurora/src/client/routes/_auth/projects/`$projectId/compute/images/$imageId.tsx:
- Line 132: Remove the unused Accept modal state and its corresponding JSX
rendering. Delete the state variable declaration for acceptModalOpen and
setAcceptModalOpen since it is never set to true and serves no purpose in the
application flow. Also delete the Accept modal JSX component that renders when
acceptModalOpen is true (this modal is unreachable and redundant since the
Accept functionality is already provided by the inline Accept button in
SharedImageBox for pending members). These removals align with the PR objective
where pending shared-image members use the inline Accept button while accepted
members only see the Reject action in the More Actions menu.
---
Nitpick comments:
In
`@packages/aurora/src/client/routes/_auth/projects/`$projectId/compute/images/$imageId.tsx:
- Around line 323-330: The hasMoreActions logic is compound and difficult to
read with four distinct action categories merged into a single boolean
expression. Extract each of the four logical branches into named intermediate
boolean variables with descriptive names that clarify what action each condition
enables (for example, variables for shared member update capability, owner
update capability, owner delete capability, and owner manage access capability),
then simplify the hasMoreActions assignment to use these named flags with OR
operators for improved readability and maintainability.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 5a16ef1e-1c4e-4e67-b289-6261b93bd6cf
📒 Files selected for processing (9)
.changeset/silver-tigers-jump.mdpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/EditSpecModal.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageDetailsView.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/images/$imageId.tsxpackages/aurora/src/locales/de/messages.popackages/aurora/src/locales/de/messages.tspackages/aurora/src/locales/en/messages.popackages/aurora/src/locales/en/messages.ts
✅ Files skipped from review due to trivial changes (2)
- packages/aurora/src/locales/en/messages.po
- .changeset/silver-tigers-jump.md
🚧 Files skipped from review as they are similar to previous changes (3)
- packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/EditSpecModal.tsx
- packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Images/-components/ImageDetailsView.tsx
- packages/aurora/src/client/routes/_auth/projects/$projectId/compute/flavors/$flavorId.tsx
…views Policy file mismatches cause canUser/data promises to reject, which propagates through React.use() and crashes the full page without a boundary.
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Overview.tsx (1)
114-119: ⚡ Quick winUse
Messagecomponent for error fallback to match Images/Flavors list pattern.The error fallback renders a plain
<div>with text, whileImages/List.tsxandFlavors/List.tsxuse<Message variant="error">for their ErrorBoundary fallbacks. Using theMessagecomponent provides consistent styling, iconography, and UX across compute views.♻️ Proposed refactor to use Message component
Import
Message:import { ActivitySummary } from "./ActivitySummary" import { Suspense, use } from "react" import { ErrorBoundary } from "react-error-boundary" +import { Message } from "`@cloudoperators/juno-ui-components`" import { Server } from "`@/server/Compute/types/server`"Update the fallback:
<ErrorBoundary fallbackRender={({ error }) => ( - <div className="p-4 text-center"> - {error instanceof Error ? error.message : t`An unexpected error occurred.`} - </div> + <Message variant="error" text={error instanceof Error ? error.message : t`An unexpected error occurred.`} /> )} >🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/aurora/src/client/routes/_auth/projects/`$projectId/compute/-components/Overview.tsx around lines 114 - 119, The ErrorBoundary fallbackRender in Overview.tsx uses a plain div for error display, which is inconsistent with the Message component pattern used in Images/List.tsx and Flavors/List.tsx. Import the Message component if not already imported, and replace the div wrapper with Message variant="error" in the fallbackRender prop, maintaining the same error message logic (showing error.message if the error is an Error instance, otherwise showing the fallback message).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/aurora/src/locales/de/messages.po`:
- Around line 295-296: The msgstr field for the German translation of "An
unexpected error occurred." in the messages.po file is empty, causing German
users to see the English fallback in ErrorBoundary error messages. Fill in the
msgstr with an appropriate German translation of this error message to maintain
locale consistency and provide a proper German user experience. The msgid "An
unexpected error occurred." (with trailing period) is the entry that needs the
translation added.
---
Nitpick comments:
In
`@packages/aurora/src/client/routes/_auth/projects/`$projectId/compute/-components/Overview.tsx:
- Around line 114-119: The ErrorBoundary fallbackRender in Overview.tsx uses a
plain div for error display, which is inconsistent with the Message component
pattern used in Images/List.tsx and Flavors/List.tsx. Import the Message
component if not already imported, and replace the div wrapper with Message
variant="error" in the fallbackRender prop, maintaining the same error message
logic (showing error.message if the error is an Error instance, otherwise
showing the fallback message).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 0b087888-b823-456e-bbc7-4b460414718d
📒 Files selected for processing (9)
.changeset/silver-tigers-jump.mdpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/EditSpecModal.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/List.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Images/List.tsxpackages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Overview.tsxpackages/aurora/src/locales/de/messages.popackages/aurora/src/locales/de/messages.tspackages/aurora/src/locales/en/messages.popackages/aurora/src/locales/en/messages.ts
🚧 Files skipped from review as they are similar to previous changes (4)
- .changeset/silver-tigers-jump.md
- packages/aurora/src/locales/en/messages.po
- packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/List.tsx
- packages/aurora/src/client/routes/_auth/projects/$projectId/compute/-components/Flavors/-components/EditSpecModal.tsx
…t/reject modals in image detail
…rd into til-ui-imp
Missed in 5f77999 — apply the same direct-call pattern already used in the image detail page (call handleMemberStatusChange directly, no modal).
feat(portal): compute image and flavor UI improvements
Summary
Images — action parity between list and detail page
Images — copyable IDs
ClipboardTextfor one-click copyFlavors — spec permission granularity
flavor_specs:list(view-only) now see a Metadata button on both the detail page and the list rowflavor_specs:createorflavor_specs:deletesee Edit Metadata insteadEditSpecModalreceivescanEditin both places — read-only vs editable modeFlavors — list row polish
Related Issues
Closes #902
Closes #903
Closes #907
Closes #908
Closes #909
Closes #913
Closes #917
Testing
Images — copyable IDs
Images — shared image actions (accepted)
Images — shared image actions (pending / suggested)
Flavors — Edit Metadata vs Metadata label
flavor_specs:create/delete):flavor_specs:listonly):Flavors — list row popup icon
Flavors — Manage Access on list row and detail page
Checklist
Summary by CodeRabbit
Summary
New Features
Improvements
Bug Fixes