import { useState } from 'react'; import { useMeetings, useMeeting, useSchedule, useConsent, useSummarize, useActionItems } from '@insignia/iios-meeting-web'; export const SERVICE = 'http://localhost:3200'; const box: React.CSSProperties = { border: '1px solid #e5e7eb', borderRadius: 8, padding: 16, marginBottom: 16 }; const CONSENT_COLORS: Record = { GRANTED: '#16a34a', UNKNOWN: '#d97706', DENIED: '#dc2626', REVOKED: '#dc2626' }; export function App({ token: _token }: { token: string }) { const { meetings, refresh } = useMeetings({ pollMs: 3000 }); const schedule = useSchedule(); const { setConsent, generateTranscript } = useConsent(); const summarize = useSummarize(); const [selected, setSelected] = useState(null); const [title, setTitle] = useState('Design review'); const [attendee, setAttendee] = useState('bob'); const [busy, setBusy] = useState(''); const { meeting, refresh: refreshMeeting } = useMeeting(selected); const { actionItems, refresh: refreshItems } = useActionItems(selected); const doSchedule = async () => { setBusy('scheduling…'); const m = await schedule({ meetingType: 'INTERNAL', title, startAt: '2026-07-02T10:00:00.000Z', attendees: [{ userId: attendee, displayName: attendee }], }); setSelected(m.id); await refresh(); setBusy(''); }; const refreshAll = async () => { await refreshMeeting(); await refreshItems(); }; return (

IIOS P8 — Meeting Studio

A meeting owns calendar semantics. No transcript/summary/action-item exists until every attendee grants recording consent (KG-14).

1 · Schedule a meeting

setTitle(e.target.value)} placeholder="title" /> setAttendee(e.target.value)} placeholder="attendee userId" style={{ width: 140 }} /> {busy && {busy}}
    {meetings.map((m) => (
  • ))}
{meeting && (

2 · {meeting.title} — consent & transcript

{(meeting.participants ?? []).map((p) => ( ))}
{p.role} · {p.actorRefId?.slice(0, 8)} {p.recordingConsent} visibility {p.visibility}
{busy &&

{busy}

}
)} {meeting && (

3 · Action items (inbox follow-ups)

{actionItems.length === 0 &&

None yet — summarize a consented meeting.

}
    {actionItems.map((a) => (
  • {a.actionItem?.title ?? a.actionItemId} — {a.status}
  • ))}
)}
); }