Skip to content

Commit

Permalink
feat(Notion Node): Option to simplify output in getChildBlocks operat…
Browse files Browse the repository at this point in the history
…ion (#7791)

Github issue / Community forum post (link here to close automatically):

---------

Co-authored-by: Marcus <marcus@n8n.io>
  • Loading branch information
michael-radency and maspio authored Nov 27, 2023
1 parent 137e238 commit d667bca
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 2 deletions.
15 changes: 15 additions & 0 deletions packages/nodes-base/nodes/Notion/BlockDescription.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,4 +199,19 @@ export const blockFields: INodeProperties[] = [
},
default: false,
},
{
displayName: 'Simplify Output',
name: 'simplifyOutput',
type: 'boolean',
displayOptions: {
show: {
resource: ['block'],
operation: ['getAll'],
},
hide: {
'@version': [1, 2],
},
},
default: true,
},
];
43 changes: 43 additions & 0 deletions packages/nodes-base/nodes/Notion/GenericFunctions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export type SortData = { key: string; type: string; direction: string; timestamp
const apiVersion: { [key: number]: string } = {
1: '2021-05-13',
2: '2021-08-16',
2.1: '2021-08-16',
};

export async function notionApiRequest(
Expand Down Expand Up @@ -1067,3 +1068,45 @@ export function extractDatabaseMentionRLC(blockValues: IDataObject[]) {
}
});
}

export function simplifyBlocksOutput(blocks: IDataObject[], rootId: string) {
for (const block of blocks) {
const type = block.type as string;
block.root_id = rootId;

['created_time', 'last_edited_time', 'created_by'].forEach((key) => {
delete block[key];
});

try {
if (['code'].includes(type)) {
const text = (block[type] as IDataObject).text as IDataObject[];
if (text && Array.isArray(text)) {
const content = text.map((entry) => entry.plain_text || '').join('');
block.content = content;
delete block[type];
}
continue;
}

if (['child_page', 'child_database'].includes(type)) {
const content = (block[type] as IDataObject).title as string;
block.content = content;
delete block[type];
continue;
}

const text = (block[type] as IDataObject)?.text as IDataObject[];

if (text && Array.isArray(text)) {
const content = text.map((entry) => entry.plain_text || '').join('');
block.content = content;
delete block[type];
}
} catch (e) {
continue;
}
}

return blocks;
}
3 changes: 2 additions & 1 deletion packages/nodes-base/nodes/Notion/Notion.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@ export class Notion extends VersionedNodeType {
group: ['output'],
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Consume Notion API',
defaultVersion: 2,
defaultVersion: 2.1,
};

const nodeVersions: IVersionedNodeType['nodeVersions'] = {
1: new NotionV1(baseDescription),
2: new NotionV2(baseDescription),
2.1: new NotionV2(baseDescription),
};

super(nodeVersions, baseDescription);
Expand Down
11 changes: 11 additions & 0 deletions packages/nodes-base/nodes/Notion/v2/NotionV2.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
notionApiRequest,
notionApiRequestAllItems,
notionApiRequestGetBlockChildrens,
simplifyBlocksOutput,
simplifyObjects,
validateJSON,
} from '../GenericFunctions';
Expand Down Expand Up @@ -312,6 +313,16 @@ export class NotionV2 implements INodeType {
..._data,
}));

const nodeVersion = this.getNode().typeVersion;

if (nodeVersion > 2) {
const simplifyOutput = this.getNodeParameter('simplifyOutput', i) as boolean;

if (simplifyOutput) {
responseData = simplifyBlocksOutput(responseData, blockId);
}
}

const executionData = this.helpers.constructExecutionMetaData(
this.helpers.returnJsonArray(responseData as IDataObject),
{ itemData: { item: i } },
Expand Down
2 changes: 1 addition & 1 deletion packages/nodes-base/nodes/Notion/v2/VersionDescription.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export const versionDescription: INodeTypeDescription = {
name: 'notion',
icon: 'file:notion.svg',
group: ['output'],
version: 2,
version: [2, 2.1],
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Consume Notion API',
defaults: {
Expand Down

0 comments on commit d667bca

Please sign in to comment.