UNPKG

@onereach/channel-transformer

Version:

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

38 lines (32 loc) 1.45 kB
import { IGenericSection } from "../../../../generic/types"; import { getMethods } from "../methods"; import { IRWCAnswerComponent, IRWCMessage } from "../../../types"; import { RWCv5Message } from "../../../classes/v5"; export const transformSection = ( { children }: IGenericSection) => { const groupedTypes = ['card', 'button']; const components = [] as Array<IRWCAnswerComponent>; const messages = [] as Array<IRWCMessage>; const [ buttons, cards, rest ] = children.reduce((acc, item) => { const [buttons, cards, rest] = acc; if (groupedTypes.includes(item.type)) { return item.type === 'card' ? [buttons, [...cards, item], rest] : [[...buttons, item], cards, rest]; } return [buttons, cards, [...rest, item]]; }, [[], [], []]); if (cards.length) components.push(getMethods("carousel")({children: cards})); if (buttons.length) components.push(getMethods("buttonList")({ children: buttons})); for (const item of rest) { const res = getMethods(item.type)(item); let comps, msgs; if (res instanceof RWCv5Message) { messages.push(res); continue; } else { comps = res?.components || res; msgs = res?.messages || []; } messages.push(...msgs); Array.isArray(comps) ? components.push(...comps) : components.push(comps); } return {components, messages}; };