11
22
3+
4+
5+
36import { FormEvent , useState , useEffect } from 'react' ;
4- import { MousePointer2 } from 'lucide-react' ;
7+ import { MousePointer2 , AlertCircle } from 'lucide-react' ;
8+ import { Link } from 'react-router-dom' ;
59import { Campaign , AppConfig } from '../types/campaign' ;
610import CopyButton from './CopyButton' ;
711import { AddressAvatar } from './AddressAvatar' ;
@@ -16,6 +20,7 @@ interface CampaignDetailPanelProps {
1620 isConnectingWallet ?: boolean ;
1721 isLoading ?: boolean ;
1822 isPledgePending ?: boolean ;
23+ notFoundCampaignId ?: string | null ;
1924 onConnectWallet ?: ( ) => Promise < void > ;
2025 onDisconnectWallet ?: ( ) => void ;
2126 onPledge ?: ( campaignId : string , amount : number , assetCode : string ) => Promise < void > ;
@@ -66,6 +71,7 @@ export function CampaignDetailPanel({
6671 isConnectingWallet = false ,
6772 isLoading = false ,
6873 isPledgePending = false ,
74+ notFoundCampaignId = null ,
6975 onConnectWallet = async ( ) => { } ,
7076 onDisconnectWallet = ( ) => { } ,
7177 onPledge = async ( ) => { } ,
@@ -109,6 +115,24 @@ export function CampaignDetailPanel({
109115 ) ;
110116 }
111117
118+ if ( notFoundCampaignId ) {
119+ return (
120+ < section className = "card detail-panel" >
121+ < div className = "section-heading" >
122+ < h2 > Campaign not found</ h2 >
123+ < p className = "muted" >
124+ The campaign < code > #{ notFoundCampaignId } </ code > does not exist or may have been removed.
125+ </ p >
126+ </ div >
127+ < div style = { { marginTop : 24 } } >
128+ < Link to = "/" className = "btn-ghost" >
129+ Back to campaigns
130+ </ Link >
131+ </ div >
132+ </ section >
133+ ) ;
134+ }
135+
112136 if ( ! campaign ) {
113137 return (
114138 < EmptyState
0 commit comments