@onereach/channel-transformer
Version:
Convert data model between different channels (Slack, Microsoft Teams, Generic...)
45 lines (40 loc) • 1.26 kB
text/typescript
import { IGenericLink } from '../../../../generic/types';
import { IRWCMessage } from '../../../types';
import { getMethods } from '../methods';
import { toHtml } from '../../../../../helpers/md-to-html';
import { RWCv5Message } from '../../../classes/v5';
const isString = target => typeof target === 'string';
export const transformLink = ({ props, children }: IGenericLink): IRWCMessage => {
let message = '';
const { url, label, title } = props;
if (url) {
message = `<a href="${url}" target="_blank"`;
}
if (title) {
message += ` title="${title}"`;
}
message += `>`;
if (label) {
message += `${toHtml(label, true)}</a>`;
} else {
const label = children.reduce((acc, item) => {
if (item.type === 'button') {
acc += `<button>${item.props?.label || item.props?.value}</button>`;
} else {
const transformFn = getMethods(item.type);
if (transformFn) {
const result = transformFn(item);
acc += isString(result) ?
result :
result?.message || result?.vBind?.text || '';
}
}
return acc;
}, '');
message += `${label}</a>`;
}
// const result: IRWCMessage = {
// message
// };
return new RWCv5Message(message);
};