Skip to content

Commit

Permalink
api/admin add cta button and list block
Browse files Browse the repository at this point in the history
  • Loading branch information
SebiVPS committed May 24, 2024
1 parent f9b2b9d commit bf4e302
Show file tree
Hide file tree
Showing 7 changed files with 200 additions and 2 deletions.
34 changes: 34 additions & 0 deletions admin/src/common/blocks/CallToActionButtonBlock.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { BlockCategory, createCompositeBlock, createCompositeBlockSelectField } from "@comet/blocks-admin";
import { CallToActionButtonBlockData } from "@src/blocks.generated";
import * as React from "react";
import { FormattedMessage } from "react-intl";

import { TextLinkBlock } from "./TextLinkBlock";

export const CallToActionButtonBlock = createCompositeBlock(
{
name: "CallToActionButton",
displayName: <FormattedMessage id="callToActionButtonBlock.displayName" defaultMessage="Button" />,
blocks: {
textLink: {
block: TextLinkBlock,
title: <FormattedMessage id="callToActionButtonBlock.link.displayName" defaultMessage="Link" />,
},
variant: {
block: createCompositeBlockSelectField<CallToActionButtonBlockData["variant"]>({
defaultValue: "Contained",
options: [
{ value: "Contained", label: <FormattedMessage id="callToActionButtonBlock.variant.contained" defaultMessage="Contained" /> },
{ value: "Outlined", label: <FormattedMessage id="callToActionButtonBlock.variant.outlined" defaultMessage="Outlined" /> },
{ value: "Text", label: <FormattedMessage id="callToActionButtonBlock.variant.text" defaultMessage="Text" /> },
],
fieldProps: { label: <FormattedMessage id="callToActionButtonBlock.variant" defaultMessage="Variant" />, fullWidth: true },
}),
},
},
},
(block) => {
block.category = BlockCategory.Navigation;
return block;
},
);
11 changes: 11 additions & 0 deletions admin/src/common/blocks/CallToActionButtonListBlock.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { createListBlock } from "@comet/blocks-admin";
import { CallToActionButtonBlock } from "@src/common/blocks/CallToActionButtonBlock";
import { FormattedMessage } from "react-intl";

export const CallToActionButtonListBlock = createListBlock({
name: "ButtonList",
displayName: <FormattedMessage id="callToActionButtonListBlock.displayName" defaultMessage="Button List" />,
block: CallToActionButtonBlock,
itemName: <FormattedMessage id="callToActionButtonListBlock.itemName" defaultMessage="Button" />,
itemsName: <FormattedMessage id="callToActionButtonListBlock.itemsName" defaultMessage="Buttons" />,
});
2 changes: 2 additions & 0 deletions admin/src/documents/pages/blocks/PageContentBlock.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { createBlocksBlock, SpaceBlock, YouTubeVideoBlock } from "@comet/blocks-admin";
import { DamImageBlock, DamVideoBlock } from "@comet/cms-admin";
import { CallToActionButtonListBlock } from "@src/common/blocks/CallToActionButtonListBlock";
import { HeadlineBlock } from "@src/common/blocks/HeadlineBlock";
import { LinkListBlock } from "@src/common/blocks/LinkListBlock";
import { RichTextBlock } from "@src/common/blocks/RichTextBlock";
Expand All @@ -16,5 +17,6 @@ export const PageContentBlock = createBlocksBlock({
damVideo: DamVideoBlock,
youTubeVideo: YouTubeVideoBlock,
links: LinkListBlock,
callToActionButtonList: CallToActionButtonListBlock,
},
});
104 changes: 102 additions & 2 deletions api/block-meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,102 @@
}
]
},
{
"name": "CallToActionButton",
"fields": [
{
"name": "textLink",
"kind": "Block",
"block": "TextLink",
"nullable": false
},
{
"name": "variant",
"kind": "Enum",
"enum": [
"Contained",
"Outlined",
"Text"
],
"nullable": false
}
],
"inputFields": [
{
"name": "textLink",
"kind": "Block",
"block": "TextLink",
"nullable": false
},
{
"name": "variant",
"kind": "Enum",
"enum": [
"Contained",
"Outlined",
"Text"
],
"nullable": false
}
]
},
{
"name": "CallToActionButtonList",
"fields": [
{
"name": "blocks",
"kind": "NestedObjectList",
"object": {
"fields": [
{
"name": "key",
"kind": "String",
"nullable": false
},
{
"name": "visible",
"kind": "Boolean",
"nullable": false
},
{
"name": "props",
"kind": "Block",
"block": "CallToActionButton",
"nullable": false
}
]
},
"nullable": false
}
],
"inputFields": [
{
"name": "blocks",
"kind": "NestedObjectList",
"object": {
"fields": [
{
"name": "key",
"kind": "String",
"nullable": false
},
{
"name": "visible",
"kind": "Boolean",
"nullable": false
},
{
"name": "props",
"kind": "Block",
"block": "CallToActionButton",
"nullable": false
}
]
},
"nullable": false
}
]
},
{
"name": "DamImage",
"fields": [
Expand Down Expand Up @@ -490,7 +586,9 @@
"textImage": "TextImage",
"damVideo": "DamVideo",
"youTubeVideo": "YouTubeVideo",
"links": "LinkList"
"links": "LinkList",
"callToActionButton": "CallToActionButton",
"callToActionButtonList": "CallToActionButtonList"
},
"nullable": false
}
Expand Down Expand Up @@ -531,7 +629,9 @@
"textImage": "TextImage",
"damVideo": "DamVideo",
"youTubeVideo": "YouTubeVideo",
"links": "LinkList"
"links": "LinkList",
"callToActionButton": "CallToActionButton",
"callToActionButtonList": "CallToActionButtonList"
},
"nullable": false
}
Expand Down
4 changes: 4 additions & 0 deletions api/src/common/blocks/call-to-action-button-list.block.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { createListBlock } from "@comet/blocks-api";
import { CallToActionButtonBlock } from "@src/common/blocks/call-to-action-button.block";

