@agilemotion/oui-react-js 1.8.47 → 1.8.49

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 (170) hide show
  1. package/dist/ViewContext.js +7 -2
  2. package/dist/components/DocumentViewer.js +10 -5
  3. package/dist/components/Graph.js +1 -1
  4. package/dist/components/SocketManager.js +2 -1
  5. package/dist/components/StepperTitleBar.css +2 -2
  6. package/dist/components/Toolbar.js +1 -17
  7. package/dist/components/WordDocumentViewer.js +3 -3
  8. package/dist/components/dashboard/FoldingSideTabDashboard.bck.js +332 -0
  9. package/dist/components/dashboard/FoldingSideTabDashboard.css +5 -0
  10. package/dist/components/dashboard/FoldingSideTabDashboard.js +254 -124
  11. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.bck.js +321 -0
  12. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.css +164 -6
  13. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.js +251 -173
  14. package/dist/components/form/Form.js +0 -1
  15. package/dist/components/layout/View.css +27 -2
  16. package/dist/components/layout/View.js +7 -7
  17. package/dist/components/layout/ViewPort.js +4 -3
  18. package/dist/components/layout/Window.js +6 -6
  19. package/dist/components/media/ClosablePanel.css +1 -1
  20. package/dist/components/media/MediaSoupHelper.js +3 -2
  21. package/dist/components/media/Toolbar.js +34 -41
  22. package/dist/components/media/TrainingRoom.js +1 -1
  23. package/dist/components/media/VCRoomWorkspace.js +2 -2
  24. package/dist/view/Dashboard.js +11 -10
  25. package/dist/view/security/ChangePasswordBasic.js +5 -1
  26. package/dist/view/security/ForgotPasswordBasic.js +5 -1
  27. package/dist/view/security/LoginBasic.js +5 -1
  28. package/dist/view/security/LoginInteractionPortal.js +5 -1
  29. package/dist/view/security/ResetPasswordBasic.js +5 -1
  30. package/package.json +2 -5
  31. package/dist/assets/css/black-dashboard-react.css +0 -12531
  32. package/dist/assets/css/black-dashboard-react.css.map +0 -134
  33. package/dist/assets/css/black-dashboard-react.min.css +0 -1
  34. package/dist/assets/css/nucleo-icons.css +0 -543
  35. package/dist/assets/scss/black-dashboard-react/bootstrap/_alert.scss +0 -51
  36. package/dist/assets/scss/black-dashboard-react/bootstrap/_badge.scss +0 -47
  37. package/dist/assets/scss/black-dashboard-react/bootstrap/_breadcrumb.scss +0 -41
  38. package/dist/assets/scss/black-dashboard-react/bootstrap/_button-group.scss +0 -172
  39. package/dist/assets/scss/black-dashboard-react/bootstrap/_buttons.scss +0 -143
  40. package/dist/assets/scss/black-dashboard-react/bootstrap/_card.scss +0 -301
  41. package/dist/assets/scss/black-dashboard-react/bootstrap/_carousel.scss +0 -236
  42. package/dist/assets/scss/black-dashboard-react/bootstrap/_close.scss +0 -35
  43. package/dist/assets/scss/black-dashboard-react/bootstrap/_code.scss +0 -48
  44. package/dist/assets/scss/black-dashboard-react/bootstrap/_custom-forms.scss +0 -433
  45. package/dist/assets/scss/black-dashboard-react/bootstrap/_dropdown.scss +0 -166
  46. package/dist/assets/scss/black-dashboard-react/bootstrap/_forms.scss +0 -333
  47. package/dist/assets/scss/black-dashboard-react/bootstrap/_functions.scss +0 -86
  48. package/dist/assets/scss/black-dashboard-react/bootstrap/_grid.scss +0 -52
  49. package/dist/assets/scss/black-dashboard-react/bootstrap/_images.scss +0 -42
  50. package/dist/assets/scss/black-dashboard-react/bootstrap/_input-group.scss +0 -173
  51. package/dist/assets/scss/black-dashboard-react/bootstrap/_jumbotron.scss +0 -16
  52. package/dist/assets/scss/black-dashboard-react/bootstrap/_list-group.scss +0 -115
  53. package/dist/assets/scss/black-dashboard-react/bootstrap/_media.scss +0 -8
  54. package/dist/assets/scss/black-dashboard-react/bootstrap/_mixins.scss +0 -41
  55. package/dist/assets/scss/black-dashboard-react/bootstrap/_modal.scss +0 -180
  56. package/dist/assets/scss/black-dashboard-react/bootstrap/_nav.scss +0 -118
  57. package/dist/assets/scss/black-dashboard-react/bootstrap/_navbar.scss +0 -299
  58. package/dist/assets/scss/black-dashboard-react/bootstrap/_pagination.scss +0 -78
  59. package/dist/assets/scss/black-dashboard-react/bootstrap/_popover.scss +0 -185
  60. package/dist/assets/scss/black-dashboard-react/bootstrap/_print.scss +0 -141
  61. package/dist/assets/scss/black-dashboard-react/bootstrap/_progress.scss +0 -34
  62. package/dist/assets/scss/black-dashboard-react/bootstrap/_reboot.scss +0 -482
  63. package/dist/assets/scss/black-dashboard-react/bootstrap/_root.scss +0 -19
  64. package/dist/assets/scss/black-dashboard-react/bootstrap/_tables.scss +0 -187
  65. package/dist/assets/scss/black-dashboard-react/bootstrap/_tooltip.scss +0 -115
  66. package/dist/assets/scss/black-dashboard-react/bootstrap/_transitions.scss +0 -22
  67. package/dist/assets/scss/black-dashboard-react/bootstrap/_type.scss +0 -125
  68. package/dist/assets/scss/black-dashboard-react/bootstrap/_utilities.scss +0 -15
  69. package/dist/assets/scss/black-dashboard-react/bootstrap/_variables.scss +0 -952
  70. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_alert.scss +0 -13
  71. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_background-variant.scss +0 -21
  72. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_badge.scss +0 -12
  73. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_border-radius.scss +0 -35
  74. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_box-shadow.scss +0 -5
  75. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_breakpoints.scss +0 -123
  76. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_buttons.scss +0 -109
  77. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_caret.scss +0 -66
  78. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_clearfix.scss +0 -7
  79. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_float.scss +0 -11
  80. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_forms.scss +0 -147
  81. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_gradients.scss +0 -45
  82. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_grid-framework.scss +0 -67
  83. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_grid.scss +0 -54
  84. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_hover.scss +0 -37
  85. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_image.scss +0 -36
  86. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_list-group.scss +0 -21
  87. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_lists.scss +0 -7
  88. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_nav-divider.scss +0 -10
  89. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_pagination.scss +0 -22
  90. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_reset-text.scss +0 -17
  91. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_resize.scss +0 -6
  92. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_screen-reader.scss +0 -33
  93. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_size.scss +0 -6
  94. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_table-row.scss +0 -30
  95. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_text-emphasis.scss +0 -14
  96. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_text-hide.scss +0 -13
  97. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_text-truncate.scss +0 -8
  98. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_transition.scss +0 -13
  99. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_visibility.scss +0 -7
  100. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_align.scss +0 -8
  101. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_background.scss +0 -19
  102. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_borders.scss +0 -59
  103. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_clearfix.scss +0 -3
  104. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_display.scss +0 -38
  105. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_embed.scss +0 -54
  106. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_flex.scss +0 -51
  107. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_float.scss +0 -9
  108. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_position.scss +0 -37
  109. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_screenreaders.scss +0 -11
  110. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_shadows.scss +0 -6
  111. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_sizing.scss +0 -12
  112. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_spacing.scss +0 -51
  113. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_text.scss +0 -58
  114. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_visibility.scss +0 -11
  115. package/dist/assets/scss/black-dashboard-react/custom/_alerts.scss +0 -103
  116. package/dist/assets/scss/black-dashboard-react/custom/_badges.scss +0 -3
  117. package/dist/assets/scss/black-dashboard-react/custom/_buttons.scss +0 -242
  118. package/dist/assets/scss/black-dashboard-react/custom/_card.scss +0 -232
  119. package/dist/assets/scss/black-dashboard-react/custom/_checkboxes-radio.scss +0 -154
  120. package/dist/assets/scss/black-dashboard-react/custom/_dropdown.scss +0 -359
  121. package/dist/assets/scss/black-dashboard-react/custom/_fixed-plugin.scss +0 -324
  122. package/dist/assets/scss/black-dashboard-react/custom/_footer.scss +0 -94
  123. package/dist/assets/scss/black-dashboard-react/custom/_forms.scss +0 -133
  124. package/dist/assets/scss/black-dashboard-react/custom/_functions.scss +0 -23
  125. package/dist/assets/scss/black-dashboard-react/custom/_images.scss +0 -7
  126. package/dist/assets/scss/black-dashboard-react/custom/_input-group.scss +0 -333
  127. package/dist/assets/scss/black-dashboard-react/custom/_misc.scss +0 -228
  128. package/dist/assets/scss/black-dashboard-react/custom/_mixins.scss +0 -15
  129. package/dist/assets/scss/black-dashboard-react/custom/_modal.scss +0 -161
  130. package/dist/assets/scss/black-dashboard-react/custom/_navbar.scss +0 -436
  131. package/dist/assets/scss/black-dashboard-react/custom/_rtl.scss +0 -245
  132. package/dist/assets/scss/black-dashboard-react/custom/_sidebar-and-main-panel.scss +0 -763
  133. package/dist/assets/scss/black-dashboard-react/custom/_tables.scss +0 -165
  134. package/dist/assets/scss/black-dashboard-react/custom/_type.scss +0 -174
  135. package/dist/assets/scss/black-dashboard-react/custom/_utilities.scss +0 -9
  136. package/dist/assets/scss/black-dashboard-react/custom/_variables.scss +0 -996
  137. package/dist/assets/scss/black-dashboard-react/custom/_white-content.scss +0 -299
  138. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-chart.scss +0 -73
  139. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-map.scss +0 -3
  140. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-plain.scss +0 -16
  141. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-task.scss +0 -30
  142. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-user.scss +0 -77
  143. package/dist/assets/scss/black-dashboard-react/custom/mixins/_alert.scss +0 -14
  144. package/dist/assets/scss/black-dashboard-react/custom/mixins/_background-variant.scss +0 -18
  145. package/dist/assets/scss/black-dashboard-react/custom/mixins/_badges.scss +0 -15
  146. package/dist/assets/scss/black-dashboard-react/custom/mixins/_buttons.scss +0 -343
  147. package/dist/assets/scss/black-dashboard-react/custom/mixins/_dropdown.scss +0 -26
  148. package/dist/assets/scss/black-dashboard-react/custom/mixins/_forms.scss +0 -127
  149. package/dist/assets/scss/black-dashboard-react/custom/mixins/_icon.scss +0 -4
  150. package/dist/assets/scss/black-dashboard-react/custom/mixins/_inputs.scss +0 -234
  151. package/dist/assets/scss/black-dashboard-react/custom/mixins/_modals.scss +0 -15
  152. package/dist/assets/scss/black-dashboard-react/custom/mixins/_page-header.scss +0 -7
  153. package/dist/assets/scss/black-dashboard-react/custom/mixins/_popovers.scss +0 -41
  154. package/dist/assets/scss/black-dashboard-react/custom/mixins/_vendor-prefixes.scss +0 -209
  155. package/dist/assets/scss/black-dashboard-react/custom/mixins/_wizard.scss +0 -26
  156. package/dist/assets/scss/black-dashboard-react/custom/mixins/opacity.scss +0 -8
  157. package/dist/assets/scss/black-dashboard-react/custom/utilities/_backgrounds.scss +0 -42
  158. package/dist/assets/scss/black-dashboard-react/custom/utilities/_floating.scss +0 -54
  159. package/dist/assets/scss/black-dashboard-react/custom/utilities/_helper.scss +0 -62
  160. package/dist/assets/scss/black-dashboard-react/custom/utilities/_position.scss +0 -19
  161. package/dist/assets/scss/black-dashboard-react/custom/utilities/_shadows.scss +0 -10
  162. package/dist/assets/scss/black-dashboard-react/custom/utilities/_sizing.scss +0 -5
  163. package/dist/assets/scss/black-dashboard-react/custom/utilities/_spacing.scss +0 -105
  164. package/dist/assets/scss/black-dashboard-react/custom/utilities/_text.scss +0 -40
  165. package/dist/assets/scss/black-dashboard-react/custom/utilities/_transform.scss +0 -8
  166. package/dist/assets/scss/black-dashboard-react/custom/vendor/_plugin-perfect-scrollbar.scss +0 -116
  167. package/dist/assets/scss/black-dashboard-react/custom/vendor/_plugin-react-notification-alert.scss +0 -4
  168. package/dist/assets/scss/black-dashboard-react/react-differences/_inputs.scss +0 -3
  169. package/dist/assets/scss/black-dashboard-react/react-differences/react-differences.scss +0 -1
  170. package/dist/assets/scss/black-dashboard-react.scss +0 -105
