@onereach/channel-transformer
Version:
Convert data model between different channels (Slack, Microsoft Teams, Generic...)
46 lines (36 loc) • 1.49 kB
text/typescript
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]
};
};