@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":"WorkspaceManagementMenu.js","sourceRoot":"","sources":["../../../../src/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\nimport React from \"react\";\nimport { Actions as WorkspaceManagementMenuActions } from \"./stores/workspaceManagementMenuStore\";\nimport WorkspaceActions from \"./components/WorkspaceActions\";\nimport WorkspaceList from \"./components/WorkspaceList\";\nimport { Menu } from \"../../menu/Menu\";\nimport { storeManager } from \"./stores/workspaceManagementMenuStore\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-
|
|
1
|
+
{"version":3,"file":"WorkspaceManagementMenu.js","sourceRoot":"","sources":["../../../../src/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\nimport React from \"react\";\nimport { Actions as WorkspaceManagementMenuActions } from \"./stores/workspaceManagementMenuStore\";\nimport WorkspaceActions from \"./components/WorkspaceActions\";\nimport WorkspaceList from \"./components/WorkspaceList\";\nimport { Menu } from \"../../menu/Menu\";\nimport { storeManager } from \"./stores/workspaceManagementMenuStore\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-api/types/common/workspace\";\n\nimport \"./workspaceManagementMenu.css\";\nimport StoreModel from \"@finsemble/finsemble-api/types/clients/StoreModel\";\n\ninterface IProps {\n\tid?: string;\n\tclassName?: string;\n\twidth?: number;\n\theight?: number;\n\tmaxHeight?: number;\n\ttitle?: React.ReactNode;\n\topenHotkey?: Array<string>;\n\tcloseHotkey?: Array<string>;\n}\ninterface IState {\n\tWorkspaceList: WorkspaceType[];\n\tactiveWorkspace: WorkspaceType | null;\n\tinitialized: boolean;\n\tisSwitchingWorkspaces: boolean;\n}\n\n/**\n * A button that opens the workspace management menu when clicked.\n */\nexport class WorkspaceManagementMenu extends React.Component<IProps, IState> {\n\tstore: StoreModel | null;\n\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t\tthis.bindCorrectContext();\n\t\tthis.store = null;\n\t\tthis.state = {\n\t\t\tWorkspaceList: [],\n\t\t\tactiveWorkspace: null,\n\t\t\tinitialized: false,\n\t\t\tisSwitchingWorkspaces: false,\n\t\t};\n\t}\n\n\tbindCorrectContext() {\n\t\tthis.onStoreChange = this.onStoreChange.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.addListener({ field: \"WorkspaceList\" }, this.onStoreChange);\n\t\tthis.store.addListener({ field: \"activeWorkspace\" }, this.onStoreChange);\n\t\tthis.store.addListener({ field: \"isSwitchingWorkspaces\" }, this.onStoreChange);\n\t\tthis.onStoreChange();\n\t\tthis.setState({\n\t\t\tinitialized: true,\n\t\t});\n\t}\n\n\tonStoreChange() {\n\t\tthis.setState({\n\t\t\tWorkspaceList: WorkspaceManagementMenuActions.getWorkspaceList(),\n\t\t\tactiveWorkspace: WorkspaceManagementMenuActions.getActiveWorkspace(),\n\t\t\tisSwitchingWorkspaces: WorkspaceManagementMenuActions.getIsSwitchingWorkspaces(),\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\tstoreManager.addInitializedListener(this.onInitialized);\n\t\tstoreManager.initialize();\n\t}\n\n\tcomponentWillUnmount() {\n\t\tstoreManager.removeInitializedListener(this.onInitialized);\n\t\tif (this.state.initialized) {\n\t\t\tthis.store?.removeListener({ field: \"WorkspaceList\" }, this.onStoreChange);\n\t\t\tthis.store?.removeListener({ field: \"activeWorkspace\" }, this.onStoreChange);\n\t\t\tthis.store?.removeListener({ field: \"isSwitchingWorkspaces\" }, this.onStoreChange);\n\t\t}\n\t}\n\n\trender() {\n\t\tlet completeProps = {\n\t\t\t...this.props,\n\t\t\twidth: this.props.width ?? 330,\n\t\t\tclassName: this.props.className ?? \"workspace-management-menu\",\n\t\t\tid: this.props.id ?? \"WorkspaceMenu\",\n\t\t\ttitle: this.state.activeWorkspace?.name,\n\t\t};\n\n\t\treturn (\n\t\t\t<Menu {...completeProps}>\n\t\t\t\t{this.state.initialized && this.state.activeWorkspace ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<WorkspaceActions />\n\t\t\t\t\t\t<WorkspaceList\n\t\t\t\t\t\t\tisSwitchingWorkspaces={this.state.isSwitchingWorkspaces}\n\t\t\t\t\t\t\tactiveWorkspace={this.state.activeWorkspace}\n\t\t\t\t\t\t\tworkspaces={this.state.WorkspaceList}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t) : null}\n\t\t\t</Menu>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This is a single workspace. When clicked, it requests that the app switch to the clicked workspace.
|
|
5
5
|
*/
|
|
6
6
|
import React from "react";
|
|
7
|
-
import { Workspace as WorkspaceType } from "@finsemble/finsemble-
|
|
7
|
+
import { Workspace as WorkspaceType } from "@finsemble/finsemble-api/types/common/workspace";
|
|
8
8
|
declare type WorkspaceActionType = WorkspaceType & {
|
|
9
9
|
permanent?: boolean;
|
|
10
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/components/Workspace.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAW9D,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;IACvD,MAAM,uBAAuB,GAAG,CAAC,CAAmB,EAAE,EAAE;QACvD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QAIpB,8BAA8B,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE;YACxE,IAAI,UAAU,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBAC9C,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAC/B;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACN,8BAAM,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAC,gBAAgB;QACjE,2BAAG,SAAS,EAAC,sBAAsB,EAAC,KAAK,EAAC,QAAQ,GAAK,CACjD,CACP,CAAC;AACH,CAAC,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,KAAK,CAAC,SAAiB;IAC7D,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC;IAOD,kBAAkB;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAOD,OAAO;QACN,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;SAC/B,CAAC,CAAC;IACJ,CAAC;IAQD,MAAM;QACL,MAAM,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAIvF,MAAM,WAAW,GAAG,qBAAqB,IAAI,iBAAiB,CAAC;QAE/D,IAAI,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAE3G,OAAO,CACN,oBAAC,QAAQ,IAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO;YAClD,6BAAK,SAAS,EAAC,eAAe;gBAC5B,WAAW,IAAI,8BAAM,SAAS,EAAC,aAAa,iBAAkB;gBAC9D,CAAC,WAAW,IAAI,UAAU,IAAI,UAAU,CAAC,SAAS,IAAI,8BAAM,SAAS,EAAE,UAAU,CAAC,SAAS,GAAS;gBACrG,8BAAM,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IACpD,SAAS,CAAC,IAAI,CACT;gBACP,6BAAK,SAAS,EAAC,0BAA0B;oBACvC,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,oBAAC,eAAe,IAAC,SAAS,EAAE,SAAS,GAAI;oBACxF,oBAAC,aAAa,IACb,EAAE,EAAE,SAAS,CAAC,IAAI,EAClB,IAAI,EAAE,SAAS,CAAC,IAAI,EACpB,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAC,gBAAgB,GACzB,CACG,CACD,CACI,CACX,CAAC;IACH,CAAC;CACD","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n * This is a single workspace. When clicked, it requests that the app switch to the clicked workspace.\n */\n\nimport React from \"react\";\nimport { MenuItem } from \"../../../menu/MenuItem\";\nimport { Actions as WorkspaceManagementMenuActions } from \"../stores/workspaceManagementMenuStore\";\nimport { FavoriteMaker } from \"../../../favorites/FavoriteMaker\";\nimport { useFavorites } from \"../../../../hooks/useFavorites\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-
|
|
1
|
+
{"version":3,"file":"Workspace.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/components/Workspace.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAW9D,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAAC;IACvD,MAAM,uBAAuB,GAAG,CAAC,CAAmB,EAAE,EAAE;QACvD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,eAAe,EAAE,CAAC;QAIpB,8BAA8B,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,EAAE;YACxE,IAAI,UAAU,IAAI,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBAC9C,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAC/B;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACN,8BAAM,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAC,gBAAgB;QACjE,2BAAG,SAAS,EAAC,sBAAsB,EAAC,KAAK,EAAC,QAAQ,GAAK,CACjD,CACP,CAAC;AACH,CAAC,CAAC;AAUF,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,KAAK,CAAC,SAAiB;IAC7D,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC3B,CAAC;IAOD,kBAAkB;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAOD,OAAO;QACN,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;SAC/B,CAAC,CAAC;IACJ,CAAC;IAQD,MAAM;QACL,MAAM,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAIvF,MAAM,WAAW,GAAG,qBAAqB,IAAI,iBAAiB,CAAC;QAE/D,IAAI,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,2CAA2C,CAAC,CAAC,CAAC,0BAA0B,CAAC;QAE3G,OAAO,CACN,oBAAC,QAAQ,IAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO;YAClD,6BAAK,SAAS,EAAC,eAAe;gBAC5B,WAAW,IAAI,8BAAM,SAAS,EAAC,aAAa,iBAAkB;gBAC9D,CAAC,WAAW,IAAI,UAAU,IAAI,UAAU,CAAC,SAAS,IAAI,8BAAM,SAAS,EAAE,UAAU,CAAC,SAAS,GAAS;gBACrG,8BAAM,SAAS,EAAC,gBAAgB,EAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IACpD,SAAS,CAAC,IAAI,CACT;gBACP,6BAAK,SAAS,EAAC,0BAA0B;oBACvC,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,oBAAC,eAAe,IAAC,SAAS,EAAE,SAAS,GAAI;oBACxF,oBAAC,aAAa,IACb,EAAE,EAAE,SAAS,CAAC,IAAI,EAClB,IAAI,EAAE,SAAS,CAAC,IAAI,EACpB,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAC,gBAAgB,GACzB,CACG,CACD,CACI,CACX,CAAC;IACH,CAAC;CACD","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n * This is a single workspace. When clicked, it requests that the app switch to the clicked workspace.\n */\n\nimport React from \"react\";\nimport { MenuItem } from \"../../../menu/MenuItem\";\nimport { Actions as WorkspaceManagementMenuActions } from \"../stores/workspaceManagementMenuStore\";\nimport { FavoriteMaker } from \"../../../favorites/FavoriteMaker\";\nimport { useFavorites } from \"../../../../hooks/useFavorites\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-api/types/common/workspace\";\n\ntype WorkspaceActionType = WorkspaceType & {\n\tpermanent?: boolean;\n};\n\ninterface RemoveWorkspaceProps {\n\tworkspace: WorkspaceActionType;\n}\n\nconst RemoveWorkspace = (props: RemoveWorkspaceProps) => {\n\tconst { workspace } = props;\n\tconst { isFavorited, removeFavorite } = useFavorites();\n\tconst actuallyRemoveWorkspace = (e: React.MouseEvent) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\t// Trigger the remove. This will throw a dialog. It will return a boolean\n\t\t// for whether it was or was not deleted.\n\t\t// If the thing was deleted, remove it from favorites.\n\t\tWorkspaceManagementMenuActions.removeWorkspace(workspace, (wasDeleted) => {\n\t\t\tif (wasDeleted && isFavorited(workspace.name)) {\n\t\t\t\tremoveFavorite(workspace.name);\n\t\t\t}\n\t\t});\n\t};\n\n\treturn (\n\t\t<span onClick={actuallyRemoveWorkspace} className=\"menu-item-icon\">\n\t\t\t<i className=\"ff-adp-trash-outline\" title=\"Delete\"></i>\n\t\t</span>\n\t);\n};\n\ninterface IProps {\n\tisSwitchingWorkspaces: boolean;\n\tisActiveWorkspace: boolean;\n\tdragHandle: { iconClass: string };\n\tworkspace: WorkspaceActionType;\n\tmainAction: (data: { name: string }) => void;\n}\n\nexport default class Workspace extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t\tthis.bindCorrectContext();\n\t}\n\n\t/**\n\t * This is necessary to make sure that the `this` inside of the callback is correct.\n\t *\n\t * @memberof Workspace\n\t */\n\tbindCorrectContext() {\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\t/**\n\t * When the main body of the component is clicked, we fire off the mainAction. By default this is to switch workspaces.\n\t *\n\t * @memberof Workspace\n\t */\n\tonClick() {\n\t\tthis.props.mainAction({\n\t\t\tname: this.props.workspace.name,\n\t\t});\n\t}\n\n\t/**\n\t * Render method.\n\t *\n\t * @returns\n\t * @memberof Workspace\n\t */\n\trender() {\n\t\tconst { isSwitchingWorkspaces, workspace, isActiveWorkspace, dragHandle } = this.props;\n\n\t\t// Actions are remove and pin workspace.\n\n\t\tconst showSpinner = isSwitchingWorkspaces && isActiveWorkspace;\n\n\t\tlet classes = isActiveWorkspace ? \"menu-item active-workspace workspace-name\" : \"menu-item workspace-name\";\n\n\t\treturn (\n\t\t\t<MenuItem onClick={this.onClick} className={classes}>\n\t\t\t\t<div className=\"menu-item-row\">\n\t\t\t\t\t{showSpinner && <span className=\"fsbl-loader\">Loading...</span>}\n\t\t\t\t\t{!showSpinner && dragHandle && dragHandle.iconClass && <span className={dragHandle.iconClass}></span>}\n\t\t\t\t\t<span className=\"workspace-name\" title={workspace.name}>\n\t\t\t\t\t\t{workspace.name}\n\t\t\t\t\t</span>\n\t\t\t\t\t<div className=\"menu-item-row-push-right\">\n\t\t\t\t\t\t{!isActiveWorkspace && !workspace.permanent && <RemoveWorkspace workspace={workspace} />}\n\t\t\t\t\t\t<FavoriteMaker\n\t\t\t\t\t\t\tid={workspace.name}\n\t\t\t\t\t\t\tname={workspace.name}\n\t\t\t\t\t\t\tcategory={\"Workspace\"}\n\t\t\t\t\t\t\tclassName=\"menu-item-icon\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Workspace as WorkspaceType } from "@finsemble/finsemble-
|
|
2
|
+
import { Workspace as WorkspaceType } from "@finsemble/finsemble-api/types/common/workspace";
|
|
3
3
|
interface IProps {
|
|
4
4
|
isSwitchingWorkspaces: boolean;
|
|
5
5
|
activeWorkspace: WorkspaceType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceList.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/components/WorkspaceList.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAalF,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,KAAK,CAAC,SAAiB;IACjE,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAe;QAC5C,OAAO,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM;QACL,MAAM,EAAE,qBAAqB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9D,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YAE3D,IAAI,iBAAiB,GAAG,SAAS,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC;YAChE,MAAM,UAAU,GAAG,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;YAErD,OAAO,CACN,oBAAC,kBAAkB,IAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,IAAI;gBAChE,oBAAC,SAAS,IACT,GAAG,EAAE,CAAC,EACN,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,OAAO,CAAC,iBAAiB,EACrC,qBAAqB,EAAE,qBAAqB,GAC3C,CACkB,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CACN,oBAAC,mBAAmB,IAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAC,gBAAgB,IACxE,UAAU,CACU,CACtB,CAAC;IACH,CAAC;CACD","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n * This is a list of workspaces that the user can click on, loading them.\n */\nimport React from \"react\";\nimport Workspace from \"./Workspace\";\nimport { Actions } from \"../stores/workspaceManagementMenuStore\";\nimport { FinsembleDraggable } from \"../../../legacyControls/FinsembleDraggable\";\nimport { FinsembleDnDContext } from \"../../../legacyControls/FinsembleDnDContext\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-
|
|
1
|
+
{"version":3,"file":"WorkspaceList.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/components/WorkspaceList.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAalF,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,KAAK,CAAC,SAAiB;IACjE,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAe;QAC5C,OAAO,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM;QACL,MAAM,EAAE,qBAAqB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9D,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YAE3D,IAAI,iBAAiB,GAAG,SAAS,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,CAAC;YAChE,MAAM,UAAU,GAAG,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;YAErD,OAAO,CACN,oBAAC,kBAAkB,IAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,IAAI;gBAChE,oBAAC,SAAS,IACT,GAAG,EAAE,CAAC,EACN,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,OAAO,CAAC,iBAAiB,EACrC,qBAAqB,EAAE,qBAAqB,GAC3C,CACkB,CACrB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CACN,oBAAC,mBAAmB,IAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAC,gBAAgB,IACxE,UAAU,CACU,CACtB,CAAC;IACH,CAAC;CACD","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n * This is a list of workspaces that the user can click on, loading them.\n */\nimport React from \"react\";\nimport Workspace from \"./Workspace\";\nimport { Actions } from \"../stores/workspaceManagementMenuStore\";\nimport { FinsembleDraggable } from \"../../../legacyControls/FinsembleDraggable\";\nimport { FinsembleDnDContext } from \"../../../legacyControls/FinsembleDnDContext\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-api/types/common/workspace\";\n\ninterface IProps {\n\tisSwitchingWorkspaces: boolean;\n\tactiveWorkspace: WorkspaceType;\n\tworkspaces: WorkspaceType[];\n}\n\ntype ReorderType = {\n\toldIndex: number;\n\tnewIndex: number;\n};\nexport default class WorkspaceList extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t\tthis.onDragEnd = this.onDragEnd.bind(this);\n\t}\n\n\tonDragEnd({ oldIndex, newIndex }: ReorderType) {\n\t\tActions.reorderWorkspaceList({ oldIndex, newIndex });\n\t}\n\n\trender() {\n\t\tconst { isSwitchingWorkspaces, activeWorkspace } = this.props;\n\t\tlet workspaces = this.props.workspaces.map((workspace, i) => {\n\t\t\t// Separate array for each workspace. This way, the activeWorkspace can be rendered without a trashcan.\n\t\t\tlet isActiveWorkspace = workspace.name === activeWorkspace.name;\n\t\t\tconst dragHandle = { iconClass: \"ff-adp-hamburger\" };\n\n\t\t\treturn (\n\t\t\t\t<FinsembleDraggable index={i} key={i} draggableId={workspace.name}>\n\t\t\t\t\t<Workspace\n\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\tisActiveWorkspace={isActiveWorkspace}\n\t\t\t\t\t\tdragHandle={dragHandle}\n\t\t\t\t\t\tworkspace={workspace}\n\t\t\t\t\t\tmainAction={Actions.switchToWorkspace}\n\t\t\t\t\t\tisSwitchingWorkspaces={isSwitchingWorkspaces}\n\t\t\t\t\t/>\n\t\t\t\t</FinsembleDraggable>\n\t\t\t);\n\t\t});\n\n\t\treturn (\n\t\t\t<FinsembleDnDContext onDragEnd={this.onDragEnd} className=\"workspace-list\">\n\t\t\t\t{workspaces}\n\t\t\t</FinsembleDnDContext>\n\t\t);\n\t}\n}\n"]}
|
package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import StoreModel from "@finsemble/finsemble-
|
|
2
|
-
import { StandardCallback } from "@finsemble/finsemble-
|
|
3
|
-
import { Workspace as WorkspaceType } from "@finsemble/finsemble-
|
|
4
|
-
import { types } from "@finsemble/finsemble-
|
|
1
|
+
import StoreModel from "@finsemble/finsemble-api/types/clients/StoreModel";
|
|
2
|
+
import { StandardCallback } from "@finsemble/finsemble-api/types/types";
|
|
3
|
+
import { Workspace as WorkspaceType } from "@finsemble/finsemble-api/types/common/workspace";
|
|
4
|
+
import { types } from "@finsemble/finsemble-api";
|
|
5
5
|
declare type StandardErrorCallback = types.StandardErrorCallback;
|
|
6
6
|
declare type UserInputResponseType = {
|
|
7
7
|
choice: string;
|
package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaceManagementMenuStore.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n * The workspace management menu may be the most complicated component that we have (other than the toolbar). It isn't because workspace management is particularly difficult, it's because there is a lot of user question and answer going on. We don't want to overwrite data without explicit consent, and so the calls get involved. To simplify the code, we are using the `async` library. If you are unfamiliar with this library, see this link: https://caolan.github.io/async/docs.html\n */\nimport async from \"async\";\nimport { Util } from \"@finsemble/finsemble-core\";\nimport StoreModel from \"@finsemble/finsemble-core/types/clients/StoreModel\";\nimport { StandardCallback, StandardError } from \"@finsemble/finsemble-core/types/types\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-core/types/common/workspace\";\nimport { types } from \"@finsemble/finsemble-core\";\n\ntype StandardErrorCallback = types.StandardErrorCallback;\n\ntype UserInputResponseType = {\n\tchoice: string;\n\tvalue?: string;\n};\ntype SaveWorkspaceWaterfallParams = {\n\tworkspaceExists: boolean;\n\tworkspaceName: string;\n\ttemplate: any;\n};\n\n// When a user cancels the save workspace dialog, we throw an error, which short-circuits the async call.\nconst SAVE_DIALOG_CANCEL_ERROR = \"Cancel\";\nconst NEGATIVE = \"Negative\";\nlet PROMPT_ON_SAVE = false;\nlet WorkspaceManagementStore: StoreModel;\nlet StoreClient: any;\nlet Logger: any;\nlet WorkspaceManagementGlobalStore: StoreModel;\n\n// Initial data for the store.\nconst defaultData = {\n\tactiveWorkspace: {},\n\tmenuWidth: 285,\n\tWorkspaceList: [],\n\tnewWorkspaceDialogIsActive: false,\n\t/**\n\t * State around whether the workspace is currently in the process of switching.\n\t *\n\t * For simplicity, we're storing this in the local store for now, but this precludes\n\t * other components from signaling that the workspace is changing. A consequence,\n\t * for example, is that if you switch workspaces uses a pin on the toolbar instead\n\t * of the workspace management menu, the spinner doesn't show up.\n\t */\n\tisSwitchingWorkspaces: false,\n\tisPromptingUser: false,\n};\n\nconst Actions = {\n\tautoSave: (callback: StandardCallback) => {\n\t\tconst activeName = FSBL.Clients.WorkspaceClient.activeWorkspace?.name;\n\t\tif (!PROMPT_ON_SAVE) {\n\t\t\tFSBL.Clients.WorkspaceClient.saveAs(\n\t\t\t\t{\n\t\t\t\t\tname: activeName,\n\t\t\t\t\tforce: true,\n\t\t\t\t},\n\t\t\t\t(err: StandardError) => {\n\t\t\t\t\tcallback(err);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tcallback(null);\n\t\t}\n\t},\n\tinitialize: () => {\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\tLogger.system.debug(\"WorkspaceManagementStore init getWorkspaces\", workspaces);\n\t\t\tWorkspaceManagementStore.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. I could have iterated through the workspaces above and found the active one, but this seems simpler.\n\t\tFSBL.Clients.WorkspaceClient.getActiveWorkspace(\n\t\t\t(err: StandardError, activeWorkspace: { data: WorkspaceType } | undefined) => {\n\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore init getActiveWorkspace\", activeWorkspace);\n\t\t\t\tWorkspaceManagementStore.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,\n\t\t * we receive a `response`, instead of `workspaces` or `activeWorkspace`. This is because this callback is for\n\t\t * a `RouterClient` message. The functions above are callbacks to `WorkspaceClient` API calls.\n\t\t */\n\t\tFSBL.Clients.RouterClient.subscribe(\"Finsemble.WorkspaceService.update\", (err, response) => {\n\t\t\tif (response.data && response.data.activeWorkspace) {\n\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore init update\", response.data);\n\t\t\t\tWorkspaceManagementStore.setValue({\n\t\t\t\t\tfield: \"activeWorkspace\",\n\t\t\t\t\tvalue: response.data.activeWorkspace,\n\t\t\t\t});\n\t\t\t\tWorkspaceManagementStore.setValue({\n\t\t\t\t\tfield: \"WorkspaceList\",\n\t\t\t\t\tvalue: response.data.workspacesConfig,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tWorkspaceManagementGlobalStore.getValue({ field: \"owner\" }, (err: StandardError, data?: string) => {\n\t\t\tif (data !== finsembleWindow.name) return;\n\t\t\tWorkspaceManagementGlobalStore.Dispatcher.register((action) => {\n\t\t\t\tswitch (action.actionType) {\n\t\t\t\t\tcase \"switchToWorkspace\":\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore switchToWorkspace\", action.data);\n\t\t\t\t\t\tActions.switchToWorkspace(action.data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"reorderWorkspace\":\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore reorderWorkspace\", action.data);\n\t\t\t\t\t\tActions.reorderWorkspaceList(action.data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"removeWorkspace\":\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore removeWorkspace\", action.data);\n\t\t\t\t\t\tActions.removeWorkspace(\n\t\t\t\t\t\t\taction.data as {\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\thideModalOnClose: boolean;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"renameWorkspace\":\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore renameWorkspace\", action.data);\n\t\t\t\t\t\tActions.renameWorkspace(action.data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// Nothing to do here\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tGETTERS/SETTERS\n\t *\n\t *********************************************************************************************/\n\tgetActiveWorkspace: () => WorkspaceManagementStore.getValue(\"activeWorkspace\") as WorkspaceType,\n\n\t// Get the name of the workspace that is currently being edited\n\tgetWorkspaceBeingEdited: () => WorkspaceManagementStore.getValue(\"workspaceBeingEdited\") as string,\n\n\tgetWorkspaceList: () => WorkspaceManagementStore.getValue(\"WorkspaceList\") as WorkspaceType[],\n\n\tgetIsSwitchingWorkspaces: () => WorkspaceManagementStore.getValue(\"isSwitchingWorkspaces\") as boolean,\n\n\tsetIsSwitchingWorkspaces: (val: boolean) =>\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"isSwitchingWorkspaces\",\n\t\t\tvalue: val,\n\t\t}),\n\n\tgetIsPromptingUser: () => WorkspaceManagementStore.getValue(\"isPromptingUser\") as boolean,\n\n\tsetIsPromptingUser: (val: boolean) =>\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"isPromptingUser\",\n\t\t\tvalue: val,\n\t\t}),\n\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tMain Workspace Actions\n\t *\n\t *********************************************************************************************/\n\n\t/**\n\t * Handles the complete workflow for creating a new workspace.\n\t * We make sure the user doesn't lose any unsaved work, ask them to name it, make sure that workspace doesn't already exist, then actually save the new workspace. After that, we fire off a notification to let them know that everything was a great success.\n\t */\n\tnewWorkspace: function () {\n\t\tlet newWorkspaceName: string;\n\t\tLogger.system.log(\"New workspace - start.\");\n\t\tconst newWorkspaceDialogIsActive = WorkspaceManagementStore.getValue(\"newWorkspaceDialogIsActive\");\n\n\t\ttype createItParams = {\n\t\t\tworkspaceName: string;\n\t\t};\n\t\t// Creates the new workspace.\n\t\tconst createIt = (params: createItParams, cb?: StandardCallback) => {\n\t\t\tLogger.system.log(\"createIt\", params);\n\t\t\tconst { workspaceName } = params;\n\t\t\tFSBL.Clients.WorkspaceClient.createNewWorkspace(workspaceName, {}, (err, response) => {\n\t\t\t\tLogger.system.log(\"createIt createNewWorkspace response\", workspaceName, response);\n\t\t\t\tnewWorkspaceName = response.workspaceName;\n\t\t\t\tif (cb) {\n\t\t\t\t\tcb(null, newWorkspaceName);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tif (!newWorkspaceDialogIsActive) {\n\t\t\tWorkspaceManagementStore.setValue({\n\t\t\t\tfield: \"newWorkspaceDialogIsActive\",\n\t\t\t\tvalue: true,\n\t\t\t});\n\t\t}\n\n\t\tActions.blurWindow();\n\t\tlet tasks: Function[] = [\n\t\t\tActions.autoSave,\n\t\t\tActions.spawnWorkspaceInputField,\n\t\t\tActions.validateWorkspaceInput,\n\t\t\tActions.checkIfWorkspaceAlreadyExists,\n\t\t\tActions.askIfUserWantsNewWorkspace,\n\t\t\tcreateIt,\n\t\t];\n\t\tif (PROMPT_ON_SAVE) {\n\t\t\ttasks = ([Actions.askIfUserWantsToSave, Actions.handleSaveDialogResponse] as Function[]).concat(tasks);\n\t\t}\n\t\tasync.waterfall(tasks, Actions.onAsyncComplete);\n\t},\n\n\t/**\n\t * Handles the workflow for removing a workspace.\n\t * As long as you are not deleting the workspace that is active, it will pop up a confirm dialog,\n\t * and if the user says \"yes\", it will delete the workspace.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tremoveWorkspace: (data: { name: string; hideModalOnClose?: boolean }, cb = (val: any) => {}) => {\n\t\tconst workspaceName = data.name;\n\n\t\tconst dialogParams = {\n\t\t\ttitle: \"Delete this workspace?\",\n\t\t\tquestion: `Are you sure you want to delete the workspace \"${workspaceName}\"?`,\n\t\t\tshowNegativeButton: false,\n\t\t\taffirmativeResponseLabel: \"Delete\",\n\t\t\thideModalOnClose: data.hideModalOnClose,\n\t\t};\n\n\t\t/**\n\t\t * Invoked when the user interacts with the dialog.\n\t\t */\n\t\tfunction onUserInput(err: StandardError, response: UserInputResponseType) {\n\t\t\tif (response.choice === \"affirmative\") {\n\t\t\t\tcb(true);\n\t\t\t\tFSBL.Clients.WorkspaceClient.remove({\n\t\t\t\t\tname: workspaceName,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcb(false);\n\t\t\t}\n\t\t}\n\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\n\t},\n\t/**\n\t * The `activeWorkspace` is simply a copy of something we brought out of storage. This function copies the `activeWorkspace` to back to storage.\n\t */\n\tsaveWorkspace: (cb?: StandardErrorCallback) => {\n\t\tconst activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\t\tFSBL.Clients.WorkspaceClient.saveAs(\n\t\t\t{\n\t\t\t\tforce: true,\n\t\t\t\tname: activeWorkspace.name,\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tcb?.(null);\n\t\t\t}\n\t\t);\n\t},\n\treorderWorkspaceList: ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\tlet workspaces: WorkspaceType[] = WorkspaceManagementStore.getValue<WorkspaceType[]>({\n\t\t\tfield: \"WorkspaceList\",\n\t\t});\n\t\tconst workspaceToMove = workspaces[oldIndex];\n\t\tworkspaces.splice(oldIndex, 1);\n\t\tworkspaces.splice(newIndex, 0, workspaceToMove);\n\t\tconst workspacesWithExpectedStructure = workspaces.map((WSName) => {\n\t\t\treturn {\n\t\t\t\tname: WSName,\n\t\t\t};\n\t\t});\n\t\tFSBL.Clients.WorkspaceClient.setWorkspaces(\n\t\t\t{\n\t\t\t\tworkspaces: workspacesWithExpectedStructure,\n\t\t\t},\n\t\t\t() => {}\n\t\t);\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"WorkspaceList\",\n\t\t\tvalue: workspaces,\n\t\t});\n\t},\n\trenameWorkspace: ({ oldName, newName }: { oldName: string; newName: string }) => {\n\t\t// Note: This does no checking of the workspace before renaming. If you call this function, and `newName` is an existing\n\t\t// workspace name, the existing workspace will get stomped. Currently, the UI prevents renaming to existing names.\n\t\tFSBL.Clients.WorkspaceClient.rename({\n\t\t\toldName: oldName,\n\t\t\tnewName: newName,\n\t\t\tremoveOldWorkspace: true,\n\t\t\toverwriteExisting: true,\n\t\t});\n\t},\n\n\tshowPreferences: () => {\n\t\tFSBL.Clients.LauncherClient.showWindow(\n\t\t\t{\n\t\t\t\tcomponentType: \"UserPreferences\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmonitor: \"mine\",\n\t\t\t\tleft: \"center\",\n\t\t\t\ttop: \"center\",\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * Ask the user for a name, make sure it doesn't already exist, then save.\n\t */\n\tsaveWorkspaceAs: () => {\n\t\tfunction saveIt(workspaceName: string, callback: StandardErrorCallback) {\n\t\t\tFSBL.Clients.WorkspaceClient.saveAs(\n\t\t\t\t{\n\t\t\t\t\tname: workspaceName,\n\t\t\t\t\tforce: true,\n\t\t\t\t},\n\t\t\t\t(err: StandardError, response: any) => {\n\t\t\t\t\tcallback(err, response);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tLogger.system.log(\"SaveWorkspaceAs clicked.\");\n\n\t\tasync.waterfall(\n\t\t\t[\n\t\t\t\tActions.autoSave,\n\t\t\t\tActions.spawnSaveAsDialog,\n\t\t\t\tActions.validateWorkspaceInput,\n\t\t\t\tActions.checkIfWorkspaceAlreadyExists,\n\t\t\t\tActions.askAboutOverwrite,\n\t\t\t\tsaveIt,\n\t\t\t],\n\t\t\tActions.onAsyncComplete\n\t\t);\n\t},\n\n\t/**\n\t * Asks the user if they'd like to save their data, then loads the requested workspace.\n\t */\n\tswitchToWorkspace: async function ({ name }: { name: string }) {\n\t\t// if a workspace prompt is outstanding for a previous switch, immediately return to lock out user from doing another switch (until responding to prompt);\n\t\t// note this prompting flag is cleared in Actions.onAsyncComplete when the previous switch completes (after user responds to the prompt)\n\t\tconst prompting = Actions.getIsPromptingUser();\n\t\tLogger.system.log(\"workspaceManagementMenuStore: switchToWorkspace\", prompting ? \"prompting\" : \"not-prompting\");\n\t\tif (prompting) return;\n\n\t\tActions.setIsSwitchingWorkspaces(true);\n\t\tActions.blurWindow();\n\t\tconst activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\n\t\t/**\n\t\t * Actually perform the switch. Happens after we ask the user what they want.\n\t\t *\n\t\t */\n\t\tconst switchWorkspace = (callback = () => {}) => {\n\t\t\tFSBL.Clients.WorkspaceClient.switchTo(\n\t\t\t\t{\n\t\t\t\t\tname: name,\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tActions.setIsSwitchingWorkspaces(false);\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\n\t\t/**\n\t\t * Make sure the user is sure\n\t\t */\n\t\tconst askAboutReload = (callback: () => void) => {\n\t\t\tActions.spawnDialog(\n\t\t\t\t\"yesNo\",\n\t\t\t\t{\n\t\t\t\t\tmonitor: \"primary\",\n\t\t\t\t\ttitle: \"Save your workspace?\",\n\t\t\t\t\tquestion: `\\\"${activeWorkspace.name}\\\" has unsaved changes. Would you like to save?`,\n\t\t\t\t\taffirmativeResponseLabel: \"Save\",\n\t\t\t\t\tnegativeResponseLabel: \"Don't Save\",\n\t\t\t\t},\n\t\t\t\tcallback\n\t\t\t);\n\t\t};\n\n\t\t/**\n\t\t * If the workspace is dirty, we need to do more than if it's clean.\n\t\t * We don't want users to lose unsaved work.\n\t\t */\n\t\tif (await FSBL.Clients.WorkspaceClient.isWorkspaceDirty()) {\n\t\t\tlet tasks: Function[] = [];\n\n\t\t\tActions.setIsPromptingUser(true);\n\t\t\tlet firstMethod: Function = Actions.autoSave,\n\t\t\t\tsecondMethod = null;\n\n\t\t\tif (PROMPT_ON_SAVE === true) {\n\t\t\t\t// We want to ask the user to save. But if they're trying to reload the workspace,\n\t\t\t\t// the message needs to be different. The first if block just switches that method.\n\t\t\t\tfirstMethod = Actions.askIfUserWantsToSave;\n\t\t\t\tif (name === FSBL.Clients.WorkspaceClient.activeWorkspace?.name) {\n\t\t\t\t\tfirstMethod = askAboutReload;\n\t\t\t\t}\n\n\t\t\t\t// If we are not autosaving, we need to process the dialog input.\n\t\t\t\tsecondMethod = Actions.handleSaveDialogResponse;\n\t\t\t}\n\n\t\t\t// Build the task list.\n\t\t\ttasks = [firstMethod];\n\n\t\t\tif (secondMethod) {\n\t\t\t\ttasks.push(secondMethod);\n\t\t\t}\n\n\t\t\t// Switch is the last thing we do.\n\t\t\ttasks.push(switchWorkspace);\n\n\t\t\tasync.waterfall(tasks, Actions.onAsyncComplete);\n\t\t} else {\n\t\t\tswitchWorkspace();\n\t\t}\n\t},\n\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tWorkspace Management Helpers\n\t *\n\t *********************************************************************************************/\n\n\t/**\n\t * General handler for `async.series` and `async.waterfall`\n\t */\n\tonAsyncComplete(err?: Error | null) {\n\t\tLogger.system.debug(\"workspaceManagementMenuStore: onAsyncComplete\");\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"newWorkspaceDialogIsActive\",\n\t\t\tvalue: false,\n\t\t});\n\t\tconst errMessage = err?.message;\n\t\tif (errMessage && errMessage !== NEGATIVE && errMessage !== SAVE_DIALOG_CANCEL_ERROR) {\n\t\t\t// handle error.\n\t\t\tLogger.system.error(err);\n\t\t}\n\n\t\t// Unlock the UI.\n\t\tActions.setIsSwitchingWorkspaces(false);\n\t\tActions.setIsPromptingUser(false);\n\t},\n\n\t/**\n\t * Helper for spawning dialogs. Keeps the internals of other functions squeaky clean.\n\t *\n\t * @param {string} type \"yesNo\" or \"singleInput\"\n\t * @param {object} data Optional params for the dialog call.\n\t * @param {function} responseCallback invoked when the user interacts with the dialog.\n\t */\n\tspawnDialog(type: \"yesNo\" | \"singleInput\", data: any, responseCallback: StandardErrorCallback) {\n\t\tLogger.system.debug(\"spawnDialog\", type, data);\n\t\tif (type === \"singleInput\") {\n\t\t\tdata.showCancelButton = true;\n\t\t}\n\t\tFSBL.Clients.DialogManager.open(type, data, responseCallback);\n\t},\n\n\tspawnSaveAsDialog: (cb: StandardCallback) => {\n\t\tconst onUserInput = (err: StandardError, response: UserInputResponseType) => {\n\t\t\tLogger.system.log(\"SpawnSaveAsDialog onUserInput\", response);\n\t\t\tlet callbackError: Error | null = null;\n\t\t\tif (typeof err === \"string\") {\n\t\t\t\t// Error objects cause async to invoke the final callback in async.waterfall.\n\t\t\t\tcallbackError = new Error(err);\n\t\t\t}\n\t\t\tif (cb) {\n\t\t\t\tcb(callbackError || err, response);\n\t\t\t}\n\t\t};\n\n\t\tconst dialogParams = {\n\t\t\ttitle: \"Enter a name for your new workspace.\",\n\t\t\tinputLabel: \"Enter a name for your new workspace.\",\n\t\t\taffirmativeResponseLabel: \"Confirm\",\n\t\t\tshowCancelButton: false,\n\t\t\tshowNegativeButton: false,\n\t\t};\n\n\t\tActions.spawnDialog(\"singleInput\", dialogParams, onUserInput);\n\t},\n\n\t/**\n\t * Spawns an input field asking what the user would like to name their new workspace.\n\t */\n\tspawnWorkspaceInputField: (cb: StandardCallback) => {\n\t\t// Spawns the dialog with the input field and accepts a callback to be invoked after the user acts.\n\t\tLogger.system.log(\"SpawnWorkspaceInput - start\");\n\t\tconst onUserInput = (err: StandardError, response: UserInputResponseType) => {\n\t\t\tLogger.system.log(\"SpawnWorkspaceInput onUserInput\", response);\n\t\t\tlet callbackError: Error | null = null;\n\t\t\tif (typeof err === \"string\") {\n\t\t\t\t// Error objects cause async to invoke the final callback in async.waterfall.\n\t\t\t\tcallbackError = new Error(err);\n\t\t\t}\n\t\t\tif (cb) {\n\t\t\t\tcb(callbackError || err, response);\n\t\t\t}\n\t\t};\n\n\t\tconst dialogParams = {\n\t\t\ttitle: \"Enter a name for your new workspace.\",\n\t\t\tinputLabel: \"Enter a name for your new workspace.\",\n\t\t\taffirmativeResponseLabel: \"Confirm\",\n\t\t\tshowCancelButton: false,\n\t\t\tshowNegativeButton: false,\n\t\t};\n\n\t\tActions.spawnDialog(\"singleInput\", dialogParams, onUserInput);\n\t},\n\n\t/**\n\t * Asks the user if they'd like to save their workspace if it's different from what's in storage. If the workspace is clean, we just invoke the callback.\n\t */\n\taskIfUserWantsToSave: async function (callback: StandardCallback) {\n\t\tconst activeWorkspace: WorkspaceType = WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\n\t\tif (await FSBL.Clients.WorkspaceClient.isWorkspaceDirty()) {\n\t\t\tLogger.system.log(\"NewWorkspace.spawnDialog start.\");\n\t\t\tconst dialogParams = {\n\t\t\t\tmonitor: \"primary\",\n\t\t\t\ttitle: \"Save your workspace?\",\n\t\t\t\tquestion: `\\\"${activeWorkspace.name}\\\" has unsaved changes. Would you like to save?`,\n\t\t\t\taffirmativeResponseLabel: \"Save\",\n\t\t\t\tnegativeResponseLabel: \"Don't Save\",\n\t\t\t};\n\t\t\tconst waitForUserInput = () =>\n\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\tconst onUserInput = (err: StandardError, response: UserInputResponseType) => {\n\t\t\t\t\t\tLogger.system.log(\"Spawn Dialog callback.\");\n\t\t\t\t\t\tif (callback) callback(null, response);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t};\n\t\t\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\n\t\t\t\t});\n\t\t\treturn await waitForUserInput();\n\t\t} else {\n\t\t\t// In this case the workspace is not dirty, so we don't need to save.\n\t\t\tif (callback) callback(null, { choice: \"negative\" });\n\t\t\treturn { choice: \"negative\" };\n\t\t}\n\t},\n\n\t/**\n\t * Handles the response from the dialog asking if the user wants to save their workspace.\n\t *\n\t * @param {any} response\n\t * @param {any} callback\n\t */\n\thandleSaveDialogResponse(response: UserInputResponseType, callback: StandardErrorCallback) {\n\t\tif (response.choice === \"affirmative\") {\n\t\t\t// User wants to save, so call the client API.\n\t\t\tActions.saveWorkspace(callback);\n\t\t} else if (response.choice === \"negative\") {\n\t\t\t// Doesn't want to save.\n\t\t\tcallback(null);\n\t\t} else {\n\t\t\t// choice === cancel\n\t\t\tcallback(new Error(SAVE_DIALOG_CANCEL_ERROR));\n\t\t}\n\t},\n\t/**\n\t * Makes sure the user has input a valid workspace name.\n\t */\n\tvalidateWorkspaceInput(response: UserInputResponseType, callback: StandardErrorCallback) {\n\t\tLogger.system.log(\"spawnWorkspaceInput\", response);\n\t\t// If user wants to proceed but gave an invalid name, tell them that they messed up, then die.\n\t\tif (response.choice !== \"cancel\" && (!response.value || response.value === \"\")) {\n\t\t\tlet dialogParams = {\n\t\t\t\ttitle: \"Invalid Workspace Name\",\n\t\t\t\tquestion: \"Workspace names must contain letters or numbers. Please try again.\",\n\t\t\t\taffirmativeResponseLabel: \"OK\",\n\t\t\t\tshowNegativeButton: false,\n\t\t\t\tshowCancelButton: false,\n\t\t\t};\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, () => {});\n\t\t\treturn callback(new Error(\"Invalid workspace name.\"));\n\t\t} else if (response.choice === \"cancel\") {\n\t\t\treturn callback(new Error(SAVE_DIALOG_CANCEL_ERROR));\n\t\t}\n\t\tcallback(null, response);\n\t},\n\n\taskAboutOverwrite(params: SaveWorkspaceWaterfallParams, callback: StandardErrorCallback) {\n\t\tconst { workspaceExists, workspaceName } = params;\n\t\tconst dialogParams = {\n\t\t\ttitle: \"Overwrite Workspace?\",\n\t\t\tquestion: `This will overwrite the saved data for \"${workspaceName}\". Would you like to proceed?`,\n\t\t\taffirmativeResponseLabel: \"Overwrite\",\n\t\t\tshowNegativeButton: false,\n\t\t};\n\t\tconst onUserInput = (err: StandardError, response: UserInputResponseType) => {\n\t\t\tif (response.choice === \"affirmative\") {\n\t\t\t\tcallback(null, workspaceName);\n\t\t\t} else {\n\t\t\t\tcallback(new Error(NEGATIVE));\n\t\t\t}\n\t\t};\n\t\tif (workspaceExists) {\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\n\t\t} else {\n\t\t\tcallback(null, workspaceName);\n\t\t}\n\t},\n\taskIfUserWantsNewWorkspace(params: SaveWorkspaceWaterfallParams, callback: StandardErrorCallback) {\n\t\tlet { workspaceExists, workspaceName, template } = params;\n\n\t\tlet dialogParams = {\n\t\t\ttitle: \"New workspace\",\n\t\t\tquestion: `The workspace \"${workspaceName}\" already exists. A new workspace with a modified name will be created.`,\n\t\t\taffirmativeResponseLabel: \"OK\",\n\t\t\tshowNegativeButton: false,\n\t\t};\n\n\t\tfunction onUserInput(err: StandardError, response: UserInputResponseType) {\n\t\t\tif (response.choice === \"affirmative\") {\n\t\t\t\tcallback(null, { workspaceName, template });\n\t\t\t} else {\n\t\t\t\tcallback(new Error(NEGATIVE));\n\t\t\t}\n\t\t}\n\t\tif (workspaceExists) {\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\n\t\t} else {\n\t\t\tcallback(null, { workspaceName, template });\n\t\t}\n\t},\n\n\t/**\n\t * Checks if the workspace exists. If it does, it asks the user if they're comfortable overwriting that data.\n\t */\n\tcheckIfWorkspaceAlreadyExists(response: any, callback: StandardErrorCallback) {\n\t\tconst workspaceName = response.value;\n\t\tconst camelCaseWorkspaceName = Util.camelCase(workspaceName);\n\t\t// Do any of the workspaces have the same name that the user is trying to input.\n\t\tconst workspaceExists = FSBL.Clients.WorkspaceClient.workspaces.some(\n\t\t\t(workspace) => Util.camelCase(workspace) === camelCaseWorkspaceName\n\t\t);\n\t\tcallback(null, {\n\t\t\tworkspaceExists,\n\t\t\tworkspaceName,\n\t\t\ttemplate: response.template,\n\t\t});\n\t},\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tMisc functionality\n\t *\n\t *********************************************************************************************/\n\t/**\n\t * Un-focuses from the menu.\n\t */\n\tblurWindow: function () {\n\t\tfinsembleWindow.blur();\n\t},\n};\n\nfunction createLocalStore(done: () => void) {\n\tStoreClient.createStore(\n\t\t{ store: \"Finsemble-WorkspaceMenu-Local-Store\", values: defaultData },\n\t\t(err: StandardError, store: StoreModel) => {\n\t\t\tWorkspaceManagementStore = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nfunction createGlobalStore(done: () => void) {\n\tStoreClient.createStore(\n\t\t{\n\t\t\tstore: \"Finsemble-WorkspaceMenu-Global-Store\",\n\t\t\tglobal: true,\n\t\t\tvalues: { owner: finsembleWindow.name },\n\t\t},\n\t\t(err: StandardError, store: StoreModel) => {\n\t\t\tWorkspaceManagementGlobalStore = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nfunction getPreferences(done: () => void) {\n\tFSBL.Clients.ConfigClient.getValue(\n\t\t{\n\t\t\tfield: \"finsemble.preferences.workspaceService.promptUserOnDirtyWorkspace\",\n\t\t},\n\t\t(err: StandardError, data?: boolean | null) => {\n\t\t\tlet prompt = data;\n\t\t\t// default to false.\n\t\t\tPROMPT_ON_SAVE = prompt === null || prompt === undefined ? PROMPT_ON_SAVE : prompt;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\n/**\n * Initializes the store for the Workspace Management Menu.\n */\nfunction initialize(cb: any) {\n\tStoreClient = FSBL.Clients.DistributedStoreClient;\n\t// eslint-disable-next-line prefer-destructuring\n\tLogger = FSBL.Clients.Logger;\n\tasync.parallel([createGlobalStore, createLocalStore, getPreferences], () => {\n\t\tActions.initialize();\n\t\tcb(WorkspaceManagementStore);\n\t});\n}\n\nlet getStore = () => WorkspaceManagementStore;\n\n/**\n * This is a quick little initialization manager that Terry hacked up.\n * Ultimately everything in this file should be rewritten in hooks/redux pattern.\n */\nclass StoreManager {\n\tinitialized: boolean;\n\n\tinitializing: boolean;\n\n\tcallbacks: Function[];\n\n\tstore: StoreModel | null;\n\n\tconstructor() {\n\t\tthis.initialized = false;\n\t\tthis.initializing = false;\n\t\tthis.callbacks = [];\n\t\tthis.store = null;\n\t}\n\n\tinitialize() {\n\t\tif (this.initializing) return;\n\t\tthis.initializing = true;\n\t\tinitialize((store: StoreModel) => {\n\t\t\tthis.initialized = true;\n\t\t\tthis.store = store;\n\t\t\tthis.callbacks.forEach((cb) => cb(store));\n\t\t});\n\t}\n\n\taddInitializedListener(cb: (store: StoreModel) => void) {\n\t\tif (this.initialized && this.store !== null) return cb(this.store);\n\t\tthis.callbacks.push(cb);\n\t}\n\n\tremoveInitializedListener(cb: Function) {\n\t\tthis.callbacks = this.callbacks.filter((entry) => entry !== cb);\n\t}\n}\nconst storeManager = new StoreManager();\n\nexport {\n\tstoreManager,\n\tWorkspaceManagementGlobalStore as GlobalStore,\n\tinitialize,\n\tWorkspaceManagementStore as Store,\n\tActions,\n\tgetStore,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"workspaceManagementMenuStore.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n * The workspace management menu may be the most complicated component that we have (other than the toolbar). It isn't because workspace management is particularly difficult, it's because there is a lot of user question and answer going on. We don't want to overwrite data without explicit consent, and so the calls get involved. To simplify the code, we are using the `async` library. If you are unfamiliar with this library, see this link: https://caolan.github.io/async/docs.html\n */\nimport async from \"async\";\nimport { Util } from \"@finsemble/finsemble-api\";\nimport StoreModel from \"@finsemble/finsemble-api/types/clients/StoreModel\";\nimport { StandardCallback, StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport { Workspace as WorkspaceType } from \"@finsemble/finsemble-api/types/common/workspace\";\nimport { types } from \"@finsemble/finsemble-api\";\n\ntype StandardErrorCallback = types.StandardErrorCallback;\n\ntype UserInputResponseType = {\n\tchoice: string;\n\tvalue?: string;\n};\ntype SaveWorkspaceWaterfallParams = {\n\tworkspaceExists: boolean;\n\tworkspaceName: string;\n\ttemplate: any;\n};\n\n// When a user cancels the save workspace dialog, we throw an error, which short-circuits the async call.\nconst SAVE_DIALOG_CANCEL_ERROR = \"Cancel\";\nconst NEGATIVE = \"Negative\";\nlet PROMPT_ON_SAVE = false;\nlet WorkspaceManagementStore: StoreModel;\nlet StoreClient: any;\nlet Logger: any;\nlet WorkspaceManagementGlobalStore: StoreModel;\n\n// Initial data for the store.\nconst defaultData = {\n\tactiveWorkspace: {},\n\tmenuWidth: 285,\n\tWorkspaceList: [],\n\tnewWorkspaceDialogIsActive: false,\n\t/**\n\t * State around whether the workspace is currently in the process of switching.\n\t *\n\t * For simplicity, we're storing this in the local store for now, but this precludes\n\t * other components from signaling that the workspace is changing. A consequence,\n\t * for example, is that if you switch workspaces uses a pin on the toolbar instead\n\t * of the workspace management menu, the spinner doesn't show up.\n\t */\n\tisSwitchingWorkspaces: false,\n\tisPromptingUser: false,\n};\n\nconst Actions = {\n\tautoSave: (callback: StandardCallback) => {\n\t\tconst activeName = FSBL.Clients.WorkspaceClient.activeWorkspace?.name;\n\t\tif (!PROMPT_ON_SAVE) {\n\t\t\tFSBL.Clients.WorkspaceClient.saveAs(\n\t\t\t\t{\n\t\t\t\t\tname: activeName,\n\t\t\t\t\tforce: true,\n\t\t\t\t},\n\t\t\t\t(err: StandardError) => {\n\t\t\t\t\tcallback(err);\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tcallback(null);\n\t\t}\n\t},\n\tinitialize: () => {\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\tLogger.system.debug(\"WorkspaceManagementStore init getWorkspaces\", workspaces);\n\t\t\tWorkspaceManagementStore.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. I could have iterated through the workspaces above and found the active one, but this seems simpler.\n\t\tFSBL.Clients.WorkspaceClient.getActiveWorkspace(\n\t\t\t(err: StandardError, activeWorkspace: { data: WorkspaceType } | undefined) => {\n\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore init getActiveWorkspace\", activeWorkspace);\n\t\t\t\tWorkspaceManagementStore.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,\n\t\t * we receive a `response`, instead of `workspaces` or `activeWorkspace`. This is because this callback is for\n\t\t * a `RouterClient` message. The functions above are callbacks to `WorkspaceClient` API calls.\n\t\t */\n\t\tFSBL.Clients.RouterClient.subscribe(\"Finsemble.WorkspaceService.update\", (err, response) => {\n\t\t\tif (response.data && response.data.activeWorkspace) {\n\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore init update\", response.data);\n\t\t\t\tWorkspaceManagementStore.setValue({\n\t\t\t\t\tfield: \"activeWorkspace\",\n\t\t\t\t\tvalue: response.data.activeWorkspace,\n\t\t\t\t});\n\t\t\t\tWorkspaceManagementStore.setValue({\n\t\t\t\t\tfield: \"WorkspaceList\",\n\t\t\t\t\tvalue: response.data.workspacesConfig,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tWorkspaceManagementGlobalStore.getValue({ field: \"owner\" }, (err: StandardError, data?: string) => {\n\t\t\tif (data !== finsembleWindow.name) return;\n\t\t\tWorkspaceManagementGlobalStore.Dispatcher.register((action) => {\n\t\t\t\tswitch (action.actionType) {\n\t\t\t\t\tcase \"switchToWorkspace\":\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore switchToWorkspace\", action.data);\n\t\t\t\t\t\tActions.switchToWorkspace(action.data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"reorderWorkspace\":\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore reorderWorkspace\", action.data);\n\t\t\t\t\t\tActions.reorderWorkspaceList(action.data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"removeWorkspace\":\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore removeWorkspace\", action.data);\n\t\t\t\t\t\tActions.removeWorkspace(\n\t\t\t\t\t\t\taction.data as {\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\thideModalOnClose: boolean;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"renameWorkspace\":\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore renameWorkspace\", action.data);\n\t\t\t\t\t\tActions.renameWorkspace(action.data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// Nothing to do here\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tGETTERS/SETTERS\n\t *\n\t *********************************************************************************************/\n\tgetActiveWorkspace: () => WorkspaceManagementStore.getValue(\"activeWorkspace\") as WorkspaceType,\n\n\t// Get the name of the workspace that is currently being edited\n\tgetWorkspaceBeingEdited: () => WorkspaceManagementStore.getValue(\"workspaceBeingEdited\") as string,\n\n\tgetWorkspaceList: () => WorkspaceManagementStore.getValue(\"WorkspaceList\") as WorkspaceType[],\n\n\tgetIsSwitchingWorkspaces: () => WorkspaceManagementStore.getValue(\"isSwitchingWorkspaces\") as boolean,\n\n\tsetIsSwitchingWorkspaces: (val: boolean) =>\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"isSwitchingWorkspaces\",\n\t\t\tvalue: val,\n\t\t}),\n\n\tgetIsPromptingUser: () => WorkspaceManagementStore.getValue(\"isPromptingUser\") as boolean,\n\n\tsetIsPromptingUser: (val: boolean) =>\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"isPromptingUser\",\n\t\t\tvalue: val,\n\t\t}),\n\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tMain Workspace Actions\n\t *\n\t *********************************************************************************************/\n\n\t/**\n\t * Handles the complete workflow for creating a new workspace.\n\t * We make sure the user doesn't lose any unsaved work, ask them to name it, make sure that workspace doesn't already exist, then actually save the new workspace. After that, we fire off a notification to let them know that everything was a great success.\n\t */\n\tnewWorkspace: function () {\n\t\tlet newWorkspaceName: string;\n\t\tLogger.system.log(\"New workspace - start.\");\n\t\tconst newWorkspaceDialogIsActive = WorkspaceManagementStore.getValue(\"newWorkspaceDialogIsActive\");\n\n\t\ttype createItParams = {\n\t\t\tworkspaceName: string;\n\t\t};\n\t\t// Creates the new workspace.\n\t\tconst createIt = (params: createItParams, cb?: StandardCallback) => {\n\t\t\tLogger.system.log(\"createIt\", params);\n\t\t\tconst { workspaceName } = params;\n\t\t\tFSBL.Clients.WorkspaceClient.createNewWorkspace(workspaceName, {}, (err, response) => {\n\t\t\t\tLogger.system.log(\"createIt createNewWorkspace response\", workspaceName, response);\n\t\t\t\tnewWorkspaceName = response.workspaceName;\n\t\t\t\tif (cb) {\n\t\t\t\t\tcb(null, newWorkspaceName);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tif (!newWorkspaceDialogIsActive) {\n\t\t\tWorkspaceManagementStore.setValue({\n\t\t\t\tfield: \"newWorkspaceDialogIsActive\",\n\t\t\t\tvalue: true,\n\t\t\t});\n\t\t}\n\n\t\tActions.blurWindow();\n\t\tlet tasks: Function[] = [\n\t\t\tActions.autoSave,\n\t\t\tActions.spawnWorkspaceInputField,\n\t\t\tActions.validateWorkspaceInput,\n\t\t\tActions.checkIfWorkspaceAlreadyExists,\n\t\t\tActions.askIfUserWantsNewWorkspace,\n\t\t\tcreateIt,\n\t\t];\n\t\tif (PROMPT_ON_SAVE) {\n\t\t\ttasks = ([Actions.askIfUserWantsToSave, Actions.handleSaveDialogResponse] as Function[]).concat(tasks);\n\t\t}\n\t\tasync.waterfall(tasks, Actions.onAsyncComplete);\n\t},\n\n\t/**\n\t * Handles the workflow for removing a workspace.\n\t * As long as you are not deleting the workspace that is active, it will pop up a confirm dialog,\n\t * and if the user says \"yes\", it will delete the workspace.\n\t */\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tremoveWorkspace: (data: { name: string; hideModalOnClose?: boolean }, cb = (val: any) => {}) => {\n\t\tconst workspaceName = data.name;\n\n\t\tconst dialogParams = {\n\t\t\ttitle: \"Delete this workspace?\",\n\t\t\tquestion: `Are you sure you want to delete the workspace \"${workspaceName}\"?`,\n\t\t\tshowNegativeButton: false,\n\t\t\taffirmativeResponseLabel: \"Delete\",\n\t\t\thideModalOnClose: data.hideModalOnClose,\n\t\t};\n\n\t\t/**\n\t\t * Invoked when the user interacts with the dialog.\n\t\t */\n\t\tfunction onUserInput(err: StandardError, response: UserInputResponseType) {\n\t\t\tif (response.choice === \"affirmative\") {\n\t\t\t\tcb(true);\n\t\t\t\tFSBL.Clients.WorkspaceClient.remove({\n\t\t\t\t\tname: workspaceName,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcb(false);\n\t\t\t}\n\t\t}\n\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\n\t},\n\t/**\n\t * The `activeWorkspace` is simply a copy of something we brought out of storage. This function copies the `activeWorkspace` to back to storage.\n\t */\n\tsaveWorkspace: (cb?: StandardErrorCallback) => {\n\t\tconst activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\t\tFSBL.Clients.WorkspaceClient.saveAs(\n\t\t\t{\n\t\t\t\tforce: true,\n\t\t\t\tname: activeWorkspace.name,\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tcb?.(null);\n\t\t\t}\n\t\t);\n\t},\n\treorderWorkspaceList: ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\tlet workspaces: WorkspaceType[] = WorkspaceManagementStore.getValue<WorkspaceType[]>({\n\t\t\tfield: \"WorkspaceList\",\n\t\t});\n\t\tconst workspaceToMove = workspaces[oldIndex];\n\t\tworkspaces.splice(oldIndex, 1);\n\t\tworkspaces.splice(newIndex, 0, workspaceToMove);\n\t\tconst workspacesWithExpectedStructure = workspaces.map((WSName) => {\n\t\t\treturn {\n\t\t\t\tname: WSName,\n\t\t\t};\n\t\t});\n\t\tFSBL.Clients.WorkspaceClient.setWorkspaces(\n\t\t\t{\n\t\t\t\tworkspaces: workspacesWithExpectedStructure,\n\t\t\t},\n\t\t\t() => {}\n\t\t);\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"WorkspaceList\",\n\t\t\tvalue: workspaces,\n\t\t});\n\t},\n\trenameWorkspace: ({ oldName, newName }: { oldName: string; newName: string }) => {\n\t\t// Note: This does no checking of the workspace before renaming. If you call this function, and `newName` is an existing\n\t\t// workspace name, the existing workspace will get stomped. Currently, the UI prevents renaming to existing names.\n\t\tFSBL.Clients.WorkspaceClient.rename({\n\t\t\toldName: oldName,\n\t\t\tnewName: newName,\n\t\t\tremoveOldWorkspace: true,\n\t\t\toverwriteExisting: true,\n\t\t});\n\t},\n\n\tshowPreferences: () => {\n\t\tFSBL.Clients.LauncherClient.showWindow(\n\t\t\t{\n\t\t\t\tcomponentType: \"UserPreferences\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmonitor: \"mine\",\n\t\t\t\tleft: \"center\",\n\t\t\t\ttop: \"center\",\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * Ask the user for a name, make sure it doesn't already exist, then save.\n\t */\n\tsaveWorkspaceAs: () => {\n\t\tfunction saveIt(workspaceName: string, callback: StandardErrorCallback) {\n\t\t\tFSBL.Clients.WorkspaceClient.saveAs(\n\t\t\t\t{\n\t\t\t\t\tname: workspaceName,\n\t\t\t\t\tforce: true,\n\t\t\t\t},\n\t\t\t\t(err: StandardError, response: any) => {\n\t\t\t\t\tcallback(err, response);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tLogger.system.log(\"SaveWorkspaceAs clicked.\");\n\n\t\tasync.waterfall(\n\t\t\t[\n\t\t\t\tActions.autoSave,\n\t\t\t\tActions.spawnSaveAsDialog,\n\t\t\t\tActions.validateWorkspaceInput,\n\t\t\t\tActions.checkIfWorkspaceAlreadyExists,\n\t\t\t\tActions.askAboutOverwrite,\n\t\t\t\tsaveIt,\n\t\t\t],\n\t\t\tActions.onAsyncComplete\n\t\t);\n\t},\n\n\t/**\n\t * Asks the user if they'd like to save their data, then loads the requested workspace.\n\t */\n\tswitchToWorkspace: async function ({ name }: { name: string }) {\n\t\t// if a workspace prompt is outstanding for a previous switch, immediately return to lock out user from doing another switch (until responding to prompt);\n\t\t// note this prompting flag is cleared in Actions.onAsyncComplete when the previous switch completes (after user responds to the prompt)\n\t\tconst prompting = Actions.getIsPromptingUser();\n\t\tLogger.system.log(\"workspaceManagementMenuStore: switchToWorkspace\", prompting ? \"prompting\" : \"not-prompting\");\n\t\tif (prompting) return;\n\n\t\tActions.setIsSwitchingWorkspaces(true);\n\t\tActions.blurWindow();\n\t\tconst activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\n\t\t/**\n\t\t * Actually perform the switch. Happens after we ask the user what they want.\n\t\t *\n\t\t */\n\t\tconst switchWorkspace = (callback = () => {}) => {\n\t\t\tFSBL.Clients.WorkspaceClient.switchTo(\n\t\t\t\t{\n\t\t\t\t\tname: name,\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tActions.setIsSwitchingWorkspaces(false);\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\n\t\t/**\n\t\t * Make sure the user is sure\n\t\t */\n\t\tconst askAboutReload = (callback: () => void) => {\n\t\t\tActions.spawnDialog(\n\t\t\t\t\"yesNo\",\n\t\t\t\t{\n\t\t\t\t\tmonitor: \"primary\",\n\t\t\t\t\ttitle: \"Save your workspace?\",\n\t\t\t\t\tquestion: `\\\"${activeWorkspace.name}\\\" has unsaved changes. Would you like to save?`,\n\t\t\t\t\taffirmativeResponseLabel: \"Save\",\n\t\t\t\t\tnegativeResponseLabel: \"Don't Save\",\n\t\t\t\t},\n\t\t\t\tcallback\n\t\t\t);\n\t\t};\n\n\t\t/**\n\t\t * If the workspace is dirty, we need to do more than if it's clean.\n\t\t * We don't want users to lose unsaved work.\n\t\t */\n\t\tif (await FSBL.Clients.WorkspaceClient.isWorkspaceDirty()) {\n\t\t\tlet tasks: Function[] = [];\n\n\t\t\tActions.setIsPromptingUser(true);\n\t\t\tlet firstMethod: Function = Actions.autoSave,\n\t\t\t\tsecondMethod = null;\n\n\t\t\tif (PROMPT_ON_SAVE === true) {\n\t\t\t\t// We want to ask the user to save. But if they're trying to reload the workspace,\n\t\t\t\t// the message needs to be different. The first if block just switches that method.\n\t\t\t\tfirstMethod = Actions.askIfUserWantsToSave;\n\t\t\t\tif (name === FSBL.Clients.WorkspaceClient.activeWorkspace?.name) {\n\t\t\t\t\tfirstMethod = askAboutReload;\n\t\t\t\t}\n\n\t\t\t\t// If we are not autosaving, we need to process the dialog input.\n\t\t\t\tsecondMethod = Actions.handleSaveDialogResponse;\n\t\t\t}\n\n\t\t\t// Build the task list.\n\t\t\ttasks = [firstMethod];\n\n\t\t\tif (secondMethod) {\n\t\t\t\ttasks.push(secondMethod);\n\t\t\t}\n\n\t\t\t// Switch is the last thing we do.\n\t\t\ttasks.push(switchWorkspace);\n\n\t\t\tasync.waterfall(tasks, Actions.onAsyncComplete);\n\t\t} else {\n\t\t\tswitchWorkspace();\n\t\t}\n\t},\n\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tWorkspace Management Helpers\n\t *\n\t *********************************************************************************************/\n\n\t/**\n\t * General handler for `async.series` and `async.waterfall`\n\t */\n\tonAsyncComplete(err?: Error | null) {\n\t\tLogger.system.debug(\"workspaceManagementMenuStore: onAsyncComplete\");\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"newWorkspaceDialogIsActive\",\n\t\t\tvalue: false,\n\t\t});\n\t\tconst errMessage = err?.message;\n\t\tif (errMessage && errMessage !== NEGATIVE && errMessage !== SAVE_DIALOG_CANCEL_ERROR) {\n\t\t\t// handle error.\n\t\t\tLogger.system.error(err);\n\t\t}\n\n\t\t// Unlock the UI.\n\t\tActions.setIsSwitchingWorkspaces(false);\n\t\tActions.setIsPromptingUser(false);\n\t},\n\n\t/**\n\t * Helper for spawning dialogs. Keeps the internals of other functions squeaky clean.\n\t *\n\t * @param {string} type \"yesNo\" or \"singleInput\"\n\t * @param {object} data Optional params for the dialog call.\n\t * @param {function} responseCallback invoked when the user interacts with the dialog.\n\t */\n\tspawnDialog(type: \"yesNo\" | \"singleInput\", data: any, responseCallback: StandardErrorCallback) {\n\t\tLogger.system.debug(\"spawnDialog\", type, data);\n\t\tif (type === \"singleInput\") {\n\t\t\tdata.showCancelButton = true;\n\t\t}\n\t\tFSBL.Clients.DialogManager.open(type, data, responseCallback);\n\t},\n\n\tspawnSaveAsDialog: (cb: StandardCallback) => {\n\t\tconst onUserInput = (err: StandardError, response: UserInputResponseType) => {\n\t\t\tLogger.system.log(\"SpawnSaveAsDialog onUserInput\", response);\n\t\t\tlet callbackError: Error | null = null;\n\t\t\tif (typeof err === \"string\") {\n\t\t\t\t// Error objects cause async to invoke the final callback in async.waterfall.\n\t\t\t\tcallbackError = new Error(err);\n\t\t\t}\n\t\t\tif (cb) {\n\t\t\t\tcb(callbackError || err, response);\n\t\t\t}\n\t\t};\n\n\t\tconst dialogParams = {\n\t\t\ttitle: \"Enter a name for your new workspace.\",\n\t\t\tinputLabel: \"Enter a name for your new workspace.\",\n\t\t\taffirmativeResponseLabel: \"Confirm\",\n\t\t\tshowCancelButton: false,\n\t\t\tshowNegativeButton: false,\n\t\t};\n\n\t\tActions.spawnDialog(\"singleInput\", dialogParams, onUserInput);\n\t},\n\n\t/**\n\t * Spawns an input field asking what the user would like to name their new workspace.\n\t */\n\tspawnWorkspaceInputField: (cb: StandardCallback) => {\n\t\t// Spawns the dialog with the input field and accepts a callback to be invoked after the user acts.\n\t\tLogger.system.log(\"SpawnWorkspaceInput - start\");\n\t\tconst onUserInput = (err: StandardError, response: UserInputResponseType) => {\n\t\t\tLogger.system.log(\"SpawnWorkspaceInput onUserInput\", response);\n\t\t\tlet callbackError: Error | null = null;\n\t\t\tif (typeof err === \"string\") {\n\t\t\t\t// Error objects cause async to invoke the final callback in async.waterfall.\n\t\t\t\tcallbackError = new Error(err);\n\t\t\t}\n\t\t\tif (cb) {\n\t\t\t\tcb(callbackError || err, response);\n\t\t\t}\n\t\t};\n\n\t\tconst dialogParams = {\n\t\t\ttitle: \"Enter a name for your new workspace.\",\n\t\t\tinputLabel: \"Enter a name for your new workspace.\",\n\t\t\taffirmativeResponseLabel: \"Confirm\",\n\t\t\tshowCancelButton: false,\n\t\t\tshowNegativeButton: false,\n\t\t};\n\n\t\tActions.spawnDialog(\"singleInput\", dialogParams, onUserInput);\n\t},\n\n\t/**\n\t * Asks the user if they'd like to save their workspace if it's different from what's in storage. If the workspace is clean, we just invoke the callback.\n\t */\n\taskIfUserWantsToSave: async function (callback: StandardCallback) {\n\t\tconst activeWorkspace: WorkspaceType = WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\n\t\tif (await FSBL.Clients.WorkspaceClient.isWorkspaceDirty()) {\n\t\t\tLogger.system.log(\"NewWorkspace.spawnDialog start.\");\n\t\t\tconst dialogParams = {\n\t\t\t\tmonitor: \"primary\",\n\t\t\t\ttitle: \"Save your workspace?\",\n\t\t\t\tquestion: `\\\"${activeWorkspace.name}\\\" has unsaved changes. Would you like to save?`,\n\t\t\t\taffirmativeResponseLabel: \"Save\",\n\t\t\t\tnegativeResponseLabel: \"Don't Save\",\n\t\t\t};\n\t\t\tconst waitForUserInput = () =>\n\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\tconst onUserInput = (err: StandardError, response: UserInputResponseType) => {\n\t\t\t\t\t\tLogger.system.log(\"Spawn Dialog callback.\");\n\t\t\t\t\t\tif (callback) callback(null, response);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t};\n\t\t\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\n\t\t\t\t});\n\t\t\treturn await waitForUserInput();\n\t\t} else {\n\t\t\t// In this case the workspace is not dirty, so we don't need to save.\n\t\t\tif (callback) callback(null, { choice: \"negative\" });\n\t\t\treturn { choice: \"negative\" };\n\t\t}\n\t},\n\n\t/**\n\t * Handles the response from the dialog asking if the user wants to save their workspace.\n\t *\n\t * @param {any} response\n\t * @param {any} callback\n\t */\n\thandleSaveDialogResponse(response: UserInputResponseType, callback: StandardErrorCallback) {\n\t\tif (response.choice === \"affirmative\") {\n\t\t\t// User wants to save, so call the client API.\n\t\t\tActions.saveWorkspace(callback);\n\t\t} else if (response.choice === \"negative\") {\n\t\t\t// Doesn't want to save.\n\t\t\tcallback(null);\n\t\t} else {\n\t\t\t// choice === cancel\n\t\t\tcallback(new Error(SAVE_DIALOG_CANCEL_ERROR));\n\t\t}\n\t},\n\t/**\n\t * Makes sure the user has input a valid workspace name.\n\t */\n\tvalidateWorkspaceInput(response: UserInputResponseType, callback: StandardErrorCallback) {\n\t\tLogger.system.log(\"spawnWorkspaceInput\", response);\n\t\t// If user wants to proceed but gave an invalid name, tell them that they messed up, then die.\n\t\tif (response.choice !== \"cancel\" && (!response.value || response.value === \"\")) {\n\t\t\tlet dialogParams = {\n\t\t\t\ttitle: \"Invalid Workspace Name\",\n\t\t\t\tquestion: \"Workspace names must contain letters or numbers. Please try again.\",\n\t\t\t\taffirmativeResponseLabel: \"OK\",\n\t\t\t\tshowNegativeButton: false,\n\t\t\t\tshowCancelButton: false,\n\t\t\t};\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, () => {});\n\t\t\treturn callback(new Error(\"Invalid workspace name.\"));\n\t\t} else if (response.choice === \"cancel\") {\n\t\t\treturn callback(new Error(SAVE_DIALOG_CANCEL_ERROR));\n\t\t}\n\t\tcallback(null, response);\n\t},\n\n\taskAboutOverwrite(params: SaveWorkspaceWaterfallParams, callback: StandardErrorCallback) {\n\t\tconst { workspaceExists, workspaceName } = params;\n\t\tconst dialogParams = {\n\t\t\ttitle: \"Overwrite Workspace?\",\n\t\t\tquestion: `This will overwrite the saved data for \"${workspaceName}\". Would you like to proceed?`,\n\t\t\taffirmativeResponseLabel: \"Overwrite\",\n\t\t\tshowNegativeButton: false,\n\t\t};\n\t\tconst onUserInput = (err: StandardError, response: UserInputResponseType) => {\n\t\t\tif (response.choice === \"affirmative\") {\n\t\t\t\tcallback(null, workspaceName);\n\t\t\t} else {\n\t\t\t\tcallback(new Error(NEGATIVE));\n\t\t\t}\n\t\t};\n\t\tif (workspaceExists) {\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\n\t\t} else {\n\t\t\tcallback(null, workspaceName);\n\t\t}\n\t},\n\taskIfUserWantsNewWorkspace(params: SaveWorkspaceWaterfallParams, callback: StandardErrorCallback) {\n\t\tlet { workspaceExists, workspaceName, template } = params;\n\n\t\tlet dialogParams = {\n\t\t\ttitle: \"New workspace\",\n\t\t\tquestion: `The workspace \"${workspaceName}\" already exists. A new workspace with a modified name will be created.`,\n\t\t\taffirmativeResponseLabel: \"OK\",\n\t\t\tshowNegativeButton: false,\n\t\t};\n\n\t\tfunction onUserInput(err: StandardError, response: UserInputResponseType) {\n\t\t\tif (response.choice === \"affirmative\") {\n\t\t\t\tcallback(null, { workspaceName, template });\n\t\t\t} else {\n\t\t\t\tcallback(new Error(NEGATIVE));\n\t\t\t}\n\t\t}\n\t\tif (workspaceExists) {\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\n\t\t} else {\n\t\t\tcallback(null, { workspaceName, template });\n\t\t}\n\t},\n\n\t/**\n\t * Checks if the workspace exists. If it does, it asks the user if they're comfortable overwriting that data.\n\t */\n\tcheckIfWorkspaceAlreadyExists(response: any, callback: StandardErrorCallback) {\n\t\tconst workspaceName = response.value;\n\t\tconst camelCaseWorkspaceName = Util.camelCase(workspaceName);\n\t\t// Do any of the workspaces have the same name that the user is trying to input.\n\t\tconst workspaceExists = FSBL.Clients.WorkspaceClient.workspaces.some(\n\t\t\t(workspace) => Util.camelCase(workspace) === camelCaseWorkspaceName\n\t\t);\n\t\tcallback(null, {\n\t\t\tworkspaceExists,\n\t\t\tworkspaceName,\n\t\t\ttemplate: response.template,\n\t\t});\n\t},\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tMisc functionality\n\t *\n\t *********************************************************************************************/\n\t/**\n\t * Un-focuses from the menu.\n\t */\n\tblurWindow: function () {\n\t\tfinsembleWindow.blur();\n\t},\n};\n\nfunction createLocalStore(done: () => void) {\n\tStoreClient.createStore(\n\t\t{ store: \"Finsemble-WorkspaceMenu-Local-Store\", values: defaultData },\n\t\t(err: StandardError, store: StoreModel) => {\n\t\t\tWorkspaceManagementStore = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nfunction createGlobalStore(done: () => void) {\n\tStoreClient.createStore(\n\t\t{\n\t\t\tstore: \"Finsemble-WorkspaceMenu-Global-Store\",\n\t\t\tglobal: true,\n\t\t\tvalues: { owner: finsembleWindow.name },\n\t\t},\n\t\t(err: StandardError, store: StoreModel) => {\n\t\t\tWorkspaceManagementGlobalStore = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nfunction getPreferences(done: () => void) {\n\tFSBL.Clients.ConfigClient.getValue(\n\t\t{\n\t\t\tfield: \"finsemble.preferences.workspaceService.promptUserOnDirtyWorkspace\",\n\t\t},\n\t\t(err: StandardError, data?: boolean | null) => {\n\t\t\tlet prompt = data;\n\t\t\t// default to false.\n\t\t\tPROMPT_ON_SAVE = prompt === null || prompt === undefined ? PROMPT_ON_SAVE : prompt;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\n/**\n * Initializes the store for the Workspace Management Menu.\n */\nfunction initialize(cb: any) {\n\tStoreClient = FSBL.Clients.DistributedStoreClient;\n\t// eslint-disable-next-line prefer-destructuring\n\tLogger = FSBL.Clients.Logger;\n\tasync.parallel([createGlobalStore, createLocalStore, getPreferences], () => {\n\t\tActions.initialize();\n\t\tcb(WorkspaceManagementStore);\n\t});\n}\n\nlet getStore = () => WorkspaceManagementStore;\n\n/**\n * This is a quick little initialization manager that Terry hacked up.\n * Ultimately everything in this file should be rewritten in hooks/redux pattern.\n */\nclass StoreManager {\n\tinitialized: boolean;\n\n\tinitializing: boolean;\n\n\tcallbacks: Function[];\n\n\tstore: StoreModel | null;\n\n\tconstructor() {\n\t\tthis.initialized = false;\n\t\tthis.initializing = false;\n\t\tthis.callbacks = [];\n\t\tthis.store = null;\n\t}\n\n\tinitialize() {\n\t\tif (this.initializing) return;\n\t\tthis.initializing = true;\n\t\tinitialize((store: StoreModel) => {\n\t\t\tthis.initialized = true;\n\t\t\tthis.store = store;\n\t\t\tthis.callbacks.forEach((cb) => cb(store));\n\t\t});\n\t}\n\n\taddInitializedListener(cb: (store: StoreModel) => void) {\n\t\tif (this.initialized && this.store !== null) return cb(this.store);\n\t\tthis.callbacks.push(cb);\n\t}\n\n\tremoveInitializedListener(cb: Function) {\n\t\tthis.callbacks = this.callbacks.filter((entry) => entry !== cb);\n\t}\n}\nconst storeManager = new StoreManager();\n\nexport {\n\tstoreManager,\n\tWorkspaceManagementGlobalStore as GlobalStore,\n\tinitialize,\n\tWorkspaceManagementStore as Store,\n\tActions,\n\tgetStore,\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { StandardError } from "@finsemble/finsemble-
|
|
2
|
+
import { StandardError } from "@finsemble/finsemble-api/types/types";
|
|
3
3
|
import { Workspace, WorkspaceTemplate } from "../../../../types/workspaceTypes";
|
|
4
4
|
interface IProps {
|
|
5
5
|
addListener: (fieldListener: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import async from "async";
|
|
3
|
-
import { Util } from "@finsemble/finsemble-
|
|
3
|
+
import { Util } from "@finsemble/finsemble-api";
|
|
4
4
|
import { Actions as WorkspaceManagementMenuActions } from "../../../toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore";
|
|
5
5
|
import { WorkspaceManagementMenuStore } from "../../stores/UserPreferencesStore";
|
|
6
6
|
import { Checkbox } from "../../../common/Checkbox";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workspaces.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/content/Workspaces.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport async from \"async\";\nimport { Util } from \"@finsemble/finsemble-core\";\nimport { StandardError } from \"@finsemble/finsemble-core/types/types\";\nimport { Actions as WorkspaceManagementMenuActions } from \"../../../toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore\";\nimport { WorkspaceManagementMenuStore } from \"../../stores/UserPreferencesStore\";\nimport { Checkbox } from \"../../../common/Checkbox\";\nimport { WorkspaceButton } from \"../workspaces/WorkspaceButton\";\nimport WorkspaceComponents from \"../workspaces/WorkspaceComponents\";\nimport WorkspaceItemList from \"../workspaces/WorkspaceItemList\";\nimport { Workspace, ImportWorkspace, WorkspaceTemplate } from \"../../../../types/workspaceTypes\";\n\ninterface IProps {\n\taddListener: (fieldListener: { field: string }, cb: (err: StandardError, data: any) => void) => void;\n\tgetValue: (fieldName: { field: string }, cb: (err: StandardError, data: Workspace[]) => void) => void;\n\tremoveListener: (fieldName: { field: string }, cb: (err: StandardError, data: any) => void) => void;\n}\n\ninterface IState {\n\tinitialAlwaysOnTop: boolean;\n\talwaysOnTop: boolean;\n\tworkspaceList: Workspace[];\n\tfocusedWorkspace: string;\n\tediting: boolean;\n\tworkspaceBeingEdited: string;\n\ttemplateName: string;\n\tadding: boolean;\n\tworkspaceToLoadOnStart: string | null;\n\tfocusedWorkspaceComponentList: string[];\n}\nexport default class Workspaces extends React.Component<IProps, IState> {\n\taddWorkspace?: () => void;\n\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tadding: false,\n\t\t\tediting: false,\n\t\t\tworkspaceList: [],\n\t\t\tfocusedWorkspace: \"\",\n\t\t\tworkspaceToLoadOnStart: null,\n\t\t\ttemplateName: \"\",\n\t\t\tworkspaceBeingEdited: \"\",\n\t\t\tfocusedWorkspaceComponentList: [],\n\t\t\tinitialAlwaysOnTop: finsembleWindow.windowOptions?.alwaysOnTop,\n\t\t\talwaysOnTop: finsembleWindow.windowOptions?.alwaysOnTop,\n\t\t};\n\t\tthis.bindCorrectContext();\n\t\tthis.addListeners();\n\t}\n\n\tresetState() {\n\t\tthis.setState({\n\t\t\tadding: false,\n\t\t\tediting: false,\n\t\t\tfocusedWorkspace: \"\",\n\t\t\ttemplateName: \"\",\n\t\t\tworkspaceBeingEdited: \"\",\n\t\t});\n\t}\n\n\tbindCorrectContext() {\n\t\tthis.deleteWorkspace = this.deleteWorkspace.bind(this);\n\t\tthis.addListeners = this.addListeners.bind(this);\n\t\tthis.setWorkspaceList = this.setWorkspaceList.bind(this);\n\t\tthis.onDragEnd = this.onDragEnd.bind(this);\n\t\tthis.startEditingWorkspace = this.startEditingWorkspace.bind(this);\n\t\tthis.renameWorkspace = this.renameWorkspace.bind(this);\n\t\tthis.cancelEdit = this.cancelEdit.bind(this);\n\t\tthis.setWorkspaceToLoadOnStart = this.setWorkspaceToLoadOnStart.bind(this);\n\t\tthis.setPreferences = this.setPreferences.bind(this);\n\t\tthis.exportWorkspace = this.exportWorkspace.bind(this);\n\t\tthis.handleButtonClicks = this.handleButtonClicks.bind(this);\n\t\tthis.getFocusedWorkspaceComponentList = this.getFocusedWorkspaceComponentList.bind(this);\n\t\tthis.changePreferencesAlwaysOnTop = this.changePreferencesAlwaysOnTop.bind(this);\n\t\tthis.openFileDialog = this.openFileDialog.bind(this);\n\t\tthis.preferencesFocused = this.preferencesFocused.bind(this);\n\t\tthis.setFocusedWorkspace = this.setFocusedWorkspace.bind(this);\n\t}\n\n\tsetWorkspaceList(err: StandardError, data: { value: Workspace[] }) {\n\t\tconsole.log(\"Set workspacelist\", data);\n\t\tif (!data) return;\n\t\tthis.setState({\n\t\t\tworkspaceList: data.value,\n\t\t});\n\t}\n\n\taddListeners() {\n\t\tthis.props.addListener({ field: \"WorkspaceList\" }, this.setWorkspaceList);\n\t}\n\n\t/**\n\t * Sets the windowOptions.alwaysOnTop to the value supplied. The preferences component should\n\t * not be always on top when a file dialog is open.\n\t * @param {boolean} alwaysOnTop The value to set finsembleWindow.options.alwaysOnTop\n\t */\n\tchangePreferencesAlwaysOnTop(alwaysOnTop: boolean) {\n\t\t// The initialAlwaysOnTop check is to prevent making a component be alwaysOnTop when the\n\t\t// client may have set it to alwaysOnTop:false in the config. If that's the case, it should\n\t\t// never set its alwaysOnTop to true and should always remain unchanged\n\t\tif (this.state.initialAlwaysOnTop && FSBL.System.container() === \"Electron\") {\n\t\t\tFSBL.Clients.WindowClient.setAlwaysOnTop(alwaysOnTop, () => {\n\t\t\t\tthis.setState({\n\t\t\t\t\talwaysOnTop,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tonDragEnd({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) {\n\t\tlet workspaces = JSON.parse(JSON.stringify(this.state.workspaceList));\n\t\tlet workspaceToMove = JSON.parse(JSON.stringify(workspaces[oldIndex]));\n\t\tworkspaces.splice(oldIndex, 1);\n\t\tworkspaces.splice(newIndex, 0, workspaceToMove);\n\t\tthis.setState({\n\t\t\tworkspaceList: workspaces,\n\t\t});\n\t\tWorkspaceManagementMenuStore?.Dispatcher.dispatch({\n\t\t\tactionType: \"reorderWorkspace\",\n\t\t\tdata: { oldIndex, newIndex },\n\t\t});\n\t}\n\n\t// returns all the component types of a template definition to display to user for additional info. If multiple components with same type, then instead of listing each\n\t// individually, only one entry will be returned with the count in parentheses.\n\tgetComponentTypes(templateObject: WorkspaceTemplate) {\n\t\tFSBL.Clients.Logger.system.debug(\"getComponentTypes templateObject\", templateObject);\n\t\tlet componentType: string;\n\t\tlet componentMap: { [key: string]: number } = {};\n\t\tlet annotatedComponentList = [];\n\t\tfor (let i = 0; i < templateObject.windows.length; i++) {\n\t\t\tlet windowData = templateObject.windowData[i];\n\t\t\tFSBL.Clients.Logger.system.debug(\"getComponentTypes loop\", windowData);\n\t\t\tcomponentType = \"Unknown Component\";\n\t\t\tif (windowData) {\n\t\t\t\t// current assimilation doesn't fill in windowData, so in this case use \"Unknown Component\" for component type\n\t\t\t\tcomponentType = windowData.componentType || windowData.customData.component.type;\n\t\t\t} else {\n\t\t\t\tcomponentType = \"Unknown Component\";\n\t\t\t}\n\t\t\tif (!componentMap[componentType]) {\n\t\t\t\tcomponentMap[componentType] = 1;\n\t\t\t} else {\n\t\t\t\tcomponentMap[componentType]++;\n\t\t\t}\n\t\t}\n\n\t\tconst componentTypes = Object.keys(componentMap);\n\t\tfor (let i = 0; i < componentTypes.length; i++) {\n\t\t\tlet annotatedName = componentTypes[i];\n\t\t\tlet identicalCount = componentMap[componentTypes[i]];\n\t\t\tif (identicalCount > 1) {\n\t\t\t\tannotatedName = `${annotatedName} (${identicalCount})`;\n\t\t\t}\n\t\t\tannotatedComponentList.push(annotatedName);\n\t\t}\n\t\tFSBL.Clients.Logger.system.debug(\"getComponentTypes\", annotatedComponentList);\n\t\treturn annotatedComponentList;\n\t}\n\n\tsetFocusedWorkspace(workspace: string) {\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\tfocusedWorkspace: workspace,\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.getFocusedWorkspaceComponentList();\n\t\t\t}\n\t\t);\n\t}\n\n\tcancelEdit() {\n\t\tif (this.state.adding) {\n\t\t\tlet { workspaceList } = this.state;\n\t\t\tworkspaceList.pop();\n\t\t\tthis.setFocusedWorkspace(\"\");\n\t\t\tthis.setState({\n\t\t\t\tworkspaceList: workspaceList,\n\t\t\t});\n\t\t}\n\t\tthis.setState({\n\t\t\tediting: false,\n\t\t\tadding: false,\n\t\t\tworkspaceBeingEdited: \"\",\n\t\t});\n\t}\n\n\trenameWorkspace(newName: string) {\n\t\tlet oldName = this.state.workspaceBeingEdited;\n\t\tif (oldName === \"\") {\n\t\t\treturn this.cancelEdit();\n\t\t}\n\n\t\tif (newName === oldName || newName.trim() === \"\") return this.cancelEdit();\n\n\t\tlet newNameCamelCase = Util.camelCase(newName);\n\t\tif (this.state.workspaceList.some((workspace) => Util.camelCase(workspace.name) === newNameCamelCase)) {\n\t\t\tlet notification = new FSBL.Clients.NotificationClient.Notification();\n\t\t\tnotification.source = \"Finsemble\";\n\t\t\tnotification.title = \"Workspace renaming\";\n\t\t\tnotification.details = `Sorry, unable to rename workspace to \"${newName}\". Please use another name.`;\n\t\t\tFSBL.Clients.NotificationClient.notify(notification);\n\t\t\treturn this.cancelEdit();\n\t\t}\n\n\t\tlet updatedWorkspaceList = this.state.workspaceList;\n\t\tlet index = updatedWorkspaceList.findIndex((el) => el.name === oldName);\n\t\t// Set state locally so that the text doesn't change when the input field unmounts.\n\t\tif (index !== -1) {\n\t\t\tupdatedWorkspaceList[index].name = newName;\n\t\t\tthis.setState({\n\t\t\t\tworkspaceList: updatedWorkspaceList,\n\t\t\t});\n\t\t}\n\t\tWorkspaceManagementMenuStore?.Dispatcher.dispatch({\n\t\t\tactionType: \"renameWorkspace\",\n\t\t\tdata: {\n\t\t\t\toldName: oldName,\n\t\t\t\tnewName: newName,\n\t\t\t},\n\t\t});\n\t\tif (this.state.workspaceToLoadOnStart === oldName) {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tfocusedWorkspace: newName,\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.setWorkspaceToLoadOnStart(() => {\n\t\t\t\t\t\tthis.cancelEdit();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\n\tstartEditingWorkspace(e: React.SyntheticEvent, workspaceName = this.state.focusedWorkspace) {\n\t\t// without preventing this event from reaching the finsemble draggable,\n\t\t// the editor will lose focus and you won't be able to rename your workspaces\n\t\te.stopPropagation();\n\t\tthis.setState({\n\t\t\tediting: true,\n\t\t\tfocusedWorkspace: workspaceName,\n\t\t\tworkspaceBeingEdited: workspaceName,\n\t\t});\n\t}\n\n\tstartExportingTemplate() {\n\t\tWorkspaceManagementMenuStore?.Dispatcher.dispatch({\n\t\t\tactionType: \"exportWorkspace\",\n\t\t\tdata: {\n\t\t\t\tname: this.state.focusedWorkspace,\n\t\t\t},\n\t\t});\n\t}\n\n\tstartImportingTemplate() {\n\t\tWorkspaceManagementMenuStore?.Dispatcher.dispatch({\n\t\t\tactionType: \"importTemplate\",\n\t\t\tdata: {\n\t\t\t\tname: this.state.templateName,\n\t\t\t},\n\t\t});\n\t}\n\n\tdeleteWorkspace(workspaceName = this.state.focusedWorkspace) {\n\t\tthis.resetState();\n\n\t\tconst removeWorkspaceFromList = (wasDeleted: boolean) => {\n\t\t\tif (wasDeleted) {\n\t\t\t\tlet workspaceListCopy = [...this.state.workspaceList];\n\t\t\t\tworkspaceListCopy = workspaceListCopy.filter((workspace) => workspace.name !== workspaceName);\n\t\t\t\tthis.setState({ workspaceList: workspaceListCopy });\n\t\t\t}\n\t\t};\n\t\tconst data = {\n\t\t\tname: workspaceName,\n\t\t\thideModalOnClose: false,\n\t\t};\n\n\t\tWorkspaceManagementMenuActions.removeWorkspace(data, removeWorkspaceFromList);\n\t}\n\n\tsetPreferences(err: StandardError, data: any) {\n\t\tconst { value } = data || {};\n\t\tif (!value) return;\n\t\tconsole.log(\"Set preferences\", data.value);\n\t\tthis.setState({\n\t\t\tworkspaceToLoadOnStart: data.value[\"finsemble.initialWorkspace\"],\n\t\t\tfocusedWorkspace: data.value[\"finsemble.initialWorkspace\"],\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.addListener({ field: \"preferences\" }, this.setPreferences);\n\t\tFSBL.Clients.ConfigClient.getPreferences((err, data) => {\n\t\t\tthis.setPreferences(err, { value: data });\n\t\t});\n\t\tthis.props.getValue({ field: \"WorkspaceList\" }, (err: StandardError, data: Workspace[]) => {\n\t\t\tif (data && data.length) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tworkspaceList: data,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.props.removeListener({ field: \"preferences\" }, this.setPreferences);\n\t}\n\n\tsetWorkspaceToLoadOnStart(\n\t\teventOrCb: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement> | (() => void)\n\t) {\n\t\tif (!this.state.focusedWorkspace) return;\n\t\tconst setPreference = () => {\n\t\t\tFSBL.Clients.ConfigClient.setPreference(\n\t\t\t\t{\n\t\t\t\t\tfield: \"finsemble.initialWorkspace\",\n\t\t\t\t\tvalue: this.state.workspaceToLoadOnStart,\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof eventOrCb === \"function\") {\n\t\t\t\t\t\teventOrCb();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\t\tif (this.state.focusedWorkspace === this.state.workspaceToLoadOnStart) {\n\t\t\tthis.setState({ workspaceToLoadOnStart: null }, setPreference);\n\t\t} else {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tworkspaceToLoadOnStart: this.state.focusedWorkspace,\n\t\t\t\t},\n\t\t\t\tsetPreference\n\t\t\t);\n\t\t}\n\t}\n\n\topenFileDialog() {\n\t\t// Set alwaysOnTop to false and add an event listener on the window. When focus is regained\n\t\t// then reset always on top\n\t\tthis.changePreferencesAlwaysOnTop(false);\n\t\tfinsembleWindow.addEventListener(\"focused\", this.preferencesFocused);\n\t\tlet inputElement = document.getElementById(\"file-input\");\n\t\tinputElement?.addEventListener(\"change\", this.importWorkspace as ImportWorkspace, false);\n\t\tinputElement?.click();\n\t}\n\n\t/**\n\t * If the event is being listened to, when the preferences component is focused\n\t * it will set always on top to true, and remove the event listener\n\t *\n\t * This is to handle bringing alwaysOnTop back to true when file dialogs are closed\n\t * without changes (also handles bringing back to front after exporting)\n\t */\n\tpreferencesFocused() {\n\t\tfinsembleWindow.removeEventListener(\"focused\", this.preferencesFocused);\n\t\tthis.changePreferencesAlwaysOnTop(true);\n\t}\n\n\timportWorkspace(\n\t\tevt: Event & {\n\t\t\ttarget: {\n\t\t\t\tfiles: File[];\n\t\t\t\tvalue?: string | string[];\n\t\t\t};\n\t\t}\n\t): void {\n\t\tlet inputElement = document.getElementById(\"file-input\") as HTMLInputElement;\n\t\tinputElement?.removeEventListener(\"change\", this.importWorkspace as ImportWorkspace);\n\t\tconst { files } = evt.target; // FileList object\n\n\t\tfunction loadFile(file: File, done: () => void) {\n\t\t\tconst reader = new FileReader();\n\t\t\tlet fileName = evt.target.value;\n\t\t\t// When the file info is loaded, we get into here..\n\t\t\treader.onload = function (e) {\n\t\t\t\tfileName = (fileName as string).split(\"\\\\\");\n\t\t\t\tfileName = fileName[fileName.length - 1].replace(\".json\", \"\");\n\t\t\t\tlet workspaceTemplateDefinition = JSON.parse(e?.target?.result as string);\n\t\t\t\tlet templateName = Object.keys(workspaceTemplateDefinition.workspaceTemplates)[0];\n\t\t\t\tif (fileName !== templateName) {\n\t\t\t\t\t// We want the file name to overwrite the name of the workspace that was saved as the template..\n\t\t\t\t\tworkspaceTemplateDefinition.workspaceTemplates[fileName] =\n\t\t\t\t\t\tworkspaceTemplateDefinition.workspaceTemplates[templateName];\n\t\t\t\t\tdelete workspaceTemplateDefinition.workspaceTemplates[templateName];\n\t\t\t\t}\n\t\t\t\tworkspaceTemplateDefinition.workspaceTemplates[fileName].name = fileName;\n\t\t\t\tFSBL.Clients.WorkspaceClient.addWorkspaceDefinition(\n\t\t\t\t\t{\n\t\t\t\t\t\tworkspaceJSONDefinition: workspaceTemplateDefinition.workspaceTemplates,\n\t\t\t\t\t\tforce: false,\n\t\t\t\t\t},\n\t\t\t\t\t(err: StandardError) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\tFSBL.Clients.Logger.system.info(\"addWorkspaceTemplateDefinition error\", err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Read in the image file as a data URL.\n\t\t\treader.readAsText(file);\n\t\t}\n\n\t\tasync.each(files, loadFile, () => {\n\t\t\t// Clear out files. so if the user imports the same file back-to-back, the event will fire.\n\t\t\tif (inputElement?.value) {\n\t\t\t\tinputElement.value = \"\";\n\t\t\t}\n\t\t\tFSBL.Clients.Logger.system.info(\"Workspaces imported\");\n\t\t});\n\t}\n\n\texportWorkspace() {\n\t\tif (this.state.focusedWorkspace === \"\") return;\n\t\tconst doExport = () => {\n\t\t\tFSBL.Clients.WorkspaceClient.getWorkspaceDefinition(\n\t\t\t\t{ workspaceName: this.state.focusedWorkspace },\n\t\t\t\t(err: StandardError, workspaceDefinition: string) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tFSBL.Clients.Logger.system.error(\"getWorkspaceDefinition error\", err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// We're saving using a routine initially created for templates. The outcome is the same and it probably should have just been \"Save to file\". This bool is to allow it to save.\n\t\t\t\t\t\tFSBL.ConfigUtils.promptAndSaveJSONToLocalFile(this.state.focusedWorkspace, {\n\t\t\t\t\t\t\tworkspaceTemplates: workspaceDefinition,\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\n\t\t// Set alwaysOnTop to false and add an event listener on the window. When focus is regained\n\t\t// then reset always on top\n\t\tthis.changePreferencesAlwaysOnTop(false);\n\t\tfinsembleWindow.addEventListener(\"focused\", this.preferencesFocused);\n\t\t// If we're autosaving, autosave, then export.\n\t\tFSBL.Clients.ConfigClient.getValue(\n\t\t\t{\n\t\t\t\tfield: \"finsemble.preferences.workspaceService.promptUserOnDirtyWorkspace\",\n\t\t\t},\n\t\t\t(err, data) => {\n\t\t\t\t// default to false.\n\t\t\t\tlet PROMPT_ON_SAVE = data === null ? false : data;\n\t\t\t\tif (!PROMPT_ON_SAVE) {\n\t\t\t\t\tlet activeName = FSBL?.Clients?.WorkspaceClient?.activeWorkspace?.name;\n\t\t\t\t\treturn FSBL.Clients.WorkspaceClient.saveAs(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: activeName,\n\t\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tdoExport();\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdoExport();\n\t\t\t}\n\t\t);\n\t}\n\n\thandleButtonClicks(e: React.MouseEvent<HTMLDivElement>) {\n\t\tif (this.state.adding || this.state.editing) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\tgetFocusedWorkspaceComponentList() {\n\t\tlet { workspaceList, focusedWorkspace } = this.state;\n\t\tif (focusedWorkspace === \"\") return [];\n\t\tlet workspace = workspaceList.filter((wSpace) => wSpace.name === focusedWorkspace)[0];\n\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaceDefinition(\n\t\t\t{ workspaceName: focusedWorkspace },\n\t\t\t(\n\t\t\t\t_: StandardError,\n\t\t\t\tworkspaceDefinition: {\n\t\t\t\t\t[key: string]: WorkspaceTemplate;\n\t\t\t\t}\n\t\t\t) => {\n\t\t\t\tlet componentTypes = workspace?.components;\n\t\t\t\ttry {\n\t\t\t\t\tcomponentTypes = this.getComponentTypes(workspaceDefinition[focusedWorkspace]);\n\t\t\t\t} catch (err) {\n\t\t\t\t} finally {\n\t\t\t\t\tif (componentTypes) {\n\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\tfocusedWorkspaceComponentList: componentTypes,\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\n\trender() {\n\t\tlet deleteButtonClasses = \"individual-workspace-action delete-workspace\",\n\t\t\trenameButtonClasses = \"individual-workspace-action\",\n\t\t\tallowDelete = true,\n\t\t\tallowExport = true,\n\t\t\tallowRename = true,\n\t\t\tallowImport = true,\n\t\t\tdeleteTooltip = \"Delete\";\n\n\t\tif (this.state.focusedWorkspace === FSBL?.Clients?.WorkspaceClient?.activeWorkspace?.name) {\n\t\t\tdeleteButtonClasses = `${deleteButtonClasses} disabled-individual-workspace-action`;\n\t\t}\n\n\t\tif (this.state.focusedWorkspace === \"\") {\n\t\t\trenameButtonClasses = `${renameButtonClasses} disabled-individual-workspace-action`;\n\t\t\tdeleteButtonClasses = `${deleteButtonClasses} disabled-individual-workspace-action`;\n\t\t\tdeleteTooltip = \"No workspace selected\";\n\t\t\tallowRename = false;\n\t\t\tallowExport = false;\n\t\t\tallowDelete = false;\n\t\t}\n\n\t\tif (this.state.adding || this.state.editing) {\n\t\t\trenameButtonClasses = `${renameButtonClasses} disabled-button`;\n\t\t\tdeleteButtonClasses = `${deleteButtonClasses} disabled-button`;\n\t\t\tallowDelete = false;\n\t\t\tallowExport = false;\n\t\t\tallowRename = false;\n\t\t\tallowImport = false;\n\t\t}\n\n\t\tlet importTooltip = \"Import workspace from file\",\n\t\t\texportTooltip = allowExport ? \"Export selected workspace\" : \"No workspace selected\",\n\t\t\trenameTooltip = allowRename ? \"Rename\" : \"Cannot Edit\";\n\n\t\treturn (\n\t\t\t<div style={{ paddingLeft: 10 }}>\n\t\t\t\t<input style={{ display: \"none\" }} type=\"file\" id=\"file-input\" />\n\t\t\t\t<div className=\"complex-menu-content-row\">\n\t\t\t\t\t<div className=\"workspace-list-header-row\">\n\t\t\t\t\t\t<div className=\"content-section-header workspace-list-header\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"content-section-wrapper\">\n\t\t\t\t\t\t<WorkspaceItemList\n\t\t\t\t\t\t\tonDragEnd={this.onDragEnd}\n\t\t\t\t\t\t\tworkspaceList={this.state.workspaceList}\n\t\t\t\t\t\t\tallowDelete={allowDelete}\n\t\t\t\t\t\t\tdeleteButtonClasses={deleteButtonClasses}\n\t\t\t\t\t\t\tdeleteTooltip={deleteTooltip}\n\t\t\t\t\t\t\tworkspaceToLoadOnStart={this.state.workspaceToLoadOnStart}\n\t\t\t\t\t\t\tfocusedWorkspace={this.state.focusedWorkspace}\n\t\t\t\t\t\t\tediting={this.state.editing}\n\t\t\t\t\t\t\tadding={this.state.adding}\n\t\t\t\t\t\t\trenameWorkspace={this.renameWorkspace}\n\t\t\t\t\t\t\taddWorkspace={this.addWorkspace}\n\t\t\t\t\t\t\tcancelEdit={this.cancelEdit}\n\t\t\t\t\t\t\tsetFocusedWorkspace={this.setFocusedWorkspace}\n\t\t\t\t\t\t\trenameTooltip={renameTooltip}\n\t\t\t\t\t\t\trenameButtonClasses={renameButtonClasses}\n\t\t\t\t\t\t\tallowRename={allowRename}\n\t\t\t\t\t\t\thandleButtonClicks={this.handleButtonClicks}\n\t\t\t\t\t\t\tstartEditingWorkspace={this.startEditingWorkspace}\n\t\t\t\t\t\t\tdeleteWorkspace={this.deleteWorkspace}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<div className=\"workspace-extras\">\n\t\t\t\t\t\t\t<WorkspaceComponents focusedWorkspaceComponentList={this.state.focusedWorkspaceComponentList} />\n\t\t\t\t\t\t\t<div className=\"workspace-action-buttons\">\n\t\t\t\t\t\t\t\t<WorkspaceButton\n\t\t\t\t\t\t\t\t\ttitle={importTooltip}\n\t\t\t\t\t\t\t\t\tonMouseDown={this.handleButtonClicks}\n\t\t\t\t\t\t\t\t\tonClick={allowImport ? this.openFileDialog : () => {}}\n\t\t\t\t\t\t\t\t\ttype=\"import\"\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t<WorkspaceButton\n\t\t\t\t\t\t\t\t\ttitle={exportTooltip}\n\t\t\t\t\t\t\t\t\tonMouseDown={this.handleButtonClicks}\n\t\t\t\t\t\t\t\t\tonClick={allowExport ? this.exportWorkspace : () => {}}\n\t\t\t\t\t\t\t\t\ttype=\"export\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tdisabled={!this.state.focusedWorkspace}\n\t\t\t\t\t\tonClick={this.setWorkspaceToLoadOnStart}\n\t\t\t\t\t\tchecked={this.state.focusedWorkspace === this.state.workspaceToLoadOnStart}\n\t\t\t\t\t\tlabel=\"Load this workspace on startup\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Workspaces.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/content/Workspaces.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport async from \"async\";\nimport { Util } from \"@finsemble/finsemble-api\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport { Actions as WorkspaceManagementMenuActions } from \"../../../toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore\";\nimport { WorkspaceManagementMenuStore } from \"../../stores/UserPreferencesStore\";\nimport { Checkbox } from \"../../../common/Checkbox\";\nimport { WorkspaceButton } from \"../workspaces/WorkspaceButton\";\nimport WorkspaceComponents from \"../workspaces/WorkspaceComponents\";\nimport WorkspaceItemList from \"../workspaces/WorkspaceItemList\";\nimport { Workspace, ImportWorkspace, WorkspaceTemplate } from \"../../../../types/workspaceTypes\";\n\ninterface IProps {\n\taddListener: (fieldListener: { field: string }, cb: (err: StandardError, data: any) => void) => void;\n\tgetValue: (fieldName: { field: string }, cb: (err: StandardError, data: Workspace[]) => void) => void;\n\tremoveListener: (fieldName: { field: string }, cb: (err: StandardError, data: any) => void) => void;\n}\n\ninterface IState {\n\tinitialAlwaysOnTop: boolean;\n\talwaysOnTop: boolean;\n\tworkspaceList: Workspace[];\n\tfocusedWorkspace: string;\n\tediting: boolean;\n\tworkspaceBeingEdited: string;\n\ttemplateName: string;\n\tadding: boolean;\n\tworkspaceToLoadOnStart: string | null;\n\tfocusedWorkspaceComponentList: string[];\n}\nexport default class Workspaces extends React.Component<IProps, IState> {\n\taddWorkspace?: () => void;\n\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tadding: false,\n\t\t\tediting: false,\n\t\t\tworkspaceList: [],\n\t\t\tfocusedWorkspace: \"\",\n\t\t\tworkspaceToLoadOnStart: null,\n\t\t\ttemplateName: \"\",\n\t\t\tworkspaceBeingEdited: \"\",\n\t\t\tfocusedWorkspaceComponentList: [],\n\t\t\tinitialAlwaysOnTop: finsembleWindow.windowOptions?.alwaysOnTop,\n\t\t\talwaysOnTop: finsembleWindow.windowOptions?.alwaysOnTop,\n\t\t};\n\t\tthis.bindCorrectContext();\n\t\tthis.addListeners();\n\t}\n\n\tresetState() {\n\t\tthis.setState({\n\t\t\tadding: false,\n\t\t\tediting: false,\n\t\t\tfocusedWorkspace: \"\",\n\t\t\ttemplateName: \"\",\n\t\t\tworkspaceBeingEdited: \"\",\n\t\t});\n\t}\n\n\tbindCorrectContext() {\n\t\tthis.deleteWorkspace = this.deleteWorkspace.bind(this);\n\t\tthis.addListeners = this.addListeners.bind(this);\n\t\tthis.setWorkspaceList = this.setWorkspaceList.bind(this);\n\t\tthis.onDragEnd = this.onDragEnd.bind(this);\n\t\tthis.startEditingWorkspace = this.startEditingWorkspace.bind(this);\n\t\tthis.renameWorkspace = this.renameWorkspace.bind(this);\n\t\tthis.cancelEdit = this.cancelEdit.bind(this);\n\t\tthis.setWorkspaceToLoadOnStart = this.setWorkspaceToLoadOnStart.bind(this);\n\t\tthis.setPreferences = this.setPreferences.bind(this);\n\t\tthis.exportWorkspace = this.exportWorkspace.bind(this);\n\t\tthis.handleButtonClicks = this.handleButtonClicks.bind(this);\n\t\tthis.getFocusedWorkspaceComponentList = this.getFocusedWorkspaceComponentList.bind(this);\n\t\tthis.changePreferencesAlwaysOnTop = this.changePreferencesAlwaysOnTop.bind(this);\n\t\tthis.openFileDialog = this.openFileDialog.bind(this);\n\t\tthis.preferencesFocused = this.preferencesFocused.bind(this);\n\t\tthis.setFocusedWorkspace = this.setFocusedWorkspace.bind(this);\n\t}\n\n\tsetWorkspaceList(err: StandardError, data: { value: Workspace[] }) {\n\t\tconsole.log(\"Set workspacelist\", data);\n\t\tif (!data) return;\n\t\tthis.setState({\n\t\t\tworkspaceList: data.value,\n\t\t});\n\t}\n\n\taddListeners() {\n\t\tthis.props.addListener({ field: \"WorkspaceList\" }, this.setWorkspaceList);\n\t}\n\n\t/**\n\t * Sets the windowOptions.alwaysOnTop to the value supplied. The preferences component should\n\t * not be always on top when a file dialog is open.\n\t * @param {boolean} alwaysOnTop The value to set finsembleWindow.options.alwaysOnTop\n\t */\n\tchangePreferencesAlwaysOnTop(alwaysOnTop: boolean) {\n\t\t// The initialAlwaysOnTop check is to prevent making a component be alwaysOnTop when the\n\t\t// client may have set it to alwaysOnTop:false in the config. If that's the case, it should\n\t\t// never set its alwaysOnTop to true and should always remain unchanged\n\t\tif (this.state.initialAlwaysOnTop && FSBL.System.container() === \"Electron\") {\n\t\t\tFSBL.Clients.WindowClient.setAlwaysOnTop(alwaysOnTop, () => {\n\t\t\t\tthis.setState({\n\t\t\t\t\talwaysOnTop,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tonDragEnd({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) {\n\t\tlet workspaces = JSON.parse(JSON.stringify(this.state.workspaceList));\n\t\tlet workspaceToMove = JSON.parse(JSON.stringify(workspaces[oldIndex]));\n\t\tworkspaces.splice(oldIndex, 1);\n\t\tworkspaces.splice(newIndex, 0, workspaceToMove);\n\t\tthis.setState({\n\t\t\tworkspaceList: workspaces,\n\t\t});\n\t\tWorkspaceManagementMenuStore?.Dispatcher.dispatch({\n\t\t\tactionType: \"reorderWorkspace\",\n\t\t\tdata: { oldIndex, newIndex },\n\t\t});\n\t}\n\n\t// returns all the component types of a template definition to display to user for additional info. If multiple components with same type, then instead of listing each\n\t// individually, only one entry will be returned with the count in parentheses.\n\tgetComponentTypes(templateObject: WorkspaceTemplate) {\n\t\tFSBL.Clients.Logger.system.debug(\"getComponentTypes templateObject\", templateObject);\n\t\tlet componentType: string;\n\t\tlet componentMap: { [key: string]: number } = {};\n\t\tlet annotatedComponentList = [];\n\t\tfor (let i = 0; i < templateObject.windows.length; i++) {\n\t\t\tlet windowData = templateObject.windowData[i];\n\t\t\tFSBL.Clients.Logger.system.debug(\"getComponentTypes loop\", windowData);\n\t\t\tcomponentType = \"Unknown Component\";\n\t\t\tif (windowData) {\n\t\t\t\t// current assimilation doesn't fill in windowData, so in this case use \"Unknown Component\" for component type\n\t\t\t\tcomponentType = windowData.componentType || windowData.customData.component.type;\n\t\t\t} else {\n\t\t\t\tcomponentType = \"Unknown Component\";\n\t\t\t}\n\t\t\tif (!componentMap[componentType]) {\n\t\t\t\tcomponentMap[componentType] = 1;\n\t\t\t} else {\n\t\t\t\tcomponentMap[componentType]++;\n\t\t\t}\n\t\t}\n\n\t\tconst componentTypes = Object.keys(componentMap);\n\t\tfor (let i = 0; i < componentTypes.length; i++) {\n\t\t\tlet annotatedName = componentTypes[i];\n\t\t\tlet identicalCount = componentMap[componentTypes[i]];\n\t\t\tif (identicalCount > 1) {\n\t\t\t\tannotatedName = `${annotatedName} (${identicalCount})`;\n\t\t\t}\n\t\t\tannotatedComponentList.push(annotatedName);\n\t\t}\n\t\tFSBL.Clients.Logger.system.debug(\"getComponentTypes\", annotatedComponentList);\n\t\treturn annotatedComponentList;\n\t}\n\n\tsetFocusedWorkspace(workspace: string) {\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\tfocusedWorkspace: workspace,\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.getFocusedWorkspaceComponentList();\n\t\t\t}\n\t\t);\n\t}\n\n\tcancelEdit() {\n\t\tif (this.state.adding) {\n\t\t\tlet { workspaceList } = this.state;\n\t\t\tworkspaceList.pop();\n\t\t\tthis.setFocusedWorkspace(\"\");\n\t\t\tthis.setState({\n\t\t\t\tworkspaceList: workspaceList,\n\t\t\t});\n\t\t}\n\t\tthis.setState({\n\t\t\tediting: false,\n\t\t\tadding: false,\n\t\t\tworkspaceBeingEdited: \"\",\n\t\t});\n\t}\n\n\trenameWorkspace(newName: string) {\n\t\tlet oldName = this.state.workspaceBeingEdited;\n\t\tif (oldName === \"\") {\n\t\t\treturn this.cancelEdit();\n\t\t}\n\n\t\tif (newName === oldName || newName.trim() === \"\") return this.cancelEdit();\n\n\t\tlet newNameCamelCase = Util.camelCase(newName);\n\t\tif (this.state.workspaceList.some((workspace) => Util.camelCase(workspace.name) === newNameCamelCase)) {\n\t\t\tlet notification = new FSBL.Clients.NotificationClient.Notification();\n\t\t\tnotification.source = \"Finsemble\";\n\t\t\tnotification.title = \"Workspace renaming\";\n\t\t\tnotification.details = `Sorry, unable to rename workspace to \"${newName}\". Please use another name.`;\n\t\t\tFSBL.Clients.NotificationClient.notify(notification);\n\t\t\treturn this.cancelEdit();\n\t\t}\n\n\t\tlet updatedWorkspaceList = this.state.workspaceList;\n\t\tlet index = updatedWorkspaceList.findIndex((el) => el.name === oldName);\n\t\t// Set state locally so that the text doesn't change when the input field unmounts.\n\t\tif (index !== -1) {\n\t\t\tupdatedWorkspaceList[index].name = newName;\n\t\t\tthis.setState({\n\t\t\t\tworkspaceList: updatedWorkspaceList,\n\t\t\t});\n\t\t}\n\t\tWorkspaceManagementMenuStore?.Dispatcher.dispatch({\n\t\t\tactionType: \"renameWorkspace\",\n\t\t\tdata: {\n\t\t\t\toldName: oldName,\n\t\t\t\tnewName: newName,\n\t\t\t},\n\t\t});\n\t\tif (this.state.workspaceToLoadOnStart === oldName) {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tfocusedWorkspace: newName,\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tthis.setWorkspaceToLoadOnStart(() => {\n\t\t\t\t\t\tthis.cancelEdit();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis.cancelEdit();\n\t\t}\n\t}\n\n\tstartEditingWorkspace(e: React.SyntheticEvent, workspaceName = this.state.focusedWorkspace) {\n\t\t// without preventing this event from reaching the finsemble draggable,\n\t\t// the editor will lose focus and you won't be able to rename your workspaces\n\t\te.stopPropagation();\n\t\tthis.setState({\n\t\t\tediting: true,\n\t\t\tfocusedWorkspace: workspaceName,\n\t\t\tworkspaceBeingEdited: workspaceName,\n\t\t});\n\t}\n\n\tstartExportingTemplate() {\n\t\tWorkspaceManagementMenuStore?.Dispatcher.dispatch({\n\t\t\tactionType: \"exportWorkspace\",\n\t\t\tdata: {\n\t\t\t\tname: this.state.focusedWorkspace,\n\t\t\t},\n\t\t});\n\t}\n\n\tstartImportingTemplate() {\n\t\tWorkspaceManagementMenuStore?.Dispatcher.dispatch({\n\t\t\tactionType: \"importTemplate\",\n\t\t\tdata: {\n\t\t\t\tname: this.state.templateName,\n\t\t\t},\n\t\t});\n\t}\n\n\tdeleteWorkspace(workspaceName = this.state.focusedWorkspace) {\n\t\tthis.resetState();\n\n\t\tconst removeWorkspaceFromList = (wasDeleted: boolean) => {\n\t\t\tif (wasDeleted) {\n\t\t\t\tlet workspaceListCopy = [...this.state.workspaceList];\n\t\t\t\tworkspaceListCopy = workspaceListCopy.filter((workspace) => workspace.name !== workspaceName);\n\t\t\t\tthis.setState({ workspaceList: workspaceListCopy });\n\t\t\t}\n\t\t};\n\t\tconst data = {\n\t\t\tname: workspaceName,\n\t\t\thideModalOnClose: false,\n\t\t};\n\n\t\tWorkspaceManagementMenuActions.removeWorkspace(data, removeWorkspaceFromList);\n\t}\n\n\tsetPreferences(err: StandardError, data: any) {\n\t\tconst { value } = data || {};\n\t\tif (!value) return;\n\t\tconsole.log(\"Set preferences\", data.value);\n\t\tthis.setState({\n\t\t\tworkspaceToLoadOnStart: data.value[\"finsemble.initialWorkspace\"],\n\t\t\tfocusedWorkspace: data.value[\"finsemble.initialWorkspace\"],\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.props.addListener({ field: \"preferences\" }, this.setPreferences);\n\t\tFSBL.Clients.ConfigClient.getPreferences((err, data) => {\n\t\t\tthis.setPreferences(err, { value: data });\n\t\t});\n\t\tthis.props.getValue({ field: \"WorkspaceList\" }, (err: StandardError, data: Workspace[]) => {\n\t\t\tif (data && data.length) {\n\t\t\t\tthis.setState({\n\t\t\t\t\tworkspaceList: data,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.props.removeListener({ field: \"preferences\" }, this.setPreferences);\n\t}\n\n\tsetWorkspaceToLoadOnStart(\n\t\teventOrCb: React.MouseEvent<HTMLDivElement> | React.KeyboardEvent<HTMLDivElement> | (() => void)\n\t) {\n\t\tif (!this.state.focusedWorkspace) return;\n\t\tconst setPreference = () => {\n\t\t\tFSBL.Clients.ConfigClient.setPreference(\n\t\t\t\t{\n\t\t\t\t\tfield: \"finsemble.initialWorkspace\",\n\t\t\t\t\tvalue: this.state.workspaceToLoadOnStart,\n\t\t\t\t},\n\t\t\t\t(err) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tconsole.error(err);\n\t\t\t\t\t}\n\t\t\t\t\tif (typeof eventOrCb === \"function\") {\n\t\t\t\t\t\teventOrCb();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\t\tif (this.state.focusedWorkspace === this.state.workspaceToLoadOnStart) {\n\t\t\tthis.setState({ workspaceToLoadOnStart: null }, setPreference);\n\t\t} else {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tworkspaceToLoadOnStart: this.state.focusedWorkspace,\n\t\t\t\t},\n\t\t\t\tsetPreference\n\t\t\t);\n\t\t}\n\t}\n\n\topenFileDialog() {\n\t\t// Set alwaysOnTop to false and add an event listener on the window. When focus is regained\n\t\t// then reset always on top\n\t\tthis.changePreferencesAlwaysOnTop(false);\n\t\tfinsembleWindow.addEventListener(\"focused\", this.preferencesFocused);\n\t\tlet inputElement = document.getElementById(\"file-input\");\n\t\tinputElement?.addEventListener(\"change\", this.importWorkspace as ImportWorkspace, false);\n\t\tinputElement?.click();\n\t}\n\n\t/**\n\t * If the event is being listened to, when the preferences component is focused\n\t * it will set always on top to true, and remove the event listener\n\t *\n\t * This is to handle bringing alwaysOnTop back to true when file dialogs are closed\n\t * without changes (also handles bringing back to front after exporting)\n\t */\n\tpreferencesFocused() {\n\t\tfinsembleWindow.removeEventListener(\"focused\", this.preferencesFocused);\n\t\tthis.changePreferencesAlwaysOnTop(true);\n\t}\n\n\timportWorkspace(\n\t\tevt: Event & {\n\t\t\ttarget: {\n\t\t\t\tfiles: File[];\n\t\t\t\tvalue?: string | string[];\n\t\t\t};\n\t\t}\n\t): void {\n\t\tlet inputElement = document.getElementById(\"file-input\") as HTMLInputElement;\n\t\tinputElement?.removeEventListener(\"change\", this.importWorkspace as ImportWorkspace);\n\t\tconst { files } = evt.target; // FileList object\n\n\t\tfunction loadFile(file: File, done: () => void) {\n\t\t\tconst reader = new FileReader();\n\t\t\tlet fileName = evt.target.value;\n\t\t\t// When the file info is loaded, we get into here..\n\t\t\treader.onload = function (e) {\n\t\t\t\tfileName = (fileName as string).split(\"\\\\\");\n\t\t\t\tfileName = fileName[fileName.length - 1].replace(\".json\", \"\");\n\t\t\t\tlet workspaceTemplateDefinition = JSON.parse(e?.target?.result as string);\n\t\t\t\tlet templateName = Object.keys(workspaceTemplateDefinition.workspaceTemplates)[0];\n\t\t\t\tif (fileName !== templateName) {\n\t\t\t\t\t// We want the file name to overwrite the name of the workspace that was saved as the template..\n\t\t\t\t\tworkspaceTemplateDefinition.workspaceTemplates[fileName] =\n\t\t\t\t\t\tworkspaceTemplateDefinition.workspaceTemplates[templateName];\n\t\t\t\t\tdelete workspaceTemplateDefinition.workspaceTemplates[templateName];\n\t\t\t\t}\n\t\t\t\tworkspaceTemplateDefinition.workspaceTemplates[fileName].name = fileName;\n\t\t\t\tFSBL.Clients.WorkspaceClient.addWorkspaceDefinition(\n\t\t\t\t\t{\n\t\t\t\t\t\tworkspaceJSONDefinition: workspaceTemplateDefinition.workspaceTemplates,\n\t\t\t\t\t\tforce: false,\n\t\t\t\t\t},\n\t\t\t\t\t(err: StandardError) => {\n\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\tFSBL.Clients.Logger.system.info(\"addWorkspaceTemplateDefinition error\", err);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdone();\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Read in the image file as a data URL.\n\t\t\treader.readAsText(file);\n\t\t}\n\n\t\tasync.each(files, loadFile, () => {\n\t\t\t// Clear out files. so if the user imports the same file back-to-back, the event will fire.\n\t\t\tif (inputElement?.value) {\n\t\t\t\tinputElement.value = \"\";\n\t\t\t}\n\t\t\tFSBL.Clients.Logger.system.info(\"Workspaces imported\");\n\t\t});\n\t}\n\n\texportWorkspace() {\n\t\tif (this.state.focusedWorkspace === \"\") return;\n\t\tconst doExport = () => {\n\t\t\tFSBL.Clients.WorkspaceClient.getWorkspaceDefinition(\n\t\t\t\t{ workspaceName: this.state.focusedWorkspace },\n\t\t\t\t(err: StandardError, workspaceDefinition: string) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tFSBL.Clients.Logger.system.error(\"getWorkspaceDefinition error\", err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// We're saving using a routine initially created for templates. The outcome is the same and it probably should have just been \"Save to file\". This bool is to allow it to save.\n\t\t\t\t\t\tFSBL.ConfigUtils.promptAndSaveJSONToLocalFile(this.state.focusedWorkspace, {\n\t\t\t\t\t\t\tworkspaceTemplates: workspaceDefinition,\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\n\t\t// Set alwaysOnTop to false and add an event listener on the window. When focus is regained\n\t\t// then reset always on top\n\t\tthis.changePreferencesAlwaysOnTop(false);\n\t\tfinsembleWindow.addEventListener(\"focused\", this.preferencesFocused);\n\t\t// If we're autosaving, autosave, then export.\n\t\tFSBL.Clients.ConfigClient.getValue(\n\t\t\t{\n\t\t\t\tfield: \"finsemble.preferences.workspaceService.promptUserOnDirtyWorkspace\",\n\t\t\t},\n\t\t\t(err, data) => {\n\t\t\t\t// default to false.\n\t\t\t\tlet PROMPT_ON_SAVE = data === null ? false : data;\n\t\t\t\tif (!PROMPT_ON_SAVE) {\n\t\t\t\t\tlet activeName = FSBL?.Clients?.WorkspaceClient?.activeWorkspace?.name;\n\t\t\t\t\treturn FSBL.Clients.WorkspaceClient.saveAs(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: activeName,\n\t\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tdoExport();\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdoExport();\n\t\t\t}\n\t\t);\n\t}\n\n\thandleButtonClicks(e: React.MouseEvent<HTMLDivElement>) {\n\t\tif (this.state.adding || this.state.editing) {\n\t\t\te.preventDefault();\n\t\t}\n\t}\n\n\tgetFocusedWorkspaceComponentList() {\n\t\tlet { workspaceList, focusedWorkspace } = this.state;\n\t\tif (focusedWorkspace === \"\") return [];\n\t\tlet workspace = workspaceList.filter((wSpace) => wSpace.name === focusedWorkspace)[0];\n\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaceDefinition(\n\t\t\t{ workspaceName: focusedWorkspace },\n\t\t\t(\n\t\t\t\t_: StandardError,\n\t\t\t\tworkspaceDefinition: {\n\t\t\t\t\t[key: string]: WorkspaceTemplate;\n\t\t\t\t}\n\t\t\t) => {\n\t\t\t\tlet componentTypes = workspace?.components;\n\t\t\t\ttry {\n\t\t\t\t\tcomponentTypes = this.getComponentTypes(workspaceDefinition[focusedWorkspace]);\n\t\t\t\t} catch (err) {\n\t\t\t\t} finally {\n\t\t\t\t\tif (componentTypes) {\n\t\t\t\t\t\tthis.setState({\n\t\t\t\t\t\t\tfocusedWorkspaceComponentList: componentTypes,\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\n\trender() {\n\t\tlet deleteButtonClasses = \"individual-workspace-action delete-workspace\",\n\t\t\trenameButtonClasses = \"individual-workspace-action\",\n\t\t\tallowDelete = true,\n\t\t\tallowExport = true,\n\t\t\tallowRename = true,\n\t\t\tallowImport = true,\n\t\t\tdeleteTooltip = \"Delete\";\n\n\t\tif (this.state.focusedWorkspace === FSBL?.Clients?.WorkspaceClient?.activeWorkspace?.name) {\n\t\t\tdeleteButtonClasses = `${deleteButtonClasses} disabled-individual-workspace-action`;\n\t\t}\n\n\t\tif (this.state.focusedWorkspace === \"\") {\n\t\t\trenameButtonClasses = `${renameButtonClasses} disabled-individual-workspace-action`;\n\t\t\tdeleteButtonClasses = `${deleteButtonClasses} disabled-individual-workspace-action`;\n\t\t\tdeleteTooltip = \"No workspace selected\";\n\t\t\tallowRename = false;\n\t\t\tallowExport = false;\n\t\t\tallowDelete = false;\n\t\t}\n\n\t\tif (this.state.adding || this.state.editing) {\n\t\t\trenameButtonClasses = `${renameButtonClasses} disabled-button`;\n\t\t\tdeleteButtonClasses = `${deleteButtonClasses} disabled-button`;\n\t\t\tallowDelete = false;\n\t\t\tallowExport = false;\n\t\t\tallowRename = false;\n\t\t\tallowImport = false;\n\t\t}\n\n\t\tlet importTooltip = \"Import workspace from file\",\n\t\t\texportTooltip = allowExport ? \"Export selected workspace\" : \"No workspace selected\",\n\t\t\trenameTooltip = allowRename ? \"Rename\" : \"Cannot Edit\";\n\n\t\treturn (\n\t\t\t<div style={{ paddingLeft: 10 }}>\n\t\t\t\t<input style={{ display: \"none\" }} type=\"file\" id=\"file-input\" />\n\t\t\t\t<div className=\"complex-menu-content-row\">\n\t\t\t\t\t<div className=\"workspace-list-header-row\">\n\t\t\t\t\t\t<div className=\"content-section-header workspace-list-header\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"content-section-wrapper\">\n\t\t\t\t\t\t<WorkspaceItemList\n\t\t\t\t\t\t\tonDragEnd={this.onDragEnd}\n\t\t\t\t\t\t\tworkspaceList={this.state.workspaceList}\n\t\t\t\t\t\t\tallowDelete={allowDelete}\n\t\t\t\t\t\t\tdeleteButtonClasses={deleteButtonClasses}\n\t\t\t\t\t\t\tdeleteTooltip={deleteTooltip}\n\t\t\t\t\t\t\tworkspaceToLoadOnStart={this.state.workspaceToLoadOnStart}\n\t\t\t\t\t\t\tfocusedWorkspace={this.state.focusedWorkspace}\n\t\t\t\t\t\t\tediting={this.state.editing}\n\t\t\t\t\t\t\tadding={this.state.adding}\n\t\t\t\t\t\t\trenameWorkspace={this.renameWorkspace}\n\t\t\t\t\t\t\taddWorkspace={this.addWorkspace}\n\t\t\t\t\t\t\tcancelEdit={this.cancelEdit}\n\t\t\t\t\t\t\tsetFocusedWorkspace={this.setFocusedWorkspace}\n\t\t\t\t\t\t\trenameTooltip={renameTooltip}\n\t\t\t\t\t\t\trenameButtonClasses={renameButtonClasses}\n\t\t\t\t\t\t\tallowRename={allowRename}\n\t\t\t\t\t\t\thandleButtonClicks={this.handleButtonClicks}\n\t\t\t\t\t\t\tstartEditingWorkspace={this.startEditingWorkspace}\n\t\t\t\t\t\t\tdeleteWorkspace={this.deleteWorkspace}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t<div className=\"workspace-extras\">\n\t\t\t\t\t\t\t<WorkspaceComponents focusedWorkspaceComponentList={this.state.focusedWorkspaceComponentList} />\n\t\t\t\t\t\t\t<div className=\"workspace-action-buttons\">\n\t\t\t\t\t\t\t\t<WorkspaceButton\n\t\t\t\t\t\t\t\t\ttitle={importTooltip}\n\t\t\t\t\t\t\t\t\tonMouseDown={this.handleButtonClicks}\n\t\t\t\t\t\t\t\t\tonClick={allowImport ? this.openFileDialog : () => {}}\n\t\t\t\t\t\t\t\t\ttype=\"import\"\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t<WorkspaceButton\n\t\t\t\t\t\t\t\t\ttitle={exportTooltip}\n\t\t\t\t\t\t\t\t\tonMouseDown={this.handleButtonClicks}\n\t\t\t\t\t\t\t\t\tonClick={allowExport ? this.exportWorkspace : () => {}}\n\t\t\t\t\t\t\t\t\ttype=\"export\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tdisabled={!this.state.focusedWorkspace}\n\t\t\t\t\t\tonClick={this.setWorkspaceToLoadOnStart}\n\t\t\t\t\t\tchecked={this.state.focusedWorkspace === this.state.workspaceToLoadOnStart}\n\t\t\t\t\t\tlabel=\"Load this workspace on startup\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
|