@finsemble/finsemble-ui 6.6.1 → 7.0.0-beta.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 (262) hide show
  1. package/package.json +18 -32
  2. package/react/assets/css/button.css +1 -1
  3. package/react/assets/css/favorites.css +0 -47
  4. package/react/assets/css/finsemble.css +3 -0
  5. package/react/assets/css/linkerWindow.css +13 -1
  6. package/react/assets/css/menus.css +2 -2
  7. package/react/assets/css/notificationsCenter.css +32 -1
  8. package/react/assets/css/shared/common.css +40 -0
  9. package/react/assets/css/userPreferences.css +17 -12
  10. package/react/assets/css/windowTitleBar.css +7 -0
  11. package/react/assets/icons/server.svg +26 -0
  12. package/react/components/common/ButtonIcon.js +1 -1
  13. package/react/components/common/ButtonIcon.js.map +1 -1
  14. package/react/components/common/ButtonRow.js +2 -2
  15. package/react/components/common/ButtonRow.js.map +1 -1
  16. package/react/components/common/Checkbox.js +1 -1
  17. package/react/components/common/Checkbox.js.map +1 -1
  18. package/react/components/common/ColorPicker.js +16 -15
  19. package/react/components/common/ColorPicker.js.map +1 -1
  20. package/react/components/common/ErrorBoundary.d.ts +16 -0
  21. package/react/components/common/ErrorBoundary.js +22 -0
  22. package/react/components/common/ErrorBoundary.js.map +1 -0
  23. package/react/components/common/FinsembleIcon.d.ts +3 -2
  24. package/react/components/common/FinsembleIcon.js +10 -3
  25. package/react/components/common/FinsembleIcon.js.map +1 -1
  26. package/react/components/common/FinsembleLink.d.ts +6 -0
  27. package/react/components/common/FinsembleLink.js +12 -0
  28. package/react/components/common/FinsembleLink.js.map +1 -0
  29. package/react/components/common/FinsembleToggle.d.ts +1 -2
  30. package/react/components/common/FinsembleToggle.js +2 -6
  31. package/react/components/common/FinsembleToggle.js.map +1 -1
  32. package/react/components/common/FinsembleToggleButtonBar.d.ts +13 -0
  33. package/react/components/common/FinsembleToggleButtonBar.js +44 -0
  34. package/react/components/common/FinsembleToggleButtonBar.js.map +1 -0
  35. package/react/components/common/InputTable.d.ts +3 -3
  36. package/react/components/common/InputTable.js +13 -13
  37. package/react/components/common/InputTable.js.map +1 -1
  38. package/react/components/common/Tab.js +33 -5
  39. package/react/components/common/Tab.js.map +1 -1
  40. package/react/components/common/css/FinsembleToggle.css +22 -0
  41. package/react/components/common/css/application-edit-page.css +10 -2
  42. package/react/components/common/css/tab.css +8 -8
  43. package/react/components/common/css/time-select.css +1 -1
  44. package/react/components/common/css/toggle.css +2 -10
  45. package/react/components/common/helpers.js +6 -1
  46. package/react/components/common/helpers.js.map +1 -1
  47. package/react/components/common/stories/ColorPicker.stories.js +6 -11
  48. package/react/components/common/stories/ColorPicker.stories.js.map +1 -1
  49. package/react/components/common/stories/FinsembleToggle.stories.d.ts +1 -2
  50. package/react/components/common/stories/FinsembleToggle.stories.js +0 -7
  51. package/react/components/common/stories/FinsembleToggle.stories.js.map +1 -1
  52. package/react/components/common/stories/FinsembleToggleButtonBar.stories.d.ts +14 -0
  53. package/react/components/common/stories/FinsembleToggleButtonBar.stories.js +97 -0
  54. package/react/components/common/stories/FinsembleToggleButtonBar.stories.js.map +1 -0
  55. package/react/components/common/stories/InputTable.stories.d.ts +4 -3
  56. package/react/components/common/stories/InputTable.stories.js +18 -8
  57. package/react/components/common/stories/InputTable.stories.js.map +1 -1
  58. package/react/components/common/tests/ButtonRow.spec.js +5 -0
  59. package/react/components/common/tests/ButtonRow.spec.js.map +1 -1
  60. package/react/components/common/tests/FinsembleToggle.spec.js +1 -6
  61. package/react/components/common/tests/FinsembleToggle.spec.js.map +1 -1
  62. package/react/components/common/tests/FinsembleToggleButtonBar.spec.d.ts +1 -0
  63. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js +40 -0
  64. package/react/components/common/tests/FinsembleToggleButtonBar.spec.js.map +1 -0
  65. package/react/components/common/tests/InputTable.spec.js +3 -3
  66. package/react/components/common/tests/InputTable.spec.js.map +1 -1
  67. package/react/components/favorites/FavoriteMaker.js +1 -1
  68. package/react/components/favorites/FavoriteMaker.js.map +1 -1
  69. package/react/components/fdc3Resolver/ResolverContainer.js +4 -7
  70. package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
  71. package/react/components/icon/Icon.d.ts +1 -1
  72. package/react/components/icon/Icon.js +8 -1
  73. package/react/components/icon/Icon.js.map +1 -1
  74. package/react/components/legacyControls/FinsembleDnDContext.js +7 -7
  75. package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
  76. package/react/components/linker/remoteRedux.js +1 -0
  77. package/react/components/linker/remoteRedux.js.map +1 -1
  78. package/react/components/menu/MenuItem.js +1 -1
  79. package/react/components/menu/MenuItem.js.map +1 -1
  80. package/react/components/menu/MenuPortal.js +12 -21
  81. package/react/components/menu/MenuPortal.js.map +1 -1
  82. package/react/components/menu/MenuToggle.js +1 -1
  83. package/react/components/menu/MenuToggle.js.map +1 -1
  84. package/react/components/menu/keyboardNavigation.d.ts +1 -22
  85. package/react/components/menu/keyboardNavigation.js +110 -160
  86. package/react/components/menu/keyboardNavigation.js.map +1 -1
  87. package/react/components/notifications/components/drawer/DrawerControls.js +39 -25
  88. package/react/components/notifications/components/drawer/DrawerControls.js.map +1 -1
  89. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js +19 -6
  90. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
  91. package/react/components/notifications/components/shared/CheckButton.js +19 -8
  92. package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
  93. package/react/components/notifications/components/shared/NotificationCardShell.js +2 -1
  94. package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
  95. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js +2 -1
  96. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
  97. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js +2 -1
  98. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js.map +1 -1
  99. package/react/components/notifications/components/views/CardView.js +5 -3
  100. package/react/components/notifications/components/views/CardView.js.map +1 -1
  101. package/react/components/notifications/components/views/ListView.js +3 -1
  102. package/react/components/notifications/components/views/ListView.js.map +1 -1
  103. package/react/components/notifications/types.d.ts +3 -0
  104. package/react/components/notifications/types.js.map +1 -1
  105. package/react/components/processMonitor/ProcessMonitor.js +4 -1
  106. package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
  107. package/react/components/processMonitor/components/ProcessStatistics.js +1 -3
  108. package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
  109. package/react/components/processMonitor/helpers.js +4 -3
  110. package/react/components/processMonitor/helpers.js.map +1 -1
  111. package/react/components/processMonitor/helpers.spec.js +7 -3
  112. package/react/components/processMonitor/helpers.spec.js.map +1 -1
  113. package/react/components/sdd/AddApp.d.ts +4 -3
  114. package/react/components/sdd/AddApp.js +132 -30
  115. package/react/components/sdd/AddApp.js.map +1 -1
  116. package/react/components/sdd/AppEditAccess.d.ts +4 -3
  117. package/react/components/sdd/AppEditAccess.js.map +1 -1
  118. package/react/components/sdd/AppEditPage.d.ts +4 -3
  119. package/react/components/sdd/AppEditPage.js +141 -116
  120. package/react/components/sdd/AppEditPage.js.map +1 -1
  121. package/react/components/sdd/Appearance.d.ts +2 -1
  122. package/react/components/sdd/Appearance.js +15 -7
  123. package/react/components/sdd/Appearance.js.map +1 -1
  124. package/react/components/sdd/Application.d.ts +5 -4
  125. package/react/components/sdd/Application.js +61 -42
  126. package/react/components/sdd/Application.js.map +1 -1
  127. package/react/components/sdd/Applications.d.ts +12 -11
  128. package/react/components/sdd/Applications.js +23 -4
  129. package/react/components/sdd/Applications.js.map +1 -1
  130. package/react/components/sdd/Authentication.js +1 -6
  131. package/react/components/sdd/Authentication.js.map +1 -1
  132. package/react/components/sdd/AuthenticationProviderConfig.js +5 -3
  133. package/react/components/sdd/AuthenticationProviderConfig.js.map +1 -1
  134. package/react/components/sdd/EditPreload.d.ts +4 -3
  135. package/react/components/sdd/EditPreload.js +39 -22
  136. package/react/components/sdd/EditPreload.js.map +1 -1
  137. package/react/components/sdd/Export.d.ts +7 -6
  138. package/react/components/sdd/Export.js +3 -2
  139. package/react/components/sdd/Export.js.map +1 -1
  140. package/react/components/sdd/GettingStarted.js +3 -3
  141. package/react/components/sdd/GettingStarted.js.map +1 -1
  142. package/react/components/sdd/Navigation.js +28 -4
  143. package/react/components/sdd/Navigation.js.map +1 -1
  144. package/react/components/sdd/OptionalSettingsView.d.ts +6 -5
  145. package/react/components/sdd/OptionalSettingsView.js +2 -10
  146. package/react/components/sdd/OptionalSettingsView.js.map +1 -1
  147. package/react/components/sdd/ProjectErrors.js +1 -1
  148. package/react/components/sdd/ProjectErrors.js.map +1 -1
  149. package/react/components/sdd/Publish.js +2 -2
  150. package/react/components/sdd/Publish.js.map +1 -1
  151. package/react/components/sdd/SmartDesktopDesigner.d.ts +17 -16
  152. package/react/components/sdd/SmartDesktopDesigner.js +37 -34
  153. package/react/components/sdd/SmartDesktopDesigner.js.map +1 -1
  154. package/react/components/sdd/ThemePage.js +8 -5
  155. package/react/components/sdd/ThemePage.js.map +1 -1
  156. package/react/components/sdd/Themes.d.ts +2 -1
  157. package/react/components/sdd/Themes.js +2 -2
  158. package/react/components/sdd/Themes.js.map +1 -1
  159. package/react/components/sdd/Toolbar.d.ts +5 -4
  160. package/react/components/sdd/Toolbar.js +11 -9
  161. package/react/components/sdd/Toolbar.js.map +1 -1
  162. package/react/components/sdd/common/setPreloadDefaults.d.ts +1 -1
  163. package/react/components/sdd/common/setPreloadDefaults.js +5 -4
  164. package/react/components/sdd/common/setPreloadDefaults.js.map +1 -1
  165. package/react/components/sdd/common/views.js +7 -4
  166. package/react/components/sdd/common/views.js.map +1 -1
  167. package/react/components/sdd/css/addApp.css +52 -0
  168. package/react/components/sdd/css/applications.css +4 -24
  169. package/react/components/sdd/css/nav.css +3 -3
  170. package/react/components/sdd/fixtures/authenticationProps.js +15 -1
  171. package/react/components/sdd/fixtures/authenticationProps.js.map +1 -1
  172. package/react/components/sdd/fixtures/preloads.js +14 -12
  173. package/react/components/sdd/fixtures/preloads.js.map +1 -1
  174. package/react/components/sdd/smartDesktopClient.d.ts +163 -0
  175. package/react/components/sdd/smartDesktopClient.js +573 -0
  176. package/react/components/sdd/smartDesktopClient.js.map +1 -0
  177. package/react/components/sdd/smartDesktopClient.spec.d.ts +1 -0
  178. package/react/components/sdd/smartDesktopClient.spec.js +61 -0
  179. package/react/components/sdd/smartDesktopClient.spec.js.map +1 -0
  180. package/react/components/sdd/stories/AddApp.stories.d.ts +10 -0
  181. package/react/components/sdd/stories/AddApp.stories.js +18 -0
  182. package/react/components/sdd/stories/AddApp.stories.js.map +1 -0
  183. package/react/components/sdd/stories/AppEditPage.stories.d.ts +2 -0
  184. package/react/components/sdd/stories/AppEditPage.stories.js +2 -0
  185. package/react/components/sdd/stories/AppEditPage.stories.js.map +1 -1
  186. package/react/components/sdd/stories/Appearance.stories.d.ts +1 -1
  187. package/react/components/sdd/stories/Appearance.stories.js +1 -0
  188. package/react/components/sdd/stories/Appearance.stories.js.map +1 -1
  189. package/react/components/sdd/stories/Authentication.stories.js +2 -16
  190. package/react/components/sdd/stories/Authentication.stories.js.map +1 -1
  191. package/react/components/sdd/stories/OptionalSettingsView.stories.js +1 -1
  192. package/react/components/sdd/stories/OptionalSettingsView.stories.js.map +1 -1
  193. package/react/components/sdd/stories/SmartDesktopDesigner.stories.d.ts +1 -1
  194. package/react/components/sdd/stories/SmartDesktopDesigner.stories.js +3 -0
  195. package/react/components/sdd/stories/SmartDesktopDesigner.stories.js.map +1 -1
  196. package/react/components/sdd/stories/Themes.stories.d.ts +1 -1
  197. package/react/components/sdd/stories/Themes.stories.js +1 -0
  198. package/react/components/sdd/stories/Themes.stories.js.map +1 -1
  199. package/react/components/sdd/tests/AddApp.spec.d.ts +1 -0
  200. package/react/components/sdd/tests/AddApp.spec.js +96 -0
  201. package/react/components/sdd/tests/AddApp.spec.js.map +1 -0
  202. package/react/components/sdd/tests/AppEditPage.spec.js +92 -23
  203. package/react/components/sdd/tests/AppEditPage.spec.js.map +1 -1
  204. package/react/components/sdd/tests/Application.spec.js +411 -24
  205. package/react/components/sdd/tests/Application.spec.js.map +1 -1
  206. package/react/components/sdd/tests/Applications.spec.js +1 -45
  207. package/react/components/sdd/tests/Applications.spec.js.map +1 -1
  208. package/react/components/sdd/tests/Authentication.spec.js +1 -1
  209. package/react/components/sdd/tests/Authentication.spec.js.map +1 -1
  210. package/react/components/sdd/tests/EditPreload.spec.js +50 -7
  211. package/react/components/sdd/tests/EditPreload.spec.js.map +1 -1
  212. package/react/components/sdd/tests/Navigation.spec.js +2 -2
  213. package/react/components/sdd/tests/Navigation.spec.js.map +1 -1
  214. package/react/components/sdd/tests/OptionalSettingsView.spec.js +235 -0
  215. package/react/components/sdd/tests/OptionalSettingsView.spec.js.map +1 -1
  216. package/react/components/sdd/tests/ProjectErrors.spec.js +1 -1
  217. package/react/components/sdd/tests/ProjectErrors.spec.js.map +1 -1
  218. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js +2 -2
  219. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js.map +1 -1
  220. package/react/components/search/Search.js +1 -1
  221. package/react/components/search/Search.js.map +1 -1
  222. package/react/components/shared/DefaultDropdownButton.js +12 -1
  223. package/react/components/shared/DefaultDropdownButton.js.map +1 -1
  224. package/react/components/shared/tests/DefaultDropdownButton.spec.js +12 -0
  225. package/react/components/shared/tests/DefaultDropdownButton.spec.js.map +1 -1
  226. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.d.ts +1 -16
  227. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js +0 -4
  228. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
  229. package/react/components/toolbar/DragHandle.stories.js.map +1 -1
  230. package/react/components/toolbar/ToolbarIcon.js +2 -2
  231. package/react/components/toolbar/ToolbarIcon.js.map +1 -1
  232. package/react/components/toolbar/ToolbarSection.d.ts +1 -9
  233. package/react/components/toolbar/ToolbarSection.js +3 -7
  234. package/react/components/toolbar/ToolbarSection.js.map +1 -1
  235. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js +1 -1
  236. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
  237. package/react/components/toolbar/dashbar/Dashbar.js +21 -12
  238. package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
  239. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js +1 -1
  240. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
  241. package/react/components/userPreferences/components/ContentSection.js +1 -1
  242. package/react/components/userPreferences/components/ContentSection.js.map +1 -1
  243. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js +4 -3
  244. package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js.map +1 -1
  245. package/react/components/userPreferences/components/general/ScheduledClose.js +12 -3
  246. package/react/components/userPreferences/components/general/ScheduledClose.js.map +1 -1
  247. package/react/components/userPreferences/components/workspaces/WorkspaceButton.js +1 -1
  248. package/react/components/userPreferences/components/workspaces/WorkspaceButton.js.map +1 -1
  249. package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +17 -2
  250. package/react/components/windowTitleBar/WindowTitleBarShell.js +160 -6
  251. package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
  252. package/react/components/windowTitleBar/components/left/LinkerButton.js +7 -1
  253. package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
  254. package/react/components/windowTitleBar/components/windowTitle.js +10 -2
  255. package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
  256. package/react/components/windowTitleBar/stores/windowTitleBarStore.js +11 -1
  257. package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
  258. package/react/reducers/rootReducer.d.ts +2 -2
  259. package/react/store.d.ts +4 -4
  260. package/react/tsconfig.tsbuildinfo +1 -0
  261. package/react/types/smartDesktopDesignerTypes.d.ts +3 -0
  262. package/react/types/smartDesktopDesignerTypes.js.map +1 -1
