@finsemble/finsemble-ui 6.4.0 → 6.5.0-beta.2

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 (218) hide show
  1. package/package.json +19 -18
  2. package/react/actions/smartDesktopDesignerActions.d.ts +6 -2
  3. package/react/actions/smartDesktopDesignerActions.js +2 -0
  4. package/react/actions/smartDesktopDesignerActions.js.map +1 -1
  5. package/react/assets/icons/code-block.svg +15 -0
  6. package/react/components/FinsembleProvider.js.map +1 -1
  7. package/react/components/appCatalog/modules/FDC3.d.ts +1 -1
  8. package/react/components/appCatalog/modules/FDC3.js.map +1 -1
  9. package/react/components/appCatalog/stores/appStore.d.ts +2 -2
  10. package/react/components/appCatalog/stores/appStore.js.map +1 -1
  11. package/react/components/common/Checkbox.js +1 -1
  12. package/react/components/common/Checkbox.js.map +1 -1
  13. package/react/components/common/DropZone.js +3 -1
  14. package/react/components/common/DropZone.js.map +1 -1
  15. package/react/components/common/FinsembleIcon.d.ts +1 -1
  16. package/react/components/common/FinsembleIcon.js +2 -0
  17. package/react/components/common/FinsembleIcon.js.map +1 -1
  18. package/react/components/common/FinsembleSelect.js +1 -1
  19. package/react/components/common/FinsembleSelect.js.map +1 -1
  20. package/react/components/common/Tooltip.js +3 -1
  21. package/react/components/common/Tooltip.js.map +1 -1
  22. package/react/components/common/css/application-list.css +4 -0
  23. package/react/components/common/css/preload-edit-page.css +37 -0
  24. package/react/components/favorites/FavoritesShell.stories.js.map +1 -1
  25. package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
  26. package/react/components/legacyControls/FinsembleDnDContext.d.ts +2 -1
  27. package/react/components/legacyControls/FinsembleDnDContext.js +8 -6
  28. package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
  29. package/react/components/linker/remoteRedux.d.ts +1 -1
  30. package/react/components/linker/remoteRedux.js.map +1 -1
  31. package/react/components/menu/MenuAutoResizer.js.map +1 -1
  32. package/react/components/menu/MenuPortal.js +19 -0
  33. package/react/components/menu/MenuPortal.js.map +1 -1
  34. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
  35. package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js.map +1 -1
  36. package/react/components/notifications/components/shared/CheckButton.d.ts +1 -1
  37. package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
  38. package/react/components/notifications/components/shared/NotificationCardShell.d.ts +1 -1
  39. package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
  40. package/react/components/notifications/components/shared/OverflowMenu.d.ts +1 -1
  41. package/react/components/notifications/components/shared/OverflowMenu.js.map +1 -1
  42. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.d.ts +1 -1
  43. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.js.map +1 -1
  44. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.d.ts +1 -1
  45. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
  46. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.d.ts +1 -1
  47. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.js.map +1 -1
  48. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.d.ts +1 -1
  49. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js.map +1 -1
  50. package/react/components/notifications/components/views/CardView.js.map +1 -1
  51. package/react/components/notifications/components/views/ListView.d.ts +1 -1
  52. package/react/components/notifications/components/views/ListView.js.map +1 -1
  53. package/react/components/notifications/components/views/NotificationDetailsView.d.ts +1 -1
  54. package/react/components/notifications/components/views/NotificationDetailsView.js.map +1 -1
  55. package/react/components/notifications/types.d.ts +1 -1
  56. package/react/components/notifications/types.js.map +1 -1
  57. package/react/components/notifications/utils.d.ts +1 -1
  58. package/react/components/notifications/utils.js.map +1 -1
  59. package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
  60. package/react/components/processMonitor/components/ChildWindow.js.map +1 -1
  61. package/react/components/processMonitor/components/ListHeader.d.ts +1 -1
  62. package/react/components/processMonitor/components/ListHeader.js.map +1 -1
  63. package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts +3 -3
  64. package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
  65. package/react/components/search/SearchResult.js +4 -3
  66. package/react/components/search/SearchResult.js.map +1 -1
  67. package/react/components/smartDesktopDesigner/AppEditAccess.js.map +1 -1
  68. package/react/components/smartDesktopDesigner/AppEditPage.d.ts +2 -1
  69. package/react/components/smartDesktopDesigner/AppEditPage.js +77 -73
  70. package/react/components/smartDesktopDesigner/AppEditPage.js.map +1 -1
  71. package/react/components/smartDesktopDesigner/Appearance.css +8 -0
  72. package/react/components/smartDesktopDesigner/Application.d.ts +10 -3
  73. package/react/components/smartDesktopDesigner/Application.js +35 -42
  74. package/react/components/smartDesktopDesigner/Application.js.map +1 -1
  75. package/react/components/smartDesktopDesigner/Applications.d.ts +2 -0
  76. package/react/components/smartDesktopDesigner/Applications.js +17 -7
  77. package/react/components/smartDesktopDesigner/Applications.js.map +1 -1
  78. package/react/components/smartDesktopDesigner/EditPreload.d.ts +14 -0
  79. package/react/components/smartDesktopDesigner/EditPreload.js +169 -0
  80. package/react/components/smartDesktopDesigner/EditPreload.js.map +1 -0
  81. package/react/components/smartDesktopDesigner/ItemList.d.ts +17 -0
  82. package/react/components/smartDesktopDesigner/ItemList.js +58 -0
  83. package/react/components/smartDesktopDesigner/ItemList.js.map +1 -0
  84. package/react/components/smartDesktopDesigner/OptionalSettingsView.d.ts +11 -0
  85. package/react/components/smartDesktopDesigner/OptionalSettingsView.js +71 -0
  86. package/react/components/smartDesktopDesigner/OptionalSettingsView.js.map +1 -0
  87. package/react/components/smartDesktopDesigner/Preloads.d.ts +8 -0
  88. package/react/components/smartDesktopDesigner/Preloads.js +26 -0
  89. package/react/components/smartDesktopDesigner/Preloads.js.map +1 -0
  90. package/react/components/smartDesktopDesigner/Publish.js.map +1 -1
  91. package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
  92. package/react/components/smartDesktopDesigner/Toolbar.js +5 -5
  93. package/react/components/smartDesktopDesigner/Toolbar.js.map +1 -1
  94. package/react/components/smartDesktopDesigner/common/views.js +18 -0
  95. package/react/components/smartDesktopDesigner/common/views.js.map +1 -1
  96. package/react/components/smartDesktopDesigner/css/appearance.css +3 -0
  97. package/react/components/smartDesktopDesigner/fixtures/apps.d.ts +1 -1
  98. package/react/components/smartDesktopDesigner/fixtures/apps.js +23 -1
  99. package/react/components/smartDesktopDesigner/fixtures/apps.js.map +1 -1
  100. package/react/components/smartDesktopDesigner/fixtures/exportProps.js.map +1 -1
  101. package/react/components/smartDesktopDesigner/fixtures/preloads.d.ts +22 -0
  102. package/react/components/smartDesktopDesigner/fixtures/preloads.js +40 -0
  103. package/react/components/smartDesktopDesigner/fixtures/preloads.js.map +1 -0
  104. package/react/components/smartDesktopDesigner/fixtures/publishProgress.d.ts +1 -1
  105. package/react/components/smartDesktopDesigner/fixtures/publishProgress.js.map +1 -1
  106. package/react/components/smartDesktopDesigner/fixtures/views.js +9 -0
  107. package/react/components/smartDesktopDesigner/fixtures/views.js.map +1 -1
  108. package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.d.ts +1 -1
  109. package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.js +1 -0
  110. package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.js.map +1 -1
  111. package/react/components/smartDesktopDesigner/stories/EditPreload.stories.d.ts +11 -0
  112. package/react/components/smartDesktopDesigner/stories/EditPreload.stories.js +35 -0
  113. package/react/components/smartDesktopDesigner/stories/EditPreload.stories.js.map +1 -0
  114. package/react/components/smartDesktopDesigner/stories/ItemList.stories.d.ts +16 -0
  115. package/react/components/smartDesktopDesigner/stories/{ApplicationList.stories.js → ItemList.stories.js} +26 -26
  116. package/react/components/smartDesktopDesigner/stories/ItemList.stories.js.map +1 -0
  117. package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.d.ts +11 -0
  118. package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.js +28 -0
  119. package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.js.map +1 -0
  120. package/react/components/smartDesktopDesigner/stories/Preloads.stories.d.ts +11 -0
  121. package/react/components/smartDesktopDesigner/stories/Preloads.stories.js +31 -0
  122. package/react/components/smartDesktopDesigner/stories/Preloads.stories.js.map +1 -0
  123. package/react/components/smartDesktopDesigner/stories/SmartDesktopDesigner.stories.js.map +1 -1
  124. package/react/components/smartDesktopDesigner/tests/AppEditPage.spec.js +1099 -258
  125. package/react/components/smartDesktopDesigner/tests/AppEditPage.spec.js.map +1 -1
  126. package/react/components/smartDesktopDesigner/tests/{ApplicationList.spec.d.ts → Application.spec.d.ts} +0 -0
  127. package/react/components/smartDesktopDesigner/tests/Application.spec.js +1496 -0
  128. package/react/components/smartDesktopDesigner/tests/Application.spec.js.map +1 -0
  129. package/react/components/smartDesktopDesigner/tests/Applications.spec.js +3 -3
  130. package/react/components/smartDesktopDesigner/tests/Applications.spec.js.map +1 -1
  131. package/react/components/smartDesktopDesigner/tests/EditPreload.spec.d.ts +1 -0
  132. package/react/components/smartDesktopDesigner/tests/EditPreload.spec.js +61 -0
  133. package/react/components/smartDesktopDesigner/tests/EditPreload.spec.js.map +1 -0
  134. package/react/components/smartDesktopDesigner/tests/ItemList.spec.d.ts +1 -0
  135. package/react/components/smartDesktopDesigner/tests/{ApplicationList.spec.js → ItemList.spec.js} +8 -8
  136. package/react/components/smartDesktopDesigner/tests/ItemList.spec.js.map +1 -0
  137. package/react/components/smartDesktopDesigner/tests/Preloads.spec.d.ts +1 -0
  138. package/react/components/smartDesktopDesigner/tests/Preloads.spec.js +47 -0
  139. package/react/components/smartDesktopDesigner/tests/Preloads.spec.js.map +1 -0
  140. package/react/components/smartDesktopDesigner/tests/SmartDesktopDesigner.spec.js +6 -0
  141. package/react/components/smartDesktopDesigner/tests/SmartDesktopDesigner.spec.js.map +1 -1
  142. package/react/components/toolbar/DragHandle.spec.d.ts +1 -0
  143. package/react/components/toolbar/DragHandle.spec.js +31 -0
  144. package/react/components/toolbar/DragHandle.spec.js.map +1 -0
  145. package/react/components/toolbar/DragHandle.stories.d.ts +13 -0
  146. package/react/components/toolbar/DragHandle.stories.js +39 -0
  147. package/react/components/toolbar/DragHandle.stories.js.map +1 -0
  148. package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.d.ts +1 -1
  149. package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js.map +1 -1
  150. package/react/components/toolbar/advancedAppLauncher/components/Content.d.ts +1 -1
  151. package/react/components/toolbar/advancedAppLauncher/components/Content.js.map +1 -1
  152. package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js.map +1 -1
  153. package/react/components/toolbar/advancedAppLauncher/components/FoldersList.d.ts +1 -1
  154. package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js.map +1 -1
  155. package/react/components/toolbar/advancedAppLauncher/components/TagsList.d.ts +1 -1
  156. package/react/components/toolbar/advancedAppLauncher/components/TagsList.js.map +1 -1
  157. package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.d.ts +2 -2
  158. package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.js.map +1 -1
  159. package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
  160. package/react/components/toolbar/appLauncher/components/componentList.d.ts +2 -2
  161. package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
  162. package/react/components/toolbar/appLauncher/stores/appLauncherStore.d.ts +2 -2
  163. package/react/components/toolbar/appLauncher/stores/appLauncherStore.js.map +1 -1
  164. package/react/components/toolbar/dashbar/Dashbar.js +9 -12
  165. package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
  166. package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.d.ts +2 -2
  167. package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js.map +1 -1
  168. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts +1 -1
  169. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
  170. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.d.ts +1 -1
  171. package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js.map +1 -1
  172. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts +4 -4
  173. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +1 -1
  174. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
  175. package/react/components/userPreferences/components/content/Workspaces.d.ts +1 -1
  176. package/react/components/userPreferences/components/content/Workspaces.js +1 -1
  177. package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
  178. package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js.map +1 -1
  179. package/react/components/userPreferences/components/content/notificationViews/notificationViewsUtils.js.map +1 -1
  180. package/react/components/userPreferences/stores/UserPreferencesStore.d.ts +1 -1
  181. package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
  182. package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +4 -2
  183. package/react/components/windowTitleBar/WindowTitleBarShell.js +60 -59
  184. package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
  185. package/react/components/windowTitleBar/components/center/TabList.d.ts +2 -2
  186. package/react/components/windowTitleBar/components/center/TabList.js +3 -0
  187. package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
  188. package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
  189. package/react/components/windowTitleBar/components/right/GroupingButton.js.map +1 -1
  190. package/react/components/windowTitleBar/components/right/MaximizeButton.js.map +1 -1
  191. package/react/components/windowTitleBar/components/windowTitle.d.ts +5 -2
  192. package/react/components/windowTitleBar/components/windowTitle.js +93 -89
  193. package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
  194. package/react/components/windowTitleBar/stores/windowTitleBarStore.d.ts +3 -3
  195. package/react/components/windowTitleBar/stores/windowTitleBarStore.js +213 -217
  196. package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
  197. package/react/hooks/useDashbar.js.map +1 -1
  198. package/react/hooks/useFavoritesShell.js.map +1 -1
  199. package/react/hooks/useNotifications.d.ts +1 -1
  200. package/react/hooks/useNotifications.js.map +1 -1
  201. package/react/reducers/rootReducer.d.ts +11 -3
  202. package/react/reducers/smartDesktopDesignerReducer.js +8 -0
  203. package/react/reducers/smartDesktopDesignerReducer.js.map +1 -1
  204. package/react/store.d.ts +22 -6
  205. package/react/types/fdc3.d.ts +2 -2
  206. package/react/types/fdc3.js.map +1 -1
  207. package/react/types/searchTypes.d.ts +1 -8
  208. package/react/types/searchTypes.js.map +1 -1
  209. package/react/types/smartDesktopDesignerTypes.d.ts +8 -2
  210. package/react/types/smartDesktopDesignerTypes.js.map +1 -1
  211. package/react/types/windowTitleBar.d.ts +1 -1
  212. package/react/types/windowTitleBar.js.map +1 -1
  213. package/react/components/smartDesktopDesigner/ApplicationList.d.ts +0 -16
  214. package/react/components/smartDesktopDesigner/ApplicationList.js +0 -60
  215. package/react/components/smartDesktopDesigner/ApplicationList.js.map +0 -1
  216. package/react/components/smartDesktopDesigner/stories/ApplicationList.stories.d.ts +0 -16
  217. package/react/components/smartDesktopDesigner/stories/ApplicationList.stories.js.map +0 -1
  218. package/react/components/smartDesktopDesigner/tests/ApplicationList.spec.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"NotificationsSourceTypes.js","sourceRoot":"","sources":["../../../../../../src/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { Dispatch, SetStateAction, useContext, useEffect, useState } from \"react\";\n\n// Types\nimport { IType } from \"../Notifications\";\n\n// Context\nimport { NotificationsPreferencesContext } from \"../../../NotificationsPreferencesContext\";\n\n// Components\nimport BellIcon from \"../../../../shared/BellIcon\";\nimport BellIconCrossed from \"../../../../shared/BellIconCrossed\";\nimport { Button } from \"../../../../common/Button\";\nimport { services } from \"@finsemble/finsemble-core\";\n\ntype IMuteFilter = services.notification.types.IMuteFilter;\n\nconst renderTypes = (\n\tmuteFilters: IMuteFilter[],\n\tsourceTypes: IType[],\n\tsetTypesMutedState: Dispatch<SetStateAction<IType[]>>\n) =>\n\tsourceTypes.map((sourceType, index) => {\n\t\tconst toggleMute = (type: string) => {\n\t\t\tconst newState = [...sourceTypes].map((typeToUpdate) => {\n\t\t\t\tif (typeToUpdate.name === type) {\n\t\t\t\t\tconst muteFilter: IMuteFilter | undefined = muteFilters.find(\n\t\t\t\t\t\t(muteFilterItem) => muteFilterItem.type === typeToUpdate.name\n\t\t\t\t\t);\n\t\t\t\t\tif (!muteFilter) {\n\t\t\t\t\t\tconsole.error(`Unable to find mute filter ${typeToUpdate.muted} for source`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet isMuted = false;\n\t\t\t\t\t\tif (typeToUpdate.muted) {\n\t\t\t\t\t\t\tFSBL.Clients.NotificationClient.unmute(muteFilter);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tFSBL.Clients.NotificationClient.mute(muteFilter);\n\t\t\t\t\t\t\tisMuted = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tFSBL.Clients.RouterClient.transmit(\"FinsembleNotificationsMuteStateChannel\", {\n\t\t\t\t\t\t\tsource: muteFilter.source,\n\t\t\t\t\t\t\ttype: muteFilter.type,\n\t\t\t\t\t\t\tisMuted: isMuted,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\ttypeToUpdate.muted = !typeToUpdate.muted;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn typeToUpdate;\n\t\t\t});\n\t\t\tsetTypesMutedState(newState);\n\t\t};\n\n\t\treturn (\n\t\t\t<div key={`${sourceType.name}__${index}`} className=\"row-section\">\n\t\t\t\t<div className=\"row\">\n\t\t\t\t\t<div className=\"row__lbl\">{sourceType.name}</div>\n\t\t\t\t\t<div className=\"row_right__icon\" onClick={() => toggleMute(sourceType.name)}>\n\t\t\t\t\t\t{sourceType.muted ? <BellIconCrossed /> : <BellIcon />}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t});\n\nconst NotificationsSourceTypes = (context?: any) => {\n\tconst notificationsPreferencesContext = useContext(NotificationsPreferencesContext);\n\tconst currentNotificationSource = notificationsPreferencesContext.selectedNotificationSource;\n\tconst sourceTypes = currentNotificationSource?.types.filter((type) => type.name !== \"default\") || [];\n\tconst muteFilters: IMuteFilter[] = sourceTypes.map((sourceType) => {\n\t\tconst muteFilter: IMuteFilter = { type: sourceType.name };\n\t\tif (currentNotificationSource?.source) {\n\t\t\tmuteFilter.source = currentNotificationSource.source;\n\t\t}\n\t\treturn muteFilter;\n\t});\n\n\tconst goBack = () => {\n\t\tnotificationsPreferencesContext.setCurrentNotificationsPreferencesView(\"Sources\");\n\t};\n\n\tconst [typesMutedState, setTypesMutedState] = useState(sourceTypes);\n\tconst [allMuted, setAllMuted] = useState(false);\n\n\tconst toggleMuteAll = () => {\n\t\tlet newTypesMutedState: IType[] = [];\n\t\tif (allMuted) {\n\t\t\tnewTypesMutedState = typesMutedState.map((sourceType) => {\n\t\t\t\tsourceType.muted = false;\n\t\t\t\treturn sourceType;\n\t\t\t});\n\t\t\tFSBL.Clients.NotificationClient.unmute(muteFilters);\n\t\t} else {\n\t\t\tnewTypesMutedState = typesMutedState.map((sourceType) => {\n\t\t\t\tsourceType.muted = true;\n\t\t\t\treturn sourceType;\n\t\t\t});\n\t\t\tFSBL.Clients.NotificationClient.mute(muteFilters);\n\t\t}\n\t\tnewTypesMutedState.forEach((element) => {\n\t\t\tFSBL.Clients.RouterClient.transmit(\"FinsembleNotificationsMuteStateChannel\", {\n\t\t\t\tsource: currentNotificationSource?.source,\n\t\t\t\ttype: element.name,\n\t\t\t\tisMuted: !allMuted,\n\t\t\t});\n\t\t});\n\t\tsetTypesMutedState(newTypesMutedState);\n\t\tsetAllMuted(!allMuted);\n\t};\n\n\t// Navigation Hook\n\tuseEffect(() => {\n\t\tfunction listenForPreference(error: any, response: any) {\n\t\t\tif (error) {\n\t\t\t\tconsole.error(\"FinsembleUserPreferencesChannel: \", error);\n\t\t\t} else {\n\t\t\t\tconst { data } = response;\n\t\t\t\tif (!data.notification) {\n\t\t\t\t\tnotificationsPreferencesContext.setCurrentNotificationsPreferencesView(\"Home\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleUserPreferencesChannel\", listenForPreference);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleUserPreferencesChannel\", listenForPreference);\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tfunction listenMuteStateChanged(error: any, response: any) {\n\t\t\tif (error) {\n\t\t\t\tconsole.error(\"FinsembleNotificationsMuteStateChannel: \", error);\n\t\t\t} else {\n\t\t\t\tconst { data } = response;\n\t\t\t\tconst newTypesMutedState = [...typesMutedState].map((muteState) => {\n\t\t\t\t\tif (muteState.name !== data.type) return muteState;\n\n\t\t\t\t\treturn { name: data.type, muted: data.isMuted };\n\t\t\t\t});\n\t\t\t\tsetTypesMutedState(newTypesMutedState);\n\t\t\t\tsetAllMuted(newTypesMutedState.every((sourceType) => sourceType.muted));\n\t\t\t}\n\t\t}\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleNotificationsMuteStateChannel\", listenMuteStateChanged);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleNotificationsMuteStateChannel\", listenMuteStateChanged);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<div className=\"notification-sources__container\">\n\t\t\t<div className=\"notification-sources__header\">\n\t\t\t\t<div style={{ paddingRight: 8, marginLeft: -3 }}>\n\t\t\t\t\t<Button onClick={() => goBack()} fashion=\"primary\" iconBefore=\"chevron-left\" text=\"Back\" />\n\t\t\t\t</div>\n\t\t\t\t<span className=\"heading-larger\">\n\t\t\t\t\t{JSON.stringify(notificationsPreferencesContext) === \"{}\" && context\n\t\t\t\t\t\t? context.context.source\n\t\t\t\t\t\t: currentNotificationSource?.source}\n\t\t\t\t</span>\n\t\t\t\t{muteFilters.length > 0 ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tfashion=\"primary\"\n\t\t\t\t\t\tclassName=\"accent-negative\"\n\t\t\t\t\t\ttext={allMuted ? \"Show All\" : \"Don't Show All\"}\n\t\t\t\t\t\tonClick={toggleMuteAll}\n\t\t\t\t\t\tfixedSize={110}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t<div className=\"notification-sources__types\">\n\t\t\t\t{typesMutedState && typesMutedState.length > 0 ? (\n\t\t\t\t\trenderTypes(muteFilters, typesMutedState, setTypesMutedState)\n\t\t\t\t) : (\n\t\t\t\t\t<div id=\"no-source-types\" className=\"row-section\">\n\t\t\t\t\t\tNo source types configured\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default NotificationsSourceTypes;\n"]}
