Overview

Story map key:
Backend - dark blue
Frontend - blue
Lower priority/need scope clarity - light blue

storymap

🎾 = top priority 😄
✨= nice to have

Remaining Backend:
#3548854: Add test coverage ensuring consistency on previews markup and live markup when using a content template

Remaining Frontend:
#3558719: Linking then unlinking a field renders a wrong Field Widget: corrupt `StaticPropSource` is sent by client, server should detect this
#3546760: Add e2e test for `ContentTemplates` feature
#3579477: Disallow creating a pattern from component tree with linked props (on ContentTemplates) — currently throws error

Completed Backend:
#3510896: Add a new internal HTTP API for candidate `DynamicPropSource`s to enable a `ContentTemplate` UI
#3529836: Enable starting with an empty XB UI (so without first having to create an entity with a component tree)
#3543188: `ContentTemplate`'s `status` should determine if it is active
#3541021: Refactor `ApiLayoutController` to support `ContentTemplate`s
#3541006: Create HTTP Endpoint for Content Template Preview Entities
#3541015: Create HTTP Endpoint for View modes/content templates
#3544865: `CanvasUiAccessCheck` should grant access if the user has access to content templates or code components
#3543834: Refactor (or attempt to) all or most `ApiLayoutController*Test` classes to also test `ContentTemplate` entities
#3513590: `ComponentSourceInterface::inputToClientModel()` needs to support passing a host entity
#3546260: `ApiLayoutController::getLabel()` should return preview entity label for content templates
#3503038: Enable candidate `DynamicPropSource` suggestions for code components: refactor `GeneratedFieldExplicitInputUxComponentSourceBase` and `FieldForComponentSuggester` to need only SDC's ComponentMetadata, not SDC plugin instances
#3541057: Render `DynamicPropSource`s in `ApiLayoutController` for `ContentTemplate`s using the provided preview entity (which is blocked by #3513590: `ComponentSourceInterface::inputToClientModel()` needs to support passing a host entity)
#3520487: Refuse editing an individual node's component tree (and bring back after 1.0 once exposed slots are allowed)
#3548165: Components in `ContentTemplate`s and `PageRegion`s are not always rendered in correct order
#3546996: Component instances populated by linked `DynamicPropSource`s, but inaccessible entity/field: fall back to `NULL` for these values, triggering fallback rendering
#3547598: Refine API response with DynamicPropSource suggestions to provide better UX
#3545859: Add a `host-entity-url` prop source for linking to the host entity
🚫 #3541054: Require `ContentTemplate`s to have at least one `dynamic` or `host-entity-url` prop source

Completed Frontend:
#3502887: Prepare for avoiding full page reloads: move entity type and ID from base path and into routing parameters
#3541027: Create new Templates menu
#3541031: Render template and support component operations in preview canvas
#3541033: Add ability to switch content used by template using top navigation
#3541034: Render component instance form for `ContentTemplate` and support updating static props
#3541037: Allow linking `ContentTemplate` SDC/code component instance props to fields (aka finally use `DynamicPropSource`s!) (⚠️be aware: FE and BE need to be able support dynamic values for generating the component props form for template after a field gets set to a prop)
#3541035: Make UI to publish a `ContentTemplate` match designs
#3545855: Followup for #3541027: UX and styling improvements for Templates menu and sidebar components
#3546319: Hide the page data form when a content template is open
#3546737: Empty/New view of Content Template editor to match design.
#3547085: Open template upon creation, only show <ContentPreviewSelector/> for templates, update editor frame preview when switching content
#3547262: Redirect to Content Template after creating first node of bundle
#3547294: Handle when suggestedEntityId node or template is deleted in `ContentTemplate`
#3548395: Linker does not appear for certain field widgets
#3548664: Some Linker choices have no effect
#3547513: UI polish for `ContentTemplates` feature
#3548320: Contextual panel flickers when linking prop to field
#3548186: Resolve 500 error caused when editorFrameContext was lost during navigation
#3548761: Can't link (pick a DynamicPropSource) to populate an optional explicit input if that DynamicPropSource evaluates to `NULL` (typically: field is empty)
#3548322: Improve how list of field suggestions is displayed in the UI for `ContentTemplates` and remove `ContentTemplates` from feature flag
#3555068: Linking a `HostEntityUrlPropSource` to populate a `type: string, format: uri|uri-reference` in a `ContentTemplate` has no effect
#3551665: SDC with "image" + string prop: static image lost upon linking the string prop to a `DynamicPropSource`

