Phase C — Organisations as pages on Obsidian 1.13's settings API #5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part 3 of 3 of the sessions/device-roster plan (14 Sep 2026). Follows #2 and #4; supersedes the spike half of #1.
Spike first (time-boxed, its own checkpoint, scratch branch)
A tab returning
getSettingDefinitions()that answers:renderrow host a whole existing section (the sign-in card, arowGroup) with our CSS intact?update()keep scroll position, focus and an open<details>?page: () => SettingPageopen, gethide()on back/close, and can itsdisplay()reuseloadAccountwith the generation guards?.setting-item,h4,rowGroupmarkup) still find what they look for?Fallback if 1 or 3 fails: in-tab route with breadcrumbs on the imperative tab (Relay's ManageRelay pattern); the content below is unchanged.
Shape
pageper membership:descrole · region,displayValue"n of m devices",status:'warning'when not added on this device or suspended/over quota; Create / Join rows), Invitations, Shared folders in this vault, Attachments, Advanced.OrganisationPage extends SettingPage: Plan & storage, Members (roster, Invite…, Share link, sent invitations), Devices (the roster with Remove / Add this device / rename), Shared folders of this organisation, Leave / Close. Subscribes to the fan-out indisplay(), releases inhide(), reuses the per-section loaders and slices.update()onmembershipsandrefreshDomState()otherwise.Checkpoint
hide();update()not called onmembershipsSpike verdict (branch
spike/settings-pages, commit on it; measured in a real Obsidian 1.13.7 viatest/multi/spike-settings.test.ts):rowGroupinside a render row keeps the native.setting-group > .setting-itemsmarkup (2 rows). The sign-in card renders in a render row with the right fill (rgb(217, 182, 90)), 3 provider rows and its 420 px column — but the host.setting-itemisdisplay:flexwith 20 px padding, so the card's auto margins resolve to 24 px / 16 px, not centred. Fix: neutralise the host row we own (display:block; padding:0) before drawing into it.update()is a full rebuild. Same scroll container, scroll kept (3061 → 3012 with content reflow), focus on a control kept,<details>returns closed (new node), render-row cleanups run each time,getSettingDefinitions()is called each time. So:update()only when the definitions change (a membership added/removed); every other refresh stays in place via the existing per-section loaders and generation guards.page: () => SettingPageworks end to end. Native titlebar (.setting-page-titlebarwith.setting-page-back-button),display()on open,hide()on back and on close,displayValueshown on the entry, and the page'sdisplay()reuseddisplayAccount(Members / Attachments / Devices rendered inside it)..setting-itemrows androwGroupmarkup still match; sectionh4s move into pages; render-row hosts carry empty.setting-item-nameelements the stray-text audit must skip; the brand header becomes a render row.Decision: build on the declarative API with imperative render rows and one
OrganisationPageper membership. No fallback needed.Checkpoint C, 14 Sep 2026 — commit
9806346on main.Still to confirm on the user's machine: the two vaults show the new pane after a reload, and an organisation's page opens and comes back.