@storybook/addon-actions
Version:
Action Logger addon for storybook
87 lines (66 loc) • 2.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _from = require('babel-runtime/core-js/array/from');
var _from2 = _interopRequireDefault(_from);
exports.action = action;
exports.decorateAction = decorateAction;
var _addons = require('@storybook/addons');
var _addons2 = _interopRequireDefault(_addons);
var _jsonStringifySafe = require('json-stringify-safe');
var _jsonStringifySafe2 = _interopRequireDefault(_jsonStringifySafe);
var _v = require('uuid/v1');
var _v2 = _interopRequireDefault(_v);
var _ = require('./');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable no-underscore-dangle */
function _format(arg) {
if (arg && typeof arg.preventDefault !== 'undefined') {
return (0, _jsonStringifySafe2.default)('[SyntheticEvent]');
}
return (0, _jsonStringifySafe2.default)(arg);
}
function action(name) {
// eslint-disable-next-line no-unused-vars, func-names
var handler = function handler() {
for (var _len = arguments.length, _args = Array(_len), _key = 0; _key < _len; _key++) {
_args[_key] = arguments[_key];
}
var args = (0, _from2.default)(_args).map(_format);
var channel = _addons2.default.getChannel();
var id = (0, _v2.default)();
channel.emit(_.EVENT_ID, {
id: id,
data: { name: name, args: args }
});
};
// some day when {[name]: function() {}} syntax is not transpiled by babel
// we can get rid of this eval as by ES2015 spec the above function gets the
// name `name`, but babel transpiles to Object.defineProperty which doesn't do
// the same.
//
// Ref: https://bocoup.com/weblog/whats-in-a-function-name
var fnName = name && typeof name === 'string' ? name.replace(/\W+/g, '_') : 'action';
// eslint-disable-next-line no-eval
var named = eval('(function ' + fnName + '() { return handler.apply(this, arguments) })');
return named;
}
function decorateAction(decorators) {
// eslint-disable-next-line no-unused-vars, func-names
return function (name) {
var callAction = action(name);
// eslint-disable-next-line no-unused-vars, func-names
return function () {
for (var _len2 = arguments.length, _args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
_args[_key2] = arguments[_key2];
}
var decorated = decorators.reduce(function (args, fn) {
return fn(args);
}, _args);
callAction.apply(undefined, (0, _toConsumableArray3.default)(decorated));
};
};
}