mirror of
https://github.com/storybookjs/storybook.git
synced 2025-04-06 00:41:05 +08:00
156 lines
4.4 KiB
JavaScript
156 lines
4.4 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _from = require('babel-runtime/core-js/array/from');
|
|
|
|
var _from2 = _interopRequireDefault(_from);
|
|
|
|
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
|
|
|
|
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
|
|
|
|
var _extends2 = require('babel-runtime/helpers/extends');
|
|
|
|
var _extends3 = _interopRequireDefault(_extends2);
|
|
|
|
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
|
|
|
|
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
|
|
|
|
var _createClass2 = require('babel-runtime/helpers/createClass');
|
|
|
|
var _createClass3 = _interopRequireDefault(_createClass2);
|
|
|
|
var _uuid = require('uuid');
|
|
|
|
var _uuid2 = _interopRequireDefault(_uuid);
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
var ClientApi = function () {
|
|
function ClientApi(_ref) {
|
|
var pageBus = _ref.pageBus;
|
|
var storyStore = _ref.storyStore;
|
|
(0, _classCallCheck3.default)(this, ClientApi);
|
|
|
|
this._pageBus = pageBus;
|
|
this._storyStore = storyStore;
|
|
this._addons = {};
|
|
this._globalDecorators = [];
|
|
}
|
|
|
|
(0, _createClass3.default)(ClientApi, [{
|
|
key: 'setAddon',
|
|
value: function setAddon(addon) {
|
|
this._addons = (0, _extends3.default)({}, this._addons, addon);
|
|
}
|
|
}, {
|
|
key: 'addDecorator',
|
|
value: function addDecorator(decorator) {
|
|
this._globalDecorators.push(decorator);
|
|
}
|
|
}, {
|
|
key: 'storiesOf',
|
|
value: function storiesOf(kind, m) {
|
|
var _this = this;
|
|
|
|
if (m && m.hot) {
|
|
m.hot.dispose(function () {
|
|
_this._storyStore.removeStoryKind(kind);
|
|
});
|
|
}
|
|
|
|
var localDecorators = [];
|
|
var api = {
|
|
kind: kind
|
|
};
|
|
|
|
// apply addons
|
|
for (var name in this._addons) {
|
|
if (this._addons.hasOwnProperty(name)) {
|
|
(function () {
|
|
var addon = _this._addons[name];
|
|
api[name] = function () {
|
|
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
|
|
args[_key] = arguments[_key];
|
|
}
|
|
|
|
addon.apply(api, args);
|
|
return api;
|
|
};
|
|
})();
|
|
}
|
|
}
|
|
|
|
api.add = function (storyName, getStory) {
|
|
// Wrap the getStory function with each decorator. The first
|
|
// decorator will wrap the story function. The second will
|
|
// wrap the first decorator and so on.
|
|
var decorators = [].concat(localDecorators, (0, _toConsumableArray3.default)(_this._globalDecorators));
|
|
|
|
var fn = decorators.reduce(function (decorated, decorator) {
|
|
return function (context) {
|
|
return decorator(function () {
|
|
return decorated(context);
|
|
}, context);
|
|
};
|
|
}, getStory);
|
|
|
|
// Add the fully decorated getStory function.
|
|
_this._storyStore.addStory(kind, storyName, fn);
|
|
return api;
|
|
};
|
|
|
|
api.addDecorator = function (decorator) {
|
|
localDecorators.push(decorator);
|
|
return api;
|
|
};
|
|
|
|
return api;
|
|
}
|
|
}, {
|
|
key: 'action',
|
|
value: function action(name) {
|
|
var pageBus = this._pageBus;
|
|
|
|
return function action() {
|
|
for (var _len2 = arguments.length, _args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
_args[_key2] = arguments[_key2];
|
|
}
|
|
|
|
var args = (0, _from2.default)(_args);
|
|
|
|
// Remove events from the args. Otherwise, it creates a huge JSON string.
|
|
args = args.map(function (arg) {
|
|
if (arg && typeof arg.preventDefault === 'function') {
|
|
return '[SyntheticEvent]';
|
|
}
|
|
return arg;
|
|
});
|
|
|
|
var id = _uuid2.default.v4();
|
|
var data = { name: name, args: args };
|
|
|
|
pageBus.emit('addAction', { action: { data: data, id: id } });
|
|
};
|
|
}
|
|
}, {
|
|
key: 'linkTo',
|
|
value: function linkTo(kind, story) {
|
|
var pageBus = this._pageBus;
|
|
|
|
return function linkTo() {
|
|
var resolvedKind = typeof kind === 'function' ? kind.apply(undefined, arguments) : kind;
|
|
var resolvedStory = typeof story === 'function' ? story.apply(undefined, arguments) : story;
|
|
|
|
pageBus.emit('selectStory', { kind: resolvedKind, story: resolvedStory });
|
|
};
|
|
}
|
|
}]);
|
|
return ClientApi;
|
|
}();
|
|
|
|
exports.default = ClientApi; |