UNPKG

@onereach/channel-transformer

Version:

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

40 lines (36 loc) 1.3 kB
import { IGenericFields } from '../../../generic/types'; import { ISlackSection, ISlackTextObject } from '../../types/index'; import { getMethods } from '../methods'; function transformFields({ props, children }: IGenericFields): Array<ISlackSection>; function transformFields({ props, children }: IGenericFields): Array<ISlackTextObject>; function transformFields ({ props, children }: IGenericFields) { const textTypes = ['plain_text', 'mrkdwn']; const column = props.column || 2; // if two columns transform to Slack fields list, // otherwise transform to list of the Slack sections if (column === 2) { return children.map(item => { const transformed = getMethods(item.type)(item); if (!textTypes.includes(transformed?.type) && transformed.text) { // handle section-like elements, e.g. header return transformed.text; } return transformed; }); } else { const result = []; for (let i = 0; i < children.length + column - 1; i = i + column) { const section = getMethods('section')({ children: children.slice(i, i + column) }); if (Array.isArray(section)) { result.push(...section); } else { result.push(section); } } return result; } } export { transformFields };