0.0.22 ⢠Published 5 years ago
@onereach/convert-channels v0.0.22
š® This Transformer between differend data model channels
ā Developing:
- Slack
- Microsoft Teams
- Default (schema for content builder)
š Future channels:
...
How to use
npm iSample of code in ./user-test.js If you use ./user-test.js than just run:
npm run dev
Or, create local file and require from ./index.js next functions
import {
transformSlackToMicrosoftTeams,
transformMicrosoftTeamsToSlack
} from './index';After that import json data. Fot example, slack model
const slackToMsTeamsData = require('./slack->msTeams.json');And transform Slack model to Microsoft team:
const microsoftTeamsModel = transformSlackToMicrosoftTeams({ data: slackToMsTeamsData });
console.log(JSON.stringify(microsoftTeamsModel))How to test
We use unit testing based on cases. Create new case, just run script, before run command look up in derictory ./test/cases and enter NUMBER_OF_CASE next after existing (change NUMBER_OF_CASE to Number of case)
sh scripts/createCase.sh NUMBER_OF_CASEThan open ./test/cases/NUMBER_OF_CASE and add original data model to from.json file open ./test/cases/NUMBER_OF_CASE and add expected data model to to.json file
npm run testHow it works
Sample: Microsoft Teams and Slack
- Microsoft Teams Adaptive Cards data model š transform to default data model š transform from default data model to Slack Block kit data model
- Slack Block kit data model š transform to default data model š transform from default data model to Microsoft Teams Adaptive Cards data model
Structure
...
Default schema:
{
itmes: [
{
itemType: type, // type of block or element
children: [], // array of atributes, children, items,
attributes: {} // additional data (title, styles and so on),
value: // anu value data
}
]
}Default types:
- section
itemType: 'section',
children,
attributes: {
position // could be left of undefined
}- text
{
itemType: 'text',
textType: type, // could be mrkdown, markdown, plain_text
text
}- image
{
itemType: 'image',
url: image_url,
alt: alt_text,
attributes: {
title,
position // could be left of undefined
}
}- divider
{
itemType: 'divider'
}- actions
{
itemType: 'actions',
children
}- button
{
itemType: 'button',
value,
url,
text,
attributes: {
text,
style // color styling default, blue, red, green
}
}- columnSet
{
itemType: 'columnset',
columnLength: 0,
children: [
{
numberOfColumn: Number // have to be cleared
}
]
}- select
{
itemType: 'select',
id,
placeholder: { type: 'plain_text', text: 'Select a date', emoji: true } || 'Just a string',
options: [
{
label: item.text,
value: item.value
};
],
isMultiSelect: false,
attributes: {
position
}
}- datepicker
{
itemType: 'datepicker',
placeholder: { type: 'plain_text', text: 'Select a date', emoji: true } || 'Just a string',
value: '1990-04-28',
id: '123',
attributes: { position: 'left' }
}- input
{
itemType: 'input',
input: {
placeholder,
isMultiline
},
label: text or text object
}- Error dev extra types:
{
itemType: 'error',
message: `Method for ${type} not found`
}