1
+ {"version":3,"file":"NotificationsSourceTypes.js","sourceRoot":"","sources":["../../../../../../src/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { Dispatch, SetStateAction, useContext, useEffect, useState } from \"react\";\n\n// Types\nimport { IType } from \"../Notifications\";\n\n// Context\nimport { NotificationsPreferencesContext } from \"../../../NotificationsPreferencesContext\";\n\n// Components\nimport BellIcon from \"../../../../shared/BellIcon\";\nimport BellIconCrossed from \"../../../../shared/BellIconCrossed\";\nimport { Button } from \"../../../../common/Button\";\nimport { services } from \"@finsemble/finsemble-api\";\n\ntype IMuteFilter = services.notification.types.IMuteFilter;\n\nconst renderTypes = (\n\tmuteFilters: IMuteFilter[],\n\tsourceTypes: IType[],\n\tsetTypesMutedState: Dispatch<SetStateAction<IType[]>>\n) =>\n\tsourceTypes.map((sourceType, index) => {\n\t\tconst toggleMute = (type: string) => {\n\t\t\tconst newState = [...sourceTypes].map((typeToUpdate) => {\n\t\t\t\tif (typeToUpdate.name === type) {\n\t\t\t\t\tconst muteFilter: IMuteFilter | undefined = muteFilters.find(\n\t\t\t\t\t\t(muteFilterItem) => muteFilterItem.type === typeToUpdate.name\n\t\t\t\t\t);\n\t\t\t\t\tif (!muteFilter) {\n\t\t\t\t\t\tconsole.error(`Unable to find mute filter ${typeToUpdate.muted} for source`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet isMuted = false;\n\t\t\t\t\t\tif (typeToUpdate.muted) {\n\t\t\t\t\t\t\tFSBL.Clients.NotificationClient.unmute(muteFilter);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tFSBL.Clients.NotificationClient.mute(muteFilter);\n\t\t\t\t\t\t\tisMuted = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tFSBL.Clients.RouterClient.transmit(\"FinsembleNotificationsMuteStateChannel\", {\n\t\t\t\t\t\t\tsource: muteFilter.source,\n\t\t\t\t\t\t\ttype: muteFilter.type,\n\t\t\t\t\t\t\tisMuted: isMuted,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\ttypeToUpdate.muted = !typeToUpdate.muted;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn typeToUpdate;\n\t\t\t});\n\t\t\tsetTypesMutedState(newState);\n\t\t};\n\n\t\treturn (\n\t\t\t<div key={`${sourceType.name}__${index}`} className=\"row-section\">\n\t\t\t\t<div className=\"row\">\n\t\t\t\t\t<div className=\"row__lbl\">{sourceType.name}</div>\n\t\t\t\t\t<div className=\"row_right__icon\" onClick={() => toggleMute(sourceType.name)}>\n\t\t\t\t\t\t{sourceType.muted ? <BellIconCrossed /> : <BellIcon />}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t});\n\nconst NotificationsSourceTypes = (context?: any) => {\n\tconst notificationsPreferencesContext = useContext(NotificationsPreferencesContext);\n\tconst currentNotificationSource = notificationsPreferencesContext.selectedNotificationSource;\n\tconst sourceTypes = currentNotificationSource?.types.filter((type) => type.name !== \"default\") || [];\n\tconst muteFilters: IMuteFilter[] = sourceTypes.map((sourceType) => {\n\t\tconst muteFilter: IMuteFilter = { type: sourceType.name };\n\t\tif (currentNotificationSource?.source) {\n\t\t\tmuteFilter.source = currentNotificationSource.source;\n\t\t}\n\t\treturn muteFilter;\n\t});\n\n\tconst goBack = () => {\n\t\tnotificationsPreferencesContext.setCurrentNotificationsPreferencesView(\"Sources\");\n\t};\n\n\tconst [typesMutedState, setTypesMutedState] = useState(sourceTypes);\n\tconst [allMuted, setAllMuted] = useState(false);\n\n\tconst toggleMuteAll = () => {\n\t\tlet newTypesMutedState: IType[] = [];\n\t\tif (allMuted) {\n\t\t\tnewTypesMutedState = typesMutedState.map((sourceType) => {\n\t\t\t\tsourceType.muted = false;\n\t\t\t\treturn sourceType;\n\t\t\t});\n\t\t\tFSBL.Clients.NotificationClient.unmute(muteFilters);\n\t\t} else {\n\t\t\tnewTypesMutedState = typesMutedState.map((sourceType) => {\n\t\t\t\tsourceType.muted = true;\n\t\t\t\treturn sourceType;\n\t\t\t});\n\t\t\tFSBL.Clients.NotificationClient.mute(muteFilters);\n\t\t}\n\t\tnewTypesMutedState.forEach((element) => {\n\t\t\tFSBL.Clients.RouterClient.transmit(\"FinsembleNotificationsMuteStateChannel\", {\n\t\t\t\tsource: currentNotificationSource?.source,\n\t\t\t\ttype: element.name,\n\t\t\t\tisMuted: !allMuted,\n\t\t\t});\n\t\t});\n\t\tsetTypesMutedState(newTypesMutedState);\n\t\tsetAllMuted(!allMuted);\n\t};\n\n\t// Navigation Hook\n\tuseEffect(() => {\n\t\tfunction listenForPreference(error: any, response: any) {\n\t\t\tif (error) {\n\t\t\t\tconsole.error(\"FinsembleUserPreferencesChannel: \", error);\n\t\t\t} else {\n\t\t\t\tconst { data } = response;\n\t\t\t\tif (!data.notification) {\n\t\t\t\t\tnotificationsPreferencesContext.setCurrentNotificationsPreferencesView(\"Home\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleUserPreferencesChannel\", listenForPreference);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleUserPreferencesChannel\", listenForPreference);\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tfunction listenMuteStateChanged(error: any, response: any) {\n\t\t\tif (error) {\n\t\t\t\tconsole.error(\"FinsembleNotificationsMuteStateChannel: \", error);\n\t\t\t} else {\n\t\t\t\tconst { data } = response;\n\t\t\t\tconst newTypesMutedState = [...typesMutedState].map((muteState) => {\n\t\t\t\t\tif (muteState.name !== data.type) return muteState;\n\n\t\t\t\t\treturn { name: data.type, muted: data.isMuted };\n\t\t\t\t});\n\t\t\t\tsetTypesMutedState(newTypesMutedState);\n\t\t\t\tsetAllMuted(newTypesMutedState.every((sourceType) => sourceType.muted));\n\t\t\t}\n\t\t}\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleNotificationsMuteStateChannel\", listenMuteStateChanged);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleNotificationsMuteStateChannel\", listenMuteStateChanged);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<div className=\"notification-sources__container\">\n\t\t\t<div className=\"notification-sources__header\">\n\t\t\t\t<div style={{ paddingRight: 8, marginLeft: -3 }}>\n\t\t\t\t\t<Button onClick={() => goBack()} fashion=\"primary\" iconBefore=\"chevron-left\" text=\"Back\" />\n\t\t\t\t</div>\n\t\t\t\t<span className=\"heading-larger\">\n\t\t\t\t\t{JSON.stringify(notificationsPreferencesContext) === \"{}\" && context\n\t\t\t\t\t\t? context.context.source\n\t\t\t\t\t\t: currentNotificationSource?.source}\n\t\t\t\t</span>\n\t\t\t\t{muteFilters.length > 0 ? (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tfashion=\"primary\"\n\t\t\t\t\t\tclassName=\"accent-negative\"\n\t\t\t\t\t\ttext={allMuted ? \"Show All\" : \"Don't Show All\"}\n\t\t\t\t\t\tonClick={toggleMuteAll}\n\t\t\t\t\t\tfixedSize={110}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t<div className=\"notification-sources__types\">\n\t\t\t\t{typesMutedState && typesMutedState.length > 0 ? (\n\t\t\t\t\trenderTypes(muteFilters, typesMutedState, setTypesMutedState)\n\t\t\t\t) : (\n\t\t\t\t\t<div id=\"no-source-types\" className=\"row-section\">\n\t\t\t\t\t\tNo source types configured\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default NotificationsSourceTypes;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"notificationViewsUtils.js","sourceRoot":"","sources":["../../../../../../src/components/userPreferences/components/content/notificationViews/notificationViewsUtils.ts"],"names":[],"mappings":"AAKA,MAAM,oBAAoB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,WAA0B,EAAE,EAAE,CACzF,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC/B,sBAAoF,EACpF,gBAA+D,EAC9D,EAAE;IACH,MAAM,kBAAkB,GAAa,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACxF,MAAM,WAAW,GAAkB,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC;IAE1F,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,GAAQ,EAAE,eAAoB,EAAE,EAAE;;QAC7F,IAAI,GAAG,EAAE;YACR,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;SAChF;aAAM;YACN,MAAM,gBAAgB,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,UAAU,CAAC;YACrD,MAAM,0BAA0B,GAAG,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,cAAc,0CAAE,aAAa,CAAC;YAClF,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,IAAI,kBAAkB,EAAE;gBACvB,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;;oBAC/C,MAAM,KAAK,GAAY,eAAe,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAC7D,MAAM,CAAC;wBACN,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,oBAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;qBAC/E,CAAC,CACF,CAAC;oBACF,MAAM,MAAM,GAAyB;wBACpC,MAAM,EAAE,UAAU;wBAClB,IAAI,EAAE,CAAA,MAAA,MAAA,MAAA,MAAA,gBAAgB,CAAC,UAAU,CAAC,0CAAE,OAAO,0CAAE,UAAU,0CAAE,OAAO,0CAAE,OAAO,KAAI,IAAI;wBACjF,KAAK;qBACL,CAAC;oBACF,OAAO,MAAM,CAAC;gBACf,CAAC,CAAC,CAAC;gBACH,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBAChC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aACxB;SACD;IACF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { INotificationSources, IType } from \"../Notifications\";\nimport { services } from \"@finsemble/finsemble-core\";\n\ntype IMuteFilter = services.notification.types.IMuteFilter;\n\nconst isTypeMutedForSource = (source: string, type: string, muteFilters: IMuteFilter[]) =>\n\tmuteFilters.filter((mFilter) => mFilter.source === source && mFilter.type === type);\n\nexport const loadSources = async (\n\tsetNotificationSources: React.Dispatch<React.SetStateAction<INotificationSources[]>>,\n\tsetReloadSources: React.Dispatch<React.SetStateAction<boolean>>\n) => {\n\tconst notificationSoures: string[] = await FSBL.Clients.NotificationClient.getSources();\n\tconst muteFilters: IMuteFilter[] = await FSBL.Clients.NotificationClient.getMuteFilters();\n\n\tFSBL.Clients.ConfigClient.getValue({ field: \"finsemble\" }, (err: any, finsembleConfig: any) => {\n\t\tif (err) {\n\t\t\tconsole.error(\"Error geting components config to extract notifications config\");\n\t\t} else {\n\t\t\tconst componentsConfig = finsembleConfig?.components;\n\t\t\tconst notificationsServiceConfig = finsembleConfig?.servicesConfig?.notifications;\n\t\t\tconst configuredTypes = Object.keys(notificationsServiceConfig.types);\n\t\t\tlet sources = null;\n\n\t\t\tif (notificationSoures) {\n\t\t\t\tsources = notificationSoures.map((currSource) => {\n\t\t\t\t\tconst types: IType[] = configuredTypes.map((configuredType) =>\n\t\t\t\t\t\tObject({\n\t\t\t\t\t\t\tname: configuredType,\n\t\t\t\t\t\t\tmuted: isTypeMutedForSource(currSource, configuredType, muteFilters).length > 0,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t\tconst result: INotificationSources = {\n\t\t\t\t\t\tsource: currSource,\n\t\t\t\t\t\ticon: componentsConfig[currSource]?.foreign?.components?.Toolbar?.iconURL || null,\n\t\t\t\t\t\ttypes,\n\t\t\t\t\t};\n\t\t\t\t\treturn result;\n\t\t\t\t});\n\t\t\t\tsetNotificationSources(sources);\n\t\t\t\tsetReloadSources(false);\n\t\t\t}\n\t\t}\n\t});\n};\n"]}
1
+ {"version":3,"file":"notificationViewsUtils.js","sourceRoot":"","sources":["../../../../../../src/components/userPreferences/components/content/notificationViews/notificationViewsUtils.ts"],"names":[],"mappings":"AAKA,MAAM,oBAAoB,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,WAA0B,EAAE,EAAE,CACzF,WAAW,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC/B,sBAAoF,EACpF,gBAA+D,EAC9D,EAAE;IACH,MAAM,kBAAkB,GAAa,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACxF,MAAM,WAAW,GAAkB,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC;IAE1F,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,GAAQ,EAAE,eAAoB,EAAE,EAAE;;QAC7F,IAAI,GAAG,EAAE;YACR,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;SAChF;aAAM;YACN,MAAM,gBAAgB,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,UAAU,CAAC;YACrD,MAAM,0BAA0B,GAAG,MAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,cAAc,0CAAE,aAAa,CAAC;YAClF,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,IAAI,kBAAkB,EAAE;gBACvB,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;;oBAC/C,MAAM,KAAK,GAAY,eAAe,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAC7D,MAAM,CAAC;wBACN,IAAI,EAAE,cAAc;wBACpB,KAAK,EAAE,oBAAoB,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;qBAC/E,CAAC,CACF,CAAC;oBACF,MAAM,MAAM,GAAyB;wBACpC,MAAM,EAAE,UAAU;wBAClB,IAAI,EAAE,CAAA,MAAA,MAAA,MAAA,MAAA,gBAAgB,CAAC,UAAU,CAAC,0CAAE,OAAO,0CAAE,UAAU,0CAAE,OAAO,0CAAE,OAAO,KAAI,IAAI;wBACjF,KAAK;qBACL,CAAC;oBACF,OAAO,MAAM,CAAC;gBACf,CAAC,CAAC,CAAC;gBACH,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBAChC,gBAAgB,CAAC,KAAK,CAAC,CAAC;aACxB;SACD;IACF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { INotificationSources, IType } from \"../Notifications\";\nimport { services } from \"@finsemble/finsemble-api\";\n\ntype IMuteFilter = services.notification.types.IMuteFilter;\n\nconst isTypeMutedForSource = (source: string, type: string, muteFilters: IMuteFilter[]) =>\n\tmuteFilters.filter((mFilter) => mFilter.source === source && mFilter.type === type);\n\nexport const loadSources = async (\n\tsetNotificationSources: React.Dispatch<React.SetStateAction<INotificationSources[]>>,\n\tsetReloadSources: React.Dispatch<React.SetStateAction<boolean>>\n) => {\n\tconst notificationSoures: string[] = await FSBL.Clients.NotificationClient.getSources();\n\tconst muteFilters: IMuteFilter[] = await FSBL.Clients.NotificationClient.getMuteFilters();\n\n\tFSBL.Clients.ConfigClient.getValue({ field: \"finsemble\" }, (err: any, finsembleConfig: any) => {\n\t\tif (err) {\n\t\t\tconsole.error(\"Error geting components config to extract notifications config\");\n\t\t} else {\n\t\t\tconst componentsConfig = finsembleConfig?.components;\n\t\t\tconst notificationsServiceConfig = finsembleConfig?.servicesConfig?.notifications;\n\t\t\tconst configuredTypes = Object.keys(notificationsServiceConfig.types);\n\t\t\tlet sources = null;\n\n\t\t\tif (notificationSoures) {\n\t\t\t\tsources = notificationSoures.map((currSource) => {\n\t\t\t\t\tconst types: IType[] = configuredTypes.map((configuredType) =>\n\t\t\t\t\t\tObject({\n\t\t\t\t\t\t\tname: configuredType,\n\t\t\t\t\t\t\tmuted: isTypeMutedForSource(currSource, configuredType, muteFilters).length > 0,\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t\tconst result: INotificationSources = {\n\t\t\t\t\t\tsource: currSource,\n\t\t\t\t\t\ticon: componentsConfig[currSource]?.foreign?.components?.Toolbar?.iconURL || null,\n\t\t\t\t\t\ttypes,\n\t\t\t\t\t};\n\t\t\t\t\treturn result;\n\t\t\t\t});\n\t\t\t\tsetNotificationSources(sources);\n\t\t\t\tsetReloadSources(false);\n\t\t\t}\n\t\t}\n\t});\n};\n"]}
@@ -1,4 +1,4 @@
1
- import StoreModel from "@finsemble/finsemble-core/types/clients/StoreModel";
1
+ import StoreModel from "@finsemble/finsemble-api/types/clients/StoreModel";
2
2
  import { ScheduledRestartObjectType } from "../UserPreferenceTypes";
