@agilemotion/oui-react-js 1.8.48 → 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 (165) hide show
  1. package/dist/ViewContext.js +7 -2
  2. package/dist/components/DocumentViewer.js +1 -0
  3. package/dist/components/Toolbar.js +1 -17
  4. package/dist/components/WordDocumentViewer.js +2 -2
  5. package/dist/components/dashboard/FoldingSideTabDashboard.bck.js +332 -0
  6. package/dist/components/dashboard/FoldingSideTabDashboard.css +5 -0
  7. package/dist/components/dashboard/FoldingSideTabDashboard.js +254 -124
  8. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.bck.js +321 -0
  9. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.css +164 -6
  10. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.js +251 -173
  11. package/dist/components/layout/View.css +17 -2
  12. package/dist/components/layout/ViewPort.js +4 -3
  13. package/dist/components/layout/Window.js +6 -6
  14. package/dist/components/media/ClosablePanel.css +1 -1
  15. package/dist/components/media/MediaSoupHelper.js +3 -2
  16. package/dist/components/media/Toolbar.js +34 -41
  17. package/dist/components/media/TrainingRoom.js +1 -1
  18. package/dist/components/media/VCRoomWorkspace.js +2 -2
  19. package/dist/view/Dashboard.js +11 -10
  20. package/dist/view/security/ChangePasswordBasic.js +5 -1
  21. package/dist/view/security/ForgotPasswordBasic.js +5 -1
  22. package/dist/view/security/LoginBasic.js +5 -1
  23. package/dist/view/security/LoginInteractionPortal.js +5 -1
  24. package/dist/view/security/ResetPasswordBasic.js +5 -1
  25. package/package.json +2 -5
  26. package/dist/assets/css/black-dashboard-react.css +0 -12531
  27. package/dist/assets/css/black-dashboard-react.css.map +0 -134
  28. package/dist/assets/css/black-dashboard-react.min.css +0 -1
  29. package/dist/assets/css/nucleo-icons.css +0 -543
  30. package/dist/assets/scss/black-dashboard-react/bootstrap/_alert.scss +0 -51
  31. package/dist/assets/scss/black-dashboard-react/bootstrap/_badge.scss +0 -47
  32. package/dist/assets/scss/black-dashboard-react/bootstrap/_breadcrumb.scss +0 -41
  33. package/dist/assets/scss/black-dashboard-react/bootstrap/_button-group.scss +0 -172
  34. package/dist/assets/scss/black-dashboard-react/bootstrap/_buttons.scss +0 -143
  35. package/dist/assets/scss/black-dashboard-react/bootstrap/_card.scss +0 -301
  36. package/dist/assets/scss/black-dashboard-react/bootstrap/_carousel.scss +0 -236
  37. package/dist/assets/scss/black-dashboard-react/bootstrap/_close.scss +0 -35
  38. package/dist/assets/scss/black-dashboard-react/bootstrap/_code.scss +0 -48
  39. package/dist/assets/scss/black-dashboard-react/bootstrap/_custom-forms.scss +0 -433
  40. package/dist/assets/scss/black-dashboard-react/bootstrap/_dropdown.scss +0 -166
  41. package/dist/assets/scss/black-dashboard-react/bootstrap/_forms.scss +0 -333
  42. package/dist/assets/scss/black-dashboard-react/bootstrap/_functions.scss +0 -86
  43. package/dist/assets/scss/black-dashboard-react/bootstrap/_grid.scss +0 -52
  44. package/dist/assets/scss/black-dashboard-react/bootstrap/_images.scss +0 -42
  45. package/dist/assets/scss/black-dashboard-react/bootstrap/_input-group.scss +0 -173
  46. package/dist/assets/scss/black-dashboard-react/bootstrap/_jumbotron.scss +0 -16
  47. package/dist/assets/scss/black-dashboard-react/bootstrap/_list-group.scss +0 -115
  48. package/dist/assets/scss/black-dashboard-react/bootstrap/_media.scss +0 -8
  49. package/dist/assets/scss/black-dashboard-react/bootstrap/_mixins.scss +0 -41
  50. package/dist/assets/scss/black-dashboard-react/bootstrap/_modal.scss +0 -180
  51. package/dist/assets/scss/black-dashboard-react/bootstrap/_nav.scss +0 -118
  52. package/dist/assets/scss/black-dashboard-react/bootstrap/_navbar.scss +0 -299
  53. package/dist/assets/scss/black-dashboard-react/bootstrap/_pagination.scss +0 -78
  54. package/dist/assets/scss/black-dashboard-react/bootstrap/_popover.scss +0 -185
  55. package/dist/assets/scss/black-dashboard-react/bootstrap/_print.scss +0 -141
  56. package/dist/assets/scss/black-dashboard-react/bootstrap/_progress.scss +0 -34
  57. package/dist/assets/scss/black-dashboard-react/bootstrap/_reboot.scss +0 -482
  58. package/dist/assets/scss/black-dashboard-react/bootstrap/_root.scss +0 -19
  59. package/dist/assets/scss/black-dashboard-react/bootstrap/_tables.scss +0 -187
  60. package/dist/assets/scss/black-dashboard-react/bootstrap/_tooltip.scss +0 -115
  61. package/dist/assets/scss/black-dashboard-react/bootstrap/_transitions.scss +0 -22
  62. package/dist/assets/scss/black-dashboard-react/bootstrap/_type.scss +0 -125
  63. package/dist/assets/scss/black-dashboard-react/bootstrap/_utilities.scss +0 -15
  64. package/dist/assets/scss/black-dashboard-react/bootstrap/_variables.scss +0 -952
  65. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_alert.scss +0 -13
  66. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_background-variant.scss +0 -21
  67. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_badge.scss +0 -12
  68. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_border-radius.scss +0 -35
  69. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_box-shadow.scss +0 -5
  70. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_breakpoints.scss +0 -123
  71. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_buttons.scss +0 -109
  72. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_caret.scss +0 -66
  73. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_clearfix.scss +0 -7
  74. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_float.scss +0 -11
  75. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_forms.scss +0 -147
  76. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_gradients.scss +0 -45
  77. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_grid-framework.scss +0 -67
  78. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_grid.scss +0 -54
  79. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_hover.scss +0 -37
  80. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_image.scss +0 -36
  81. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_list-group.scss +0 -21
  82. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_lists.scss +0 -7
  83. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_nav-divider.scss +0 -10
  84. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_pagination.scss +0 -22
  85. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_reset-text.scss +0 -17
  86. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_resize.scss +0 -6
  87. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_screen-reader.scss +0 -33
  88. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_size.scss +0 -6
  89. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_table-row.scss +0 -30
  90. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_text-emphasis.scss +0 -14
  91. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_text-hide.scss +0 -13
  92. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_text-truncate.scss +0 -8
  93. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_transition.scss +0 -13
  94. package/dist/assets/scss/black-dashboard-react/bootstrap/mixins/_visibility.scss +0 -7
  95. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_align.scss +0 -8
  96. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_background.scss +0 -19
  97. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_borders.scss +0 -59
  98. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_clearfix.scss +0 -3
  99. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_display.scss +0 -38
  100. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_embed.scss +0 -54
  101. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_flex.scss +0 -51
  102. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_float.scss +0 -9
  103. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_position.scss +0 -37
  104. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_screenreaders.scss +0 -11
  105. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_shadows.scss +0 -6
  106. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_sizing.scss +0 -12
  107. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_spacing.scss +0 -51
  108. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_text.scss +0 -58
  109. package/dist/assets/scss/black-dashboard-react/bootstrap/utilities/_visibility.scss +0 -11
  110. package/dist/assets/scss/black-dashboard-react/custom/_alerts.scss +0 -103
  111. package/dist/assets/scss/black-dashboard-react/custom/_badges.scss +0 -3
  112. package/dist/assets/scss/black-dashboard-react/custom/_buttons.scss +0 -242
  113. package/dist/assets/scss/black-dashboard-react/custom/_card.scss +0 -232
  114. package/dist/assets/scss/black-dashboard-react/custom/_checkboxes-radio.scss +0 -154
  115. package/dist/assets/scss/black-dashboard-react/custom/_dropdown.scss +0 -359
  116. package/dist/assets/scss/black-dashboard-react/custom/_fixed-plugin.scss +0 -324
  117. package/dist/assets/scss/black-dashboard-react/custom/_footer.scss +0 -94
  118. package/dist/assets/scss/black-dashboard-react/custom/_forms.scss +0 -133
  119. package/dist/assets/scss/black-dashboard-react/custom/_functions.scss +0 -23
  120. package/dist/assets/scss/black-dashboard-react/custom/_images.scss +0 -7
  121. package/dist/assets/scss/black-dashboard-react/custom/_input-group.scss +0 -333
  122. package/dist/assets/scss/black-dashboard-react/custom/_misc.scss +0 -228
  123. package/dist/assets/scss/black-dashboard-react/custom/_mixins.scss +0 -15
  124. package/dist/assets/scss/black-dashboard-react/custom/_modal.scss +0 -161
  125. package/dist/assets/scss/black-dashboard-react/custom/_navbar.scss +0 -436
  126. package/dist/assets/scss/black-dashboard-react/custom/_rtl.scss +0 -245
  127. package/dist/assets/scss/black-dashboard-react/custom/_sidebar-and-main-panel.scss +0 -763
  128. package/dist/assets/scss/black-dashboard-react/custom/_tables.scss +0 -165
  129. package/dist/assets/scss/black-dashboard-react/custom/_type.scss +0 -174
  130. package/dist/assets/scss/black-dashboard-react/custom/_utilities.scss +0 -9
  131. package/dist/assets/scss/black-dashboard-react/custom/_variables.scss +0 -996
  132. package/dist/assets/scss/black-dashboard-react/custom/_white-content.scss +0 -299
  133. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-chart.scss +0 -73
  134. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-map.scss +0 -3
  135. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-plain.scss +0 -16
  136. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-task.scss +0 -30
  137. package/dist/assets/scss/black-dashboard-react/custom/cards/_card-user.scss +0 -77
  138. package/dist/assets/scss/black-dashboard-react/custom/mixins/_alert.scss +0 -14
  139. package/dist/assets/scss/black-dashboard-react/custom/mixins/_background-variant.scss +0 -18
  140. package/dist/assets/scss/black-dashboard-react/custom/mixins/_badges.scss +0 -15
  141. package/dist/assets/scss/black-dashboard-react/custom/mixins/_buttons.scss +0 -343
  142. package/dist/assets/scss/black-dashboard-react/custom/mixins/_dropdown.scss +0 -26
  143. package/dist/assets/scss/black-dashboard-react/custom/mixins/_forms.scss +0 -127
  144. package/dist/assets/scss/black-dashboard-react/custom/mixins/_icon.scss +0 -4
  145. package/dist/assets/scss/black-dashboard-react/custom/mixins/_inputs.scss +0 -234
  146. package/dist/assets/scss/black-dashboard-react/custom/mixins/_modals.scss +0 -15
  147. package/dist/assets/scss/black-dashboard-react/custom/mixins/_page-header.scss +0 -7
  148. package/dist/assets/scss/black-dashboard-react/custom/mixins/_popovers.scss +0 -41
  149. package/dist/assets/scss/black-dashboard-react/custom/mixins/_vendor-prefixes.scss +0 -209
  150. package/dist/assets/scss/black-dashboard-react/custom/mixins/_wizard.scss +0 -26
  151. package/dist/assets/scss/black-dashboard-react/custom/mixins/opacity.scss +0 -8
  152. package/dist/assets/scss/black-dashboard-react/custom/utilities/_backgrounds.scss +0 -42
  153. package/dist/assets/scss/black-dashboard-react/custom/utilities/_floating.scss +0 -54
  154. package/dist/assets/scss/black-dashboard-react/custom/utilities/_helper.scss +0 -62
  155. package/dist/assets/scss/black-dashboard-react/custom/utilities/_position.scss +0 -19
  156. package/dist/assets/scss/black-dashboard-react/custom/utilities/_shadows.scss +0 -10
  157. package/dist/assets/scss/black-dashboard-react/custom/utilities/_sizing.scss +0 -5
  158. package/dist/assets/scss/black-dashboard-react/custom/utilities/_spacing.scss +0 -105
  159. package/dist/assets/scss/black-dashboard-react/custom/utilities/_text.scss +0 -40
  160. package/dist/assets/scss/black-dashboard-react/custom/utilities/_transform.scss +0 -8
  161. package/dist/assets/scss/black-dashboard-react/custom/vendor/_plugin-perfect-scrollbar.scss +0 -116
  162. package/dist/assets/scss/black-dashboard-react/custom/vendor/_plugin-react-notification-alert.scss +0 -4
  163. package/dist/assets/scss/black-dashboard-react/react-differences/_inputs.scss +0 -3
  164. package/dist/assets/scss/black-dashboard-react/react-differences/react-differences.scss +0 -1
  165. 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;
