@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.
- package/package.json +19 -18
- package/react/actions/smartDesktopDesignerActions.d.ts +6 -2
- package/react/actions/smartDesktopDesignerActions.js +2 -0
- package/react/actions/smartDesktopDesignerActions.js.map +1 -1
- package/react/assets/icons/code-block.svg +15 -0
- package/react/components/FinsembleProvider.js.map +1 -1
- package/react/components/appCatalog/modules/FDC3.d.ts +1 -1
- package/react/components/appCatalog/modules/FDC3.js.map +1 -1
- package/react/components/appCatalog/stores/appStore.d.ts +2 -2
- package/react/components/appCatalog/stores/appStore.js.map +1 -1
- package/react/components/common/Checkbox.js +1 -1
- package/react/components/common/Checkbox.js.map +1 -1
- package/react/components/common/DropZone.js +3 -1
- package/react/components/common/DropZone.js.map +1 -1
- package/react/components/common/FinsembleIcon.d.ts +1 -1
- package/react/components/common/FinsembleIcon.js +2 -0
- package/react/components/common/FinsembleIcon.js.map +1 -1
- package/react/components/common/FinsembleSelect.js +1 -1
- package/react/components/common/FinsembleSelect.js.map +1 -1
- package/react/components/common/Tooltip.js +3 -1
- package/react/components/common/Tooltip.js.map +1 -1
- package/react/components/common/css/application-list.css +4 -0
- package/react/components/common/css/preload-edit-page.css +37 -0
- package/react/components/favorites/FavoritesShell.stories.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
- package/react/components/legacyControls/FinsembleDnDContext.d.ts +2 -1
- package/react/components/legacyControls/FinsembleDnDContext.js +8 -6
- package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
- package/react/components/linker/remoteRedux.d.ts +1 -1
- package/react/components/linker/remoteRedux.js.map +1 -1
- package/react/components/menu/MenuAutoResizer.js.map +1 -1
- package/react/components/menu/MenuPortal.js +19 -0
- package/react/components/menu/MenuPortal.js.map +1 -1
- package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
- package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js.map +1 -1
- package/react/components/notifications/components/shared/CheckButton.d.ts +1 -1
- package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
- package/react/components/notifications/components/shared/NotificationCardShell.d.ts +1 -1
- package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
- package/react/components/notifications/components/shared/OverflowMenu.d.ts +1 -1
- package/react/components/notifications/components/shared/OverflowMenu.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.d.ts +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.d.ts +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.d.ts +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.d.ts +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js.map +1 -1
- package/react/components/notifications/components/views/CardView.js.map +1 -1
- package/react/components/notifications/components/views/ListView.d.ts +1 -1
- package/react/components/notifications/components/views/ListView.js.map +1 -1
- package/react/components/notifications/components/views/NotificationDetailsView.d.ts +1 -1
- package/react/components/notifications/components/views/NotificationDetailsView.js.map +1 -1
- package/react/components/notifications/types.d.ts +1 -1
- package/react/components/notifications/types.js.map +1 -1
- package/react/components/notifications/utils.d.ts +1 -1
- package/react/components/notifications/utils.js.map +1 -1
- package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
- package/react/components/processMonitor/components/ChildWindow.js.map +1 -1
- package/react/components/processMonitor/components/ListHeader.d.ts +1 -1
- package/react/components/processMonitor/components/ListHeader.js.map +1 -1
- package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts +3 -3
- package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
- package/react/components/search/SearchResult.js +4 -3
- package/react/components/search/SearchResult.js.map +1 -1
- package/react/components/smartDesktopDesigner/AppEditAccess.js.map +1 -1
- package/react/components/smartDesktopDesigner/AppEditPage.d.ts +2 -1
- package/react/components/smartDesktopDesigner/AppEditPage.js +77 -73
- package/react/components/smartDesktopDesigner/AppEditPage.js.map +1 -1
- package/react/components/smartDesktopDesigner/Appearance.css +8 -0
- package/react/components/smartDesktopDesigner/Application.d.ts +10 -3
- package/react/components/smartDesktopDesigner/Application.js +35 -42
- package/react/components/smartDesktopDesigner/Application.js.map +1 -1
- package/react/components/smartDesktopDesigner/Applications.d.ts +2 -0
- package/react/components/smartDesktopDesigner/Applications.js +17 -7
- package/react/components/smartDesktopDesigner/Applications.js.map +1 -1
- package/react/components/smartDesktopDesigner/EditPreload.d.ts +14 -0
- package/react/components/smartDesktopDesigner/EditPreload.js +169 -0
- package/react/components/smartDesktopDesigner/EditPreload.js.map +1 -0
- package/react/components/smartDesktopDesigner/ItemList.d.ts +17 -0
- package/react/components/smartDesktopDesigner/ItemList.js +58 -0
- package/react/components/smartDesktopDesigner/ItemList.js.map +1 -0
- package/react/components/smartDesktopDesigner/OptionalSettingsView.d.ts +11 -0
- package/react/components/smartDesktopDesigner/OptionalSettingsView.js +71 -0
- package/react/components/smartDesktopDesigner/OptionalSettingsView.js.map +1 -0
- package/react/components/smartDesktopDesigner/Preloads.d.ts +8 -0
- package/react/components/smartDesktopDesigner/Preloads.js +26 -0
- package/react/components/smartDesktopDesigner/Preloads.js.map +1 -0
- package/react/components/smartDesktopDesigner/Publish.js.map +1 -1
- package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
- package/react/components/smartDesktopDesigner/Toolbar.js +5 -5
- package/react/components/smartDesktopDesigner/Toolbar.js.map +1 -1
- package/react/components/smartDesktopDesigner/common/views.js +18 -0
- package/react/components/smartDesktopDesigner/common/views.js.map +1 -1
- package/react/components/smartDesktopDesigner/css/appearance.css +3 -0
- package/react/components/smartDesktopDesigner/fixtures/apps.d.ts +1 -1
- package/react/components/smartDesktopDesigner/fixtures/apps.js +23 -1
- package/react/components/smartDesktopDesigner/fixtures/apps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/exportProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/preloads.d.ts +22 -0
- package/react/components/smartDesktopDesigner/fixtures/preloads.js +40 -0
- package/react/components/smartDesktopDesigner/fixtures/preloads.js.map +1 -0
- package/react/components/smartDesktopDesigner/fixtures/publishProgress.d.ts +1 -1
- package/react/components/smartDesktopDesigner/fixtures/publishProgress.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/views.js +9 -0
- package/react/components/smartDesktopDesigner/fixtures/views.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.d.ts +1 -1
- package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.js +1 -0
- package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/EditPreload.stories.d.ts +11 -0
- package/react/components/smartDesktopDesigner/stories/EditPreload.stories.js +35 -0
- package/react/components/smartDesktopDesigner/stories/EditPreload.stories.js.map +1 -0
- package/react/components/smartDesktopDesigner/stories/ItemList.stories.d.ts +16 -0
- package/react/components/smartDesktopDesigner/stories/{ApplicationList.stories.js → ItemList.stories.js} +26 -26
- package/react/components/smartDesktopDesigner/stories/ItemList.stories.js.map +1 -0
- package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.d.ts +11 -0
- package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.js +28 -0
- package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.js.map +1 -0
- package/react/components/smartDesktopDesigner/stories/Preloads.stories.d.ts +11 -0
- package/react/components/smartDesktopDesigner/stories/Preloads.stories.js +31 -0
- package/react/components/smartDesktopDesigner/stories/Preloads.stories.js.map +1 -0
- package/react/components/smartDesktopDesigner/stories/SmartDesktopDesigner.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/AppEditPage.spec.js +1099 -258
- package/react/components/smartDesktopDesigner/tests/AppEditPage.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/{ApplicationList.spec.d.ts → Application.spec.d.ts} +0 -0
- package/react/components/smartDesktopDesigner/tests/Application.spec.js +1496 -0
- package/react/components/smartDesktopDesigner/tests/Application.spec.js.map +1 -0
- package/react/components/smartDesktopDesigner/tests/Applications.spec.js +3 -3
- package/react/components/smartDesktopDesigner/tests/Applications.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/EditPreload.spec.d.ts +1 -0
- package/react/components/smartDesktopDesigner/tests/EditPreload.spec.js +61 -0
- package/react/components/smartDesktopDesigner/tests/EditPreload.spec.js.map +1 -0
- package/react/components/smartDesktopDesigner/tests/ItemList.spec.d.ts +1 -0
- package/react/components/smartDesktopDesigner/tests/{ApplicationList.spec.js → ItemList.spec.js} +8 -8
- package/react/components/smartDesktopDesigner/tests/ItemList.spec.js.map +1 -0
- package/react/components/smartDesktopDesigner/tests/Preloads.spec.d.ts +1 -0
- package/react/components/smartDesktopDesigner/tests/Preloads.spec.js +47 -0
- package/react/components/smartDesktopDesigner/tests/Preloads.spec.js.map +1 -0
- package/react/components/smartDesktopDesigner/tests/SmartDesktopDesigner.spec.js +6 -0
- package/react/components/smartDesktopDesigner/tests/SmartDesktopDesigner.spec.js.map +1 -1
- package/react/components/toolbar/DragHandle.spec.d.ts +1 -0
- package/react/components/toolbar/DragHandle.spec.js +31 -0
- package/react/components/toolbar/DragHandle.spec.js.map +1 -0
- package/react/components/toolbar/DragHandle.stories.d.ts +13 -0
- package/react/components/toolbar/DragHandle.stories.js +39 -0
- package/react/components/toolbar/DragHandle.stories.js.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.d.ts +1 -1
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/Content.d.ts +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/Content.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.d.ts +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.d.ts +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.d.ts +2 -2
- package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
- package/react/components/toolbar/appLauncher/components/componentList.d.ts +2 -2
- package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.d.ts +2 -2
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.js.map +1 -1
- package/react/components/toolbar/dashbar/Dashbar.js +9 -12
- package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.d.ts +2 -2
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.d.ts +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts +4 -4
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +1 -1
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
- package/react/components/userPreferences/components/content/Workspaces.d.ts +1 -1
- package/react/components/userPreferences/components/content/Workspaces.js +1 -1
- package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/notificationViewsUtils.js.map +1 -1
- package/react/components/userPreferences/stores/UserPreferencesStore.d.ts +1 -1
- package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
- package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +4 -2
- package/react/components/windowTitleBar/WindowTitleBarShell.js +60 -59
- package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
- package/react/components/windowTitleBar/components/center/TabList.d.ts +2 -2
- package/react/components/windowTitleBar/components/center/TabList.js +3 -0
- package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/GroupingButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/MaximizeButton.js.map +1 -1
- package/react/components/windowTitleBar/components/windowTitle.d.ts +5 -2
- package/react/components/windowTitleBar/components/windowTitle.js +93 -89
- package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
- package/react/components/windowTitleBar/stores/windowTitleBarStore.d.ts +3 -3
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js +213 -217
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
- package/react/hooks/useDashbar.js.map +1 -1
- package/react/hooks/useFavoritesShell.js.map +1 -1
- package/react/hooks/useNotifications.d.ts +1 -1
- package/react/hooks/useNotifications.js.map +1 -1
- package/react/reducers/rootReducer.d.ts +11 -3
- package/react/reducers/smartDesktopDesignerReducer.js +8 -0
- package/react/reducers/smartDesktopDesignerReducer.js.map +1 -1
- package/react/store.d.ts +22 -6
- package/react/types/fdc3.d.ts +2 -2
- package/react/types/fdc3.js.map +1 -1
- package/react/types/searchTypes.d.ts +1 -8
- package/react/types/searchTypes.js.map +1 -1
- package/react/types/smartDesktopDesignerTypes.d.ts +8 -2
- package/react/types/smartDesktopDesignerTypes.js.map +1 -1
- package/react/types/windowTitleBar.d.ts +1 -1
- package/react/types/windowTitleBar.js.map +1 -1
- package/react/components/smartDesktopDesigner/ApplicationList.d.ts +0 -16
- package/react/components/smartDesktopDesigner/ApplicationList.js +0 -60
- package/react/components/smartDesktopDesigner/ApplicationList.js.map +0 -1
- package/react/components/smartDesktopDesigner/stories/ApplicationList.stories.d.ts +0 -16
- package/react/components/smartDesktopDesigner/stories/ApplicationList.stories.js.map +0 -1
- 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-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
import StoreModel from "@finsemble/finsemble-
|
|
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
|
-
|
|
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
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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" }, () => {
|