@@ -20,7 +20,7 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
20
20
  let titleGrabPosition = null;
21
21
  let offsetX = null;
22
22
  const WIDGET_COUNT = Object.keys(widgets).length;
23
- const SCROLL_BUTTON_WIDTH = 30;
23
+ const SCROLL_BUTTON_DEFAULT_WIDTH = 30;
24
24
  const defaultWidgetTitleGenerator = (widget, titleRef) => {
25
25
  const handleWidgetTitleClick = () => {
26
26
  if (widget.raiseIntentOptions) {
@@ -63,10 +63,14 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
63
63
  var _a;
64
64
  const { data: bounds } = await finsembleWindow.getBounds();
65
65
  const scrollButtonsEnabled = document.querySelectorAll("#dashbar-container > .chevron-container").length > 0;
66
- const elements = document.getElementsByClassName("dashbar-item-frame");
66
+ const elements = document.getElementsByClassName("finsemble-dashbar-item");
67
67
  let toolbarWidth = (_a = bounds === null || bounds === void 0 ? void 0 : bounds.width) !== null && _a !== void 0 ? _a : 0;
68
- if (scrollButtonsEnabled)
68
+ let SCROLL_BUTTON_WIDTH = SCROLL_BUTTON_DEFAULT_WIDTH;
69
+ if (scrollButtonsEnabled) {
70
+ SCROLL_BUTTON_WIDTH = document.querySelectorAll("#dashbar-container > .chevron-container")[0]
71
+ .offsetWidth;
69
72
  toolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;
73
+ }
70
74
  let tempLeft = 0;
71
75
  let leftButtonSize = 0;
72
76
  if (scrollButtonsEnabled) {
@@ -75,9 +79,11 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
75
79
  }
76
80
  let leftItemsCount = 0;
77
81
  let rightItemsCount = 0;
78
- for (const element of elements) {
79
- const rect = element.getBoundingClientRect();
80
- const widget = widgets[element.id];
82
+ for (const dashbarItem of elements) {
83
+ const rect = dashbarItem.getBoundingClientRect();
84
+ const dashbarItemFrame = dashbarItem.firstChild;
85
+ const widgetId = dashbarItemFrame.id;
86
+ const widget = widgets[widgetId];
81
87
  if (!widget)
82
88
  continue;
83
89
  if (rect.left < SCROLL_BUTTON_WIDTH && scrollButtonsEnabled) {
@@ -88,16 +94,16 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
88
94
  else {
89
95
  widget.bounds.width = rect.width - widgetDividerWidth;
90
96
  widget.bounds.left = tempLeft;
97
+ tempLeft = tempLeft + rect.width;
91
98
  }
92
- tempLeft = tempLeft + widget.bounds.width + widgetDividerWidth;
93
- let offsetRight = rect.left + rect.width + widgetDividerWidth - leftButtonSize - toolbarWidth;
99
+ let offsetRight = rect.left + rect.width - widgetDividerWidth - leftButtonSize - toolbarWidth;
94
100
  if (offsetRight > 0) {
95
- element.childNodes[0].style.visibility = "hidden";
101
+ dashbarItemFrame.firstChild.style.visibility = "hidden";
96
102
  widget.bounds.width = 0;
97
103
  rightItemsCount++;
98
104
  }
99
105
  else {
100
- element.childNodes[0].style.visibility = "visible";
106
+ dashbarItemFrame.firstChild.style.visibility = "visible";
101
107
  }
102
108
  widget.view.setBounds(widget.bounds);
103
109
  }
@@ -247,7 +253,6 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
247
253
  cachedWidgetHeight = newBounds.height;
248
254
  widget.view.setBounds(newBounds);
249
255
  widget.bounds = newBounds;
250
- setWidgets(_widgets);
251
256
  };
252
257
  const startMove = (node, event) => {
253
258
  movingIndex = node.index;
@@ -280,8 +285,12 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
280
285
  const setGrabLocation = (location) => {
281
286
  titleGrabPosition = location;
282
287
  };
288
+ const elementKey = Object.entries(widgets)
289
+ .map((entry) => entry[0])
290
+ .sort()
291
+ .join("-");
283
292
  return (React.createElement("div", { className: wrapperClasses, style: { height: dashbarHeight } },
284
- WIDGET_COUNT > 0 && (React.createElement(FinsembleDnDContext, { onDragEnd: reorderItems, onDragStart: startMove, onDragMove: moveItem, onLayoutUpdate: setWidgetsPositions, className: "finsemble-dashbar-section rearrange-region", id: "dashbar-container", axis: AllowableDnDAxis.x, lockAxis: AllowableDnDAxis.x, allowHorizontalScroll: true, showScrollButtonsTooltip: true, leftButtonTooltip: leftButtonTooltip, rightButtonTooltip: rightButtonTooltip, metadata: { dashbar } }, Object.values(widgets).map((widget, i) => (React.createElement(DashbarItem, { key: i, id: Object.keys(widgets)[i], index: i, widgetTitleGenerator: titleGenerator, widget: widget, dashbarHeight: dashbar.height, widgetDividerWidth: widgetDividerWidth, setTitleHeight: setTitleHeight, setGrabLocation: setGrabLocation }))))),
293
+ WIDGET_COUNT > 0 && (React.createElement(FinsembleDnDContext, { key: elementKey, onDragEnd: reorderItems, onDragStart: startMove, onDragMove: moveItem, onLayoutUpdate: setWidgetsPositions, className: "finsemble-dashbar-section rearrange-region", id: "dashbar-container", axis: AllowableDnDAxis.x, lockAxis: AllowableDnDAxis.x, allowHorizontalScroll: true, showScrollButtonsTooltip: true, leftButtonTooltip: leftButtonTooltip, rightButtonTooltip: rightButtonTooltip, metadata: { dashbar } }, Object.values(widgets).map((widget, i) => (React.createElement(DashbarItem, { key: i, id: Object.keys(widgets)[i], index: i, widgetTitleGenerator: titleGenerator, widget: widget, dashbarHeight: dashbar.height, widgetDividerWidth: widgetDividerWidth, setTitleHeight: setTitleHeight, setGrabLocation: setGrabLocation }))))),
285
294
  WIDGET_COUNT === 0 && (React.createElement("div", { className: "add-dashbar-item-button", onClick: launchDashbar },
286
295
  React.createElement("span", null,
287
296
  React.createElement("i", { className: "ff-plus" })))),
@@ -1 +1 @@
1
- {"version":3,"file":"Dashbar.js","sourceRoot":"","sources":["../../../../src/components/toolbar/dashbar/Dashbar.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { DashbarItem } from \"./DashbarItem\";\nimport { Dashbar as DashbarType, DashbarItem as DashbarItemType, DashbarView } from \"../../../types/dashbarTypes\";\nimport { useDashbar } from \"../../../hooks/useDashbar\";\nimport { useToolbar } from \"../../../hooks/useToolbar\";\nimport { FinsembleDnDContext, AllowableDnDAxis } from \"../../legacyControls/FinsembleDnDContext\";\nimport clone from \"lodash/cloneDeep\";\n\nimport \"../../../assets/css/dashbar.css\";\n\ntype DashbarViews = {\n\t[key: string]: DashbarView;\n} & {};\n\nlet cachedWidgetTop: number;\nlet cachedWidgetHeight: number;\n\nexport const Dashbar = ({ className, children, widgetTitleGenerator }: DashbarType) => {\n\tconst { dashbarItems, reorderDashbarItems } = useDashbar();\n\tconst { launchPreferences } = useToolbar();\n\n\tconst [widgets, setWidgets] = useState({});\n\tconst [horizontalBounds, setHorizontalBounds] = useState(0);\n\tconst [wasReorganized, setReorganized] = useState(false);\n\tconst [totalWidgetsWidth, setTotalWidgetsWidth] = useState(0);\n\tconst [isUpdatingState, setIsUpdatingState] = useState(false);\n\tconst [secondUpdateRequired, setSecondUpdateRequired] = useState(false);\n\n\tlet movingIndex: number | null = null; // The dasharItem index being dragged, null if none\n\tlet titleGrabPosition: number | null = null; // The mouse of event when a widget title is dragged\n\tlet offsetX: number | null = null; // The original grab location of a given view titlebar\n\n\tconst WIDGET_COUNT: number = Object.keys(widgets).length;\n\tconst SCROLL_BUTTON_WIDTH = 30;\n\n\tconst defaultWidgetTitleGenerator = (widget: DashbarView, titleRef: React.MutableRefObject<null>) => {\n\t\tconst handleWidgetTitleClick = () => {\n\t\t\tif (widget.raiseIntentOptions) {\n\t\t\t\tfdc3.raiseIntent(\n\t\t\t\t\twidget.raiseIntentOptions.intent,\n\t\t\t\t\twidget.raiseIntentOptions.context,\n\t\t\t\t\twidget.raiseIntentOptions.targetApp\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div ref={titleRef} onClick={() => handleWidgetTitleClick()}>\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: widget.title }}></span>\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst titleGenerator = widgetTitleGenerator ?? defaultWidgetTitleGenerator;\n\n\t/**\n\t *\n\t * @param {object} params\n\t * @param {number} oldIndex The index of the item being moved\n\t * @param {number} newIndex The index to move the item to\n\t */\n\tconst reorderItems = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\tmovingIndex = null;\n\t\ttitleGrabPosition = null;\n\t\toffsetX = null;\n\t\tsetReorganized(true);\n\t\t// Update the redux store\n\t\treorderDashbarItems({ oldIndex, newIndex });\n\t};\n\n\tconst launchDashbar = () => {\n\t\tlaunchPreferences(\"Dashbar\");\n\t};\n\n\tconst { dashbar } = FSBL.Clients.WindowClient.getSpawnData();\n\n\t// Dashbar is disabled (no config in toolbar) or dashbar height is not specified\n\tif (!dashbar || !dashbar.height) {\n\t\treturn null;\n\t}\n\tconst toolbarHeight = finsembleWindow.windowOptions.height;\n\tconst dashbarHeight = `${dashbar.height}px`;\n\tconst verticalBounds = toolbarHeight - dashbar.height;\n\tconst widgetDividerWidth = dashbar.widgetDividerWidth || 0;\n\n\tconst wrapperClasses = `finsemble-dashbar ${className || \"\"}`.trim();\n\n\tconst getTotalWidth = () => {\n\t\tlet totalWidth = 0;\n\t\tdashbarItems.forEach((item: DashbarItemType) => {\n\t\t\ttotalWidth = totalWidth + item.width;\n\t\t});\n\t\treturn totalWidth;\n\t};\n\n\tconst [leftButtonTooltip, setLeftButtonTooltip] = useState(\"\");\n\tconst [rightButtonTooltip, setRightButtonTooltip] = useState(\"\");\n\n\tconst setWidgetsPositions = async () => {\n\t\tconst { data: bounds } = await finsembleWindow.getBounds();\n\t\tconst scrollButtonsEnabled = document.querySelectorAll(\"#dashbar-container > .chevron-container\").length > 0;\n\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\tlet toolbarWidth = bounds?.width ?? 0;\n\t\tif (scrollButtonsEnabled) toolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;\n\n\t\tlet tempLeft = 0;\n\t\tlet leftButtonSize = 0;\n\t\tif (scrollButtonsEnabled) {\n\t\t\ttempLeft = SCROLL_BUTTON_WIDTH;\n\t\t\tleftButtonSize = SCROLL_BUTTON_WIDTH;\n\t\t}\n\n\t\tlet leftItemsCount = 0;\n\t\tlet rightItemsCount = 0;\n\n\t\tfor (const element of elements) {\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tconst widget = (widgets as DashbarViews)[element.id];\n\t\t\t// Happens when widgets were removed, but dom-elements still exists. So just ignore.\n\t\t\tif (!widget) continue;\n\n\t\t\tif (rect.left < SCROLL_BUTTON_WIDTH && scrollButtonsEnabled) {\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\tleftItemsCount++;\n\t\t\t} else {\n\t\t\t\twidget.bounds.width = rect.width - widgetDividerWidth;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t}\n\t\t\ttempLeft = tempLeft + widget.bounds.width + widgetDividerWidth;\n\n\t\t\tlet offsetRight = rect.left + rect.width + widgetDividerWidth - leftButtonSize - toolbarWidth;\n\t\t\tif (offsetRight > 0) {\n\t\t\t\t// hide title for invisible items\n\t\t\t\t(element.childNodes[0] as HTMLElement).style.visibility = \"hidden\";\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\trightItemsCount++;\n\t\t\t} else {\n\t\t\t\t(element.childNodes[0] as HTMLElement).style.visibility = \"visible\";\n\t\t\t}\n\t\t\twidget.view.setBounds(widget.bounds);\n\t\t}\n\n\t\tsetLeftButtonTooltip(`${leftItemsCount} more`);\n\t\tsetRightButtonTooltip(`${rightItemsCount} more`);\n\t};\n\n\tconst addWidgets = async () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\tlet tempHorizontalBounds = horizontalBounds;\n\n\t\tfor (const item of dashbarItems) {\n\t\t\tconst widgetBounds = {\n\t\t\t\ttop: verticalBounds,\n\t\t\t\tleft: tempHorizontalBounds,\n\t\t\t\twidth: item.width - widgetDividerWidth,\n\t\t\t\theight: item.height || dashbar.height,\n\t\t\t};\n\n\t\t\tif (!_widgets.hasOwnProperty(item.id)) {\n\t\t\t\tconst webContentsName = `(Dashbar) ${item.id}`;\n\t\t\t\tconst res: any = await finsembleWindow.addBrowserView({\n\t\t\t\t\turl: item.url,\n\t\t\t\t\twebContentsName,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tallowAutoResize: false,\n\t\t\t\t});\n\n\t\t\t\t_widgets[item.id] = {\n\t\t\t\t\turl: item.url,\n\t\t\t\t\ttitle: item.title,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tview: res,\n\t\t\t\t\twidth: item.width,\n\t\t\t\t\traiseIntentOptions: item.raiseIntentOptions,\n\t\t\t\t};\n\n\t\t\t\ttempHorizontalBounds = tempHorizontalBounds + item.width;\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempHorizontalBounds);\n\t};\n\n\tconst removeWidgets = async () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\t// Widgets is an object, with each key being a reference to an item in dashbarItems\n\t\t// but dashbarItems is an array of objects. Its necessary to loop through them to determine\n\t\t// the differences to figure out which items were removed.\n\t\tconst toRemove: string[] = [];\n\t\tObject.keys(_widgets).forEach((widgetId) => {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < dashbarItems.length; i++) {\n\t\t\t\tconst dashItem = dashbarItems[i];\n\t\t\t\tif (dashItem.id === widgetId) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\ttoRemove.push(widgetId);\n\t\t\t}\n\t\t});\n\n\t\tlet tempNewHorizontalBounds = 0;\n\t\t// toRemove is an array of widgetIds which were no longer found in dashbarItems\n\t\t// As items are removed, the remaining items have to be shuffled to fill the space\n\t\tfor (const id of toRemove) {\n\t\t\tif (_widgets.hasOwnProperty(id)) {\n\t\t\t\tawait _widgets[id].view.remove(() => {\n\t\t\t\t\tdelete _widgets[id];\n\t\t\t\t\t// Shuffle remaining views to fill any gaps that were left\n\t\t\t\t\tObject.values(_widgets).forEach((widget) => {\n\t\t\t\t\t\twidget.bounds = {\n\t\t\t\t\t\t\twidth: widget.bounds.width,\n\t\t\t\t\t\t\theight: widget.bounds.height,\n\t\t\t\t\t\t\tleft: tempNewHorizontalBounds,\n\t\t\t\t\t\t\ttop: widget.bounds.top,\n\t\t\t\t\t\t};\n\t\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t\t\ttempNewHorizontalBounds = tempNewHorizontalBounds + widget.bounds.width;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(`Error removing widget: ${id} from dashbar`);\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempNewHorizontalBounds);\n\t};\n\n\tconst reorganizeWidgets = () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\t// Each view needs to be resituated to fill any holes\n\t\t// left by views that have been removed. Use a tempBounds\n\t\t// int to keep track of new widths and set the overall width\n\t\t// once everything is re-seated\n\t\tlet tempBounds = 0;\n\t\tdashbarItems.forEach((item) => {\n\t\t\tconst widget = _widgets[item.id];\n\n\t\t\twidget.bounds = {\n\t\t\t\theight: cachedWidgetHeight || widget.bounds.height,\n\t\t\t\twidth: widget.bounds.width,\n\t\t\t\ttop: cachedWidgetTop || verticalBounds,\n\t\t\t\tleft: tempBounds,\n\t\t\t};\n\n\t\t\twidget.view.setBounds(widget.bounds);\n\n\t\t\tdelete _widgets[item.id];\n\t\t\t_widgets[item.id] = widget;\n\n\t\t\ttempBounds = tempBounds + item.width;\n\t\t});\n\n\t\tsetReorganized(false);\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempBounds);\n\t};\n\n\tconst updateItems = () => {\n\t\tconst doUpdate = async () => {\n\t\t\tif (dashbarItems.length > WIDGET_COUNT) {\n\t\t\t\t//Items have been added\n\t\t\t\tawait addWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (dashbarItems.length < WIDGET_COUNT) {\n\t\t\t\t//Items have been removed\n\t\t\t\tawait removeWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (wasReorganized) {\n\t\t\t\tif (movingIndex) return;\n\t\t\t\t// Length is the same, order has changed\n\t\t\t\treorganizeWidgets();\n\t\t\t}\n\n\t\t\tawait setWidgetsPositions();\n\t\t\tsetIsUpdatingState(false);\n\t\t};\n\n\t\tif (isUpdatingState === false) {\n\t\t\tsetIsUpdatingState(true);\n\t\t\tdoUpdate();\n\t\t} else if (!secondUpdateRequired) {\n\t\t\tsetSecondUpdateRequired(true);\n\t\t}\n\t};\n\n\t/**\n\t * When the distributed store's 'dashbaritems' is updated it will cause this hook to\n\t * execute. The local representation of widgets will be mutated, then a call to\n\t * setWidgets will re-render the component\n\t */\n\tuseEffect(() => {\n\t\tupdateItems();\n\t}, [dashbarItems]);\n\n\t/**\n\t * DashbarItems can be changed very quickly before all widgets will be initialized.\n\t * Double-calling updateItems() fixes a bug.\n\t */\n\tuseEffect(() => {\n\t\tif (secondUpdateRequired && !isUpdatingState) {\n\t\t\tupdateItems();\n\t\t\tsetSecondUpdateRequired(false);\n\t\t}\n\t}, [isUpdatingState, secondUpdateRequired]);\n\n\t/**\n\t * Sets the title height as determined by the DashbarItem\n\t * component, since the CSS can be changed by the user\n\t * the component will render the title and pass back\n\t * computed height of that title, then the Dashbar will\n\t * make room for item\n\t *\n\t * @param {number} titleHeight The height of the span containing the title\n\t * @param {string} id The key'ed id of the view\n\t */\n\tconst setTitleHeight = (titleHeight: number, id: string) => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\tconst widget = _widgets[id];\n\t\tif (cachedWidgetTop) {\n\t\t\ttitleHeight = 0;\n\t\t}\n\n\t\tconst newBounds = {\n\t\t\ttop: cachedWidgetTop || widget.bounds.top + titleHeight,\n\t\t\tleft: widget.bounds.left,\n\t\t\theight: cachedWidgetHeight || widget.bounds.height - titleHeight,\n\t\t\twidth: widget.bounds.width,\n\t\t};\n\t\tcachedWidgetTop = newBounds.top;\n\t\tcachedWidgetHeight = newBounds.height;\n\n\t\twidget.view.setBounds(newBounds);\n\t\twidget.bounds = newBounds;\n\t\tsetWidgets(_widgets);\n\t};\n\n\t/**\n\t * When a view starts moving, bring it to the front\n\t *\n\t * @param {MouseEvent} event The event passed by react-sortable-hoc\n\t */\n\tconst startMove = (node: any, event: any) => {\n\t\tmovingIndex = node.index;\n\t\tif (offsetX === null && titleGrabPosition !== null) {\n\t\t\toffsetX = event.clientX - titleGrabPosition;\n\t\t}\n\t\tconst widget = Object.values(widgets)[node.index] as DashbarView;\n\t\twidget.view.bringToFront();\n\t};\n\n\t/**\n\t * Event triggered by view movement\n\t *\n\t * @param {MouseEvent} event\n\t */\n\tconst moveItem = (event: any) => {\n\t\tif (movingIndex !== null) {\n\t\t\tconst movingWidget = Object.values(widgets)[movingIndex] as DashbarView;\n\n\t\t\tmovingWidget.view.setBounds({\n\t\t\t\ttop: movingWidget.bounds.top,\n\t\t\t\theight: movingWidget.bounds.height,\n\t\t\t\twidth: movingWidget.bounds.width,\n\t\t\t\tleft: event.clientX - (offsetX || 0),\n\t\t\t});\n\n\t\t\t// Some completely not react very hacky stuff to make browserviews move in conjunction with the titles\n\t\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\t\tfor (const element of elements) {\n\t\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\t\tconst widget = (widgets as any)[element.id];\n\t\t\t\tif (widget !== movingWidget && widget.bounds.left !== rect.left) {\n\t\t\t\t\twidget.bounds.left = rect.left;\n\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst setGrabLocation = (location: number) => {\n\t\ttitleGrabPosition = location;\n\t};\n\n\treturn (\n\t\t<div className={wrapperClasses} style={{ height: dashbarHeight }}>\n\t\t\t{WIDGET_COUNT > 0 && (\n\t\t\t\t<FinsembleDnDContext\n\t\t\t\t\tonDragEnd={reorderItems}\n\t\t\t\t\tonDragStart={startMove}\n\t\t\t\t\tonDragMove={moveItem}\n\t\t\t\t\tonLayoutUpdate={setWidgetsPositions}\n\t\t\t\t\tclassName=\"finsemble-dashbar-section rearrange-region\"\n\t\t\t\t\tid=\"dashbar-container\"\n\t\t\t\t\taxis={AllowableDnDAxis.x}\n\t\t\t\t\tlockAxis={AllowableDnDAxis.x}\n\t\t\t\t\tallowHorizontalScroll={true}\n\t\t\t\t\tshowScrollButtonsTooltip={true}\n\t\t\t\t\tleftButtonTooltip={leftButtonTooltip}\n\t\t\t\t\trightButtonTooltip={rightButtonTooltip}\n\t\t\t\t\tmetadata={{ dashbar }}\n\t\t\t\t>\n\t\t\t\t\t{Object.values(widgets).map((widget, i) => (\n\t\t\t\t\t\t<DashbarItem\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tid={Object.keys(widgets)[i]}\n\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\twidgetTitleGenerator={titleGenerator}\n\t\t\t\t\t\t\twidget={widget as DashbarView}\n\t\t\t\t\t\t\tdashbarHeight={dashbar.height}\n\t\t\t\t\t\t\twidgetDividerWidth={widgetDividerWidth}\n\t\t\t\t\t\t\tsetTitleHeight={setTitleHeight}\n\t\t\t\t\t\t\tsetGrabLocation={setGrabLocation}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</FinsembleDnDContext>\n\t\t\t)}\n\t\t\t{WIDGET_COUNT === 0 && (\n\t\t\t\t<div className=\"add-dashbar-item-button\" onClick={launchDashbar}>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<i className=\"ff-plus\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n"]}
1
+ {"version":3,"file":"Dashbar.js","sourceRoot":"","sources":["../../../../src/components/toolbar/dashbar/Dashbar.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { DashbarItem } from \"./DashbarItem\";\nimport { Dashbar as DashbarType, DashbarItem as DashbarItemType, DashbarView } from \"../../../types/dashbarTypes\";\nimport { useDashbar } from \"../../../hooks/useDashbar\";\nimport { useToolbar } from \"../../../hooks/useToolbar\";\nimport { FinsembleDnDContext, AllowableDnDAxis } from \"../../legacyControls/FinsembleDnDContext\";\nimport clone from \"lodash/cloneDeep\";\n\nimport \"../../../assets/css/dashbar.css\";\n\ntype DashbarViews = {\n\t[key: string]: DashbarView;\n} & {};\n\nlet cachedWidgetTop: number;\nlet cachedWidgetHeight: number;\n\nexport const Dashbar = ({ className, children, widgetTitleGenerator }: DashbarType) => {\n\tconst { dashbarItems, reorderDashbarItems } = useDashbar();\n\tconst { launchPreferences } = useToolbar();\n\n\tconst [widgets, setWidgets] = useState({});\n\tconst [horizontalBounds, setHorizontalBounds] = useState(0);\n\tconst [wasReorganized, setReorganized] = useState(false);\n\tconst [totalWidgetsWidth, setTotalWidgetsWidth] = useState(0);\n\tconst [isUpdatingState, setIsUpdatingState] = useState(false);\n\tconst [secondUpdateRequired, setSecondUpdateRequired] = useState(false);\n\n\tlet movingIndex: number | null = null; // The dashbarItem index being dragged, null if none\n\tlet titleGrabPosition: number | null = null; // The mouse of event when a widget title is dragged\n\tlet offsetX: number | null = null; // The original grab location of a given view titlebar\n\n\tconst WIDGET_COUNT: number = Object.keys(widgets).length;\n\tconst SCROLL_BUTTON_DEFAULT_WIDTH = 30;\n\n\tconst defaultWidgetTitleGenerator = (widget: DashbarView, titleRef: React.MutableRefObject<null>) => {\n\t\tconst handleWidgetTitleClick = () => {\n\t\t\tif (widget.raiseIntentOptions) {\n\t\t\t\tfdc3.raiseIntent(\n\t\t\t\t\twidget.raiseIntentOptions.intent,\n\t\t\t\t\twidget.raiseIntentOptions.context,\n\t\t\t\t\twidget.raiseIntentOptions.targetApp\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div ref={titleRef} onClick={() => handleWidgetTitleClick()}>\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: widget.title }}></span>\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst titleGenerator = widgetTitleGenerator ?? defaultWidgetTitleGenerator;\n\n\t/**\n\t *\n\t * @param {object} params\n\t * @param {number} oldIndex The index of the item being moved\n\t * @param {number} newIndex The index to move the item to\n\t */\n\tconst reorderItems = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\tmovingIndex = null;\n\t\ttitleGrabPosition = null;\n\t\toffsetX = null;\n\t\tsetReorganized(true);\n\t\t// Update the redux store\n\t\treorderDashbarItems({ oldIndex, newIndex });\n\t};\n\n\tconst launchDashbar = () => {\n\t\tlaunchPreferences(\"Dashbar\");\n\t};\n\n\tconst { dashbar } = FSBL.Clients.WindowClient.getSpawnData();\n\n\t// Dashbar is disabled (no config in toolbar) or dashbar height is not specified\n\tif (!dashbar || !dashbar.height) {\n\t\treturn null;\n\t}\n\tconst toolbarHeight = finsembleWindow.windowOptions.height;\n\tconst dashbarHeight = `${dashbar.height}px`;\n\tconst verticalBounds = toolbarHeight - dashbar.height;\n\tconst widgetDividerWidth = dashbar.widgetDividerWidth || 0;\n\n\tconst wrapperClasses = `finsemble-dashbar ${className || \"\"}`.trim();\n\n\tconst getTotalWidth = () => {\n\t\tlet totalWidth = 0;\n\t\tdashbarItems.forEach((item: DashbarItemType) => {\n\t\t\ttotalWidth = totalWidth + item.width;\n\t\t});\n\t\treturn totalWidth;\n\t};\n\n\tconst [leftButtonTooltip, setLeftButtonTooltip] = useState(\"\");\n\tconst [rightButtonTooltip, setRightButtonTooltip] = useState(\"\");\n\n\t// For calculation widgets position that function uses the HTML elements.\n\t// If something will be changed in HTML hierarchy for widgets, that function should be refactored.\n\tconst setWidgetsPositions = async () => {\n\t\tconst { data: bounds } = await finsembleWindow.getBounds();\n\t\tconst scrollButtonsEnabled = document.querySelectorAll(\"#dashbar-container > .chevron-container\").length > 0;\n\t\tconst elements = document.getElementsByClassName(\"finsemble-dashbar-item\");\n\t\tlet toolbarWidth = bounds?.width ?? 0;\n\t\tlet SCROLL_BUTTON_WIDTH = SCROLL_BUTTON_DEFAULT_WIDTH;\n\t\tif (scrollButtonsEnabled) {\n\t\t\t// Get actual width in case of client styling\n\t\t\tSCROLL_BUTTON_WIDTH = (document.querySelectorAll(\"#dashbar-container > .chevron-container\")[0] as HTMLElement)\n\t\t\t\t.offsetWidth;\n\t\t\ttoolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;\n\t\t}\n\n\t\tlet tempLeft = 0;\n\t\tlet leftButtonSize = 0;\n\t\tif (scrollButtonsEnabled) {\n\t\t\ttempLeft = SCROLL_BUTTON_WIDTH;\n\t\t\tleftButtonSize = SCROLL_BUTTON_WIDTH;\n\t\t}\n\n\t\tlet leftItemsCount = 0;\n\t\tlet rightItemsCount = 0;\n\n\t\tfor (const dashbarItem of elements) {\n\t\t\t// rect.width already contains the divider width\n\t\t\tconst rect = dashbarItem.getBoundingClientRect();\n\t\t\tconst dashbarItemFrame = dashbarItem.firstChild as Element;\n\t\t\tconst widgetId = dashbarItemFrame.id;\n\t\t\tconst widget = (widgets as DashbarViews)[widgetId];\n\t\t\t// Happens when widgets were removed, but dom-elements still exists. So just ignore.\n\t\t\tif (!widget) continue;\n\n\t\t\tif (rect.left < SCROLL_BUTTON_WIDTH && scrollButtonsEnabled) {\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\tleftItemsCount++;\n\t\t\t} else {\n\t\t\t\twidget.bounds.width = rect.width - widgetDividerWidth;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\ttempLeft = tempLeft + rect.width;\n\t\t\t}\n\n\t\t\tlet offsetRight = rect.left + rect.width - widgetDividerWidth - leftButtonSize - toolbarWidth;\n\t\t\tif (offsetRight > 0) {\n\t\t\t\t// hide title for invisible items\n\t\t\t\t(dashbarItemFrame.firstChild as HTMLElement).style.visibility = \"hidden\";\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\trightItemsCount++;\n\t\t\t} else {\n\t\t\t\t(dashbarItemFrame.firstChild as HTMLElement).style.visibility = \"visible\";\n\t\t\t}\n\t\t\twidget.view.setBounds(widget.bounds);\n\t\t}\n\n\t\tsetLeftButtonTooltip(`${leftItemsCount} more`);\n\t\tsetRightButtonTooltip(`${rightItemsCount} more`);\n\t};\n\n\tconst addWidgets = async () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\tlet tempHorizontalBounds = horizontalBounds;\n\n\t\tfor (const item of dashbarItems) {\n\t\t\tconst widgetBounds = {\n\t\t\t\ttop: verticalBounds,\n\t\t\t\tleft: tempHorizontalBounds,\n\t\t\t\twidth: item.width - widgetDividerWidth,\n\t\t\t\theight: item.height || dashbar.height,\n\t\t\t};\n\n\t\t\tif (!_widgets.hasOwnProperty(item.id)) {\n\t\t\t\tconst webContentsName = `(Dashbar) ${item.id}`;\n\t\t\t\tconst res: any = await finsembleWindow.addBrowserView({\n\t\t\t\t\turl: item.url,\n\t\t\t\t\twebContentsName,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tallowAutoResize: false,\n\t\t\t\t});\n\n\t\t\t\t_widgets[item.id] = {\n\t\t\t\t\turl: item.url,\n\t\t\t\t\ttitle: item.title,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tview: res,\n\t\t\t\t\twidth: item.width,\n\t\t\t\t\traiseIntentOptions: item.raiseIntentOptions,\n\t\t\t\t};\n\n\t\t\t\ttempHorizontalBounds = tempHorizontalBounds + item.width;\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempHorizontalBounds);\n\t};\n\n\tconst removeWidgets = async () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\t// Widgets is an object, with each key being a reference to an item in dashbarItems\n\t\t// but dashbarItems is an array of objects. Its necessary to loop through them to determine\n\t\t// the differences to figure out which items were removed.\n\t\tconst toRemove: string[] = [];\n\t\tObject.keys(_widgets).forEach((widgetId) => {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < dashbarItems.length; i++) {\n\t\t\t\tconst dashItem = dashbarItems[i];\n\t\t\t\tif (dashItem.id === widgetId) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\ttoRemove.push(widgetId);\n\t\t\t}\n\t\t});\n\n\t\tlet tempNewHorizontalBounds = 0;\n\t\t// toRemove is an array of widgetIds which were no longer found in dashbarItems\n\t\t// As items are removed, the remaining items have to be shuffled to fill the space\n\t\tfor (const id of toRemove) {\n\t\t\tif (_widgets.hasOwnProperty(id)) {\n\t\t\t\tawait _widgets[id].view.remove(() => {\n\t\t\t\t\tdelete _widgets[id];\n\t\t\t\t\t// Shuffle remaining views to fill any gaps that were left\n\t\t\t\t\tObject.values(_widgets).forEach((widget) => {\n\t\t\t\t\t\twidget.bounds = {\n\t\t\t\t\t\t\twidth: widget.bounds.width,\n\t\t\t\t\t\t\theight: widget.bounds.height,\n\t\t\t\t\t\t\tleft: tempNewHorizontalBounds,\n\t\t\t\t\t\t\ttop: widget.bounds.top,\n\t\t\t\t\t\t};\n\t\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t\t\ttempNewHorizontalBounds = tempNewHorizontalBounds + widget.bounds.width;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(`Error removing widget: ${id} from dashbar`);\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempNewHorizontalBounds);\n\t};\n\n\tconst reorganizeWidgets = () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\t// Each view needs to be resituated to fill any holes\n\t\t// left by views that have been removed. Use a tempBounds\n\t\t// int to keep track of new widths and set the overall width\n\t\t// once everything is re-seated\n\t\tlet tempBounds = 0;\n\t\tdashbarItems.forEach((item) => {\n\t\t\tconst widget = _widgets[item.id];\n\n\t\t\twidget.bounds = {\n\t\t\t\theight: cachedWidgetHeight || widget.bounds.height,\n\t\t\t\twidth: widget.bounds.width,\n\t\t\t\ttop: cachedWidgetTop || verticalBounds,\n\t\t\t\tleft: tempBounds,\n\t\t\t};\n\n\t\t\twidget.view.setBounds(widget.bounds);\n\n\t\t\tdelete _widgets[item.id];\n\t\t\t_widgets[item.id] = widget;\n\n\t\t\ttempBounds = tempBounds + item.width;\n\t\t});\n\n\t\tsetReorganized(false);\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempBounds);\n\t};\n\n\tconst updateItems = () => {\n\t\tconst doUpdate = async () => {\n\t\t\tif (dashbarItems.length > WIDGET_COUNT) {\n\t\t\t\t//Items have been added\n\t\t\t\tawait addWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (dashbarItems.length < WIDGET_COUNT) {\n\t\t\t\t//Items have been removed\n\t\t\t\tawait removeWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (wasReorganized) {\n\t\t\t\tif (movingIndex) return;\n\t\t\t\t// Length is the same, order has changed\n\t\t\t\treorganizeWidgets();\n\t\t\t}\n\n\t\t\tawait setWidgetsPositions();\n\t\t\tsetIsUpdatingState(false);\n\t\t};\n\n\t\tif (isUpdatingState === false) {\n\t\t\tsetIsUpdatingState(true);\n\t\t\tdoUpdate();\n\t\t} else if (!secondUpdateRequired) {\n\t\t\tsetSecondUpdateRequired(true);\n\t\t}\n\t};\n\n\t/**\n\t * When the distributed store's 'dashbaritems' is updated it will cause this hook to\n\t * execute. The local representation of widgets will be mutated, then a call to\n\t * setWidgets will re-render the component\n\t */\n\tuseEffect(() => {\n\t\tupdateItems();\n\t}, [dashbarItems]);\n\n\t/**\n\t * DashbarItems can be changed very quickly before all widgets will be initialized.\n\t * Double-calling updateItems() fixes a bug.\n\t */\n\tuseEffect(() => {\n\t\tif (secondUpdateRequired && !isUpdatingState) {\n\t\t\tupdateItems();\n\t\t\tsetSecondUpdateRequired(false);\n\t\t}\n\t}, [isUpdatingState, secondUpdateRequired]);\n\n\t/**\n\t * Sets the title height as determined by the DashbarItem\n\t * component, since the CSS can be changed by the user\n\t * the component will render the title and pass back\n\t * computed height of that title, then the Dashbar will\n\t * make room for item\n\t *\n\t * @param {number} titleHeight The height of the span containing the title\n\t * @param {string} id The key'ed id of the view\n\t */\n\tconst setTitleHeight = (titleHeight: number, id: string) => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\tconst widget = _widgets[id];\n\t\tif (cachedWidgetTop) {\n\t\t\ttitleHeight = 0;\n\t\t}\n\n\t\tconst newBounds = {\n\t\t\ttop: cachedWidgetTop || widget.bounds.top + titleHeight,\n\t\t\tleft: widget.bounds.left,\n\t\t\theight: cachedWidgetHeight || widget.bounds.height - titleHeight,\n\t\t\twidth: widget.bounds.width,\n\t\t};\n\t\tcachedWidgetTop = newBounds.top;\n\t\tcachedWidgetHeight = newBounds.height;\n\n\t\twidget.view.setBounds(newBounds);\n\t\twidget.bounds = newBounds;\n\t};\n\n\t/**\n\t * When a view starts moving, bring it to the front\n\t *\n\t * @param {MouseEvent} event The event passed by react-sortable-hoc\n\t */\n\tconst startMove = (node: any, event: any) => {\n\t\tmovingIndex = node.index;\n\t\tif (offsetX === null && titleGrabPosition !== null) {\n\t\t\toffsetX = event.clientX - titleGrabPosition;\n\t\t}\n\t\tconst widget = Object.values(widgets)[node.index] as DashbarView;\n\t\twidget.view.bringToFront();\n\t};\n\n\t/**\n\t * Event triggered by view movement\n\t *\n\t * @param {MouseEvent} event\n\t */\n\tconst moveItem = (event: any) => {\n\t\tif (movingIndex !== null) {\n\t\t\tconst movingWidget = Object.values(widgets)[movingIndex] as DashbarView;\n\n\t\t\tmovingWidget.view.setBounds({\n\t\t\t\ttop: movingWidget.bounds.top,\n\t\t\t\theight: movingWidget.bounds.height,\n\t\t\t\twidth: movingWidget.bounds.width,\n\t\t\t\tleft: event.clientX - (offsetX || 0),\n\t\t\t});\n\n\t\t\t// Some completely not react very hacky stuff to make browserviews move in conjunction with the titles\n\t\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\t\tfor (const element of elements) {\n\t\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\t\tconst widget = (widgets as any)[element.id];\n\t\t\t\tif (widget !== movingWidget && widget.bounds.left !== rect.left) {\n\t\t\t\t\twidget.bounds.left = rect.left;\n\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst setGrabLocation = (location: number) => {\n\t\ttitleGrabPosition = location;\n\t};\n\n\t/**\n\t * Every time a widget is added or removed, modify the key on the FinsembleDnDContext element forcing a rerender.\n\t *\n\t * This is a workaround for certain cases where removing a dashbar item would align the panels incorrectly in\n\t * FinsembleDnDContext. The scrolling works by the FinsembleDnDContext setting scrollLeft value. All calculations\n\t * in FinsembleDnDContext are correct but due to a browser bug, when removing component under certain conditions,\n\t * it somehow sets false maximum value for this scrollLeft value. Any value higher than the maximum is capped\n\t * causing it to half scroll an element.\n\t *\n\t */\n\tconst elementKey = Object.entries(widgets)\n\t\t.map((entry) => entry[0])\n\t\t.sort()\n\t\t.join(\"-\");\n\n\treturn (\n\t\t<div className={wrapperClasses} style={{ height: dashbarHeight }}>\n\t\t\t{WIDGET_COUNT > 0 && (\n\t\t\t\t<FinsembleDnDContext\n\t\t\t\t\tkey={elementKey}\n\t\t\t\t\tonDragEnd={reorderItems}\n\t\t\t\t\tonDragStart={startMove}\n\t\t\t\t\tonDragMove={moveItem}\n\t\t\t\t\tonLayoutUpdate={setWidgetsPositions}\n\t\t\t\t\tclassName=\"finsemble-dashbar-section rearrange-region\"\n\t\t\t\t\tid=\"dashbar-container\"\n\t\t\t\t\taxis={AllowableDnDAxis.x}\n\t\t\t\t\tlockAxis={AllowableDnDAxis.x}\n\t\t\t\t\tallowHorizontalScroll={true}\n\t\t\t\t\tshowScrollButtonsTooltip={true}\n\t\t\t\t\tleftButtonTooltip={leftButtonTooltip}\n\t\t\t\t\trightButtonTooltip={rightButtonTooltip}\n\t\t\t\t\tmetadata={{ dashbar }}\n\t\t\t\t>\n\t\t\t\t\t{Object.values(widgets).map((widget, i) => (\n\t\t\t\t\t\t<DashbarItem\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tid={Object.keys(widgets)[i]}\n\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\twidgetTitleGenerator={titleGenerator}\n\t\t\t\t\t\t\twidget={widget as DashbarView}\n\t\t\t\t\t\t\tdashbarHeight={dashbar.height}\n\t\t\t\t\t\t\twidgetDividerWidth={widgetDividerWidth}\n\t\t\t\t\t\t\tsetTitleHeight={setTitleHeight}\n\t\t\t\t\t\t\tsetGrabLocation={setGrabLocation}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</FinsembleDnDContext>\n\t\t\t)}\n\t\t\t{WIDGET_COUNT === 0 && (\n\t\t\t\t<div className=\"add-dashbar-item-button\" onClick={launchDashbar}>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<i className=\"ff-plus\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n"]}
@@ -20,7 +20,7 @@ const RemoveWorkspace = (props) => {
20
20
  }
21
21
  });
22
22
  };
23
- return (React.createElement("span", { onClick: actuallyRemoveWorkspace, className: "menu-item-icon" },
23
+ return (React.createElement("span", { role: "button", tabIndex: 0, onClick: actuallyRemoveWorkspace, className: "menu-item-icon" },
24
24
  React.createElement("i", { className: "ff-adp-trash-outline", title: "Delete" })));
25
25
  };
26
26
  export default class Workspace extends React.Component {
@@ -1 +1 @@
1
- {"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/components/Workspace.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAW9D,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;IACvD,MAAM,uBAAuB,GAAG,CAAC,CAAmB,EAAE,EAAE;QACvD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QAIpB,8BAA8B,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE;YACxE,IAAI,UAAU,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBAC9C,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAC/B;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACN,8BAAM,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAC,gBAAgB;QACjE,2BAAG,SAAS,EAAC,sBAAsB,EAAC,KAAK,EAAC,QAAQ,GAAK,CACjD,CACP,CAAC;AACH,CAAC,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,KAAK,CAAC,SAAiB;IAC7D,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC;IAOD,kBAAkB;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAOD,OAAO;QACN,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;SAC/B,CAAC,CAAC;IACJ,CAAC;IAQD,MAAM;QACL,MAAM,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAIvF,MAAM,WAAW,GAAG,qBAAqB,IAAI,iBAAiB,CAAC;QAE/D,IAAI,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAE3G,OAAO,CACN,oBAAC,QAAQ,IAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO;YAClD,6BAAK,SAAS,EAAC,eAAe;gBAC5B,WAAW,IAAI,8BAAM,SAAS,EAAC,aAAa,iBAAkB;gBAC9D,CAAC,WAAW,IAAI,UAAU,IAAI,UAAU,CAAC,SAAS,IAAI,8BAAM,SAAS,EAAE,UAAU,CAAC,SAAS,GAAS;gBACrG,8BAAM,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IACpD,SAAS,CAAC,IAAI,CACT;gBACP,6BAAK,SAAS,EAAC,0BAA0B;oBACvC,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,oBAAC,eAAe,IAAC,SAAS,EAAE,SAAS,GAAI;oBACxF,oBAAC,aAAa,IACb,EAAE,EAAE,SAAS,CAAC,IAAI,EAClB,IAAI,EAAE,SAAS,CAAC,IAAI,EACpB,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAC,gBAAgB,GACzB,CACG,CACD,CACI,CACX,CAAC;IACH,CAAC;CACD","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n * This is a single workspace. When clicked, it requests that the app switch to the clicked workspace.\n */\n\nimport React from \"react\";\nimport { MenuItem } from \"../../../menu/MenuItem\";\nimport { Actions as WorkspaceManagementMenuActions } from \"../stores/workspaceManagementMenuStore\";\nimport { FavoriteMaker } from \"../../../favorites/FavoriteMaker\";\nimport { useFavorites } from \"../../../../hooks/useFavorites\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-api/types/common/workspace\";\n\ntype WorkspaceActionType = WorkspaceType & {\n\tpermanent?: boolean;\n};\n\ninterface RemoveWorkspaceProps {\n\tworkspace: WorkspaceActionType;\n}\n\nconst RemoveWorkspace = (props: RemoveWorkspaceProps) => {\n\tconst { workspace } = props;\n\tconst { isFavorited, removeFavorite } = useFavorites();\n\tconst actuallyRemoveWorkspace = (e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\t// Trigger the remove. This will throw a dialog. It will return a boolean\n\t\t// for whether it was or was not deleted.\n\t\t// If the thing was deleted, remove it from favorites.\n\t\tWorkspaceManagementMenuActions.removeWorkspace(workspace, (wasDeleted) => {\n\t\t\tif (wasDeleted && isFavorited(workspace.name)) {\n\t\t\t\tremoveFavorite(workspace.name);\n\t\t\t}\n\t\t});\n\t};\n\n\treturn (\n\t\t<span onClick={actuallyRemoveWorkspace} className=\"menu-item-icon\">\n\t\t\t<i className=\"ff-adp-trash-outline\" title=\"Delete\"></i>\n\t\t</span>\n\t);\n};\n\ninterface IProps {\n\tisSwitchingWorkspaces: boolean;\n\tisActiveWorkspace: boolean;\n\tdragHandle: { iconClass: string };\n\tworkspace: WorkspaceActionType;\n\tmainAction: (data: { name: string }) => void;\n}\n\nexport default class Workspace extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t\tthis.bindCorrectContext();\n\t}\n\n\t/**\n\t * This is necessary to make sure that the `this` inside of the callback is correct.\n\t *\n\t * @memberof Workspace\n\t */\n\tbindCorrectContext() {\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\t/**\n\t * When the main body of the component is clicked, we fire off the mainAction. By default this is to switch workspaces.\n\t *\n\t * @memberof Workspace\n\t */\n\tonClick() {\n\t\tthis.props.mainAction({\n\t\t\tname: this.props.workspace.name,\n\t\t});\n\t}\n\n\t/**\n\t * Render method.\n\t *\n\t * @returns\n\t * @memberof Workspace\n\t */\n\trender() {\n\t\tconst { isSwitchingWorkspaces, workspace, isActiveWorkspace, dragHandle } = this.props;\n\n\t\t// Actions are remove and pin workspace.\n\n\t\tconst showSpinner = isSwitchingWorkspaces && isActiveWorkspace;\n\n\t\tlet classes = isActiveWorkspace ? \"menu-item active-workspace workspace-name\" : \"menu-item workspace-name\";\n\n\t\treturn (\n\t\t\t<MenuItem onClick={this.onClick} className={classes}>\n\t\t\t\t<div className=\"menu-item-row\">\n\t\t\t\t\t{showSpinner && <span className=\"fsbl-loader\">Loading...</span>}\n\t\t\t\t\t{!showSpinner && dragHandle && dragHandle.iconClass && <span className={dragHandle.iconClass}></span>}\n\t\t\t\t\t<span className=\"workspace-name\" title={workspace.name}>\n\t\t\t\t\t\t{workspace.name}\n\t\t\t\t\t</span>\n\t\t\t\t\t<div className=\"menu-item-row-push-right\">\n\t\t\t\t\t\t{!isActiveWorkspace && !workspace.permanent && <RemoveWorkspace workspace={workspace} />}\n\t\t\t\t\t\t<FavoriteMaker\n\t\t\t\t\t\t\tid={workspace.name}\n\t\t\t\t\t\t\tname={workspace.name}\n\t\t\t\t\t\t\tcategory={\"Workspace\"}\n\t\t\t\t\t\t\tclassName=\"menu-item-icon\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/components/Workspace.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n * This is a single workspace. When clicked, it requests that the app switch to the clicked workspace.\n */\n\nimport React from \"react\";\nimport { MenuItem } from \"../../../menu/MenuItem\";\nimport { Actions as WorkspaceManagementMenuActions } from \"../stores/workspaceManagementMenuStore\";\nimport { FavoriteMaker } from \"../../../favorites/FavoriteMaker\";\nimport { useFavorites } from \"../../../../hooks/useFavorites\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-api/types/common/workspace\";\n\ntype WorkspaceActionType = WorkspaceType & {\n\tpermanent?: boolean;\n};\n\ninterface RemoveWorkspaceProps {\n\tworkspace: WorkspaceActionType;\n}\n\nconst RemoveWorkspace = (props: RemoveWorkspaceProps) => {\n\tconst { workspace } = props;\n\tconst { isFavorited, removeFavorite } = useFavorites();\n\tconst actuallyRemoveWorkspace = (e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\t// Trigger the remove. This will throw a dialog. It will return a boolean\n\t\t// for whether it was or was not deleted.\n\t\t// If the thing was deleted, remove it from favorites.\n\t\tWorkspaceManagementMenuActions.removeWorkspace(workspace, (wasDeleted) => {\n\t\t\tif (wasDeleted && isFavorited(workspace.name)) {\n\t\t\t\tremoveFavorite(workspace.name);\n\t\t\t}\n\t\t});\n\t};\n\n\treturn (\n\t\t<span role=\"button\" tabIndex={0} onClick={actuallyRemoveWorkspace} className=\"menu-item-icon\">\n\t\t\t<i className=\"ff-adp-trash-outline\" title=\"Delete\"></i>\n\t\t</span>\n\t);\n};\n\ninterface IProps {\n\tisSwitchingWorkspaces: boolean;\n\tisActiveWorkspace: boolean;\n\tdragHandle: { iconClass: string };\n\tworkspace: WorkspaceActionType;\n\tmainAction: (data: { name: string }) => void;\n}\n\nexport default class Workspace extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t\tthis.bindCorrectContext();\n\t}\n\n\t/**\n\t * This is necessary to make sure that the `this` inside of the callback is correct.\n\t *\n\t * @memberof Workspace\n\t */\n\tbindCorrectContext() {\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\t/**\n\t * When the main body of the component is clicked, we fire off the mainAction. By default this is to switch workspaces.\n\t *\n\t * @memberof Workspace\n\t */\n\tonClick() {\n\t\tthis.props.mainAction({\n\t\t\tname: this.props.workspace.name,\n\t\t});\n\t}\n\n\t/**\n\t * Render method.\n\t *\n\t * @returns\n\t * @memberof Workspace\n\t */\n\trender() {\n\t\tconst { isSwitchingWorkspaces, workspace, isActiveWorkspace, dragHandle } = this.props;\n\n\t\t// Actions are remove and pin workspace.\n\n\t\tconst showSpinner = isSwitchingWorkspaces && isActiveWorkspace;\n\n\t\tlet classes = isActiveWorkspace ? \"menu-item active-workspace workspace-name\" : \"menu-item workspace-name\";\n\n\t\treturn (\n\t\t\t<MenuItem onClick={this.onClick} className={classes}>\n\t\t\t\t<div className=\"menu-item-row\">\n\t\t\t\t\t{showSpinner && <span className=\"fsbl-loader\">Loading...</span>}\n\t\t\t\t\t{!showSpinner && dragHandle && dragHandle.iconClass && <span className={dragHandle.iconClass}></span>}\n\t\t\t\t\t<span className=\"workspace-name\" title={workspace.name}>\n\t\t\t\t\t\t{workspace.name}\n\t\t\t\t\t</span>\n\t\t\t\t\t<div className=\"menu-item-row-push-right\">\n\t\t\t\t\t\t{!isActiveWorkspace && !workspace.permanent && <RemoveWorkspace workspace={workspace} />}\n\t\t\t\t\t\t<FavoriteMaker\n\t\t\t\t\t\t\tid={workspace.name}\n\t\t\t\t\t\t\tname={workspace.name}\n\t\t\t\t\t\t\tcategory={\"Workspace\"}\n\t\t\t\t\t\t\tclassName=\"menu-item-icon\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n}\n"]}
@@ -15,7 +15,7 @@ export default class ContentSection extends React.Component {
15
15
  React.createElement("div", { className: "complex-menu-header" },
16
16
  React.createElement("div", { style: { marginTop: "-25px", marginLeft: "-25px" }, className: "active-section-header" },
17
17
  React.createElement(Header, null, activeSection)),
18
- React.createElement("div", { role: "button", tabIndex: 0, className: "ff-close complex-menu-close", onClick: this.hideWindow, onKeyDown: (e) => {
18
+ React.createElement("div", { role: "button", tabIndex: 0, "aria-label": "Close", className: "ff-close complex-menu-close", onClick: this.hideWindow, onKeyDown: (e) => {
19
19
  if (e.key === "Enter" || e.key === " ") {
20
20
  this.hideWindow();
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ContentSection.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/components/ContentSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAgB7C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK,CAAC,SAA8B;IAC/E,YAAY,KAA0B;QACrC,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,UAAU;QACT,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACvC,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM;QACL,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAQ,IAAI,CAAC,KAAK,CAAC;QACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1C,OAAO,CACN,6BAAK,SAAS,EAAC,0BAA0B;YACxC,6BAAK,SAAS,EAAC,qBAAqB;gBACnC,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,SAAS,EAAC,uBAAuB;oBACzF,oBAAC,MAAM,QAAE,aAAa,CAAU,CAC3B;gBACN,6BACC,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,IAAI,CAAC,UAAU,EACxB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;4BACvC,IAAI,CAAC,UAAU,EAAE,CAAC;yBAClB;oBACF,CAAC,GACK,CACF;YACN,oBAAC,SAAS,IACT,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EACnC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAC5B,CACG,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nimport { Header } from \"../../common/Header\";\n\n/**\n * Displays the user preference section page for the currently selected section.\n * @param {string} props.activeSection The current selected section.\n * @param {object} props.customSections The client customized user preference sections.\n */\n\ntype ContentSectionProps = {\n\taddListener: Function;\n\tremoveListener: Function;\n\tgetValue: Function;\n\tsetValue: Function;\n\tactiveSection?: String;\n\tsections?: { Dashbar: any; General: any; Notifications: any; Workspaces: any };\n};\nexport default class ContentSection extends React.Component<ContentSectionProps> {\n\tconstructor(props: ContentSectionProps) {\n\t\tsuper(props);\n\t}\n\n\thideWindow() {\n\t\tFSBL.Clients.DialogManager.hideModal();\n\t\tfinsembleWindow?.hide();\n\t}\n\n\trender() {\n\t\tconst { activeSection, sections }: any = this.props;\n\t\tconst Component = sections[activeSection];\n\t\treturn (\n\t\t\t<div className=\"complex-menu-content-row\">\n\t\t\t\t<div className=\"complex-menu-header\">\n\t\t\t\t\t<div style={{ marginTop: \"-25px\", marginLeft: \"-25px\" }} className=\"active-section-header\">\n\t\t\t\t\t\t<Header>{activeSection}</Header>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\tclassName=\"ff-close complex-menu-close\"\n\t\t\t\t\t\tonClick={this.hideWindow}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\tthis.hideWindow();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t></div>\n\t\t\t\t</div>\n\t\t\t\t<Component\n\t\t\t\t\taddListener={this.props.addListener}\n\t\t\t\t\tremoveListener={this.props.removeListener}\n\t\t\t\t\tsetValue={this.props.setValue}\n\t\t\t\t\tgetValue={this.props.getValue}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"ContentSection.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/components/ContentSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAgB7C,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK,CAAC,SAA8B;IAC/E,YAAY,KAA0B;QACrC,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,UAAU;QACT,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACvC,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM;QACL,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAQ,IAAI,CAAC,KAAK,CAAC;QACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1C,OAAO,CACN,6BAAK,SAAS,EAAC,0BAA0B;YACxC,6BAAK,SAAS,EAAC,qBAAqB;gBACnC,6BAAK,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,SAAS,EAAC,uBAAuB;oBACzF,oBAAC,MAAM,QAAE,aAAa,CAAU,CAC3B;gBACN,6BACC,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,gBACA,OAAO,EAClB,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,IAAI,CAAC,UAAU,EACxB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;4BACvC,IAAI,CAAC,UAAU,EAAE,CAAC;yBAClB;oBACF,CAAC,GACK,CACF;YACN,oBAAC,SAAS,IACT,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EACnC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EACzC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAC7B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAC5B,CACG,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nimport { Header } from \"../../common/Header\";\n\n/**\n * Displays the user preference section page for the currently selected section.\n * @param {string} props.activeSection The current selected section.\n * @param {object} props.customSections The client customized user preference sections.\n */\n\ntype ContentSectionProps = {\n\taddListener: Function;\n\tremoveListener: Function;\n\tgetValue: Function;\n\tsetValue: Function;\n\tactiveSection?: String;\n\tsections?: { Dashbar: any; General: any; Notifications: any; Workspaces: any };\n};\nexport default class ContentSection extends React.Component<ContentSectionProps> {\n\tconstructor(props: ContentSectionProps) {\n\t\tsuper(props);\n\t}\n\n\thideWindow() {\n\t\tFSBL.Clients.DialogManager.hideModal();\n\t\tfinsembleWindow?.hide();\n\t}\n\n\trender() {\n\t\tconst { activeSection, sections }: any = this.props;\n\t\tconst Component = sections[activeSection];\n\t\treturn (\n\t\t\t<div className=\"complex-menu-content-row\">\n\t\t\t\t<div className=\"complex-menu-header\">\n\t\t\t\t\t<div style={{ marginTop: \"-25px\", marginLeft: \"-25px\" }} className=\"active-section-header\">\n\t\t\t\t\t\t<Header>{activeSection}</Header>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\tclassName=\"ff-close complex-menu-close\"\n\t\t\t\t\t\tonClick={this.hideWindow}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\tthis.hideWindow();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t></div>\n\t\t\t\t</div>\n\t\t\t\t<Component\n\t\t\t\t\taddListener={this.props.addListener}\n\t\t\t\t\tremoveListener={this.props.removeListener}\n\t\t\t\t\tsetValue={this.props.setValue}\n\t\t\t\t\tgetValue={this.props.getValue}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
@@ -4,7 +4,7 @@ import { Checkbox } from "../../../../common/Checkbox";
4
4
  import DefaultDropdownButton from "../../../../shared/DefaultDropdownButton";
5
5
  import ButtonRow from "../../../../common/ButtonRow";
6
6
  import { loadSources } from "./notificationViewsUtils";
7
- const PREFERENCE_PATH_KEY = "finsemble.servicesConfig.notifications.userPreferences";
7
+ const FINSEMBLE_NOTIFICATIONS_SERVICE_CONFIG_PATH = "finsemble.servicesConfig.notifications";
8
8
  const NOTIFICATIONS_PREFERENCES_KEYS = {
9
9
  DISABLE_DOT_ON_TOOLBAR_ICON: "disableDotOnToolbarIcon",
10
10
  SHOW_DOT_ON_TOOLBAR_ICON_MUTED_NOTIFICATIONS: "showDotOnToolbarIconForMutedNotifications",
@@ -14,7 +14,7 @@ const NOTIFICATIONS_PREFERENCES_KEYS = {
14
14
  };
15
15
  const setAndTransmitPreferenceChange = (preferenceKey, value) => {
16
16
  FSBL.Clients.ConfigClient.setPreference({
17
- field: `${PREFERENCE_PATH_KEY}.${preferenceKey}`,
17
+ field: `${FINSEMBLE_NOTIFICATIONS_SERVICE_CONFIG_PATH}.${preferenceKey}`,
18
18
  value,
19
19
  }, (err) => {
20
20
  if (err) {
@@ -129,6 +129,7 @@ const NotificationsMainPreferences = () => {
129
129
  return await FSBL.Clients.NotificationClient.getPreferences();
130
130
  }
131
131
  getNotificationsPreferences().then((preferences) => {
132
+ FSBL.Clients.Logger.info("NotificationsPreferencesHome", preferences);
132
133
  setNotificationPreferences(preferences);
133
134
  });
134
135
  }, []);
@@ -194,7 +195,7 @@ const NotificationsMainPreferences = () => {
194
195
  React.createElement(Checkbox, { onClick: toggleNotificationDot, checked: !notificationPreferences.disableDotOnToolbarIcon, label: "Show notification dot for new notifications" })),
195
196
  React.createElement("div", { className: "row-section" },
196
197
  React.createElement(Checkbox, { disabled: notificationPreferences.disableDotOnToolbarIcon, onClick: toggleNotificationDotForMutedNotifications, checked: notificationPreferences.showDotOnToolbarIconForMutedNotifications, label: "Show notification dot for notifications marked as \u201CDon\u2019t show\u201D" })),
197
- React.createElement("div", { className: "row-section" },
198
+ React.createElement("div", { className: "row-section", style: { paddingTop: "15px", paddingBottom: "15px" } },
198
199
  React.createElement(Checkbox, { onClick: toggleActionableNotificationToast, checked: notificationPreferences.toastTimeoutOnActionableNotifications, label: "Enable toast timeouts on actionable notifications" })),
199
200
  React.createElement("div", { className: "row-section" },
200
201
  React.createElement("span", { className: "row__lbl" }, "Toast times out after"),
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationsPreferencesHome.js","sourceRoot":"","sources":["../../../../../../src/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useContext, useEffect, useState } from \"react\";\n\n// Context\nimport { NotificationsPreferencesContext } from \"../../../NotificationsPreferencesContext\";\n\n// Components\nimport { Checkbox } from \"../../../../common/Checkbox\";\nimport DefaultDropdownButton, {\n\tIFinsembleDefaultDropdownButtonOptionsProps,\n} from \"../../../../shared/DefaultDropdownButton\";\nimport ButtonRow from \"../../../../common/ButtonRow\";\n\n// Utils\nimport { loadSources } from \"./notificationViewsUtils\";\n\nconst PREFERENCE_PATH_KEY = \"finsemble.servicesConfig.notifications.userPreferences\";\nconst NOTIFICATIONS_PREFERENCES_KEYS = {\n\tDISABLE_DOT_ON_TOOLBAR_ICON: \"disableDotOnToolbarIcon\",\n\tSHOW_DOT_ON_TOOLBAR_ICON_MUTED_NOTIFICATIONS: \"showDotOnToolbarIconForMutedNotifications\",\n\tINFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS: \"informationalNotificationToastPeriodSeconds\",\n\tDEFAULT_SNOOZE_PERIOD_SECONDS: \"defaultSnoozePeriodSeconds\",\n\tNEW_NOTIFICATION_HALO_PERIOD_SECONDS: \"newNotificationHaloPeriodSeconds\",\n};\n\nconst setAndTransmitPreferenceChange = (preferenceKey: string, value: any) => {\n\tFSBL.Clients.ConfigClient.setPreference(\n\t\t{\n\t\t\tfield: `${PREFERENCE_PATH_KEY}.${preferenceKey}`,\n\t\t\tvalue,\n\t\t},\n\t\t(err) => {\n\t\t\tif (err) {\n\t\t\t\tFSBL.Clients.Logger.system.error(\n\t\t\t\t\t`Error setting preference from Notifications Preferences Home Component - preference: ${preferenceKey} - value: ${value} `,\n\t\t\t\t\terr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.RouterClient.transmit(\"FinsembleUserPreferencesChannel\", {\n\t\t\t\t\tnotificationPreferences: {\n\t\t\t\t\t\t[preferenceKey]: value,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t);\n};\n\nconst informationalToastDuration: IFinsembleDefaultDropdownButtonOptionsProps[] = [\n\t{\n\t\toptionLabel: \"10 seconds\",\n\t\toptionValue: 10,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(\n\t\t\t\tNOTIFICATIONS_PREFERENCES_KEYS.INFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS,\n\t\t\t\t10\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"30 seconds\",\n\t\toptionValue: 30,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(\n\t\t\t\tNOTIFICATIONS_PREFERENCES_KEYS.INFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS,\n\t\t\t\t30\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"45 seconds\",\n\t\toptionValue: 45,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(\n\t\t\t\tNOTIFICATIONS_PREFERENCES_KEYS.INFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS,\n\t\t\t\t45\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"60 seconds\",\n\t\toptionValue: 60,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(\n\t\t\t\tNOTIFICATIONS_PREFERENCES_KEYS.INFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS,\n\t\t\t\t60\n\t\t\t);\n\t\t},\n\t},\n];\n\nconst snoozeDuration: IFinsembleDefaultDropdownButtonOptionsProps[] = [\n\t{\n\t\toptionLabel: \"5 minutes\",\n\t\toptionValue: 300,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.DEFAULT_SNOOZE_PERIOD_SECONDS, 300);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"10 minutes\",\n\t\toptionValue: 600,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.DEFAULT_SNOOZE_PERIOD_SECONDS, 600);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"20 minutes\",\n\t\toptionValue: 1200,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.DEFAULT_SNOOZE_PERIOD_SECONDS, 1200);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"30 minutes\",\n\t\toptionValue: 1800,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.DEFAULT_SNOOZE_PERIOD_SECONDS, 1800);\n\t\t},\n\t},\n];\n\nconst newNotificationsHalo: IFinsembleDefaultDropdownButtonOptionsProps[] = [\n\t{\n\t\toptionLabel: \"30 seconds\",\n\t\toptionValue: 30,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.NEW_NOTIFICATION_HALO_PERIOD_SECONDS, 30);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"1 minute\",\n\t\toptionValue: 60,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.NEW_NOTIFICATION_HALO_PERIOD_SECONDS, 60);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"3 minutes\",\n\t\toptionValue: 180,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.NEW_NOTIFICATION_HALO_PERIOD_SECONDS, 180);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"5 minutes\",\n\t\toptionValue: 600,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.NEW_NOTIFICATION_HALO_PERIOD_SECONDS, 600);\n\t\t},\n\t},\n];\n\nconst NotificationsMainPreferences: React.FunctionComponent = () => {\n\tconst notificationsPreferencesContext = useContext(NotificationsPreferencesContext);\n\tconst {\n\t\tnotificationSources,\n\t\tsetNotificationSources,\n\t\tsetSelectedNotificationSource,\n\t\tsetCurrentNotificationsPreferencesView,\n\t} = notificationsPreferencesContext;\n\n\tconst [reloadSources, setReloadSources] = useState(false);\n\n\tconst [notificationPreferences, setNotificationPreferences] = useState<any>({});\n\n\tuseEffect(() => {\n\t\tasync function getNotificationsPreferences() {\n\t\t\treturn await FSBL.Clients.NotificationClient.getPreferences();\n\t\t}\n\n\t\tgetNotificationsPreferences().then((preferences: any) => {\n\t\t\tsetNotificationPreferences(preferences);\n\t\t});\n\t}, []);\n\n\tuseEffect(() => {\n\t\tfunction listenForRefreshEvent(error: any, response: any) {\n\t\t\tif (error) {\n\t\t\t\tconsole.error(\"FinsembleNotificationsPreferencesChannel: \", error);\n\t\t\t} else {\n\t\t\t\tconst { data } = response;\n\t\t\t\tif (data === \"notificationReceived\") {\n\t\t\t\t\tsetReloadSources(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleNotificationsPreferencesChannel\", listenForRefreshEvent);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleNotificationsPreferencesChannel\", listenForRefreshEvent);\n\t\t};\n\t}, []);\n\t{\n\t\tnotificationSources &&\n\t\t\tuseEffect(() => {\n\t\t\t\tloadSources(setNotificationSources, setReloadSources);\n\t\t\t}, [notificationSources.length == 0, reloadSources]);\n\t}\n\n\tuseEffect(() => {\n\t\tfunction navigateToSourceDetail(err: any, response: any) {\n\t\t\tconst { data } = response;\n\t\t\tif (data.notification) {\n\t\t\t\tconst selectedSource = notificationSources.find((source) => source.source === data.notification.source) || null;\n\t\t\t\tsetSelectedNotificationSource(selectedSource);\n\t\t\t\tsetCurrentNotificationsPreferencesView(\"Details\");\n\t\t\t}\n\t\t}\n\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleNotificationsNavigationChannel\", navigateToSourceDetail);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleNotificationsNavigationChannel\", navigateToSourceDetail);\n\t\t};\n\t}, [notificationSources]);\n\n\tconst toggleNotificationDot = () => {\n\t\tsetNotificationPreferences((prevState: any) => {\n\t\t\treturn {\n\t\t\t\t...prevState,\n\t\t\t\tdisableDotOnToolbarIcon: !notificationPreferences.disableDotOnToolbarIcon,\n\t\t\t};\n\t\t});\n\t\tsetAndTransmitPreferenceChange(\"disableDotOnToolbarIcon\", !notificationPreferences.disableDotOnToolbarIcon);\n\t};\n\n\tconst toggleActionableNotificationToast = () => {\n\t\tsetNotificationPreferences((prevState: any) => {\n\t\t\treturn {\n\t\t\t\t...prevState,\n\t\t\t\ttoastTimeoutOnActionableNotifications: !notificationPreferences.toastTimeoutOnActionableNotifications,\n\t\t\t};\n\t\t});\n\t\tsetAndTransmitPreferenceChange(\n\t\t\t\"toastTimeoutOnActionableNotifications\",\n\t\t\t!notificationPreferences.toastTimeoutOnActionableNotifications\n\t\t);\n\t};\n\n\tconst toggleNotificationDotForMutedNotifications = () => {\n\t\tsetNotificationPreferences((prevState: any) => {\n\t\t\treturn {\n\t\t\t\t...prevState,\n\t\t\t\tshowDotOnToolbarIconForMutedNotifications: !notificationPreferences.showDotOnToolbarIconForMutedNotifications,\n\t\t\t};\n\t\t});\n\t\tsetAndTransmitPreferenceChange(\n\t\t\t\"showDotOnToolbarIconForMutedNotifications\",\n\t\t\t!notificationPreferences.showDotOnToolbarIconForMutedNotifications\n\t\t);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<ButtonRow\n\t\t\t\t\tlabel=\"Notification sources\"\n\t\t\t\t\tonClick={() => setCurrentNotificationsPreferencesView(\"Sources\")}\n\t\t\t\t\ticonClass=\"ff-caret-up rotate-90\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<Checkbox\n\t\t\t\t\tonClick={toggleNotificationDot}\n\t\t\t\t\tchecked={!notificationPreferences.disableDotOnToolbarIcon}\n\t\t\t\t\tlabel=\"Show notification dot for new notifications\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<Checkbox\n\t\t\t\t\tdisabled={notificationPreferences.disableDotOnToolbarIcon}\n\t\t\t\t\tonClick={toggleNotificationDotForMutedNotifications}\n\t\t\t\t\tchecked={notificationPreferences.showDotOnToolbarIconForMutedNotifications}\n\t\t\t\t\tlabel=\"Show notification dot for notifications marked as “Don’t show”\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<Checkbox\n\t\t\t\t\tonClick={toggleActionableNotificationToast}\n\t\t\t\t\tchecked={notificationPreferences.toastTimeoutOnActionableNotifications}\n\t\t\t\t\tlabel=\"Enable toast timeouts on actionable notifications\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<span className=\"row__lbl\">Toast times out after</span>\n\t\t\t\t<DefaultDropdownButton\n\t\t\t\t\tallowEmpty={false}\n\t\t\t\t\tcaretLocation=\"right\"\n\t\t\t\t\tdefaultSelection={informationalToastDuration.find(\n\t\t\t\t\t\t(element) => element.optionValue === notificationPreferences.informationalNotificationToastPeriodSeconds\n\t\t\t\t\t)}\n\t\t\t\t\tbuttonOptions={informationalToastDuration}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<span className=\"row__lbl\">Snooze for</span>\n\t\t\t\t<DefaultDropdownButton\n\t\t\t\t\tallowEmpty={false}\n\t\t\t\t\tcaretLocation=\"right\"\n\t\t\t\t\tdefaultSelection={snoozeDuration.find(\n\t\t\t\t\t\t(element) => element.optionValue === notificationPreferences.defaultSnoozePeriodSeconds\n\t\t\t\t\t)}\n\t\t\t\t\tbuttonOptions={snoozeDuration}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<span className=\"row__lbl\">Turn off the new notification halo after</span>\n\t\t\t\t<DefaultDropdownButton\n\t\t\t\t\tallowEmpty={false}\n\t\t\t\t\tcaretLocation=\"right\"\n\t\t\t\t\tdefaultSelection={newNotificationsHalo.find(\n\t\t\t\t\t\t(element) => element.optionValue === notificationPreferences.newNotificationHaloPeriodSeconds\n\t\t\t\t\t)}\n\t\t\t\t\tbuttonOptions={newNotificationsHalo}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default NotificationsMainPreferences;\n"]}
1
+ {"version":3,"file":"NotificationsPreferencesHome.js","sourceRoot":"","sources":["../../../../../../src/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG/D,OAAO,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAG3F,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,qBAEN,MAAM,0CAA0C,CAAC;AAClD,OAAO,SAAS,MAAM,8BAA8B,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,2CAA2C,GAAG,wCAAwC,CAAC;AAC7F,MAAM,8BAA8B,GAAG;IACtC,2BAA2B,EAAE,yBAAyB;IACtD,4CAA4C,EAAE,2CAA2C;IACzF,+CAA+C,EAAE,6CAA6C;IAC9F,6BAA6B,EAAE,4BAA4B;IAC3D,oCAAoC,EAAE,kCAAkC;CACxE,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,aAAqB,EAAE,KAAU,EAAE,EAAE;IAC5E,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CACtC;QACC,KAAK,EAAE,GAAG,2CAA2C,IAAI,aAAa,EAAE;QACxE,KAAK;KACL,EACD,CAAC,GAAG,EAAE,EAAE;QACP,IAAI,GAAG,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAC/B,wFAAwF,aAAa,aAAa,KAAK,GAAG,EAC1H,GAAG,CACH,CAAC;SACF;aAAM;YACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,iCAAiC,EAAE;gBACrE,uBAAuB,EAAE;oBACxB,CAAC,aAAa,CAAC,EAAE,KAAK;iBACtB;aACD,CAAC,CAAC;SACH;IACF,CAAC,CACD,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAkD;IACjF;QACC,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAC7B,8BAA8B,CAAC,+CAA+C,EAC9E,EAAE,CACF,CAAC;QACH,CAAC;KACD;IACD;QACC,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAC7B,8BAA8B,CAAC,+CAA+C,EAC9E,EAAE,CACF,CAAC;QACH,CAAC;KACD;IACD;QACC,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAC7B,8BAA8B,CAAC,+CAA+C,EAC9E,EAAE,CACF,CAAC;QACH,CAAC;KACD;IACD;QACC,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAC7B,8BAA8B,CAAC,+CAA+C,EAC9E,EAAE,CACF,CAAC;QACH,CAAC;KACD;CACD,CAAC;AAEF,MAAM,cAAc,GAAkD;IACrE;QACC,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAAC,8BAA8B,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACnG,CAAC;KACD;IACD;QACC,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAAC,8BAA8B,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACnG,CAAC;KACD;IACD;QACC,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAAC,8BAA8B,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;QACpG,CAAC;KACD;IACD;QACC,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAAC,8BAA8B,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;QACpG,CAAC;KACD;CACD,CAAC;AAEF,MAAM,oBAAoB,GAAkD;IAC3E;QACC,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAAC,8BAA8B,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;QACzG,CAAC;KACD;IACD;QACC,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAAC,8BAA8B,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;QACzG,CAAC;KACD;IACD;QACC,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAAC,8BAA8B,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QAC1G,CAAC;KACD;IACD;QACC,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG,EAAE;YAClB,8BAA8B,CAAC,8BAA8B,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QAC1G,CAAC;KACD;CACD,CAAC;AAEF,MAAM,4BAA4B,GAA4B,GAAG,EAAE;IAClE,MAAM,+BAA+B,GAAG,UAAU,CAAC,+BAA+B,CAAC,CAAC;IACpF,MAAM,EACL,mBAAmB,EACnB,sBAAsB,EACtB,6BAA6B,EAC7B,sCAAsC,GACtC,GAAG,+BAA+B,CAAC;IAEpC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1D,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,QAAQ,CAAM,EAAE,CAAC,CAAC;IAEhF,SAAS,CAAC,GAAG,EAAE;QACd,KAAK,UAAU,2BAA2B;YACzC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC;QAC/D,CAAC;QAED,2BAA2B,EAAE,CAAC,IAAI,CAAC,CAAC,WAAgB,EAAE,EAAE;YACvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,WAAW,CAAC,CAAC;YACtE,0BAA0B,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,qBAAqB,CAAC,KAAU,EAAE,QAAa;YACvD,IAAI,KAAK,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;aACnE;iBAAM;gBACN,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;gBAC1B,IAAI,IAAI,KAAK,sBAAsB,EAAE;oBACpC,gBAAgB,CAAC,IAAI,CAAC,CAAC;iBACvB;aACD;QACF,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,0CAA0C,EAAE,qBAAqB,CAAC,CAAC;QACzG,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,0CAA0C,EAAE,qBAAqB,CAAC,CAAC;QAC7G,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IACP;QACC,mBAAmB;YAClB,SAAS,CAAC,GAAG,EAAE;gBACd,WAAW,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;YACvD,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;KACtD;IAED,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,sBAAsB,CAAC,GAAQ,EAAE,QAAa;YACtD,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;YAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,cAAc,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;gBAChH,6BAA6B,CAAC,cAAc,CAAC,CAAC;gBAC9C,sCAAsC,CAAC,SAAS,CAAC,CAAC;aAClD;QACF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,yCAAyC,EAAE,sBAAsB,CAAC,CAAC;QACzG,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,yCAAyC,EAAE,sBAAsB,CAAC,CAAC;QAC7G,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,MAAM,qBAAqB,GAAG,GAAG,EAAE;QAClC,0BAA0B,CAAC,CAAC,SAAc,EAAE,EAAE;YAC7C,uCACI,SAAS,KACZ,uBAAuB,EAAE,CAAC,uBAAuB,CAAC,uBAAuB,IACxE;QACH,CAAC,CAAC,CAAC;QACH,8BAA8B,CAAC,yBAAyB,EAAE,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;IAC7G,CAAC,CAAC;IAEF,MAAM,iCAAiC,GAAG,GAAG,EAAE;QAC9C,0BAA0B,CAAC,CAAC,SAAc,EAAE,EAAE;YAC7C,uCACI,SAAS,KACZ,qCAAqC,EAAE,CAAC,uBAAuB,CAAC,qCAAqC,IACpG;QACH,CAAC,CAAC,CAAC;QACH,8BAA8B,CAC7B,uCAAuC,EACvC,CAAC,uBAAuB,CAAC,qCAAqC,CAC9D,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,0CAA0C,GAAG,GAAG,EAAE;QACvD,0BAA0B,CAAC,CAAC,SAAc,EAAE,EAAE;YAC7C,uCACI,SAAS,KACZ,yCAAyC,EAAE,CAAC,uBAAuB,CAAC,yCAAyC,IAC5G;QACH,CAAC,CAAC,CAAC;QACH,8BAA8B,CAC7B,2CAA2C,EAC3C,CAAC,uBAAuB,CAAC,yCAAyC,CAClE,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACN;QACC,6BAAK,SAAS,EAAC,aAAa;YAC3B,oBAAC,SAAS,IACT,KAAK,EAAC,sBAAsB,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,sCAAsC,CAAC,SAAS,CAAC,EAChE,SAAS,EAAC,uBAAuB,GAChC,CACG;QACN,6BAAK,SAAS,EAAC,aAAa;YAC3B,oBAAC,QAAQ,IACR,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,CAAC,uBAAuB,CAAC,uBAAuB,EACzD,KAAK,EAAC,6CAA6C,GAClD,CACG;QACN,6BAAK,SAAS,EAAC,aAAa;YAC3B,oBAAC,QAAQ,IACR,QAAQ,EAAE,uBAAuB,CAAC,uBAAuB,EACzD,OAAO,EAAE,0CAA0C,EACnD,OAAO,EAAE,uBAAuB,CAAC,yCAAyC,EAC1E,KAAK,EAAC,+EAAgE,GACrE,CACG;QACN,6BAAK,SAAS,EAAC,aAAa,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;YAChF,oBAAC,QAAQ,IACR,OAAO,EAAE,iCAAiC,EAC1C,OAAO,EAAE,uBAAuB,CAAC,qCAAqC,EACtE,KAAK,EAAC,mDAAmD,GACxD,CACG;QACN,6BAAK,SAAS,EAAC,aAAa;YAC3B,8BAAM,SAAS,EAAC,UAAU,4BAA6B;YACvD,oBAAC,qBAAqB,IACrB,UAAU,EAAE,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,gBAAgB,EAAE,0BAA0B,CAAC,IAAI,CAChD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,uBAAuB,CAAC,2CAA2C,CACxG,EACD,aAAa,EAAE,0BAA0B,GACxC,CACG;QACN,6BAAK,SAAS,EAAC,aAAa;YAC3B,8BAAM,SAAS,EAAC,UAAU,iBAAkB;YAC5C,oBAAC,qBAAqB,IACrB,UAAU,EAAE,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,gBAAgB,EAAE,cAAc,CAAC,IAAI,CACpC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,uBAAuB,CAAC,0BAA0B,CACvF,EACD,aAAa,EAAE,cAAc,GAC5B,CACG;QACN,6BAAK,SAAS,EAAC,aAAa;YAC3B,8BAAM,SAAS,EAAC,UAAU,+CAAgD;YAC1E,oBAAC,qBAAqB,IACrB,UAAU,EAAE,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,gBAAgB,EAAE,oBAAoB,CAAC,IAAI,CAC1C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,KAAK,uBAAuB,CAAC,gCAAgC,CAC7F,EACD,aAAa,EAAE,oBAAoB,GAClC,CACG,CACJ,CACH,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,4BAA4B,CAAC","sourcesContent":["import React, { useContext, useEffect, useState } from \"react\";\n\n// Context\nimport { NotificationsPreferencesContext } from \"../../../NotificationsPreferencesContext\";\n\n// Components\nimport { Checkbox } from \"../../../../common/Checkbox\";\nimport DefaultDropdownButton, {\n\tIFinsembleDefaultDropdownButtonOptionsProps,\n} from \"../../../../shared/DefaultDropdownButton\";\nimport ButtonRow from \"../../../../common/ButtonRow\";\n\n// Utils\nimport { loadSources } from \"./notificationViewsUtils\";\n\nconst FINSEMBLE_NOTIFICATIONS_SERVICE_CONFIG_PATH = \"finsemble.servicesConfig.notifications\";\nconst NOTIFICATIONS_PREFERENCES_KEYS = {\n\tDISABLE_DOT_ON_TOOLBAR_ICON: \"disableDotOnToolbarIcon\",\n\tSHOW_DOT_ON_TOOLBAR_ICON_MUTED_NOTIFICATIONS: \"showDotOnToolbarIconForMutedNotifications\",\n\tINFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS: \"informationalNotificationToastPeriodSeconds\",\n\tDEFAULT_SNOOZE_PERIOD_SECONDS: \"defaultSnoozePeriodSeconds\",\n\tNEW_NOTIFICATION_HALO_PERIOD_SECONDS: \"newNotificationHaloPeriodSeconds\",\n};\n\nconst setAndTransmitPreferenceChange = (preferenceKey: string, value: any) => {\n\tFSBL.Clients.ConfigClient.setPreference(\n\t\t{\n\t\t\tfield: `${FINSEMBLE_NOTIFICATIONS_SERVICE_CONFIG_PATH}.${preferenceKey}`,\n\t\t\tvalue,\n\t\t},\n\t\t(err) => {\n\t\t\tif (err) {\n\t\t\t\tFSBL.Clients.Logger.system.error(\n\t\t\t\t\t`Error setting preference from Notifications Preferences Home Component - preference: ${preferenceKey} - value: ${value} `,\n\t\t\t\t\terr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.RouterClient.transmit(\"FinsembleUserPreferencesChannel\", {\n\t\t\t\t\tnotificationPreferences: {\n\t\t\t\t\t\t[preferenceKey]: value,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t);\n};\n\nconst informationalToastDuration: IFinsembleDefaultDropdownButtonOptionsProps[] = [\n\t{\n\t\toptionLabel: \"10 seconds\",\n\t\toptionValue: 10,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(\n\t\t\t\tNOTIFICATIONS_PREFERENCES_KEYS.INFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS,\n\t\t\t\t10\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"30 seconds\",\n\t\toptionValue: 30,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(\n\t\t\t\tNOTIFICATIONS_PREFERENCES_KEYS.INFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS,\n\t\t\t\t30\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"45 seconds\",\n\t\toptionValue: 45,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(\n\t\t\t\tNOTIFICATIONS_PREFERENCES_KEYS.INFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS,\n\t\t\t\t45\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"60 seconds\",\n\t\toptionValue: 60,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(\n\t\t\t\tNOTIFICATIONS_PREFERENCES_KEYS.INFORMATIONAL_NOTIFICATION_TOAST_PERIOD_SECONDS,\n\t\t\t\t60\n\t\t\t);\n\t\t},\n\t},\n];\n\nconst snoozeDuration: IFinsembleDefaultDropdownButtonOptionsProps[] = [\n\t{\n\t\toptionLabel: \"5 minutes\",\n\t\toptionValue: 300,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.DEFAULT_SNOOZE_PERIOD_SECONDS, 300);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"10 minutes\",\n\t\toptionValue: 600,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.DEFAULT_SNOOZE_PERIOD_SECONDS, 600);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"20 minutes\",\n\t\toptionValue: 1200,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.DEFAULT_SNOOZE_PERIOD_SECONDS, 1200);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"30 minutes\",\n\t\toptionValue: 1800,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.DEFAULT_SNOOZE_PERIOD_SECONDS, 1800);\n\t\t},\n\t},\n];\n\nconst newNotificationsHalo: IFinsembleDefaultDropdownButtonOptionsProps[] = [\n\t{\n\t\toptionLabel: \"30 seconds\",\n\t\toptionValue: 30,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.NEW_NOTIFICATION_HALO_PERIOD_SECONDS, 30);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"1 minute\",\n\t\toptionValue: 60,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.NEW_NOTIFICATION_HALO_PERIOD_SECONDS, 60);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"3 minutes\",\n\t\toptionValue: 180,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.NEW_NOTIFICATION_HALO_PERIOD_SECONDS, 180);\n\t\t},\n\t},\n\t{\n\t\toptionLabel: \"5 minutes\",\n\t\toptionValue: 600,\n\t\tclickHandler: () => {\n\t\t\tsetAndTransmitPreferenceChange(NOTIFICATIONS_PREFERENCES_KEYS.NEW_NOTIFICATION_HALO_PERIOD_SECONDS, 600);\n\t\t},\n\t},\n];\n\nconst NotificationsMainPreferences: React.FunctionComponent = () => {\n\tconst notificationsPreferencesContext = useContext(NotificationsPreferencesContext);\n\tconst {\n\t\tnotificationSources,\n\t\tsetNotificationSources,\n\t\tsetSelectedNotificationSource,\n\t\tsetCurrentNotificationsPreferencesView,\n\t} = notificationsPreferencesContext;\n\n\tconst [reloadSources, setReloadSources] = useState(false);\n\n\tconst [notificationPreferences, setNotificationPreferences] = useState<any>({});\n\n\tuseEffect(() => {\n\t\tasync function getNotificationsPreferences() {\n\t\t\treturn await FSBL.Clients.NotificationClient.getPreferences();\n\t\t}\n\n\t\tgetNotificationsPreferences().then((preferences: any) => {\n\t\t\tFSBL.Clients.Logger.info(\"NotificationsPreferencesHome\", preferences);\n\t\t\tsetNotificationPreferences(preferences);\n\t\t});\n\t}, []);\n\n\tuseEffect(() => {\n\t\tfunction listenForRefreshEvent(error: any, response: any) {\n\t\t\tif (error) {\n\t\t\t\tconsole.error(\"FinsembleNotificationsPreferencesChannel: \", error);\n\t\t\t} else {\n\t\t\t\tconst { data } = response;\n\t\t\t\tif (data === \"notificationReceived\") {\n\t\t\t\t\tsetReloadSources(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleNotificationsPreferencesChannel\", listenForRefreshEvent);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleNotificationsPreferencesChannel\", listenForRefreshEvent);\n\t\t};\n\t}, []);\n\t{\n\t\tnotificationSources &&\n\t\t\tuseEffect(() => {\n\t\t\t\tloadSources(setNotificationSources, setReloadSources);\n\t\t\t}, [notificationSources.length == 0, reloadSources]);\n\t}\n\n\tuseEffect(() => {\n\t\tfunction navigateToSourceDetail(err: any, response: any) {\n\t\t\tconst { data } = response;\n\t\t\tif (data.notification) {\n\t\t\t\tconst selectedSource = notificationSources.find((source) => source.source === data.notification.source) || null;\n\t\t\t\tsetSelectedNotificationSource(selectedSource);\n\t\t\t\tsetCurrentNotificationsPreferencesView(\"Details\");\n\t\t\t}\n\t\t}\n\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleNotificationsNavigationChannel\", navigateToSourceDetail);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleNotificationsNavigationChannel\", navigateToSourceDetail);\n\t\t};\n\t}, [notificationSources]);\n\n\tconst toggleNotificationDot = () => {\n\t\tsetNotificationPreferences((prevState: any) => {\n\t\t\treturn {\n\t\t\t\t...prevState,\n\t\t\t\tdisableDotOnToolbarIcon: !notificationPreferences.disableDotOnToolbarIcon,\n\t\t\t};\n\t\t});\n\t\tsetAndTransmitPreferenceChange(\"disableDotOnToolbarIcon\", !notificationPreferences.disableDotOnToolbarIcon);\n\t};\n\n\tconst toggleActionableNotificationToast = () => {\n\t\tsetNotificationPreferences((prevState: any) => {\n\t\t\treturn {\n\t\t\t\t...prevState,\n\t\t\t\ttoastTimeoutOnActionableNotifications: !notificationPreferences.toastTimeoutOnActionableNotifications,\n\t\t\t};\n\t\t});\n\t\tsetAndTransmitPreferenceChange(\n\t\t\t\"toastTimeoutOnActionableNotifications\",\n\t\t\t!notificationPreferences.toastTimeoutOnActionableNotifications\n\t\t);\n\t};\n\n\tconst toggleNotificationDotForMutedNotifications = () => {\n\t\tsetNotificationPreferences((prevState: any) => {\n\t\t\treturn {\n\t\t\t\t...prevState,\n\t\t\t\tshowDotOnToolbarIconForMutedNotifications: !notificationPreferences.showDotOnToolbarIconForMutedNotifications,\n\t\t\t};\n\t\t});\n\t\tsetAndTransmitPreferenceChange(\n\t\t\t\"showDotOnToolbarIconForMutedNotifications\",\n\t\t\t!notificationPreferences.showDotOnToolbarIconForMutedNotifications\n\t\t);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<ButtonRow\n\t\t\t\t\tlabel=\"Notification sources\"\n\t\t\t\t\tonClick={() => setCurrentNotificationsPreferencesView(\"Sources\")}\n\t\t\t\t\ticonClass=\"ff-caret-up rotate-90\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<Checkbox\n\t\t\t\t\tonClick={toggleNotificationDot}\n\t\t\t\t\tchecked={!notificationPreferences.disableDotOnToolbarIcon}\n\t\t\t\t\tlabel=\"Show notification dot for new notifications\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<Checkbox\n\t\t\t\t\tdisabled={notificationPreferences.disableDotOnToolbarIcon}\n\t\t\t\t\tonClick={toggleNotificationDotForMutedNotifications}\n\t\t\t\t\tchecked={notificationPreferences.showDotOnToolbarIconForMutedNotifications}\n\t\t\t\t\tlabel=\"Show notification dot for notifications marked as “Don’t show”\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\" style={{ paddingTop: \"15px\", paddingBottom: \"15px\" }}>\n\t\t\t\t<Checkbox\n\t\t\t\t\tonClick={toggleActionableNotificationToast}\n\t\t\t\t\tchecked={notificationPreferences.toastTimeoutOnActionableNotifications}\n\t\t\t\t\tlabel=\"Enable toast timeouts on actionable notifications\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<span className=\"row__lbl\">Toast times out after</span>\n\t\t\t\t<DefaultDropdownButton\n\t\t\t\t\tallowEmpty={false}\n\t\t\t\t\tcaretLocation=\"right\"\n\t\t\t\t\tdefaultSelection={informationalToastDuration.find(\n\t\t\t\t\t\t(element) => element.optionValue === notificationPreferences.informationalNotificationToastPeriodSeconds\n\t\t\t\t\t)}\n\t\t\t\t\tbuttonOptions={informationalToastDuration}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<span className=\"row__lbl\">Snooze for</span>\n\t\t\t\t<DefaultDropdownButton\n\t\t\t\t\tallowEmpty={false}\n\t\t\t\t\tcaretLocation=\"right\"\n\t\t\t\t\tdefaultSelection={snoozeDuration.find(\n\t\t\t\t\t\t(element) => element.optionValue === notificationPreferences.defaultSnoozePeriodSeconds\n\t\t\t\t\t)}\n\t\t\t\t\tbuttonOptions={snoozeDuration}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className=\"row-section\">\n\t\t\t\t<span className=\"row__lbl\">Turn off the new notification halo after</span>\n\t\t\t\t<DefaultDropdownButton\n\t\t\t\t\tallowEmpty={false}\n\t\t\t\t\tcaretLocation=\"right\"\n\t\t\t\t\tdefaultSelection={newNotificationsHalo.find(\n\t\t\t\t\t\t(element) => element.optionValue === notificationPreferences.newNotificationHaloPeriodSeconds\n\t\t\t\t\t)}\n\t\t\t\t\tbuttonOptions={newNotificationsHalo}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nexport default NotificationsMainPreferences;\n"]}
@@ -1,8 +1,8 @@
1
1
  import React, { useEffect, useState } from "react";
2
2
  import { Checkbox } from "../../../common/Checkbox";
3
3
  import { TimeSelect } from "../../../common/TimeSelect";
4
- import { FinsembleToggle } from "../../../common/FinsembleToggle";
5
4
  import DefaultDropdownButton from "../../../shared/DefaultDropdownButton";
5
+ import { FinsembleToggleButtonBar } from "../../../common/FinsembleToggleButtonBar";
6
6
  const DEFAULT_TIME = {
7
7
  hour: 4,
8
8
  minute: 0,
@@ -78,12 +78,21 @@ export const ScheduledClose = (props) => {
78
78
  return (React.createElement("div", { className: "complex-menu-content-row", style: { overflow: "visible" } },
79
79
  React.createElement("div", { className: "close-toggle-container" },
80
80
  React.createElement(Checkbox, { onClick: toggleEnabled, checked: enabled, label: props.label }),
81
- React.createElement(FinsembleToggle, { key: `${weekly}`, checked: !weekly, onChange: (value) => {
81
+ React.createElement(FinsembleToggleButtonBar, { selected: !weekly, options: [
82
+ {
83
+ label: "Daily",
84
+ value: true,
85
+ },
86
+ {
87
+ label: "Weekly",
88
+ value: false,
89
+ },
90
+ ], onChange: (value) => {
82
91
  if (!value) {
83
92
  setDay(false);
84
93
  }
85
94
  setWeekly(!value);
86
- }, textToggle: ["Daily", "Weekly"], enabled: enabled })),
95
+ }, enabled: enabled })),
87
96
  weekly && (React.createElement("div", { className: `time-selectors daily-select ${enabled ? "" : "disabled"}` },
88
97
  React.createElement("div", { className: "daily-select-label" }, "Day:"),
89
98
  React.createElement("div", { className: "daily-select-dropdown" },
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduledClose.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/general/ScheduledClose.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { Checkbox } from \"../../../common/Checkbox\";\nimport { TimeSelect, TimeSelectTime } from \"../../../common/TimeSelect\";\nimport { FinsembleToggle } from \"../../../common/FinsembleToggle\";\nimport DefaultDropdownButton, {\n\tIFinsembleDefaultDropdownButtonOptionsProps,\n} from \"../../../shared/DefaultDropdownButton\";\nimport { ScheduledDayTimeObjectType } from \"../../UserPreferenceTypes\";\nimport { StandardCallback } from \"@finsemble/finsemble-api/types/types\";\n\nconst DEFAULT_TIME = {\n\thour: 4,\n\tminute: 0,\n\tmeridiem: \"AM\",\n};\n\nexport type ScheduledCloseProps = {\n\tgetPreferences: (cb: StandardCallback) => void;\n\tsetPreferences: (key: any, value: any) => void;\n\tconfigKey: string;\n\tlabel: string;\n};\n\nexport const ScheduledClose: React.FunctionComponent<ScheduledCloseProps> = (props) => {\n\tconst [initialized, setInitialized] = useState<boolean>(false);\n\tconst [enabled, setEnabled] = useState(false);\n\tconst [weekly, setWeekly] = useState<boolean>(false);\n\tconst [scheduledClose, setScheduledClose] = useState<TimeSelectTime>(DEFAULT_TIME);\n\tconst [day, setDay] = useState<false | number>(false);\n\n\tconst dayChanged = (dayValue: any) => {\n\t\tsetDay(Number.parseInt(dayValue, 10));\n\t};\n\n\tconst dayOptions: IFinsembleDefaultDropdownButtonOptionsProps[] = [];\n\tconst DAYS = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n\tfor (let k in DAYS) {\n\t\tdayOptions.push({\n\t\t\toptionLabel: DAYS[k],\n\t\t\toptionValue: k,\n\t\t\tclickHandler: () => {\n\t\t\t\tdayChanged(k);\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Toggle the enabled state of the select boxes.\n\t */\n\tconst toggleEnabled = () => {\n\t\tconst toggled = !enabled;\n\t\t// If the select boxes are no longer enabled, reset the scheduled restart time and call a method on the Actions object.\n\t\t// That function will set scheduledRestart to null via the preferences API. But we want our display to look nice, hence the bit where we reset it to the default value.\n\t\tsetEnabled(toggled);\n\t};\n\n\tconst onTimeSelectChange = (time: TimeSelectTime) => {\n\t\tsetScheduledClose(time);\n\t};\n\n\t/**\n\t * Add listener on the store. When the preferences field changes, we change our local state.\n\t * Also, get the initial state from the store.\n\t */\n\tuseEffect(() => {\n\t\tprops.getPreferences((err: any, data: any) => {\n\t\t\tif (data) {\n\t\t\t\tlet configValue = data[props.configKey];\n\t\t\t\tconst isEnabled = typeof configValue === \"object\";\n\t\t\t\tlet preferencesDay: number | false = false;\n\t\t\t\tif (isEnabled) {\n\t\t\t\t\tpreferencesDay = configValue.dayOfWeek ?? false;\n\t\t\t\t\tconfigValue.meridiem = configValue.hour > 11 ? \"PM\" : \"AM\";\n\t\t\t\t} else {\n\t\t\t\t\tconfigValue = DEFAULT_TIME;\n\t\t\t\t}\n\n\t\t\t\tsetDay(preferencesDay);\n\t\t\t\tsetWeekly(preferencesDay !== false);\n\t\t\t\tsetEnabled(isEnabled);\n\t\t\t\tsetScheduledClose(configValue);\n\t\t\t\tsetInitialized(true);\n\t\t\t}\n\t\t});\n\t}, []);\n\n\tconst getSchedule = (): ScheduledDayTimeObjectType | false => {\n\t\tlet returnValue: ScheduledDayTimeObjectType | false = false;\n\n\t\tif (enabled) {\n\t\t\treturnValue = { ...scheduledClose };\n\t\t\tif (weekly) {\n\t\t\t\treturnValue.dayOfWeek = day ? day : 0;\n\t\t\t} else {\n\t\t\t\tdelete returnValue.dayOfWeek;\n\t\t\t}\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tuseEffect(() => {\n\t\tif (initialized) {\n\t\t\tprops.setPreferences(props.configKey, getSchedule());\n\t\t}\n\t}, [scheduledClose, weekly, enabled, day]);\n\n\treturn (\n\t\t<div className=\"complex-menu-content-row\" style={{ overflow: \"visible\" }}>\n\t\t\t<div className=\"close-toggle-container\">\n\t\t\t\t<Checkbox onClick={toggleEnabled} checked={enabled} label={props.label} />\n\t\t\t\t<FinsembleToggle\n\t\t\t\t\tkey={`${weekly}`}\n\t\t\t\t\tchecked={!weekly}\n\t\t\t\t\tonChange={(value) => {\n\t\t\t\t\t\tif (!value) {\n\t\t\t\t\t\t\tsetDay(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetWeekly(!value);\n\t\t\t\t\t}}\n\t\t\t\t\ttextToggle={[\"Daily\", \"Weekly\"]}\n\t\t\t\t\tenabled={enabled}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{weekly && (\n\t\t\t\t<div className={`time-selectors daily-select ${enabled ? \"\" : \"disabled\"}`}>\n\t\t\t\t\t<div className=\"daily-select-label\">Day:</div>\n\t\t\t\t\t<div className=\"daily-select-dropdown\">\n\t\t\t\t\t\t<DefaultDropdownButton\n\t\t\t\t\t\t\tkey={`${day}`}\n\t\t\t\t\t\t\tbuttonOptions={dayOptions}\n\t\t\t\t\t\t\tclassNames={\"push-right\"}\n\t\t\t\t\t\t\tallowEmpty={false}\n\t\t\t\t\t\t\tcaretLocation={\"right\"}\n\t\t\t\t\t\t\tenabled={enabled}\n\t\t\t\t\t\t\tdefaultSelection={dayOptions[day ? day : 0]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"time-selectors\">\n\t\t\t\t<TimeSelect\n\t\t\t\t\tkey={`${scheduledClose.hour}${scheduledClose.minute}${scheduledClose.meridiem}`}\n\t\t\t\t\tenabled={enabled}\n\t\t\t\t\tinitialTime={scheduledClose}\n\t\t\t\t\tonChange={onTimeSelectChange}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ScheduledClose;\n"]}
1
+ {"version":3,"file":"ScheduledClose.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/general/ScheduledClose.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { Checkbox } from \"../../../common/Checkbox\";\nimport { TimeSelect, TimeSelectTime } from \"../../../common/TimeSelect\";\nimport DefaultDropdownButton, {\n\tIFinsembleDefaultDropdownButtonOptionsProps,\n} from \"../../../shared/DefaultDropdownButton\";\nimport { ScheduledDayTimeObjectType } from \"../../UserPreferenceTypes\";\nimport { StandardCallback } from \"@finsemble/finsemble-api/types/types\";\nimport { FinsembleToggleButtonBar } from \"../../../common/FinsembleToggleButtonBar\";\n\nconst DEFAULT_TIME = {\n\thour: 4,\n\tminute: 0,\n\tmeridiem: \"AM\",\n};\n\nexport type ScheduledCloseProps = {\n\tgetPreferences: (cb: StandardCallback) => void;\n\tsetPreferences: (key: any, value: any) => void;\n\tconfigKey: string;\n\tlabel: string;\n};\n\nexport const ScheduledClose: React.FunctionComponent<ScheduledCloseProps> = (props) => {\n\tconst [initialized, setInitialized] = useState<boolean>(false);\n\tconst [enabled, setEnabled] = useState(false);\n\tconst [weekly, setWeekly] = useState<boolean>(false);\n\tconst [scheduledClose, setScheduledClose] = useState<TimeSelectTime>(DEFAULT_TIME);\n\tconst [day, setDay] = useState<false | number>(false);\n\n\tconst dayChanged = (dayValue: any) => {\n\t\tsetDay(Number.parseInt(dayValue, 10));\n\t};\n\n\tconst dayOptions: IFinsembleDefaultDropdownButtonOptionsProps[] = [];\n\tconst DAYS = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n\tfor (let k in DAYS) {\n\t\tdayOptions.push({\n\t\t\toptionLabel: DAYS[k],\n\t\t\toptionValue: k,\n\t\t\tclickHandler: () => {\n\t\t\t\tdayChanged(k);\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Toggle the enabled state of the select boxes.\n\t */\n\tconst toggleEnabled = () => {\n\t\tconst toggled = !enabled;\n\t\t// If the select boxes are no longer enabled, reset the scheduled restart time and call a method on the Actions object.\n\t\t// That function will set scheduledRestart to null via the preferences API. But we want our display to look nice, hence the bit where we reset it to the default value.\n\t\tsetEnabled(toggled);\n\t};\n\n\tconst onTimeSelectChange = (time: TimeSelectTime) => {\n\t\tsetScheduledClose(time);\n\t};\n\n\t/**\n\t * Add listener on the store. When the preferences field changes, we change our local state.\n\t * Also, get the initial state from the store.\n\t */\n\tuseEffect(() => {\n\t\tprops.getPreferences((err: any, data: any) => {\n\t\t\tif (data) {\n\t\t\t\tlet configValue = data[props.configKey];\n\t\t\t\tconst isEnabled = typeof configValue === \"object\";\n\t\t\t\tlet preferencesDay: number | false = false;\n\t\t\t\tif (isEnabled) {\n\t\t\t\t\tpreferencesDay = configValue.dayOfWeek ?? false;\n\t\t\t\t\tconfigValue.meridiem = configValue.hour > 11 ? \"PM\" : \"AM\";\n\t\t\t\t} else {\n\t\t\t\t\tconfigValue = DEFAULT_TIME;\n\t\t\t\t}\n\n\t\t\t\tsetDay(preferencesDay);\n\t\t\t\tsetWeekly(preferencesDay !== false);\n\t\t\t\tsetEnabled(isEnabled);\n\t\t\t\tsetScheduledClose(configValue);\n\t\t\t\tsetInitialized(true);\n\t\t\t}\n\t\t});\n\t}, []);\n\n\tconst getSchedule = (): ScheduledDayTimeObjectType | false => {\n\t\tlet returnValue: ScheduledDayTimeObjectType | false = false;\n\n\t\tif (enabled) {\n\t\t\treturnValue = { ...scheduledClose };\n\t\t\tif (weekly) {\n\t\t\t\treturnValue.dayOfWeek = day ? day : 0;\n\t\t\t} else {\n\t\t\t\tdelete returnValue.dayOfWeek;\n\t\t\t}\n\t\t}\n\n\t\treturn returnValue;\n\t};\n\n\tuseEffect(() => {\n\t\tif (initialized) {\n\t\t\tprops.setPreferences(props.configKey, getSchedule());\n\t\t}\n\t}, [scheduledClose, weekly, enabled, day]);\n\n\treturn (\n\t\t<div className=\"complex-menu-content-row\" style={{ overflow: \"visible\" }}>\n\t\t\t<div className=\"close-toggle-container\">\n\t\t\t\t<Checkbox onClick={toggleEnabled} checked={enabled} label={props.label} />\n\t\t\t\t<FinsembleToggleButtonBar\n\t\t\t\t\tselected={!weekly}\n\t\t\t\t\toptions={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: \"Daily\",\n\t\t\t\t\t\t\tvalue: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: \"Weekly\",\n\t\t\t\t\t\t\tvalue: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t\tonChange={(value) => {\n\t\t\t\t\t\t// Day representes the day of the week, and is false when irrelevant.\n\t\t\t\t\t\t// Here, we only ever set it to false. The day number comes from the dropdown below.\n\t\t\t\t\t\tif (!value) {\n\t\t\t\t\t\t\tsetDay(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsetWeekly(!value);\n\t\t\t\t\t}}\n\t\t\t\t\tenabled={enabled}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{weekly && (\n\t\t\t\t<div className={`time-selectors daily-select ${enabled ? \"\" : \"disabled\"}`}>\n\t\t\t\t\t<div className=\"daily-select-label\">Day:</div>\n\t\t\t\t\t<div className=\"daily-select-dropdown\">\n\t\t\t\t\t\t<DefaultDropdownButton\n\t\t\t\t\t\t\tkey={`${day}`}\n\t\t\t\t\t\t\tbuttonOptions={dayOptions}\n\t\t\t\t\t\t\tclassNames={\"push-right\"}\n\t\t\t\t\t\t\tallowEmpty={false}\n\t\t\t\t\t\t\tcaretLocation={\"right\"}\n\t\t\t\t\t\t\tenabled={enabled}\n\t\t\t\t\t\t\tdefaultSelection={dayOptions[day ? day : 0]}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"time-selectors\">\n\t\t\t\t<TimeSelect\n\t\t\t\t\tkey={`${scheduledClose.hour}${scheduledClose.minute}${scheduledClose.meridiem}`}\n\t\t\t\t\tenabled={enabled}\n\t\t\t\t\tinitialTime={scheduledClose}\n\t\t\t\t\tonChange={onTimeSelectChange}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ScheduledClose;\n"]}
@@ -4,6 +4,6 @@ export const WorkspaceButton = ({ title, onMouseDown, onClick, type }) => (React
4
4
  onClick();
5
5
  }
6
6
  } },
7
- React.createElement("i", { className: `workspace-action-button-icon ${type === "import" ? "ff-import" : "ff-export"}` }),
7
+ React.createElement("i", { className: `workspace-action-button-icon ${type === "import" ? "ff-import" : "ff-export"}`, "aria-hidden": "true" }),
8
8
  React.createElement("div", { className: "workspace-action-button-label" }, type === "import" ? "Import" : "Export")));
9
9
  //# sourceMappingURL=WorkspaceButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceButton.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/workspaces/WorkspaceButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAQ1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAwB,EAAE,EAAE,CAAC,CAC/F,6BACC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAC,uCAAuC,EACjD,IAAI,EAAC,QAAQ,EACb,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,CAAC,CAAsB,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YACvC,OAAO,EAAE,CAAC;SACV;IACF,CAAC;IAED,2BAAG,SAAS,EAAE,gCAAgC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,GAAM;IACnG,6BAAK,SAAS,EAAC,+BAA+B,IAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAO,CACzF,CACN,CAAC","sourcesContent":["import React, { MouseEvent } from \"react\";\n\nexport type WorkspaceButtonProps = {\n\tonClick: (e?: React.MouseEvent<HTMLDivElement>) => void;\n\tonMouseDown?: React.MouseEventHandler<HTMLDivElement>;\n\ttitle?: string;\n\ttype?: string;\n};\nexport const WorkspaceButton = ({ title, onMouseDown, onClick, type }: WorkspaceButtonProps) => (\n\t<div\n\t\ttitle={title}\n\t\tclassName=\"action-button workspace-action-button\"\n\t\trole=\"button\"\n\t\tonMouseDown={onMouseDown}\n\t\tonClick={onClick}\n\t\ttabIndex={0}\n\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\tif (e.key === \" \" || e.key === \"Enter\") {\n\t\t\t\tonClick();\n\t\t\t}\n\t\t}}\n\t>\n\t\t<i className={`workspace-action-button-icon ${type === \"import\" ? \"ff-import\" : \"ff-export\"}`}></i>\n\t\t<div className=\"workspace-action-button-label\">{type === \"import\" ? \"Import\" : \"Export\"}</div>\n\t</div>\n);\n"]}
1
+ {"version":3,"file":"WorkspaceButton.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/workspaces/WorkspaceButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAQ1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAwB,EAAE,EAAE,CAAC,CAC/F,6BACC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAC,uCAAuC,EACjD,IAAI,EAAC,QAAQ,EACb,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,CAAC,CAAsB,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YACvC,OAAO,EAAE,CAAC;SACV;IACF,CAAC;IAED,2BACC,SAAS,EAAE,gCAAgC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,iBAC9E,MAAM,GACd;IACL,6BAAK,SAAS,EAAC,+BAA+B,IAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAO,CACzF,CACN,CAAC","sourcesContent":["import React, { MouseEvent } from \"react\";\n\nexport type WorkspaceButtonProps = {\n\tonClick: (e?: React.MouseEvent<HTMLDivElement>) => void;\n\tonMouseDown?: React.MouseEventHandler<HTMLDivElement>;\n\ttitle?: string;\n\ttype?: string;\n};\nexport const WorkspaceButton = ({ title, onMouseDown, onClick, type }: WorkspaceButtonProps) => (\n\t<div\n\t\ttitle={title}\n\t\tclassName=\"action-button workspace-action-button\"\n\t\trole=\"button\"\n\t\tonMouseDown={onMouseDown}\n\t\tonClick={onClick}\n\t\ttabIndex={0}\n\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\tif (e.key === \" \" || e.key === \"Enter\") {\n\t\t\t\tonClick();\n\t\t\t}\n\t\t}}\n\t>\n\t\t<i\n\t\t\tclassName={`workspace-action-button-icon ${type === \"import\" ? \"ff-import\" : \"ff-export\"}`}\n\t\t\taria-hidden=\"true\"\n\t\t></i>\n\t\t<div className=\"workspace-action-button-label\">{type === \"import\" ? \"Import\" : \"Export\"}</div>\n\t</div>\n);\n"]}
@@ -1,9 +1,13 @@
1
1
  import * as React from "react";
2
- import "../../assets/css/finsemble.css";
3
2
  import "../../assets/css/windowTitleBar.css";
4
3
  import { StandardError } from "@finsemble/finsemble-api/types/types";
5
4
  import StoreModel from "@finsemble/finsemble-api/types/clients/StoreModel";
6
5
  import { TabProperties } from "../../types/windowTitleBar";
6
+ declare type BumpElements = {
7
+ bumpBy: string;
8
+ fixed: string;
9
+ absolute: string;
10
+ };
7
11
  interface WindowTitleBarShellProps {
8
12
  }
9
13
  interface WindowTitleBarShellState {
@@ -29,13 +33,15 @@ interface WindowTitleBarShellState {
29
33
  tabBarBoundingBox: any;
30
34
  useDOMBasedMovement: boolean;
31
35
  dragHandleName: string;
36
+ bumpElements: BumpElements;
37
+ adjustContentHeights: boolean;
32
38
  }
33
39
  export declare class WindowTitleBarShell extends React.Component<WindowTitleBarShellProps, WindowTitleBarShellState> {
34
40
  store?: StoreModel;
35
41
  constructor(props: WindowTitleBarShellProps);
36
42
  alwaysOnTopListener({ data: { alwaysOnTop } }: any): void;
37
43
  bindCorrectContext(): void;
38
- onInitialized(store: StoreModel): void;
44
+ onInitialized(): void;
39
45
  onStoreChange(): void;
40
46
  componentDidMount(): void;
41
47
  componentDidUpdate(): void;
@@ -63,6 +69,15 @@ export declare class WindowTitleBarShell extends React.Component<WindowTitleBarS
63
69
  onTabsChanged(err: StandardError, response: any): void;
64
70
  onShowTabsChanged(err: StandardError, response: any): void;
65
71
  hackScrollbar(): void;
72
+ maybeAdjustWindow(): Promise<void>;
73
+ bumpElements(config: BumpElements): void;
74
+ private adjust;
75
+ private adjustTopLevelHeight;
76
+ private adjustContentHeight;
77
+ private calculateBumpValue;
78
+ private traverseHtml;
79
+ private bumpFixedElements;
80
+ private bumpAbsoluteElements;
66
81
  render(): JSX.Element;
67
82
  }
68
83
  export {};