UNPKG

@onereach/channel-transformer

Version:

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

67 lines (52 loc) 1.9 kB
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 };