({
queuePaused,
queuedMessages,
separatorWidth,
terminalWidth,
}: UseQueueUiParams)
| 14 | } |
| 15 | |
| 16 | export const useQueueUi = ({ |
| 17 | queuePaused, |
| 18 | queuedMessages, |
| 19 | separatorWidth, |
| 20 | terminalWidth, |
| 21 | }: UseQueueUiParams) => { |
| 22 | const queuedCount = queuedMessages.length |
| 23 | const shouldShowQueuePreview = queuedCount > 0 && !queuePaused |
| 24 | |
| 25 | const queuePreviewTitle = useMemo(() => { |
| 26 | if (!shouldShowQueuePreview) return undefined |
| 27 | const previewWidth = Math.max(30, separatorWidth - 20) |
| 28 | return formatQueuedPreview(queuedMessages, previewWidth) |
| 29 | }, [shouldShowQueuePreview, queuedMessages, separatorWidth]) |
| 30 | |
| 31 | const pausedQueueText = useMemo(() => { |
| 32 | if (!queuePaused || queuedCount === 0) return undefined |
| 33 | return `${pluralize(queuedCount, 'message')} queued — your next message sends first` |
| 34 | }, [queuePaused, queuedCount]) |
| 35 | |
| 36 | const inputPlaceholder = useMemo(() => { |
| 37 | const base = |
| 38 | terminalWidth < 65 |
| 39 | ? 'Enter a coding task' |
| 40 | : 'Enter a coding task or / for commands' |
| 41 | |
| 42 | if (queuePaused && queuedCount > 0) { |
| 43 | return 'Ctrl-C to cancel queued messages' |
| 44 | } |
| 45 | |
| 46 | return base |
| 47 | }, [queuePaused, queuedCount, terminalWidth]) |
| 48 | |
| 49 | return { |
| 50 | queuedCount, |
| 51 | shouldShowQueuePreview, |
| 52 | queuePreviewTitle, |
| 53 | pausedQueueText, |
| 54 | inputPlaceholder, |
| 55 | } |
| 56 | } |
no test coverage detected