Completed Shape matching
#3548292: Find required field instance matches for image (`json-schema-definitions://canvas.module/image`) and video prop shapes
#3548295: `type: string` shape matching: find `Node`'s `uid` ("Author") field instance `type: string`
#3548686: Allow mapping "List (integer)" field type to `type: integer` and "List (float)" to `type: float`
#3549034: Shape matching fails on `file` field instances targeting multiple MIME media types (multiple "MIME wildcards")
#3551339: Suggest only relevant DynamicPropSources
#3541361: Find optional field instance matches for `type: object` props (images + videos), including for optional fields on bundleless entity types (e.g. `User`'s `user_picture`)
#3557612: `::matchEntityPropsForObject()` is too naïve: nonsensical `type: object` shape matches and useless labels
#3551455: HostEntityUrlPropSource should be able to support absolute or relative URLs, URL options

Lower priority/need scope clarity Confirmed with product these are out of scope for 1.0
#3541038: Render template data form Assigned to: lauriii
#3541039: Allow creating/deleting view mode from UI
#3541054: Require `ContentTemplate`s to have at least one `dynamic` or `host-entity-url` prop source
#3551343: Add type-appropriate icons for LinkedFieldBox.tsx in `ContentTemplates`

Non-hard-blocking bugs identified along the way — likely needs product manager decisions and triage
✅✨#3546119: Templates menu must be visible for users with the `administer content templates` permission
#3548298: Support linking field types marked SUPPORTED from #3512433 to props in a `ContentTemplate` → everything claimed to be supported has been proven to be working, now provides a handy overview of findings for @lauriii to prioritize in the future: #3548298-22: Support linking field types marked SUPPORTED from #3512433 to props in a `ContentTemplate`
#3522718: [later phase] [needs design] UX for associating mismatched cardinality field instance (too little or too much) with a higher cardinality SDC prop (e.g. `type: array, maxItems: 5`) or lower cardinality (e.g. `type: string`)
#3548749: Allow mapping "List (string)" field type to `type: string`, with a twist: don't map the stored value, but its key/name/label
#3548859: Warn "Display author and date information" has no effect when using Canvas Assigned to: lauriii
#3533675: Avoid suggesting UNIX timestamp integers for `type: integer` props
#3563380: Allow linking integer timestamps to `type: string, format: date`: allow `DynamicPropSource` to optionally use a single-input adapter plugin

Comments

hooroomoo created an issue. See original summary.

hooroomoo’s picture

hooroomoo credited tedbow.

hooroomoo’s picture

hooroomoo’s picture

hooroomoo’s picture

Issue summary: View changes
StatusFileSize
new119.51 KB
hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

I am not sure what the difference between the backend items in the map: HTTP endpoint: dynamic props sources and Handle dynamic props is...

I wonder if its the same thing but we just didn't realize when we created this map together. I see only 4 backend tickets got created instead of 5 so maybe it is a duplicate? But I'm not certain.

hooroomoo’s picture

tedbow’s picture

Title: [META] Content templates » [META] Content templates UI

This how issue is about enabling the UI. There has already been a lot of work to make the content template on the back-end. Although there are backend issues they are in support of the UI

tedbow’s picture

Issue summary: View changes
tedbow’s picture

tedbow’s picture

Issue summary: View changes
tedbow’s picture

Wanted to make a clarification here based on call between myself, @balintbrews, @hooroomoo and fmazeikis.

