performr-runner-result-graph

7.0.2 • Public • Published

performr-runner-result-graph

Display the event breakdown of a performr-runner script run as a pretty graph. Using React & Redux & SCSS

Usage

npm i --save performr-runner-result-graph react

As an isolated SubApp

If you are integrating this React App in your own React App, you can simply import this module within your parent component. This container uses redux, however the store is isolated by default (see http://redux.js.org/docs/recipes/IsolatingSubapps.html):

import React, {Component} from 'react';
import PerformrRunnerResultGraph, {parseResultObject} from 'performr-runner-result-graph';
import SubApp from './subapp';
import sampleResult from './sample-result.json';

// Converts your plain-old-javascript-object to an Immutable.js Map and also adds extra lookup tables
const parsedSampleResult = parseResultObject(sampleResult);

class BigApp extends Component {
  render() {
    return (
      <div>
        <SubApp />
        <PerformrRunnerResultGraph resultObject={parsedSampleResult}/>
        <SubApp />
      </div>
    )
  }
}

As a SubApp with a shared redux store

Your store can be shared with this component by setting the store prop. All of the state for this component will be stored under the PerformrRunnerResultGraph key in the global state. Rendering multiple instances of this component is supported by setting the instanceKey prop:

import React, {Component} from 'react';
import PerformrRunnerResultGraph, {parseResultObject} from 'performr-runner-result-graph';
import SubApp from './subapp';
import sampleResult from './sample-result.json';
const parsedSampleResult = parseResultObject(sampleResult);

class BigApp extends Component {
  render() {
    return (
      <div>
        <SubApp/>
        <PerformrRunnerResultGraph
            instanceKey="foo"
            resultObject={parsedSampleResult}
            store={this.props.store}
        />
        <SubApp/>
      </div>
    )
  }
}

You will also have to integrate the reducer for this component:

import {combineReducers} from 'redux';
import {createRootReducer as createGraphReducer, stateKey as graphStateKey} from 'performr-runner-result-graph';

import someOtherReducer from './someOtherReducer';

const mainReducer = combineReducers({
    [graphStateKey]: createGraphReducer(['foo']),
    someOtherReducer,
});

Standalone

This package contains a webpack UMD bundle which contains everything that you need except react. Here is an example:

<!DOCTYPE html>
<html>
<head>
  <script src="node_modules/react/umd/react.development.js"></script>
  <script src="node_modules/react-dom/umd/react-dom.development.js"></script>
  <script src="node_modules/performr-runner-result-graph/dist/bundle.js"></script>
  <link rel="stylesheet" type="text/css" href="node_modules/performr-runner-result-graph/dist/bundle.css">
  <style>
    #upload {
      position: absolute;
      top: 0;
      left: 0;
      z-index: 1;
    }
    #demo-container > .PerformrRunnerResultGraph {
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
        bottom: 0;
    }
  </style>
</head>
<body>
<input id="upload" type="file"/>
<div id="demo-container"></div>
<script>
  const render = resultObject => {
    const {parseResultObject, default: PerformrRunnerResultGraphComponent} = PerformrRunnerResultGraph;

    window.myResultObject = parseResultObject(resultObject.result);
    const instanceKey = 'foo';

    window.myResultGraph = React.createElement(PerformrRunnerResultGraphComponent, {
      resultObject: window.myResultObject,
      instanceKey,
    });

    const container = document.querySelector('#demo-container');
    ReactDOM.unmountComponentAtNode(container);
    ReactDOM.render(
      window.myResultGraph,
      container
    );
  };

  document.querySelector('#upload').addEventListener('change', e => {
    const {files} = e.target;

    if (!files.length) {
      return;
    }

    const reader = new FileReader();
    reader.onload = () => {
      try {
        ReactDOM.unmountComponentAtNode(document.querySelector('#demo-container'));
        const resultObject = JSON.parse(reader.result);
        render(resultObject);
      }
      catch (err) {
        console.error('Parsing failed', err);
      }
    };
    reader.readAsText(files[0]);
  });
</script>
</body>
</html>

Readme

Keywords

none

Package Sidebar

Install

npm i performr-runner-result-graph

Weekly Downloads

5

Version

7.0.2

License

MIT

Unpacked Size

2.42 MB

Total Files

63

Last publish

Collaborators

  • joris-van-der-wel