UNPKG

2.48 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.parseConfig = parseConfig;
7
8var _slug = require('slug');
9
10var _slug2 = _interopRequireDefault(_slug);
11
12var _Wallboard = require('./components/Wallboard');
13
14var _Widget = require('./components/Widget');
15
16var _react = require('react');
17
18var _react2 = _interopRequireDefault(_react);
19
20var _invariant = require('invariant');
21
22var _invariant2 = _interopRequireDefault(_invariant);
23
24function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
26function createWidgetFromReactElement(element, board) {
27 var type = element.type;
28 var widget = Object.assign({}, type.defaultProps, element.props);
29 var idx = board.children.indexOf(element);
30
31 widget.id = board.slug + '-' + idx;
32
33 if (widget.children) {
34 widget.render = widget.children;
35 delete widget.children;
36 }
37
38 return widget;
39}
40
41function createWidgetsFromReactChildren(children, board) {
42 var widgets = [];
43
44 _react2.default.Children.forEach(children, function (element) {
45 if (_react2.default.isValidElement(element)) {
46 widgets.push(createWidgetFromReactElement(element, board));
47 }
48 });
49
50 return widgets;
51}
52
53function createBoardFromReactElement(element) {
54 var type = element.type;
55 var board = Object.assign({}, type.defaultProps, element.props);
56
57 board.slug = (0, _slug2.default)(board.name, { lower: true });
58
59 if (board.children) {
60 var widgets = createWidgetsFromReactChildren(board.children, board);
61
62 if (widgets.length) {
63 board.widgets = widgets;
64 }
65
66 delete board.children;
67 }
68
69 return board;
70}
71
72function createBoardsFromReactChildren(children) {
73 var boards = [];
74
75 _react2.default.Children.forEach(children, function (element) {
76 if (_react2.default.isValidElement(element)) {
77 boards.push(createBoardFromReactElement(element));
78 }
79 });
80
81 return boards;
82}
83
84function parseConfig(config) {
85 var result = {};
86
87 if (process.env.NODE_ENV !== 'production') {
88 if (!_react2.default.isValidElement(config)) {
89 (0, _invariant2.default)(false, 'Cyboard config need to be a react element of <Cyboard /> component.');
90 }
91 }
92
93 var boards = createBoardsFromReactChildren(config.props.children);
94
95 boards.forEach(function (board) {
96 result[board.slug] = board;
97 });
98
99 return result;
100}
\No newline at end of file