Current ContentTemplates require at least 1 dynamic prop. This makes sense but this requirement would force use to do issues in certain order and require larger issues. Since all of this work is on 1.x which does not have a release we deemed to ok if in the first few issues Content Templates don't actually require dynamic props and don't have a way to set them.

The requirement will be removed in #3541021: Refactor `ApiLayoutController` to support `ContentTemplate`s which is the first major back-end issue. It will be added back near the end in #3541054: Require `ContentTemplate`s to have at least one `dynamic` or `host-entity-url` prop source the actually requirement is 1 schema file change a little test coverage. Details in the related issues

balintbrews’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes

-

wim leers’s picture

Issue summary: View changes

#3510896: Add a new internal HTTP API for candidate `DynamicPropSource`s to enable a `ContentTemplate` UI is in 🥳 The test coverage for that revealed one bug in shape matching, which isn't a hard blocker, but needs to be fixed at some point. So created a new Non-hard-blocking bugs identified along the way — likely needs product manager decisions and triage section.

#3502887: Prepare for avoiding full page reloads: move entity type and ID from base path and into routing parameters is unblocked because #3529836: Enable starting with an empty XB UI (so without first having to create an entity with a component tree) landed! (Which means that one was missing, so added it 😇)

wim leers’s picture

Issue summary: View changes

I doubt that we'd be okay with only supporting populating SDC-sourced component instances with structured data — we of course also want to be able to do that for code components. Which means that we have to do #3503038. See #3503038-16: Enable candidate `DynamicPropSource` suggestions for code components: refactor `GeneratedFieldExplicitInputUxComponentSourceBase` and `FieldForComponentSuggester` to need only SDC's ComponentMetadata, not SDC plugin instances for details.

wim leers’s picture

Title: [META] Content templates UI » [META] Content templates UI for 1.0: only nodes, no exposed slots, no replacement for the view mode/display UI

We've got kind of a meta sprawl going on here 😅🙈 i.e.: what is the difference in intent/scope between:


So together with @f.mazeikis and @thoward216, clarifying the scope of this meta! 🎉

wim leers’s picture

Issue summary: View changes

Per @hooroomoo 😊

hooroomoo’s picture

Issue summary: View changes

Moving the Allow linking a component prop of a template to a dynamic field to be higher in the FE list for visibility and higher priority because this could be big one due to it also has to make sure that the component props form can be correctly generated after a dynamic field is set to a prop.

https://git.drupalcode.org/project/experience_builder/-/merge_requests/1...

hooroomoo’s picture

Issue summary: View changes
tedbow’s picture

Issue summary: View changes

Added #3543188: `ContentTemplate`'s `status` should determine if it is active to the list, this will allow adding new Content Templates through the UI and have them not take effect until they are published. It is can be worked on now

effulgentsia’s picture

Priority: Normal » Critical
Issue tags: +stable blocker

Per #3517885: Milestone 1.0.0: Production Sites this is a requirement for an XB 1.0.0 stable release, so tagging it as such.

tedbow’s picture

wim leers’s picture

hooroomoo’s picture

Issue summary: View changes

Confirmed with product these are out of scope for 1.0 so updating the issue summary

#3541038: Render template data form Assigned to: lauriii
#3541039: Allow creating/deleting view mode from UI

wim leers’s picture

wim leers’s picture

penyaskito’s picture

wim leers’s picture

wim leers’s picture

Project: Experience Builder » Drupal Canvas
wim leers’s picture

And #3541006: Create HTTP Endpoint for Content Template Preview Entities no longer needs a follow-up! 🥳 Yay more green.

effulgentsia’s picture

Issue tags: -stable blocker +RC blocker

Not every stable blocker needs to block an RC, but this one does.

wim leers’s picture

wim leers’s picture

Issue summary: View changes

Moved #3541054: Require `ContentTemplate`s to have at least one `dynamic` or `host-entity-url` prop source to the bottom, because it's blocked on pretty much everything else happening.

hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
wim leers’s picture

wim leers’s picture

hooroomoo’s picture

Issue summary: View changes
jessebaker’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

hooroomoo’s picture

Issue summary: View changes

✨ = nice to have

wim leers’s picture

hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
wim leers’s picture

hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

hooroomoo’s picture

hooroomoo’s picture

Issue summary: View changes
wim leers’s picture

hooroomoo’s picture

Issue summary: View changes
wim leers’s picture

wim leers’s picture

Issue summary: View changes

Newly discovered by @hooroomoo: #3549034: Shape matching fails on `file` field instances targeting multiple MIME media types (multiple "MIME wildcards").

@lauri confirmed in a call just now we shouldn't try to do all of #3548298: Support linking field types marked SUPPORTED from #3512433 to props in a `ContentTemplate`, and that it's okay to initially ship Content Templates without #3541361: Find optional field instance matches for `type: object` props (images + videos), including for optional fields on bundleless entity types (e.g. `User`'s `user_picture`). So moving both to Non-hard-blocking bugs identified along the way — likely needs product manager decisions and triage.

nagwani’s picture

Issue tags: -RC blocker
wim leers’s picture

wim leers’s picture

effulgentsia’s picture

Issue summary: View changes

For easier scanning, moved remaining "must have" issues for 1.0 to the top.

effulgentsia’s picture

effulgentsia’s picture

hooroomoo’s picture

Issue summary: View changes
hooroomoo’s picture

hooroomoo’s picture

Issue summary: View changes
effulgentsia’s picture

Issue summary: View changes

#3548322: Improve how list of field suggestions is displayed in the UI for `ContentTemplates` and remove `ContentTemplates` from feature flag landed, which was the last issue needed to take Content Templates out from requiring canvas_dev_mode to be enabled to just being an enabled feature out of the box, so in a way, the 1.0 scope of this meta issue is done!!!!

Still keeping this meta issue open for the 2 test coverage issues that are still remaining and to settle on #3541054: Require `ContentTemplate`s to have at least one `dynamic` or `host-entity-url` prop source which @Wim Leers and I are still debating on that issue whether to do it or not.

hooroomoo’s picture

Issue summary: View changes

I opened 2 new issues:
#3551343: Add type-appropriate icons for LinkedFieldBox.tsx in `ContentTemplates`
#3551339: Suggest only relevant DynamicPropSources

I am adding them to the Lower priority/need scope clarity Confirmed with product these are out of scope for 1.0 section for now... If anyone disagrees please feel free to move it. But adding them to the META so they can be tracked for now in case we open a new META for content templates.

wim leers’s picture

wim leers’s picture

Issue summary: View changes

@lauriii uncovered what seems to be a UI bug that slipped through the cracks for several weeks: #3551665: SDC with "image" + string prop: static image lost upon linking the string prop to a `DynamicPropSource`.

wim leers’s picture

wim leers’s picture

#3551339: Suggest only relevant DynamicPropSources and #3541361: Find optional field instance matches for `type: object` props (images + videos), including for optional fields on bundleless entity types (e.g. `User`'s `user_picture`) landed. This issue summary is sorely in need of an update from a product owner or product manager.

(I've been told via Acquia channels that both of those issues are crucial to fix before 1.0, but this meta doesn't reflect that. That's very confusing. 🫤)

Newly identified: #3557612: `::matchEntityPropsForObject()` is too naïve: nonsensical `type: object` shape matches and useless labels.

effulgentsia’s picture

Issue summary: View changes

#3551665: SDC with "image" + string prop: static image lost upon linking the string prop to a `DynamicPropSource` landed a while ago, so moved it to the Completed list.

#3558719: Linking then unlinking a field renders a wrong Field Widget: corrupt `StaticPropSource` is sent by client, server should detect this is newly discovered. Adding it to the Remaining front-end section though I don't know at this time if it's a front-end or back-end bug.

wim leers’s picture

wim leers’s picture