3
3
  declare let UserPreferencesStore: StoreModel;
4
4
  declare let WorkspaceManagementMenuStore: StoreModel;
@@ -1 +1 @@
1
- {"version":3,"file":"UserPreferencesStore.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/stores/UserPreferencesStore.tsx"],"names":[],"mappings":"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","sourcesContent":["import StoreModel from \"@finsemble/finsemble-core/types/clients/StoreModel\";\nimport { WORKSPACE } from \"@finsemble/finsemble-core/types/common/constants\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-core/types/common/workspace\";\nimport { StandardError } from \"@finsemble/finsemble-core/types/types\";\nimport { ScheduledRestartObjectType } from \"../UserPreferenceTypes\";\n\ntype ConstantsType = typeof WORKSPACE[\"API_CHANNELS\"];\ntype PreferencesType = {\n\t[key: string]: any;\n};\n\ntype UpdateResponseType = {\n\tdata: {\n\t\tactiveWorkspace: WorkspaceType;\n\t\treason: keyof ConstantsType;\n\t};\n};\n\nlet UserPreferencesStore: StoreModel;\nlet WorkspaceManagementMenuStore: StoreModel;\n\nlet updateConstants: ConstantsType;\n\nconst Actions = {\n\tinitialize: function () {\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaceActions((err: StandardError, constants: ConstantsType) => {\n\t\t\tupdateConstants = constants;\n\t\t});\n\n\t\tFSBL.Clients.ConfigClient.getPreferences((err: StandardError, data?: PreferencesType | null) => {\n\t\t\tUserPreferencesStore.setValue({ field: \"preferences\", value: data });\n\t\t});\n\n\t\t// Gets the workspace list and sets the value in the store.\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaces((err: StandardError, workspaces: WorkspaceType[]) => {\n\t\t\tUserPreferencesStore.setValue({\n\t\t\t\tfield: \"WorkspaceList\",\n\t\t\t\tvalue: workspaces,\n\t\t\t});\n\t\t});\n\n\t\t// Get the activeWorkspace and set the value.\n\t\tFSBL.Clients.WorkspaceClient.getActiveWorkspace((err: StandardError, activeWorkspace?: { data: WorkspaceType }) => {\n\t\t\tif (activeWorkspace) {\n\t\t\t\tUserPreferencesStore.setValue({\n\t\t\t\t\tfield: \"activeWorkspace\",\n\t\t\t\t\tvalue: activeWorkspace,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t/**\n\t\t * We listen here for any workspace updates, and pass them to the store.\n\t\t * **NOTE**: You may notice that the signature of this callback is different from the previous ones. In this case we receive a `response`, instead of `workspaces` or `activeWorkspace`. This is because this callback is for a `RouterClient` message. The functions above are callbacks to `WorkspaceClient` API calls.\n\t\t */\n\t\tFSBL.Clients.RouterClient.subscribe(\n\t\t\t\"Finsemble.WorkspaceService.update\",\n\t\t\t(err: StandardError, response: UpdateResponseType) => {\n\t\t\t\tif (response.data && response.data.activeWorkspace) {\n\t\t\t\t\tUserPreferencesStore.setValue({\n\t\t\t\t\t\tfield: \"activeWorkspace\",\n\t\t\t\t\t\tvalue: response.data.activeWorkspace,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (updateConstants) {\n\t\t\t\t\t\tswitch (response.data.reason) {\n\t\t\t\t\t\t\tcase updateConstants.GET_ACTIVE_WORKSPACE:\n\t\t\t\t\t\t\tcase updateConstants.NEW_WORKSPACE:\n\t\t\t\t\t\t\tcase updateConstants.IMPORT:\n\t\t\t\t\t\t\tcase updateConstants.SAVE:\n\t\t\t\t\t\t\tcase updateConstants.SAVE_AS:\n\t\t\t\t\t\t\tcase updateConstants.REMOVE:\n\t\t\t\t\t\t\tcase updateConstants.SWITCH_TO:\n\t\t\t\t\t\t\tcase updateConstants.SET_WORKSPACE_ORDER:\n\t\t\t\t\t\t\tcase updateConstants.ADD_WINDOW:\n\t\t\t\t\t\t\tcase updateConstants.REMOVE_WINDOW:\n\t\t\t\t\t\t\tcase updateConstants.RENAME:\n\t\t\t\t\t\t\t\tActions.getWorkspaces();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\tgetWorkspaces(cb = Function.prototype) {\n\t\t// Gets the workspace list and sets the value in the store.\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaces((err: StandardError, workspaces: WorkspaceType[]) => {\n\t\t\tUserPreferencesStore.setValue({\n\t\t\t\tfield: \"WorkspaceList\",\n\t\t\t\tvalue: workspaces,\n\t\t\t});\n\t\t\tcb();\n\t\t});\n\t},\n\t/**\n\t * By making the value of `finsemble.scheduledRestart` falsy, the application will remove any existing restart timers.\n\t */\n\tdisableScheduledRestart: () => {\n\t\tFSBL.Clients.ConfigClient.setPreference({\n\t\t\tfield: \"finsemble.scheduledRestart\",\n\t\t\tvalue: false,\n\t\t});\n\t},\n\t/** Finsemble listens for this piece of config. When it changes, it will schedule a daily restart at that time. */\n\tsetScheduledRestart: (val: ScheduledRestartObjectType) => {\n\t\tFSBL.Clients.ConfigClient.setPreference({\n\t\t\tfield: \"finsemble.scheduledRestart\",\n\t\t\tvalue: val,\n\t\t});\n\t},\n};\n\nasync function createLocalStore(done: () => void) {\n\t// While the order of these two functions is unimportant, they cannot be done in series as we don't want\n\t// to call the callback until both stores have been initiated. This keeps the initialization function\n\t// executing until both stores either have values, or fail to initialize.\n\tFSBL.Clients.DistributedStoreClient.createStore(\n\t\t{ store: \"Finsemble-UserPreferences-Local-Store\" },\n\t\t(preferencesErr: StandardError, preferencesStore: StoreModel | undefined) => {\n\t\t\tif (preferencesErr) {\n\t\t\t\tFSBL.Clients.Logger.system.error(\"Error fetching user preferences data: \", preferencesErr);\n\t\t\t}\n\t\t\tif (preferencesStore) {\n\t\t\t\tUserPreferencesStore = preferencesStore;\n\t\t\t}\n\t\t\tdone();\n\t\t}\n\t);\n}\n\n/**\n * Initializes the store for the User Preferences Menu.\n */\nfunction initialize(WorkspaceMngMenuStore: StoreModel, cb: (store: StoreModel) => void) {\n\tWorkspaceManagementMenuStore = WorkspaceMngMenuStore;\n\tcreateLocalStore(() => {\n\t\tActions.initialize();\n\t\tcb(UserPreferencesStore);\n\t});\n}\n\nexport { WorkspaceManagementMenuStore, initialize, UserPreferencesStore, Actions };\n"]}
1
+ {"version":3,"file":"UserPreferencesStore.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/stores/UserPreferencesStore.tsx"],"names":[],"mappings":"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","sourcesContent":["import StoreModel from \"@finsemble/finsemble-api/types/clients/StoreModel\";\nimport { WORKSPACE } from \"@finsemble/finsemble-api/types/common/constants\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-api/types/common/workspace\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport { ScheduledRestartObjectType } from \"../UserPreferenceTypes\";\n\ntype ConstantsType = typeof WORKSPACE[\"API_CHANNELS\"];\ntype PreferencesType = {\n\t[key: string]: any;\n};\n\ntype UpdateResponseType = {\n\tdata: {\n\t\tactiveWorkspace: WorkspaceType;\n\t\treason: keyof ConstantsType;\n\t};\n};\n\nlet UserPreferencesStore: StoreModel;\nlet WorkspaceManagementMenuStore: StoreModel;\n\nlet updateConstants: ConstantsType;\n\nconst Actions = {\n\tinitialize: function () {\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaceActions((err: StandardError, constants: ConstantsType) => {\n\t\t\tupdateConstants = constants;\n\t\t});\n\n\t\tFSBL.Clients.ConfigClient.getPreferences((err: StandardError, data?: PreferencesType | null) => {\n\t\t\tUserPreferencesStore.setValue({ field: \"preferences\", value: data });\n\t\t});\n\n\t\t// Gets the workspace list and sets the value in the store.\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaces((err: StandardError, workspaces: WorkspaceType[]) => {\n\t\t\tUserPreferencesStore.setValue({\n\t\t\t\tfield: \"WorkspaceList\",\n\t\t\t\tvalue: workspaces,\n\t\t\t});\n\t\t});\n\n\t\t// Get the activeWorkspace and set the value.\n\t\tFSBL.Clients.WorkspaceClient.getActiveWorkspace((err: StandardError, activeWorkspace?: { data: WorkspaceType }) => {\n\t\t\tif (activeWorkspace) {\n\t\t\t\tUserPreferencesStore.setValue({\n\t\t\t\t\tfield: \"activeWorkspace\",\n\t\t\t\t\tvalue: activeWorkspace,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t/**\n\t\t * We listen here for any workspace updates, and pass them to the store.\n\t\t * **NOTE**: You may notice that the signature of this callback is different from the previous ones. In this case we receive a `response`, instead of `workspaces` or `activeWorkspace`. This is because this callback is for a `RouterClient` message. The functions above are callbacks to `WorkspaceClient` API calls.\n\t\t */\n\t\tFSBL.Clients.RouterClient.subscribe(\n\t\t\t\"Finsemble.WorkspaceService.update\",\n\t\t\t(err: StandardError, response: UpdateResponseType) => {\n\t\t\t\tif (response.data && response.data.activeWorkspace) {\n\t\t\t\t\tUserPreferencesStore.setValue({\n\t\t\t\t\t\tfield: \"activeWorkspace\",\n\t\t\t\t\t\tvalue: response.data.activeWorkspace,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (updateConstants) {\n\t\t\t\t\t\tswitch (response.data.reason) {\n\t\t\t\t\t\t\tcase updateConstants.GET_ACTIVE_WORKSPACE:\n\t\t\t\t\t\t\tcase updateConstants.NEW_WORKSPACE:\n\t\t\t\t\t\t\tcase updateConstants.IMPORT:\n\t\t\t\t\t\t\tcase updateConstants.SAVE:\n\t\t\t\t\t\t\tcase updateConstants.SAVE_AS:\n\t\t\t\t\t\t\tcase updateConstants.REMOVE:\n\t\t\t\t\t\t\tcase updateConstants.SWITCH_TO:\n\t\t\t\t\t\t\tcase updateConstants.SET_WORKSPACE_ORDER:\n\t\t\t\t\t\t\tcase updateConstants.ADD_WINDOW:\n\t\t\t\t\t\t\tcase updateConstants.REMOVE_WINDOW:\n\t\t\t\t\t\t\tcase updateConstants.RENAME:\n\t\t\t\t\t\t\t\tActions.getWorkspaces();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\tgetWorkspaces(cb = Function.prototype) {\n\t\t// Gets the workspace list and sets the value in the store.\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaces((err: StandardError, workspaces: WorkspaceType[]) => {\n\t\t\tUserPreferencesStore.setValue({\n\t\t\t\tfield: \"WorkspaceList\",\n\t\t\t\tvalue: workspaces,\n\t\t\t});\n\t\t\tcb();\n\t\t});\n\t},\n\t/**\n\t * By making the value of `finsemble.scheduledRestart` falsy, the application will remove any existing restart timers.\n\t */\n\tdisableScheduledRestart: () => {\n\t\tFSBL.Clients.ConfigClient.setPreference({\n\t\t\tfield: \"finsemble.scheduledRestart\",\n\t\t\tvalue: false,\n\t\t});\n\t},\n\t/** Finsemble listens for this piece of config. When it changes, it will schedule a daily restart at that time. */\n\tsetScheduledRestart: (val: ScheduledRestartObjectType) => {\n\t\tFSBL.Clients.ConfigClient.setPreference({\n\t\t\tfield: \"finsemble.scheduledRestart\",\n\t\t\tvalue: val,\n\t\t});\n\t},\n};\n\nasync function createLocalStore(done: () => void) {\n\t// While the order of these two functions is unimportant, they cannot be done in series as we don't want\n\t// to call the callback until both stores have been initiated. This keeps the initialization function\n\t// executing until both stores either have values, or fail to initialize.\n\tFSBL.Clients.DistributedStoreClient.createStore(\n\t\t{ store: \"Finsemble-UserPreferences-Local-Store\" },\n\t\t(preferencesErr: StandardError, preferencesStore: StoreModel | undefined) => {\n\t\t\tif (preferencesErr) {\n\t\t\t\tFSBL.Clients.Logger.system.error(\"Error fetching user preferences data: \", preferencesErr);\n\t\t\t}\n\t\t\tif (preferencesStore) {\n\t\t\t\tUserPreferencesStore = preferencesStore;\n\t\t\t}\n\t\t\tdone();\n\t\t}\n\t);\n}\n\n/**\n * Initializes the store for the User Preferences Menu.\n */\nfunction initialize(WorkspaceMngMenuStore: StoreModel, cb: (store: StoreModel) => void) {\n\tWorkspaceManagementMenuStore = WorkspaceMngMenuStore;\n\tcreateLocalStore(() => {\n\t\tActions.initialize();\n\t\tcb(UserPreferencesStore);\n\t});\n}\n\nexport { WorkspaceManagementMenuStore, initialize, UserPreferencesStore, Actions };\n"]}
@@ -1,8 +1,8 @@
1
1
  import * as React from "react";
