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