Skip to content

Commit

Permalink
Merge remote-tracking branch 'storybooks/master' into feature/mobile-…
Browse files Browse the repository at this point in the history
…navigation

# Conflicts:
#	package.json
#	packages/storybook-ui/package.json
#	packages/storybook-ui/src/modules/ui/components/layout/index.js
  • Loading branch information
Andrew Fuller committed May 2, 2017
1 parent 4dfbc88 commit 2a97b17
Show file tree
Hide file tree
Showing 358 changed files with 10,996 additions and 12,817 deletions.
9 changes: 9 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"presets": ["env", "stage-0", "react"],
"plugins": [
["transform-runtime", {
"polyfill": false,
"regenerator": true
}]
]
}
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ npm-shrinkwrap.json
dist
.tern-port
*.DS_Store
.jest
.cache
junit.xml
coverage/
*.lerna_backup
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
'use strict';var _createClass = function () {function defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}return function (Constructor, protoProps, staticProps) {if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;};}();var _shortcuts = require('./shortcuts');var _shortcuts2 = _interopRequireDefault(_shortcuts);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}var

MockClientStore = function () {function MockClientStore() {_classCallCheck(this, MockClientStore);}_createClass(MockClientStore, [{ key: 'update', value: function update(
cb) {
this.updateCallback = cb;
} }]);return MockClientStore;}();


describe('manager.shortcuts.actions.shortcuts', function () {
describe('setOptions', function () {
test('should update options', function () {
var clientStore = new MockClientStore();
_shortcuts2.default.setOptions({ clientStore: clientStore }, { abc: 10 });

var state = {
shortcutOptions: { bbc: 50, abc: 40 } };


var stateUpdates = clientStore.updateCallback(state);
expect(stateUpdates).toEqual({
shortcutOptions: { bbc: 50, abc: 10 } });

});

test('should only update options for the key already defined', function () {
var clientStore = new MockClientStore();
_shortcuts2.default.setOptions({ clientStore: clientStore }, { abc: 10, kki: 50 });

var state = {
shortcutOptions: { bbc: 50, abc: 40 } };


var stateUpdates = clientStore.updateCallback(state);
expect(stateUpdates).toEqual({
shortcutOptions: { bbc: 50, abc: 10 } });

});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'use strict';

var _layout = require('./layout');

describe('manager.ui.containers.layout', function () {
describe('mapper', function () {
test('should give correct data', function () {
var state = {
shortcutOptions: {
showLeftPanel: 'aa',
showDownPanel: 'bb',
goFullScreen: 'cc' } };


var data = (0, _layout.mapper)(state);

expect(data).toEqual(state.shortcutOptions);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
'use strict';var _react = require('react');var _react2 = _interopRequireDefault(_react);
var _enzyme = require('enzyme');
var _Panel = require('../Panel');var _Panel2 = _interopRequireDefault(_Panel);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}

describe('Panel', function () {
it('should subscribe to setKnobs event of channel', function () {
var testChannel = { on: jest.fn() };
(0, _enzyme.shallow)(_react2.default.createElement(_Panel2.default, { channel: testChannel }));
expect(testChannel.on).toHaveBeenCalledWith('addon:knobs:setKnobs', jasmine.any(Function));
});

describe('setKnobs handler', function () {
it('should read url params and set values for existing knobs', function () {
var handlers = {};

var testChannel = {
on: function on(e, handler) {
handlers[e] = handler;
},
emit: jest.fn() };


var testQueryParams = {
'knob-foo': 'test string',
bar: 'some other string' };


var testApi = {
getQueryParam: function getQueryParam(key) {return testQueryParams[key];},
setQueryParams: jest.fn() };


(0, _enzyme.shallow)(_react2.default.createElement(_Panel2.default, { channel: testChannel, api: testApi }));
var setKnobsHandler = handlers['addon:knobs:setKnobs'];

var knobs = {
foo: {
name: 'foo',
value: 'default string',
type: 'text' },

baz: {
name: 'baz',
value: 'another knob value',
type: 'text' } };



setKnobsHandler(knobs);
var knobFromUrl = {
name: 'foo',
value: testQueryParams['knob-foo'],
type: 'text' };

var e = 'addon:knobs:knobChange';
expect(testChannel.emit).toHaveBeenCalledWith(e, knobFromUrl);
});

it('should set query params when url params are already read', function () {
var handlers = {};

var testChannel = {
on: function on(e, handler) {
handlers[e] = handler;
},
emit: jest.fn() };


var testQueryParams = {
'knob-foo': 'test string',
bar: 'some other string' };


var testApi = {
getQueryParam: function getQueryParam(key) {return testQueryParams[key];},
setQueryParams: jest.fn() };


var wrapper = (0, _enzyme.shallow)(_react2.default.createElement(_Panel2.default, { channel: testChannel, api: testApi }));
var setKnobsHandler = handlers['addon:knobs:setKnobs'];

var knobs = {
foo: {
name: 'foo',
value: 'default string',
type: 'text' },

baz: {
name: 'baz',
value: 'another knob value',
type: 'text' } };



// Make it act like that url params are already checked
wrapper.instance().loadedFromUrl = true;

setKnobsHandler(knobs);
var knobFromStory = {
'knob-foo': knobs.foo.value,
'knob-baz': knobs.baz.value };


expect(testApi.setQueryParams).toHaveBeenCalledWith(knobFromStory);
});
});

describe('handleChange()', function () {
it('should set queryParams and emit knobChange event', function () {
var testChannel = {
on: jest.fn(),
emit: jest.fn() };


var testApi = {
getQueryParam: jest.fn(),
setQueryParams: jest.fn() };


var wrapper = (0, _enzyme.shallow)(_react2.default.createElement(_Panel2.default, { channel: testChannel, api: testApi }));

var testChangedKnob = {
name: 'foo',
value: 'changed text',
type: 'text' };

wrapper.instance().handleChange(testChangedKnob);
expect(testChannel.emit).toHaveBeenCalledWith('addon:knobs:knobChange', testChangedKnob);

var paramsChange = { 'knob-foo': 'changed text' };
expect(testApi.setQueryParams).toHaveBeenCalledWith(paramsChange);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _api = require('./api');var _api2 = _interopRequireDefault(_api);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}exports.default =

{
api: _api2.default };
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
'use strict';Object.defineProperty(exports, "__esModule", { value: true });var _react = require('react');var _react2 = _interopRequireDefault(_react);
var _header = require('./header');var _header2 = _interopRequireDefault(_header);
var _stories = require('./stories');var _stories2 = _interopRequireDefault(_stories);
var _text_filter = require('./text_filter');var _text_filter2 = _interopRequireDefault(_text_filter);
var _lodash = require('lodash.pick');var _lodash2 = _interopRequireDefault(_lodash);
var _lodash3 = require('lodash.isstring');var _lodash4 = _interopRequireDefault(_lodash3);
var _reactMedia = require('react-media');var _reactMedia2 = _interopRequireDefault(_reactMedia);

var _collapsible = require('../collapsible');var _collapsible2 = _interopRequireDefault(_collapsible);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}

var containerStyle = {
margin: '10px 0px 10px 10px' };


var scrollStyle = {
height: 'calc(100vh - 105px)',
overflow: 'auto' };


var mobileContainerStyle = {
marginLeft: '10px',
marginRight: '10px',
paddingTop: '10px' };


var mobileScrollStyle = {
maxHeight: 'calc(100vw + 100px)',
overflow: 'auto' };


var storyProps = ['stories', 'selectedKind', 'selectedStory', 'onSelectStory'];

var LeftPanel = function LeftPanel(props) {return (
_react2.default.createElement(_reactMedia2.default, { query: '(max-width: 650px)' },
function (matches) {return (
matches ?
_react2.default.createElement('div', { style: mobileContainerStyle },
_react2.default.createElement(_header2.default, {
name: props.name,
url: props.url,
openShortcutsHelp: props.openShortcutsHelp }),

_react2.default.createElement(_collapsible2.default, {
isActive: (0, _lodash4.default)(props.storyFilter),
title: 'component list' },

_react2.default.createElement(_text_filter2.default, {
text: props.storyFilter,
onClear: function onClear() {return props.onStoryFilter('');},
onChange: function onChange(text) {return props.onStoryFilter(text);} }),

props.stories &&
_react2.default.createElement('div', { style: mobileScrollStyle },
_react2.default.createElement(_stories2.default, (0, _lodash2.default)(props, storyProps))))) :





_react2.default.createElement('div', { style: containerStyle },
_react2.default.createElement(_header2.default, {
name: props.name,
url: props.url,
openShortcutsHelp: props.openShortcutsHelp }),

_react2.default.createElement(_text_filter2.default, {
text: props.storyFilter,
onClear: function onClear() {return props.onStoryFilter('');},
onChange: function onChange(text) {return props.onStoryFilter(text);} }),

_react2.default.createElement('div', { style: scrollStyle },
props.stories ? _react2.default.createElement(_stories2.default, (0, _lodash2.default)(props, storyProps)) : null)));}));};







LeftPanel.propTypes = {
stories: _react.PropTypes.array,
selectedKind: _react.PropTypes.string,
selectedStory: _react.PropTypes.string,
onSelectStory: _react.PropTypes.func,

storyFilter: _react.PropTypes.string,
onStoryFilter: _react.PropTypes.func,

openShortcutsHelp: _react.PropTypes.func,
name: _react.PropTypes.string,
url: _react.PropTypes.string };exports.default =


LeftPanel;
Loading

0 comments on commit 2a97b17

Please sign in to comment.