@@ -1,9 +1,24 @@
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;
7
22
  }
8
23
 
9
24
  .success-green-text,
@@ -96,7 +111,7 @@
96
111
 
97
112
  .default-oui-layout {
98
113
  margin: 8px;
99
- padding: 0 !important;
114
+ padding: 0;
100
115
  }
101
116
 
102
117
  .oui-form-item {
@@ -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, {
@@ -121,7 +121,7 @@ const Window = props => {
121
121
  width: 'calc(100% - ' + props.leftOffset + ' )',
122
122
  maxWidth: 'unset',
123
123
  height: 'calc(100% - 88px)',
124
- margin: '8px'
124
+ margin: '0 8px'
125
125
  };
126
126
  };
127
127
  const getPinnedStyle = () => {
@@ -130,7 +130,7 @@ const Window = props => {
130
130
  backgroundColor: '#FFFFFF',
131
131
  width: '320px',
132
132
  height: 'calc(100% - 88px)',
133
- margin: '8px'
133
+ margin: '0 8px'
134
134
  };
135
135
  };
136
136
  const pinView = function (e) {
@@ -142,13 +142,13 @@ const Window = props => {
142
142
  paper.style.transform = windowTransformValue;
143
143
  }
144
144
  paper.style.width = '320px';
145
- paper.style.height = 'calc(100% - 96px)';
145
+ paper.style.height = 'calc(100% - 80px)';
146
146
  paper.style.boxShadow = 'unset';
147
147
  paper.style.borderRadius = '4px';
148
148
  paper.style.left = 'unset';
149
- paper.style.right = '0';
149
+ paper.style.right = '4px';
150
150
  paper.style.position = 'absolute';
151
- paper.style.top = '52px';
151
+ paper.style.top = '44px';
152
152
  paper.style.margin = '32px 0';
153
153
  paper.style.maxWidth = 'unset';
154
154
  let header = document.getElementsByClassName('dialogHeader')[0];
@@ -213,7 +213,7 @@ const Window = props => {
213
213
  paper.style.maxWidth = 'unset';
214
214
  paper.style.height = 'calc(100% - 88px)';
215
215
  paper.style.margin = '8px';
216
- paper.style.right = '0';
216
+ paper.style.right = '4px';
217
217
  paper.style.position = 'absolute';
218
218
  paper.style.top = '72px';
219
219
  paper.style.left = (isNaN(getLeftOffset()) ? '328' : getLeftOffset()) + 'px';
@@ -8,7 +8,7 @@
8
8
  height: 64px;
9
9
  text-align: right;
10
10
  padding: 8px;
11
- display: inline-block;
11
+ display: flex;
12
12
  width: 100%;
13
13
  font-size: 24px;
14
14
  font-weight: 500;