Skip to content

CF section navigation fixes; transient connect/disconnect states; modeless endpoint dialogs - #5642

Merged
norman-abramovitz merged 5 commits into
cloudfoundry:developfrom
nabramovitz:norm/fix/cf-section-nav
Jul 18, 2026
Merged

CF section navigation fixes; transient connect/disconnect states; modeless endpoint dialogs#5642
norman-abramovitz merged 5 commits into
cloudfoundry:developfrom
nabramovitz:norm/fix/cf-section-nav

Conversation

@nabramovitz

Copy link
Copy Markdown
Contributor

Closes #5638

What this fixes

Defect 1 — Applications tile leaves the CF section. The tile now routes to /cloud-foundry/{guid}/applications, keeping the CF header and side nav, with org/space filters reset.

Defect 2 — single-CF shortcut never fires on cold load. The CF section now reads the picker set after EndpointsDataService.whenReady() instead of sampling connectedCFEndpoints$ with take(1), which on a cold load always saw the empty pre-hydration list.

Transient connection states

The dormant 'checking' status is renamed to 'connecting' and given a producer: EndpointsDataService holds a busy state for the duration of a connect/reconnect, and a matching 'disconnecting' state covers the disconnect window. Both are overlays (withConnectingOverlay) computed at display time — never written to the endpoint model, so getAll()'s wholesale refresh cannot clobber them.

While an operation is in flight the status pill shows Connecting/Disconnecting (table label, card word + spinner, CF picker warning dot) and nothing else on the row or card changes. The CF picker also gained a Status column and now lists connected, expired, and mid-transition endpoints, so an expired CF no longer looks identical to a live one.

Dialog behaviour

To make the transient states actually observable, the endpoint dialogs no longer hide the page behind them:

  • TailwindDialogService gains a modeless option — the dim backdrop remains but passes pointer events through, so the endpoint card stays visible and live while the dialog is open. Dialogs are draggable by their title bar.
  • The connect dialog is resized and restyled to match the confirmation dialogs (shared 400px config used by all five call sites), its progress bar only renders while a connect is in flight, and the error area only occupies space when an error exists.
  • A failed reconnect now states that the existing connection is unaffected — the stored token survives a failed attempt, which is easy to misread as a contradiction when the card still says Connected.
  • Confirmation dialogs (Disconnect, Unregister, and the rest of the family) get the same modeless + draggable behaviour. Note: backdrop clicks no longer dismiss these dialogs; Cancel and Escape still do.

Also fixes a template corruption in the rewritten progress bar/spinner: a fragment of decorator source rendered as literal text next to every indeterminate spinner.

Verification

  • Frontend suite green; new unit tests for the modeless dialog option and the picker's disconnecting behaviour.
  • Live-verified against a real CF: card pill flips to Connecting/Disconnecting during the operations and reverts or settles correctly on failure/success; dialogs drag correctly; failed reconnect leaves the existing session working (confirmed with a live API call through the stored token).

The "N Applications" tile on the CF Summary tab routed to the global
application wall, which dropped the CF context — the side nav reverted
from the CF's tabs to the global menu. Point it at the CF's own
Applications tab instead.

Clear any org/space scope a previous mount left on the root-singleton
apps config at the tile's call site: the tile means "every app in this
CF". The clear cannot live in the Applications tab, which deliberately
keeps org/space so returning from an app detail page preserves the
filter the user set there.

Refs cloudfoundry#5638
Rename the connectionStatus member 'checking' to 'connecting' and give
it a producer. It lost its writer when the legacy endpoint reducer was
deleted but kept its readers; it is the transient state while a connect
or reconnect is in flight. Derive it as an overlay (withConnectingOverlay)
from the connect busy window rather than storing it, so a getAll()
refresh cannot clobber it — the same shape as the expired-stale overlay.
The endpoints list and card show it live during a connect.

The Cloud Foundry picker now lists every endpoint that belongs to the
user — connected, expired (never disconnected, needs reconnect), or
mid-connect — through availableCFEndpoints, not just those with a live
token. Request fan-out keeps its own connected-only set, since an
expired or connecting token cannot serve a request. The picker gains a
Status column so those states are legible: an expired CF no longer looks
identical to a live one.

The single-CF shortcut reads that picker set after whenReady() instead
of sampling connectedCFEndpoints$ with take(1). On a cold load (reload,
bookmark, first navigation after login) the old sample caught the empty
pre-hydration list, saw zero endpoints and never looked again, so the
picker it exists to skip was shown to every single-CF user. A lone
connected or expired CF is now entered directly.

Refs cloudfoundry#5638
The Material-migration rewrite of the progress bar and spinner left a
fragment of decorator source (', changeDetection: ...' plus an orphan
paren) inside each template's indeterminate branch. Angular renders it
as literal text beside every indeterminate spinner or bar - most
visibly next to the endpoint card's Connecting pill.
Keep the endpoint card visible and live while its dialogs are open, so
the transient status (Connecting) can actually be seen during the
operation:

- TailwindDialogService gains a 'modeless' option: the dim backdrop
  stays but passes pointer events through; the panel stays interactive
  and aria-modal reflects the mode. Backdrop clicks no longer dismiss.
- Connect dialog: one shared 400px config (CONNECT_ENDPOINT_DIALOG_
  OPTIONS) spread at all five call sites, sized and styled to match
  the confirmation dialogs (18px/600 title, no action separator,
  secondary Cancel). Draggable by the title bar. Progress bar renders
  only while a connect is in flight instead of a permanent solid bar.
- Confirmation dialogs (Disconnect, Unregister, ...) get the same
  modeless + draggable behaviour via ConfirmationDialogService.
- app-dialog-error no longer reserves an empty 35px strip when there
  is no error; the connect dialog notes that a failed reconnect left
  the existing connection intact.
Mirror of the connecting overlay for the disconnect window: the
service already tracked _disconnectingStates; expose isDisconnecting()
and fold it into withConnectingOverlay so display surfaces show
'Disconnecting' while the DELETE is in flight, without the value ever
being stored on the endpoint model.

Readers: endpoints table pill (label + warning colour), card-view
status cell (word + spinner), and the CF picker (row stays visible
with a warning dot until the operation settles; the fan-out set is
unchanged - the token stays valid until the DELETE lands).

During either transition only the status pill changes: the card no
longer dims while connecting (endpoint-card--connecting removed).

@norman-abramovitz norman-abramovitz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@norman-abramovitz
norman-abramovitz merged commit bb4ca5b into cloudfoundry:develop Jul 18, 2026
21 checks passed
@nabramovitz
nabramovitz deleted the norm/fix/cf-section-nav branch July 18, 2026 02:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Cloud Foundry section: Applications tile leaves the section; single-CF shortcut never fires on cold load

2 participants