A React component library for rendering common AT Protocol records for applications such as Bluesky and Leaflet.
1import React from 'react';
2import { useAtProtoRecord } from '../hooks/useAtProtoRecord';
3
4export interface AtProtoRecordProps<T = unknown> {
5 did: string;
6 collection: string;
7 rkey: string;
8 renderer?: React.ComponentType<{ record: T; loading: boolean; error?: Error }>;
9 fallback?: React.ReactNode;
10 loadingIndicator?: React.ReactNode;
11}
12
13export function AtProtoRecord<T = unknown>({ did, collection, rkey, renderer: Renderer, fallback = null, loadingIndicator = 'Loading…' }: AtProtoRecordProps<T>) {
14 const { record, error, loading } = useAtProtoRecord<T>({ did, collection, rkey });
15
16 if (error) return <>{fallback}</>;
17 if (!record) return <>{loading ? loadingIndicator : fallback}</>;
18 if (Renderer) return <Renderer record={record} loading={loading} error={error} />;
19 return <pre style={{ fontSize: 12, padding: 8, background: '#f5f5f5', overflow: 'auto' }}>{JSON.stringify(record, null, 2)}</pre>;
20}