diff --git a/Src/Notion.Client/Api/Blocks/RequestParams/BlocksUpdateParameters/UpdateBlocks/TemplateUpdateBlock.cs b/Src/Notion.Client/Api/Blocks/RequestParams/BlocksUpdateParameters/UpdateBlocks/TemplateUpdateBlock.cs new file mode 100644 index 00000000..032cb335 --- /dev/null +++ b/Src/Notion.Client/Api/Blocks/RequestParams/BlocksUpdateParameters/UpdateBlocks/TemplateUpdateBlock.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace Notion.Client +{ + public class TemplateUpdateBlock : UpdateBlock, IUpdateBlock + { + [JsonProperty("template")] + public Data Template { get; set; } + + public class Data + { + [JsonProperty("text")] + public IEnumerable Text { get; set; } + } + } +} diff --git a/Src/Notion.Client/Models/Blocks/BlockType.cs b/Src/Notion.Client/Models/Blocks/BlockType.cs index b46e6c9a..03b0d35d 100644 --- a/Src/Notion.Client/Models/Blocks/BlockType.cs +++ b/Src/Notion.Client/Models/Blocks/BlockType.cs @@ -82,6 +82,9 @@ public enum BlockType [EnumMember(Value = "column_list")] ColumnList, + [EnumMember(Value = "template")] + Template, + [EnumMember(Value = "unsupported")] Unsupported } diff --git a/Src/Notion.Client/Models/Blocks/IBlock.cs b/Src/Notion.Client/Models/Blocks/IBlock.cs index e36f371a..afabc915 100644 --- a/Src/Notion.Client/Models/Blocks/IBlock.cs +++ b/Src/Notion.Client/Models/Blocks/IBlock.cs @@ -28,6 +28,7 @@ namespace Notion.Client [JsonSubtypes.KnownSubType(typeof(PDFBlock), BlockType.PDF)] [JsonSubtypes.KnownSubType(typeof(QuoteBlock), BlockType.Quote)] [JsonSubtypes.KnownSubType(typeof(TableOfContentsBlock), BlockType.TableOfContents)] + [JsonSubtypes.KnownSubType(typeof(TemplateBlock), BlockType.Template)] [JsonSubtypes.KnownSubType(typeof(ToDoBlock), BlockType.ToDo)] [JsonSubtypes.KnownSubType(typeof(ToggleBlock), BlockType.Toggle)] [JsonSubtypes.KnownSubType(typeof(VideoBlock), BlockType.Video)] diff --git a/Src/Notion.Client/Models/Blocks/IColumnChildrenBlock.cs b/Src/Notion.Client/Models/Blocks/IColumnChildrenBlock.cs index 9eaa5622..35370460 100644 --- a/Src/Notion.Client/Models/Blocks/IColumnChildrenBlock.cs +++ b/Src/Notion.Client/Models/Blocks/IColumnChildrenBlock.cs @@ -1,65 +1,13 @@ -using JsonSubTypes; -using Newtonsoft.Json; - -namespace Notion.Client +namespace Notion.Client { - //[JsonConverter(typeof(JsonSubtypes), "type")] - //[JsonSubtypes.KnownSubType(typeof(AudioBlock), BlockType.Audio)] - //[JsonSubtypes.KnownSubType(typeof(BookmarkBlock), BlockType.Bookmark)] - //[JsonSubtypes.KnownSubType(typeof(BreadcrumbBlock), BlockType.Breadcrumb)] - //[JsonSubtypes.KnownSubType(typeof(BulletedListItemBlock), BlockType.BulletedListItem)] - //[JsonSubtypes.KnownSubType(typeof(CalloutBlock), BlockType.Callout)] - //[JsonSubtypes.KnownSubType(typeof(ChildDatabaseBlock), BlockType.ChildDatabase)] - //[JsonSubtypes.KnownSubType(typeof(ChildPageBlock), BlockType.ChildPage)] - //[JsonSubtypes.KnownSubType(typeof(CodeBlock), BlockType.Code)] - //[JsonSubtypes.KnownSubType(typeof(DividerBlock), BlockType.Divider)] - //[JsonSubtypes.KnownSubType(typeof(EmbedBlock), BlockType.Embed)] - //[JsonSubtypes.KnownSubType(typeof(EquationBlock), BlockType.Equation)] - //[JsonSubtypes.KnownSubType(typeof(FileBlock), BlockType.File)] - //[JsonSubtypes.KnownSubType(typeof(HeadingOneBlock), BlockType.Heading_1)] - //[JsonSubtypes.KnownSubType(typeof(HeadingTwoBlock), BlockType.Heading_2)] - //[JsonSubtypes.KnownSubType(typeof(HeadingThreeeBlock), BlockType.Heading_3)] - //[JsonSubtypes.KnownSubType(typeof(ImageBlock), BlockType.Image)] - //[JsonSubtypes.KnownSubType(typeof(NumberedListItemBlock), BlockType.NumberedListItem)] - //[JsonSubtypes.KnownSubType(typeof(ParagraphBlock), BlockType.Paragraph)] - //[JsonSubtypes.KnownSubType(typeof(PDFBlock), BlockType.PDF)] - //[JsonSubtypes.KnownSubType(typeof(QuoteBlock), BlockType.Quote)] - //[JsonSubtypes.KnownSubType(typeof(TableOfContentsBlock), BlockType.TableOfContents)] - //[JsonSubtypes.KnownSubType(typeof(ToDoBlock), BlockType.ToDo)] - //[JsonSubtypes.KnownSubType(typeof(ToggleBlock), BlockType.Toggle)] - //[JsonSubtypes.KnownSubType(typeof(VideoBlock), BlockType.Video)] - //[JsonSubtypes.KnownSubType(typeof(UnsupportedBlock), BlockType.Unsupported)] - public interface IColumnChildrenBlock : IBlock + public interface ITemplateChildrendBlock : IBlock + { + } + + public interface IColumnChildrenBlock : IBlock, ITemplateChildrendBlock { } - //[JsonConverter(typeof(JsonSubtypes), "type")] - //[JsonSubtypes.KnownSubType(typeof(AudioBlock), BlockType.Audio)] - //[JsonSubtypes.KnownSubType(typeof(BookmarkBlock), BlockType.Bookmark)] - //[JsonSubtypes.KnownSubType(typeof(BreadcrumbBlock), BlockType.Breadcrumb)] - //[JsonSubtypes.KnownSubType(typeof(BulletedListItemBlock), BlockType.BulletedListItem)] - //[JsonSubtypes.KnownSubType(typeof(CalloutBlock), BlockType.Callout)] - //[JsonSubtypes.KnownSubType(typeof(ChildPageBlock), BlockType.ChildPage)] - //[JsonSubtypes.KnownSubType(typeof(ChildDatabaseBlock), BlockType.ChildDatabase)] - //[JsonSubtypes.KnownSubType(typeof(CodeBlock), BlockType.Code)] - //[JsonSubtypes.KnownSubType(typeof(ColumnListBlock), BlockType.ColumnList)] - //[JsonSubtypes.KnownSubType(typeof(DividerBlock), BlockType.Divider)] - //[JsonSubtypes.KnownSubType(typeof(EmbedBlock), BlockType.Embed)] - //[JsonSubtypes.KnownSubType(typeof(EquationBlock), BlockType.Equation)] - //[JsonSubtypes.KnownSubType(typeof(FileBlock), BlockType.File)] - //[JsonSubtypes.KnownSubType(typeof(HeadingOneBlock), BlockType.Heading_1)] - //[JsonSubtypes.KnownSubType(typeof(HeadingTwoBlock), BlockType.Heading_2)] - //[JsonSubtypes.KnownSubType(typeof(HeadingThreeeBlock), BlockType.Heading_3)] - //[JsonSubtypes.KnownSubType(typeof(ImageBlock), BlockType.Image)] - //[JsonSubtypes.KnownSubType(typeof(NumberedListItemBlock), BlockType.NumberedListItem)] - //[JsonSubtypes.KnownSubType(typeof(ParagraphBlock), BlockType.Paragraph)] - //[JsonSubtypes.KnownSubType(typeof(PDFBlock), BlockType.PDF)] - //[JsonSubtypes.KnownSubType(typeof(QuoteBlock), BlockType.Quote)] - //[JsonSubtypes.KnownSubType(typeof(TableOfContentsBlock), BlockType.TableOfContents)] - //[JsonSubtypes.KnownSubType(typeof(ToDoBlock), BlockType.ToDo)] - //[JsonSubtypes.KnownSubType(typeof(ToggleBlock), BlockType.Toggle)] - //[JsonSubtypes.KnownSubType(typeof(VideoBlock), BlockType.Video)] - //[JsonSubtypes.KnownSubType(typeof(UnsupportedBlock), BlockType.Unsupported)] public interface INonColumnBlock : IBlock { } diff --git a/Src/Notion.Client/Models/Blocks/TemplateBlock.cs b/Src/Notion.Client/Models/Blocks/TemplateBlock.cs new file mode 100644 index 00000000..2fceb845 --- /dev/null +++ b/Src/Notion.Client/Models/Blocks/TemplateBlock.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace Notion.Client +{ + public class TemplateBlock : Block, IColumnChildrenBlock, INonColumnBlock + { + public override BlockType Type => BlockType.Template; + + [JsonProperty("template")] + public Data Template { get; set; } + + public class Data + { + [JsonProperty("text")] + public IEnumerable Text { get; set; } + + [JsonProperty("children")] + public IEnumerable Children { get; set; } + } + } +} diff --git a/Test/Notion.IntegrationTests/IBlocksClientTests.cs b/Test/Notion.IntegrationTests/IBlocksClientTests.cs index a15c9014..bea88c1b 100644 --- a/Test/Notion.IntegrationTests/IBlocksClientTests.cs +++ b/Test/Notion.IntegrationTests/IBlocksClientTests.cs @@ -452,6 +452,60 @@ private static IEnumerable BlockData() Assert.Equal("https://www.iaspaper.net/wp-content/uploads/2017/09/TNEA-Online-Application.jpg", embedBlock.Embed.Url); }) + }, + new object[] + { + new TemplateBlock() + { + Template = new TemplateBlock.Data + { + Text = new List + { + new RichTextText + { + Text = new Text + { + Content = "Test Template" + } + } + }, + Children = new List + { + new EmbedBlock() + { + Embed = new EmbedBlock.Info + { + Url = "https://zephoria.com/wp-content/uploads/2014/08/online-community.jpg" + } + } + } + } + }, + new TemplateUpdateBlock() + { + Template = new TemplateUpdateBlock.Data + { + Text = new List + { + new RichTextTextInput + { + Text = new Text + { + Content = "Test Template 2" + } + } + } + } + }, + new Action (block => + { + Assert.NotNull(block); + var templateBlock = Assert.IsType(block); + + Assert.Single(templateBlock.Template.Text); + Assert.Null(templateBlock.Template.Children); + Assert.Equal("Test Template 2", templateBlock.Template.Text.OfType().First().Text.Content); + }) } }; }