a partners block edits the site's partners

The block places the list; it does not hold one. So this edits the singleton and
every page showing them changes together — which the panel says out loud, because
the editor sits inside a block on a page and everything else in that column
belongs to the page.

Same gesture as the gallery items: a grip on the left, live reorder, one write at
the end carrying every id. Two ordered lists, one thing to learn.

A new partner is named from its filename and renamed in the field beside it — the
API refuses one with no name, and asking in a second dialog before the logo has
been seen is a form in front of a form.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-01 20:55:07 +01:00
co-authored by Claude Opus 5
parent 459793a33c
commit 4435537ae2
2 changed files with 211 additions and 0 deletions
+7
View File
@@ -37,6 +37,7 @@ import { SpacingEditor, type Padding } from './SpacingEditor';
import { BandSettings } from './BandSettings';
import { BlockSettings } from './BlockSettings';
import { GalleryItems } from './GalleryItems';
import { PartnersEditor } from './PartnersEditor';
import { useEditorSlot } from '../useEditorSlot';
import { AddComponentDialog, type ComponentKind } from './AddComponentDialog';
import { MediaPicker } from '../MediaPicker';
@@ -657,6 +658,12 @@ export const PageBuilderPanel = () => {
A button rather than the modal opening itself, so picking the block and changing what is in
it are two acts — see the note in the selection effect.
*/}
{/*
Partners are the SITE's, not this page's — the block places the list rather than holding
one. So this edits the singleton, and every page showing them changes together.
*/}
{block.kind === 'partners' && <PartnersEditor onChanged={() => setRendered((n) => n + 1)} />}
{block.kind === 'gallery' && (
<div className="flex flex-col gap-3">
<Button