@@ -7,33 +7,34 @@ exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _Utils = _interopRequireDefault(require("../../../../../Utils"));
10
- var _reactstrap = require("reactstrap");
11
10
  var _MenuLink = _interopRequireDefault(require("../../../../menu/MenuLink"));
12
- var _CardAvatar = _interopRequireDefault(require("../../../../card/CardAvatar"));
13
11
  var _material = require("@mui/material");
14
12
  var _RestUtils = require("../../../../../RestUtils");
15
13
  require("./FoldingTabSidebar.css");
14
+ var _Mail = _interopRequireDefault(require("@mui/icons-material/Mail"));
15
+ var _CardAvatar = _interopRequireDefault(require("../../../../card/CardAvatar"));
16
16
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
17
- /*eslint-disable*/
17
+ /* eslint-disable */
18
18
 
19
19
  const TAB = 16;
20
- class FoldingTabSidebar extends _react.default.Component {
21
- constructor(props) {
22
- super(props);
23
- this.state = {
24
- ...this.getCollapseStates(props.routes),
25
- isLoading: false,
26
- error: false,
27
- routes: undefined,
28
- activeRouteMenu: {
29
- id: 'dashboard',
30
- name: 'Dashboard'
31
- }
32
- };
33
- }
20
+ function FoldingTabSidebar(props) {
21
+ const {
22
+ activeColor,
23
+ open,
24
+ appLogoPath,
25
+ onOpenDrawer
26
+ } = props;
27
+ const [collapseStates, setCollapseStates] = _react.default.useState(getCollapseStates(props.routes));
28
+ const [isLoading, setIsLoading] = _react.default.useState(false);
29
+ const [error, setError] = _react.default.useState(false);
30
+ const [routesData, setRoutesData] = _react.default.useState(undefined);
31
+ const [activeRouteMenu, setActiveRouteMenu] = _react.default.useState({
32
+ id: 'dashboard',
33
+ name: 'Dashboard'
34
+ });
34
35
 
35
- /* ----------------- menu building helpers ----------------- */
36
- getViews = (menus, level) => {
36
+ /* ----------------- helpers (ported from class) ----------------- */
37
+ function getViews(menus, level) {
37
38
  const newViews = [];
38
39
  for (let i = 0; i < menus.length; i++) {
39
40
  const createView = {
@@ -46,15 +47,15 @@ class FoldingTabSidebar extends _react.default.Component {
46
47
  if (menus[i].subMenu) {
47
48
  createView.collapse = true;
48
49
  createView.state = menus[i].id + 'Collapse';
49
- createView.views = this.getItems(menus[i].subMenu.items, level + 1);
50
+ createView.views = getItems(menus[i].subMenu.items, level + 1);
50
51
  } else {
51
52
  createView.item = menus[i];
52
53
  }
53
54
  newViews.push(createView);
54
55
  }
55
56
  return newViews;
56
- };
57
- getItems = (items, level) => {
57
+ }
58
+ function getItems(items, level) {
58
59
  const newItems = [];
59
60
  for (let i = 0; i < items.length; i++) {
60
61
  const createItem = {
@@ -68,32 +69,32 @@ class FoldingTabSidebar extends _react.default.Component {
68
69
  if (!_Utils.default.isNull(items[i].subMenu)) {
69
70
  createItem.collapse = true;
70
71
  createItem.state = items[i].id + 'SubMenuCollapse';
71
- createItem.views = this.getItems(items[i].subMenu.items, level + 1);
72
+ createItem.views = getItems(items[i].subMenu.items, level + 1);
72
73
  }
73
74
  newItems.push(createItem);
74
75
  }
75
76
  return newItems;
76
- };
77
- getCollapseStates = routes => {
77
+ }
78
+ function getCollapseStates(routes) {
78
79
  let initialState = {};
79
80
  if (routes) {
80
81
  routes.forEach(prop => {
81
82
  if (prop.collapse) {
82
83
  initialState = {
83
- [prop.state]: this.getCollapseInitialState(prop.views),
84
- ...this.getCollapseStates(prop.views),
84
+ [prop.state]: getCollapseInitialState(prop.views),
85
+ ...getCollapseStates(prop.views),
85
86
  ...initialState
86
87
  };
87
88
  }
88
89
  });
89
90
  }
90
91
  return initialState;
91
- };
92
- getCollapseInitialState(routes) {
92
+ }
93
+ function getCollapseInitialState(routes) {
93
94
  if (!routes) return false;
94
95
  for (let i = 0; i < routes.length; i++) {
95
96
  if (!routes[i].views) return true;
96
- if (routes[i].collapse && this.getCollapseInitialState(routes[i].views)) {
97
+ if (routes[i].collapse && getCollapseInitialState(routes[i].views)) {
97
98
  return true;
98
99
  } else if (window.location.href.indexOf(routes[i].path) !== -1) {
99
100
  return true;
@@ -101,7 +102,7 @@ class FoldingTabSidebar extends _react.default.Component {
101
102
  }
102
103
  return false;
103
104
  }
104
- getMenu = route => new Promise(resolve => {
105
+ const getMenu = route => new Promise(resolve => {
105
106
  const service = {
106
107
  url: '/ui/api/v1/menu/get',
107
108
  parameters: [{
@@ -121,183 +122,257 @@ class FoldingTabSidebar extends _react.default.Component {
121
122
  return 'dashboard-sidebar';
122
123
  }
123
124
  }
124
- }, 'dashboard-sidebar', result => resolve(this.getViews(result.menus, route.level + 1)), e => {
125
+ }, 'dashboard-sidebar', result => resolve(getViews(result.menus, route.level + 1)), e => {
125
126
  console.error(e);
126
127
  resolve(null);
127
128
  }, null);
128
129
  });
129
- getLiClassName = prop => 'li-' + prop.level;
130
+ const activeRoute = routeName => activeRouteMenu.id === routeName;
131
+ const getLiClassName = prop => 'li-' + prop.level;
130
132
 
131
- /* ----------------- link rendering ----------------- */
132
- createLinks = routes => {
133
+ /* ----------------- createLinks with dynamic classes + theme colors ----------------- */
134
+ const createLinks = routes => {
133
135
  const {
134
- secondaryThemeColor
135
- } = this.props;
136
+ secondaryThemeColor,
137
+ open
138
+ } = props;
136
139
  return routes.map((prop, key) => {
137
140
  if (prop.redirect) return null;
138
- if ((prop.collapse || prop.isParent) && prop.name !== 'Dashboard' && prop.name !== 'My Work Items') {
139
- const st = {
140
- [prop.state]: !this.state[prop.state]
141
- };
142
- return /*#__PURE__*/_react.default.createElement("li", {
143
- className: prop.collapse ? this.getCollapseInitialState(prop.views) + '-' + prop.level ? 'active ' + this.getLiClassName(prop) : this.getLiClassName(prop) : this.getLiClassName(prop),
144
- key: key
145
- }, /*#__PURE__*/_react.default.createElement("a", {
146
- href: "#pablo",
147
- className: 'li-link-' + prop.level,
148
- "data-toggle": "collapse",
149
- style: {
150
- marginLeft: (prop.level + 1) * TAB + 'px'
151
- },
152
- "aria-expanded": this.state[prop.state],
153
- onClick: e => {
154
- if (!prop.views) {
155
- this.getMenu(prop).then(views => {
156
- if (views) {
157
- prop.views = views;
158
- this.setState(st);
159
- }
160
- });
161
- } else {
162
- this.setState(st);
163
- }
164
- e.preventDefault();
141
+
142
+ // icon: use prop.icon; fallback MailIcon
143
+ let iconNode = null;
144
+ if (/*#__PURE__*/_react.default.isValidElement(prop.icon)) {
145
+ iconNode = prop.icon;
146
+ } else if (typeof prop.icon === 'string') {
147
+ iconNode = /*#__PURE__*/_react.default.createElement("i", {
148
+ className: prop.icon
149
+ });
150
+ } else {
151
+ iconNode = prop.level === 0 ? /*#__PURE__*/_react.default.createElement("i", {
152
+ className: 'fas fa-square'
153
+ }) : null;
154
+ }
155
+ const isActive = activeRoute(prop.id);
156
+ const isCollapsible = (prop.collapse || prop.isParent) && prop.name !== 'Dashboard' && prop.name !== 'My Work Items';
157
+ const isOpen = prop.state ? !!collapseStates[prop.state] : false;
158
+
159
+ // replicate dynamic className logic for collapsible entries
160
+ const collapsibleClassName = prop.collapse ? getCollapseInitialState(prop.views) ? 'active ' + getLiClassName(prop) : getLiClassName(prop) : getLiClassName(prop);
161
+
162
+ // leaf classes (include li-level)
163
+ const leafClassName = getLiClassName(prop) + ' ' + ('menu-link-li' + (isActive ? '-active' : '') + (prop.name === 'Dashboard' ? ' dashboard-link' : ''));
164
+
165
+ // indent based on level (TAB px -> spacing units)
166
+ const indent = (prop.level + 1) * (TAB / 8);
167
+ if (isCollapsible) {
168
+ const isTopLevel = prop.level === 0;
169
+ const shouldShowTooltip = !open && isTopLevel;
170
+ const handleClick = e => {
171
+ e.preventDefault();
172
+
173
+ // If drawer is closed and this is a top-level item, ask parent to open it
174
+ if (!open && isTopLevel && typeof onOpenDrawer === 'function') {
175
+ onOpenDrawer();
165
176
  }
166
- }, prop.icon !== undefined ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("i", {
167
- className: prop.icon,
168
- style: {
169
- width: '28px'
177
+ const toggle = () => setCollapseStates(prev => ({
178
+ ...prev,
179
+ [prop.state]: !prev[prop.state]
180
+ }));
181
+ if (!prop.views) {
182
+ // lazy-load menu once
183
+ getMenu(prop).then(views => {
184
+ if (views) {
185
+ prop.views = views;
186
+ toggle();
187
+ }
188
+ });
189
+ } else {
190
+ toggle();
170
191
  }
171
- }), ' ', /*#__PURE__*/_react.default.createElement("span", null, prop.name, " ", prop.collapse ? /*#__PURE__*/_react.default.createElement("span", {
172
- className: "caret",
173
- style: {
174
- marginTop: 0
192
+ };
193
+ const button = /*#__PURE__*/_react.default.createElement(_material.ListItemButton, {
194
+ className: collapsibleClassName,
195
+ onClick: handleClick,
196
+ sx: {
197
+ pl: indent,
198
+ ...(isActive ? {
199
+ backgroundColor: (0, _material.lighten)(secondaryThemeColor, 0.9),
200
+ borderRadius: '16px',
201
+ color: secondaryThemeColor,
202
+ fontWeight: 500
203
+ } : {})
175
204
  }
176
- }) : null)) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
177
- className: "sidebar-normal",
178
- style: {
179
- paddingLeft: '4px'
205
+ }, iconNode && /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, {
206
+ sx: {
207
+ minWidth: 0,
208
+ mr: open ? 2 : 'auto',
209
+ justifyContent: 'center'
210
+ }
211
+ }, iconNode), open ? /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
212
+ primary: /*#__PURE__*/_react.default.createElement("span", null, prop.name, ' ', prop.collapse && /*#__PURE__*/_react.default.createElement("span", {
213
+ className: `caret ${isOpen ? 'caret-open' : 'caret-closed'}`,
214
+ style: {
215
+ marginTop: 0
216
+ }
217
+ }))
218
+ }) : !iconNode ? '...' : null);
219
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, {
220
+ key: key
221
+ }, shouldShowTooltip ? /*#__PURE__*/_react.default.createElement(_material.Tooltip, {
222
+ title: prop.name,
223
+ placement: "right",
224
+ arrow: true
225
+ }, button) : button, prop.collapse && prop.views && /*#__PURE__*/_react.default.createElement(_material.Collapse, {
226
+ in: isOpen,
227
+ timeout: "auto",
228
+ unmountOnExit: true,
229
+ sx: {
230
+ pl: 0,
231
+ mt: 0
180
232
  }
181
- }, prop.name, " ", /*#__PURE__*/_react.default.createElement("b", {
182
- className: "caret"
183
- })))), prop.collapse && prop.views ? /*#__PURE__*/_react.default.createElement(_reactstrap.Collapse, {
184
- isOpen: this.state[prop.state]
185
- }, /*#__PURE__*/_react.default.createElement("ul", {
233
+ }, /*#__PURE__*/_react.default.createElement(_material.List, {
234
+ disablePadding: true,
186
235
  className: "nav"
187
- }, this.createLinks(prop.views))) : null);
236
+ }, createLinks(prop.views))));
188
237
  }
189
- return /*#__PURE__*/_react.default.createElement("li", {
190
- className: `${'menu-link-li' + (this.activeRoute(prop.id) ? '-active' : '') + (prop.name === 'Dashboard' ? ' dashboard-link' : '')}`,
238
+
239
+ // leaf
240
+ return /*#__PURE__*/_react.default.createElement(_material.ListItemButton, {
191
241
  key: key,
192
- style: this.activeRoute(prop.id) ? {
193
- backgroundColor: (0, _material.lighten)(secondaryThemeColor, 0.9),
194
- borderRadius: '16px',
195
- color: secondaryThemeColor,
196
- fontWeight: 500
197
- } : {}
198
- }, /*#__PURE__*/_react.default.createElement(_MenuLink.default, {
199
- config: prop.item,
200
- clickCallback: prop.name === 'Dashboard' ? item => {
201
- this.props.dashboardLauncher();
202
- this.setState({
203
- ...this.state,
204
- activeRouteMenu: item
205
- });
206
- } : item => this.setState({
207
- ...this.state,
208
- activeRouteMenu: item
209
- }),
210
- autoClick: prop.name === 'My Work Items' || prop.item && prop.item.defaultItem,
211
- viewId: "menuBar",
212
- icon: prop.icon,
213
- iconColor: (prop.name === 'Dashboard' || prop.name === 'My Work Items') && this.activeRoute(prop.id) ? this.props.secondaryThemeColor : null,
214
- backgroundColor: this.activeRoute(prop.id) ? (0, _material.lighten)(this.props.secondaryThemeColor, 0.9) : null,
215
- name: prop.name,
216
- id: prop.id,
217
- level: prop.level,
218
- tab: TAB,
219
- color: this.activeRoute(prop.id) ? this.props.secondaryThemeColor : null
220
- }));
242
+ className: prop.name === 'Dashboard' || prop.name === 'My Work Items' ? isActive ? 'dashboard-link-active' : 'dashboard-link' : leafClassName,
243
+ sx: {
244
+ justifyContent: open ? 'initial' : 'center',
245
+ px: 2.5,
246
+ pl: indent,
247
+ // theme colors when active (like original)
248
+ ...(isActive ? {
249
+ backgroundColor: (0, _material.lighten)(secondaryThemeColor, 0.9),
250
+ borderRadius: '16px',
251
+ color: secondaryThemeColor,
252
+ fontWeight: 500
253
+ } : {})
254
+ }
255
+ }, iconNode && /*#__PURE__*/_react.default.createElement(_material.ListItemIcon, {
256
+ sx: {
257
+ minWidth: 0,
258
+ mr: open ? 2 : 'auto',
259
+ justifyContent: 'center',
260
+ color: (prop.name === 'Dashboard' || prop.name === 'My Work Items') && isActive ? secondaryThemeColor : 'inherit'
261
+ }
262
+ }, iconNode), open ? /*#__PURE__*/_react.default.createElement(_material.ListItemText, {
263
+ primary: /*#__PURE__*/_react.default.createElement(_MenuLink.default, {
264
+ config: prop.item,
265
+ clickCallback: prop.name === 'Dashboard' ? item => {
266
+ props.dashboardLauncher && props.dashboardLauncher();
267
+ setActiveRouteMenu(item);
268
+ } : item => setActiveRouteMenu(item),
269
+ autoClick: prop.name === 'My Work Items' || prop.item && prop.item.defaultItem,
270
+ viewId: "menuBar",
271
+ icon: prop.icon,
272
+ iconColor: (prop.name === 'Dashboard' || prop.name === 'My Work Items') && isActive ? props.secondaryThemeColor : null,
273
+ name: prop.name,
274
+ id: prop.id,
275
+ level: prop.level,
276
+ tab: TAB
277
+ })
278
+ }) : !iconNode ? '...' : null);
221
279
  });
222
280
  };
223
- activeRoute = routeName => this.state.activeRouteMenu.id === routeName;
224
281
 
225
- /* ----------------- lifecycle ----------------- */
226
- componentDidMount() {
282
+ /* ----------------- load filtered menu ----------------- */
283
+ _react.default.useEffect(() => {
284
+ let cancelled = false;
227
285
  const service = {
228
286
  url: '/ui/api/v1/menu/filter',
229
287
  parameters: [{
230
- value: this.props.routes,
288
+ value: props.routes,
231
289
  httpParameterType: 'REQUEST_BODY'
232
290
  }],
233
291
  method: 'POST',
234
292
  contentType: 'application/json'
235
293
  };
294
+ setIsLoading(true);
295
+ setError(false);
236
296
  (0, _RestUtils.invokeRest)(service, {
237
297
  api: {
238
298
  get id() {
239
299
  return 'dashboard-sidebar';
240
300
  }
241
301
  }
242
- }, 'dashboard-sidebar', result => this.setState({
243
- ...this.state,
244
- routes: result
245
- }), e => console.error(e), null);
246
- }
247
- componentWillUnmount() {
248
- /* cleanup any custom scroll plugins if you add them */
249
- }
302
+ }, 'dashboard-sidebar', result => {
303
+ if (!cancelled) {
304
+ setRoutesData(result);
305
+ setIsLoading(false);
306
+ }
307
+ }, e => {
308
+ if (!cancelled) {
309
+ console.error(e);
310
+ setError(true);
311
+ setIsLoading(false);
312
+ }
313
+ }, null);
314
+ return () => {
315
+ cancelled = true;
316
+ };
317
+ }, [props.routes]);
250
318
 
251
319
  /* ----------------- render ----------------- */
252
- render() {
253
- const {
254
- activeColor,
255
- logo,
256
- className,
257
- heading,
258
- appLogoPath
259
- } = this.props;
260
- const routes = this.state.routes;
261
- let logoImg = null;
262
- if (!_Utils.default.isNull(logo)) {
263
- logoImg = /*#__PURE__*/_react.default.createElement("a", {
264
- href: logo.outterLink,
265
- className: "sidebar__brand",
266
- onClick: this.props.closeSidebar,
267
- "aria-label": "Home",
268
- style: this.props.logoStyle
269
- }, /*#__PURE__*/_react.default.createElement("img", {
270
- src: logo.imgSrc,
271
- alt: "logo",
272
- className: "sidebar__brand-img"
273
- }));
274
- }
275
- return /*#__PURE__*/_react.default.createElement("aside", {
276
- className: `${className || ''} sidebar`,
277
- data: activeColor
278
- }, /*#__PURE__*/_react.default.createElement("div", {
279
- className: "sidebar__top"
280
- }, logoImg ? /*#__PURE__*/_react.default.createElement("div", {
281
- className: "sidebar__logo"
282
- }, logoImg) : null, !_Utils.default.isNull(heading) ? /*#__PURE__*/_react.default.createElement("div", {
283
- className: "sidebar__heading"
284
- }, heading) : null), /*#__PURE__*/_react.default.createElement("div", {
285
- className: "sidebar__scroll"
286
- }, routes ? /*#__PURE__*/_react.default.createElement(_reactstrap.Nav, {
287
- className: "nav-wrapper"
288
- }, this.createLinks(routes)) : null), /*#__PURE__*/_react.default.createElement("div", {
289
- className: "sidebar__bottom"
290
- }, !_Utils.default.isNull(appLogoPath) ? /*#__PURE__*/_react.default.createElement("div", {
291
- className: "sidebar__app-logo"
292
- }, /*#__PURE__*/_react.default.createElement(_CardAvatar.default, {
293
- plain: true
320
+ const {
321
+ logo
322
+ } = props;
323
+ let logoImg = null;
324
+ if (!_Utils.default.isNull(logo)) {
325
+ logoImg = /*#__PURE__*/_react.default.createElement("a", {
326
+ href: logo.outterLink,
327
+ className: "sidebar__brand",
328
+ onClick: props.closeSidebar,
329
+ "aria-label": "Home",
330
+ style: props.logoStyle
294
331
  }, /*#__PURE__*/_react.default.createElement("img", {
295
- src: appLogoPath,
296
- alt: ""
297
- }))) : null, /*#__PURE__*/_react.default.createElement("div", {
298
- className: "sidebar__copyright"
299
- }, "\xA9 ", new Date().getFullYear())));
332
+ src: logo.imgSrc,
333
+ alt: "logo",
334
+ className: "sidebar__brand-img"
335
+ }));
336
+ }
337
+ if (isLoading) {
338
+ return /*#__PURE__*/_react.default.createElement("div", {
339
+ className: "p-3"
340
+ }, /*#__PURE__*/_react.default.createElement("em", null, "Loading menu\u2026"));
341
+ }
342
+ if (error) {
343
+ return /*#__PURE__*/_react.default.createElement("div", {
344
+ className: "p-3 text-danger"
345
+ }, /*#__PURE__*/_react.default.createElement("em", null, "Failed to load menu."));
346
+ }
347
+ if (!routesData) {
348
+ return null;
300
349
  }
350
+ return /*#__PURE__*/_react.default.createElement("aside", {
351
+ className: `sidebar ${!open ? 'sidebar--mini' : ''}`,
352
+ data: activeColor
353
+ }, logoImg && /*#__PURE__*/_react.default.createElement("div", {
354
+ className: "sidebar__top"
355
+ }, logoImg, props.heading && /*#__PURE__*/_react.default.createElement("div", {
356
+ className: "sidebar__heading"
357
+ }, props.heading)), /*#__PURE__*/_react.default.createElement("div", {
358
+ className: "sidebar__scroll"
359
+ }, /*#__PURE__*/_react.default.createElement(_material.List, {
360
+ sx: {
361
+ mt: 1
362
+ },
363
+ className: "nav"
364
+ }, createLinks(routesData))), /*#__PURE__*/_react.default.createElement("div", {
365
+ className: "sidebar__bottom"
366
+ }, !_Utils.default.isNull(appLogoPath) ? /*#__PURE__*/_react.default.createElement("div", {
367
+ className: "sidebar__app-logo"
368
+ }, /*#__PURE__*/_react.default.createElement(_CardAvatar.default, {
369
+ plain: true
370
+ }, /*#__PURE__*/_react.default.createElement("img", {
371
+ src: appLogoPath,
372
+ alt: ""
373
+ }))) : null, /*#__PURE__*/_react.default.createElement("div", {
374
+ className: "sidebar__copyright"
375
+ }, "\xA9 ", new Date().getFullYear())));
301
376
  }
302
377
  FoldingTabSidebar.propTypes = {
303
378
  activeColor: _propTypes.default.oneOf(['primary', 'blue', 'green', 'orange', 'red', 'agility']),
@@ -316,6 +391,9 @@ FoldingTabSidebar.propTypes = {
316
391
  heading: _propTypes.default.string,
317
392
  appLogoPath: _propTypes.default.string,
318
393
  closeSidebar: _propTypes.default.func,
319
- dashboardLauncher: _propTypes.default.func
394
+ dashboardLauncher: _propTypes.default.func,
395
+ logoStyle: _propTypes.default.object,
396
+ open: _propTypes.default.bool,
397
+ onOpenDrawer: _propTypes.default.func // <--- NEW
320
398
  };
321
399
  var _default = exports.default = FoldingTabSidebar;
@@ -331,7 +331,6 @@ const Form = /*#__PURE__*/_react.default.memo(/*#__PURE__*/_react.default.forwar
331
331
  let autoLoadData = _Utils.default.getComponentAttribute(config, 'autoLoadData', null);
332
332
  if (autoLoadData === null || autoLoadData === true) {
333
333
  let subscription = {
334
- publisher: props.viewId,
335
334
  eventType: _EventType.default.COMPONENT_LOAD,
336
335
  actions: [{
337
336
  actionType: 'loadData'
@@ -1,9 +1,34 @@
1
1
  :root { --header-h: 72px; --view-header-h: 112px; --view-header-min: 112px}
2
2
 
3
3
  .view {
4
- padding: 0 32px;
4
+ padding: 16px 8px 16px 32px;
5
5
  background-color: #ffffff;
6
6
  border-radius: 4px;
7
+ width: 100%;
8
+ }
9
+
10
+ .alert {
11
+ padding: 12px 4px !important;
12
+ }
13
+
14
+ .alert p {
15
+ margin-bottom: 0 !important;
16
+ color: #4a1117 !important;
17
+ }
18
+
19
+ .alert-danger {
20
+ background-color: rgb(235, 63, 33);
21
+ border-color: #f0737c;
22
+ }
23
+
24
+ .success-green-text,
25
+ .success-green-text td {
26
+ color: #2e7d32;
27
+ }
28
+
29
+ .bold-text,
30
+ .bold-text td {
31
+ font-weight: bold;
7
32
  }
8
33
 
9
34
  .view .sticky-header {
@@ -86,7 +111,7 @@
86
111
 
87
112
  .default-oui-layout {
88
113
  margin: 8px;
89
- padding: 0 !important;
114
+ padding: 0;
90
115
  }
91
116
 
92
117
  .oui-form-item {
@@ -98,13 +98,6 @@ const View = props => {
98
98
  }
99
99
  }
100
100
  _ApplicationManager.default.updateAppBarTitle(parsedConfig.id, parsedConfig.title);
101
- let data = {};
102
- data.viewId = props.config.id;
103
- let event = new _Event.default(props.handle, props.config.id, data);
104
- _Observable.default.fireEvent(_EventType.default.COMPONENT_LOAD, event);
105
- if (props.loadCallback) {
106
- props.loadCallback();
107
- }
108
101
  const el = viewRef.current;
109
102
  let ro;
110
103
  if (el) {
@@ -128,6 +121,13 @@ const View = props => {
128
121
  ro.observe(headerEl);
129
122
  }
130
123
  }
124
+ let data = {};
125
+ data.viewId = props.config.id;
126
+ let event = new _Event.default(props.handle, props.config.id, data);
127
+ _Observable.default.fireEvent(_EventType.default.COMPONENT_LOAD, event);
128
+ if (props.loadCallback) {
129
+ props.loadCallback();
130
+ }
131
131
  return () => {
132
132
  _Observable.default.clearEventListeners(props.config.id);
133
133
  if (el) {
@@ -14,6 +14,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
14
14
  const ViewPort = props => {
15
15
  const navigate = (0, _reactRouterDom.useNavigate)();
16
16
  const [loading, setLoading] = _react.default.useState(true);
17
+ const [width, setWidth] = _react.default.useState('100%');
17
18
  const confirmationDialogController = _react.default.useRef({});
18
19
  const popupViewController = _react.default.useRef({});
19
20
  const openPopupView = view => {
@@ -43,10 +44,10 @@ const ViewPort = props => {
43
44
  return /*#__PURE__*/_react.default.createElement("div", {
44
45
  className: "viewport",
45
46
  style: {
46
- height: 'calc(100vh - 96px)',
47
- maxHeight: 'calc(100vh - 96px)',
47
+ height: 'calc(100vh - 72px)',
48
+ maxHeight: 'calc(100vh - 72px)',
48
49
  position: 'fixed',
49
- width: props.windowPinned ? 'calc(100% - 664px)' : 'calc(100% - 348px)',
50
+ width: props.windowPinned ? `calc(100% - ${props.menuOffset}px - 328px - 12px)` : `calc(100% - ${props.menuOffset}px - 12px)`,
50
51
  borderRadius: '4px'
51
52
  }
52
53
  }, /*#__PURE__*/_react.default.createElement(_PopupView.default, {