UNPKG

@onereach/channel-transformer

Version:

Convert data model between different channels (Slack, Microsoft Teams, Generic...)

66 lines (56 loc) 2.02 kB
import { IGenericWrapper } from '../../../generic/types/wrapper'; import { RWCv4Message } from '../../classes/v4'; import { IRWCMessage } from '../../types'; import { getMethods } from './methods'; function mapBlocks( blocks: Array<any>, mergeTextSections = true, prefix?: string, suffix?: string ): Array<IRWCMessage> { const result = []; for (let i = 0; i < blocks.length; i++) { const block = blocks[i]; result.push(getMethods(block.type)(block)); } const sections = result.length > 0 ? result.reduce( (acc, item) => Array.isArray(item) ? acc.concat(...item) : acc.concat(item), []) : []; if (mergeTextSections) { prefix = prefix === undefined ? '<div style="margin: 8px 0;">' : prefix; suffix = suffix === undefined ? '</div>' : suffix; return sections.reduce((acc, item) => { if (acc.length === 0 || item.answerComponent?.component) { return acc.concat(new RWCv4Message(item)); } const previous = acc[acc.length-1]; if (previous.answerComponent?.component || previous.medias?.length) { return acc.concat(new RWCv4Message(item)); } if (item.message) { if (!previous.message) { previous.message = `${prefix}${item.message}${suffix}`.trim(); } else { if (!previous.message.startsWith(prefix) || !previous.message.endsWith(suffix)) { previous.message = `${prefix}${previous.message}${suffix}`.trim(); } previous.message = `${previous.message}${prefix}${item.message}${suffix}`.trim(); } previous.messageText = previous.message; return acc; } }, []); } return sections.map(item => new RWCv4Message(item)); } export function transformGenericToRWCv4( { children, props }: IGenericWrapper, mergeTextSections=props?.rwc?.mergeTextSections, prefix?: string, suffix?: string ) { return { messages: mapBlocks(children, mergeTextSections, prefix, suffix) }; }