Vanilla Shared State Example
Vanilla JS Example
Section titled “Vanilla JS Example”This example demonstrates how to synchronize standard HTML form inputs without a framework.
<script>// 1. Create the agent instance ONCE.const agentKey = "YOUR_AGENT_KEY";const agent = window.foldspace?.agent(agentKey);const stateDescription = "This state contains fields required to collect and validate a recipient's delivery information, including full name, street, city, and postal code.";
// 2. Choose a stable key for this piece of state.const stateKey = "shipping_address";
// 3. Create helper functions to read from and write to the DOM.const readUI = () => ({ fullName: document.getElementById("fullName")?.value || "", street: document.getElementById("street")?.value || "", city: document.getElementById("city")?.value || "", postal: document.getElementById("postal")?.value || "",});
const writeUI = (next) => { if (!next || typeof next !== "object") return; Object.entries(next).forEach(([k, v]) => { const el = document.getElementById(k); if (el) el.value = v ?? ""; });};
// 4. Agent -> UI: This handler listens for agent-driven updates and writes them to the DOM.const handleStateChange = (key, nextState) => { if (key === stateKey) { writeUI(nextState); }};
// 5. On page load, perform the initial sync.agent?.shareState(stateKey, readUI(), handleStateChange, stateDescription);
// 6. UI -> Agent: Add event listeners to send updates to the agent on user input.["fullName", "street", "city", "postal"].forEach((id) => { const el = document.getElementById(id); if (!el) return; el.addEventListener("input", () => agent?.shareState(stateKey, readUI()));});
// 7. Use `beforeunload` to clean up the state.window.addEventListener("beforeunload", () => agent?.clearState(stateKey));</script>