0.0.4 ⢠Published 5 years ago
@onereach/channel-transformers v0.0.4
š¤ 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`
}