Generalizing the use-case of a content type that "contains" other content types

Hi everyone. As has been said many times, a headless CMS gives editors the freedom to create content without depending on developers. For me, the most exciting possibility is to mix and match content items, for example:

  • one editor could be adding Chart items, Biography items and Milestone items
  • another editor could be creating a new Status Update item that combines texts, images, Charts, Biographies and Milestones (in a dynamic zone)

In other words, it also allows editors to work more independently from each other! However, in my opinion (unless I am missing something, still being new to strapi), the general use-case of mixing and matching content is not yet optimally supported. I will compare my current approach with strapi to a (in my opinion) better one.

Current approach

Currently I would create a Slot content type that can hold a Chart, Biography and/or Milestone. It has a “relation” field for each of these types. Then I would create a TextWithSlot type that contains a text, a Slot and some flags that indicate where the slot is placed relative to the text (e.g. to the left or to the right). When TextWithSlot is rendered, it shows the text and the selected “thing” (Chart/Biography/Milestone).

Possible improvements

I see two things that can be improved. First it would be nice to have a Slot that let’s you pick one-and-only-one of Chart, Biography and Milestone, and that would take up less space in the Dynamic Zone. Second, it would be great to select a Biography not from the entire collection but from a View. For example, I could create a Biography View that has only the Biographies for my own team, or a Charts View that has only the charts for the current project I am working on. This is needed for the general use-case to work, because picking an item from a collection that has hundreds of items or more is not much fun.

What do you think?

I am curious to hear your opinion about this use-case (do you agree it’s an important one?) and about possible ways to support it.