--- title: RecentlyOnScope --- ```js import {apiFetch} from "../components/config.js"; ``` ```js const domainsResp = await apiFetch("/domains/?status=all"); const domains = domainsResp.ok ? await domainsResp.json() : []; const domainOptions = domains.map(d => d.slug).sort(); const defaultDomain = domainOptions.includes("custodian") ? "custodian" : domainOptions[0]; ``` # RecentlyOnScope ```js import {injectTocTop} from "../components/toc-sidebar.js"; import {withDocHelp} from "../components/doc-overlay.js"; const _liveEl = html`
โ— ${domainsResp.ok ? `Live ยท ${domains.length} domains` : html`Offline โ€” run: make api`}
`; withDocHelp(_liveEl, "/docs/domains"); injectTocTop("live-indicator", _liveEl); ``` ```js const selectedDomain = view(Inputs.select(domainOptions, {label: "Domain", value: defaultDomain})); const selectedRange = view(Inputs.text({label: "Range", value: "1h", placeholder: "15m, 1h, 6h, 1d"})); const generated = view(Inputs.button("Generate", { reduce: async () => { if (!selectedDomain) return {ok: false, error: "No domain selected"}; const resp = await apiFetch(`/domains/${encodeURIComponent(selectedDomain)}/recently-on-scope/`, { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({range: selectedRange || "1h"}), timeout: 30_000, }); if (!resp.ok) return {ok: false, error: await resp.text()}; return {ok: true, report: await resp.json()}; }, })); ``` ```js if (generated?.ok) { display(html`
Generated ${generated.report.id}
`); } else if (generated?.error) { display(html`
${generated.error}
`); } ``` ```js generated; const reportsResp = selectedDomain ? await apiFetch(`/domains/${encodeURIComponent(selectedDomain)}/recently-on-scope/`) : {ok: false}; const reports = reportsResp.ok ? await reportsResp.json() : []; ``` ## Reports ```js function fmtDate(value) { if (!value) return "โ€”"; return new Date(value).toLocaleString(); } if (!selectedDomain) { display(html`

No domains registered.

`); } else if (reports.length === 0) { display(html`

No reports for ${selectedDomain}.

`); } else { display(html`
${reports.map(report => html`
${report.id}
${fmtDate(report.since)} -> ${fmtDate(report.until)}
${report.source_counts.progress_events} progress ${report.source_counts.decisions} decisions ${report.source_counts.tasks} tasks ${report.source_counts.attention_items} attention
`)}
`); } ``` ```js const reportIds = reports.map(report => report.id); const selectedReport = reportIds.length > 0 ? view(Inputs.select(reportIds, {label: "Preview", value: reportIds[0]})) : null; ``` ```js if (selectedDomain && selectedReport) { const markdownResp = await apiFetch(`/domains/${encodeURIComponent(selectedDomain)}/recently-on-scope/${encodeURIComponent(selectedReport)}`); const markdown = markdownResp.ok ? await markdownResp.text() : ""; display(html`
${markdown}
`); } ```