Skip to content

Commit 492fb02

Browse files
Merge pull request #215 from notion-dotnet/210-add-support-for-template-block
Add support for template block 🎇
2 parents d2dfef5 + 85a73d7 commit 492fb02

File tree

6 files changed

+103
-58
lines changed

6 files changed

+103
-58
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Collections.Generic;
2+
using Newtonsoft.Json;
3+
4+
namespace Notion.Client
5+
{
6+
public class TemplateUpdateBlock : UpdateBlock, IUpdateBlock
7+
{
8+
[JsonProperty("template")]
9+
public Data Template { get; set; }
10+
11+
public class Data
12+
{
13+
[JsonProperty("text")]
14+
public IEnumerable<RichTextBaseInput> Text { get; set; }
15+
}
16+
}
17+
}

Src/Notion.Client/Models/Blocks/BlockType.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ public enum BlockType
8282
[EnumMember(Value = "column_list")]
8383
ColumnList,
8484

85+
[EnumMember(Value = "template")]
86+
Template,
87+
8588
[EnumMember(Value = "unsupported")]
8689
Unsupported
8790
}

Src/Notion.Client/Models/Blocks/IBlock.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ namespace Notion.Client
2828
[JsonSubtypes.KnownSubType(typeof(PDFBlock), BlockType.PDF)]
2929
[JsonSubtypes.KnownSubType(typeof(QuoteBlock), BlockType.Quote)]
3030
[JsonSubtypes.KnownSubType(typeof(TableOfContentsBlock), BlockType.TableOfContents)]
31+
[JsonSubtypes.KnownSubType(typeof(TemplateBlock), BlockType.Template)]
3132
[JsonSubtypes.KnownSubType(typeof(ToDoBlock), BlockType.ToDo)]
3233
[JsonSubtypes.KnownSubType(typeof(ToggleBlock), BlockType.Toggle)]
3334
[JsonSubtypes.KnownSubType(typeof(VideoBlock), BlockType.Video)]

Src/Notion.Client/Models/Blocks/IColumnChildrenBlock.cs

