UNPKG

@onereach/channel-transformer

Version:

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

46 lines (36 loc) 1.49 kB
import { IGenericWrapper } from "../.../../../../generic/types"; import { RWCv5Message } from "../../classes/v5"; import { IRWCAnswerComponent, IRWCMessage } from "../../types"; import { getMethods } from "../v5/methods"; const formRWCMessage = (data: Array<IRWCAnswerComponent> | IRWCAnswerComponent): IRWCMessage => { const source = Array.isArray(data) ? [...data] : [data]; const [message, medias] = source.reduce((acc, component) => { const [message, medias] = acc; if (component.name === "rwc-text") { return [message + '' + component.vBind?.text, medias]; } if (component.name === "rwc-medias") { return [message, [...(component.vBind?.medias || []), ...medias]]; } return [message, medias]; }, ["", []]); return new RWCv5Message(message, data, medias); }; export const transformGenericToRWCv5 = (msg: IGenericWrapper) => { const { children } = msg; const res: Array<IRWCMessage> = children.reduce((acc, child) => { const res = getMethods(child.type)(child); if (res instanceof RWCv5Message) { acc.push(res); return acc; } const components = res.components || (Array.isArray(res) ? res : [res]); const messages = res.messages || []; if(components.length) acc.push(formRWCMessage(components)); acc.push(...messages); return acc; }, []); return { messages: [...res] }; };