redux-devtools/packages/map2tree
renovate[bot] 1f591944cd
chore(deps): update dependency eslint-config-prettier to v9 (#1447)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-07 13:13:49 +00:00
..
src chore(deps): update dependency prettier to v3 (#1434) 2023-07-12 18:03:20 +00:00
test Use types in tscnofig to explicitly define global types (#1045) 2022-01-22 21:51:27 +00:00
.eslintignore Imprrove ability to tree-shake libraries (#1050) 2022-01-24 02:11:46 +00:00
.eslintrc.js Use types in tscnofig to explicitly define global types (#1045) 2022-01-22 21:51:27 +00:00
babel.config.esm.json Imprrove ability to tree-shake libraries (#1050) 2022-01-24 02:11:46 +00:00
babel.config.json Imprrove ability to tree-shake libraries (#1050) 2022-01-24 02:11:46 +00:00
CHANGELOG.md Version Packages (#1309) 2023-01-05 14:18:48 +00:00
jest.config.js chore(deps): update jest monorepo to v29 (major) (#1149) 2022-10-28 17:15:02 -04:00
LICENSE.md Merge map2tree package (#426) 2018-12-19 16:50:39 +02:00
package.json chore(deps): update dependency eslint-config-prettier to v9 (#1447) 2023-08-07 13:13:49 +00:00
README.md chore(deps): update dependency prettier to v3 (#1434) 2023-07-12 18:03:20 +00:00
tsconfig.json Imprrove ability to tree-shake libraries (#1050) 2022-01-24 02:11:46 +00:00
tsconfig.test.json Use types in tscnofig to explicitly define global types (#1045) 2022-01-22 21:51:27 +00:00

A pure function to convert a map into a tree structure. Created by @romseguy and merged from romseguy/map2tree.

The following opinions must be taken into account since the primary use case of this library is redux-devtools-chart-monitor:

  • Objects and arrays deeply nested within collections are not converted into a tree structure. See someNestedObject and someNestedArray in the output below, or the corresponding test.
  • Provides support for Immutable.js data structures (only List and Map though).

Usage

map2tree(
  someMap,
  (options = {
    key: 'state', // the name you want for as the root node of the output tree
    pushMethod: 'push', // use 'unshift' to change the order children nodes are added
  }),
);

Input

const someMap = {
  someReducer: {
    todos: [
      { title: 'map', someNestedObject: { foo: 'bar' } },
      { title: 'to', someNestedArray: ['foo', 'bar'] },
      { title: 'tree' },
      { title: 'map2tree' },
    ],
    completedCount: 1,
  },
  otherReducer: {
    foo: 0,
    bar: { key: 'value' },
  },
};

Output

{
  name: `${options.key}`,
  children: [
    {
      name: 'someReducer',
      children: [
        {
          name: 'todos',
          children: [
            {
              name: 'todo[0]',
              object: {
                title: 'map',
                someNestedObject: {foo: 'bar'}
              }
            },
            {
              name: 'todo[1]',
              object: {
                title: 'to',
                someNestedArray: ['foo', 'bar']
              }
            },
            // ...
          ]
        },
        // ...
      ]
    },
    {
      name: 'otherReducer',
      children: [
        {
          name: 'foo',
          value: 0
        },
        {
          name: 'bar',
          object: {
            key: 'value'
          }
        }
      ]
    }
  ]
}