@atlaskit/editor-toolbar-model 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/ui/toolbar-model-renderer/ToolbarRendererNew.js +95 -0
  3. package/dist/cjs/ui/toolbar-model-renderer/ToolbarRendererOld.js +180 -0
  4. package/dist/cjs/ui/toolbar-model-renderer/common.js +26 -0
  5. package/dist/cjs/ui/toolbar-model-renderer/index.js +14 -171
  6. package/dist/cjs/ui/toolbar-model-renderer/types.js +5 -0
  7. package/dist/es2019/ui/toolbar-model-renderer/ToolbarRendererNew.js +83 -0
  8. package/dist/es2019/ui/toolbar-model-renderer/ToolbarRendererOld.js +162 -0
  9. package/dist/es2019/ui/toolbar-model-renderer/common.js +8 -0
  10. package/dist/es2019/ui/toolbar-model-renderer/index.js +14 -157
  11. package/dist/es2019/ui/toolbar-model-renderer/types.js +1 -0
  12. package/dist/esm/ui/toolbar-model-renderer/ToolbarRendererNew.js +88 -0
  13. package/dist/esm/ui/toolbar-model-renderer/ToolbarRendererOld.js +173 -0
  14. package/dist/esm/ui/toolbar-model-renderer/common.js +20 -0
  15. package/dist/esm/ui/toolbar-model-renderer/index.js +14 -171
  16. package/dist/esm/ui/toolbar-model-renderer/types.js +1 -0
  17. package/dist/types/ui/toolbar-model-renderer/ToolbarRendererNew.d.ts +3 -0
  18. package/dist/types/ui/toolbar-model-renderer/ToolbarRendererOld.d.ts +3 -0
  19. package/dist/types/ui/toolbar-model-renderer/common.d.ts +9 -0
  20. package/dist/types/ui/toolbar-model-renderer/index.d.ts +1 -20
  21. package/dist/types/ui/toolbar-model-renderer/types.d.ts +19 -0
  22. package/dist/types-ts4.5/ui/toolbar-model-renderer/ToolbarRendererNew.d.ts +3 -0
  23. package/dist/types-ts4.5/ui/toolbar-model-renderer/ToolbarRendererOld.d.ts +3 -0
  24. package/dist/types-ts4.5/ui/toolbar-model-renderer/common.d.ts +9 -0
  25. package/dist/types-ts4.5/ui/toolbar-model-renderer/index.d.ts +1 -20
  26. package/dist/types-ts4.5/ui/toolbar-model-renderer/types.d.ts +19 -0
  27. package/package.json +11 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/editor-toolbar-model
2
2
 
3
+ ## 0.2.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 0.2.2
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
3
15
  ## 0.2.1
4
16
 
5
17
  ### Patch Changes
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ToolbarModelRenderer = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _common = require("./common");
11
+ var hasParents = function hasParents(component) {
12
+ return component.type !== 'toolbar';
13
+ };
14
+ var getChildTypesForParent = function getChildTypesForParent(parentType) {
15
+ switch (parentType) {
16
+ case 'toolbar':
17
+ return ['section'];
18
+ case 'section':
19
+ return ['group'];
20
+ case 'group':
21
+ return ['button', 'menu'];
22
+ case 'menu':
23
+ case 'nested-menu':
24
+ return ['menu-section'];
25
+ case 'menu-section':
26
+ return ['menu-item', 'nested-menu'];
27
+ default:
28
+ return [];
29
+ }
30
+ };
31
+ var getFallbackComponent = function getFallbackComponent(type, fallbacks) {
32
+ switch (type) {
33
+ case 'group':
34
+ return fallbacks.group;
35
+ case 'menu-section':
36
+ return fallbacks.menuSection;
37
+ case 'section':
38
+ return fallbacks.section;
39
+ default:
40
+ return _common.NoOp;
41
+ }
42
+ };
43
+ var _ComponentRenderer = function ComponentRenderer(_ref) {
44
+ var component = _ref.component,
45
+ parents = _ref.parents,
46
+ allComponents = _ref.allComponents,
47
+ fallbacks = _ref.fallbacks;
48
+ var childTypes = getChildTypesForParent(component.type);
49
+ var children = (0, _common.getSortedChildren)(allComponents.filter(function (comp) {
50
+ return childTypes.includes(comp.type);
51
+ }), component.key);
52
+ if ((component.type === 'menu' || component.type === 'group' || component.type === 'nested-menu' || component.type === 'menu-section') && children.length === 0) {
53
+ return null;
54
+ }
55
+ var Component = component.component || getFallbackComponent(component.type, fallbacks);
56
+ var newParents = [].concat((0, _toConsumableArray2.default)(parents), [{
57
+ key: component.key,
58
+ type: component.type
59
+ }]);
60
+ if (children.length === 0) {
61
+ return /*#__PURE__*/_react.default.createElement(Component, {
62
+ parents: parents
63
+ }, null);
64
+ }
65
+ return /*#__PURE__*/_react.default.createElement(Component, {
66
+ parents: parents
67
+ }, children.map(function (child) {
68
+ return /*#__PURE__*/_react.default.createElement(_ComponentRenderer, {
69
+ key: child.key,
70
+ component: child,
71
+ parents: newParents,
72
+ allComponents: allComponents,
73
+ fallbacks: fallbacks
74
+ });
75
+ }));
76
+ };
77
+ var ToolbarModelRenderer = exports.ToolbarModelRenderer = function ToolbarModelRenderer(_ref2) {
78
+ var toolbar = _ref2.toolbar,
79
+ components = _ref2.components,
80
+ fallbacks = _ref2.fallbacks;
81
+ var ToolbarComponent = toolbar.component || _common.NoOp;
82
+ var sections = (0, _common.getSortedChildren)(components.filter(_common.isSection), toolbar.key);
83
+ return /*#__PURE__*/_react.default.createElement(ToolbarComponent, null, sections.map(function (section) {
84
+ return /*#__PURE__*/_react.default.createElement(_ComponentRenderer, {
85
+ key: section.key,
86
+ component: section,
87
+ parents: [{
88
+ key: toolbar.key,
89
+ type: toolbar.type
90
+ }],
91
+ allComponents: components.filter(hasParents),
92
+ fallbacks: fallbacks
93
+ });
94
+ }));
95
+ };
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.ToolbarModelRenderer = void 0;
8
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _common = require("./common");
11
+ var isGroup = function isGroup(component) {
12
+ return component.type === 'group';
13
+ };
14
+ var isToolbarItem = function isToolbarItem(component) {
15
+ return component.type === 'button' || component.type === 'menu';
16
+ };
17
+ var isToolbarMenuSection = function isToolbarMenuSection(component) {
18
+ return component.type === 'menu-section';
19
+ };
20
+ var isToolbarMenuItem = function isToolbarMenuItem(component) {
21
+ return component.type === 'menu-item' || component.type === 'menu-section';
22
+ };
23
+ var isToolbarMenuItemOrNestedMenu = function isToolbarMenuItemOrNestedMenu(component) {
24
+ return component.type === 'menu-item' || component.type === 'menu-section' || component.type === 'nested-menu';
25
+ };
26
+ var getSortedChildren = function getSortedChildren(components, parentKey) {
27
+ return components.filter(function (component) {
28
+ return component.parents.some(function (parent) {
29
+ return parent.key === parentKey;
30
+ });
31
+ }).sort(function (a, b) {
32
+ var _a$parents$find, _b$parents$find;
33
+ return (((_a$parents$find = a.parents.find(function (p) {
34
+ return p.key === parentKey;
35
+ })) === null || _a$parents$find === void 0 ? void 0 : _a$parents$find.rank) || 0) - (((_b$parents$find = b.parents.find(function (p) {
36
+ return p.key === parentKey;
37
+ })) === null || _b$parents$find === void 0 ? void 0 : _b$parents$find.rank) || 0);
38
+ });
39
+ };
40
+ var ToolbarModelRenderer = exports.ToolbarModelRenderer = function ToolbarModelRenderer(_ref) {
41
+ var toolbar = _ref.toolbar,
42
+ components = _ref.components,
43
+ fallbacks = _ref.fallbacks;
44
+ var sections = getSortedChildren(components.filter(_common.isSection), toolbar.key);
45
+ var groups = components.filter(isGroup);
46
+ var toolbarItems = components.filter(isToolbarItem);
47
+ var menuSections = components.filter(isToolbarMenuSection);
48
+ var menuItems = components.filter(isToolbarMenuItem);
49
+ var menuItemsAndNestedMenus = components.filter(isToolbarMenuItemOrNestedMenu);
50
+ var renderToolbarItem = function renderToolbarItem(_ref2) {
51
+ var item = _ref2.item,
52
+ index = _ref2.index,
53
+ parents = _ref2.parents;
54
+ if (item.type === 'menu') {
55
+ var menuComponents = getSortedChildren(menuSections, item.key);
56
+ if (menuComponents.length === 0) {
57
+ return null;
58
+ }
59
+ var Menu = item.component || _common.NoOp;
60
+ return /*#__PURE__*/_react.default.createElement(Menu, {
61
+ key: item.key,
62
+ parents: parents
63
+ }, menuComponents.map(function (menuSection) {
64
+ var menuItemsInSection = getSortedChildren(menuItemsAndNestedMenus, menuSection.key);
65
+ var MenuSection = menuSection.component || fallbacks.menuSection;
66
+ return /*#__PURE__*/_react.default.createElement(MenuSection, {
67
+ key: menuSection.key,
68
+ parents: [].concat((0, _toConsumableArray2.default)(parents), [{
69
+ key: item.key,
70
+ type: item.type
71
+ }])
72
+ }, menuItemsInSection.map(function (menuItem) {
73
+ if (menuItem.type === 'nested-menu') {
74
+ var nestedMenuComponents = getSortedChildren(menuSections, menuItem.key);
75
+ var NestedMenu = menuItem.component;
76
+ return /*#__PURE__*/_react.default.createElement(NestedMenu, {
77
+ key: menuItem.key,
78
+ parents: [].concat((0, _toConsumableArray2.default)(parents), [{
79
+ key: item.key,
80
+ type: item.type
81
+ }, {
82
+ key: menuSection.key,
83
+ type: menuSection.type
84
+ }])
85
+ }, nestedMenuComponents.map(function (nestedMenuSection) {
86
+ var menuItemsInNestedMenuSection = getSortedChildren(menuItems, nestedMenuSection.key);
87
+ var NestedMenuSection = nestedMenuSection.component || fallbacks.menuSection;
88
+ return /*#__PURE__*/_react.default.createElement(NestedMenuSection, {
89
+ key: nestedMenuSection.key,
90
+ parents: [].concat((0, _toConsumableArray2.default)(parents), [{
91
+ key: item.key,
92
+ type: item.type
93
+ }, {
94
+ key: menuSection.key,
95
+ type: menuSection.type
96
+ }, {
97
+ key: menuItem.key,
98
+ type: menuItem.type
99
+ }])
100
+ }, menuItemsInNestedMenuSection.map(function (nestedMenuItem) {
101
+ var NestedMenuItem = nestedMenuItem.component || _common.NoOp;
102
+ return /*#__PURE__*/_react.default.createElement(NestedMenuItem, {
103
+ key: nestedMenuItem.key,
104
+ parents: [].concat((0, _toConsumableArray2.default)(parents), [{
105
+ key: item.key,
106
+ type: item.type
107
+ }, {
108
+ key: menuSection.key,
109
+ type: menuSection.type
110
+ }, {
111
+ key: menuItem.key,
112
+ type: menuItem.type
113
+ }, {
114
+ key: nestedMenuSection.key,
115
+ type: nestedMenuSection.type
116
+ }])
117
+ });
118
+ }));
119
+ }));
120
+ }
121
+ var MenuItem = menuItem.component || _common.NoOp;
122
+ return /*#__PURE__*/_react.default.createElement(MenuItem, {
123
+ key: menuItem.key,
124
+ parents: [].concat((0, _toConsumableArray2.default)(parents), [{
125
+ key: item.key,
126
+ type: item.type
127
+ }, {
128
+ key: menuSection.key,
129
+ type: menuSection.type
130
+ }])
131
+ });
132
+ }));
133
+ }));
134
+ }
135
+ var Button = item.component || _common.NoOp;
136
+ return /*#__PURE__*/_react.default.createElement(Button, {
137
+ key: item.key,
138
+ parents: parents
139
+ });
140
+ };
141
+ var renderGroup = function renderGroup(group, parents) {
142
+ var groupItems = getSortedChildren(toolbarItems, group.key);
143
+ if (groupItems.length === 0) {
144
+ return null;
145
+ }
146
+ var Group = group.component || fallbacks.group;
147
+ return /*#__PURE__*/_react.default.createElement(Group, {
148
+ key: group.key,
149
+ parents: parents
150
+ }, groupItems.map(function (item, index) {
151
+ return renderToolbarItem({
152
+ item: item,
153
+ index: index,
154
+ parents: [].concat((0, _toConsumableArray2.default)(parents), [{
155
+ key: group.key,
156
+ type: group.type
157
+ }])
158
+ });
159
+ }));
160
+ };
161
+ var renderSection = function renderSection(section) {
162
+ var sectionGroups = getSortedChildren(groups, section.key);
163
+ var Section = section.component || fallbacks.section;
164
+ var parents = [{
165
+ key: toolbar.key,
166
+ type: toolbar.type
167
+ }];
168
+ return /*#__PURE__*/_react.default.createElement(Section, {
169
+ key: section.key,
170
+ parents: parents
171
+ }, sectionGroups.map(function (group) {
172
+ return renderGroup(group, [].concat(parents, [{
173
+ key: section.key,
174
+ type: section.type
175
+ }]));
176
+ }));
177
+ };
178
+ var ToolbarComponent = toolbar.component || _common.NoOp;
179
+ return /*#__PURE__*/_react.default.createElement(ToolbarComponent, null, sections.map(renderSection));
180
+ };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isSection = exports.getSortedChildren = exports.NoOp = void 0;
7
+ var getSortedChildren = exports.getSortedChildren = function getSortedChildren(components, parentKey) {
8
+ return components.filter(function (component) {
9
+ return component.parents.some(function (parent) {
10
+ return parent.key === parentKey;
11
+ });
12
+ }).sort(function (a, b) {
13
+ var _a$parents$find, _b$parents$find;
14
+ return (((_a$parents$find = a.parents.find(function (p) {
15
+ return p.key === parentKey;
16
+ })) === null || _a$parents$find === void 0 ? void 0 : _a$parents$find.rank) || 0) - (((_b$parents$find = b.parents.find(function (p) {
17
+ return p.key === parentKey;
18
+ })) === null || _b$parents$find === void 0 ? void 0 : _b$parents$find.rank) || 0);
19
+ });
20
+ };
21
+ var NoOp = exports.NoOp = function NoOp(props) {
22
+ return null;
23
+ };
24
+ var isSection = exports.isSection = function isSection(component) {
25
+ return component.type === 'section';
26
+ };
@@ -5,181 +5,24 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.ToolbarModelRenderer = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
8
  var _react = _interopRequireDefault(require("react"));
10
- var NoOp = function NoOp(props) {
11
- return null;
12
- };
13
- var isSection = function isSection(component) {
14
- return component.type === 'section';
15
- };
16
- var isGroup = function isGroup(component) {
17
- return component.type === 'group';
18
- };
19
- var isToolbarItem = function isToolbarItem(component) {
20
- return component.type === 'button' || component.type === 'menu';
21
- };
22
- var isToolbarMenuSection = function isToolbarMenuSection(component) {
23
- return component.type === 'menu-section';
24
- };
25
- var isToolbarMenuItem = function isToolbarMenuItem(component) {
26
- return component.type === 'menu-item' || component.type === 'menu-section';
27
- };
28
- var isToolbarMenuItemOrNestedMenu = function isToolbarMenuItemOrNestedMenu(component) {
29
- return component.type === 'menu-item' || component.type === 'menu-section' || component.type === 'nested-menu';
30
- };
31
- var getSortedChildren = function getSortedChildren(components, parentKey) {
32
- return components.filter(function (component) {
33
- return component.parents.some(function (parent) {
34
- return parent.key === parentKey;
35
- });
36
- }).sort(function (a, b) {
37
- var _a$parents$find, _b$parents$find;
38
- return (((_a$parents$find = a.parents.find(function (p) {
39
- return p.key === parentKey;
40
- })) === null || _a$parents$find === void 0 ? void 0 : _a$parents$find.rank) || 0) - (((_b$parents$find = b.parents.find(function (p) {
41
- return p.key === parentKey;
42
- })) === null || _b$parents$find === void 0 ? void 0 : _b$parents$find.rank) || 0);
43
- });
44
- };
9
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
10
+ var _ToolbarRendererNew = require("./ToolbarRendererNew");
11
+ var _ToolbarRendererOld = require("./ToolbarRendererOld");
45
12
  var ToolbarModelRenderer = exports.ToolbarModelRenderer = function ToolbarModelRenderer(_ref) {
46
13
  var toolbar = _ref.toolbar,
47
14
  components = _ref.components,
48
15
  fallbacks = _ref.fallbacks;
49
- var sections = getSortedChildren(components.filter(isSection), toolbar.key);
50
- var groups = components.filter(isGroup);
51
- var toolbarItems = components.filter(isToolbarItem);
52
- var menuSections = components.filter(isToolbarMenuSection);
53
- var menuItems = components.filter(isToolbarMenuItem);
54
- var menuItemsAndNestedMenus = components.filter(isToolbarMenuItemOrNestedMenu);
55
- var renderToolbarItem = function renderToolbarItem(_ref2) {
56
- var item = _ref2.item,
57
- index = _ref2.index,
58
- parents = _ref2.parents;
59
- if (item.type === 'menu') {
60
- var menuComponents = getSortedChildren(menuSections, item.key);
61
- if (menuComponents.length === 0) {
62
- return null;
63
- }
64
- var Menu = item.component || NoOp;
65
- return /*#__PURE__*/_react.default.createElement(Menu, {
66
- key: item.key,
67
- parents: parents
68
- }, menuComponents.map(function (menuSection) {
69
- var menuItemsInSection = getSortedChildren(menuItemsAndNestedMenus, menuSection.key);
70
- var MenuSection = menuSection.component || fallbacks.menuSection;
71
- return /*#__PURE__*/_react.default.createElement(MenuSection, {
72
- key: menuSection.key,
73
- parents: [].concat((0, _toConsumableArray2.default)(parents), [{
74
- key: item.key,
75
- type: item.type
76
- }])
77
- }, menuItemsInSection.map(function (menuItem) {
78
- if (menuItem.type === 'nested-menu') {
79
- var nestedMenuComponents = getSortedChildren(menuSections, menuItem.key);
80
- var NestedMenu = menuItem.component;
81
- return /*#__PURE__*/_react.default.createElement(NestedMenu, {
82
- key: menuItem.key,
83
- parents: [].concat((0, _toConsumableArray2.default)(parents), [{
84
- key: item.key,
85
- type: item.type
86
- }, {
87
- key: menuSection.key,
88
- type: menuSection.type
89
- }])
90
- }, nestedMenuComponents.map(function (nestedMenuSection) {
91
- var menuItemsInNestedMenuSection = getSortedChildren(menuItems, nestedMenuSection.key);
92
- var NestedMenuSection = nestedMenuSection.component || fallbacks.menuSection;
93
- return /*#__PURE__*/_react.default.createElement(NestedMenuSection, {
94
- key: nestedMenuSection.key,
95
- parents: [].concat((0, _toConsumableArray2.default)(parents), [{
96
- key: item.key,
97
- type: item.type
98
- }, {
99
- key: menuSection.key,
100
- type: menuSection.type
101
- }, {
102
- key: menuItem.key,
103
- type: menuItem.type
104
- }])
105
- }, menuItemsInNestedMenuSection.map(function (nestedMenuItem) {
106
- var NestedMenuItem = nestedMenuItem.component || NoOp;
107
- return /*#__PURE__*/_react.default.createElement(NestedMenuItem, {
108
- key: nestedMenuItem.key,
109
- parents: [].concat((0, _toConsumableArray2.default)(parents), [{
110
- key: item.key,
111
- type: item.type
112
- }, {
113
- key: menuSection.key,
114
- type: menuSection.type
115
- }, {
116
- key: menuItem.key,
117
- type: menuItem.type
118
- }, {
119
- key: nestedMenuSection.key,
120
- type: nestedMenuSection.type
121
- }])
122
- });
123
- }));
124
- }));
125
- }
126
- var MenuItem = menuItem.component || NoOp;
127
- return /*#__PURE__*/_react.default.createElement(MenuItem, {
128
- key: menuItem.key,
129
- parents: [].concat((0, _toConsumableArray2.default)(parents), [{
130
- key: item.key,
131
- type: item.type
132
- }, {
133
- key: menuSection.key,
134
- type: menuSection.type
135
- }])
136
- });
137
- }));
138
- }));
139
- }
140
- var Button = item.component || NoOp;
141
- return /*#__PURE__*/_react.default.createElement(Button, {
142
- key: item.key,
143
- parents: parents
16
+ if ((0, _platformFeatureFlags.fg)('platform_editor_toolbar_aifc_renderer_rewrite')) {
17
+ return /*#__PURE__*/_react.default.createElement(_ToolbarRendererNew.ToolbarModelRenderer, {
18
+ toolbar: toolbar,
19
+ components: components,
20
+ fallbacks: fallbacks
144
21
  });
145
- };
146
- var renderGroup = function renderGroup(group, parents) {
147
- var groupItems = getSortedChildren(toolbarItems, group.key);
148
- if (groupItems.length === 0) {
149
- return null;
150
- }
151
- var Group = group.component || fallbacks.group;
152
- return /*#__PURE__*/_react.default.createElement(Group, {
153
- key: group.key,
154
- parents: parents
155
- }, groupItems.map(function (item, index) {
156
- return renderToolbarItem({
157
- item: item,
158
- index: index,
159
- parents: [].concat((0, _toConsumableArray2.default)(parents), [{
160
- key: group.key,
161
- type: group.type
162
- }])
163
- });
164
- }));
165
- };
166
- var renderSection = function renderSection(section) {
167
- var sectionGroups = getSortedChildren(groups, section.key);
168
- var Section = section.component || fallbacks.section;
169
- var parents = [{
170
- key: toolbar.key,
171
- type: toolbar.type
172
- }];
173
- return /*#__PURE__*/_react.default.createElement(Section, {
174
- key: section.key,
175
- parents: parents
176
- }, sectionGroups.map(function (group) {
177
- return renderGroup(group, [].concat(parents, [{
178
- key: section.key,
179
- type: section.type
180
- }]));
181
- }));
182
- };
183
- var ToolbarComponent = toolbar.component || NoOp;
184
- return /*#__PURE__*/_react.default.createElement(ToolbarComponent, null, sections.map(renderSection));
22
+ }
23
+ return /*#__PURE__*/_react.default.createElement(_ToolbarRendererOld.ToolbarModelRenderer, {
24
+ toolbar: toolbar,
25
+ components: components,
26
+ fallbacks: fallbacks
27
+ });
185
28
  };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,83 @@
1
+ import React from 'react';
2
+ import { getSortedChildren, isSection, NoOp } from './common';
3
+ const hasParents = component => {
4
+ return component.type !== 'toolbar';
5
+ };
6
+ const getChildTypesForParent = parentType => {
7
+ switch (parentType) {
8
+ case 'toolbar':
9
+ return ['section'];
10
+ case 'section':
11
+ return ['group'];
12
+ case 'group':
13
+ return ['button', 'menu'];
14
+ case 'menu':
15
+ case 'nested-menu':
16
+ return ['menu-section'];
17
+ case 'menu-section':
18
+ return ['menu-item', 'nested-menu'];
19
+ default:
20
+ return [];
21
+ }
22
+ };
23
+ const getFallbackComponent = (type, fallbacks) => {
24
+ switch (type) {
25
+ case 'group':
26
+ return fallbacks.group;
27
+ case 'menu-section':
28
+ return fallbacks.menuSection;
29
+ case 'section':
30
+ return fallbacks.section;
31
+ default:
32
+ return NoOp;
33
+ }
34
+ };
35
+ const ComponentRenderer = ({
36
+ component,
37
+ parents,
38
+ allComponents,
39
+ fallbacks
40
+ }) => {
41
+ const childTypes = getChildTypesForParent(component.type);
42
+ const children = getSortedChildren(allComponents.filter(comp => childTypes.includes(comp.type)), component.key);
43
+ if ((component.type === 'menu' || component.type === 'group' || component.type === 'nested-menu' || component.type === 'menu-section') && children.length === 0) {
44
+ return null;
45
+ }
46
+ const Component = component.component || getFallbackComponent(component.type, fallbacks);
47
+ const newParents = [...parents, {
48
+ key: component.key,
49
+ type: component.type
50
+ }];
51
+ if (children.length === 0) {
52
+ return /*#__PURE__*/React.createElement(Component, {
53
+ parents: parents
54
+ }, null);
55
+ }
56
+ return /*#__PURE__*/React.createElement(Component, {
57
+ parents: parents
58
+ }, children.map(child => /*#__PURE__*/React.createElement(ComponentRenderer, {
59
+ key: child.key,
60
+ component: child,
61
+ parents: newParents,
62
+ allComponents: allComponents,
63
+ fallbacks: fallbacks
64
+ })));
65
+ };
66
+ export const ToolbarModelRenderer = ({
67
+ toolbar,
68
+ components,
69
+ fallbacks
70
+ }) => {
71
+ const ToolbarComponent = toolbar.component || NoOp;
72
+ const sections = getSortedChildren(components.filter(isSection), toolbar.key);
73
+ return /*#__PURE__*/React.createElement(ToolbarComponent, null, sections.map(section => /*#__PURE__*/React.createElement(ComponentRenderer, {
74
+ key: section.key,
75
+ component: section,
76
+ parents: [{
77
+ key: toolbar.key,
78
+ type: toolbar.type
79
+ }],
80
+ allComponents: components.filter(hasParents),
81
+ fallbacks: fallbacks
82
+ })));
83
+ };