2
2
  import "../../assets/css/finsemble.css";
3
3
  import "../../assets/css/windowTitleBar.css";
4
- import { StandardError } from "@finsemble/finsemble-core/types/types";
5
- import StoreModel from "@finsemble/finsemble-core/types/clients/StoreModel";
4
+ import { StandardError } from "@finsemble/finsemble-api/types/types";
5
+ import StoreModel from "@finsemble/finsemble-api/types/clients/StoreModel";
6
6
  import { TabProperties } from "../../types/windowTitleBar";
7
7
  interface WindowTitleBarShellProps {
8
8
  }
@@ -47,6 +47,8 @@ export declare class WindowTitleBarShell extends React.Component<WindowTitleBarS
47
47
  onTilingStop(): void;
48
48
  onDropHandler(): void;
49
49
  onDoubleClick(): void;
50
+ makeDragHandle(fsblHeader: Element, dragHandleCssClass: string): HTMLElement;
51
+ dragHandleBoundsForShowTabs(startingBounds: DOMRect): DOMRect;
50
52
  resizeDragHandle(): void;
51
53
  showLinkerButton(err: StandardError, response: any): void;
52
54
  isTopRight(err: StandardError, response: any): void;
@@ -3,6 +3,7 @@ import { WindowTitleBarContext } from "./windowTitleBarContext";
3
3
  import { storeManager, Actions } from "./stores/windowTitleBarStore";
4
4
  import "../../assets/css/finsemble.css";
5
5
  import "../../assets/css/windowTitleBar.css";
