import { Modal, Notice, Spinner } from '@wordpress/components'; import { useEffect, useState } from '@wordpress/element'; import { api } from '../api'; import type { ProductSnapshot } from '../types'; interface SnapshotModalProps { productId: number; productName: string; onClose: () => void; } export default function SnapshotModal({ productId, productName, onClose }: SnapshotModalProps): JSX.Element { const [snapshot, setSnapshot] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { let cancelled = false; setLoading(true); setError(null); api.get(`/products/${productId}/snapshot`) .then((data) => { if (!cancelled) setSnapshot(data); }) .catch((err: unknown) => { if (cancelled) return; const message = err && typeof err === 'object' && 'message' in err ? String((err as { message: unknown }).message) : 'This product has no certificate data yet.'; setError(message); }) .finally(() => { if (!cancelled) setLoading(false); }); return () => { cancelled = true; }; }, [productId]); return (
{loading && (
)} {!loading && error && ( {error} )} {!loading && !error && snapshot && (
						{JSON.stringify(snapshot, null, 2)}
					
)}
); }