0.1.2 • Published 4 years ago

tdast-util-from-array v0.1.2

Weekly downloads
15
License
MIT
Repository
github
Last release
4 years ago

tdast-util-from-array

tdast utility to transform a JS array into tdast.


Install

npm install tdast-util-from-array

Use

import fromArray from 'tdast-util-from-array';

const array = [
  { column1: 1, column2: 'two', column3: 3, column4: null },
  { column1: null, column2: 'two', column3: 33, column4: 'four' },
];

expect(fromArray(array)).toEqual({
  type: 'table',
  children: [
    {
      type: 'row',
      index: 0,
      children: [
        {
          type: 'column',
          index: 0,
          value: 'column1',
        },
        {
          type: 'column',
          index: 1,
          value: 'column2',
        },
        {
          type: 'column',
          index: 2,
          value: 'column3',
        },
        {
          type: 'column',
          index: 3,
          value: 'column4',
        },
      ],
    },
    {
      type: 'row',
      index: 1,
      children: [
        {
          type: 'cell',
          columnIndex: 0,
          rowIndex: 1,
          value: 1,
        },
        {
          type: 'cell',
          columnIndex: 1,
          rowIndex: 1,
          value: 'two',
        },
        {
          type: 'cell',
          columnIndex: 2,
          rowIndex: 1,
          value: 3,
        },
        {
          type: 'cell',
          columnIndex: 3,
          rowIndex: 1,
          value: null,
        },
      ],
    },
    {
      type: 'row',
      index: 2,
      children: [
        {
          type: 'cell',
          columnIndex: 0,
          rowIndex: 2,
          value: null,
        },
        {
          type: 'cell',
          columnIndex: 1,
          rowIndex: 2,
          value: 'two',
        },
        {
          type: 'cell',
          columnIndex: 2,
          rowIndex: 2,
          value: 33,
        },
        {
          type: 'cell',
          columnIndex: 3,
          rowIndex: 2,
          value: 'four',
        },
      ],
    },
  ],
});

API

fromArray(array[, options])

Interface

function fromArray(array: any[], options?: Options): Table

Transforms a JS array into a tdast tree.

Created Row, Column and Cell nodes are automatically assigned relevant row/column indices.

Infers and creates columns from object keys if not explicitly specified. Columns can be explicitly specified in options, affording more structure to the tdast Column nodes.

Example

const array = [
  { column1: 1, column2: 'two', column3: 3, column4: null },
  { column1: null, column2: 'two', column3: 33, column4: 'four' },
];

const options = {
  columns: [
    {
      label: 'Column 1',
      data: { category: 'A' },
      dataType: 'number',
      value: 'column1',
    },
    {
      label: 'Column 2',
      data: { category: 'B' },
      dataType: 'string',
      value: 'column2',
    },
    {
      label: 'Column 3',
      data: { category: 'A' },
      dataType: 'number',
      value: 'column3',
    },
    {
      label: 'Column 1',
      data: { category: 'B' },
      dataType: 'mixed',
      value: 'column4',
    },
  ],
};

expect(fromArray(array, options)).toEqual({
  type: 'table',
  children: [
    {
      type: 'row',
      index: 0,
      children: [
        {
          type: 'column',
          index: 0,
          label: 'Column 1',
          data: { category: 'A' },
          dataType: 'number',
          value: 'column1',
        },
        {
          type: 'column',
          index: 1,
          label: 'Column 2',
          data: { category: 'B' },
          dataType: 'string',
          value: 'column2',
        },
        {
          type: 'column',
          index: 2,
          label: 'Column 3',
          data: { category: 'A' },
          dataType: 'number',
          value: 'column3',
        },
        {
          type: 'column',
          index: 3,
          label: 'Column 1',
          data: { category: 'B' },
          dataType: 'mixed',
          value: 'column4',
        },
      ],
    },
    {
      type: 'row',
      index: 1,
      children: [
        {
          type: 'cell',
          columnIndex: 0,
          rowIndex: 1,
          value: 1,
        },
        {
          type: 'cell',
          columnIndex: 1,
          rowIndex: 1,
          value: 'two',
        },
        {
          type: 'cell',
          columnIndex: 2,
          rowIndex: 1,
          value: 3,
        },
        {
          type: 'cell',
          columnIndex: 3,
          rowIndex: 1,
          value: null,
        },
      ],
    },
    {
      type: 'row',
      index: 2,
      children: [
        {
          type: 'cell',
          columnIndex: 0,
          rowIndex: 2,
          value: null,
        },
        {
          type: 'cell',
          columnIndex: 1,
          rowIndex: 2,
          value: 'two',
        },
        {
          type: 'cell',
          columnIndex: 2,
          rowIndex: 2,
          value: 33,
        },
        {
          type: 'cell',
          columnIndex: 3,
          rowIndex: 2,
          value: 'four',
        },
      ],
    },
  ],
});

Related interfaces

interface Column {
  value: any;
  data?: Data;
  dataType?: string;
  label?: string;
}

interface Options {
  columns?: Column[];
}