---
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}`);
}
```