// Woodbury Operator — Tenants list. Registers window.TenantsScreen. (function () { const NS = window.WoodburyPropertiesDesignSystem_7290ca; const { Card, Button, Badge, Avatar, Input, Modal, Select } = NS; const TENANTS = [ { name: "Kofi Mensah", email: "kofi.mensah@yahoo.com", phone: "+233 20 887 3341", avatar: "../../assets/images/av-kofi.jpg", property: "Lashibi Townhouses", unit: "House 1", lease: "Active", leaseTone: "success", leaseSub: "Expires May 2026", maint: "1 Urgent", maintTone: "danger" }, { name: "Ama Osei", email: "ama.osei@outlook.com", phone: "+233 55 120 9987", avatar: "../../assets/images/av-ama.jpg", property: "Cantonments City", unit: "Apt 5A", lease: "Active", leaseTone: "success", leaseSub: "Expires Sep 2026", maint: "No Issues", maintTone: "success" }, { name: "Efua Asante", email: "efua.asante@gmail.com", phone: "+233 24 411 9283", avatar: "../../assets/images/av-efua.jpg", property: "Lashibi Townhouses", unit: "House 5", lease: "Notice Given", leaseTone: "warning", leaseSub: "Move out: Apr 30", maint: "1 Urgent", maintTone: "danger" }, { name: "Nana Adjei", email: "nana.adjei@ghana.com", phone: "+233 50 445 2210", avatar: "../../assets/images/av-nana.jpg", property: "Onehive Tse Addo", unit: "Unit 101", lease: "Active", leaseTone: "success", leaseSub: "Expires Jan 2027", maint: "No Issues", maintTone: "success" }, { name: "Yaw Boateng", email: "yboateng@gmail.com", phone: "+233 24 330 7765", avatar: "../../assets/images/av-yaw.jpg", property: "Mirage", unit: "Apartment B3", lease: "Applicant", leaseTone: "neutral", leaseSub: "Pending screening", maint: "—", maintTone: "neutral" }, ]; const FILTERS = ["All Statuses", "Active", "Notice Given", "Applicant"]; function leaseDot(tone) { const c = tone === "success" ? "var(--success)" : tone === "warning" ? "var(--terracotta-500)" : "var(--gray-400)"; return ; } function TenantsScreen() { const [q, setQ] = React.useState(""); const [status, setStatus] = React.useState("All Statuses"); const [modal, setModal] = React.useState(null); // 'add' | tenant const [addProp, setAddProp] = React.useState(window.WB_SITES[0]); const close = () => setModal(null); React.useEffect(() => { const f = window.WBFocus; if (f && f.kind === "tenant") { const t = TENANTS.find((x) => x.name === f.key); if (t) setModal(t); window.WBFocus = null; } else if (f && f.kind === "add-tenant") { setModal("add"); window.WBFocus = null; } }, []); const added = window.WBuseNew("tenants"); const ALL = [...added.slice().reverse(), ...TENANTS]; const rows = ALL.filter((t) => { const okStatus = status === "All Statuses" || t.lease === status; const okQ = !q || (t.name + t.email + t.property + t.unit).toLowerCase().includes(q.toLowerCase()); return okStatus && okQ; }); const loading = window.WBuseLoad(); const canAdd = window.WBCan("tenant.add"); return (
{canAdd && }} />
setQ(e.target.value)} containerStyle={{ flex: 1 }} />

Files here are saved to Documents → Tenancy Agreements and linked to this tenant's profile.

{/* Manage tenant modal */} }> {modal && typeof modal === "object" && (
{leaseDot(modal.leaseTone)}{modal.lease}
{[["Email", modal.email], ["Phone", modal.phone], ["Lease", modal.leaseSub], ["Maintenance", modal.maint]].map(([k, v]) => (
{k}{v}
))}
)}
); } window.TenantsScreen = TenantsScreen; })();