export const CallToActionButtonListBlock = createListBlock({ block: CallToActionButtonBlock }, "CallToActionButtonList");
43 changes: 43 additions & 0 deletions api/src/common/blocks/call-to-action-button.block.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import {
BlockData,
BlockDataInterface,
BlockField,
BlockInput,
ChildBlock,
ChildBlockInput,
createBlock,
ExtractBlockInput,
inputToData,
} from "@comet/blocks-api";
import { IsEnum } from "class-validator";

import { TextLinkBlock } from "./text-link.block";

enum Variant {
Contained = "Contained",
Outlined = "Outlined",
Text = "Text",
}

class CallToActionButtonBlockData extends BlockData {
@ChildBlock(TextLinkBlock)
textLink: BlockDataInterface;

@BlockField({ type: "enum", enum: Variant })
variant: Variant;
}

class CallToActionButtonBlockInput extends BlockInput {
@ChildBlockInput(TextLinkBlock)
textLink: ExtractBlockInput<typeof TextLinkBlock>;

@IsEnum(Variant)
@BlockField({ type: "enum", enum: Variant })
variant: Variant;

transformToBlockData(): CallToActionButtonBlockData {
return inputToData(CallToActionButtonBlockData, this);
}
}

export const CallToActionButtonBlock = createBlock(CallToActionButtonBlockData, CallToActionButtonBlockInput, "CallToActionButton");
4 changes: 4 additions & 0 deletions api/src/documents/pages/blocks/page-content.block.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { createBlocksBlock, SpaceBlock, YouTubeVideoBlock } from "@comet/blocks-api";
import { DamImageBlock, DamVideoBlock } from "@comet/cms-api";
import { CallToActionButtonBlock } from "@src/common/blocks/call-to-action-button.block";
import { CallToActionButtonListBlock } from "@src/common/blocks/call-to-action-button-list.block";
import { HeadlineBlock } from "@src/common/blocks/headline.block";
import { LinkListBlock } from "@src/common/blocks/link-list.block";
import { RichTextBlock } from "@src/common/blocks/rich-text.block";
Expand All @@ -16,6 +18,8 @@ export const PageContentBlock = createBlocksBlock(
damVideo: DamVideoBlock,
youTubeVideo: YouTubeVideoBlock,
links: LinkListBlock,
callToActionButton: CallToActionButtonBlock,
callToActionButtonList: CallToActionButtonListBlock,
},
},
"PageContent",
Expand Down

0 comments on commit bf4e302

Please sign in to comment.