fix(team): keep launch loader for runtime-pending members
This commit is contained in:
parent
15f7219997
commit
53d45c5e30
2 changed files with 40 additions and 2 deletions
|
|
@ -124,6 +124,7 @@ export const MemberCard = ({
|
||||||
const runtimeAdvisoryTitle = launchPresentation.runtimeAdvisoryTitle;
|
const runtimeAdvisoryTitle = launchPresentation.runtimeAdvisoryTitle;
|
||||||
const presenceLabel = launchPresentation.presenceLabel;
|
const presenceLabel = launchPresentation.presenceLabel;
|
||||||
const spawnCardClass = launchPresentation.cardClass;
|
const spawnCardClass = launchPresentation.cardClass;
|
||||||
|
const launchVisualState = launchPresentation.launchVisualState;
|
||||||
const launchStatusLabel = launchPresentation.launchStatusLabel;
|
const launchStatusLabel = launchPresentation.launchStatusLabel;
|
||||||
const colors = getTeamColorSet(memberColor);
|
const colors = getTeamColorSet(memberColor);
|
||||||
const { isLight } = useTheme();
|
const { isLight } = useTheme();
|
||||||
|
|
@ -148,7 +149,12 @@ export const MemberCard = ({
|
||||||
!activityTask &&
|
!activityTask &&
|
||||||
!runtimeSummary;
|
!runtimeSummary;
|
||||||
const showLaunchBadge =
|
const showLaunchBadge =
|
||||||
!isRemoved && !activityTask && (presenceLabel === 'starting' || presenceLabel === 'connecting');
|
!isRemoved &&
|
||||||
|
!activityTask &&
|
||||||
|
!runtimeAdvisoryLabel &&
|
||||||
|
(presenceLabel === 'starting' ||
|
||||||
|
presenceLabel === 'connecting' ||
|
||||||
|
launchVisualState === 'runtime_pending');
|
||||||
const launchBadgeLabel =
|
const launchBadgeLabel =
|
||||||
presenceLabel === 'starting' ? presenceLabel : (launchStatusLabel ?? presenceLabel);
|
presenceLabel === 'starting' ? presenceLabel : (launchStatusLabel ?? presenceLabel);
|
||||||
const showRuntimeAdvisoryBadge =
|
const showRuntimeAdvisoryBadge =
|
||||||
|
|
@ -271,7 +277,7 @@ export const MemberCard = ({
|
||||||
<span className="flex shrink-0 items-center gap-1">
|
<span className="flex shrink-0 items-center gap-1">
|
||||||
<Loader2
|
<Loader2
|
||||||
className="size-3.5 shrink-0 animate-spin text-[var(--color-text-muted)]"
|
className="size-3.5 shrink-0 animate-spin text-[var(--color-text-muted)]"
|
||||||
aria-label={presenceLabel}
|
aria-label={launchBadgeLabel}
|
||||||
/>
|
/>
|
||||||
<Badge
|
<Badge
|
||||||
variant="secondary"
|
variant="secondary"
|
||||||
|
|
|
||||||
|
|
@ -267,6 +267,38 @@ describe('MemberCard starting-state visuals', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('shows a connecting badge while runtime bootstrap is still pending after the process comes online', async () => {
|
||||||
|
vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true);
|
||||||
|
const host = document.createElement('div');
|
||||||
|
document.body.appendChild(host);
|
||||||
|
const root = createRoot(host);
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
root.render(
|
||||||
|
React.createElement(MemberCard, {
|
||||||
|
member,
|
||||||
|
memberColor: 'blue',
|
||||||
|
runtimeSummary: 'Gemini · flash · Medium',
|
||||||
|
isTeamAlive: true,
|
||||||
|
isTeamProvisioning: false,
|
||||||
|
spawnStatus: 'online',
|
||||||
|
spawnLaunchState: 'runtime_pending_bootstrap',
|
||||||
|
spawnRuntimeAlive: true,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
await Promise.resolve();
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(host.textContent).toContain('connecting');
|
||||||
|
expect(host.textContent).not.toContain('ready');
|
||||||
|
expect(host.querySelector('[aria-label="connecting"]')).not.toBeNull();
|
||||||
|
|
||||||
|
await act(async () => {
|
||||||
|
root.unmount();
|
||||||
|
await Promise.resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('shows ready instead of idle for confirmed teammates while launch is still settling', async () => {
|
it('shows ready instead of idle for confirmed teammates while launch is still settling', async () => {
|
||||||
vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true);
|
vi.stubGlobal('IS_REACT_ACT_ENVIRONMENT', true);
|
||||||
const host = document.createElement('div');
|
const host = document.createElement('div');
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue