@finsemble/finsemble-ui 6.1.1 → 6.1.5
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/README.md +28 -28
- package/package.json +1 -1
- package/react/actions/favoriteActions.js.map +1 -1
- package/react/actions/linkerActions.js.map +1 -1
- package/react/actions/menuActions.js.map +1 -1
- package/react/actions/rootActions.js.map +1 -1
- package/react/actions/searchActions.js.map +1 -1
- package/react/actions/smartDesktopDesignerActions.js.map +1 -1
- package/react/actions/toolbarActions.js.map +1 -1
- package/react/actions/workspaceActions.js.map +1 -1
- package/react/assets/css/advancedAppLauncher.css +636 -636
- package/react/assets/css/appCatalog.css +1069 -1069
- package/react/assets/css/authentication.css +78 -78
- package/react/assets/css/button.css +219 -219
- package/react/assets/css/core/formElements.css +23 -23
- package/react/assets/css/core/icons.css +69 -69
- package/react/assets/css/core/notifications.css +75 -75
- package/react/assets/css/core/windowFrame.css +36 -36
- package/react/assets/css/dashbar.css +78 -78
- package/react/assets/css/defaultTheme.css +356 -356
- package/react/assets/css/dialogs.css +158 -158
- package/react/assets/css/favorites.css +101 -101
- package/react/assets/css/finsemble.css +38 -38
- package/react/assets/css/focus.css +4 -4
- package/react/assets/css/font-finance.css +385 -385
- package/react/assets/css/fonts/Open_Sans/LICENSE.txt +202 -202
- package/react/assets/css/fonts/Open_Sans/OpenSans-Definition.css +118 -118
- package/react/assets/css/fonts/font-finance.svg +124 -124
- package/react/assets/css/fonts/icons-reference.html +1174 -1174
- package/react/assets/css/linkerWindow.css +124 -124
- package/react/assets/css/menus.css +195 -195
- package/react/assets/css/notificationsCenter.css +594 -594
- package/react/assets/css/processMonitor.css +213 -213
- package/react/assets/css/search.css +128 -128
- package/react/assets/css/shared/animations.css +99 -99
- package/react/assets/css/tags.css +136 -136
- package/react/assets/css/toolbar.css +413 -413
- package/react/assets/css/userPreferences.css +565 -565
- package/react/assets/css/windowTitleBar.css +619 -619
- package/react/assets/icons/check.svg +3 -3
- package/react/assets/icons/chevron-left.svg +3 -3
- package/react/assets/icons/chevron-right.svg +3 -3
- package/react/assets/icons/copy.svg +10 -10
- package/react/assets/icons/exclamation-circle.svg +4 -4
- package/react/assets/icons/external-link.svg +12 -12
- package/react/assets/icons/flag.svg +10 -10
- package/react/assets/icons/folder.svg +3 -3
- package/react/assets/icons/font.svg +3 -3
- package/react/assets/icons/globe.svg +3 -3
- package/react/assets/icons/hdd.svg +9 -9
- package/react/assets/icons/key.svg +10 -10
- package/react/assets/icons/life-ring.svg +3 -3
- package/react/assets/icons/magic.svg +15 -15
- package/react/assets/icons/moon.svg +10 -10
- package/react/assets/icons/paint-roller.svg +3 -3
- package/react/assets/icons/pencil.svg +10 -10
- package/react/assets/icons/plus.svg +3 -3
- package/react/assets/icons/question-circle.svg +5 -5
- package/react/assets/icons/search.svg +3 -3
- package/react/assets/icons/sun.svg +9 -9
- package/react/assets/icons/times.svg +3 -3
- package/react/assets/icons/toggle-off.svg +6 -6
- package/react/assets/icons/toggle-on.svg +6 -6
- package/react/assets/icons/tools.svg +3 -3
- package/react/assets/icons/trash.svg +12 -12
- package/react/assets/icons/upload.svg +10 -10
- package/react/assets/icons/window.svg +3 -3
- package/react/componentTemplateGenerator.js +85 -85
- package/react/componentTemplateGenerator.js.map +1 -1
- package/react/components/FinsembleProvider.js.map +1 -1
- package/react/components/appCatalog/AppCatalog.js.map +1 -1
- package/react/components/appCatalog/AppCatalogComponent.js.map +1 -1
- package/react/components/appCatalog/components/AppCard.js.map +1 -1
- package/react/components/appCatalog/components/AppList.js.map +1 -1
- package/react/components/appCatalog/components/AppResults.js.map +1 -1
- package/react/components/appCatalog/components/Carousel.js.map +1 -1
- package/react/components/appCatalog/components/EmptyResults.js.map +1 -1
- package/react/components/appCatalog/components/Hero.js.map +1 -1
- package/react/components/appCatalog/components/Home.js.map +1 -1
- package/react/components/appCatalog/components/SearchBar.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppDescription.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppDevNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppShowcase.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/Header.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/ImageCarousel.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/Modal.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/ReleaseNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/SupportNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/VersionNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/defaults.js.map +1 -1
- package/react/components/appCatalog/components/Tag.js.map +1 -1
- package/react/components/appCatalog/components/Toast.js.map +1 -1
- package/react/components/appCatalog/components/helpers.js.map +1 -1
- package/react/components/appCatalog/index.js.map +1 -1
- package/react/components/appCatalog/modules/AppDirectory.js.map +1 -1
- package/react/components/appCatalog/modules/FDC3.js.map +1 -1
- package/react/components/appCatalog/stores/appStore.js.map +1 -1
- package/react/components/appCatalog/stores/storeActions.js.map +1 -1
- package/react/components/common/Button.js.map +1 -1
- package/react/components/common/ButtonIcon.js.map +1 -1
- package/react/components/common/ButtonTile.js.map +1 -1
- package/react/components/common/ColorPicker.js.map +1 -1
- package/react/components/common/DropZone.js.map +1 -1
- package/react/components/common/DropdownButton.js.map +1 -1
- package/react/components/common/FileInput.js.map +1 -1
- package/react/components/common/FinsembleIcon.js.map +1 -1
- package/react/components/common/FinsembleSelect.js.map +1 -1
- package/react/components/common/FinsembleToggle.js.map +1 -1
- package/react/components/common/FontSizeSelector.js.map +1 -1
- package/react/components/common/Header.js.map +1 -1
- package/react/components/common/ImagePreview.js.map +1 -1
- package/react/components/common/LoadingSpinner.js.map +1 -1
- package/react/components/common/Tab.js.map +1 -1
- package/react/components/common/Tooltip.js.map +1 -1
- package/react/components/common/css/application-edit-page.css +117 -117
- package/react/components/common/css/application-list.css +47 -47
- package/react/components/common/css/button.css +164 -164
- package/react/components/common/css/color-picker.css +52 -52
- package/react/components/common/css/drop-zone.css +17 -17
- package/react/components/common/css/file-input.css +49 -49
- package/react/components/common/css/header.css +43 -43
- package/react/components/common/css/icon.css +13 -13
- package/react/components/common/css/image-preview.css +57 -57
- package/react/components/common/css/loading-spinner.css +39 -39
- package/react/components/common/css/selector.css +51 -51
- package/react/components/common/css/styles.css +128 -128
- package/react/components/common/css/tab.css +56 -56
- package/react/components/common/css/toggle.css +32 -32
- package/react/components/common/css/tooltip.css +68 -68
- package/react/components/common/file_helpers.js.map +1 -1
- package/react/components/common/fixtures/FinsembleIcon.css +4 -4
- package/react/components/common/helpers.js.map +1 -1
- package/react/components/common/stories/Button.stories.js.map +1 -1
- package/react/components/common/stories/ButtonIcon.stories.js.map +1 -1
- package/react/components/common/stories/ButtonTile.stories.js.map +1 -1
- package/react/components/common/stories/ColorPicker.stories.js.map +1 -1
- package/react/components/common/stories/DropZone.stories.js.map +1 -1
- package/react/components/common/stories/FileInput.stories.js.map +1 -1
- package/react/components/common/stories/FinsembleIcon.stories.js.map +1 -1
- package/react/components/common/stories/FinsembleSelect.stories.js.map +1 -1
- package/react/components/common/stories/FinsembleToggle.stories.js.map +1 -1
- package/react/components/common/stories/FontSizeSelector.stories.js.map +1 -1
- package/react/components/common/stories/Header.stories.js.map +1 -1
- package/react/components/common/stories/ImagePreview.stories.js.map +1 -1
- package/react/components/common/stories/LoadingSpinner.stories.js.map +1 -1
- package/react/components/common/stories/Tab.stories.js.map +1 -1
- package/react/components/common/stories/Tooltip.stories.js.map +1 -1
- package/react/components/common/tests/ColorPicker.spec.js.map +1 -1
- package/react/components/common/tests/DropZone.spec.js.map +1 -1
- package/react/components/common/tests/FileInput.spec.js.map +1 -1
- package/react/components/common/tests/FinsembleSelect.spec.js.map +1 -1
- package/react/components/common/tests/FinsembleToggle.spec.js.map +1 -1
- package/react/components/common/tests/Header.spec.js.map +1 -1
- package/react/components/common/tests/ImagePreview.spec.js.map +1 -1
- package/react/components/common/tests/Tab.spec.js.map +1 -1
- package/react/components/common/tests/Tooltip.spec.js.map +1 -1
- package/react/components/favorites/FavoriteMaker.js.map +1 -1
- package/react/components/favorites/FavoritesShell.js.map +1 -1
- package/react/components/favorites/FavoritesShell.spec.js.map +1 -1
- package/react/components/favorites/FavoritesShell.stories.js.map +1 -1
- package/react/components/favorites/index.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverDialog.css +125 -125
- package/react/components/fdc3Resolver/ResolverDialog.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverDialog.spec.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverDialog.stories.js.map +1 -1
- package/react/components/icon/Icon.js.map +1 -1
- package/react/components/icon/index.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialog.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogButton.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogQuestion.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogTextInput.js.map +1 -1
- package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
- package/react/components/legacyControls/FinsembleDraggable.js.map +1 -1
- package/react/components/legacyControls/FinsembleHoverDetector.js.map +1 -1
- package/react/components/legacyControls/FinsembleMenuSection.js.map +1 -1
- package/react/components/legacyControls/stories/FinsembleDialog.stories.js.map +1 -1
- package/react/components/legacyControls/stories/FinsembleDialogButton.stories.js.map +1 -1
- package/react/components/legacyControls/stories/FinsembleDialogQuestion.stories.js.map +1 -1
- package/react/components/legacyControls/stories/FinsembleDialogTextInput.stories.js.map +1 -1
- package/react/components/legacyControls/tests/FinsembleDialog.spec.js.map +1 -1
- package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js.map +1 -1
- package/react/components/legacyControls/tests/FinsembleDialogQuestion.spec.js.map +1 -1
- package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js.map +1 -1
- package/react/components/linker/LinkerMenu.js.map +1 -1
- package/react/components/linker/LinkerMenuDeprecated.js.map +1 -1
- package/react/components/linker/index.js.map +1 -1
- package/react/components/linker/remoteRedux.js.map +1 -1
- package/react/components/menu/Menu.js.map +1 -1
- package/react/components/menu/MenuAutoResizer.js.map +1 -1
- package/react/components/menu/MenuContent.js.map +1 -1
- package/react/components/menu/MenuHotKey.js.map +1 -1
- package/react/components/menu/MenuItem.js.map +1 -1
- package/react/components/menu/MenuPortal.js.map +1 -1
- package/react/components/menu/MenuShell.js.map +1 -1
- package/react/components/menu/MenuToggle.js.map +1 -1
- package/react/components/menu/index.js.map +1 -1
- package/react/components/menu/keyboardNavigation.js.map +1 -1
- package/react/components/menu/menuContext.js.map +1 -1
- package/react/components/menu/menuHelpers.js.map +1 -1
- package/react/components/notifications/components/NoNotifications.js.map +1 -1
- package/react/components/notifications/components/drawer/Drawer.js.map +1 -1
- package/react/components/notifications/components/drawer/DrawerControls.js.map +1 -1
- package/react/components/notifications/components/drawer/DrawerHeader.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.js.map +1 -1
- package/react/components/notifications/components/shared/IconButton.js.map +1 -1
- package/react/components/notifications/components/shared/NotificationCardShell.js +1 -1
- package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
- package/react/components/notifications/components/shared/OverflowMenu.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyContentLogo.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderLogo.js.map +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.js +1 -1
- package/react/components/notifications/components/views/ListView.js.map +1 -1
- package/react/components/notifications/components/views/NotificationDetailsView.js.map +1 -1
- package/react/components/notifications/constants.js.map +1 -1
- package/react/components/notifications/icons/Card.js.map +1 -1
- package/react/components/notifications/icons/Chevron.js.map +1 -1
- package/react/components/notifications/icons/CloseIcon.js.map +1 -1
- package/react/components/notifications/icons/EnvelopeClose.js.map +1 -1
- package/react/components/notifications/icons/EnvelopeOpen.js.map +1 -1
- package/react/components/notifications/icons/SnoozeIcon.js.map +1 -1
- package/react/components/notifications/index.js.map +1 -1
- package/react/components/notifications/notificationsContext.js.map +1 -1
- package/react/components/notifications/types.js.map +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/ChildWindows.js.map +1 -1
- package/react/components/processMonitor/components/ListHeader.js.map +1 -1
- package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
- package/react/components/processMonitor/constants.js.map +1 -1
- package/react/components/processMonitor/helpers.js.map +1 -1
- package/react/components/processMonitor/index.js.map +1 -1
- package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
- package/react/components/quickComponentForm/QuickComponentForm.js.map +1 -1
- package/react/components/quickComponentForm/index.js.map +1 -1
- package/react/components/quickComponentForm/quickComponent.css +3 -3
- package/react/components/search/Highlight.js.map +1 -1
- package/react/components/search/Highlight.spec.js.map +1 -1
- package/react/components/search/Highlight.stories.js.map +1 -1
- package/react/components/search/Search.js.map +1 -1
- package/react/components/search/SearchBestMatch.js.map +1 -1
- package/react/components/search/SearchInput.js.map +1 -1
- package/react/components/search/SearchProviderResults.js.map +1 -1
- package/react/components/search/SearchResult.js.map +1 -1
- package/react/components/search/SearchResults.js.map +1 -1
- package/react/components/search/index.js.map +1 -1
- package/react/components/shared/Animate.js.map +1 -1
- package/react/components/shared/BellIcon.js.map +1 -1
- package/react/components/shared/BellIconCrossed.js.map +1 -1
- package/react/components/shared/Button.js.map +1 -1
- package/react/components/shared/ConditionalWrapper.js.map +1 -1
- package/react/components/shared/DefaultDropdownButton.js.map +1 -1
- package/react/components/shared/NavigationButton.js.map +1 -1
- package/react/components/shared/Tag.js.map +1 -1
- package/react/components/shared/TagsMenu.js.map +1 -1
- package/react/components/shared/addProtocolToValidURL.js.map +1 -1
- package/react/components/shared/addProtocolToValidURL.spec.js.map +1 -1
- package/react/components/shared/linkerUtil.js.map +1 -1
- package/react/components/shared/openQuitConfirmationDialog.js.map +1 -1
- package/react/components/shared/validateURL.js.map +1 -1
- package/react/components/shared/validateURL.spec.js.map +1 -1
- package/react/components/singleInputDialog/SingleInputDialog.css +3 -3
- package/react/components/singleInputDialog/SingleInputDialog.js.map +1 -1
- package/react/components/singleInputDialog/SingleInputDialog.spec.js.map +1 -1
- package/react/components/singleInputDialog/SingleInputDialog.stories.js.map +1 -1
- package/react/components/singleInputDialog/index.js.map +1 -1
- package/react/components/smartDesktopDesigner/AppEditPage.js.map +1 -1
- package/react/components/smartDesktopDesigner/Appearance.css +94 -94
- package/react/components/smartDesktopDesigner/Appearance.helpers.js.map +1 -1
- package/react/components/smartDesktopDesigner/Appearance.js.map +1 -1
- package/react/components/smartDesktopDesigner/Application.js.map +1 -1
- package/react/components/smartDesktopDesigner/ApplicationEdit.js.map +1 -1
- package/react/components/smartDesktopDesigner/ApplicationList.js.map +1 -1
- package/react/components/smartDesktopDesigner/ApplicationSetup.js.map +1 -1
- package/react/components/smartDesktopDesigner/Applications.js.map +1 -1
- package/react/components/smartDesktopDesigner/AssetsPage.css +26 -26
- package/react/components/smartDesktopDesigner/AssetsPage.js.map +1 -1
- package/react/components/smartDesktopDesigner/Authentication.js.map +1 -1
- package/react/components/smartDesktopDesigner/AuthenticationProviderConfig.js.map +1 -1
- package/react/components/smartDesktopDesigner/Content.js.map +1 -1
- package/react/components/smartDesktopDesigner/CurrentView.js.map +1 -1
- package/react/components/smartDesktopDesigner/Export.js.map +1 -1
- package/react/components/smartDesktopDesigner/ExportCloud.js.map +1 -1
- package/react/components/smartDesktopDesigner/ExportDeployInfo.js.map +1 -1
- package/react/components/smartDesktopDesigner/ExportZip.js.map +1 -1
- package/react/components/smartDesktopDesigner/GettingStarted.js.map +1 -1
- package/react/components/smartDesktopDesigner/Navigation.js.map +1 -1
- package/react/components/smartDesktopDesigner/ProjectErrors.js.map +1 -1
- package/react/components/smartDesktopDesigner/ProjectHeader.js.map +1 -1
- package/react/components/smartDesktopDesigner/Publish.js.map +1 -1
- package/react/components/smartDesktopDesigner/PublishProgress.js.map +1 -1
- package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
- package/react/components/smartDesktopDesigner/ThemePage.css +110 -110
- package/react/components/smartDesktopDesigner/ThemePage.js.map +1 -1
- package/react/components/smartDesktopDesigner/Themes.js.map +1 -1
- package/react/components/smartDesktopDesigner/View.js.map +1 -1
- package/react/components/smartDesktopDesigner/common/fsbl_functions.js.map +1 -1
- package/react/components/smartDesktopDesigner/common/getCSSVars.js.map +1 -1
- package/react/components/smartDesktopDesigner/common/views.js +2 -2
- package/react/components/smartDesktopDesigner/common/views.js.map +1 -1
- package/react/components/smartDesktopDesigner/css/appearance.css +10 -10
- package/react/components/smartDesktopDesigner/css/applications.css +89 -89
- package/react/components/smartDesktopDesigner/css/authentication.css +125 -125
- package/react/components/smartDesktopDesigner/css/buttons.css +12 -12
- package/react/components/smartDesktopDesigner/css/export.css +163 -163
- package/react/components/smartDesktopDesigner/css/getting-started.css +6 -6
- package/react/components/smartDesktopDesigner/css/nav.css +93 -93
- package/react/components/smartDesktopDesigner/css/project-errors.css +15 -15
- package/react/components/smartDesktopDesigner/css/project-header.css +121 -121
- package/react/components/smartDesktopDesigner/css/styles.css +179 -179
- package/react/components/smartDesktopDesigner/css/views.css +16 -16
- package/react/components/smartDesktopDesigner/fixtures/applicationEditProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/applicationSetupProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/applicationsProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/apps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/authenticationProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/configTemplate.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/exportProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/projectErrorsProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/publishProgress.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/themeProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/views.js.map +1 -1
- package/react/components/smartDesktopDesigner/sdd_helpers.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/Appearance.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/ApplicationEdit.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/ApplicationList.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/ApplicationSetup.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/Applications.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/AssetsPage.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/Authentication.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/Export.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/ExportCloud.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/ExportZip.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/GettingStarted.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/Navigation.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/ProjectErrors.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/ProjectHeader.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/Publish.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/PublishProgress.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/SmartDesktopDesigner.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/ThemePage.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/Themes.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/AppEditPage.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/ApplicationEdit.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/ApplicationList.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/ApplicationSetup.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/Applications.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/Authentication.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/Export.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/ExportZip.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/Navigation.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/ProjectErrors.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/ProjectHeader.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/Publish.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/PublishProgess.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/SmartDesktopDesigner.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/Themes.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/a11y_helper.js +3 -3
- package/react/components/smartDesktopDesigner/tests/a11y_helper.js.map +1 -1
- package/react/components/smartDesktopDesigner/themeDefinitions.js.map +1 -1
- package/react/components/system/System.js.map +1 -1
- package/react/components/system/System.spec.js.map +1 -1
- package/react/components/system/System.stories.js.map +1 -1
- package/react/components/system/SystemTrayComponentShell.js.map +1 -1
- package/react/components/system/index.js.map +1 -1
- package/react/components/toolbar/AutoArrange.js.map +1 -1
- package/react/components/toolbar/DragHandle.js.map +1 -1
- package/react/components/toolbar/MinimizeAll.js.map +1 -1
- package/react/components/toolbar/MinimizeAll.spec.js.map +1 -1
- package/react/components/toolbar/MinimizeAll.stories.js.map +1 -1
- package/react/components/toolbar/NotificationControl.js.map +1 -1
- package/react/components/toolbar/RevealAll.js.map +1 -1
- package/react/components/toolbar/RevealAll.spec.js.map +1 -1
- package/react/components/toolbar/RevealAll.stories.js.map +1 -1
- package/react/components/toolbar/ToolbarIcon.js.map +1 -1
- package/react/components/toolbar/ToolbarSection.js.map +1 -1
- package/react/components/toolbar/ToolbarShell.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncherMenu.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AppTagsList.js.map +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.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/LeftNav.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/NoAppsFound.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/SortBy.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js.map +1 -1
- 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/advancedAppLauncher/utils/sort-functions.js.map +1 -1
- package/react/components/toolbar/appLauncher/AppLauncherMenu.js.map +1 -1
- package/react/components/toolbar/appLauncher/DynamicAppLauncher.js.map +1 -1
- package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js.map +1 -1
- package/react/components/toolbar/appLauncher/appLauncher.css +30 -30
- package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.js.map +1 -1
- package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
- package/react/components/toolbar/dashbar/DashbarItem.js.map +1 -1
- package/react/components/toolbar/index.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/workspaceManagementMenu.css +94 -94
- package/react/components/userPreferences/NotificationsPreferencesContext.js.map +1 -1
- package/react/components/userPreferences/UserPreferences.js.map +1 -1
- package/react/components/userPreferences/UserPreferencesBase.js.map +1 -1
- package/react/components/userPreferences/components/Checkbox.js.map +1 -1
- package/react/components/userPreferences/components/ContentSection.js.map +1 -1
- package/react/components/userPreferences/components/LeftNav.js.map +1 -1
- package/react/components/userPreferences/components/content/DashbarEditor.js.map +1 -1
- package/react/components/userPreferences/components/content/General.js.map +1 -1
- package/react/components/userPreferences/components/content/Notifications.js.map +1 -1
- package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/notificationViewsUtils.js.map +1 -1
- package/react/components/userPreferences/components/general/ScheduledRestart.js.map +1 -1
- package/react/components/userPreferences/index.js.map +1 -1
- package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
- package/react/components/userPreferences/stories/DashbarEditor.stories.js.map +1 -1
- package/react/components/utils.js.map +1 -1
- package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
- package/react/components/windowTitleBar/components/center/Tab.js.map +1 -1
- package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
- package/react/components/windowTitleBar/components/center/TabRegion.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerGroups.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js.map +1 -1
- package/react/components/windowTitleBar/components/left/ShareButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/CloseButton.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/right/MinimizeButton.js.map +1 -1
- package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
- package/react/components/windowTitleBar/index.js.map +1 -1
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
- package/react/components/windowTitleBar/stores/windowTitleBarStoreDefaults.js.map +1 -1
- package/react/components/windowTitleBar/windowTitleBarContext.js.map +1 -1
- package/react/components/yesNoDialog/Timer.spec.js.map +1 -1
- package/react/components/yesNoDialog/Timer.stories.js.map +1 -1
- package/react/components/yesNoDialog/YesNoDialog.css +3 -3
- package/react/components/yesNoDialog/YesNoDialog.js.map +1 -1
- package/react/components/yesNoDialog/YesNoDialog.spec.js.map +1 -1
- package/react/components/yesNoDialog/YesNoDialog.stories.js.map +1 -1
- package/react/components/yesNoDialog/index.js.map +1 -1
- package/react/components/yesNoDialog/timer.js.map +1 -1
- package/react/enzymeSetup.js.map +1 -1
- package/react/hooks/index.js.map +1 -1
- package/react/hooks/useAuth.js.map +1 -1
- package/react/hooks/useDeepEffect.js.map +1 -1
- package/react/hooks/useFavorites.js.map +1 -1
- package/react/hooks/useFavoritesShell.js.map +1 -1
- package/react/hooks/useHotkey.js.map +1 -1
- package/react/hooks/useLinker.js.map +1 -1
- package/react/hooks/useMenu.js.map +1 -1
- package/react/hooks/useNotifications.js.map +1 -1
- package/react/hooks/useOutsideClickDetector.js.map +1 -1
- package/react/hooks/usePubSub.js.map +1 -1
- package/react/hooks/useSearch.js.map +1 -1
- package/react/hooks/useToolbar.js.map +1 -1
- package/react/hooks/useWorkspace.js.map +1 -1
- package/react/reducers/favoriteReducer.js.map +1 -1
- package/react/reducers/linkerReducer.js.map +1 -1
- package/react/reducers/menuReducer.js.map +1 -1
- package/react/reducers/rootReducer.js.map +1 -1
- package/react/reducers/searchReducer.js.map +1 -1
- package/react/reducers/smartDesktopDesignerReducer.js.map +1 -1
- package/react/reducers/toolbarReducer.js.map +1 -1
- package/react/reducers/workspaceReducer.js.map +1 -1
- package/react/store.js.map +1 -1
- package/react/types/advancedAppLauncherTypes.js.map +1 -1
- package/react/types/dashbarTypes.js.map +1 -1
- package/react/types/favoriteTypes.js.map +1 -1
- package/react/types/fdc3.js.map +1 -1
- package/react/types/hotkeyTypes.js.map +1 -1
- package/react/types/iconTypes.js.map +1 -1
- package/react/types/linkerTypes.js.map +1 -1
- package/react/types/searchTypes.js.map +1 -1
- package/react/types/smartDesktopDesignerTypes.js.map +1 -1
- package/react/types/workspaceTypes.js.map +1 -1
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.js"],"names":[],"mappings":"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","sourcesContent":["/*!\r\n * Copyright 2017 by ChartIQ, Inc.\r\n * All rights reserved.\r\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\r\n */\r\nimport async from \"async\";\r\nimport _ from \"lodash\";\r\n\r\n// When a user cancels the save workspace dialog, we throw an error, which short-circuits the async call.\r\nconst SAVE_DIALOG_CANCEL_ERROR = \"Cancel\";\r\nconst NEGATIVE = \"Negative\";\r\nlet PROMPT_ON_SAVE = false;\r\nlet WorkspaceManagementStore, Actions, WindowClient, StoreClient, Logger, ToolbarStore, WorkspaceManagementGlobalStore;\r\n// Initial data for the store.\r\nlet defaultData = {\r\n\tactiveWorkspace: {},\r\n\tmenuWidth: 285,\r\n\tWorkspaceList: [],\r\n\tnewWorkspaceDialogIsActive: false,\r\n\t/**\r\n\t * State around whether the workspace is currently in the process of switching.\r\n\t *\r\n\t * For simplicity, we're storing this in the local store for now, but this precludes\r\n\t * other components from signaling that the workspace is changing. A consequence,\r\n\t * for example, is that if you switch workspaces uses a pin on the toolbar instead\r\n\t * of the workspace management menu, the spinner doesn't show up.\r\n\t */\r\n\tisSwitchingWorkspaces: false,\r\n\tisPromptingUser: false,\r\n};\r\n\r\nfunction uuidv4() {\r\n\treturn \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n\t\tvar r = (Math.random() * 16) | 0,\r\n\t\t\tv = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n\t\treturn v.toString(16);\r\n\t});\r\n}\r\n\r\nActions = {\r\n\tautoSave: (callback) => {\r\n\t\tlet activeName = FSBL.Clients.WorkspaceClient.activeWorkspace.name;\r\n\t\tif (!PROMPT_ON_SAVE) {\r\n\t\t\tFSBL.Clients.WorkspaceClient.saveAs(\r\n\t\t\t\t{\r\n\t\t\t\t\tname: activeName,\r\n\t\t\t\t\tforce: true,\r\n\t\t\t\t},\r\n\t\t\t\t(err, response) => {\r\n\t\t\t\t\tcallback(err);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\tcallback(null);\r\n\t\t}\r\n\t},\r\n\tinitialize: function () {\r\n\t\t// Gets the workspace list and sets the value in the store.\r\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaces((err, workspaces) => {\r\n\t\t\tLogger.system.debug(\"WorkspaceManagementStore init getWorkspaces\", workspaces);\r\n\t\t\tWorkspaceManagementStore.setValue({\r\n\t\t\t\tfield: \"WorkspaceList\",\r\n\t\t\t\tvalue: workspaces,\r\n\t\t\t});\r\n\t\t});\r\n\r\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.\r\n\t\tFSBL.Clients.WorkspaceClient.getActiveWorkspace((err, activeWorkspace) => {\r\n\t\t\tLogger.system.debug(\"WorkspaceManagementStore init getActiveWorkspace\", activeWorkspace);\r\n\t\t\tWorkspaceManagementStore.setValue({\r\n\t\t\t\tfield: \"activeWorkspace\",\r\n\t\t\t\tvalue: activeWorkspace,\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * We listen here for any workspace updates, and pass them to the store.\r\n\t\t * **NOTE**: You may notice that the signature of this callback is different from the previous ones. In this case we receive a `response`, instead of `workspaces` or `activeWorkspace`. This is because this callback is for a `RouterClient` message. The functions above are callbacks to `WorkspaceClient` API calls.\r\n\t\t */\r\n\t\tFSBL.Clients.RouterClient.subscribe(\"Finsemble.WorkspaceService.update\", (err, response) => {\r\n\t\t\tif (response.data && response.data.activeWorkspace) {\r\n\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore init update\", response.data);\r\n\t\t\t\tWorkspaceManagementStore.setValue({\r\n\t\t\t\t\tfield: \"activeWorkspace\",\r\n\t\t\t\t\tvalue: response.data.activeWorkspace,\r\n\t\t\t\t});\r\n\t\t\t\tWorkspaceManagementStore.setValue({\r\n\t\t\t\t\tfield: \"WorkspaceList\",\r\n\t\t\t\t\tvalue: response.data.workspacesConfig,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\tWorkspaceManagementGlobalStore.getValue({ field: \"owner\" }, (err, data) => {\r\n\t\t\tif (data !== finsembleWindow.name) return;\r\n\t\t\tWorkspaceManagementGlobalStore.Dispatcher.register((action) => {\r\n\t\t\t\t// eslint-disable-next-line default-case\r\n\t\t\t\tswitch (action.actionType) {\r\n\t\t\t\t\tcase \"switchToWorkspace\":\r\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore switchToWorkspace\", action.data);\r\n\t\t\t\t\t\tActions.switchToWorkspace(action.data);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"reorderWorkspace\":\r\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore reorderWorkspace\", action.data);\r\n\t\t\t\t\t\tActions.reorderWorkspaceList(action.data);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"removeWorkspace\":\r\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore removeWorkspace\", action.data);\r\n\t\t\t\t\t\tActions.removeWorkspace(action.data);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"renameWorkspace\":\r\n\t\t\t\t\t\tLogger.system.debug(\"WorkspaceManagementStore renameWorkspace\", action.data);\r\n\t\t\t\t\t\tActions.renameWorkspace(action.data);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t},\r\n\r\n\t/*********************************************************************************************\r\n\t *\r\n\t *\t\t\t\t\t\t\t\tGETTERS/SETTERS\r\n\t *\r\n\t *********************************************************************************************/\r\n\tgetActiveWorkspace: function () {\r\n\t\treturn WorkspaceManagementStore.getValue(\"activeWorkspace\");\r\n\t},\r\n\tgetWorkspaceBeingEdited: function () {\r\n\t\treturn WorkspaceManagementStore.getValue(\"workspaceBeingEdited\");\r\n\t},\r\n\tgetWorkspaceList: function () {\r\n\t\treturn WorkspaceManagementStore.getValue(\"WorkspaceList\");\r\n\t},\r\n\tgetIsSwitchingWorkspaces: function () {\r\n\t\treturn WorkspaceManagementStore.getValue(\"isSwitchingWorkspaces\");\r\n\t},\r\n\tsetIsSwitchingWorkspaces: function (val) {\r\n\t\treturn WorkspaceManagementStore.setValue({\r\n\t\t\tfield: \"isSwitchingWorkspaces\",\r\n\t\t\tvalue: val,\r\n\t\t});\r\n\t},\r\n\tgetIsPromptingUser: function () {\r\n\t\treturn WorkspaceManagementStore.getValue(\"isPromptingUser\");\r\n\t},\r\n\tsetIsPromptingUser: function (val) {\r\n\t\treturn WorkspaceManagementStore.setValue({\r\n\t\t\tfield: \"isPromptingUser\",\r\n\t\t\tvalue: val,\r\n\t\t});\r\n\t},\r\n\t/*********************************************************************************************\r\n\t *\r\n\t *\t\t\t\t\t\t\t\tMain Workspace Actions\r\n\t *\r\n\t *********************************************************************************************/\r\n\t/**\r\n\t * Handles the complete workflow for creating a new workspace.\r\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.\r\n\t */\r\n\tnewWorkspace: function () {\r\n\t\tlet newWorkspaceName;\r\n\t\tLogger.system.log(\"New workspace - start.\");\r\n\t\tlet newWorkspaceDialogIsActive = WorkspaceManagementStore.getValue(\"newWorkspaceDialogIsActive\");\r\n\t\tlet activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\r\n\r\n\t\t// Creates the new workspace.\r\n\t\tfunction createIt(params, cb) {\r\n\t\t\tLogger.system.log(\"createIt\", params);\r\n\t\t\tlet { workspaceName, template } = params;\r\n\t\t\tFSBL.Clients.WorkspaceClient.createNewWorkspace(workspaceName, { templateName: template }, (err, response) => {\r\n\t\t\t\tLogger.system.log(\"createIt createNewWorkspace response\", workspaceName, template, response);\r\n\t\t\t\tnewWorkspaceName = response.workspaceName;\r\n\t\t\t\tif (cb) {\r\n\t\t\t\t\tcb(null, newWorkspaceName);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (!newWorkspaceDialogIsActive) {\r\n\t\t\tWorkspaceManagementStore.setValue({\r\n\t\t\t\tfield: \"newWorkspaceDialogIsActive\",\r\n\t\t\t\tvalue: true,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tActions.blurWindow();\r\n\t\tlet tasks = [\r\n\t\t\tActions.autoSave,\r\n\t\t\tActions.spawnWorkspaceInputField,\r\n\t\t\tActions.validateWorkspaceInput,\r\n\t\t\tActions.checkIfWorkspaceAlreadyExists,\r\n\t\t\tActions.askIfUserWantsNewWorkspace,\r\n\t\t\tcreateIt,\r\n\t\t\tActions.notifyUserOfNewWorkspace,\r\n\t\t];\r\n\t\tif (PROMPT_ON_SAVE) {\r\n\t\t\ttasks = [Actions.askIfUserWantsToSave, Actions.handleSaveDialogResponse].concat(tasks);\r\n\t\t}\r\n\t\tasync.waterfall(tasks, Actions.onAsyncComplete);\r\n\t},\r\n\t/**\r\n\t * Handles the workflow for removing a workspace.\r\n\t * As long as you are not deleting the workspace that is active, it will pop up a confirm dialog, and if the user says \"yes\", it will delete the workspace.\r\n\t * @todo allow the user to delete the active workspace?\r\n\t * @param {object} workspace workspace object.\r\n\t */\r\n\tremoveWorkspace: function (data, cb = Function.prototype) {\r\n\t\tlet workspaceName = data.name;\r\n\t\t// don't allow user to delete active workspace.\r\n\t\tif (FSBL.Clients.WorkspaceClient.activeworkspaceName === workspaceName) {\r\n\t\t\tlet dialogParams = {\r\n\t\t\t\tquestion: \"Workspace cannot be deleted while it is in use. Please switch workspaces and try again.\",\r\n\t\t\t\taffirmativeResponseLabel: \"OK\",\r\n\t\t\t\tshowNegativeButton: false,\r\n\t\t\t\tshowCancelButton: false,\r\n\t\t\t\thideModalOnClose: data.hideModalOnClose,\r\n\t\t\t};\r\n\t\t\treturn Actions.spawnDialog(\"yesNo\", dialogParams);\r\n\t\t}\r\n\r\n\t\tlet dialogParams = {\r\n\t\t\ttitle: \"Delete this workspace?\",\r\n\t\t\tquestion: `Are you sure you want to delete the workspace \"${workspaceName}\"?`,\r\n\t\t\tshowNegativeButton: false,\r\n\t\t\taffirmativeResponseLabel: \"Delete\",\r\n\t\t\thideModalOnClose: data.hideModalOnClose,\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Invoked when the user interacts with the dialog.\r\n\t\t */\r\n\t\tfunction onUserInput(err, response) {\r\n\t\t\tif (response.choice === \"affirmative\") {\r\n\t\t\t\tcb(true);\r\n\t\t\t\tFSBL.Clients.WorkspaceClient.remove({\r\n\t\t\t\t\tname: workspaceName,\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\tcb(false);\r\n\t\t\t}\r\n\t\t}\r\n\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\r\n\t},\r\n\t/**\r\n\t * The `activeWorkspace` is simply a copy of something we brought out of storage. This function copies the `activeWorkspace` to back to storage.\r\n\t */\r\n\tsaveWorkspace: function (cb) {\r\n\t\tlet activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\r\n\t\tFSBL.Clients.WorkspaceClient.saveAs(\r\n\t\t\t{\r\n\t\t\t\tforce: true,\r\n\t\t\t\tname: activeWorkspace.name,\r\n\t\t\t},\r\n\t\t\t(err, response) => {\r\n\t\t\t\tif (cb) {\r\n\t\t\t\t\tcb();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\treorderWorkspaceList: function ({ oldIndex, newIndex }) {\r\n\t\tlet workspaces = WorkspaceManagementStore.getValue({\r\n\t\t\tfield: \"WorkspaceList\",\r\n\t\t});\r\n\t\tlet workspaceToMove = workspaces[oldIndex];\r\n\t\tworkspaces.splice(oldIndex, 1);\r\n\t\tworkspaces.splice(newIndex, 0, workspaceToMove);\r\n\t\tconst workspacesWithExpectedStructure = workspaces.map((WSName) => {\r\n\t\t\treturn {\r\n\t\t\t\tname: WSName,\r\n\t\t\t};\r\n\t\t});\r\n\t\tFSBL.Clients.WorkspaceClient.setWorkspaces({\r\n\t\t\tworkspaces: workspacesWithExpectedStructure,\r\n\t\t});\r\n\t\tWorkspaceManagementStore.setValue({\r\n\t\t\tfield: \"WorkspaceList\",\r\n\t\t\tvalue: workspaces,\r\n\t\t});\r\n\t},\r\n\trenameWorkspace: function ({ oldName, newName }) {\r\n\t\tfunction saveIt(workspaceName, done) {\r\n\t\t\tFSBL.Clients.WorkspaceClient.rename(\r\n\t\t\t\t{\r\n\t\t\t\t\toldName: oldName,\r\n\t\t\t\t\tnewName: workspaceName,\r\n\t\t\t\t\tremoveOldWorkspace: true,\r\n\t\t\t\t\toverWriteExistng: true,\r\n\t\t\t\t},\r\n\t\t\t\t(err, response) => {\r\n\t\t\t\t\tdone();\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\t\tasync.waterfall(\r\n\t\t\t[\r\n\t\t\t\tActions.checkIfWorkspaceAlreadyExists.bind(null, { value: newName }),\r\n\t\t\t\t(result, callback) => {\r\n\t\t\t\t\tif (result.workspaceExists) {\r\n\t\t\t\t\t\tcallback(null, FSBL.Clients.WorkspaceClient.getWorkspaceName(newName));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcallback(null, newName);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tsaveIt,\r\n\t\t\t],\r\n\t\t\tActions.onAsyncComplete\r\n\t\t);\r\n\t},\r\n\tshowPreferences: function () {\r\n\t\tFSBL.Clients.LauncherClient.showWindow(\r\n\t\t\t{\r\n\t\t\t\tcomponentType: \"UserPreferences\",\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tmonitor: \"mine\",\r\n\t\t\t\tleft: \"center\",\r\n\t\t\t\ttop: \"center\",\r\n\t\t\t}\r\n\t\t);\r\n\t},\r\n\t/**\r\n\t * Ask the user for a name, make sure it doesn't already exist, then save.\r\n\t */\r\n\tsaveWorkspaceAs: function () {\r\n\t\tfunction saveIt(workspaceName, callback) {\r\n\t\t\tFSBL.Clients.WorkspaceClient.saveAs(\r\n\t\t\t\t{\r\n\t\t\t\t\tname: workspaceName,\r\n\t\t\t\t\tforce: true,\r\n\t\t\t\t},\r\n\t\t\t\t(err, response) => {\r\n\t\t\t\t\tcallback(err, response);\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\tLogger.system.log(\"SaveWorkspaceAs clicked.\");\r\n\r\n\t\tasync.waterfall(\r\n\t\t\t[\r\n\t\t\t\tActions.autoSave,\r\n\t\t\t\tActions.spawnSaveAsDialog,\r\n\t\t\t\tActions.validateWorkspaceInput,\r\n\t\t\t\tActions.checkIfWorkspaceAlreadyExists,\r\n\t\t\t\tActions.askAboutOverwrite,\r\n\t\t\t\tsaveIt,\r\n\t\t\t],\r\n\t\t\tActions.onAsyncComplete\r\n\t\t);\r\n\t},\r\n\t/**\r\n\t * Asks the user if they'd like to save their data, then loads the requested workspace.\r\n\t */\r\n\tswitchToWorkspace: async function (data) {\r\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);\r\n\t\t// note this prompting flag is cleared in Actions.onAsyncComplete when the previous switch completes (after user responds to the prompt)\r\n\t\tconst prompting = Actions.getIsPromptingUser();\r\n\t\tLogger.system.log(\"workspaceManagementMenuStore: switchToWorkspace\", prompting ? \"prompting\" : \"not-prompting\");\r\n\t\tif (prompting) return;\r\n\r\n\t\tActions.setIsSwitchingWorkspaces(true);\r\n\t\tActions.blurWindow();\r\n\t\tlet { name } = data;\r\n\t\tlet activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\r\n\t\t/**\r\n\t\t * Actually perform the switch. Happens after we ask the user what they want.\r\n\t\t *\r\n\t\t */\r\n\t\tfunction switchWorkspace(callback = Function.prototype) {\r\n\t\t\tFSBL.Clients.WorkspaceClient.switchTo(\r\n\t\t\t\t{\r\n\t\t\t\t\tname: name,\r\n\t\t\t\t},\r\n\t\t\t\t() => {\r\n\t\t\t\t\tActions.setIsSwitchingWorkspaces(false);\r\n\t\t\t\t\tcallback();\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t}\r\n\t\t/**\r\n\t\t * Make sure the user wants to do what they say that they want to do.\r\n\t\t * @param {any} callback\r\n\t\t */\r\n\t\tfunction askAboutReload(callback) {\r\n\t\t\tActions.spawnDialog(\r\n\t\t\t\t\"yesNo\",\r\n\t\t\t\t{\r\n\t\t\t\t\tmonitor: \"primary\",\r\n\t\t\t\t\ttitle: \"Save your workspace?\",\r\n\t\t\t\t\tquestion: `\\\"${activeWorkspace.name}\\\" has unsaved changes. Would you like to save?`,\r\n\t\t\t\t\taffirmativeResponseLabel: \"Save\",\r\n\t\t\t\t\tnegativeResponseLabel: \"Don't Save\",\r\n\t\t\t\t},\r\n\t\t\t\tcallback\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * If the workspace is dirty, we need to do more than if it's clean. We don't want users to lose unsaved work.\r\n\t\t */\r\n\t\tlet tasks = [];\r\n\t\tif (await FSBL.Clients.WorkspaceClient.isWorkspaceDirty()) {\r\n\t\t\tActions.setIsPromptingUser(true);\r\n\t\t\tlet firstMethod = Actions.autoSave,\r\n\t\t\t\tsecondMethod = null;\r\n\t\t\tif (PROMPT_ON_SAVE === true) {\r\n\t\t\t\t// We want to ask the user to save. But if they're trying to reload the workspace, the message needs to be different. The first if block just switches that method.\r\n\t\t\t\tfirstMethod = Actions.askIfUserWantsToSave;\r\n\t\t\t\tif (name === FSBL.Clients.WorkspaceClient.activeWorkspace.name) {\r\n\t\t\t\t\tfirstMethod = askAboutReload;\r\n\t\t\t\t}\r\n\t\t\t\t// If we are not autosaving, we need to process the dialog input.\r\n\t\t\t\tsecondMethod = Actions.handleSaveDialogResponse;\r\n\t\t\t}\r\n\r\n\t\t\t// Build the task list.\r\n\t\t\ttasks = [firstMethod];\r\n\r\n\t\t\tif (secondMethod) {\r\n\t\t\t\ttasks.push(secondMethod);\r\n\t\t\t}\r\n\r\n\t\t\t// Switch is the last thing we do.\r\n\t\t\ttasks.push(switchWorkspace);\r\n\r\n\t\t\tasync.waterfall(tasks, Actions.onAsyncComplete);\r\n\t\t} else {\r\n\t\t\tswitchWorkspace();\r\n\t\t}\r\n\t},\r\n\r\n\t/*********************************************************************************************\r\n\t *\r\n\t *\t\t\t\t\t\t\t\tWorkspace Management Helpers\r\n\t *\r\n\t *********************************************************************************************/\r\n\t/**\r\n\t * General handler for `async.series` and `async.waterfall`.\r\n\t * @todo display errors to the user??\r\n\t *\r\n\t * @param {Error} err\r\n\t * @param {any} result\r\n\t */\r\n\tonAsyncComplete(err, result) {\r\n\t\tLogger.system.debug(\"workspaceManagementMenuStore: onAsyncComplete\");\r\n\t\tWorkspaceManagementStore.setValue({\r\n\t\t\tfield: \"newWorkspaceDialogIsActive\",\r\n\t\t\tvalue: false,\r\n\t\t});\r\n\t\tconst errMessage = err && err.message;\r\n\t\tif (errMessage && errMessage !== NEGATIVE && errMessage !== SAVE_DIALOG_CANCEL_ERROR) {\r\n\t\t\t// handle error.\r\n\t\t\tLogger.system.error(err);\r\n\t\t}\r\n\r\n\t\t// Unlock the UI.\r\n\t\tActions.setIsSwitchingWorkspaces(false);\r\n\t\tActions.setIsPromptingUser(false);\r\n\t},\r\n\t/**\r\n\t * NOTE: Leaving this function here until we figure out notifications.\r\n\t */\r\n\tnotifyUserOfNewWorkspace: function () {\r\n\t\t// @todo, notify. This is just a placeholder for now.\r\n\t},\r\n\t/**\r\n\t * Helper for spawning dialogs. Keeps the internals of other functions squeaky clean.\r\n\t *\r\n\t * @param {string} type \"yesNo\" or \"singleInput\"\r\n\t * @param {object} data Optional params for the dialog call.\r\n\t * @param {function} responseCallback invoked when the user interacts with the dialog.\r\n\t */\r\n\tspawnDialog(type, data, responseCallback) {\r\n\t\tLogger.system.debug(\"spawnDialog\", type, data);\r\n\t\tif (type === \"singleInput\" || type === \"inputAndSelection\") {\r\n\t\t\tdata.showCancelButton = true;\r\n\t\t}\r\n\t\tFSBL.Clients.DialogManager.open(type, data, responseCallback);\r\n\t},\r\n\tspawnSaveAsDialog: function (cb) {\r\n\t\tfunction onUserInput(err, response) {\r\n\t\t\tLogger.system.log(\"SpawnWorkspaceInput onUserInput\", response);\r\n\t\t\tif (err) {\r\n\t\t\t\t// Error objects cause async to invoke the final callback in async.waterfall.\r\n\t\t\t\terr = new Error(err);\r\n\t\t\t}\r\n\t\t\tif (cb) {\r\n\t\t\t\tcb(err, response);\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet dialogParams = {\r\n\t\t\ttitle: \"Enter a name for your new workspace.\",\r\n\t\t\tinputLabel: \"Enter a name for your new workspace.\",\r\n\t\t\taffirmativeResponseLabel: \"Confirm\",\r\n\t\t\tshowCancelButton: false,\r\n\t\t\tshowNegativeButton: false,\r\n\t\t};\r\n\r\n\t\tActions.spawnDialog(\"singleInput\", dialogParams, onUserInput);\r\n\t},\r\n\t/**\r\n\t * Spawns an input field asking what the user would like to name their new workspace.\r\n\t */\r\n\tspawnWorkspaceInputField: function (cb) {\r\n\t\t// Spawns the dialog with the input field and accepts a callback to be invoked after the user acts.\r\n\t\tLogger.system.log(\"SpawnWorkspaceInput - start\");\r\n\t\tfunction onUserInput(err, response) {\r\n\t\t\tLogger.system.log(\"SpawnWorkspaceInput onUserInput\", response);\r\n\t\t\tif (err) {\r\n\t\t\t\t// Error objects cause async to invoke the final callback in async.waterfall.\r\n\t\t\t\terr = new Error(err);\r\n\t\t\t}\r\n\t\t\tif (cb) {\r\n\t\t\t\tcb(err, response);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet dialogParams = {\r\n\t\t\ttitle: \"Enter a name for your new workspace.\",\r\n\t\t\tinputLabel: \"Enter a name for your new workspace.\",\r\n\t\t\taffirmativeResponseLabel: \"Confirm\",\r\n\t\t\tshowCancelButton: false,\r\n\t\t\tshowNegativeButton: false,\r\n\t\t};\r\n\r\n\t\tActions.spawnDialog(\"singleInput\", dialogParams, onUserInput);\r\n\t},\r\n\t/**\r\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.\r\n\t */\r\n\taskIfUserWantsToSave: async function (callback) {\r\n\t\tlet activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\r\n\t\tif (await FSBL.Clients.WorkspaceClient.isWorkspaceDirty()) {\r\n\t\t\tLogger.system.log(\"NewWorkspace.spawnDialog start.\");\r\n\t\t\tlet dialogParams = {\r\n\t\t\t\tmonitor: \"primary\",\r\n\t\t\t\ttitle: \"Save your workspace?\",\r\n\t\t\t\tquestion: `\\\"${activeWorkspace.name}\\\" has unsaved changes. Would you like to save?`,\r\n\t\t\t\taffirmativeResponseLabel: \"Save\",\r\n\t\t\t\tnegativeResponseLabel: \"Don't Save\",\r\n\t\t\t};\r\n\t\t\tfunction waitForUserInput() {\r\n\t\t\t\treturn new Promise((resolve) => {\r\n\t\t\t\t\tfunction onUserInput(err, response) {\r\n\t\t\t\t\t\tLogger.system.log(\"Spawn Dialog callback.\");\r\n\t\t\t\t\t\tif (callback) callback(null, response);\r\n\t\t\t\t\t\tresolve(response);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\treturn await waitForUserInput();\r\n\t\t} else {\r\n\t\t\t// In this case the workspace is not dirty, so we don't need to save.\r\n\t\t\tif (callback) callback(null, { choice: \"negative\" });\r\n\t\t\treturn { choice: \"negative\" };\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Handles the response from the dialog asking if the user wants to save their workspace.\r\n\t *\r\n\t * @param {any} response\r\n\t * @param {any} callback\r\n\t */\r\n\thandleSaveDialogResponse(response, callback) {\r\n\t\tif (response.choice === \"affirmative\") {\r\n\t\t\t// User wants to save, so call the client API.\r\n\t\t\tActions.saveWorkspace(callback);\r\n\t\t} else if (response.choice === \"negative\") {\r\n\t\t\t// Doesn't want to save.\r\n\t\t\tcallback();\r\n\t\t} else {\r\n\t\t\t// choice === cancel\r\n\t\t\tcallback(new Error(SAVE_DIALOG_CANCEL_ERROR));\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Makes sure the user has input a valid workspace name.\r\n\t *\r\n\t * @param {any} response\r\n\t * @param {any} callback\r\n\t * @returns\r\n\t */\r\n\tvalidateWorkspaceInput(response, callback) {\r\n\t\tLogger.system.log(\"spawnWorkspaceInput\", response);\r\n\t\t// If user wants to proceed but gave an invalid name, tell them that they messed up, then die.\r\n\t\t// @todo, look in to using async.retry - we could throw an error and start the whole process over again.\r\n\t\tif (response.choice !== \"cancel\" && (!response.value || response.value === \"\")) {\r\n\t\t\tlet dialogParams = {\r\n\t\t\t\ttitle: \"Invalid Workspace Name\",\r\n\t\t\t\tquestion: \"Workspace names must contain letters or numbers. Please try again.\",\r\n\t\t\t\taffirmativeResponseLabel: \"OK\",\r\n\t\t\t\tshowNegativeButton: false,\r\n\t\t\t\tshowCancelButton: false,\r\n\t\t\t};\r\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, Function.prototype);\r\n\t\t\treturn callback(new Error(\"Invalid workspace name.\"));\r\n\t\t} else if (response.choice === \"cancel\") {\r\n\t\t\treturn callback(new Error(SAVE_DIALOG_CANCEL_ERROR));\r\n\t\t}\r\n\t\tcallback(null, response);\r\n\t},\r\n\taskAboutOverwrite(params, callback) {\r\n\t\tlet { workspaceExists, workspaceName } = params;\r\n\t\tlet dialogParams = {\r\n\t\t\ttitle: \"Overwrite Workspace?\",\r\n\t\t\tquestion: `This will overwrite the saved data for \"${workspaceName}\". Would you like to proceed?`,\r\n\t\t\taffirmativeResponseLabel: \"Overwrite\",\r\n\t\t\tshowNegativeButton: false,\r\n\t\t};\r\n\t\tfunction onUserInput(err, response) {\r\n\t\t\tif (response.choice === \"affirmative\") {\r\n\t\t\t\tcallback(null, workspaceName);\r\n\t\t\t} else {\r\n\t\t\t\tcallback(new Error(NEGATIVE));\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (workspaceExists) {\r\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\r\n\t\t} else {\r\n\t\t\tcallback(null, workspaceName);\r\n\t\t}\r\n\t},\r\n\taskIfUserWantsNewWorkspace(params, callback) {\r\n\t\tlet { workspaceExists, workspaceName, template } = params;\r\n\r\n\t\tlet dialogParams = {\r\n\t\t\ttitle: \"New workspace\",\r\n\t\t\tquestion: `The workspace \"${workspaceName}\" already exists. A new workspace with a modified name will be created.`,\r\n\t\t\taffirmativeResponseLabel: \"OK\",\r\n\t\t\tshowNegativeButton: false,\r\n\t\t};\r\n\r\n\t\tfunction onUserInput(err, response) {\r\n\t\t\tif (response.choice === \"affirmative\") {\r\n\t\t\t\tcallback(null, { workspaceName, template });\r\n\t\t\t} else {\r\n\t\t\t\tcallback(new Error(NEGATIVE));\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (workspaceExists) {\r\n\t\t\tActions.spawnDialog(\"yesNo\", dialogParams, onUserInput);\r\n\t\t} else {\r\n\t\t\tcallback(null, { workspaceName, template });\r\n\t\t}\r\n\t},\r\n\t/**\r\n\t * Checks if the workspace exists. If it does, it asks the user if they're comfortable overwriting that data.\r\n\t *\r\n\t * @param {any} response\r\n\t * @param {any} callback\r\n\t */\r\n\tcheckIfWorkspaceAlreadyExists(response, callback) {\r\n\t\tlet workspaceName = response.value;\r\n\t\t// Array.some will return true for the first element in the array that satisfies the condition. If none are true, it'll go through the entire array. It's essentially a way to short-circuit a for loop. This lets us know if any workspace has the same name that the user is trying to input.\r\n\t\tlet workspaceExists = FSBL.Clients.WorkspaceClient.workspaces.some((workspace) => workspace === workspaceName);\r\n\t\tcallback(null, {\r\n\t\t\tworkspaceExists,\r\n\t\t\tworkspaceName,\r\n\t\t\ttemplate: response.template,\r\n\t\t});\r\n\t},\r\n\t/*********************************************************************************************\r\n\t *\r\n\t *\t\t\t\t\t\t\t\tMisc functionality\r\n\t *\r\n\t *********************************************************************************************/\r\n\t/**\r\n\t * Un-focuses from the menu.\r\n\t */\r\n\tblurWindow: function () {\r\n\t\tfinsembleWindow.blur();\r\n\t},\r\n};\r\n\r\nfunction createLocalStore(done) {\r\n\tStoreClient.createStore({ store: \"Finsemble-WorkspaceMenu-Local-Store\", values: defaultData }, (err, store) => {\r\n\t\tWorkspaceManagementStore = store;\r\n\t\tdone();\r\n\t});\r\n}\r\n\r\nfunction createGlobalStore(done) {\r\n\tStoreClient.createStore(\r\n\t\t{\r\n\t\t\tstore: \"Finsemble-WorkspaceMenu-Global-Store\",\r\n\t\t\tglobal: true,\r\n\t\t\tvalues: { owner: finsembleWindow.name },\r\n\t\t},\r\n\t\t(err, store) => {\r\n\t\t\tWorkspaceManagementGlobalStore = store;\r\n\t\t\tdone();\r\n\t\t}\r\n\t);\r\n}\r\n\r\nfunction getPreferences(done) {\r\n\tFSBL.Clients.ConfigClient.getValue(\r\n\t\t{\r\n\t\t\tfield: \"finsemble.preferences.workspaceService.promptUserOnDirtyWorkspace\",\r\n\t\t},\r\n\t\t(err, data) => {\r\n\t\t\tlet prompt = data;\r\n\t\t\t// default to false.\r\n\t\t\tPROMPT_ON_SAVE = prompt === null ? PROMPT_ON_SAVE : prompt;\r\n\t\t\tdone();\r\n\t\t}\r\n\t);\r\n}\r\n\r\n/**\r\n * Initializes the store for the Workspace Management Menu.\r\n *\r\n * @param {any} cb\r\n */\r\nfunction initialize(cb) {\r\n\tWindowClient = FSBL.Clients.WindowClient;\r\n\tStoreClient = FSBL.Clients.DistributedStoreClient;\r\n\tLogger = FSBL.Clients.Logger;\r\n\tasync.parallel([createGlobalStore, createLocalStore, getPreferences], () => {\r\n\t\tActions.initialize();\r\n\t\tcb(WorkspaceManagementStore);\r\n\t});\r\n}\r\n\r\nlet getStore = () => WorkspaceManagementStore;\r\n\r\n/**\r\n * This is a quick little initialization manager that Terry hacked up.\r\n * Ultimately everything in this file should be rewritten in hooks/redux pattern.\r\n */\r\nclass StoreManager {\r\n\tconstructor() {\r\n\t\tthis.initialized = false;\r\n\t\tthis.initializing = false;\r\n\t\tthis.callbacks = [];\r\n\t\tthis.store = null;\r\n\t}\r\n\r\n\tinitialize() {\r\n\t\tif (this.initializing) return;\r\n\t\tthis.initializing = true;\r\n\t\tinitialize((store) => {\r\n\t\t\tthis.initialized = true;\r\n\t\t\tthis.store = store;\r\n\t\t\tthis.callbacks.forEach((cb) => cb(store));\r\n\t\t});\r\n\t}\r\n\r\n\taddInitializedListener(cb) {\r\n\t\tif (this.initialized) return cb(this.store);\r\n\t\tthis.callbacks.push(cb);\r\n\t}\r\n\r\n\tremoveInitializedListener(cb) {\r\n\t\tthis.callbacks = this.callbacks.filter((entry) => entry !== cb);\r\n\t}\r\n}\r\nconst storeManager = new StoreManager();\r\n\r\nexport { storeManager };\r\n\r\nexport { WorkspaceManagementGlobalStore as GlobalStore };\r\nexport { initialize };\r\nexport { WorkspaceManagementStore as Store };\r\nexport { Actions };\r\nexport { getStore };\r\n"]}
|
|
1
|
+
{"version":3,"file":"workspaceManagementMenuStore.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js"],"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 _ from \"lodash\";\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, Actions, WindowClient, StoreClient, Logger, ToolbarStore, WorkspaceManagementGlobalStore;\n// Initial data for the store.\nlet 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\nfunction uuidv4() {\n\treturn \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\t\tv = c === \"x\" ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n}\n\nActions = {\n\tautoSave: (callback) => {\n\t\tlet 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, response) => {\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: function () {\n\t\t// Gets the workspace list and sets the value in the store.\n\t\tFSBL.Clients.WorkspaceClient.getWorkspaces((err, workspaces) => {\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((err, activeWorkspace) => {\n\t\t\tLogger.system.debug(\"WorkspaceManagementStore init getActiveWorkspace\", activeWorkspace);\n\t\t\tWorkspaceManagementStore.setValue({\n\t\t\t\tfield: \"activeWorkspace\",\n\t\t\t\tvalue: activeWorkspace,\n\t\t\t});\n\t\t});\n\n\t\t/**\n\t\t * We listen here for any workspace updates, and pass them to the store.\n\t\t * **NOTE**: You may notice that the signature of this callback is different from the previous ones. In this case we receive a `response`, instead of `workspaces` or `activeWorkspace`. This is because this callback is for a `RouterClient` message. The functions above are callbacks to `WorkspaceClient` API calls.\n\t\t */\n\t\tFSBL.Clients.RouterClient.subscribe(\"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\t\tWorkspaceManagementGlobalStore.getValue({ field: \"owner\" }, (err, data) => {\n\t\t\tif (data !== finsembleWindow.name) return;\n\t\t\tWorkspaceManagementGlobalStore.Dispatcher.register((action) => {\n\t\t\t\t// eslint-disable-next-line default-case\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(action.data);\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}\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: function () {\n\t\treturn WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\t},\n\tgetWorkspaceBeingEdited: function () {\n\t\treturn WorkspaceManagementStore.getValue(\"workspaceBeingEdited\");\n\t},\n\tgetWorkspaceList: function () {\n\t\treturn WorkspaceManagementStore.getValue(\"WorkspaceList\");\n\t},\n\tgetIsSwitchingWorkspaces: function () {\n\t\treturn WorkspaceManagementStore.getValue(\"isSwitchingWorkspaces\");\n\t},\n\tsetIsSwitchingWorkspaces: function (val) {\n\t\treturn WorkspaceManagementStore.setValue({\n\t\t\tfield: \"isSwitchingWorkspaces\",\n\t\t\tvalue: val,\n\t\t});\n\t},\n\tgetIsPromptingUser: function () {\n\t\treturn WorkspaceManagementStore.getValue(\"isPromptingUser\");\n\t},\n\tsetIsPromptingUser: function (val) {\n\t\treturn WorkspaceManagementStore.setValue({\n\t\t\tfield: \"isPromptingUser\",\n\t\t\tvalue: val,\n\t\t});\n\t},\n\t/*********************************************************************************************\n\t *\n\t *\t\t\t\t\t\t\t\tMain Workspace Actions\n\t *\n\t *********************************************************************************************/\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;\n\t\tLogger.system.log(\"New workspace - start.\");\n\t\tlet newWorkspaceDialogIsActive = WorkspaceManagementStore.getValue(\"newWorkspaceDialogIsActive\");\n\t\tlet activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\n\t\t// Creates the new workspace.\n\t\tfunction createIt(params, cb) {\n\t\t\tLogger.system.log(\"createIt\", params);\n\t\t\tlet { workspaceName, template } = params;\n\t\t\tFSBL.Clients.WorkspaceClient.createNewWorkspace(workspaceName, { templateName: template }, (err, response) => {\n\t\t\t\tLogger.system.log(\"createIt createNewWorkspace response\", workspaceName, template, 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 = [\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\tActions.notifyUserOfNewWorkspace,\n\t\t];\n\t\tif (PROMPT_ON_SAVE) {\n\t\t\ttasks = [Actions.askIfUserWantsToSave, Actions.handleSaveDialogResponse].concat(tasks);\n\t\t}\n\t\tasync.waterfall(tasks, Actions.onAsyncComplete);\n\t},\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, and if the user says \"yes\", it will delete the workspace.\n\t * @todo allow the user to delete the active workspace?\n\t * @param {object} workspace workspace object.\n\t */\n\tremoveWorkspace: function (data, cb = Function.prototype) {\n\t\tlet workspaceName = data.name;\n\t\t// don't allow user to delete active workspace.\n\t\tif (FSBL.Clients.WorkspaceClient.activeworkspaceName === workspaceName) {\n\t\t\tlet dialogParams = {\n\t\t\t\tquestion: \"Workspace cannot be deleted while it is in use. Please switch workspaces and try again.\",\n\t\t\t\taffirmativeResponseLabel: \"OK\",\n\t\t\t\tshowNegativeButton: false,\n\t\t\t\tshowCancelButton: false,\n\t\t\t\thideModalOnClose: data.hideModalOnClose,\n\t\t\t};\n\t\t\treturn Actions.spawnDialog(\"yesNo\", dialogParams);\n\t\t}\n\n\t\tlet 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, response) {\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: function (cb) {\n\t\tlet 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(err, response) => {\n\t\t\t\tif (cb) {\n\t\t\t\t\tcb();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\treorderWorkspaceList: function ({ oldIndex, newIndex }) {\n\t\tlet workspaces = WorkspaceManagementStore.getValue({\n\t\t\tfield: \"WorkspaceList\",\n\t\t});\n\t\tlet 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\tworkspaces: workspacesWithExpectedStructure,\n\t\t});\n\t\tWorkspaceManagementStore.setValue({\n\t\t\tfield: \"WorkspaceList\",\n\t\t\tvalue: workspaces,\n\t\t});\n\t},\n\trenameWorkspace: function ({ oldName, newName }) {\n\t\tfunction saveIt(workspaceName, done) {\n\t\t\tFSBL.Clients.WorkspaceClient.rename(\n\t\t\t\t{\n\t\t\t\t\toldName: oldName,\n\t\t\t\t\tnewName: workspaceName,\n\t\t\t\t\tremoveOldWorkspace: true,\n\t\t\t\t\toverWriteExistng: true,\n\t\t\t\t},\n\t\t\t\t(err, response) => {\n\t\t\t\t\tdone();\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t\tasync.waterfall(\n\t\t\t[\n\t\t\t\tActions.checkIfWorkspaceAlreadyExists.bind(null, { value: newName }),\n\t\t\t\t(result, callback) => {\n\t\t\t\t\tif (result.workspaceExists) {\n\t\t\t\t\t\tcallback(null, FSBL.Clients.WorkspaceClient.getWorkspaceName(newName));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback(null, newName);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsaveIt,\n\t\t\t],\n\t\t\tActions.onAsyncComplete\n\t\t);\n\t},\n\tshowPreferences: function () {\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\t/**\n\t * Ask the user for a name, make sure it doesn't already exist, then save.\n\t */\n\tsaveWorkspaceAs: function () {\n\t\tfunction saveIt(workspaceName, callback) {\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, response) => {\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\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 (data) {\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\tlet { name } = data;\n\t\tlet activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\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\tfunction switchWorkspace(callback = Function.prototype) {\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\t\t/**\n\t\t * Make sure the user wants to do what they say that they want to do.\n\t\t * @param {any} callback\n\t\t */\n\t\tfunction askAboutReload(callback) {\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. We don't want users to lose unsaved work.\n\t\t */\n\t\tlet tasks = [];\n\t\tif (await FSBL.Clients.WorkspaceClient.isWorkspaceDirty()) {\n\t\t\tActions.setIsPromptingUser(true);\n\t\t\tlet firstMethod = Actions.autoSave,\n\t\t\t\tsecondMethod = null;\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, 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\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\t/**\n\t * General handler for `async.series` and `async.waterfall`.\n\t * @todo display errors to the user??\n\t *\n\t * @param {Error} err\n\t * @param {any} result\n\t */\n\tonAsyncComplete(err, result) {\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 && 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\t/**\n\t * NOTE: Leaving this function here until we figure out notifications.\n\t */\n\tnotifyUserOfNewWorkspace: function () {\n\t\t// @todo, notify. This is just a placeholder for now.\n\t},\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, data, responseCallback) {\n\t\tLogger.system.debug(\"spawnDialog\", type, data);\n\t\tif (type === \"singleInput\" || type === \"inputAndSelection\") {\n\t\t\tdata.showCancelButton = true;\n\t\t}\n\t\tFSBL.Clients.DialogManager.open(type, data, responseCallback);\n\t},\n\tspawnSaveAsDialog: function (cb) {\n\t\tfunction onUserInput(err, response) {\n\t\t\tLogger.system.log(\"SpawnWorkspaceInput onUserInput\", response);\n\t\t\tif (err) {\n\t\t\t\t// Error objects cause async to invoke the final callback in async.waterfall.\n\t\t\t\terr = new Error(err);\n\t\t\t}\n\t\t\tif (cb) {\n\t\t\t\tcb(err, response);\n\t\t\t}\n\t\t}\n\t\tlet 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\t/**\n\t * Spawns an input field asking what the user would like to name their new workspace.\n\t */\n\tspawnWorkspaceInputField: function (cb) {\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\tfunction onUserInput(err, response) {\n\t\t\tLogger.system.log(\"SpawnWorkspaceInput onUserInput\", response);\n\t\t\tif (err) {\n\t\t\t\t// Error objects cause async to invoke the final callback in async.waterfall.\n\t\t\t\terr = new Error(err);\n\t\t\t}\n\t\t\tif (cb) {\n\t\t\t\tcb(err, response);\n\t\t\t}\n\t\t}\n\n\t\tlet 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\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) {\n\t\tlet activeWorkspace = WorkspaceManagementStore.getValue(\"activeWorkspace\");\n\t\tif (await FSBL.Clients.WorkspaceClient.isWorkspaceDirty()) {\n\t\t\tLogger.system.log(\"NewWorkspace.spawnDialog start.\");\n\t\t\tlet 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\tfunction waitForUserInput() {\n\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\tfunction onUserInput(err, response) {\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\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\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, callback) {\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();\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\t * @param {any} response\n\t * @param {any} callback\n\t * @returns\n\t */\n\tvalidateWorkspaceInput(response, callback) {\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\t// @todo, look in to using async.retry - we could throw an error and start the whole process over again.\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, Function.prototype);\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\taskAboutOverwrite(params, callback) {\n\t\tlet { workspaceExists, workspaceName } = params;\n\t\tlet 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\tfunction onUserInput(err, response) {\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, callback) {\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, response) {\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\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\t * @param {any} response\n\t * @param {any} callback\n\t */\n\tcheckIfWorkspaceAlreadyExists(response, callback) {\n\t\tlet workspaceName = response.value;\n\t\t// Array.some will return true for the first element in the array that satisfies the condition. If none are true, it'll go through the entire array. It's essentially a way to short-circuit a for loop. This lets us know if any workspace has the same name that the user is trying to input.\n\t\tlet workspaceExists = FSBL.Clients.WorkspaceClient.workspaces.some((workspace) => workspace === workspaceName);\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) {\n\tStoreClient.createStore({ store: \"Finsemble-WorkspaceMenu-Local-Store\", values: defaultData }, (err, store) => {\n\t\tWorkspaceManagementStore = store;\n\t\tdone();\n\t});\n}\n\nfunction createGlobalStore(done) {\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, store) => {\n\t\t\tWorkspaceManagementGlobalStore = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nfunction getPreferences(done) {\n\tFSBL.Clients.ConfigClient.getValue(\n\t\t{\n\t\t\tfield: \"finsemble.preferences.workspaceService.promptUserOnDirtyWorkspace\",\n\t\t},\n\t\t(err, data) => {\n\t\t\tlet prompt = data;\n\t\t\t// default to false.\n\t\t\tPROMPT_ON_SAVE = prompt === null ? 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 *\n * @param {any} cb\n */\nfunction initialize(cb) {\n\tWindowClient = FSBL.Clients.WindowClient;\n\tStoreClient = FSBL.Clients.DistributedStoreClient;\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\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) => {\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) {\n\t\tif (this.initialized) return cb(this.store);\n\t\tthis.callbacks.push(cb);\n\t}\n\n\tremoveInitializedListener(cb) {\n\t\tthis.callbacks = this.callbacks.filter((entry) => entry !== cb);\n\t}\n}\nconst storeManager = new StoreManager();\n\nexport { storeManager };\n\nexport { WorkspaceManagementGlobalStore as GlobalStore };\nexport { initialize };\nexport { WorkspaceManagementStore as Store };\nexport { Actions };\nexport { getStore };\n"]}
|
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* workspaceManagementMenu.css
|
|
3
|
-
* Copyright 2017 - 2020 by ChartIQ, Inc.
|
|
4
|
-
* All rights reserved.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
.active-workspace > div {
|
|
8
|
-
font-weight: var(--menu-active-workspace-font-weight);
|
|
9
|
-
color: var(--menu-active-workspace-font-color);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.workspace-name {
|
|
13
|
-
text-overflow: ellipsis;
|
|
14
|
-
white-space: nowrap;
|
|
15
|
-
overflow: hidden;
|
|
16
|
-
position: relative;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.workspace-menu-list {
|
|
20
|
-
padding-top: 4px;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.fsbl-loader {
|
|
24
|
-
font-size: 10px;
|
|
25
|
-
margin: 10px 10px 10px 1px;
|
|
26
|
-
text-indent: -9999em;
|
|
27
|
-
width: 10px;
|
|
28
|
-
height: 10px;
|
|
29
|
-
top: -7px;
|
|
30
|
-
border-radius: 50%;
|
|
31
|
-
background: #ffffff;
|
|
32
|
-
background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
33
|
-
background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
34
|
-
background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
35
|
-
background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
36
|
-
background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
37
|
-
position: relative;
|
|
38
|
-
-webkit-animation: load3 1.4s infinite linear;
|
|
39
|
-
animation: load3 1.4s infinite linear;
|
|
40
|
-
-webkit-transform: translateZ(0);
|
|
41
|
-
-ms-transform: translateZ(0);
|
|
42
|
-
transform: translateZ(0);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
.fsbl-loader:before {
|
|
46
|
-
width: 50%;
|
|
47
|
-
height: 50%;
|
|
48
|
-
background: #ffffff;
|
|
49
|
-
border-radius: 100% 0 0 0;
|
|
50
|
-
position: absolute;
|
|
51
|
-
top: 0;
|
|
52
|
-
left: 0;
|
|
53
|
-
content: "";
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.fsbl-loader:after {
|
|
57
|
-
/*
|
|
58
|
-
@TODO @FIXME
|
|
59
|
-
This value shouldn't be hard coded!
|
|
60
|
-
*/
|
|
61
|
-
background: #303d47;
|
|
62
|
-
width: 75%;
|
|
63
|
-
height: 75%;
|
|
64
|
-
border-radius: 50%;
|
|
65
|
-
content: "";
|
|
66
|
-
margin: auto;
|
|
67
|
-
position: absolute;
|
|
68
|
-
top: 0;
|
|
69
|
-
left: 0;
|
|
70
|
-
bottom: 0;
|
|
71
|
-
right: 0;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
@-webkit-keyframes load3 {
|
|
75
|
-
0% {
|
|
76
|
-
-webkit-transform: rotate(0deg);
|
|
77
|
-
transform: rotate(0deg);
|
|
78
|
-
}
|
|
79
|
-
100% {
|
|
80
|
-
-webkit-transform: rotate(360deg);
|
|
81
|
-
transform: rotate(360deg);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@keyframes load3 {
|
|
86
|
-
0% {
|
|
87
|
-
-webkit-transform: rotate(0deg);
|
|
88
|
-
transform: rotate(0deg);
|
|
89
|
-
}
|
|
90
|
-
100% {
|
|
91
|
-
-webkit-transform: rotate(360deg);
|
|
92
|
-
transform: rotate(360deg);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
1
|
+
/*!
|
|
2
|
+
* workspaceManagementMenu.css
|
|
3
|
+
* Copyright 2017 - 2020 by ChartIQ, Inc.
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
.active-workspace > div {
|
|
8
|
+
font-weight: var(--menu-active-workspace-font-weight);
|
|
9
|
+
color: var(--menu-active-workspace-font-color);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.workspace-name {
|
|
13
|
+
text-overflow: ellipsis;
|
|
14
|
+
white-space: nowrap;
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
position: relative;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.workspace-menu-list {
|
|
20
|
+
padding-top: 4px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.fsbl-loader {
|
|
24
|
+
font-size: 10px;
|
|
25
|
+
margin: 10px 10px 10px 1px;
|
|
26
|
+
text-indent: -9999em;
|
|
27
|
+
width: 10px;
|
|
28
|
+
height: 10px;
|
|
29
|
+
top: -7px;
|
|
30
|
+
border-radius: 50%;
|
|
31
|
+
background: #ffffff;
|
|
32
|
+
background: -moz-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
33
|
+
background: -webkit-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
34
|
+
background: -o-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
35
|
+
background: -ms-linear-gradient(left, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
36
|
+
background: linear-gradient(to right, #ffffff 10%, rgba(255, 255, 255, 0) 42%);
|
|
37
|
+
position: relative;
|
|
38
|
+
-webkit-animation: load3 1.4s infinite linear;
|
|
39
|
+
animation: load3 1.4s infinite linear;
|
|
40
|
+
-webkit-transform: translateZ(0);
|
|
41
|
+
-ms-transform: translateZ(0);
|
|
42
|
+
transform: translateZ(0);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.fsbl-loader:before {
|
|
46
|
+
width: 50%;
|
|
47
|
+
height: 50%;
|
|
48
|
+
background: #ffffff;
|
|
49
|
+
border-radius: 100% 0 0 0;
|
|
50
|
+
position: absolute;
|
|
51
|
+
top: 0;
|
|
52
|
+
left: 0;
|
|
53
|
+
content: "";
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.fsbl-loader:after {
|
|
57
|
+
/*
|
|
58
|
+
@TODO @FIXME
|
|
59
|
+
This value shouldn't be hard coded!
|
|
60
|
+
*/
|
|
61
|
+
background: #303d47;
|
|
62
|
+
width: 75%;
|
|
63
|
+
height: 75%;
|
|
64
|
+
border-radius: 50%;
|
|
65
|
+
content: "";
|
|
66
|
+
margin: auto;
|
|
67
|
+
position: absolute;
|
|
68
|
+
top: 0;
|
|
69
|
+
left: 0;
|
|
70
|
+
bottom: 0;
|
|
71
|
+
right: 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@-webkit-keyframes load3 {
|
|
75
|
+
0% {
|
|
76
|
+
-webkit-transform: rotate(0deg);
|
|
77
|
+
transform: rotate(0deg);
|
|
78
|
+
}
|
|
79
|
+
100% {
|
|
80
|
+
-webkit-transform: rotate(360deg);
|
|
81
|
+
transform: rotate(360deg);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@keyframes load3 {
|
|
86
|
+
0% {
|
|
87
|
+
-webkit-transform: rotate(0deg);
|
|
88
|
+
transform: rotate(0deg);
|
|
89
|
+
}
|
|
90
|
+
100% {
|
|
91
|
+
-webkit-transform: rotate(360deg);
|
|
92
|
+
transform: rotate(360deg);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationsPreferencesContext.js","sourceRoot":"","sources":["../../../src/components/userPreferences/NotificationsPreferencesContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAgBtC,MAAM,CAAC,MAAM,+BAA+B,GAAG,aAAa,CAC3D,EAAyC,CACzC,CAAC","sourcesContent":["import { createContext } from \"react\";\
|
|
1
|
+
{"version":3,"file":"NotificationsPreferencesContext.js","sourceRoot":"","sources":["../../../src/components/userPreferences/NotificationsPreferencesContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAgBtC,MAAM,CAAC,MAAM,+BAA+B,GAAG,aAAa,CAC3D,EAAyC,CACzC,CAAC","sourcesContent":["import { createContext } from \"react\";\nimport { INotificationSources } from \"./components/content/Notifications\";\n\nexport type NotificationsPreferencesContextType = {\n\tcurrentNotificationsPreferencesView: \"Home\" | \"Sources\" | \"Details\";\n\tsetCurrentNotificationsPreferencesView: React.Dispatch<React.SetStateAction<\"Home\" | \"Sources\" | \"Details\">>;\n\tselectedNotificationSource: INotificationSources | null;\n\tsetSelectedNotificationSource: React.Dispatch<React.SetStateAction<INotificationSources | null>>;\n\tnotificationSources: INotificationSources[];\n\tsetNotificationSources: React.Dispatch<React.SetStateAction<INotificationSources[]>>;\n};\n\n/**\n * We initialize our context with an empty object.\n * We will set the context properly when we use it at runtime (during the first render).\n */\nexport const NotificationsPreferencesContext = createContext<NotificationsPreferencesContextType>(\n\t{} as NotificationsPreferencesContextType\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserPreferences.js","sourceRoot":"","sources":["../../../src/components/userPreferences/UserPreferences.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,YAAY,MAAM,wEAAwE,CAAC;AACvG,OAAO,OAAO,MAAM,8BAA8B,CAAC;AACnD,OAAO,UAAU,MAAM,iCAAiC,CAAC;AACzD,OAAO,aAAa,MAAM,oCAAoC,CAAC;AAC/D,OAAO,aAAa,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EACN,UAAU,IAAI,8BAA8B,EAC5C,OAAO,IAAI,sBAAsB,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,IAAI,kCAAuC,CAAC;AAM5C,MAAM,CAAC,MAAM,eAAe,GAEvB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,SAAS,GAAG,GAAG,EAAE;YACtB,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE;gBAC5B,kCAAkC,GAAG,YAAY,CAAC,WAAW,CAAC;gBAC9D,8BAA8B,CAAC,kCAAkC,EAAE,GAAG,EAAE;oBACvE,sBAAsB,CAAC,aAAa,EAAE,CAAC;gBACxC,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,gBAAgB,EAAE;YAC1C,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC5C;aAAM;YACN,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;SAChD;IACF,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,0CAAG,KAAK,IAAI,oBAAC,mBAAmB,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAI,CAAC;AACpE,CAAC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC","sourcesContent":["/*!\
|
|
1
|
+
{"version":3,"file":"UserPreferences.js","sourceRoot":"","sources":["../../../src/components/userPreferences/UserPreferences.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,YAAY,MAAM,wEAAwE,CAAC;AACvG,OAAO,OAAO,MAAM,8BAA8B,CAAC;AACnD,OAAO,UAAU,MAAM,iCAAiC,CAAC;AACzD,OAAO,aAAa,MAAM,oCAAoC,CAAC;AAC/D,OAAO,aAAa,MAAM,oCAAoC,CAAC;AAC/D,OAAO,EACN,UAAU,IAAI,8BAA8B,EAC5C,OAAO,IAAI,sBAAsB,GACjC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,IAAI,kCAAuC,CAAC;AAM5C,MAAM,CAAC,MAAM,eAAe,GAEvB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,SAAS,GAAG,GAAG,EAAE;YACtB,YAAY,CAAC,UAAU,CAAC,GAAG,EAAE;gBAC5B,kCAAkC,GAAG,YAAY,CAAC,WAAW,CAAC;gBAC9D,8BAA8B,CAAC,kCAAkC,EAAE,GAAG,EAAE;oBACvE,sBAAsB,CAAC,aAAa,EAAE,CAAC;gBACxC,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,gBAAgB,EAAE;YAC1C,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SAC5C;aAAM;YACN,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;SAChD;IACF,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,0CAAG,KAAK,IAAI,oBAAC,mBAAmB,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAI,CAAC;AACpE,CAAC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC","sourcesContent":["/*!\n * Copyright 2017 - 2020 by ChartIQ, Inc.\n * All rights reserved.\n */\nimport React, { useEffect } from \"react\";\nimport * as storeExports from \"../toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore\";\nimport General from \"./components/content/General\";\nimport Workspaces from \"./components/content/Workspaces\";\nimport DashbarEditor from \"./components/content/DashbarEditor\";\nimport Notifications from \"./components/content/Notifications\";\nimport {\n\tinitialize as userPreferencesStoreInitialize,\n\tActions as UserPreferencesActions,\n} from \"./stores/UserPreferencesStore\";\nimport { UserPreferencesBase } from \"./UserPreferencesBase\";\n\nvar WorkspaceManagementMenuGlobalStore: any;\n\n/**\n * The UserPreferences component initializes the user preference store that's used by its child components and renders\n * its child components: LeftNav and ContentSection with the proper styles.\n */\nexport const UserPreferences: React.FunctionComponent<{\n\tsections?: {};\n}> = ({ sections }) => {\n\tconst [ready, setReady] = React.useState(false);\n\n\tuseEffect(() => {\n\t\tconst makeReady = () => {\n\t\t\tstoreExports.initialize(() => {\n\t\t\t\tWorkspaceManagementMenuGlobalStore = storeExports.GlobalStore;\n\t\t\t\tuserPreferencesStoreInitialize(WorkspaceManagementMenuGlobalStore, () => {\n\t\t\t\t\tUserPreferencesActions.getWorkspaces();\n\t\t\t\t});\n\t\t\t\tsetReady(true);\n\t\t\t});\n\t\t};\n\t\tif (window.FSBL && FSBL?.addEventListener) {\n\t\t\tFSBL.addEventListener(\"onReady\", makeReady);\n\t\t} else {\n\t\t\twindow.addEventListener(\"FSBLReady\", makeReady);\n\t\t}\n\t}, []);\n\n\treturn <>{ready && <UserPreferencesBase sections={sections} />}</>;\n};\n\nexport { General, Workspaces, DashbarEditor, Notifications };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserPreferencesBase.js","sourceRoot":"","sources":["../../../src/components/userPreferences/UserPreferencesBase.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,sCAAsC,CAAC;AAE9C,OAAO,aAAa,MAAM,0BAA0B,CAAC;AAGrD,IAAI,aAAa,EAAE,CAAC;AAGpB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,EAAE;IAE5C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,mBAAmB,CAAC,KAAK,EAAE,QAAQ;YAC3C,IAAI,KAAK,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;aAC1D;iBAAM;gBACN,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;gBAC1B,IAAI,IAAI,CAAC,cAAc,EAAE;oBACxB,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;wBAC1C,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;qBACtC;yBAAM;wBACN,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,sCAAsC,CAAC,CAAC;qBACnF;iBACD;aACD;QACF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,iCAAiC,EAAE,mBAAmB,CAAC,CAAC;QAC9F,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,iCAAiC,EAAE,mBAAmB,CAAC,CAAC;QAClG,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACd,oBAAoB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAE/E,OAAO,SAAS,OAAO;YACtB,oBAAoB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACnF,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACN,6BAAK,SAAS,EAAC,sBAAsB;QACpC,oBAAC,OAAO,IAAC,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,GAAI;QAC7F,oBAAC,cAAc,IAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,CACrE,CACN,CAAC;AACH,CAAC,CAAC","sourcesContent":["import React, { useEffect, useState } from \"react\";\
|
|
1
|
+
{"version":3,"file":"UserPreferencesBase.js","sourceRoot":"","sources":["../../../src/components/userPreferences/UserPreferencesBase.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,sCAAsC,CAAC;AAE9C,OAAO,aAAa,MAAM,0BAA0B,CAAC;AAGrD,IAAI,aAAa,EAAE,CAAC;AAGpB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,EAAE;IAE5C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,mBAAmB,CAAC,KAAK,EAAE,QAAQ;YAC3C,IAAI,KAAK,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;aAC1D;iBAAM;gBACN,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;gBAC1B,IAAI,IAAI,CAAC,cAAc,EAAE;oBACxB,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;wBAC1C,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;qBACtC;yBAAM;wBACN,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,sCAAsC,CAAC,CAAC;qBACnF;iBACD;aACD;QACF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,iCAAiC,EAAE,mBAAmB,CAAC,CAAC;QAC9F,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,iCAAiC,EAAE,mBAAmB,CAAC,CAAC;QAClG,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACd,oBAAoB,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAE/E,OAAO,SAAS,OAAO;YACtB,oBAAoB,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACnF,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACN,6BAAK,SAAS,EAAC,sBAAsB;QACpC,oBAAC,OAAO,IAAC,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,GAAI;QAC7F,oBAAC,cAAc,IAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAI,CACrE,CACN,CAAC;AACH,CAAC,CAAC","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { UserPreferencesStore } from \"./stores/UserPreferencesStore\";\n\nimport LeftNav from \"./components/LeftNav\";\nimport ContentSection from \"./components/ContentSection\";\nimport \"../../assets/css/userPreferences.css\";\n\nimport FloatingFocus from \"@q42/floating-focus-a11y\";\n// The package FloatingFocus injects a focus indicator that moves around the page, but only for\n// keyboard users. (Mouse users don't see the indicator.) All that needs to be done is to envoke it.\nnew FloatingFocus();\n// If you want to make changes to the indicator, the styles are being maintained in assets/css/focus.css\n\nexport const UserPreferencesBase = (props) => {\n\t// The active section is the section that is currently selected and displayed in the preference menu.\n\tconst [activeSection, setActiveSection] = useState(\"General\");\n\tconst entries = Object.keys(props.sections);\n\n\tuseEffect(() => {\n\t\tfunction listenForPreference(error, response) {\n\t\t\tif (error) {\n\t\t\t\tconsole.error(\"FinsembleUserPreferencesChannel: \", error);\n\t\t\t} else {\n\t\t\t\tconst { data } = response;\n\t\t\t\tif (data.preferencesTab) {\n\t\t\t\t\tif (entries.includes(data.preferencesTab)) {\n\t\t\t\t\t\tsetActiveSection(data.preferencesTab);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.warn(`Unknown ${data.preferencesTab} value for User Preferences sections`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tFSBL.Clients.RouterClient.addListener(\"FinsembleUserPreferencesChannel\", listenForPreference);\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.removeListener(\"FinsembleUserPreferencesChannel\", listenForPreference);\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tUserPreferencesStore.addListener({ field: \"activeSection\" }, setActiveSection);\n\n\t\treturn function cleanup() {\n\t\t\tUserPreferencesStore.removeListener({ field: \"activeSection\" }, setActiveSection);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<div className=\"complex-menu-wrapper\">\n\t\t\t<LeftNav activeSection={activeSection} entries={entries} setActiveEntry={setActiveSection} />\n\t\t\t<ContentSection activeSection={activeSection} sections={props.sections} />\n\t\t</div>\n\t);\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/components/Checkbox.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK,CAAC,SAAS;IACpD,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,MAAM;QACL,IAAI,eAAe,GAAG,uBAAuB,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,eAAe,GAAG,GAAG,eAAe,UAAU,CAAC;SAC/C;QACD,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACxB,KAAK,GAAG;gBACP,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,KAAK;aACd,CAAC;SACF;QACD,OAAO,CACN,6BACC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAC,+BAA+B,EACzC,IAAI,EAAC,UAAU,gBACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAC5B,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAC3B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;oBACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;iBACtB;YACF,CAAC;YAED,6BAAK,SAAS,EAAE,eAAe,IAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,2BAAG,SAAS,EAAC,eAAe,GAAK,CAAO;YAChG,6BAAK,SAAS,EAAC,6BAA6B,IAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAO,CAChE,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/components/Checkbox.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK,CAAC,SAAS;IACpD,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,MAAM;QACL,IAAI,eAAe,GAAG,uBAAuB,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACvB,eAAe,GAAG,GAAG,eAAe,UAAU,CAAC;SAC/C;QACD,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACxB,KAAK,GAAG;gBACP,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,KAAK;aACd,CAAC;SACF;QACD,OAAO,CACN,6BACC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAC,+BAA+B,EACzC,IAAI,EAAC,UAAU,gBACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAC5B,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAC3B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;oBACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;iBACtB;YACF,CAAC;YAED,6BAAK,SAAS,EAAE,eAAe,IAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,2BAAG,SAAS,EAAC,eAAe,GAAK,CAAO;YAChG,6BAAK,SAAS,EAAC,6BAA6B,IAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAO,CAChE,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nexport default class Checkbox extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\trender() {\n\t\tlet checkboxClasses = \"complex-menu-checkbox\";\n\t\tif (this.props.checked) {\n\t\t\tcheckboxClasses = `${checkboxClasses} checked`;\n\t\t}\n\t\tlet style = {};\n\t\tif (this.props.disabled) {\n\t\t\tstyle = {\n\t\t\t\tcursor: \"default\",\n\t\t\t\topacity: \".55\",\n\t\t\t};\n\t\t}\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={style}\n\t\t\t\tclassName=\"complex-menu-checkbox-wrapper\"\n\t\t\t\trole=\"checkbox\"\n\t\t\t\taria-label={this.props.label}\n\t\t\t\ttabIndex={0}\n\t\t\t\tonClick={this.props.onClick}\n\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\tthis.props.onClick(e);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div className={checkboxClasses}>{this.props.checked && <i className=\"ff-check-mark\"></i>}</div>\n\t\t\t\t<div className=\"complex-menu-checkbox-label\">{this.props.label}</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentSection.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/components/ContentSection.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK,CAAC,SAAS;IAC1D,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,UAAU;QACT,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,MAAM;QACL,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1C,OAAO,CACN,6BAAK,SAAS,EAAC,0BAA0B;YACxC,6BAAK,SAAS,EAAC,qBAAqB;gBACnC,6BAAK,SAAS,EAAC,wBAAwB,IAAE,aAAa,CAAO;gBAC7D,6BACC,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,IAAI,CAAC,UAAU,EACxB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;4BACvC,IAAI,CAAC,UAAU,EAAE,CAAC;yBAClB;oBACF,CAAC,GACK,CACF;YACN,oBAAC,SAAS,OAAG,CACR,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"file":"ContentSection.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/components/ContentSection.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK,CAAC,SAAS;IAC1D,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,UAAU;QACT,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,MAAM;QACL,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1C,OAAO,CACN,6BAAK,SAAS,EAAC,0BAA0B;YACxC,6BAAK,SAAS,EAAC,qBAAqB;gBACnC,6BAAK,SAAS,EAAC,wBAAwB,IAAE,aAAa,CAAO;gBAC7D,6BACC,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,IAAI,CAAC,UAAU,EACxB,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;4BACvC,IAAI,CAAC,UAAU,EAAE,CAAC;yBAClB;oBACF,CAAC,GACK,CACF;YACN,oBAAC,SAAS,OAAG,CACR,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\n\n/**\n * Displays the user preference section page for the currently selected section.\n * @param {string} props.activeSection The current selected section.\n * @param {object} props.customSections The client customized user preference sections.\n */\nexport default class ContentSection extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\thideWindow() {\n\t\tFSBL.Clients.DialogManager.hideModal();\n\t\tFSBL.Clients.WindowClient.finsembleWindow.hide();\n\t}\n\n\trender() {\n\t\tconst { activeSection, sections } = this.props;\n\t\tconst Component = sections[activeSection];\n\t\treturn (\n\t\t\t<div className=\"complex-menu-content-row\">\n\t\t\t\t<div className=\"complex-menu-header\">\n\t\t\t\t\t<div className=\"content-section-header\">{activeSection}</div>\n\t\t\t\t\t<div\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\tclassName=\"ff-close complex-menu-close\"\n\t\t\t\t\t\tonClick={this.hideWindow}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\tthis.hideWindow();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t></div>\n\t\t\t\t</div>\n\t\t\t\t<Component />\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LeftNav.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/components/LeftNav.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAMtE,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,KAAK,CAAC,SAAS;IACnD,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG;YACZ,aAAa,EAAE,SAAS;YACxB,YAAY,EAAE,EAAE;SAChB,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,IAAI;QACpB,IAAI,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC;YACjD,KAAK,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,IAAI,aAAa,KAAK,IAAI,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC;gBACb,aAAa,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,oBAAoB,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAChC;IACF,CAAC;IAED,iBAAiB;QAChB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE;gBAC7D,IAAI,CAAC,QAAQ,CAAC;oBACb,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,eAAe;iBAChD,CAAC,CAAC;aACH;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,SAAS;QACnD,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,EAAE;YACxD,OAAO;gBACN,aAAa,EAAE,SAAS,CAAC,aAAa;aACtC,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,kBAAkB,CAAC,SAAS,EAAE,SAAS;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,EAAE;YACzD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SAChD;IACF,CAAC;IAED,MAAM;QACL,OAAO,CACN,6BAAK,SAAS,EAAC,kCAAkC,EAAC,IAAI,EAAC,UAAU;YAChE,6BAAK,SAAS,EAAC,8BAA8B,EAAC,IAAI,EAAC,QAAQ,gBAAY,GAAG,kBAEpE;YACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjC,IAAI,oBAAoB,GAAG,6BAA6B,CAAC;gBACzD,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;oBACvC,oBAAoB,GAAG,GAAG,oBAAoB,wBAAwB,CAAC;iBACvE;gBACD,OAAO,CACN,6BACC,SAAS,EAAE,oBAAoB,EAC/B,GAAG,EAAE,KAAK,EACV,IAAI,EAAC,KAAK,EACV,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,GAAG,EAAE;wBACb,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;4BACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;yBAC7B;oBACF,CAAC,IAEA,KAAK,CACD,CACN,CAAC;YACH,CAAC,CAAC,CACG,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"file":"LeftNav.js","sourceRoot":"","sources":["../../../../src/components/userPreferences/components/LeftNav.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAMtE,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,KAAK,CAAC,SAAS;IACnD,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG;YACZ,aAAa,EAAE,SAAS;YACxB,YAAY,EAAE,EAAE;SAChB,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,IAAI;QACpB,IAAI,aAAa,GAAG,oBAAoB,CAAC,QAAQ,CAAC;YACjD,KAAK,EAAE,eAAe;SACtB,CAAC,CAAC;QACH,IAAI,aAAa,KAAK,IAAI,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC;gBACb,aAAa,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,oBAAoB,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAChC;IACF,CAAC;IAED,iBAAiB;QAChB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE;gBAC7D,IAAI,CAAC,QAAQ,CAAC;oBACb,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,eAAe;iBAChD,CAAC,CAAC;aACH;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,SAAS;QACnD,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,EAAE;YACxD,OAAO;gBACN,aAAa,EAAE,SAAS,CAAC,aAAa;aACtC,CAAC;SACF;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,kBAAkB,CAAC,SAAS,EAAE,SAAS;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,EAAE;YACzD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;SAChD;IACF,CAAC;IAED,MAAM;QACL,OAAO,CACN,6BAAK,SAAS,EAAC,kCAAkC,EAAC,IAAI,EAAC,UAAU;YAChE,6BAAK,SAAS,EAAC,8BAA8B,EAAC,IAAI,EAAC,QAAQ,gBAAY,GAAG,kBAEpE;YACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjC,IAAI,oBAAoB,GAAG,6BAA6B,CAAC;gBACzD,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;oBACvC,oBAAoB,GAAG,GAAG,oBAAoB,wBAAwB,CAAC;iBACvE;gBACD,OAAO,CACN,6BACC,SAAS,EAAE,oBAAoB,EAC/B,GAAG,EAAE,KAAK,EACV,IAAI,EAAC,KAAK,EACV,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,GAAG,EAAE;wBACb,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC,EACD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wBAChB,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;4BACvC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;yBAC7B;oBACF,CAAC,IAEA,KAAK,CACD,CACN,CAAC;YACH,CAAC,CAAC,CACG,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nimport { UserPreferencesStore } from \"../stores/UserPreferencesStore\";\n\n/**\n * The left section of the UserPreference menu. It contains all the preference section buttons for the user\n * to select and go to different user preference sections.\n */\nexport default class LeftNav extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tactiveSection: \"General\",\n\t\t\theaderImgUrl: \"\",\n\t\t};\n\t}\n\n\tsetActiveSection(name) {\n\t\tlet activeSection = UserPreferencesStore.getValue({\n\t\t\tfield: \"activeSection\",\n\t\t});\n\t\tif (activeSection !== name) {\n\t\t\tthis.setState({\n\t\t\t\tactiveSection: name,\n\t\t\t});\n\t\t\tUserPreferencesStore.setValue({ field: \"activeSection\", value: name });\n\t\t\tthis.props.setActiveEntry(name);\n\t\t}\n\t}\n\n\tcomponentDidMount() {\n\t\tFSBL.Clients.ConfigClient.getValues(null, (err, config) => {\n\t\t\tif (config.startup_app && config.startup_app.applicationIcon) {\n\t\t\t\tthis.setState({\n\t\t\t\t\theaderImgUrl: config.startup_app.applicationIcon,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tstatic getDerivedStateFromProps(nextProps, prevState) {\n\t\tif (nextProps.activeSection !== prevState.activeSection) {\n\t\t\treturn {\n\t\t\t\tactiveSection: nextProps.activeSection,\n\t\t\t};\n\t\t}\n\t\treturn null;\n\t}\n\n\tcomponentDidUpdate(prevProps, prevState) {\n\t\tif (this.props.activeSection !== prevProps.activeSection) {\n\t\t\tthis.setActiveSection(this.props.activeSection);\n\t\t}\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<div className=\"complex-menu-left-nav-preference\" role=\"tabgroup\">\n\t\t\t\t<div className=\"complex-menu-left-nav-header\" role=\"header\" aria-level=\"1\">\n\t\t\t\t\tPreferences\n\t\t\t\t</div>\n\t\t\t\t{this.props.entries.map((entry) => {\n\t\t\t\t\tlet sectionToggleClasses = \"complex-menu-section-toggle\";\n\t\t\t\t\tif (entry === this.state.activeSection) {\n\t\t\t\t\t\tsectionToggleClasses = `${sectionToggleClasses} active-section-toggle`;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={sectionToggleClasses}\n\t\t\t\t\t\t\tkey={entry}\n\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tthis.setActiveSection(entry);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\tthis.setActiveSection(entry);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{entry}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashbarEditor.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/content/DashbarEditor.jsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\n// import { isThisTypeNode } from \"typescript\";\r\n\r\nimport \"../../../../assets/css/userPreferences.css\";\r\nimport { FinsembleToggle } from \"../../../common/FinsembleToggle\";\r\n\r\nexport default class DashbarEditor extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tdashbarStore: null,\r\n\t\t\tdashbarConfigPath: \"finsemble.availableDashbarItems\",\r\n\t\t\tdashbarStorePath: \"Finsemble-Dashbar-Store\",\r\n\t\t\tavailableItems: [],\r\n\t\t};\r\n\t\tthis.updateDashbarItems = this.updateDashbarItems.bind(this);\r\n\t}\r\n\r\n\tasync componentDidMount() {\r\n\t\ttry {\r\n\t\t\tconst { data: availableDashbarItems } = await FSBL.Clients.ConfigClient.getValue({\r\n\t\t\t\tfield: \"finsemble.availableDashbarItems\",\r\n\t\t\t});\r\n\t\t\tFSBL.Clients.DistributedStoreClient.getStore(\r\n\t\t\t\t{\r\n\t\t\t\t\tstore: this.state.dashbarStorePath,\r\n\t\t\t\t\tglobal: true,\r\n\t\t\t\t},\r\n\t\t\t\t(error, store) => {\r\n\t\t\t\t\tconst DashbarStore = store;\r\n\r\n\t\t\t\t\tconst { dashbaritems } = DashbarStore.values;\r\n\r\n\t\t\t\t\tDashbarStore.addListener(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tfield: \"dashbaritems\",\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tthis.updateDashbarItems\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tconst newDashbarItems = [];\r\n\r\n\t\t\t\t\tconst hasEnabledItems = dashbaritems && Array.isArray(dashbaritems) && dashbaritems.length > 0;\r\n\r\n\t\t\t\t\tavailableDashbarItems &&\r\n\t\t\t\t\t\tObject.keys(availableDashbarItems).map((dashbarItemName) => {\r\n\t\t\t\t\t\t\tconst newItem = availableDashbarItems[dashbarItemName];\r\n\t\t\t\t\t\t\tif (hasEnabledItems && dashbaritems.includes(dashbarItemName)) {\r\n\t\t\t\t\t\t\t\tnewItem.enabled = true;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tnewItem.enabled = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tnewItem.id = dashbarItemName;\r\n\t\t\t\t\t\t\tnewDashbarItems.push(newItem);\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.setState({\r\n\t\t\t\t\t\tdashbarStore: DashbarStore,\r\n\t\t\t\t\t\tavailableItems: newDashbarItems,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t} catch (errorInitializingDashbarItems) {\r\n\t\t\tFSBL.Clients.Logger.error(\"Error initializing dashbar preferences\", errorInitializingDashbarItems);\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tthis.state.dashbarStore.removeListener({ field: \"dashbaritems\" }, this.updateDashbarItems);\r\n\t}\r\n\r\n\tasync updateDashbarItems(err, data) {\r\n\t\ttry {\r\n\t\t\tconst { data: availableDashbarItems } = await FSBL.Clients.ConfigClient.getValue({\r\n\t\t\t\tfield: \"finsemble.availableDashbarItems\",\r\n\t\t\t});\r\n\r\n\t\t\tconst hasEnabledItems = data.value && Array.isArray(data.value) && data.value.length > 0;\r\n\r\n\t\t\tconst newDashbarItems = [];\r\n\t\t\tavailableDashbarItems &&\r\n\t\t\t\tObject.keys(availableDashbarItems).map((dashbarItemName) => {\r\n\t\t\t\t\tconst newItem = availableDashbarItems[dashbarItemName];\r\n\t\t\t\t\tif (hasEnabledItems && data.value.includes(dashbarItemName)) {\r\n\t\t\t\t\t\tnewItem.enabled = true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewItem.enabled = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewItem.id = dashbarItemName;\r\n\t\t\t\t\tnewDashbarItems.push(newItem);\r\n\t\t\t\t});\r\n\r\n\t\t\tthis.setState({\r\n\t\t\t\tavailableItems: newDashbarItems,\r\n\t\t\t});\r\n\t\t} catch (errorUpdatingDashbarItems) {\r\n\t\t\tFSBL.Clients.Logger.error(\"Error updating dashbar items\", errorUpdatingDashbarItems);\r\n\t\t}\r\n\t}\r\n\r\n\tremoveItem(itemId) {\r\n\t\t// Removes a key from the store, dashbar will update the UI\r\n\t\tthis.state.dashbarStore.getValue({ field: \"dashbaritems\" }, (error, dashbaritems) => {\r\n\t\t\tconst indexToRemove = dashbaritems.findIndex((name) => name === itemId);\r\n\t\t\tdashbaritems.splice(indexToRemove, 1);\r\n\t\t\tthis.state.dashbarStore.setValue({ field: \"dashbaritems\", value: dashbaritems });\r\n\t\t});\r\n\t}\r\n\r\n\taddItem(itemId) {\r\n\t\t// Update the store with new item, dashbar will parse these values and apply them\r\n\t\tthis.state.dashbarStore.getValue({ field: \"dashbaritems\" }, (error, dashbaritems) => {\r\n\t\t\tdashbaritems.push(itemId);\r\n\t\t\tthis.state.dashbarStore.setValue({ field: \"dashbaritems\", value: dashbaritems });\r\n\t\t});\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { availableItems: items, dashbarConfigPath: configPath } = this.state;\r\n\r\n\t\tif (items.length > 0) {\r\n\t\t\treturn (\r\n\t\t\t\t<div className={`dashbar-preferences ${this.props.className || \"\"}`}>\r\n\t\t\t\t\t<table className=\"dashbar-items-table\">\r\n\t\t\t\t\t\t<colgroup>\r\n\t\t\t\t\t\t\t<col className=\"db-col-1\" />\r\n\t\t\t\t\t\t\t<col className=\"db-col-2\" />\r\n\t\t\t\t\t\t\t<col className=\"db-col-3\" />\r\n\t\t\t\t\t\t\t<col className=\"db-col-4\" />\r\n\t\t\t\t\t\t</colgroup>\r\n\t\t\t\t\t\t<thead>\r\n\t\t\t\t\t\t\t<tr className=\"items-header\">\r\n\t\t\t\t\t\t\t\t<th></th>\r\n\t\t\t\t\t\t\t\t<th>Title:</th>\r\n\t\t\t\t\t\t\t\t<th>Url:</th>\r\n\t\t\t\t\t\t\t\t<th>Width:</th>\r\n\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t</thead>\r\n\t\t\t\t\t\t<tbody>\r\n\t\t\t\t\t\t\t{items.map((item, index) => {\r\n\t\t\t\t\t\t\t\tconst buttonAction = item.enabled\r\n\t\t\t\t\t\t\t\t\t? this.removeItem.bind(this, item.id)\r\n\t\t\t\t\t\t\t\t\t: this.addItem.bind(this, item.id);\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<tr key={index} className=\"dashbar-preferences-item\">\r\n\t\t\t\t\t\t\t\t\t\t<td id={`${item.title}-toggle`}>\r\n\t\t\t\t\t\t\t\t\t\t\t<FinsembleToggle checked={item.enabled} onChange={buttonAction} />\r\n\t\t\t\t\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t\t\t\t\t<td>{item.title}</td>\r\n\t\t\t\t\t\t\t\t\t\t<td title={item.url}>{item.url}</td>\r\n\t\t\t\t\t\t\t\t\t\t<td>{item.width ? item.width : \"\"}</td>\r\n\t\t\t\t\t\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t</tbody>\r\n\t\t\t\t\t</table>\r\n\t\t\t\t</div>\r\n\t\t\t);\r\n\t\t} else {\r\n\t\t\treturn (\r\n\t\t\t\t<div id=\"no-dashbar-items\">{`You don't seem to have any dashbar items enabled or defined. Define some in ${configPath}`}</div>\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"DashbarEditor.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/content/DashbarEditor.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,4CAA4C,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,KAAK,CAAC,SAAS;IACzD,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG;YACZ,YAAY,EAAE,IAAI;YAClB,iBAAiB,EAAE,iCAAiC;YACpD,gBAAgB,EAAE,yBAAyB;YAC3C,cAAc,EAAE,EAAE;SAClB,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,iBAAiB;QACtB,IAAI;YACH,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAChF,KAAK,EAAE,iCAAiC;aACxC,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAC3C;gBACC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB;gBAClC,MAAM,EAAE,IAAI;aACZ,EACD,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAChB,MAAM,YAAY,GAAG,KAAK,CAAC;gBAE3B,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC;gBAE7C,YAAY,CAAC,WAAW,CACvB;oBACC,KAAK,EAAE,cAAc;iBACrB,EACD,IAAI,CAAC,kBAAkB,CACvB,CAAC;gBAEF,MAAM,eAAe,GAAG,EAAE,CAAC;gBAE3B,MAAM,eAAe,GAAG,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gBAE/F,qBAAqB;oBACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE;wBAC1D,MAAM,OAAO,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;wBACvD,IAAI,eAAe,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;4BAC9D,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;yBACvB;6BAAM;4BACN,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;yBACxB;wBACD,OAAO,CAAC,EAAE,GAAG,eAAe,CAAC;wBAC7B,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC/B,CAAC,CAAC,CAAC;gBAEJ,IAAI,CAAC,QAAQ,CAAC;oBACb,YAAY,EAAE,YAAY;oBAC1B,cAAc,EAAE,eAAe;iBAC/B,CAAC,CAAC;YACJ,CAAC,CACD,CAAC;SACF;QAAC,OAAO,6BAA6B,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,6BAA6B,CAAC,CAAC;SACnG;IACF,CAAC;IAED,oBAAoB;QACnB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5F,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI;QACjC,IAAI;YACH,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAChF,KAAK,EAAE,iCAAiC;aACxC,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAEzF,MAAM,eAAe,GAAG,EAAE,CAAC;YAC3B,qBAAqB;gBACpB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE;oBAC1D,MAAM,OAAO,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;oBACvD,IAAI,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;wBAC5D,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;qBACvB;yBAAM;wBACN,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;qBACxB;oBACD,OAAO,CAAC,EAAE,GAAG,eAAe,CAAC;oBAC7B,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,QAAQ,CAAC;gBACb,cAAc,EAAE,eAAe;aAC/B,CAAC,CAAC;SACH;QAAC,OAAO,yBAAyB,EAAE;YACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,yBAAyB,CAAC,CAAC;SACrF;IACF,CAAC;IAED,UAAU,CAAC,MAAM;QAEhB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;YACnF,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YACxE,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM;QAEb,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;YACnF,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,MAAM;QACL,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5E,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,OAAO,CACN,6BAAK,SAAS,EAAE,uBAAuB,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE;gBAClE,+BAAO,SAAS,EAAC,qBAAqB;oBACrC;wBACC,6BAAK,SAAS,EAAC,UAAU,GAAG;wBAC5B,6BAAK,SAAS,EAAC,UAAU,GAAG;wBAC5B,6BAAK,SAAS,EAAC,UAAU,GAAG;wBAC5B,6BAAK,SAAS,EAAC,UAAU,GAAG,CAClB;oBACX;wBACC,4BAAI,SAAS,EAAC,cAAc;4BAC3B,+BAAS;4BACT,yCAAe;4BACf,uCAAa;4BACb,yCAAe,CACX,CACE;oBACR,mCACE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;wBAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO;4BAChC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;4BACrC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;wBACpC,OAAO,CACN,4BAAI,GAAG,EAAE,KAAK,EAAE,SAAS,EAAC,0BAA0B;4BACnD,4BAAI,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,SAAS;gCAC7B,oBAAC,eAAe,IAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,GAAI,CAC9D;4BACL,gCAAK,IAAI,CAAC,KAAK,CAAM;4BACrB,4BAAI,KAAK,EAAE,IAAI,CAAC,GAAG,IAAG,IAAI,CAAC,GAAG,CAAM;4BACpC,gCAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAM,CACnC,CACL,CAAC;oBACH,CAAC,CAAC,CACK,CACD,CACH,CACN,CAAC;SACF;aAAM;YACN,OAAO,CACN,6BAAK,EAAE,EAAC,kBAAkB,IAAE,+EAA+E,UAAU,EAAE,CAAO,CAC9H,CAAC;SACF;IACF,CAAC;CACD","sourcesContent":["import React from \"react\";\n// import { isThisTypeNode } from \"typescript\";\n\nimport \"../../../../assets/css/userPreferences.css\";\nimport { FinsembleToggle } from \"../../../common/FinsembleToggle\";\n\nexport default class DashbarEditor extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tdashbarStore: null,\n\t\t\tdashbarConfigPath: \"finsemble.availableDashbarItems\",\n\t\t\tdashbarStorePath: \"Finsemble-Dashbar-Store\",\n\t\t\tavailableItems: [],\n\t\t};\n\t\tthis.updateDashbarItems = this.updateDashbarItems.bind(this);\n\t}\n\n\tasync componentDidMount() {\n\t\ttry {\n\t\t\tconst { data: availableDashbarItems } = await FSBL.Clients.ConfigClient.getValue({\n\t\t\t\tfield: \"finsemble.availableDashbarItems\",\n\t\t\t});\n\t\t\tFSBL.Clients.DistributedStoreClient.getStore(\n\t\t\t\t{\n\t\t\t\t\tstore: this.state.dashbarStorePath,\n\t\t\t\t\tglobal: true,\n\t\t\t\t},\n\t\t\t\t(error, store) => {\n\t\t\t\t\tconst DashbarStore = store;\n\n\t\t\t\t\tconst { dashbaritems } = DashbarStore.values;\n\n\t\t\t\t\tDashbarStore.addListener(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfield: \"dashbaritems\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis.updateDashbarItems\n\t\t\t\t\t);\n\n\t\t\t\t\tconst newDashbarItems = [];\n\n\t\t\t\t\tconst hasEnabledItems = dashbaritems && Array.isArray(dashbaritems) && dashbaritems.length > 0;\n\n\t\t\t\t\tavailableDashbarItems &&\n\t\t\t\t\t\tObject.keys(availableDashbarItems).map((dashbarItemName) => {\n\t\t\t\t\t\t\tconst newItem = availableDashbarItems[dashbarItemName];\n\t\t\t\t\t\t\tif (hasEnabledItems && dashbaritems.includes(dashbarItemName)) {\n\t\t\t\t\t\t\t\tnewItem.enabled = true;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tnewItem.enabled = false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tnewItem.id = dashbarItemName;\n\t\t\t\t\t\t\tnewDashbarItems.push(newItem);\n\t\t\t\t\t\t});\n\n\t\t\t\t\tthis.setState({\n\t\t\t\t\t\tdashbarStore: DashbarStore,\n\t\t\t\t\t\tavailableItems: newDashbarItems,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t);\n\t\t} catch (errorInitializingDashbarItems) {\n\t\t\tFSBL.Clients.Logger.error(\"Error initializing dashbar preferences\", errorInitializingDashbarItems);\n\t\t}\n\t}\n\n\tcomponentWillUnmount() {\n\t\tthis.state.dashbarStore.removeListener({ field: \"dashbaritems\" }, this.updateDashbarItems);\n\t}\n\n\tasync updateDashbarItems(err, data) {\n\t\ttry {\n\t\t\tconst { data: availableDashbarItems } = await FSBL.Clients.ConfigClient.getValue({\n\t\t\t\tfield: \"finsemble.availableDashbarItems\",\n\t\t\t});\n\n\t\t\tconst hasEnabledItems = data.value && Array.isArray(data.value) && data.value.length > 0;\n\n\t\t\tconst newDashbarItems = [];\n\t\t\tavailableDashbarItems &&\n\t\t\t\tObject.keys(availableDashbarItems).map((dashbarItemName) => {\n\t\t\t\t\tconst newItem = availableDashbarItems[dashbarItemName];\n\t\t\t\t\tif (hasEnabledItems && data.value.includes(dashbarItemName)) {\n\t\t\t\t\t\tnewItem.enabled = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewItem.enabled = false;\n\t\t\t\t\t}\n\t\t\t\t\tnewItem.id = dashbarItemName;\n\t\t\t\t\tnewDashbarItems.push(newItem);\n\t\t\t\t});\n\n\t\t\tthis.setState({\n\t\t\t\tavailableItems: newDashbarItems,\n\t\t\t});\n\t\t} catch (errorUpdatingDashbarItems) {\n\t\t\tFSBL.Clients.Logger.error(\"Error updating dashbar items\", errorUpdatingDashbarItems);\n\t\t}\n\t}\n\n\tremoveItem(itemId) {\n\t\t// Removes a key from the store, dashbar will update the UI\n\t\tthis.state.dashbarStore.getValue({ field: \"dashbaritems\" }, (error, dashbaritems) => {\n\t\t\tconst indexToRemove = dashbaritems.findIndex((name) => name === itemId);\n\t\t\tdashbaritems.splice(indexToRemove, 1);\n\t\t\tthis.state.dashbarStore.setValue({ field: \"dashbaritems\", value: dashbaritems });\n\t\t});\n\t}\n\n\taddItem(itemId) {\n\t\t// Update the store with new item, dashbar will parse these values and apply them\n\t\tthis.state.dashbarStore.getValue({ field: \"dashbaritems\" }, (error, dashbaritems) => {\n\t\t\tdashbaritems.push(itemId);\n\t\t\tthis.state.dashbarStore.setValue({ field: \"dashbaritems\", value: dashbaritems });\n\t\t});\n\t}\n\n\trender() {\n\t\tconst { availableItems: items, dashbarConfigPath: configPath } = this.state;\n\n\t\tif (items.length > 0) {\n\t\t\treturn (\n\t\t\t\t<div className={`dashbar-preferences ${this.props.className || \"\"}`}>\n\t\t\t\t\t<table className=\"dashbar-items-table\">\n\t\t\t\t\t\t<colgroup>\n\t\t\t\t\t\t\t<col className=\"db-col-1\" />\n\t\t\t\t\t\t\t<col className=\"db-col-2\" />\n\t\t\t\t\t\t\t<col className=\"db-col-3\" />\n\t\t\t\t\t\t\t<col className=\"db-col-4\" />\n\t\t\t\t\t\t</colgroup>\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr className=\"items-header\">\n\t\t\t\t\t\t\t\t<th></th>\n\t\t\t\t\t\t\t\t<th>Title:</th>\n\t\t\t\t\t\t\t\t<th>Url:</th>\n\t\t\t\t\t\t\t\t<th>Width:</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody>\n\t\t\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\t\t\tconst buttonAction = item.enabled\n\t\t\t\t\t\t\t\t\t? this.removeItem.bind(this, item.id)\n\t\t\t\t\t\t\t\t\t: this.addItem.bind(this, item.id);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<tr key={index} className=\"dashbar-preferences-item\">\n\t\t\t\t\t\t\t\t\t\t<td id={`${item.title}-toggle`}>\n\t\t\t\t\t\t\t\t\t\t\t<FinsembleToggle checked={item.enabled} onChange={buttonAction} />\n\t\t\t\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t\t\t\t\t<td>{item.title}</td>\n\t\t\t\t\t\t\t\t\t\t<td title={item.url}>{item.url}</td>\n\t\t\t\t\t\t\t\t\t\t<td>{item.width ? item.width : \"\"}</td>\n\t\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t);\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t<div id=\"no-dashbar-items\">{`You don't seem to have any dashbar items enabled or defined. Define some in ${configPath}`}</div>\n\t\t\t);\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"General.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/content/General.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,KAAK,CAAC,SAAS;IACnD,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,MAAM;QACL,OAAO,CACN;YACC,oBAAC,gBAAgB,OAAG,CACf,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\
|
|
1
|
+
{"version":3,"file":"General.js","sourceRoot":"","sources":["../../../../../src/components/userPreferences/components/content/General.jsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,KAAK,CAAC,SAAS;IACnD,YAAY,KAAK;QAChB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,MAAM;QACL,OAAO,CACN;YACC,oBAAC,gBAAgB,OAAG,CACf,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nimport ScheduledRestart from \"../general/ScheduledRestart\";\nexport default class General extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<ScheduledRestart />\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
|