feat(Notion Node): Option to simplify output in getChildBlocks operation (#7791)

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

---------

Co-authored-by: Marcus <marcus@n8n.io>
This commit is contained in:
Michael Kret 2023-11-27 15:02:57 +02:00 committed by GitHub
parent 137e23853f
commit d667bca658
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 72 additions and 2 deletions

View file

@ -199,4 +199,19 @@ export const blockFields: INodeProperties[] = [
}, },
default: false, default: false,
}, },
{
displayName: 'Simplify Output',
name: 'simplifyOutput',
type: 'boolean',
displayOptions: {
show: {
resource: ['block'],
operation: ['getAll'],
},
hide: {
'@version': [1, 2],
},
},
default: true,
},
]; ];

View file

@ -39,6 +39,7 @@ export type SortData = { key: string; type: string; direction: string; timestamp
const apiVersion: { [key: number]: string } = { const apiVersion: { [key: number]: string } = {
1: '2021-05-13', 1: '2021-05-13',
2: '2021-08-16', 2: '2021-08-16',
2.1: '2021-08-16',
}; };
export async function notionApiRequest( export async function notionApiRequest(
@ -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;
}

View file

@ -13,12 +13,13 @@ export class Notion extends VersionedNodeType {
group: ['output'], group: ['output'],
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Consume Notion API', description: 'Consume Notion API',
defaultVersion: 2, defaultVersion: 2.1,
}; };
const nodeVersions: IVersionedNodeType['nodeVersions'] = { const nodeVersions: IVersionedNodeType['nodeVersions'] = {
1: new NotionV1(baseDescription), 1: new NotionV1(baseDescription),
2: new NotionV2(baseDescription), 2: new NotionV2(baseDescription),
2.1: new NotionV2(baseDescription),
}; };
super(nodeVersions, baseDescription); super(nodeVersions, baseDescription);

View file

@ -26,6 +26,7 @@ import {
notionApiRequest, notionApiRequest,
notionApiRequestAllItems, notionApiRequestAllItems,
notionApiRequestGetBlockChildrens, notionApiRequestGetBlockChildrens,
simplifyBlocksOutput,
simplifyObjects, simplifyObjects,
validateJSON, validateJSON,
} from '../GenericFunctions'; } from '../GenericFunctions';
@ -312,6 +313,16 @@ export class NotionV2 implements INodeType {
..._data, ..._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( const executionData = this.helpers.constructExecutionMetaData(
this.helpers.returnJsonArray(responseData as IDataObject), this.helpers.returnJsonArray(responseData as IDataObject),
{ itemData: { item: i } }, { itemData: { item: i } },

View file

@ -15,7 +15,7 @@ export const versionDescription: INodeTypeDescription = {
name: 'notion', name: 'notion',
icon: 'file:notion.svg', icon: 'file:notion.svg',
group: ['output'], group: ['output'],
version: 2, version: [2, 2.1],
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Consume Notion API', description: 'Consume Notion API',
defaults: { defaults: {