How to restrict blocks#

You can restrict blocks from being added to a content type using the restricted key in the configuration object. This key can be a boolean or a function that returns a boolean. If the block is restricted, it won't show in the chooser. However, it can still be added either programmatically or by directly using the REST API, so this restriction only applies to the user interface. The function has this signature:

{
  restricted: (args: {
    properties: Content;
    block: BlockConfigBase;
    navRoot: Content;
    contentType: string;
    user: Object
  }) => boolean;
}
properties

The current object data.

block

The block being evaluated in BlockChooser.

navRoot

The nearest navigation root object.

contentType

The current content type.

user

An object that represents the currently authenticated user.

In the following configuration example, you can restrict a block so that it cannot be added unless the content type is News Item or the content item is in a specific path in the content tree (/folder):

const testBlockConditional = {
  ...testBlock,
  id: 'testBlockConditional',
  title: 'Test Conditional Block',
  restricted: ({ properties, navRoot, contentType }) => {
    if (contentType === 'News Item') {
      return false;
    } else if (flattenToAppURL(properties?.parent?.['@id']) === '/folder') {
      return false;
    }
    return true;
  },
};