Skip to content

Latest commit

 

History

History
121 lines (88 loc) · 2.53 KB

File metadata and controls

121 lines (88 loc) · 2.53 KB

Hooks

React Hooks für die Narrative-Infrastruktur.

Übersicht

Hook Zweck
useRepository Automerge Repo mit Storage + WebSocket
useUserDocument Persönliches User-Dokument (Profil, Trust, Workspaces)
useAppContext Zentraler App-State (Identity, Modals, Trust-Handling)
useTrustNotifications Erkennt neue Trust-Attestierungen
useCrossTabSync Reagiert auf localStorage-Änderungen in anderen Tabs
useProfileUrl Profil-DIDs via URL-Hash (#profile=did:key:...)

useRepository

Erstellt ein Automerge Repository mit IndexedDB-Storage und WebSocket-Sync.

const repo = useRepository({
  syncServer: 'wss://sync.automerge.org', // optional
});

useUserDocument

Verwaltet das persönliche User-Dokument (cross-workspace).

Speichert:

  • Profil (Name, Avatar)
  • Trust-Attestierungen (gegeben/empfangen)
  • Workspace-Liste
  • Vouchers
const {
  userDoc,
  updateProfile,
  addWorkspace,
  giveTrust,
  getValidReceivedTrust,
} = useUserDocument({ repo, did, displayName });

useAppContext

Zentraler Hook für App-weiten State. Kombiniert Identity, Workspaces, Trust und UI-Modals.

Bietet:

  • Identity-Management (laden, speichern, aktualisieren)
  • Workspace-Verwaltung
  • Trust-Handling (attestieren, widerrufen)
  • Modal-Props (TrustReciprocityModal, NewWorkspaceModal, Toast)
const {
  identity,
  handleUpdateIdentity,
  handleTrustUser,
  trustReciprocityModalProps,
  toastProps,
} = useAppContext({ docHandle, documentId, ... });

useTrustNotifications

Erkennt neue Trust-Attestierungen wo der aktuelle User der Empfänger ist.

Filtert automatisch:

  • Bereits gesehene Attestierungen
  • Selbst-Attestierungen
  • Attestierungen von Usern, denen man bereits vertraut
const {
  pendingAttestations,
  hasPending,
  markAsSeen,
} = useTrustNotifications(userDoc, currentUserDid, documentId);

useCrossTabSync

Reagiert auf localStorage-Änderungen in anderen Browser-Tabs.

Triggers:

  • Identity-Änderungen (DID-Wechsel → Page Reload)
  • UserDoc-ID-Änderungen
useCrossTabSync({
  autoReloadOnIdentityChange: true,
  onIdentityChange: (newIdentity) => { ... },
});

Hinweis: Name/Avatar-Änderungen lösen kein Reload aus – diese kommen über Automerge-Sync.


useProfileUrl

Ermöglicht Profil-Deeplinks via URL-Hash.

const { profileDid, openProfile, closeProfile } = useProfileUrl();

// Öffnet: #doc=...&profile=did:key:z6Mk...
openProfile('did:key:z6Mk...');