@onereach/channel-transformer
Version:
Convert data model between different channels (Slack, Microsoft Teams, Generic...)
67 lines (52 loc) • 1.9 kB
text/typescript
import { ISlackOptionObject, ISlackOptionGroupObject } from '../../types';
import { IGenericOptions, IGenericGroupOptions } from '../../../generic/types/utils/options';
import { transformTextObject } from '../items/text';
import { parseMarkdownToSlackMrkdwn } from '../../parsers/parse-markdown-to-slack-mrkdwn';
function convertGenericSingleOption(item): ISlackOptionObject {
const type = item?.slack?.type || 'plain_text';
const text = item?.label || item?.value || item?.name;
const value = item?.value || item?.name || item?.key;
const res: ISlackOptionObject = {
text: {
type: type,
text: type === 'plain_text' ? text : parseMarkdownToSlackMrkdwn(text)
},
value
};
const emoji = item?.slack?.emoji;
const verbatim = item?.slack?.verbatim;
if (typeof emoji === 'boolean') {
res.text.emoji = emoji;
}
if (typeof verbatim === 'boolean') {
res.text.verbatim = verbatim;
}
const description = item.slack?.description;
const url = item.slack?.url;
if (description) res.description = transformTextObject(description);
if (url) res.url = url;
return res;
}
function convertGenericOptions(arr: Array<IGenericOptions>): Array<ISlackOptionObject> {
return arr.map(item => convertGenericSingleOption(item));
}
function convertGenericSingleOptionGroup(item) {
return {
label: transformTextObject(item.label),
options: item.options.map(item => convertGenericSingleOption(item))
};
}
function convertGenericOptionsGroup(arr: Array<IGenericGroupOptions>): Array<ISlackOptionGroupObject> {
const res: Array<ISlackOptionGroupObject> = [];
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
res.push(convertGenericSingleOptionGroup(item));
}
return res;
}
export {
convertGenericOptions,
convertGenericOptionsGroup,
convertGenericSingleOption,
convertGenericSingleOptionGroup
};