6
+ import { clone } from "./../smartDesktopDesigner/Appearance.helpers";
6
7
  export class WindowTitleBarShell extends React.Component {
7
8
  constructor(props) {
8
9
  super(props);
@@ -192,79 +193,79 @@ export class WindowTitleBarShell extends React.Component {
192
193
  onDoubleClick() {
193
194
  Actions.clickMaximize();
194
195
  }
195
- resizeDragHandle() {
196
+ makeDragHandle(fsblHeader, dragHandleCssClass) {
197
+ let dragHandle = document.createElement("div");
198
+ dragHandle.className = dragHandleCssClass;
199
+ let isMousePressed = false;
200
+ const handleMouseDown = (event) => {
201
+ isMousePressed = true;
202
+ setTimeout(() => {
203
+ if (isMousePressed) {
204
+ FSBL.Clients.WindowClient.startMovingWindow(event);
205
+ }
206
+ }, 100);
207
+ };
208
+ const handleMouseUp = () => {
209
+ isMousePressed = false;
210
+ FSBL.Clients.WindowClient.stopMovingWindow();
211
+ };
212
+ dragHandle.onmousedown = handleMouseDown;
213
+ dragHandle.onmouseup = handleMouseUp;
214
+ dragHandle.ondblclick = () => {
215
+ this.onDoubleClick();
216
+ };
217
+ fsblHeader.insertBefore(dragHandle, fsblHeader.firstChild);
218
+ window.addEventListener("resize", () => {
219
+ this.resizeDragHandle();
220
+ });
221
+ return dragHandle;
222
+ }
223
+ dragHandleBoundsForShowTabs(startingBounds) {
196
224
  var _a;
225
+ if (this.state.tabs.length > 1) {
226
+ const headerRight = document.querySelector(".fsbl-header-right");
227
+ if (headerRight) {
228
+ const computedStyle = getComputedStyle(headerRight);
229
+ return Object.assign(Object.assign({}, clone(headerRight.getBoundingClientRect())), { width: parseInt(computedStyle.paddingLeft, 10) });
230
+ }
231
+ else {
232
+ return startingBounds;
233
+ }
234
+ }
235
+ else {
236
+ const fsblHeaderCenter = document.querySelector(".fsbl-header-center");
237
+ const bounds = (_a = fsblHeaderCenter === null || fsblHeaderCenter === void 0 ? void 0 : fsblHeaderCenter.getBoundingClientRect()) !== null && _a !== void 0 ? _a : startingBounds;
238
+ const tabRegionWrapperDiv = fsblHeaderCenter === null || fsblHeaderCenter === void 0 ? void 0 : fsblHeaderCenter.querySelector(".tab-region-wrapper div.fsbl-header-title");
239
+ if (tabRegionWrapperDiv) {
240
+ const theTabBounds = tabRegionWrapperDiv.getBoundingClientRect();
241
+ return Object.assign(Object.assign({}, bounds), { left: bounds.left + theTabBounds.width, width: bounds.width - theTabBounds.width });
242
+ }
243
+ else {
244
+ return bounds;
245
+ }
246
+ }
247
+ }
248
+ resizeDragHandle() {
249
+ var _a, _b;
197
250
  try {
198
251
  const fsblHeader = document.querySelector(".fsbl-header");
199
- if (!fsblHeader) {
252
+ if (!fsblHeader)
200
253
  return;
201
- }
202
254
  const dragHandleCssClass = this.state.useDOMBasedMovement
203
255
  ? "fsbl-drag-handle"
204
256
  : "fsbl-drag-handle-native-movement";
205
257
  const dragHandleToRemoveClass = this.state.useDOMBasedMovement
206
258
  ? "fsbl-drag-handle-native-movement"
207
259
  : "fsbl-drag-handle";
208
- let dragHandle = document.querySelector(`.${dragHandleCssClass}`);
209
- if (!dragHandle) {
210
- dragHandle = document.createElement("div");
211
- dragHandle.className = dragHandleCssClass;
212
- let isMousePressed = false;
213
- const handleMouseDown = (event) => {
214
- isMousePressed = true;
215
- setTimeout(() => {
216
- if (isMousePressed) {
217
- FSBL.Clients.WindowClient.startMovingWindow(event);
218
- }
219
- }, 100);
220
- };
221
- const handleMouseUp = () => {
222
- isMousePressed = false;
223
- FSBL.Clients.WindowClient.stopMovingWindow();
224
- };
225
- dragHandle.onmousedown = handleMouseDown;
226
- dragHandle.onmouseup = handleMouseUp;
227
- dragHandle.ondblclick = () => {
228
- this.onDoubleClick();
229
- };
230
- fsblHeader.insertBefore(dragHandle, fsblHeader.firstChild);
231
- var self = this;
232
- window.addEventListener("resize", () => {
233
- self.resizeDragHandle();
234
- });
235
- }
236
- let dragHandleToRemove = document.querySelector(`.${dragHandleToRemoveClass}`);
237
- if (dragHandleToRemove) {
238
- (_a = dragHandleToRemove.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(dragHandleToRemove);
239
- }
260
+ let dragHandle = (_a = document.querySelector(`.${dragHandleCssClass}`)) !== null && _a !== void 0 ? _a : this.makeDragHandle(fsblHeader, dragHandleCssClass);
261
+ const dragHandleToRemove = document.querySelector(`.${dragHandleToRemoveClass}`);
262
+ if (dragHandleToRemove)
263
+ (_b = dragHandleToRemove.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(dragHandleToRemove);
240
264
  let bounds = fsblHeader.getBoundingClientRect();
241
265
  dragHandle.style.height = `${bounds.height - 5}px`;
242
266
  dragHandle.style.marginTop = `${-bounds.height + 5}px`;
243
267
  if (this.state.showTabs) {
244
- if (this.state.tabs.length > 1) {
245
- let headerRight = document.querySelector(".fsbl-header-right");
246
- if (headerRight) {
247
- let computedStyle = getComputedStyle(headerRight);
248
- bounds = headerRight.getBoundingClientRect();
249
- bounds = {
250
- left: bounds.left,
251
- width: parseInt(computedStyle.paddingLeft, 10),
252
- };
253
- }
254
- }
255
- else {
256
- let fsblHeaderCenter = document.querySelector(".fsbl-header-center");
257
- if (fsblHeaderCenter)
258
- bounds = fsblHeaderCenter.getBoundingClientRect();
259
- const tabRegionWrapperDiv = fsblHeaderCenter === null || fsblHeaderCenter === void 0 ? void 0 : fsblHeaderCenter.querySelector(".tab-region-wrapper div.fsbl-header-title");
260
- if (tabRegionWrapperDiv) {
261
- const theTabBounds = tabRegionWrapperDiv.getBoundingClientRect();
262
- bounds = {
263
- left: bounds.left + theTabBounds.width,
264
- width: bounds.width - theTabBounds.width,
265
- };
266
- }
267
- }
268
+ bounds = this.dragHandleBoundsForShowTabs(bounds);
268
269
  }
269
270
  else {
270
271
  let fsblHeaderCenter = document.querySelector(".fsbl-header-center");
@@ -1 +1 @@
1
- {"version":3,"file":"WindowTitleBarShell.js","sourceRoot":"","sources":["../../../src/components/windowTitleBar/WindowTitleBarShell.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\nimport * as React from \"react\";\nimport { WindowTitleBarContext } from \"./windowTitleBarContext\";\nimport { storeManager, Actions } from \"./stores/windowTitleBarStore\";\nimport \"../../assets/css/finsemble.css\";\nimport \"../../assets/css/windowTitleBar.css\";\nimport { StandardError } from \"@finsemble/finsemble-core/types/types\";\nimport StoreModel from \"@finsemble/finsemble-core/types/clients/StoreModel\";\nimport { TabProperties } from \"../../types/windowTitleBar\";\n\ninterface WindowTitleBarShellProps {}\n\ninterface WindowTitleBarShellState {\n\ttabs: TabProperties[];\n\tactiveTab: TabProperties;\n\twindowTitle: string;\n\tinitialized: boolean;\n\talwaysOnTop: boolean;\n\tshowTabs: boolean;\n\tminButton: boolean;\n\tmaxButton: boolean;\n\tcloseButton: boolean;\n\tshowShareButton: boolean;\n\tshowLinkerButton: boolean;\n\tisTopRight: boolean;\n\tdockingEnabled: boolean;\n\talwaysOnTopButton: boolean;\n\tallowDragOnCenterRegion: boolean;\n\tdockingIcon: string;\n\thackScrollbar: boolean;\n\tshowDockingTooltip: boolean;\n\tshowTabRegion: boolean;\n\ttabBarBoundingBox: any;\n\tuseDOMBasedMovement: boolean;\n\tdragHandleName: string;\n}\n\nexport class WindowTitleBarShell extends React.Component<WindowTitleBarShellProps, WindowTitleBarShellState> {\n\tstore?: StoreModel;\n\n\tconstructor(props: WindowTitleBarShellProps) {\n\t\tsuper(props);\n\t\tthis.store = undefined;\n\n\t\tthis.bindCorrectContext();\n\t\tthis.state = {\n\t\t\tactiveTab: FSBL.Clients.WindowClient.getWindowIdentifier() as TabProperties,\n\t\t\tallowDragOnCenterRegion: true,\n\t\t\talwaysOnTop: false,\n\t\t\talwaysOnTopButton: false,\n\t\t\tcloseButton: false,\n\t\t\tdockingEnabled: false,\n\t\t\tdockingIcon: \"\",\n\t\t\thackScrollbar: false,\n\t\t\tinitialized: false,\n\t\t\tisTopRight: false,\n\t\t\tmaxButton: false,\n\t\t\tminButton: false,\n\t\t\tshowDockingTooltip: false,\n\t\t\tshowLinkerButton: false,\n\t\t\tshowShareButton: false,\n\t\t\tshowTabs: false,\n\t\t\tshowTabRegion: false,\n\t\t\ttabs: [],\n\t\t\ttabBarBoundingBox: {},\n\t\t\twindowTitle: \"\",\n\t\t\tuseDOMBasedMovement: true,\n\t\t\tdragHandleName: \"fsbl-drag-handle\",\n\t\t};\n\n\t\tfinsembleWindow.isAlwaysOnTop({}, (err, alwaysOnTop: boolean) => {\n\t\t\tthis.setState({ ...this.state, alwaysOnTop });\n\t\t});\n\n\t\tfinsembleWindow.addEventListener(\"alwaysOnTop\", this.alwaysOnTopListener);\n\t}\n\n\talwaysOnTopListener({ data: { alwaysOnTop } }: any) {\n\t\tthis.setState({ ...this.state, alwaysOnTop });\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 WindowTitleBar\n\t */\n\tbindCorrectContext() {\n\t\tthis.onTitleChange = this.onTitleChange.bind(this);\n\t\tthis.onShowDockingToolTip = this.onShowDockingToolTip.bind(this);\n\t\tthis.onToggleDockingIcon = this.onToggleDockingIcon.bind(this);\n\t\tthis.onDockingEnabledChanged = this.onDockingEnabledChanged.bind(this);\n\t\tthis.onAlwaysOnTopChanged = this.onAlwaysOnTopChanged.bind(this);\n\t\tthis.showLinkerButton = this.showLinkerButton.bind(this);\n\t\tthis.isTopRight = this.isTopRight.bind(this);\n\t\tthis.allowDragOnCenterRegion = this.allowDragOnCenterRegion.bind(this);\n\t\tthis.disallowDragOnCenterRegion = this.disallowDragOnCenterRegion.bind(this);\n\t\tthis.setDOMBasedMovement = this.setDOMBasedMovement.bind(this);\n\t\tthis.onShareEmitterChanged = this.onShareEmitterChanged.bind(this);\n\t\tthis.onTabsChanged = this.onTabsChanged.bind(this);\n\t\tthis.onShowTabsChanged = this.onShowTabsChanged.bind(this);\n\t\tthis.onTilingStop = this.onTilingStop.bind(this);\n\t\tthis.onTilingStart = this.onTilingStart.bind(this);\n\t\tthis.resizeDragHandle = this.resizeDragHandle.bind(this);\n\t\tthis.onDoubleClick = this.onDoubleClick.bind(this);\n\t\tthis.alwaysOnTopListener = this.alwaysOnTopListener.bind(this);\n\t\tthis.onInitialized = this.onInitialized.bind(this);\n\t}\n\n\tonInitialized(store: StoreModel) {\n\t\tthis.store = store;\n\t\tthis.store.addListeners(\n\t\t\t[\n\t\t\t\t{ field: \"Main.windowTitle\", listener: this.onTitleChange },\n\t\t\t\t{ field: \"Main.showDockingTooltip\", listener: this.onShowDockingToolTip },\n\t\t\t\t{ field: \"Main.dockingIcon\", listener: this.onToggleDockingIcon },\n\t\t\t\t{ field: \"Main.dockingEnabled\", listener: this.onDockingEnabledChanged },\n\t\t\t\t{ field: \"AlwaysOnTop.show\", listener: this.onAlwaysOnTopChanged },\n\t\t\t\t{ field: \"Linker.showLinkerButton\", listener: this.showLinkerButton },\n\t\t\t\t{ field: \"Sharer.emitterEnabled\", listener: this.onShareEmitterChanged },\n\t\t\t\t{ field: \"isTopRight\", listener: this.isTopRight },\n\t\t\t\t{ field: \"tabs\", listener: this.onTabsChanged },\n\t\t\t\t{ field: \"showTabs\", listener: this.onShowTabsChanged },\n\t\t\t\t{ field: \"hackScrollbar\", listener: this.onShowTabsChanged },\n\t\t\t\t{ field: \"Main.useDOMBasedMovement\", listener: this.setDOMBasedMovement },\n\t\t\t],\n\t\t\t() => {}\n\t\t);\n\n\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.startTilingOrTabbing\", this.disallowDragOnCenterRegion);\n\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.stopTilingOrTabbing\", this.allowDragOnCenterRegion);\n\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.cancelTilingOrTabbing\", this.allowDragOnCenterRegion);\n\n\t\tthis.onStoreChange();\n\t\tthis.setState({\n\t\t\tinitialized: true,\n\t\t});\n\t}\n\n\tonStoreChange() {\n\t\tlet activeIdentifier = finsembleWindow.identifier as TabProperties;\n\t\tactiveIdentifier.title = this.store?.getValue({\n\t\t\tfield: \"Main.windowTitle\",\n\t\t});\n\n\t\tthis.setState({\n\t\t\twindowTitle: this.store?.getValue({ field: \"Main.windowTitle\" }),\n\t\t\tminButton: !this.store?.getValue({ field: \"Minimize.hide\" }),\n\t\t\tmaxButton: !this.store?.getValue({ field: \"Maximize.hide\" }),\n\t\t\tcloseButton: !this.store?.getValue({ field: \"Close.hide\" }),\n\t\t\tshowLinkerButton: this.store?.getValue({\n\t\t\t\tfield: \"Linker.showLinkerButton\",\n\t\t\t}),\n\t\t\tshowShareButton: this.store?.getValue({\n\t\t\t\tfield: \"Sharer.emitterEnabled\",\n\t\t\t}),\n\t\t\tisTopRight: this.store?.getValue({ field: \"isTopRight\" }),\n\t\t\talwaysOnTopButton: this.store?.getValue({\n\t\t\t\tfield: \"AlwaysOnTop.show\",\n\t\t\t}),\n\t\t\tshowTabs: this.store?.getValue({ field: \"showTabs\" }),\n\t\t\thackScrollbar: this.store?.getValue({ field: \"hackScrollbar\" }),\n\t\t\ttabs: [activeIdentifier], // array of tabs for this window\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\t// Goal: If a user gets focus into the title bar (if they Alt+Tab or Cmd+Tab into the window),\n\t\t// we want to let get into the rest of the component using the keyboard alone. The UX for\n\t\t// this task will be to seemingly TAB from the title bar into the window, if possible.\n\t\t// Code: If the user presses the \"Tab\" key, move their focus to the browser view\n\t\twindow.addEventListener(\"keydown\", (e) => {\n\t\t\tif (e.key === \"Tab\") {\n\t\t\t\t// This magic moves focus to a browserView, if one exists\n\t\t\t\tfinsembleWindow.focus();\n\t\t\t}\n\t\t});\n\t\tlet header = document.getElementsByClassName(\"fsbl-header\")[0];\n\t\tdocument.body.style.marginTop = window.getComputedStyle(header, null).getPropertyValue(\"height\");\n\t\tthis.resizeDragHandle();\n\t\tthis.hackScrollbar();\n\t\tstoreManager.addInitializedListener(this.onInitialized);\n\t\tstoreManager.initialize();\n\t}\n\n\tcomponentDidUpdate() {\n\t\tthis.resizeDragHandle();\n\t}\n\n\tcomponentWillUnmount() {\n\t\tstoreManager.removeInitializedListener(this.onInitialized);\n\t\tif (this.state.initialized) {\n\t\t\tthis.store?.removeListeners(\n\t\t\t\t[\n\t\t\t\t\t{ field: \"Main.windowTitle\", listener: this.onTitleChange },\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"Main.showDockingTooltip\",\n\t\t\t\t\t\tlistener: this.onShowDockingToolTip,\n\t\t\t\t\t},\n\t\t\t\t\t{ field: \"Main.dockingIcon\", listener: this.onToggleDockingIcon },\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"Main.dockingEnabled\",\n\t\t\t\t\t\tlistener: this.onDockingEnabledChanged,\n\t\t\t\t\t},\n\t\t\t\t\t{ field: \"AlwaysOnTop.show\", listener: this.onAlwaysOnTopChanged },\n\t\t\t\t\t{ field: \"Linker.showLinkerButton\", listener: this.showLinkerButton },\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"Sharer.emitterEnabled\",\n\t\t\t\t\t\tlistener: this.onShareEmitterChanged,\n\t\t\t\t\t},\n\t\t\t\t\t{ field: \"isTopRight\", listener: this.isTopRight },\n\t\t\t\t\t{ field: \"tabs\", listener: this.onTabsChanged },\n\t\t\t\t\t{ field: \"showTabs\", listener: this.onShowTabsChanged },\n\t\t\t\t],\n\t\t\t\t() => {},\n\t\t\t\t() => {}\n\t\t\t);\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"DockingService.startTilingOrTabbing\", this.disallowDragOnCenterRegion);\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"DockingService.stopTilingOrTabbing\", this.allowDragOnCenterRegion);\n\t\t}\n\t}\n\n\tsetDOMBasedMovement(err: StandardError, response: any) {\n\t\tif (response && response.hasOwnProperty(\"value\")) {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tuseDOMBasedMovement: response.value,\n\t\t\t\t\tdragHandleName: response.value ? \"fsbl-drag-handle\" : \"fsbl-drag-handle-native-movement\",\n\t\t\t\t},\n\t\t\t\tthis.resizeDragHandle\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * When we are not tiling/tabbing, we want to allow the user to drag the window around via any available space in the tab-region. This function allows that.\n\t */\n\tallowDragOnCenterRegion() {\n\t\tthis.setState({\n\t\t\tallowDragOnCenterRegion: true,\n\t\t});\n\t}\n\n\t/**\n\t * When we are tiling/tabbing, we do not want to allow any window to be dragged around and moved.\n\t */\n\tdisallowDragOnCenterRegion() {\n\t\tthis.setState({\n\t\t\tallowDragOnCenterRegion: false,\n\t\t});\n\t}\n\n\t/**\n\t * When tiling start, we want to find the dragHandler and hide it\n\t */\n\tonTilingStart() {\n\t\tlet dragHandle = document.querySelector(`.${this.state.dragHandleName}`);\n\t\tif (dragHandle) {\n\t\t\tdragHandle.classList.add(\"hidden\");\n\t\t}\n\t}\n\n\t/**\n\t * When tiling stops, we want to find the dragHandler and re-show it\n\t */\n\tonTilingStop() {\n\t\tlet dragHandle = document.querySelector(`.${this.state.dragHandleName}.hidden`);\n\t\tif (dragHandle) {\n\t\t\tdragHandle.classList.remove(\"hidden\");\n\t\t}\n\t}\n\n\t/**\n\t * Called whenever a tab is dropped on a non tab area.\n\t * It won't be called when dropped on a tab that handles handle the event.\n\t */\n\tonDropHandler() {\n\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.cancelTilingOrTabbing\", {});\n\t}\n\n\t/**\n\t * Called when user double clicks on drag handle\n\t */\n\tonDoubleClick() {\n\t\t// Actions.clickMaximize checks the window state\n\t\t// and toggles between maximize and minimize.\n\t\tActions.clickMaximize();\n\t}\n\n\t/**\n\t * The dragger is an absolutely positioned element that is superimposed on the actual area that we'd like to drag.\n\t * This is necessary due to a bug in Chromium. Effectively, we need the dragger to change its left position and width\n\t * to match the intended drag area. These dimensions can change whenever the header is re-rendered (for instance when\n\t * changing mode from tabbing to non-tabbing). Dimensions can also change when the window itself is resized (due to natural\n\t * css).\n\t *\n\t * Can remove all of the cq-drag and cq-no-drag because Chromium bug is fixed\n\t * Remove fsbl-drag-region, it is no longer needed\n\t * Hide the dragHandle during drop operations, so that it doesn't interfere\n\t */\n\tresizeDragHandle() {\n\t\ttry {\n\t\t\tconst fsblHeader = document.querySelector(\".fsbl-header\");\n\t\t\tif (!fsblHeader) {\n\t\t\t\t// If there isn't an FSBLHeader then there doesn't need to be a drag handle.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst dragHandleCssClass = this.state.useDOMBasedMovement\n\t\t\t\t? \"fsbl-drag-handle\"\n\t\t\t\t: \"fsbl-drag-handle-native-movement\";\n\n\t\t\tconst dragHandleToRemoveClass = this.state.useDOMBasedMovement\n\t\t\t\t? \"fsbl-drag-handle-native-movement\"\n\t\t\t\t: \"fsbl-drag-handle\";\n\n\t\t\t// Create the dragger if it doesn't already exist\n\t\t\tlet dragHandle = document.querySelector(`.${dragHandleCssClass}`) as HTMLElement;\n\t\t\tif (!dragHandle) {\n\t\t\t\tdragHandle = document.createElement(\"div\");\n\t\t\t\tdragHandle.className = dragHandleCssClass;\n\n\t\t\t\t// if do double click it will invoke MouseDown and MouseUp events which could break the window bounds. So wait a 100ms for moving or resizing the window.\n\t\t\t\tlet isMousePressed = false;\n\t\t\t\tconst handleMouseDown = (event: MouseEvent) => {\n\t\t\t\t\tisMousePressed = true;\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tif (isMousePressed) {\n\t\t\t\t\t\t\tFSBL.Clients.WindowClient.startMovingWindow(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 100);\n\t\t\t\t};\n\t\t\t\tconst handleMouseUp = () => {\n\t\t\t\t\tisMousePressed = false;\n\t\t\t\t\tFSBL.Clients.WindowClient.stopMovingWindow();\n\t\t\t\t};\n\n\t\t\t\tdragHandle.onmousedown = handleMouseDown;\n\t\t\t\tdragHandle.onmouseup = handleMouseUp;\n\t\t\t\tdragHandle.ondblclick = () => {\n\t\t\t\t\tthis.onDoubleClick();\n\t\t\t\t};\n\t\t\t\tfsblHeader.insertBefore(dragHandle, fsblHeader.firstChild);\n\t\t\t\tvar self = this;\n\t\t\t\twindow.addEventListener(\"resize\", () => {\n\t\t\t\t\tself.resizeDragHandle();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// When the titlebar starts up, useDOMBasedMovement will have a default value that is not the same as the config value\n\t\t\t// When the value from the config propagates down to the UI, we need to make sure the old drag handle is removed in place of the new\n\t\t\tlet dragHandleToRemove = document.querySelector(`.${dragHandleToRemoveClass}`) as HTMLElement;\n\t\t\tif (dragHandleToRemove) {\n\t\t\t\tdragHandleToRemove.parentNode?.removeChild(dragHandleToRemove);\n\t\t\t}\n\n\t\t\t// Set the height of the dragHandle to match the height of the window title bar\n\t\t\t// Do this every time through the render loop just in case a customer builds a\n\t\t\t// header bar with dynamic height!\n\t\t\tlet bounds: any = fsblHeader.getBoundingClientRect();\n\n\t\t\tdragHandle.style.height = `${bounds.height - 5}px`; // Subtract 5 pixels from height in order to make room for resize window cursor at top edge of window\n\t\t\tdragHandle.style.marginTop = `${-bounds.height + 5}px`; // Negative margin pulls the drag handle up over the fixed header\n\n\t\t\t// Start logic for determining where to place our dragHandle\n\t\t\tif (this.state.showTabs) {\n\t\t\t\t// If there is more than one tab, then the drag area is the padding-left of fsbl-header-right\n\t\t\t\t// See .fsbl-tabs-multiple in the css\n\t\t\t\tif (this.state.tabs.length > 1) {\n\t\t\t\t\tlet headerRight = document.querySelector(\".fsbl-header-right\");\n\t\t\t\t\tif (headerRight) {\n\t\t\t\t\t\tlet computedStyle = getComputedStyle(headerRight);\n\t\t\t\t\t\tbounds = headerRight.getBoundingClientRect();\n\t\t\t\t\t\t// override the bounds.width with the paddingLeft amount\n\t\t\t\t\t\tbounds = {\n\t\t\t\t\t\t\tleft: bounds.left,\n\t\t\t\t\t\t\twidth: parseInt(computedStyle.paddingLeft, 10),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If tabs are not enabled, then the remained of fsbl-header-center beyond the tabs\n\t\t\t\t\t// is the draggable area. This assumes left aligned tabs.\n\t\t\t\t\tlet fsblHeaderCenter = document.querySelector(\".fsbl-header-center\");\n\t\t\t\t\tif (fsblHeaderCenter) bounds = fsblHeaderCenter.getBoundingClientRect();\n\t\t\t\t\tconst tabRegionWrapperDiv = fsblHeaderCenter?.querySelector(\".tab-region-wrapper div.fsbl-header-title\");\n\t\t\t\t\tif (tabRegionWrapperDiv) {\n\t\t\t\t\t\tconst theTabBounds = tabRegionWrapperDiv.getBoundingClientRect();\n\t\t\t\t\t\t// Calculate the right portion\n\t\t\t\t\t\tbounds = {\n\t\t\t\t\t\t\tleft: bounds.left + theTabBounds.width,\n\t\t\t\t\t\t\twidth: bounds.width - theTabBounds.width,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If tabs are not enabled, then the entire center is the drag area\n\t\t\t\tlet fsblHeaderCenter = document.querySelector(\".fsbl-header-center\");\n\t\t\t\tif (fsblHeaderCenter) bounds = fsblHeaderCenter.getBoundingClientRect();\n\t\t\t}\n\n\t\t\tif (bounds) {\n\t\t\t\tdragHandle.style.left = `${bounds.left}px`;\n\t\t\t\tdragHandle.style.width = `${bounds.width}px`;\n\t\t\t}\n\n\t\t\t// Add an event listener to hide the drag-handler when tiling is started\n\t\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.startTilingOrTabbing\", this.onTilingStart);\n\n\t\t\t// Add an event listener to show the drag-handler when tiling is stopped or cancelled\n\t\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.stopTilingOrTabbing\", this.onTilingStop);\n\t\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.cancelTilingOrTabbing\", this.onTilingStop);\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * Whether the component's config allows for the linker.\n\t * @param {} err\n\t * @param {*} response\n\t */\n\tshowLinkerButton(err: StandardError, response: any) {\n\t\tthis.setState({ showLinkerButton: response.value });\n\t}\n\n\t/**\n\t * Whether the window is the top-right-most window in a group of windows. If so, it renders a minimize icon for the whole group.\n\t * @param {} err\n\t * @param {*} response\n\t */\n\tisTopRight(err: StandardError, response: any) {\n\t\tthis.setState({ isTopRight: response.value });\n\t}\n\n\t/**\n\t * @param {*} err\n\t * @param {*} response\n\t */\n\tonTitleChange(err: StandardError, response: any) {\n\t\tlet { tabs } = this.state;\n\t\tlet myIdentifier = FSBL.Clients.WindowClient.getWindowIdentifier();\n\n\t\ttabs = tabs.map((el) => {\n\t\t\tif (!el.windowName && el.name) el.windowName = el.name;\n\t\t\tif (!el.name && el.windowName) el.name = el.windowName;\n\t\t\treturn el;\n\t\t});\n\n\t\tconst myIndex = tabs.findIndex((el: TabProperties) => el.name === myIdentifier.windowName);\n\t\tif (myIndex === -1) return;\n\n\t\tlet myTab = tabs[myIndex] || {};\n\t\tmyTab.title = response.value;\n\t\ttabs.splice(myIndex, 1, myTab);\n\n\t\tthis.setState({\n\t\t\twindowTitle: response.value,\n\t\t\ttabs: tabs,\n\t\t});\n\t}\n\n\t/**\n\t * The next few methods are store change handlers that sync local state with the store's state.\n\t */\n\tonShowDockingToolTip(err: StandardError, response: any) {\n\t\tthis.setState({ showDockingTooltip: response.value });\n\t}\n\n\tonToggleDockingIcon(err: StandardError, response: any) {\n\t\tthis.setState({ dockingIcon: response.value });\n\t}\n\n\tonDockingEnabledChanged(err: StandardError, response: any) {\n\t\tthis.setState({ dockingEnabled: response.value });\n\t}\n\n\tonAlwaysOnTopChanged(err: StandardError, response: any) {\n\t\tthis.setState({ alwaysOnTopButton: response.value });\n\t}\n\n\tonStoreChanged(newState: WindowTitleBarShellState) {\n\t\tthis.setState(newState);\n\t}\n\n\tonShareEmitterChanged(err: StandardError, response: any) {\n\t\tthis.setState({ showShareButton: response.value });\n\t}\n\n\tonTabsChanged(err: StandardError, response: any) {\n\t\tthis.setState({\n\t\t\ttabs: response.value,\n\t\t});\n\t}\n\n\tonShowTabsChanged(err: StandardError, response: any) {\n\t\tthis.setState({\n\t\t\tshowTabs: response.value,\n\t\t});\n\t}\n\n\t// Hack the window's scrollbar so that it displays underneath the header. html.overflow: hidden body.overflow:auto\n\t// This is turned on by default. Set \"Window Manager.hackScrollbar: false\" to turn it off\n\thackScrollbar() {\n\t\tif (this.state.hackScrollbar) {\n\t\t\tconst htmlElement = document.querySelector(\"html\");\n\t\t\tif (htmlElement) htmlElement.style.overflowY = \"hidden\";\n\t\t\tconst bodyElement = document.querySelector(\"body\");\n\t\t\tif (bodyElement) bodyElement.style.overflowY = \"auto\";\n\t\t}\n\t}\n\n\trender() {\n\t\tlet showDockingIcon = !this.state.dockingEnabled ? false : this.state.dockingIcon;\n\t\tlet isGrouped = this.state.dockingIcon == \"ejector\";\n\t\tlet showMinimizeIcon = (isGrouped && this.state.isTopRight) || !isGrouped; // If not in a group or if topright in a group\n\t\tlet tabRegionClasses = \"fsbl-tab-area\";\n\t\tlet headerClasses = \"fsbl-header\";\n\n\t\t// If we're showing tabs, we throw these classes on to modify styles.\n\t\tif (this.state.showTabs) {\n\t\t\theaderClasses = `${headerClasses} fsbl-tabs-enabled`;\n\t\t}\n\t\tif (this.state.tabs.length > 1) {\n\t\t\theaderClasses = `${headerClasses} fsbl-tabs-multiple`;\n\t\t}\n\t\tconst context = {\n\t\t\tshowLinkerButton: this.state.showLinkerButton,\n\t\t\tshowShareButton: this.state.showShareButton,\n\t\t\tshowTabRegion: this.state.showTabs,\n\t\t\tshowMinimizeButton: this.state.minButton && showMinimizeIcon,\n\t\t\tshowMaximizeButton: this.state.maxButton,\n\t\t\tonTabDropped: this.allowDragOnCenterRegion,\n\t\t\tshowDockingButton: showDockingIcon,\n\t\t\tshowCloseButton: this.state.closeButton,\n\t\t\tclassName: tabRegionClasses,\n\t\t\tthisWindowTitle: this.state.windowTitle,\n\t\t\tboundingBox: this.state.tabBarBoundingBox,\n\t\t\tlistenForDragOver: !this.state.allowDragOnCenterRegion,\n\t\t\ttabs: this.state.tabs,\n\t\t\tonTitleUpdated: this.resizeDragHandle,\n\t\t\tshowAlwaysOnTopButton: this.state.alwaysOnTopButton && showMinimizeIcon,\n\t\t\tshowTabs: this.state.showTabs,\n\t\t\talwaysOnTop: this.state.alwaysOnTop,\n\t\t\tuseDOMBasedMovement: this.state.useDOMBasedMovement,\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={headerClasses} onDrop={this.onDropHandler.bind(this)}>\n\t\t\t\t{this.state.initialized && (\n\t\t\t\t\t<WindowTitleBarContext.Provider value={context}>{this.props.children}</WindowTitleBarContext.Provider>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"WindowTitleBarShell.js","sourceRoot":"","sources":["../../../src/components/windowTitleBar/WindowTitleBarShell.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\nimport * as React from \"react\";\nimport { WindowTitleBarContext } from \"./windowTitleBarContext\";\nimport { storeManager, Actions } from \"./stores/windowTitleBarStore\";\nimport \"../../assets/css/finsemble.css\";\nimport \"../../assets/css/windowTitleBar.css\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport StoreModel from \"@finsemble/finsemble-api/types/clients/StoreModel\";\nimport { TabProperties } from \"../../types/windowTitleBar\";\nimport { clone } from \"./../smartDesktopDesigner/Appearance.helpers\";\n\ninterface WindowTitleBarShellProps {}\n\ninterface WindowTitleBarShellState {\n\ttabs: TabProperties[];\n\tactiveTab: TabProperties;\n\twindowTitle: string;\n\tinitialized: boolean;\n\talwaysOnTop: boolean;\n\tshowTabs: boolean;\n\tminButton: boolean;\n\tmaxButton: boolean;\n\tcloseButton: boolean;\n\tshowShareButton: boolean;\n\tshowLinkerButton: boolean;\n\tisTopRight: boolean;\n\tdockingEnabled: boolean;\n\talwaysOnTopButton: boolean;\n\tallowDragOnCenterRegion: boolean;\n\tdockingIcon: string;\n\thackScrollbar: boolean;\n\tshowDockingTooltip: boolean;\n\tshowTabRegion: boolean;\n\ttabBarBoundingBox: any;\n\tuseDOMBasedMovement: boolean;\n\tdragHandleName: string;\n}\n\nexport class WindowTitleBarShell extends React.Component<WindowTitleBarShellProps, WindowTitleBarShellState> {\n\tstore?: StoreModel;\n\n\tconstructor(props: WindowTitleBarShellProps) {\n\t\tsuper(props);\n\t\tthis.store = undefined;\n\n\t\tthis.bindCorrectContext();\n\t\tthis.state = {\n\t\t\tactiveTab: FSBL.Clients.WindowClient.getWindowIdentifier() as TabProperties,\n\t\t\tallowDragOnCenterRegion: true,\n\t\t\talwaysOnTop: false,\n\t\t\talwaysOnTopButton: false,\n\t\t\tcloseButton: false,\n\t\t\tdockingEnabled: false,\n\t\t\tdockingIcon: \"\",\n\t\t\thackScrollbar: false,\n\t\t\tinitialized: false,\n\t\t\tisTopRight: false,\n\t\t\tmaxButton: false,\n\t\t\tminButton: false,\n\t\t\tshowDockingTooltip: false,\n\t\t\tshowLinkerButton: false,\n\t\t\tshowShareButton: false,\n\t\t\tshowTabs: false,\n\t\t\tshowTabRegion: false,\n\t\t\ttabs: [],\n\t\t\ttabBarBoundingBox: {},\n\t\t\twindowTitle: \"\",\n\t\t\tuseDOMBasedMovement: true,\n\t\t\tdragHandleName: \"fsbl-drag-handle\",\n\t\t};\n\n\t\tfinsembleWindow.isAlwaysOnTop({}, (err, alwaysOnTop: boolean) => {\n\t\t\tthis.setState({ ...this.state, alwaysOnTop });\n\t\t});\n\n\t\tfinsembleWindow.addEventListener(\"alwaysOnTop\", this.alwaysOnTopListener);\n\t}\n\n\talwaysOnTopListener({ data: { alwaysOnTop } }: any) {\n\t\tthis.setState({ ...this.state, alwaysOnTop });\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 WindowTitleBar\n\t */\n\tbindCorrectContext() {\n\t\tthis.onTitleChange = this.onTitleChange.bind(this);\n\t\tthis.onShowDockingToolTip = this.onShowDockingToolTip.bind(this);\n\t\tthis.onToggleDockingIcon = this.onToggleDockingIcon.bind(this);\n\t\tthis.onDockingEnabledChanged = this.onDockingEnabledChanged.bind(this);\n\t\tthis.onAlwaysOnTopChanged = this.onAlwaysOnTopChanged.bind(this);\n\t\tthis.showLinkerButton = this.showLinkerButton.bind(this);\n\t\tthis.isTopRight = this.isTopRight.bind(this);\n\t\tthis.allowDragOnCenterRegion = this.allowDragOnCenterRegion.bind(this);\n\t\tthis.disallowDragOnCenterRegion = this.disallowDragOnCenterRegion.bind(this);\n\t\tthis.setDOMBasedMovement = this.setDOMBasedMovement.bind(this);\n\t\tthis.onShareEmitterChanged = this.onShareEmitterChanged.bind(this);\n\t\tthis.onTabsChanged = this.onTabsChanged.bind(this);\n\t\tthis.onShowTabsChanged = this.onShowTabsChanged.bind(this);\n\t\tthis.onTilingStop = this.onTilingStop.bind(this);\n\t\tthis.onTilingStart = this.onTilingStart.bind(this);\n\t\tthis.resizeDragHandle = this.resizeDragHandle.bind(this);\n\t\tthis.onDoubleClick = this.onDoubleClick.bind(this);\n\t\tthis.alwaysOnTopListener = this.alwaysOnTopListener.bind(this);\n\t\tthis.onInitialized = this.onInitialized.bind(this);\n\t}\n\n\tonInitialized(store: StoreModel) {\n\t\tthis.store = store;\n\t\tthis.store.addListeners(\n\t\t\t[\n\t\t\t\t{ field: \"Main.windowTitle\", listener: this.onTitleChange },\n\t\t\t\t{ field: \"Main.showDockingTooltip\", listener: this.onShowDockingToolTip },\n\t\t\t\t{ field: \"Main.dockingIcon\", listener: this.onToggleDockingIcon },\n\t\t\t\t{ field: \"Main.dockingEnabled\", listener: this.onDockingEnabledChanged },\n\t\t\t\t{ field: \"AlwaysOnTop.show\", listener: this.onAlwaysOnTopChanged },\n\t\t\t\t{ field: \"Linker.showLinkerButton\", listener: this.showLinkerButton },\n\t\t\t\t{ field: \"Sharer.emitterEnabled\", listener: this.onShareEmitterChanged },\n\t\t\t\t{ field: \"isTopRight\", listener: this.isTopRight },\n\t\t\t\t{ field: \"tabs\", listener: this.onTabsChanged },\n\t\t\t\t{ field: \"showTabs\", listener: this.onShowTabsChanged },\n\t\t\t\t{ field: \"hackScrollbar\", listener: this.onShowTabsChanged },\n\t\t\t\t{ field: \"Main.useDOMBasedMovement\", listener: this.setDOMBasedMovement },\n\t\t\t],\n\t\t\t() => {}\n\t\t);\n\n\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.startTilingOrTabbing\", this.disallowDragOnCenterRegion);\n\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.stopTilingOrTabbing\", this.allowDragOnCenterRegion);\n\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.cancelTilingOrTabbing\", this.allowDragOnCenterRegion);\n\n\t\tthis.onStoreChange();\n\t\tthis.setState({\n\t\t\tinitialized: true,\n\t\t});\n\t}\n\n\tonStoreChange() {\n\t\tlet activeIdentifier = finsembleWindow.identifier as TabProperties;\n\t\tactiveIdentifier.title = this.store?.getValue({\n\t\t\tfield: \"Main.windowTitle\",\n\t\t});\n\n\t\tthis.setState({\n\t\t\twindowTitle: this.store?.getValue({ field: \"Main.windowTitle\" }),\n\t\t\tminButton: !this.store?.getValue({ field: \"Minimize.hide\" }),\n\t\t\tmaxButton: !this.store?.getValue({ field: \"Maximize.hide\" }),\n\t\t\tcloseButton: !this.store?.getValue({ field: \"Close.hide\" }),\n\t\t\tshowLinkerButton: this.store?.getValue({\n\t\t\t\tfield: \"Linker.showLinkerButton\",\n\t\t\t}),\n\t\t\tshowShareButton: this.store?.getValue({\n\t\t\t\tfield: \"Sharer.emitterEnabled\",\n\t\t\t}),\n\t\t\tisTopRight: this.store?.getValue({ field: \"isTopRight\" }),\n\t\t\talwaysOnTopButton: this.store?.getValue({\n\t\t\t\tfield: \"AlwaysOnTop.show\",\n\t\t\t}),\n\t\t\tshowTabs: this.store?.getValue({ field: \"showTabs\" }),\n\t\t\thackScrollbar: this.store?.getValue({ field: \"hackScrollbar\" }),\n\t\t\ttabs: [activeIdentifier], // array of tabs for this window\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\t// Goal: If a user gets focus into the title bar (if they Alt+Tab or Cmd+Tab into the window),\n\t\t// we want to let get into the rest of the component using the keyboard alone. The UX for\n\t\t// this task will be to seemingly TAB from the title bar into the window, if possible.\n\t\t// Code: If the user presses the \"Tab\" key, move their focus to the browser view\n\t\twindow.addEventListener(\"keydown\", (e) => {\n\t\t\tif (e.key === \"Tab\") {\n\t\t\t\t// This magic moves focus to a browserView, if one exists\n\t\t\t\tfinsembleWindow.focus();\n\t\t\t}\n\t\t});\n\t\tlet header = document.getElementsByClassName(\"fsbl-header\")[0];\n\t\tdocument.body.style.marginTop = window.getComputedStyle(header, null).getPropertyValue(\"height\");\n\t\tthis.resizeDragHandle();\n\t\tthis.hackScrollbar();\n\t\tstoreManager.addInitializedListener(this.onInitialized);\n\t\tstoreManager.initialize();\n\t}\n\n\tcomponentDidUpdate() {\n\t\tthis.resizeDragHandle();\n\t}\n\n\tcomponentWillUnmount() {\n\t\tstoreManager.removeInitializedListener(this.onInitialized);\n\t\tif (this.state.initialized) {\n\t\t\tthis.store?.removeListeners(\n\t\t\t\t[\n\t\t\t\t\t{ field: \"Main.windowTitle\", listener: this.onTitleChange },\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"Main.showDockingTooltip\",\n\t\t\t\t\t\tlistener: this.onShowDockingToolTip,\n\t\t\t\t\t},\n\t\t\t\t\t{ field: \"Main.dockingIcon\", listener: this.onToggleDockingIcon },\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"Main.dockingEnabled\",\n\t\t\t\t\t\tlistener: this.onDockingEnabledChanged,\n\t\t\t\t\t},\n\t\t\t\t\t{ field: \"AlwaysOnTop.show\", listener: this.onAlwaysOnTopChanged },\n\t\t\t\t\t{ field: \"Linker.showLinkerButton\", listener: this.showLinkerButton },\n\t\t\t\t\t{\n\t\t\t\t\t\tfield: \"Sharer.emitterEnabled\",\n\t\t\t\t\t\tlistener: this.onShareEmitterChanged,\n\t\t\t\t\t},\n\t\t\t\t\t{ field: \"isTopRight\", listener: this.isTopRight },\n\t\t\t\t\t{ field: \"tabs\", listener: this.onTabsChanged },\n\t\t\t\t\t{ field: \"showTabs\", listener: this.onShowTabsChanged },\n\t\t\t\t],\n\t\t\t\t() => {},\n\t\t\t\t() => {}\n\t\t\t);\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"DockingService.startTilingOrTabbing\", this.disallowDragOnCenterRegion);\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"DockingService.stopTilingOrTabbing\", this.allowDragOnCenterRegion);\n\t\t}\n\t}\n\n\tsetDOMBasedMovement(err: StandardError, response: any) {\n\t\tif (response && response.hasOwnProperty(\"value\")) {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tuseDOMBasedMovement: response.value,\n\t\t\t\t\tdragHandleName: response.value ? \"fsbl-drag-handle\" : \"fsbl-drag-handle-native-movement\",\n\t\t\t\t},\n\t\t\t\tthis.resizeDragHandle\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * When we are not tiling/tabbing, we want to allow the user to drag the window around via any available space in the tab-region. This function allows that.\n\t */\n\tallowDragOnCenterRegion() {\n\t\tthis.setState({\n\t\t\tallowDragOnCenterRegion: true,\n\t\t});\n\t}\n\n\t/**\n\t * When we are tiling/tabbing, we do not want to allow any window to be dragged around and moved.\n\t */\n\tdisallowDragOnCenterRegion() {\n\t\tthis.setState({\n\t\t\tallowDragOnCenterRegion: false,\n\t\t});\n\t}\n\n\t/**\n\t * When tiling start, we want to find the dragHandler and hide it\n\t */\n\tonTilingStart() {\n\t\tlet dragHandle = document.querySelector(`.${this.state.dragHandleName}`);\n\t\tif (dragHandle) {\n\t\t\tdragHandle.classList.add(\"hidden\");\n\t\t}\n\t}\n\n\t/**\n\t * When tiling stops, we want to find the dragHandler and re-show it\n\t */\n\tonTilingStop() {\n\t\tlet dragHandle = document.querySelector(`.${this.state.dragHandleName}.hidden`);\n\t\tif (dragHandle) {\n\t\t\tdragHandle.classList.remove(\"hidden\");\n\t\t}\n\t}\n\n\t/**\n\t * Called whenever a tab is dropped on a non tab area.\n\t * It won't be called when dropped on a tab that handles handle the event.\n\t */\n\tonDropHandler() {\n\t\tFSBL.Clients.RouterClient.transmit(\"DockingService.cancelTilingOrTabbing\", {});\n\t}\n\n\t/**\n\t * Called when user double clicks on drag handle\n\t */\n\tonDoubleClick() {\n\t\t// Actions.clickMaximize checks the window state\n\t\t// and toggles between maximize and minimize.\n\t\tActions.clickMaximize();\n\t}\n\n\tmakeDragHandle(fsblHeader: Element, dragHandleCssClass: string): HTMLElement {\n\t\tlet dragHandle = document.createElement(\"div\");\n\t\tdragHandle.className = dragHandleCssClass;\n\n\t\t// if do double click it will invoke MouseDown and MouseUp events which could break the window bounds. So wait a 100ms for moving or resizing the window.\n\t\tlet isMousePressed = false;\n\t\tconst handleMouseDown = (event: MouseEvent) => {\n\t\t\tisMousePressed = true;\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (isMousePressed) {\n\t\t\t\t\tFSBL.Clients.WindowClient.startMovingWindow(event);\n\t\t\t\t}\n\t\t\t}, 100);\n\t\t};\n\t\tconst handleMouseUp = () => {\n\t\t\tisMousePressed = false;\n\t\t\tFSBL.Clients.WindowClient.stopMovingWindow();\n\t\t};\n\n\t\tdragHandle.onmousedown = handleMouseDown;\n\t\tdragHandle.onmouseup = handleMouseUp;\n\t\tdragHandle.ondblclick = () => {\n\t\t\tthis.onDoubleClick();\n\t\t};\n\t\tfsblHeader.insertBefore(dragHandle, fsblHeader.firstChild);\n\t\twindow.addEventListener(\"resize\", () => {\n\t\t\tthis.resizeDragHandle();\n\t\t});\n\t\treturn dragHandle;\n\t}\n\n\tdragHandleBoundsForShowTabs(startingBounds: DOMRect): DOMRect {\n\t\t// If there is more than one tab, then the drag area is the padding-left of fsbl-header-right\n\t\t// See .fsbl-tabs-multiple in the css\n\t\tif (this.state.tabs.length > 1) {\n\t\t\tconst headerRight = document.querySelector(\".fsbl-header-right\");\n\t\t\tif (headerRight) {\n\t\t\t\tconst computedStyle = getComputedStyle(headerRight);\n\t\t\t\t// override the bounds.width with the paddingLeft amount\n\t\t\t\treturn {\n\t\t\t\t\t// The spread operator only uses own properties; simply\n\t\t\t\t\t// spreading \"headerRight.getBoundingClientRect()\" will result in an\n\t\t\t\t\t// empty object being spread. Clone the object to be sure all\n\t\t\t\t\t// values are spread\n\t\t\t\t\t...clone(headerRight.getBoundingClientRect()),\n\t\t\t\t\twidth: parseInt(computedStyle.paddingLeft, 10),\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn startingBounds;\n\t\t\t}\n\t\t} else {\n\t\t\t// If tabs are not enabled, then the remained of fsbl-header-center beyond the tabs\n\t\t\t// is the draggable area. This assumes left aligned tabs.\n\t\t\tconst fsblHeaderCenter = document.querySelector(\".fsbl-header-center\");\n\t\t\tconst bounds = fsblHeaderCenter?.getBoundingClientRect() ?? startingBounds;\n\t\t\tconst tabRegionWrapperDiv = fsblHeaderCenter?.querySelector(\".tab-region-wrapper div.fsbl-header-title\");\n\t\t\tif (tabRegionWrapperDiv) {\n\t\t\t\tconst theTabBounds = tabRegionWrapperDiv.getBoundingClientRect();\n\t\t\t\t// Calculate the right portion\n\t\t\t\treturn {\n\t\t\t\t\t...bounds,\n\t\t\t\t\tleft: bounds.left + theTabBounds.width,\n\t\t\t\t\twidth: bounds.width - theTabBounds.width,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn bounds;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * The dragger is an absolutely positioned element that is superimposed on the actual area that we'd like to drag.\n\t * This is necessary due to a bug in Chromium. Effectively, we need the dragger to change its left position and width\n\t * to match the intended drag area. These dimensions can change whenever the header is re-rendered (for instance when\n\t * changing mode from tabbing to non-tabbing). Dimensions can also change when the window itself is resized (due to natural\n\t * css).\n\t *\n\t * Can remove all of the cq-drag and cq-no-drag because Chromium bug is fixed\n\t * Remove fsbl-drag-region, it is no longer needed\n\t * Hide the dragHandle during drop operations, so that it doesn't interfere\n\t */\n\tresizeDragHandle() {\n\t\ttry {\n\t\t\tconst fsblHeader = document.querySelector(\".fsbl-header\");\n\t\t\t// If there isn't an FSBLHeader then there doesn't need to be a drag handle.\n\t\t\tif (!fsblHeader) return;\n\n\t\t\tconst dragHandleCssClass = this.state.useDOMBasedMovement\n\t\t\t\t? \"fsbl-drag-handle\"\n\t\t\t\t: \"fsbl-drag-handle-native-movement\";\n\n\t\t\tconst dragHandleToRemoveClass = this.state.useDOMBasedMovement\n\t\t\t\t? \"fsbl-drag-handle-native-movement\"\n\t\t\t\t: \"fsbl-drag-handle\";\n\n\t\t\t// Create the dragger if it doesn't already exist\n\t\t\tlet dragHandle =\n\t\t\t\t(document.querySelector(`.${dragHandleCssClass}`) as HTMLElement) ??\n\t\t\t\tthis.makeDragHandle(fsblHeader, dragHandleCssClass);\n\n\t\t\t// When the titlebar starts up, useDOMBasedMovement will have a default value that is not the same as the config value\n\t\t\t// When the value from the config propagates down to the UI, we need to make sure the old drag handle is removed in place of the new\n\t\t\tconst dragHandleToRemove = document.querySelector(`.${dragHandleToRemoveClass}`) as HTMLElement;\n\t\t\tif (dragHandleToRemove) dragHandleToRemove.parentNode?.removeChild(dragHandleToRemove);\n\n\t\t\t// Set the height of the dragHandle to match the height of the window title bar\n\t\t\t// Do this every time through the render loop just in case a customer builds a\n\t\t\t// header bar with dynamic height!\n\t\t\tlet bounds = fsblHeader.getBoundingClientRect();\n\n\t\t\tdragHandle.style.height = `${bounds.height - 5}px`; // Subtract 5 pixels from height in order to make room for resize window cursor at top edge of window\n\t\t\tdragHandle.style.marginTop = `${-bounds.height + 5}px`; // Negative margin pulls the drag handle up over the fixed header\n\n\t\t\t// Start logic for determining where to place our dragHandle\n\t\t\tif (this.state.showTabs) {\n\t\t\t\tbounds = this.dragHandleBoundsForShowTabs(bounds);\n\t\t\t} else {\n\t\t\t\t// If tabs are not enabled, then the entire center is the drag area\n\t\t\t\tlet fsblHeaderCenter = document.querySelector(\".fsbl-header-center\");\n\t\t\t\tif (fsblHeaderCenter) bounds = fsblHeaderCenter.getBoundingClientRect();\n\t\t\t}\n\n\t\t\tif (bounds) {\n\t\t\t\tdragHandle.style.left = `${bounds.left}px`;\n\t\t\t\tdragHandle.style.width = `${bounds.width}px`;\n\t\t\t}\n\n\t\t\t// Add an event listener to hide the drag-handler when tiling is started\n\t\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.startTilingOrTabbing\", this.onTilingStart);\n\n\t\t\t// Add an event listener to show the drag-handler when tiling is stopped or cancelled\n\t\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.stopTilingOrTabbing\", this.onTilingStop);\n\t\t\tFSBL.Clients.RouterClient.addListener(\"DockingService.cancelTilingOrTabbing\", this.onTilingStop);\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * Whether the component's config allows for the linker.\n\t * @param {} err\n\t * @param {*} response\n\t */\n\tshowLinkerButton(err: StandardError, response: any) {\n\t\tthis.setState({ showLinkerButton: response.value });\n\t}\n\n\t/**\n\t * Whether the window is the top-right-most window in a group of windows. If so, it renders a minimize icon for the whole group.\n\t * @param {} err\n\t * @param {*} response\n\t */\n\tisTopRight(err: StandardError, response: any) {\n\t\tthis.setState({ isTopRight: response.value });\n\t}\n\n\t/**\n\t * @param {*} err\n\t * @param {*} response\n\t */\n\tonTitleChange(err: StandardError, response: any) {\n\t\tlet { tabs } = this.state;\n\t\tlet myIdentifier = FSBL.Clients.WindowClient.getWindowIdentifier();\n\n\t\ttabs = tabs.map((el) => {\n\t\t\tif (!el.windowName && el.name) el.windowName = el.name;\n\t\t\tif (!el.name && el.windowName) el.name = el.windowName;\n\t\t\treturn el;\n\t\t});\n\n\t\tconst myIndex = tabs.findIndex((el: TabProperties) => el.name === myIdentifier.windowName);\n\t\tif (myIndex === -1) return;\n\n\t\tlet myTab = tabs[myIndex] || {};\n\t\tmyTab.title = response.value;\n\t\ttabs.splice(myIndex, 1, myTab);\n\n\t\tthis.setState({\n\t\t\twindowTitle: response.value,\n\t\t\ttabs: tabs,\n\t\t});\n\t}\n\n\t/**\n\t * The next few methods are store change handlers that sync local state with the store's state.\n\t */\n\tonShowDockingToolTip(err: StandardError, response: any) {\n\t\tthis.setState({ showDockingTooltip: response.value });\n\t}\n\n\tonToggleDockingIcon(err: StandardError, response: any) {\n\t\tthis.setState({ dockingIcon: response.value });\n\t}\n\n\tonDockingEnabledChanged(err: StandardError, response: any) {\n\t\tthis.setState({ dockingEnabled: response.value });\n\t}\n\n\tonAlwaysOnTopChanged(err: StandardError, response: any) {\n\t\tthis.setState({ alwaysOnTopButton: response.value });\n\t}\n\n\tonStoreChanged(newState: WindowTitleBarShellState) {\n\t\tthis.setState(newState);\n\t}\n\n\tonShareEmitterChanged(err: StandardError, response: any) {\n\t\tthis.setState({ showShareButton: response.value });\n\t}\n\n\tonTabsChanged(err: StandardError, response: any) {\n\t\tthis.setState({\n\t\t\ttabs: response.value,\n\t\t});\n\t}\n\n\tonShowTabsChanged(err: StandardError, response: any) {\n\t\tthis.setState({\n\t\t\tshowTabs: response.value,\n\t\t});\n\t}\n\n\t// Hack the window's scrollbar so that it displays underneath the header. html.overflow: hidden body.overflow:auto\n\t// This is turned on by default. Set \"Window Manager.hackScrollbar: false\" to turn it off\n\thackScrollbar() {\n\t\tif (this.state.hackScrollbar) {\n\t\t\tconst htmlElement = document.querySelector(\"html\");\n\t\t\tif (htmlElement) htmlElement.style.overflowY = \"hidden\";\n\t\t\tconst bodyElement = document.querySelector(\"body\");\n\t\t\tif (bodyElement) bodyElement.style.overflowY = \"auto\";\n\t\t}\n\t}\n\n\trender() {\n\t\tlet showDockingIcon = !this.state.dockingEnabled ? false : this.state.dockingIcon;\n\t\tlet isGrouped = this.state.dockingIcon == \"ejector\";\n\t\tlet showMinimizeIcon = (isGrouped && this.state.isTopRight) || !isGrouped; // If not in a group or if topright in a group\n\t\tlet tabRegionClasses = \"fsbl-tab-area\";\n\t\tlet headerClasses = \"fsbl-header\";\n\n\t\t// If we're showing tabs, we throw these classes on to modify styles.\n\t\tif (this.state.showTabs) {\n\t\t\theaderClasses = `${headerClasses} fsbl-tabs-enabled`;\n\t\t}\n\t\tif (this.state.tabs.length > 1) {\n\t\t\theaderClasses = `${headerClasses} fsbl-tabs-multiple`;\n\t\t}\n\t\tconst context = {\n\t\t\tshowLinkerButton: this.state.showLinkerButton,\n\t\t\tshowShareButton: this.state.showShareButton,\n\t\t\tshowTabRegion: this.state.showTabs,\n\t\t\tshowMinimizeButton: this.state.minButton && showMinimizeIcon,\n\t\t\tshowMaximizeButton: this.state.maxButton,\n\t\t\tonTabDropped: this.allowDragOnCenterRegion,\n\t\t\tshowDockingButton: showDockingIcon,\n\t\t\tshowCloseButton: this.state.closeButton,\n\t\t\tclassName: tabRegionClasses,\n\t\t\tthisWindowTitle: this.state.windowTitle,\n\t\t\tboundingBox: this.state.tabBarBoundingBox,\n\t\t\tlistenForDragOver: !this.state.allowDragOnCenterRegion,\n\t\t\ttabs: this.state.tabs,\n\t\t\tonTitleUpdated: this.resizeDragHandle,\n\t\t\tshowAlwaysOnTopButton: this.state.alwaysOnTopButton && showMinimizeIcon,\n\t\t\tshowTabs: this.state.showTabs,\n\t\t\talwaysOnTop: this.state.alwaysOnTop,\n\t\t\tuseDOMBasedMovement: this.state.useDOMBasedMovement,\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={headerClasses} onDrop={this.onDropHandler.bind(this)}>\n\t\t\t\t{this.state.initialized && (\n\t\t\t\t\t<WindowTitleBarContext.Provider value={context}>{this.props.children}</WindowTitleBarContext.Provider>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
- import { StandardError } from "@finsemble/finsemble-core/types/types";
2
+ import { StandardError } from "@finsemble/finsemble-api/types/types";
3
3
  import { TabListProps, TabListState, GetTabWidthParams, TabProperties } from "../../../../types/windowTitleBar";
4
- import { WindowIdentifier } from "@finsemble/finsemble-core";
4
+ import { WindowIdentifier } from "@finsemble/finsemble-api";
5
5
  export declare class TabList extends React.Component<TabListProps, TabListState> {
6
6
  mousePositionOnDragEnd: {
7
7
  x: number;
@@ -197,6 +197,9 @@ export class TabList extends React.Component {
197
197
  FSBL.Clients.RouterClient.transmit("DockingService.cancelTilingOrTabbing", {
198
198
  windowIdentifier: this.state.activeTab,
199
199
  });
200
+ this.setState({
201
+ iAmDragging: false,
202
+ });
200
203
  return;
201
204
  }
202
205
  stopTilingOrTabbing({ allowDropOnSelf: true, action: "tabbing" }, () => {