react-alpha-beta
Version:
Simple declarative A/B testing component for React.
179 lines (145 loc) • 5.08 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends3 = require('babel-runtime/helpers/extends');
var _extends4 = _interopRequireDefault(_extends3);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _constants = require('../constants');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var DevTools = function (_React$Component) {
(0, _inherits3.default)(DevTools, _React$Component);
function DevTools(props) {
(0, _classCallCheck3.default)(this, DevTools);
var _this = (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(DevTools).call(this, props));
_this.onChange = function (event) {
var newAlphaBetaMap = (0, _extends4.default)({}, _this.state.alphaBetaMap, (0, _defineProperty3.default)({}, event.target.name, event.target.value));
_this.setState({
alphaBetaMap: newAlphaBetaMap,
hasChanged: true
});
var jsonStr = (0, _stringify2.default)(newAlphaBetaMap);
global.localStorage.setItem(_constants.localStorageKey, jsonStr);
};
try {
var jsonStr = global.localStorage.getItem(_constants.localStorageKey);
_this.state = {
alphaBetaMap: jsonStr && JSON.parse(jsonStr) || {},
hasChanged: false
};
} catch (err) {
_this.state = {
alphaBetaMap: {},
hasChanged: false
};
}
return _this;
}
(0, _createClass3.default)(DevTools, [{
key: 'renderExperiment',
value: function renderExperiment(id, value) {
return _react2.default.createElement(
'tr',
null,
_react2.default.createElement(
'td',
null,
id
),
_react2.default.createElement(
'td',
{ style: { 'display': 'flex', 'paddingLeft': '1em' } },
'0:',
_react2.default.createElement('input', { type: 'range', min: '0', max: '1', step: '0.01', name: id, value: value, onChange: this.onChange }),
':1 (',
value,
')'
)
);
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var alphaBetaMap = this.state.alphaBetaMap;
var refreshMessage = void 0;
if (this.state.hasChanged === true) {
refreshMessage = _react2.default.createElement(
'div',
{ style: {
fontSize: 'small',
color: 'red'
} },
'(Refresh this page for your changes to take effect)'
);
}
return _react2.default.createElement(
'div',
{ style: { position: 'fixed',
bottom: 0,
right: 0,
margin: '1em',
minWidth: '25%',
padding: '1em',
background: '#eee',
border: '2px solid #777' } },
_react2.default.createElement(
'label',
{ style: { 'textDecoration': 'underline' } },
'Dev Tools'
),
refreshMessage,
_react2.default.createElement(
'table',
null,
_react2.default.createElement(
'thead',
null,
_react2.default.createElement(
'tr',
null,
_react2.default.createElement(
'th',
null,
'Id'
),
_react2.default.createElement(
'th',
null,
'Value'
)
)
),
_react2.default.createElement(
'tbody',
null,
(0, _keys2.default)(alphaBetaMap).map(function (id) {
return _this2.renderExperiment(id, alphaBetaMap[id]);
})
)
)
);
}
}]);
return DevTools;
}(_react2.default.Component);
DevTools.displayName = 'DevTools';
DevTools.propTypes = {};
exports.default = DevTools;