Skip to main content

Channels

A channel says whose value it is.

ChannelEdited inSeen byStored in
everyonePresoManagerEvery preso made from the deckCMSVals
personalPrepOne presoThat preso's Context

A field declares a key for each channel it uses. A page only edits the channel it is for, so a field with no key for that channel cannot be edited there, and is not offered to an assistant there either.

FieldDeclaresWhy
DisclaimereveryoneLegal copy. Only PresoManager may change it.
PreparedForpersonalOne customer's name. It means nothing across the deck.
HeadlinebothMarketing writes the default. A salesperson tailors it for one customer.

everyone​

One value per key, for every preso made from the deck.

defineEditableSource(Disclaimer, {
everyone: { key: "{targetKey}-{id}-{instance}" },
});
PresoManager sets "Fees apply. See the PDS."   ->   every preso shows it
Prep -> cannot edit it

personal​

A value that belongs to one preso.

defineEditableSource(PreparedFor, {
personal: { key: "{id}" },
});
Prep sets "Acme Pty Ltd" in one preso   ->   only that preso shows it
PresoManager -> cannot set it

A bare {id} key is set once and shown on every slide rendering that id, in that preso. See key.

Where in Context​

The interface keeps each personal value under its key, in a bucket of the preso's Context:

text and declared actions   _editableContent.<key>   { elementID, mime, value }
images dynamicImages.<key> { image, mime }

Read and write these through the field's queries and mutations, never by path. State a deck keeps at a Context path of its own choosing, such as Bridge.Context.setPath("a_form.values", ...), is not a field: no query reads it and no mutation writes it. When such state becomes declared actions, it moves into the bucket.

A preso stays on the deck version it was created with, so moving personal state between deck versions needs no migration: a new version only meets presos created from it. everyone keys are different - every preso reads CMSVals, so an everyone key cannot change without losing what is stored under it.

Using both​

defineEditableSource(Headline, {
everyone: { key: "{targetKey}-{id}-{instance}" },
personal: { key: "{targetKey}-{id}-{instance}" },
});

A personal value hides the everyone value, in that preso only.

PresoManager sets        "Plans that grow with you"
Prep sets, Acme's preso "Plans for Acme"

Acme's preso shows "Plans for Acme"
every other preso shows "Plans that grow with you"

PresoManager changes "Plans for every team"
Acme's preso shows "Plans for Acme"
every other preso shows "Plans for every team"

A field shows the first of these that is set:

  1. its personal value
  2. its everyone value
  3. the copy written in the source

Where each can be edited​

Where the slide iseveryonepersonal
PresoManager, and a template placed thereeditablenot offered
Prepread-onlyeditable
Present, Share, Remoteread-onlywritten by the deck's own code only
Review, thumbnails, PDFread-onlyread-only
Presetread-onlynot offered
Template previewsshows the copy in the sourcenot offered
User template, custom slideeditable, kept with that slideeditable