11import { useEffect , useRef , useState } from 'preact/hooks' ;
2+ import type { JSX } from 'preact' ;
23import { ResultDisplay } from './ResultDisplay' ;
34import { CreateFeedPanel , UtilityStrip , type Strategy } from './AppPanels' ;
45import { useAccessToken } from '../hooks/useAccessToken' ;
@@ -225,7 +226,12 @@ export function App() {
225226 const missingResultRoute =
226227 route . kind === 'result' && resultRouteRecoveryAttempted && ! activeResult && ! isConverting ;
227228 const visibleErrorMessage =
228- tokenError || conversionError || feedFieldErrors . url || feedFieldErrors . form || metadataError || tokenStateError ;
229+ tokenError ||
230+ conversionError ||
231+ feedFieldErrors . url ||
232+ feedFieldErrors . form ||
233+ metadataError ||
234+ tokenStateError ;
229235 const errorKind = classifyWorkflowError ( visibleErrorMessage ) ;
230236 const workflowState : WorkflowState = resultRouteRestorePending
231237 ? 'validating'
@@ -451,6 +457,93 @@ export function App() {
451457 ) ;
452458 }
453459
460+ let bodyContent : JSX . Element ;
461+ if ( resultRouteRestorePending ) {
462+ bodyContent = (
463+ < section class = "ui-card ui-card--notice ui-card--roomy notice" data-state = "loading" aria-live = "polite" >
464+ < div class = "notice__spinner" aria-hidden = "true" />
465+ < div >
466+ < strong > Restoring saved result</ strong >
467+ < p > Checking local session state.</ p >
468+ </ div >
469+ </ section >
470+ ) ;
471+ } else if ( activeResult ) {
472+ bodyContent = (
473+ < ResultDisplay
474+ result = { activeResult }
475+ workflowState = { workflowState }
476+ onCreateAnother = { handleCreateAnother }
477+ onRetryReadiness = { retryReadinessCheck }
478+ />
479+ ) ;
480+ } else if ( missingResultRoute ) {
481+ bodyContent = (
482+ < section class = "ui-card ui-card--notice ui-card--padded notice" data-tone = "error" role = "alert" >
483+ < div class = "notice__title" > Saved result unavailable</ div >
484+ < p > We could not restore this feed result. Create a new feed link to continue.</ p >
485+ < div class = "notice__actions" >
486+ < button
487+ type = "button"
488+ class = "btn btn--primary"
489+ onClick = { ( ) => navigate ( { kind : 'create' , prefillUrl : feedFormData . url || undefined } ) }
490+ >
491+ Go to create
492+ </ button >
493+ </ div >
494+ </ section >
495+ ) ;
496+ } else {
497+ bodyContent = (
498+ < >
499+ < CreateFeedPanel
500+ focusComposerKey = { focusCreateComposerKey }
501+ workflowState = { workflowState }
502+ feedFormData = { { ...feedFormData , strategy : selectedStrategy } }
503+ feedFieldErrors = { feedFieldErrors }
504+ conversionError = { conversionError }
505+ errorKind = { errorKind }
506+ isConverting = { isConverting }
507+ submitDisabled = { submitDisabled }
508+ strategies = { strategies }
509+ strategiesLoading = { strategiesLoading }
510+ strategiesError = { strategiesError }
511+ feedCreationEnabled = { feedCreation . enabled }
512+ featuredFeeds = { featuredFeeds }
513+ tokenDraft = { tokenDraft }
514+ tokenError = { tokenError }
515+ showTokenPrompt = { isTokenRoute }
516+ onFeedSubmit = { handleFeedSubmit }
517+ onFeedFieldChange = { setFeedField }
518+ onTokenDraftChange = { ( value ) => {
519+ setTokenDraft ( value ) ;
520+ setTokenError ( '' ) ;
521+ clearError ( ) ;
522+ } }
523+ onSaveToken = { handleSaveToken }
524+ onCancelTokenPrompt = { ( ) => {
525+ setTokenError ( '' ) ;
526+ clearError ( ) ;
527+ navigate ( { kind : 'create' , prefillUrl : feedFormData . url || undefined } ) ;
528+ } }
529+ manualRetryStrategy = { manualRetryStrategy }
530+ onRetryWithStrategy = { handleRetryWithStrategy }
531+ strategyHint = { strategyHint }
532+ />
533+ < UtilityStrip
534+ hidden = { isTokenRoute }
535+ hasAccessToken = { hasToken }
536+ openapiUrl = { metadata ?. api . openapi_url }
537+ onClearToken = { ( ) => {
538+ clearToken ( ) ;
539+ clearError ( ) ;
540+ navigate ( { kind : 'create' , prefillUrl : feedFormData . url || undefined } ) ;
541+ } }
542+ />
543+ </ >
544+ ) ;
545+ }
546+
454547 return (
455548 < section class = "workspace-shell workspace-shell--centered" >
456549 < header class = "workspace-hero" >
@@ -464,83 +557,7 @@ export function App() {
464557 </ section >
465558 ) }
466559
467- { resultRouteRestorePending ? (
468- < section class = "ui-card ui-card--notice ui-card--roomy notice" data-state = "loading" aria-live = "polite" >
469- < div class = "notice__spinner" aria-hidden = "true" />
470- < div >
471- < strong > Restoring saved result</ strong >
472- < p > Checking local session state.</ p >
473- </ div >
474- </ section >
475- ) : activeResult ? (
476- < ResultDisplay
477- result = { activeResult }
478- workflowState = { workflowState }
479- onCreateAnother = { handleCreateAnother }
480- onRetryReadiness = { retryReadinessCheck }
481- />
482- ) : missingResultRoute ? (
483- < section class = "ui-card ui-card--notice ui-card--padded notice" data-tone = "error" role = "alert" >
484- < div class = "notice__title" > Saved result unavailable</ div >
485- < p > We could not restore this feed result. Create a new feed link to continue.</ p >
486- < div class = "notice__actions" >
487- < button
488- type = "button"
489- class = "btn btn--primary"
490- onClick = { ( ) => navigate ( { kind : 'create' , prefillUrl : feedFormData . url || undefined } ) }
491- >
492- Go to create
493- </ button >
494- </ div >
495- </ section >
496- ) : (
497- < >
498- < CreateFeedPanel
499- focusComposerKey = { focusCreateComposerKey }
500- workflowState = { workflowState }
501- feedFormData = { { ...feedFormData , strategy : selectedStrategy } }
502- feedFieldErrors = { feedFieldErrors }
503- conversionError = { conversionError }
504- errorKind = { errorKind }
505- isConverting = { isConverting }
506- submitDisabled = { submitDisabled }
507- strategies = { strategies }
508- strategiesLoading = { strategiesLoading }
509- strategiesError = { strategiesError }
510- feedCreationEnabled = { feedCreation . enabled }
511- featuredFeeds = { featuredFeeds }
512- tokenDraft = { tokenDraft }
513- tokenError = { tokenError }
514- showTokenPrompt = { isTokenRoute }
515- onFeedSubmit = { handleFeedSubmit }
516- onFeedFieldChange = { setFeedField }
517- onTokenDraftChange = { ( value ) => {
518- setTokenDraft ( value ) ;
519- setTokenError ( '' ) ;
520- clearError ( ) ;
521- } }
522- onSaveToken = { handleSaveToken }
523- onCancelTokenPrompt = { ( ) => {
524- setTokenError ( '' ) ;
525- clearError ( ) ;
526- navigate ( { kind : 'create' , prefillUrl : feedFormData . url || undefined } ) ;
527- } }
528- manualRetryStrategy = { manualRetryStrategy }
529- onRetryWithStrategy = { handleRetryWithStrategy }
530- strategyHint = { strategyHint }
531- />
532- < UtilityStrip
533- hidden = { isTokenRoute }
534- hasAccessToken = { hasToken }
535- openapiUrl = { metadata ?. api . openapi_url }
536- onClearToken = { ( ) => {
537- clearToken ( ) ;
538- clearError ( ) ;
539- navigate ( { kind : 'create' , prefillUrl : feedFormData . url || undefined } ) ;
540- } }
541- />
542- </ >
543- ) }
560+ { bodyContent }
544561 </ section >
545562 ) ;
546563}
0 commit comments