38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { connectEventSource, createEventSyncController } from "../../../apps/web/src/event-sync.js";
|
|
|
|
interface TimelineEntry {
|
|
action: string;
|
|
detail?: string;
|
|
}
|
|
|
|
declare global {
|
|
interface Window {
|
|
wp0EventFixture: {
|
|
timeline: TimelineEntry[];
|
|
};
|
|
}
|
|
}
|
|
|
|
const timeline: TimelineEntry[] = [];
|
|
const request = async (url: string, action: string, detail?: string) => {
|
|
timeline.push({ action, ...(detail ? { detail } : {}) });
|
|
const response = await fetch(url);
|
|
if (!response.ok) throw new Error(`${action} failed`);
|
|
await response.json();
|
|
};
|
|
|
|
const controller = createEventSyncController({
|
|
bootstrap: () => request("/api/v1/bootstrap", "bootstrap"),
|
|
refetchEntity: (entityRef) =>
|
|
request(`/__test/entity?ref=${encodeURIComponent(entityRef)}`, "refetch_entity", entityRef),
|
|
refetchModels: (input) =>
|
|
request("/__test/models", "refetch_models", input.reason),
|
|
});
|
|
const source = connectEventSource("/api/v1/events", controller);
|
|
source.addEventListener("open", () => {
|
|
timeline.push({ action: "connected" });
|
|
document.getElementById("status")!.textContent = "connected";
|
|
});
|
|
|
|
window.wp0EventFixture = { timeline };
|