@onereach/channel-transformer
Version:
Convert data model between different channels (Slack, Microsoft Teams, Generic...)
75 lines (68 loc) • 1.48 kB
text/typescript
import { IGenericWrapper } from '../../generic/types/wrapper';
import { ISlackBlockKitData } from '../types/index';
import { transformText } from './items/text-object';
import { getMethods } from './methods';
function mapBlocks(blocks: Array<any>): Array<any> {
const res = [];
for (let i = 0; i < blocks.length; i++) {
const block = blocks[i];
res.push(getMethods(block.type)(block));
}
return res.length > 0 ? res : [{}];
}
export function transformSlackToGeneric({
blocks,
attachments,
type,
title,
submit,
close
}: ISlackBlockKitData): IGenericWrapper {
if (!type && blocks) {
return {
type: 'wrapper',
children: mapBlocks(blocks),
props: {
slack: {
type: 'message'
}
}
};
}
if (attachments) {
return {
type: 'wrapper',
children: attachments.map(item => mapBlocks(item.blocks)),
props: {
slack: {
type: 'attachments'
}
}
};
}
if (type === 'home') {
return {
type: 'wrapper',
children: mapBlocks(blocks),
props: {
slack: {
type: 'home'
}
}
};
}
if (type === 'modal') {
return {
type: 'wrapper',
children: mapBlocks(blocks),
props: {
slack: {
type: "modal",
title: transformText(title),
submit: transformText(submit),
close: transformText(close)
}
}
};
}
}