Lines changed: 6 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,13 @@
1-
using JsonSubTypes;
2-
using Newtonsoft.Json;
3-
4-
namespace Notion.Client
1+
namespace Notion.Client
52
{
6-
//[JsonConverter(typeof(JsonSubtypes), "type")]
7-
//[JsonSubtypes.KnownSubType(typeof(AudioBlock), BlockType.Audio)]
8-
//[JsonSubtypes.KnownSubType(typeof(BookmarkBlock), BlockType.Bookmark)]
9-
//[JsonSubtypes.KnownSubType(typeof(BreadcrumbBlock), BlockType.Breadcrumb)]
10-
//[JsonSubtypes.KnownSubType(typeof(BulletedListItemBlock), BlockType.BulletedListItem)]
11-
//[JsonSubtypes.KnownSubType(typeof(CalloutBlock), BlockType.Callout)]
12-
//[JsonSubtypes.KnownSubType(typeof(ChildDatabaseBlock), BlockType.ChildDatabase)]
13-
//[JsonSubtypes.KnownSubType(typeof(ChildPageBlock), BlockType.ChildPage)]
14-
//[JsonSubtypes.KnownSubType(typeof(CodeBlock), BlockType.Code)]
15-
//[JsonSubtypes.KnownSubType(typeof(DividerBlock), BlockType.Divider)]
16-
//[JsonSubtypes.KnownSubType(typeof(EmbedBlock), BlockType.Embed)]
17-
//[JsonSubtypes.KnownSubType(typeof(EquationBlock), BlockType.Equation)]
18-
//[JsonSubtypes.KnownSubType(typeof(FileBlock), BlockType.File)]
19-
//[JsonSubtypes.KnownSubType(typeof(HeadingOneBlock), BlockType.Heading_1)]
20-
//[JsonSubtypes.KnownSubType(typeof(HeadingTwoBlock), BlockType.Heading_2)]
21-
//[JsonSubtypes.KnownSubType(typeof(HeadingThreeeBlock), BlockType.Heading_3)]
22-
//[JsonSubtypes.KnownSubType(typeof(ImageBlock), BlockType.Image)]
23-
//[JsonSubtypes.KnownSubType(typeof(NumberedListItemBlock), BlockType.NumberedListItem)]
24-
//[JsonSubtypes.KnownSubType(typeof(ParagraphBlock), BlockType.Paragraph)]
25-
//[JsonSubtypes.KnownSubType(typeof(PDFBlock), BlockType.PDF)]
26-
//[JsonSubtypes.KnownSubType(typeof(QuoteBlock), BlockType.Quote)]
27-
//[JsonSubtypes.KnownSubType(typeof(TableOfContentsBlock), BlockType.TableOfContents)]
28-
//[JsonSubtypes.KnownSubType(typeof(ToDoBlock), BlockType.ToDo)]
29-
//[JsonSubtypes.KnownSubType(typeof(ToggleBlock), BlockType.Toggle)]
30-
//[JsonSubtypes.KnownSubType(typeof(VideoBlock), BlockType.Video)]
31-
//[JsonSubtypes.KnownSubType(typeof(UnsupportedBlock), BlockType.Unsupported)]
32-
public interface IColumnChildrenBlock : IBlock
3+
public interface ITemplateChildrendBlock : IBlock
4+
{
5+
}
6+
7+
public interface IColumnChildrenBlock : IBlock, ITemplateChildrendBlock
338
{
349
}
3510

36-
//[JsonConverter(typeof(JsonSubtypes), "type")]
37-
//[JsonSubtypes.KnownSubType(typeof(AudioBlock), BlockType.Audio)]
38-
//[JsonSubtypes.KnownSubType(typeof(BookmarkBlock), BlockType.Bookmark)]
39-
//[JsonSubtypes.KnownSubType(typeof(BreadcrumbBlock), BlockType.Breadcrumb)]
40-
//[JsonSubtypes.KnownSubType(typeof(BulletedListItemBlock), BlockType.BulletedListItem)]
41-
//[JsonSubtypes.KnownSubType(typeof(CalloutBlock), BlockType.Callout)]
42-
//[JsonSubtypes.KnownSubType(typeof(ChildPageBlock), BlockType.ChildPage)]
43-
//[JsonSubtypes.KnownSubType(typeof(ChildDatabaseBlock), BlockType.ChildDatabase)]
44-
//[JsonSubtypes.KnownSubType(typeof(CodeBlock), BlockType.Code)]
45-
//[JsonSubtypes.KnownSubType(typeof(ColumnListBlock), BlockType.ColumnList)]
46-
//[JsonSubtypes.KnownSubType(typeof(DividerBlock), BlockType.Divider)]
47-
//[JsonSubtypes.KnownSubType(typeof(EmbedBlock), BlockType.Embed)]
48-
//[JsonSubtypes.KnownSubType(typeof(EquationBlock), BlockType.Equation)]
49-
//[JsonSubtypes.KnownSubType(typeof(FileBlock), BlockType.File)]
50-
//[JsonSubtypes.KnownSubType(typeof(HeadingOneBlock), BlockType.Heading_1)]
51-
//[JsonSubtypes.KnownSubType(typeof(HeadingTwoBlock), BlockType.Heading_2)]
52-
//[JsonSubtypes.KnownSubType(typeof(HeadingThreeeBlock), BlockType.Heading_3)]
53-
//[JsonSubtypes.KnownSubType(typeof(ImageBlock), BlockType.Image)]
54-
//[JsonSubtypes.KnownSubType(typeof(NumberedListItemBlock), BlockType.NumberedListItem)]
55-
//[JsonSubtypes.KnownSubType(typeof(ParagraphBlock), BlockType.Paragraph)]
56-
//[JsonSubtypes.KnownSubType(typeof(PDFBlock), BlockType.PDF)]
57-
//[JsonSubtypes.KnownSubType(typeof(QuoteBlock), BlockType.Quote)]
58-
//[JsonSubtypes.KnownSubType(typeof(TableOfContentsBlock), BlockType.TableOfContents)]
59-
//[JsonSubtypes.KnownSubType(typeof(ToDoBlock), BlockType.ToDo)]
60-
//[JsonSubtypes.KnownSubType(typeof(ToggleBlock), BlockType.Toggle)]
61-
//[JsonSubtypes.KnownSubType(typeof(VideoBlock), BlockType.Video)]
62-
//[JsonSubtypes.KnownSubType(typeof(UnsupportedBlock), BlockType.Unsupported)]
6311
public interface INonColumnBlock : IBlock
6412
{
6513
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Collections.Generic;
2+
using Newtonsoft.Json;
3+
4+
namespace Notion.Client
5+
{
6+
public class TemplateBlock : Block, IColumnChildrenBlock, INonColumnBlock
7+
{
8+
public override BlockType Type => BlockType.Template;
9+
10+
[JsonProperty("template")]
11+
public Data Template { get; set; }
12+
13+
public class Data
14+
{
15+
[JsonProperty("text")]
16+
public IEnumerable<RichTextBase> Text { get; set; }
17+
18+
[JsonProperty("children")]
19+
public IEnumerable<ITemplateChildrendBlock> Children { get; set; }
20+
}
21+
}
22+
}

Test/Notion.IntegrationTests/IBlocksClientTests.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,60 @@ private static IEnumerable<object[]> BlockData()
452452

453453
Assert.Equal("https://www.iaspaper.net/wp-content/uploads/2017/09/TNEA-Online-Application.jpg", embedBlock.Embed.Url);
454454
})
455+
},
456+
new object[]
457+
{
458+
new TemplateBlock()
459+
{
460+
Template = new TemplateBlock.Data
461+
{
462+
Text = new List<RichTextBase>
463+
{
464+
new RichTextText
465+
{
466+
Text = new Text
467+
{
468+
Content = "Test Template"
469+
}
470+
}
471+
},
472+
Children = new List<ITemplateChildrendBlock>
473+
{
474+
new EmbedBlock()
475+
{
476+
Embed = new EmbedBlock.Info
477+
{
478+
Url = "https://zephoria.com/wp-content/uploads/2014/08/online-community.jpg"
479+
}
480+
}
481+
}
482+
}
483+
},
484+
new TemplateUpdateBlock()
485+
{
486+
Template = new TemplateUpdateBlock.Data
487+
{
488+
Text = new List<RichTextBaseInput>
489+
{
490+
new RichTextTextInput
491+
{
492+
Text = new Text
493+
{
494+
Content = "Test Template 2"
495+
}
496+
}
497+
}
498+
}
499+
},
500+
new Action<IBlock> (block =>
501+
{
502+
Assert.NotNull(block);
503+
var templateBlock = Assert.IsType<TemplateBlock>(block);
504+
505+
Assert.Single(templateBlock.Template.Text);
506+
Assert.Null(templateBlock.Template.Children);
507+
Assert.Equal("Test Template 2", templateBlock.Template.Text.OfType<RichTextText>().First().Text.Content);
508+
})
455509
}
456510
};
457511
}

0 commit comments

Comments
 (0)