fix: resolve e2e test failures for terminal creation and new workspace

Terminal tests (launcher-tab, terminal-performance):
- Terminal creation no longer silently no-ops when workspace metadata
  hasn't hydrated. Early clicks are queued and flushed once the workspace
  directory is ready, with toast feedback.
- Terminal button is disabled while waiting on workspace readiness.
- Removed isFocused gate from ?open= intent consumption in workspace
  layout so deep-linked terminals open reliably on cold startup.

New workspace test:
- New workspace screen now shows a visible Create button even when the
  composer is empty, via new allowEmptySubmit and
  submitButtonAccessibilityLabel props threaded through Composer and
  MessageInput.
This commit is contained in:
Mohamed Boudra
2026-04-15 11:42:18 +07:00
parent 751a1df682
commit 43bec954ea
6 changed files with 105 additions and 20 deletions
@@ -81,6 +81,8 @@ type WorkspaceDesktopTabsRowProps = {
onCloseOtherTabs: (tabId: string) => Promise<void> | void;
onCreateDraftTab: (input: { paneId?: string }) => void;
onCreateTerminalTab: (input: { paneId?: string }) => void;
disableCreateTerminal?: boolean;
isWaitingOnTerminalReadiness?: boolean;
onReorderTabs: (nextTabs: WorkspaceTabDescriptor[]) => void;
onSplitRight: () => void;
onSplitDown: () => void;
@@ -382,6 +384,8 @@ export function WorkspaceDesktopTabsRow({
onCloseOtherTabs,
onCreateDraftTab,
onCreateTerminalTab,
disableCreateTerminal = false,
isWaitingOnTerminalReadiness = false,
onReorderTabs,
onSplitRight,
onSplitDown,
@@ -544,10 +548,15 @@ export function WorkspaceDesktopTabsRow({
<TooltipTrigger
testID="workspace-new-terminal"
onPress={() => onCreateTerminalTab({ paneId })}
disabled={disableCreateTerminal || isWaitingOnTerminalReadiness}
accessibilityRole="button"
accessibilityLabel="New terminal tab"
accessibilityLabel={
isWaitingOnTerminalReadiness ? "Preparing terminal tab" : "New terminal tab"
}
style={({ hovered, pressed }) => [
styles.newTabActionButton,
(disableCreateTerminal || isWaitingOnTerminalReadiness) &&
styles.newTabActionButtonDisabled,
(hovered || pressed) && styles.newTabActionButtonHovered,
]}
>
@@ -555,7 +564,9 @@ export function WorkspaceDesktopTabsRow({
</TooltipTrigger>
<TooltipContent side="bottom" align="center" offset={8}>
<View style={styles.newTabTooltipRow}>
<Text style={styles.newTabTooltipText}>New terminal tab</Text>
<Text style={styles.newTabTooltipText}>
{isWaitingOnTerminalReadiness ? "Preparing terminal..." : "New terminal tab"}
</Text>
{newTerminalKeys ? (
<Shortcut chord={newTerminalKeys} style={styles.newTabTooltipShortcut} />
) : null}
@@ -863,6 +874,9 @@ const styles = StyleSheet.create((theme) => ({
alignItems: "center",
justifyContent: "center",
},
newTabActionButtonDisabled: {
opacity: 0.5,
},
newTabActionButtonHovered: {
backgroundColor: theme.colors.surface2,
},