UNPKG

@storybook/addon-actions

Version:
87 lines (66 loc) 2.69 kB
'use strict'; 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)); }; }; }