Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions apps/mobile/src/features/connection/CloudEnvironmentRows.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,12 @@ function ConnectedCloudEnvironmentRow(props: {
);
const unsupported = props.environment.connectionState === "unsupported";
const enabled = props.environment.isEnabled && !unsupported;
// Discovery empties its map on every refresh; hold the last descriptor seen
// so the glyph does not blink back to the generic one each time.
const [lastDescriptor, setLastDescriptor] = useState(props.descriptor);
if (props.descriptor !== undefined && props.descriptor !== lastDescriptor) {
setLastDescriptor(props.descriptor);
}
return (
<Pressable
accessibilityHint="Long press to remove from this device"
Expand All @@ -248,8 +254,7 @@ function ConnectedCloudEnvironmentRow(props: {
errorExpanded={props.errorExpanded}
label={props.environment.environmentLabel}
machine={resolveEnvironmentMachineKind(
serverConfig ??
(props.descriptor === undefined ? null : { environment: props.descriptor }),
serverConfig ?? (lastDescriptor === undefined ? null : { environment: lastDescriptor }),
)}
onValueChange={props.onSetEnabled}
onToggleError={props.onToggleError}
Expand Down
19 changes: 11 additions & 8 deletions apps/web/src/components/settings/ConnectionsSettings.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1523,14 +1523,20 @@ function SavedBackendListRow({
const serverVersion = environment.serverConfig?.environment.serverVersion ?? null;
// A saved T3 Connect machine this device has never reached (unsupported,
// or not yet connected) still has a descriptor from relay discovery, so
// it can wear its detected glyph instead of the generic server.
// it can wear its detected glyph instead of the generic server. Discovery
// empties its map on every refresh, so hold the last descriptor seen or
// the glyph would blink back to the generic one each time.
const relayDiscovery = useRelayEnvironmentDiscovery();
const discoveredDescriptor = Option.getOrNull(
relayDiscovery.environments.get(environmentId)?.status ?? Option.none(),
)?.descriptor;
const [lastDescriptor, setLastDescriptor] = useState(discoveredDescriptor);
if (discoveredDescriptor !== undefined && discoveredDescriptor !== lastDescriptor) {
setLastDescriptor(discoveredDescriptor);
}
const machineKind = resolveEnvironmentMachineKind(
environment.serverConfig ??
(discoveredDescriptor === undefined ? null : { environment: discoveredDescriptor }),
(lastDescriptor === undefined ? null : { environment: lastDescriptor }),
);
const subtitleText = [
environmentTransportLabel(environment),
Expand Down Expand Up @@ -1560,19 +1566,16 @@ function SavedBackendListRow({
<span
className={cn(
"block truncate",
(enabled || unsupported) &&
status.tone === "error" &&
!resumingServerUpdate &&
"text-destructive",
enabled && status.tone === "error" && !resumingServerUpdate && "text-destructive",
)}
/>
}
>
{subtitleText}
</TooltipTrigger>
<TooltipPopup side="top" className="max-w-80 whitespace-pre-wrap leading-tight">
{unsupported && environment.connection.error
? environment.connection.error
{unsupported
? (environment.connection.error ?? connectionStatusText(environment.connection))
: enabled
? connectionStatusText(environment.connection)
: "Switched off"}
Expand Down
Loading