@finsemble/finsemble-ui 7.0.0 → 7.1.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +13 -11
- package/react/actions/favoriteActions.d.ts +1 -0
- package/react/actions/favoriteActions.js +1 -0
- package/react/actions/favoriteActions.js.map +1 -1
- package/react/actions/menuActions.d.ts +1 -0
- package/react/actions/menuActions.js +1 -0
- package/react/actions/menuActions.js.map +1 -1
- package/react/actions/rootActions.d.ts +1 -0
- package/react/actions/rootActions.js +1 -0
- package/react/actions/rootActions.js.map +1 -1
- package/react/actions/searchActions.d.ts +1 -0
- package/react/actions/searchActions.js +1 -0
- package/react/actions/searchActions.js.map +1 -1
- package/react/actions/toolbarActions.d.ts +34 -0
- package/react/actions/toolbarActions.js +17 -0
- package/react/actions/toolbarActions.js.map +1 -1
- package/react/actions/workspaceActions.d.ts +1 -0
- package/react/actions/workspaceActions.js +1 -0
- package/react/actions/workspaceActions.js.map +1 -1
- package/react/assets/css/advancedAppLauncher.css +22 -19
- package/react/assets/css/appCatalog.css +67 -72
- package/react/assets/css/authentication.css +4 -3
- package/react/assets/css/button.css +3 -10
- package/react/assets/css/core/formElements.css +1 -1
- package/react/assets/css/core/icons.css +3 -2
- package/react/assets/css/core/notifications.css +2 -2
- package/react/assets/css/core/windowFrame.css +9 -9
- package/react/assets/css/dashbar.css +1 -1
- package/react/assets/css/defaultTheme.css +9 -53
- package/react/assets/css/dialogs.css +13 -11
- package/react/assets/css/favorites.css +3 -1
- package/react/assets/css/finsemble.css +3 -2
- package/react/assets/css/font-finance.css +233 -120
- package/react/assets/css/fonts/Open_Sans/OpenSans-Definition.css +10 -10
- package/react/assets/css/linkerWindow.css +2 -2
- package/react/assets/css/menus.css +10 -10
- package/react/assets/css/notificationsCenter.css +16 -31
- package/react/assets/css/processMonitor.css +7 -4
- package/react/assets/css/search.css +1 -1
- package/react/assets/css/shared/animations.css +10 -4
- package/react/assets/css/shared/common.css +2 -2
- package/react/assets/css/tags.css +10 -10
- package/react/assets/css/toolbar.css +22 -19
- package/react/assets/css/userPreferences.css +12 -14
- package/react/assets/css/windowTitleBar.css +75 -36
- package/react/componentTemplateGenerator.js +3 -2
- package/react/componentTemplateGenerator.js.map +1 -1
- package/react/components/FinsembleProvider.d.ts +7 -0
- package/react/components/FinsembleProvider.js +2 -0
- package/react/components/FinsembleProvider.js.map +1 -1
- package/react/components/appCatalog/AppCatalog.d.ts +4 -0
- package/react/components/appCatalog/AppCatalog.js +4 -0
- package/react/components/appCatalog/AppCatalog.js.map +1 -1
- package/react/components/appCatalog/AppCatalogComponent.d.ts +58 -0
- package/react/components/appCatalog/AppCatalogComponent.js +70 -1
- package/react/components/appCatalog/AppCatalogComponent.js.map +1 -1
- package/react/components/appCatalog/components/AppCard.d.ts +35 -0
- package/react/components/appCatalog/components/AppCard.js +42 -0
- package/react/components/appCatalog/components/AppCard.js.map +1 -1
- package/react/components/appCatalog/components/AppResults.d.ts +10 -0
- package/react/components/appCatalog/components/AppResults.js +24 -0
- package/react/components/appCatalog/components/AppResults.js.map +1 -1
- package/react/components/appCatalog/components/Carousel.d.ts +26 -0
- package/react/components/appCatalog/components/Carousel.js +34 -0
- package/react/components/appCatalog/components/Carousel.js.map +1 -1
- package/react/components/appCatalog/components/EmptyResults.d.ts +4 -0
- package/react/components/appCatalog/components/EmptyResults.js +8 -0
- package/react/components/appCatalog/components/EmptyResults.js.map +1 -1
- package/react/components/appCatalog/components/Hero.d.ts +15 -0
- package/react/components/appCatalog/components/Hero.js +15 -0
- package/react/components/appCatalog/components/Hero.js.map +1 -1
- package/react/components/appCatalog/components/Home.d.ts +6 -4
- package/react/components/appCatalog/components/Home.js +10 -0
- package/react/components/appCatalog/components/Home.js.map +1 -1
- package/react/components/appCatalog/components/SearchBar.d.ts +31 -0
- package/react/components/appCatalog/components/SearchBar.js +33 -0
- package/react/components/appCatalog/components/SearchBar.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppDescription.d.ts +5 -0
- package/react/components/appCatalog/components/Showcase/AppDescription.js +9 -0
- package/react/components/appCatalog/components/Showcase/AppDescription.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppDevNotes.d.ts +7 -0
- package/react/components/appCatalog/components/Showcase/AppDevNotes.js +15 -0
- package/react/components/appCatalog/components/Showcase/AppDevNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppShowcase.d.ts +17 -0
- package/react/components/appCatalog/components/Showcase/AppShowcase.js +25 -0
- package/react/components/appCatalog/components/Showcase/AppShowcase.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/Header.d.ts +7 -0
- package/react/components/appCatalog/components/Showcase/Header.js +12 -0
- package/react/components/appCatalog/components/Showcase/Header.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/ImageCarousel.d.ts +7 -0
- package/react/components/appCatalog/components/Showcase/ImageCarousel.js +11 -0
- package/react/components/appCatalog/components/Showcase/ImageCarousel.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/Modal.d.ts +10 -0
- package/react/components/appCatalog/components/Showcase/Modal.js +10 -0
- package/react/components/appCatalog/components/Showcase/Modal.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/ReleaseNotes.d.ts +5 -0
- package/react/components/appCatalog/components/Showcase/ReleaseNotes.js +9 -0
- package/react/components/appCatalog/components/Showcase/ReleaseNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/SupportNotes.d.ts +6 -0
- package/react/components/appCatalog/components/Showcase/SupportNotes.js +11 -0
- package/react/components/appCatalog/components/Showcase/SupportNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/VersionNotes.d.ts +5 -0
- package/react/components/appCatalog/components/Showcase/VersionNotes.js +9 -0
- package/react/components/appCatalog/components/Showcase/VersionNotes.js.map +1 -1
- package/react/components/appCatalog/components/Tag.d.ts +6 -0
- package/react/components/appCatalog/components/Tag.js +10 -0
- package/react/components/appCatalog/components/Tag.js.map +1 -1
- package/react/components/appCatalog/components/Toast.d.ts +5 -0
- package/react/components/appCatalog/components/Toast.js +9 -0
- package/react/components/appCatalog/components/Toast.js.map +1 -1
- package/react/components/appCatalog/components/helpers.js +1 -0
- package/react/components/appCatalog/components/helpers.js.map +1 -1
- package/react/components/appCatalog/modules/AppDirectory.d.ts +5 -0
- package/react/components/appCatalog/modules/AppDirectory.js +5 -0
- package/react/components/appCatalog/modules/AppDirectory.js.map +1 -1
- package/react/components/appCatalog/modules/FDC3.d.ts +37 -0
- package/react/components/appCatalog/modules/FDC3.js +40 -0
- package/react/components/appCatalog/modules/FDC3.js.map +1 -1
- package/react/components/appCatalog/stores/appStore.js +1 -0
- package/react/components/appCatalog/stores/appStore.js.map +1 -1
- package/react/components/appCatalog/stores/storeActions.d.ts +91 -0
- package/react/components/appCatalog/stores/storeActions.js +116 -1
- package/react/components/appCatalog/stores/storeActions.js.map +1 -1
- package/react/components/common/Checkbox.d.ts +1 -0
- package/react/components/common/Checkbox.js +2 -2
- package/react/components/common/Checkbox.js.map +1 -1
- package/react/components/common/ColorPicker.d.ts +5 -0
- package/react/components/common/ColorPicker.js +40 -0
- package/react/components/common/ColorPicker.js.map +1 -1
- package/react/components/common/DropZone.d.ts +11 -0
- package/react/components/common/DropZone.js +21 -1
- package/react/components/common/DropZone.js.map +1 -1
- package/react/components/common/DropdownButton.d.ts +4 -0
- package/react/components/common/DropdownButton.js +4 -0
- package/react/components/common/DropdownButton.js.map +1 -1
- package/react/components/common/ErrorBoundary.d.ts +18 -0
- package/react/components/common/ErrorBoundary.js +21 -0
- package/react/components/common/ErrorBoundary.js.map +1 -1
- package/react/components/common/FileInput.d.ts +8 -1
- package/react/components/common/FileInput.js +19 -4
- package/react/components/common/FileInput.js.map +1 -1
- package/react/components/common/FinsembleIcon.d.ts +10 -0
- package/react/components/common/FinsembleIcon.js +51 -2
- package/react/components/common/FinsembleIcon.js.map +1 -1
- package/react/components/common/FinsembleSelect.js +5 -1
- package/react/components/common/FinsembleSelect.js.map +1 -1
- package/react/components/common/FinsembleToggleButtonBar.js +1 -1
- package/react/components/common/FinsembleToggleButtonBar.js.map +1 -1
- package/react/components/common/InputTable.d.ts +7 -0
- package/react/components/common/InputTable.js +7 -0
- package/react/components/common/InputTable.js.map +1 -1
- package/react/components/common/Tab.js +3 -0
- package/react/components/common/Tab.js.map +1 -1
- package/react/components/common/TimeSelect.js +24 -0
- package/react/components/common/TimeSelect.js.map +1 -1
- package/react/components/common/Tooltip.js +2 -0
- package/react/components/common/Tooltip.js.map +1 -1
- package/react/components/common/css/accordion.css +9 -6
- package/react/components/common/css/application-edit-page.css +39 -44
- package/react/components/common/css/button.css +10 -5
- package/react/components/common/css/color-picker.css +3 -3
- package/react/components/common/css/drop-zone.css +2 -6
- package/react/components/common/css/file-input.css +5 -5
- package/react/components/common/css/header.css +3 -2
- package/react/components/common/css/icon.css +1 -1
- package/react/components/common/css/loading-spinner.css +7 -12
- package/react/components/common/css/selector.css +4 -4
- package/react/components/common/css/styles.css +22 -16
- package/react/components/common/css/tab.css +8 -8
- package/react/components/common/css/time-select.css +1 -0
- package/react/components/common/css/toggle.css +4 -4
- package/react/components/common/css/tooltip.css +2 -3
- package/react/components/common/file_helpers.js +2 -0
- package/react/components/common/file_helpers.js.map +1 -1
- package/react/components/common/helpers.js +1 -0
- package/react/components/common/helpers.js.map +1 -1
- package/react/components/common/stories/ColorPicker.stories.js +3 -0
- package/react/components/common/stories/ColorPicker.stories.js.map +1 -1
- package/react/components/common/stories/FileInput.stories.d.ts +3 -1
- package/react/components/common/stories/FileInput.stories.js +12 -0
- package/react/components/common/stories/FileInput.stories.js.map +1 -1
- package/react/components/common/tests/Accordion.spec.js +6 -0
- package/react/components/common/tests/Accordion.spec.js.map +1 -1
- package/react/components/common/tests/Checkbox.spec.js +1 -0
- package/react/components/common/tests/Checkbox.spec.js.map +1 -1
- package/react/components/common/tests/ColorPicker.spec.js +6 -0
- package/react/components/common/tests/ColorPicker.spec.js.map +1 -1
- package/react/components/common/tests/DropZone.spec.js +1 -0
- package/react/components/common/tests/DropZone.spec.js.map +1 -1
- package/react/components/common/tests/FileInput.spec.js +22 -0
- package/react/components/common/tests/FileInput.spec.js.map +1 -1
- package/react/components/common/tests/FinsembleSelect.spec.js +1 -0
- package/react/components/common/tests/FinsembleSelect.spec.js.map +1 -1
- package/react/components/common/tests/FinsembleToggle.spec.js +1 -0
- package/react/components/common/tests/FinsembleToggle.spec.js.map +1 -1
- package/react/components/common/tests/FinsembleToggleButtonBar.spec.js +1 -0
- package/react/components/common/tests/FinsembleToggleButtonBar.spec.js.map +1 -1
- package/react/components/common/tests/TimeSelect.spec.js +4 -0
- package/react/components/common/tests/TimeSelect.spec.js.map +1 -1
- package/react/components/common/tests/Tooltip.spec.js +16 -0
- package/react/components/common/tests/Tooltip.spec.js.map +1 -1
- package/react/components/favorites/FavoriteMaker.d.ts +8 -0
- package/react/components/favorites/FavoriteMaker.js +9 -0
- package/react/components/favorites/FavoriteMaker.js.map +1 -1
- package/react/components/favorites/FavoritesShell.d.ts +4 -0
- package/react/components/favorites/FavoritesShell.js +13 -1
- package/react/components/favorites/FavoritesShell.js.map +1 -1
- package/react/components/favorites/FavoritesShell.spec.js +3 -0
- package/react/components/favorites/FavoritesShell.spec.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverContainer.js +8 -0
- package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverDialog.css +16 -3
- package/react/components/fdc3Resolver/ResolverDialog.js +7 -2
- package/react/components/fdc3Resolver/ResolverDialog.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverDialog.spec.js +3 -2
- package/react/components/fdc3Resolver/ResolverDialog.spec.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverDialog.stories.js +2 -0
- package/react/components/fdc3Resolver/ResolverDialog.stories.js.map +1 -1
- package/react/components/icon/Icon.d.ts +13 -0
- package/react/components/icon/Icon.js +34 -0
- package/react/components/icon/Icon.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialog.d.ts +4 -0
- package/react/components/legacyControls/FinsembleDialog.js +15 -0
- package/react/components/legacyControls/FinsembleDialog.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogButton.d.ts +3 -0
- package/react/components/legacyControls/FinsembleDialogButton.js +6 -1
- package/react/components/legacyControls/FinsembleDialogButton.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogQuestion.d.ts +7 -0
- package/react/components/legacyControls/FinsembleDialogQuestion.js +7 -0
- package/react/components/legacyControls/FinsembleDialogQuestion.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogTextInput.d.ts +3 -0
- package/react/components/legacyControls/FinsembleDialogTextInput.js +14 -0
- package/react/components/legacyControls/FinsembleDialogTextInput.js.map +1 -1
- package/react/components/legacyControls/FinsembleDnDContext.d.ts +19 -0
- package/react/components/legacyControls/FinsembleDnDContext.js +126 -1
- package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
- package/react/components/legacyControls/FinsembleDraggable.d.ts +3 -0
- package/react/components/legacyControls/FinsembleDraggable.js +3 -0
- package/react/components/legacyControls/FinsembleDraggable.js.map +1 -1
- package/react/components/legacyControls/FinsembleHoverDetector.d.ts +15 -0
- package/react/components/legacyControls/FinsembleHoverDetector.js +26 -1
- package/react/components/legacyControls/FinsembleHoverDetector.js.map +1 -1
- package/react/components/legacyControls/FinsembleMenuSection.d.ts +4 -0
- package/react/components/legacyControls/FinsembleMenuSection.js +38 -0
- package/react/components/legacyControls/FinsembleMenuSection.js.map +1 -1
- package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js +1 -0
- package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js.map +1 -1
- package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js +1 -0
- package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js.map +1 -1
- package/react/components/linker/LinkerMenu.d.ts +3 -0
- package/react/components/linker/LinkerMenu.js +21 -0
- package/react/components/linker/LinkerMenu.js.map +1 -1
- package/react/components/linker/LinkerMenuDeprecated.d.ts +3 -0
- package/react/components/linker/LinkerMenuDeprecated.js +9 -0
- package/react/components/linker/LinkerMenuDeprecated.js.map +1 -1
- package/react/components/menu/Menu.d.ts +15 -0
- package/react/components/menu/Menu.js +15 -0
- package/react/components/menu/Menu.js.map +1 -1
- package/react/components/menu/MenuAutoResizer.d.ts +7 -0
- package/react/components/menu/MenuAutoResizer.js +27 -0
- package/react/components/menu/MenuAutoResizer.js.map +1 -1
- package/react/components/menu/MenuContent.d.ts +4 -0
- package/react/components/menu/MenuContent.js +4 -0
- package/react/components/menu/MenuContent.js.map +1 -1
- package/react/components/menu/MenuHotKey.d.ts +14 -0
- package/react/components/menu/MenuHotKey.js +15 -0
- package/react/components/menu/MenuHotKey.js.map +1 -1
- package/react/components/menu/MenuItem.d.ts +8 -0
- package/react/components/menu/MenuItem.js +13 -2
- package/react/components/menu/MenuItem.js.map +1 -1
- package/react/components/menu/MenuPortal.js +112 -2
- package/react/components/menu/MenuPortal.js.map +1 -1
- package/react/components/menu/MenuShell.d.ts +16 -0
- package/react/components/menu/MenuShell.js +26 -0
- package/react/components/menu/MenuShell.js.map +1 -1
- package/react/components/menu/MenuToggle.d.ts +3 -0
- package/react/components/menu/MenuToggle.js +3 -0
- package/react/components/menu/MenuToggle.js.map +1 -1
- package/react/components/menu/keyboardNavigation.d.ts +12 -0
- package/react/components/menu/keyboardNavigation.js +55 -0
- package/react/components/menu/keyboardNavigation.js.map +1 -1
- package/react/components/menu/menuContext.d.ts +6 -0
- package/react/components/menu/menuContext.js +6 -0
- package/react/components/menu/menuContext.js.map +1 -1
- package/react/components/menu/menuHelpers.d.ts +22 -0
- package/react/components/menu/menuHelpers.js +58 -1
- package/react/components/menu/menuHelpers.js.map +1 -1
- package/react/components/notifications/components/drawer/DrawerControls.js +8 -0
- package/react/components/notifications/components/drawer/DrawerControls.js.map +1 -1
- package/react/components/notifications/components/drawer/DrawerHeader.js +5 -0
- package/react/components/notifications/components/drawer/DrawerHeader.js.map +1 -1
- package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js +18 -0
- package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
- package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js +3 -0
- package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js.map +1 -1
- package/react/components/notifications/components/shared/CheckButton.js +1 -1
- package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
- package/react/components/notifications/components/shared/NotificationCardShell.d.ts +9 -0
- package/react/components/notifications/components/shared/NotificationCardShell.js +13 -6
- package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
- package/react/components/notifications/components/shared/OverflowMenu.d.ts +4 -0
- package/react/components/notifications/components/shared/OverflowMenu.js +16 -2
- package/react/components/notifications/components/shared/OverflowMenu.js.map +1 -1
- package/react/components/notifications/components/views/CardView.js +3 -0
- package/react/components/notifications/components/views/CardView.js.map +1 -1
- package/react/components/notifications/components/views/ListView.js +8 -0
- package/react/components/notifications/components/views/ListView.js.map +1 -1
- package/react/components/notifications/notificationsContext.d.ts +4 -0
- package/react/components/notifications/notificationsContext.js +4 -0
- package/react/components/notifications/notificationsContext.js.map +1 -1
- package/react/components/notifications/types.d.ts +3 -0
- package/react/components/notifications/utils.d.ts +4 -0
- package/react/components/notifications/utils.js +4 -0
- package/react/components/notifications/utils.js.map +1 -1
- package/react/components/processMonitor/ProcessMonitor.d.ts +3 -0
- package/react/components/processMonitor/ProcessMonitor.js +17 -2
- package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
- package/react/components/processMonitor/components/ChildWindow.d.ts +3 -0
- package/react/components/processMonitor/components/ChildWindow.js +5 -0
- package/react/components/processMonitor/components/ChildWindow.js.map +1 -1
- package/react/components/processMonitor/components/ListHeader.d.ts +5 -0
- package/react/components/processMonitor/components/ListHeader.js +7 -0
- package/react/components/processMonitor/components/ListHeader.js.map +1 -1
- package/react/components/processMonitor/components/ProcessStatistics.js +12 -1
- package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
- package/react/components/processMonitor/constants.js +6 -0
- package/react/components/processMonitor/constants.js.map +1 -1
- package/react/components/processMonitor/helpers.d.ts +13 -0
- package/react/components/processMonitor/helpers.js +23 -3
- package/react/components/processMonitor/helpers.js.map +1 -1
- package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts +39 -0
- package/react/components/processMonitor/stores/ProcessMonitorStore.js +50 -0
- package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
- package/react/components/quickComponentForm/QuickComponentForm.d.ts +3 -0
- package/react/components/quickComponentForm/QuickComponentForm.js +20 -0
- package/react/components/quickComponentForm/QuickComponentForm.js.map +1 -1
- package/react/components/quickComponentForm/quickComponent.css +1 -1
- package/react/components/sdd/AddApp.d.ts +4 -2
- package/react/components/sdd/AddApp.js +57 -49
- package/react/components/sdd/AddApp.js.map +1 -1
- package/react/components/sdd/AppEditAccess.js +8 -0
- package/react/components/sdd/AppEditAccess.js.map +1 -1
- package/react/components/sdd/AppEditPage.d.ts +2 -1
- package/react/components/sdd/AppEditPage.js +148 -361
- package/react/components/sdd/AppEditPage.js.map +1 -1
- package/react/components/sdd/Appearance.css +1 -1
- package/react/components/sdd/Appearance.js +3 -0
- package/react/components/sdd/Appearance.js.map +1 -1
- package/react/components/sdd/Application.js +39 -7
- package/react/components/sdd/Application.js.map +1 -1
- package/react/components/sdd/Applications.js +89 -13
- package/react/components/sdd/Applications.js.map +1 -1
- package/react/components/sdd/AssetsPage.css +3 -3
- package/react/components/sdd/EditPreload.js +10 -0
- package/react/components/sdd/EditPreload.js.map +1 -1
- package/react/components/sdd/ExportCloud.js +4 -0
- package/react/components/sdd/ExportCloud.js.map +1 -1
- package/react/components/sdd/Publish.js +2 -0
- package/react/components/sdd/Publish.js.map +1 -1
- package/react/components/sdd/PublishProgress.js +11 -1
- package/react/components/sdd/PublishProgress.js.map +1 -1
- package/react/components/sdd/SmartDesktopDesigner.js +17 -0
- package/react/components/sdd/SmartDesktopDesigner.js.map +1 -1
- package/react/components/sdd/ThemePage.css +6 -23
- package/react/components/sdd/ThemePage.js +1 -1
- package/react/components/sdd/ThemePage.js.map +1 -1
- package/react/components/sdd/Themes.js +2 -0
- package/react/components/sdd/Themes.js.map +1 -1
- package/react/components/sdd/Toolbar.js +7 -0
- package/react/components/sdd/Toolbar.js.map +1 -1
- package/react/components/sdd/appEditPage/Behavior.d.ts +34 -0
- package/react/components/sdd/appEditPage/Behavior.js +134 -0
- package/react/components/sdd/appEditPage/Behavior.js.map +1 -0
- package/react/components/sdd/appEditPage/Component.d.ts +22 -0
- package/react/components/sdd/appEditPage/Component.js +76 -0
- package/react/components/sdd/appEditPage/Component.js.map +1 -0
- package/react/components/sdd/appEditPage/DebugToolkit.d.ts +9 -0
- package/react/components/sdd/appEditPage/DebugToolkit.js +20 -0
- package/react/components/sdd/appEditPage/DebugToolkit.js.map +1 -0
- package/react/components/sdd/appEditPage/Interop.d.ts +10 -0
- package/react/components/sdd/appEditPage/Interop.js +40 -0
- package/react/components/sdd/appEditPage/Interop.js.map +1 -0
- package/react/components/sdd/appEditPage/Position.d.ts +18 -0
- package/react/components/sdd/appEditPage/Position.js +72 -0
- package/react/components/sdd/appEditPage/Position.js.map +1 -0
- package/react/components/sdd/appEditPage/Preloads.d.ts +9 -0
- package/react/components/sdd/appEditPage/Preloads.js +16 -0
- package/react/components/sdd/appEditPage/Preloads.js.map +1 -0
- package/react/components/sdd/appEditPage/SelectConnect.d.ts +15 -0
- package/react/components/sdd/appEditPage/SelectConnect.js +28 -0
- package/react/components/sdd/appEditPage/SelectConnect.js.map +1 -0
- package/react/components/sdd/appEditPage/Workspace.d.ts +12 -0
- package/react/components/sdd/appEditPage/Workspace.js +30 -0
- package/react/components/sdd/appEditPage/Workspace.js.map +1 -0
- package/react/components/sdd/common/getCSSVars.js +7 -2
- package/react/components/sdd/common/getCSSVars.js.map +1 -1
- package/react/components/sdd/common/setPreloadDefaults.js +4 -0
- package/react/components/sdd/common/setPreloadDefaults.js.map +1 -1
- package/react/components/sdd/css/addApp.css +18 -5
- package/react/components/sdd/css/appearance.css +6 -0
- package/react/components/sdd/css/applications.css +27 -14
- package/react/components/sdd/css/authentication.css +7 -6
- package/react/components/sdd/css/buttons.css +1 -1
- package/react/components/sdd/css/export.css +5 -3
- package/react/components/sdd/css/getting-started.css +2 -2
- package/react/components/sdd/css/nav.css +8 -11
- package/react/components/sdd/css/project-header.css +5 -7
- package/react/components/sdd/css/styles.css +29 -23
- package/react/components/sdd/css/views.css +4 -3
- package/react/components/sdd/fixtures/apps.js +12 -0
- package/react/components/sdd/fixtures/apps.js.map +1 -1
- package/react/components/sdd/fixtures/configTemplate.js +1 -0
- package/react/components/sdd/fixtures/configTemplate.js.map +1 -1
- package/react/components/sdd/fixtures/publishProgress.js +40 -0
- package/react/components/sdd/fixtures/publishProgress.js.map +1 -1
- package/react/components/sdd/sdd_helpers.d.ts +6 -0
- package/react/components/sdd/sdd_helpers.js +6 -0
- package/react/components/sdd/sdd_helpers.js.map +1 -1
- package/react/components/sdd/smartDesktopClient.d.ts +303 -0
- package/react/components/sdd/smartDesktopClient.js +334 -1
- package/react/components/sdd/smartDesktopClient.js.map +1 -1
- package/react/components/sdd/smartDesktopClient.spec.js +5 -2
- package/react/components/sdd/smartDesktopClient.spec.js.map +1 -1
- package/react/components/sdd/stories/AddApp.stories.d.ts +2 -1
- package/react/components/sdd/stories/AddApp.stories.js +8 -0
- package/react/components/sdd/stories/AddApp.stories.js.map +1 -1
- package/react/components/sdd/stories/AppEditPage.stories.d.ts +3 -1
- package/react/components/sdd/stories/AppEditPage.stories.js +3 -0
- package/react/components/sdd/stories/AppEditPage.stories.js.map +1 -1
- package/react/components/sdd/stories/Appearance.stories.js +1 -0
- package/react/components/sdd/stories/Appearance.stories.js.map +1 -1
- package/react/components/sdd/tests/AddApp.spec.js +40 -3
- package/react/components/sdd/tests/AddApp.spec.js.map +1 -1
- package/react/components/sdd/tests/AppEditPage.spec.js +16 -0
- package/react/components/sdd/tests/AppEditPage.spec.js.map +1 -1
- package/react/components/sdd/tests/Application.spec.js +33 -438
- package/react/components/sdd/tests/Application.spec.js.map +1 -1
- package/react/components/sdd/tests/Applications.spec.d.ts +1 -1
- package/react/components/sdd/tests/Applications.spec.js +29 -5
- package/react/components/sdd/tests/Applications.spec.js.map +1 -1
- package/react/components/sdd/tests/Authentication.spec.js +7 -0
- package/react/components/sdd/tests/Authentication.spec.js.map +1 -1
- package/react/components/sdd/tests/ContentHeader.spec.js +2 -0
- package/react/components/sdd/tests/ContentHeader.spec.js.map +1 -1
- package/react/components/sdd/tests/EditPreload.spec.js +13 -0
- package/react/components/sdd/tests/EditPreload.spec.js.map +1 -1
- package/react/components/sdd/tests/Export.spec.js +2 -1
- package/react/components/sdd/tests/Export.spec.js.map +1 -1
- package/react/components/sdd/tests/ItemList.spec.js +4 -0
- package/react/components/sdd/tests/ItemList.spec.js.map +1 -1
- package/react/components/sdd/tests/OptionalSettingsView.spec.js +29 -0
- package/react/components/sdd/tests/OptionalSettingsView.spec.js.map +1 -1
- package/react/components/sdd/tests/ProjectErrors.spec.js +2 -0
- package/react/components/sdd/tests/ProjectErrors.spec.js.map +1 -1
- package/react/components/sdd/tests/Themes.spec.js +1 -1
- package/react/components/sdd/tests/Themes.spec.js.map +1 -1
- package/react/components/sdd/tests/Toolbar.spec.js +53 -0
- package/react/components/sdd/tests/Toolbar.spec.js.map +1 -1
- package/react/components/sdd/tests/a11y_helper.js +8 -0
- package/react/components/sdd/tests/a11y_helper.js.map +1 -1
- package/react/components/search/Highlight.d.ts +6 -0
- package/react/components/search/Highlight.js +19 -0
- package/react/components/search/Highlight.js.map +1 -1
- package/react/components/search/SearchBestMatch.d.ts +4 -0
- package/react/components/search/SearchBestMatch.js +11 -0
- package/react/components/search/SearchBestMatch.js.map +1 -1
- package/react/components/search/SearchInput.d.ts +5 -0
- package/react/components/search/SearchInput.js +6 -0
- package/react/components/search/SearchInput.js.map +1 -1
- package/react/components/search/SearchProviderResults.js +2 -0
- package/react/components/search/SearchProviderResults.js.map +1 -1
- package/react/components/search/SearchResult.js +6 -0
- package/react/components/search/SearchResult.js.map +1 -1
- package/react/components/search/SearchResult.spec.js +7 -0
- package/react/components/search/SearchResult.spec.js.map +1 -1
- package/react/components/search/SearchResult.stories.js +4 -0
- package/react/components/search/SearchResult.stories.js.map +1 -1
- package/react/components/search/SearchResults.js +5 -1
- package/react/components/search/SearchResults.js.map +1 -1
- package/react/components/search/SearchResults.spec.js +7 -0
- package/react/components/search/SearchResults.spec.js.map +1 -1
- package/react/components/shared/Animate.d.ts +5 -0
- package/react/components/shared/Animate.js +12 -1
- package/react/components/shared/Animate.js.map +1 -1
- package/react/components/shared/DefaultDropdownButton.js +9 -0
- package/react/components/shared/DefaultDropdownButton.js.map +1 -1
- package/react/components/shared/Tag.d.ts +0 -4
- package/react/components/shared/Tag.js +4 -0
- package/react/components/shared/Tag.js.map +1 -1
- package/react/components/shared/TagsMenu.d.ts +6 -0
- package/react/components/shared/TagsMenu.js +7 -0
- package/react/components/shared/TagsMenu.js.map +1 -1
- package/react/components/shared/addProtocolToValidURL.d.ts +6 -0
- package/react/components/shared/addProtocolToValidURL.js +6 -0
- package/react/components/shared/addProtocolToValidURL.js.map +1 -1
- package/react/components/shared/openQuitConfirmationDialog.d.ts +1 -1
- package/react/components/shared/openQuitConfirmationDialog.js +4 -4
- package/react/components/shared/openQuitConfirmationDialog.js.map +1 -1
- package/react/components/shared/tests/addProtocolToValidURL.spec.js +1 -0
- package/react/components/shared/tests/addProtocolToValidURL.spec.js.map +1 -1
- package/react/components/shared/validateURL.d.ts +18 -0
- package/react/components/shared/validateURL.js +24 -5
- package/react/components/shared/validateURL.js.map +1 -1
- package/react/components/singleInputDialog/SingleInputDialog.css +1 -1
- package/react/components/singleInputDialog/SingleInputDialog.d.ts +3 -0
- package/react/components/singleInputDialog/SingleInputDialog.js +44 -0
- package/react/components/singleInputDialog/SingleInputDialog.js.map +1 -1
- package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js +6 -0
- package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
- package/react/components/system/System.d.ts +22 -0
- package/react/components/system/System.js +23 -1
- package/react/components/system/System.js.map +1 -1
- package/react/components/system/System.stories.js +1 -0
- package/react/components/system/System.stories.js.map +1 -1
- package/react/components/system/SystemTrayComponentShell.d.ts +6 -0
- package/react/components/system/SystemTrayComponentShell.js +9 -0
- package/react/components/system/SystemTrayComponentShell.js.map +1 -1
- package/react/components/toolbar/AutoArrange.d.ts +5 -0
- package/react/components/toolbar/AutoArrange.js +8 -1
- package/react/components/toolbar/AutoArrange.js.map +1 -1
- package/react/components/toolbar/AutoArrange.spec.js +1 -0
- package/react/components/toolbar/AutoArrange.spec.js.map +1 -1
- package/react/components/toolbar/AutoArrange.stories.js +1 -0
- package/react/components/toolbar/AutoArrange.stories.js.map +1 -1
- package/react/components/toolbar/DragHandle.d.ts +4 -0
- package/react/components/toolbar/DragHandle.js +11 -0
- package/react/components/toolbar/DragHandle.js.map +1 -1
- package/react/components/toolbar/DragHandle.spec.js +1 -0
- package/react/components/toolbar/DragHandle.spec.js.map +1 -1
- package/react/components/toolbar/DragHandle.stories.js +1 -0
- package/react/components/toolbar/DragHandle.stories.js.map +1 -1
- package/react/components/toolbar/MinimizeAll.d.ts +4 -0
- package/react/components/toolbar/MinimizeAll.js +7 -1
- package/react/components/toolbar/MinimizeAll.js.map +1 -1
- package/react/components/toolbar/MinimizeAll.spec.js +1 -0
- package/react/components/toolbar/MinimizeAll.spec.js.map +1 -1
- package/react/components/toolbar/MinimizeAll.stories.js +1 -0
- package/react/components/toolbar/MinimizeAll.stories.js.map +1 -1
- package/react/components/toolbar/NotificationControl.d.ts +5 -0
- package/react/components/toolbar/NotificationControl.js +8 -1
- package/react/components/toolbar/NotificationControl.js.map +1 -1
- package/react/components/toolbar/RevealAll.d.ts +4 -0
- package/react/components/toolbar/RevealAll.js +7 -1
- package/react/components/toolbar/RevealAll.js.map +1 -1
- package/react/components/toolbar/RevealAll.spec.js +1 -0
- package/react/components/toolbar/RevealAll.spec.js.map +1 -1
- package/react/components/toolbar/RevealAll.stories.js +1 -0
- package/react/components/toolbar/RevealAll.stories.js.map +1 -1
- package/react/components/toolbar/SddButton.d.ts +4 -0
- package/react/components/toolbar/SddButton.js +4 -0
- package/react/components/toolbar/SddButton.js.map +1 -1
- package/react/components/toolbar/ToolbarIcon.d.ts +4 -0
- package/react/components/toolbar/ToolbarIcon.js +4 -0
- package/react/components/toolbar/ToolbarIcon.js.map +1 -1
- package/react/components/toolbar/ToolbarSection.d.ts +7 -0
- package/react/components/toolbar/ToolbarSection.js +19 -1
- package/react/components/toolbar/ToolbarSection.js.map +1 -1
- package/react/components/toolbar/ToolbarShell.d.ts +5 -0
- package/react/components/toolbar/ToolbarShell.js +7 -0
- package/react/components/toolbar/ToolbarShell.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.d.ts +16 -0
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js +20 -0
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.d.ts +52 -0
- package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js +58 -0
- package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.d.ts +5 -0
- package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js +5 -0
- package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.d.ts +27 -0
- package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js +49 -0
- package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.d.ts +13 -0
- package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js +14 -0
- package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/Content.d.ts +5 -0
- package/react/components/toolbar/advancedAppLauncher/components/Content.js +19 -0
- package/react/components/toolbar/advancedAppLauncher/components/Content.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.d.ts +4 -0
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js +4 -0
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.d.ts +16 -0
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js +39 -0
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.d.ts +4 -0
- package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js +9 -0
- package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js +3 -0
- package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.d.ts +6 -0
- package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js +7 -0
- package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.d.ts +5 -0
- package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js +5 -0
- package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.d.ts +5 -0
- package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js +5 -0
- package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/modules/FDC3.d.ts +37 -0
- package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js +40 -0
- package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.d.ts +3 -0
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js +82 -0
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.d.ts +10 -0
- package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.js +11 -0
- package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.js.map +1 -1
- package/react/components/toolbar/appLauncher/AppLauncherMenu.d.ts +18 -0
- package/react/components/toolbar/appLauncher/AppLauncherMenu.js +20 -0
- package/react/components/toolbar/appLauncher/AppLauncherMenu.js.map +1 -1
- package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.d.ts +9 -0
- package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js +12 -0
- package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js.map +1 -1
- package/react/components/toolbar/appLauncher/appLauncher.css +1 -1
- package/react/components/toolbar/appLauncher/components/componentList.d.ts +3 -0
- package/react/components/toolbar/appLauncher/components/componentList.js +17 -3
- package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.d.ts +6 -0
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.js +26 -0
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.js.map +1 -1
- package/react/components/toolbar/dashbar/Dashbar.js +70 -3
- package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
- package/react/components/toolbar/dashbar/DashbarItem.js +5 -0
- package/react/components/toolbar/dashbar/DashbarItem.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.d.ts +7 -0
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js +7 -0
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts +16 -0
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js +20 -0
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.d.ts +26 -0
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js +29 -0
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.d.ts +5 -0
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js +6 -0
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts +76 -0
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +140 -1
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/workspaceManagementMenu.css +8 -18
- package/react/components/userPreferences/NotificationsPreferencesContext.d.ts +4 -0
- package/react/components/userPreferences/NotificationsPreferencesContext.js +4 -0
- package/react/components/userPreferences/NotificationsPreferencesContext.js.map +1 -1
- package/react/components/userPreferences/UserPreferenceTypes.d.ts +3 -0
- package/react/components/userPreferences/UserPreferences.d.ts +8 -0
- package/react/components/userPreferences/UserPreferences.js +8 -0
- package/react/components/userPreferences/UserPreferences.js.map +1 -1
- package/react/components/userPreferences/UserPreferencesBase.js +4 -0
- package/react/components/userPreferences/UserPreferencesBase.js.map +1 -1
- package/react/components/userPreferences/components/ContentSection.d.ts +5 -0
- package/react/components/userPreferences/components/LeftNav.d.ts +4 -0
- package/react/components/userPreferences/components/content/DashbarEditor.js +3 -0
- package/react/components/userPreferences/components/content/DashbarEditor.js.map +1 -1
- package/react/components/userPreferences/components/content/Notifications.js +3 -0
- package/react/components/userPreferences/components/content/Notifications.js.map +1 -1
- package/react/components/userPreferences/components/content/Workspaces.d.ts +12 -0
- package/react/components/userPreferences/components/content/Workspaces.js +33 -1
- package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js +3 -0
- package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js +3 -0
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js +3 -0
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js.map +1 -1
- package/react/components/userPreferences/components/general/ScheduledClose.js +11 -0
- package/react/components/userPreferences/components/general/ScheduledClose.js.map +1 -1
- package/react/components/userPreferences/components/workspaces/WorkspaceItem.js +3 -0
- package/react/components/userPreferences/components/workspaces/WorkspaceItem.js.map +1 -1
- package/react/components/userPreferences/stores/UserPreferencesStore.d.ts +17 -0
- package/react/components/userPreferences/stores/UserPreferencesStore.js +27 -0
- package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
- package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js +1 -0
- package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js.map +1 -1
- package/react/components/userPreferences/tests/Workspace.spec.js +20 -0
- package/react/components/userPreferences/tests/Workspace.spec.js.map +1 -1
- package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +124 -0
- package/react/components/windowTitleBar/WindowTitleBarShell.js +284 -35
- package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
- package/react/components/windowTitleBar/components/center/Tab.d.ts +3 -0
- package/react/components/windowTitleBar/components/center/Tab.js +3 -0
- package/react/components/windowTitleBar/components/center/Tab.js.map +1 -1
- package/react/components/windowTitleBar/components/center/TabList.d.ts +90 -0
- package/react/components/windowTitleBar/components/center/TabList.js +170 -4
- package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerButton.d.ts +9 -1
- package/react/components/windowTitleBar/components/left/LinkerButton.js +25 -9
- package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.d.ts +47 -0
- package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js +76 -1
- package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerGroups.d.ts +4 -0
- package/react/components/windowTitleBar/components/left/LinkerGroups.js +5 -0
- package/react/components/windowTitleBar/components/left/LinkerGroups.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.d.ts +18 -0
- package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js +49 -0
- package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js.map +1 -1
- package/react/components/windowTitleBar/components/left/ShareButton.d.ts +17 -0
- package/react/components/windowTitleBar/components/left/ShareButton.js +39 -0
- package/react/components/windowTitleBar/components/left/ShareButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js +4 -0
- package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/CloseButton.d.ts +27 -0
- package/react/components/windowTitleBar/components/right/CloseButton.js +27 -0
- package/react/components/windowTitleBar/components/right/CloseButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/GroupingButton.d.ts +37 -0
- package/react/components/windowTitleBar/components/right/GroupingButton.js +40 -0
- package/react/components/windowTitleBar/components/right/GroupingButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/MaximizeButton.d.ts +46 -0
- package/react/components/windowTitleBar/components/right/MaximizeButton.js +54 -0
- package/react/components/windowTitleBar/components/right/MaximizeButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/MinimizeButton.d.ts +26 -0
- package/react/components/windowTitleBar/components/right/MinimizeButton.js +26 -0
- package/react/components/windowTitleBar/components/right/MinimizeButton.js.map +1 -1
- package/react/components/windowTitleBar/components/windowTitle.d.ts +40 -0
- package/react/components/windowTitleBar/components/windowTitle.js +172 -10
- package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
- package/react/components/windowTitleBar/stores/windowTitleBarStore.d.ts +5 -0
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js +72 -1
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
- package/react/components/yesNoDialog/YesNoDialog.css +1 -1
- package/react/components/yesNoDialog/YesNoDialog.d.ts +3 -0
- package/react/components/yesNoDialog/YesNoDialog.js +63 -0
- package/react/components/yesNoDialog/YesNoDialog.js.map +1 -1
- package/react/components/yesNoDialog/YesNoDialog.spec.js +4 -0
- package/react/components/yesNoDialog/YesNoDialog.spec.js.map +1 -1
- package/react/components/yesNoDialog/timer.js +2 -0
- package/react/components/yesNoDialog/timer.js.map +1 -1
- package/react/enzymeSetup.js +5 -0
- package/react/enzymeSetup.js.map +1 -1
- package/react/hooks/useDashbar.js +10 -0
- package/react/hooks/useDashbar.js.map +1 -1
- package/react/hooks/useDeepEffect.d.ts +4 -0
- package/react/hooks/useDeepEffect.js +21 -0
- package/react/hooks/useDeepEffect.js.map +1 -1
- package/react/hooks/useFavorites.d.ts +15 -0
- package/react/hooks/useFavorites.js +3 -0
- package/react/hooks/useFavorites.js.map +1 -1
- package/react/hooks/useFavoritesShell.d.ts +4 -0
- package/react/hooks/useFavoritesShell.js +23 -0
- package/react/hooks/useFavoritesShell.js.map +1 -1
- package/react/hooks/useHotkey.d.ts +6 -0
- package/react/hooks/useHotkey.js +9 -0
- package/react/hooks/useHotkey.js.map +1 -1
- package/react/hooks/useLinker.js +14 -0
- package/react/hooks/useLinker.js.map +1 -1
- package/react/hooks/useMenu.d.ts +29 -0
- package/react/hooks/useMenu.js +12 -1
- package/react/hooks/useMenu.js.map +1 -1
- package/react/hooks/useNotifications.d.ts +44 -0
- package/react/hooks/useNotifications.js +90 -0
- package/react/hooks/useNotifications.js.map +1 -1
- package/react/hooks/useOutsideClickDetector.d.ts +3 -0
- package/react/hooks/useOutsideClickDetector.js +3 -0
- package/react/hooks/useOutsideClickDetector.js.map +1 -1
- package/react/hooks/usePubSub.d.ts +17 -0
- package/react/hooks/usePubSub.js +18 -0
- package/react/hooks/usePubSub.js.map +1 -1
- package/react/hooks/useSearch.d.ts +5 -0
- package/react/hooks/useSearch.js +30 -0
- package/react/hooks/useSearch.js.map +1 -1
- package/react/hooks/useToolbar.js +52 -0
- package/react/hooks/useToolbar.js.map +1 -1
- package/react/reducers/favoriteReducer.d.ts +3 -0
- package/react/reducers/linkerReducer.d.ts +3 -0
- package/react/reducers/linkerReducer.js +4 -0
- package/react/reducers/linkerReducer.js.map +1 -1
- package/react/reducers/menuReducer.d.ts +28 -0
- package/react/reducers/menuReducer.js +34 -0
- package/react/reducers/menuReducer.js.map +1 -1
- package/react/reducers/rootReducer.js +3 -0
- package/react/reducers/rootReducer.js.map +1 -1
- package/react/reducers/searchReducer.d.ts +7 -0
- package/react/reducers/searchReducer.js +6 -0
- package/react/reducers/searchReducer.js.map +1 -1
- package/react/reducers/workspaceReducer.js +1 -0
- package/react/reducers/workspaceReducer.js.map +1 -1
- package/react/store.d.ts +4 -0
- package/react/store.js +11 -0
- package/react/store.js.map +1 -1
- package/react/tsconfig.tsbuildinfo +1 -1
- package/react/types/fdc3.d.ts +2 -0
- package/react/types/linkerTypes.d.ts +13 -0
- package/react/types/linkerTypes.js +1 -0
- package/react/types/linkerTypes.js.map +1 -1
- package/react/types/smartDesktopDesignerTypes.d.ts +5 -0
- package/react/types/smartDesktopDesignerTypes.js.map +1 -1
- package/react/types/workspaceTypes.d.ts +8 -0
|
@@ -7,9 +7,17 @@ var _Title_instances, _Title_getWindowManagerForTab, _Title_calculateTabTitle, _
|
|
|
7
7
|
import React, { Component } from "react";
|
|
8
8
|
import { Icon } from "../../icon/Icon";
|
|
9
9
|
import { Store } from "../stores/windowTitleBarStore";
|
|
10
|
+
// The store name for the distributed store which tracks tab titles
|
|
10
11
|
const WINDOW_TAB_TITLE_STORE = "window-tab-title";
|
|
12
|
+
// The field name to watch for tab title edits
|
|
11
13
|
const FIELD_NAME_PERSISTED_TITLE = "persistedTitle";
|
|
14
|
+
// The windowTabNameStore reference
|
|
12
15
|
let windowTabNameStore;
|
|
16
|
+
/**
|
|
17
|
+
* Gets the store which tracks the tab title for a windowName. This is a distributed store shared by all components.
|
|
18
|
+
*
|
|
19
|
+
* @returns a Promise which resolves the StoreModel associated with window and tab names
|
|
20
|
+
*/
|
|
13
21
|
const getWindowTabNameStore = async () => {
|
|
14
22
|
if (!windowTabNameStore) {
|
|
15
23
|
let { data: store } = await FSBL.Clients.DistributedStoreClient.createGlobalStore({
|
|
@@ -17,23 +25,37 @@ const getWindowTabNameStore = async () => {
|
|
|
17
25
|
});
|
|
18
26
|
windowTabNameStore = store;
|
|
19
27
|
}
|
|
28
|
+
// Return the store
|
|
20
29
|
return windowTabNameStore;
|
|
21
30
|
};
|
|
31
|
+
/**
|
|
32
|
+
* The wrapper component for tab renaming
|
|
33
|
+
* @param {*} props
|
|
34
|
+
*/
|
|
22
35
|
function EditTab(props) {
|
|
23
36
|
const [editingTitle, setEditingTitle] = React.useState(false);
|
|
24
37
|
const [clickTimeout, setClickTimeout] = React.useState(undefined);
|
|
25
38
|
const inputEl = React.useRef(null);
|
|
26
39
|
const updateTabTitle = async (e) => {
|
|
40
|
+
// When the tab title has changed via a user edit, simply update the DistributedStore
|
|
41
|
+
// Get the title
|
|
27
42
|
const title = e.target.value;
|
|
43
|
+
// Get the tab name store
|
|
28
44
|
let store = await getWindowTabNameStore();
|
|
45
|
+
// If the store is unavailable, then the tab name cannot be persisted
|
|
29
46
|
if (!store) {
|
|
47
|
+
// This is not critical, but tab titles may be stale
|
|
30
48
|
FSBL.Clients.Logger.warn("Error persisting tab title via EditTab: the store was not found");
|
|
31
49
|
return;
|
|
32
50
|
}
|
|
51
|
+
// Persist the tab title
|
|
33
52
|
store.setValue({ field: props.windowIdentifier.windowName, value: title });
|
|
53
|
+
// Get the window which coresponds to the tab being edited
|
|
34
54
|
const { wrap: win } = await FSBL.FinsembleWindow.getInstance(props.windowIdentifier);
|
|
55
|
+
// Set the component state "persistedTitle" (which is the edited title)
|
|
35
56
|
FSBL.Clients.Logger.debug(`Setting component state "${FIELD_NAME_PERSISTED_TITLE}" with value "${title}"`);
|
|
36
57
|
await win.setComponentState({ field: FIELD_NAME_PERSISTED_TITLE, value: title });
|
|
58
|
+
// Stop editing in all cases
|
|
37
59
|
setEditingTitle(false);
|
|
38
60
|
};
|
|
39
61
|
const beginEditing = async () => {
|
|
@@ -47,11 +69,13 @@ function EditTab(props) {
|
|
|
47
69
|
const clickHandler = () => {
|
|
48
70
|
const allowWindowTitleRenaming = Store.getValue("allowWindowTitleRenaming");
|
|
49
71
|
if (clickTimeout) {
|
|
72
|
+
// double click
|
|
50
73
|
if (allowWindowTitleRenaming) {
|
|
51
74
|
beginEditing();
|
|
52
75
|
}
|
|
53
76
|
}
|
|
54
77
|
else if (!editingTitle) {
|
|
78
|
+
// single click
|
|
55
79
|
let timeout = setTimeout(() => {
|
|
56
80
|
clearTimeout(clickTimeout);
|
|
57
81
|
setClickTimeout(undefined);
|
|
@@ -67,103 +91,207 @@ function EditTab(props) {
|
|
|
67
91
|
const keyDownHandler = (e) => {
|
|
68
92
|
e.key === "Enter" && updateTabTitle(e);
|
|
69
93
|
};
|
|
70
|
-
return (React.createElement("div", { className: "fsbl-tab-editor",
|
|
94
|
+
return (React.createElement("div", { className: "fsbl-tab-editor",
|
|
95
|
+
// We can't use Click and Dblclick events together cause for one dblclick fires two click events which close title editor.
|
|
96
|
+
// Workaround with setTimeout should resolve this behavior.
|
|
97
|
+
onClick: clickHandler }, editingTitle ? (React.createElement("div", { className: "fsbl-tab fsbl-active-tab", style: { width: props.tabWidth || "auto" } },
|
|
71
98
|
React.createElement("div", { draggable: true, onDragStart: (e) => {
|
|
72
99
|
e.stopPropagation();
|
|
73
100
|
e.preventDefault();
|
|
74
101
|
} },
|
|
75
102
|
React.createElement("input", { id: "title_editor_input", ref: inputEl, onBlur: blurHandler, onKeyDown: keyDownHandler, type: "text", className: "tab__input", maxLength: 32 })))) : (props.children)));
|
|
76
103
|
}
|
|
104
|
+
/*
|
|
105
|
+
* Description how stacked window tabs work.
|
|
106
|
+
*
|
|
107
|
+
* The simplest case - when you have only 2 tabs. In that case you will actually have 2 windows and 4 tabs.
|
|
108
|
+
* Lets call them as: window 1 - w1, window 2 - w2, tab 1 from window 1 - w1_t1, tab 2 from window 1 - w1_t2, for tabs from window 2 - w2_t1 and w2_t2.
|
|
109
|
+
* When you switch tabs you activate w1 or w2 with active tab w1_t1 or w2_t2 correspondingly.
|
|
110
|
+
* Tabs w1_t2 and w2_t1 are inactive. They needed only for rendering. I call them as remote tabs, cause their titles must be synchronized with active tabs titles.
|
|
111
|
+
* Thus when you rename active tab (w1_t1), the corresponding remote tab (w2_t1) should be updated automatically.
|
|
112
|
+
*/
|
|
77
113
|
export class Title extends Component {
|
|
78
114
|
constructor(props) {
|
|
79
115
|
var _a, _b, _c;
|
|
80
116
|
super(props);
|
|
81
117
|
_Title_instances.add(this);
|
|
118
|
+
// The listener for tab title change events via the DistributedStoreClient, kept as a reference so
|
|
119
|
+
// that the listener can be deregistered when the component is unmounted
|
|
82
120
|
this.tabTitleChangedStoreListener = (err, response) => {
|
|
83
121
|
if (!!err) {
|
|
122
|
+
// This is not critical; in the worst case this tab title will be stale
|
|
84
123
|
FSBL.Clients.Logger.warn(`Listener error for store "${WINDOW_TAB_TITLE_STORE}" for field "${this.props.windowIdentifier.windowName}"`, err);
|
|
85
124
|
return;
|
|
86
125
|
}
|
|
126
|
+
// Log a message
|
|
87
127
|
FSBL.Clients.Logger.debug(`Store "${WINDOW_TAB_TITLE_STORE}" notified of new title "${response.value}" for window "${response.field}"`);
|
|
128
|
+
// Invoke updateTitle
|
|
88
129
|
if (!!this._mounted) {
|
|
89
130
|
this.updateTitle();
|
|
90
131
|
}
|
|
91
132
|
};
|
|
133
|
+
// Flag to determine if this instance is currently mounted; this is necessary because:
|
|
134
|
+
// 1.) Title components are mounted and unmounted as an artifact of how the tab or tab list is rendered
|
|
135
|
+
// 2.) Keeping tab titles synchronized is an asynchronous process
|
|
136
|
+
// 3.) During the asynchronous process of tab title synchronization, a call to setState is made and
|
|
137
|
+
// that raises a React warning since the component state cannot be changed while the component
|
|
138
|
+
// is unmounted
|
|
92
139
|
this._mounted = false;
|
|
140
|
+
// Declare the initial title as a blank string
|
|
93
141
|
let initialTitle = " ";
|
|
142
|
+
// If the currently rendering tab represents the current window, then use the document title (or window name)
|
|
94
143
|
if (undefined !== (finsembleWindow === null || finsembleWindow === void 0 ? void 0 : finsembleWindow.thisWindowName) &&
|
|
95
144
|
(finsembleWindow === null || finsembleWindow === void 0 ? void 0 : finsembleWindow.thisWindowName) === ((_a = props === null || props === void 0 ? void 0 : props.windowIdentifier) === null || _a === void 0 ? void 0 : _a.windowName)) {
|
|
96
145
|
initialTitle = document.title || ((_b = props.windowIdentifier) === null || _b === void 0 ? void 0 : _b.windowName);
|
|
97
146
|
}
|
|
98
147
|
this.state = {
|
|
148
|
+
// Use document.title first to prevent a title flickering when dragging a tab of another window.
|
|
149
|
+
// The reason for flickering is the component re-rendering multiple times. The initial place
|
|
150
|
+
// where re-rendering start is the `disallowDragOnCenterRegion()` at the WindowTitleBarShell.
|
|
151
|
+
// At that function, we change the state of the parent component which triggers re-rendering for the children tree.
|
|
99
152
|
title: initialTitle,
|
|
100
153
|
icon: null,
|
|
154
|
+
// The "windowName" is the name of the window which corresponds to the this instance of the
|
|
155
|
+
// Title component, though the actual current window may belong to some other
|
|
156
|
+
// component(ie this tab represents an inactive window)
|
|
101
157
|
windowName: (_c = props.windowIdentifier) === null || _c === void 0 ? void 0 : _c.windowName,
|
|
102
158
|
};
|
|
159
|
+
// Bind the "updateTitle" function (in order to use React component functions)
|
|
103
160
|
this.updateTitle = this.updateTitle.bind(this);
|
|
161
|
+
// Initial title set
|
|
104
162
|
this.updateTitle();
|
|
105
163
|
}
|
|
164
|
+
/**
|
|
165
|
+
* Updates the title for both the tab and the window.
|
|
166
|
+
*
|
|
167
|
+
* @returns a Promise which resolves nothing
|
|
168
|
+
*/
|
|
106
169
|
async updateTitle() {
|
|
170
|
+
// There is a subtle difference bewtween windowTitle and tabTitle. Since this code executes
|
|
171
|
+
// when *any* tab has a name change, this code can execute when the active window represents
|
|
172
|
+
// a tab other than the currently rendering tab (ie an inactive tab).
|
|
107
173
|
var _a, _b, _c;
|
|
174
|
+
// The window represented by this tab title instance
|
|
108
175
|
const { wrap: tabWindow } = await FSBL.FinsembleWindow.getInstance(this.props.windowIdentifier);
|
|
176
|
+
// "tabWindowOptions" refers to the options from the window which hosts the component represented by this tab
|
|
109
177
|
const { data: tabWindowOptions } = await tabWindow.getOptions();
|
|
178
|
+
// Derive the title: "config title" then "document.title" then "appd title"
|
|
110
179
|
let title = await __classPrivateFieldGet(this, _Title_instances, "m", _Title_calculateTabTitle).call(this);
|
|
180
|
+
// Get the titleBar icon from the WindowDescriptor for the TAB window (not the CURRENT window)
|
|
111
181
|
const icon = (_c = (_b = (_a = tabWindowOptions) === null || _a === void 0 ? void 0 : _a.icons) === null || _b === void 0 ? void 0 : _b.titleBarIcon) !== null && _c !== void 0 ? _c : {
|
|
112
182
|
imageType: "initials",
|
|
113
183
|
name: title,
|
|
114
184
|
};
|
|
185
|
+
// Log a message
|
|
115
186
|
FSBL.Clients.Logger.debug(`Setting tab title ${title} for window ${this.props.windowIdentifier.windowName}`);
|
|
187
|
+
// Finally, set the state if the component is mounted
|
|
116
188
|
if (!!this._mounted) {
|
|
117
189
|
this.setState({
|
|
118
190
|
title,
|
|
119
|
-
icon: Object.assign(Object.assign({}, icon), {
|
|
191
|
+
icon: Object.assign(Object.assign({}, icon), {
|
|
192
|
+
// Application causes the background to default to a circle rather than a square
|
|
193
|
+
category: "Application" }),
|
|
120
194
|
});
|
|
121
195
|
}
|
|
196
|
+
// If this tab component instance represents the window (that is, this is the active tab), then set the title
|
|
122
197
|
if (finsembleWindow.thisWindowName === this.props.windowIdentifier.windowName) {
|
|
123
198
|
document.title = await __classPrivateFieldGet(this, _Title_instances, "m", _Title_calculateTabTitle).call(this);
|
|
124
199
|
}
|
|
125
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* React component lifecycle event, triggered once the component has been added to the DOM.
|
|
203
|
+
*/
|
|
126
204
|
componentDidMount() {
|
|
205
|
+
// Set the mounted flag to true (this component is currently mounted)
|
|
127
206
|
this._mounted = true;
|
|
207
|
+
// Add listeners
|
|
128
208
|
__classPrivateFieldGet(this, _Title_instances, "m", _Title_addListeners).call(this);
|
|
129
209
|
}
|
|
210
|
+
// Triggers a re-rendering of the drag handle in the title bar.
|
|
130
211
|
componentDidUpdate() {
|
|
131
212
|
if (typeof this.props.onUpdate === "function") {
|
|
132
213
|
this.props.onUpdate();
|
|
133
214
|
}
|
|
134
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* React component lifecycle event, triggered before the component is removed from the DOM.
|
|
218
|
+
*/
|
|
135
219
|
componentWillUnmount() {
|
|
220
|
+
// Set the mounted flag to false (this component is not currently mounted)
|
|
136
221
|
this._mounted = false;
|
|
222
|
+
// Remove listeners
|
|
137
223
|
__classPrivateFieldGet(this, _Title_instances, "m", _Title_removeListeners).call(this);
|
|
138
224
|
}
|
|
139
225
|
render() {
|
|
140
226
|
var _a;
|
|
141
227
|
const { titleWidth } = this.props;
|
|
142
228
|
const style = titleWidth ? { width: titleWidth } : {};
|
|
143
|
-
return (React.createElement(EditTab, { tabWidth: titleWidth, setActiveTab: (_a = this === null || this === void 0 ? void 0 : this.props) === null || _a === void 0 ? void 0 : _a.onClick, title: this.state.title,
|
|
229
|
+
return (React.createElement(EditTab, { tabWidth: titleWidth, setActiveTab: (_a = this === null || this === void 0 ? void 0 : this.props) === null || _a === void 0 ? void 0 : _a.onClick, title: this.state.title,
|
|
230
|
+
// The windowIdentifier indicates which app/component this tab instance should represent
|
|
231
|
+
windowIdentifier: this.props.windowIdentifier },
|
|
144
232
|
React.createElement("div", { className: "fsbl-tab-title", style: style },
|
|
145
233
|
this.state.icon && React.createElement(Icon, Object.assign({}, this.state.icon)),
|
|
146
234
|
React.createElement("div", { className: "title-text" }, this.state.title))));
|
|
147
235
|
}
|
|
148
236
|
}
|
|
149
|
-
_Title_instances = new WeakSet(), _Title_getWindowManagerForTab =
|
|
237
|
+
_Title_instances = new WeakSet(), _Title_getWindowManagerForTab =
|
|
238
|
+
/**
|
|
239
|
+
* Gets a reference to the "Window Manager" component for the tab which is rendering. If the this tab IS the active tab, then the WindowManager will be the same as the WindowManager
|
|
240
|
+
* attached to the WindowClient. However, all other tab components displayed in this window will need to derive the WindowManager from the config, based on the
|
|
241
|
+
* tab's windowIdentifier.
|
|
242
|
+
*
|
|
243
|
+
* This is because the tab's windowIdentifier only has the name (ex: SomeApp-37ba6708-3a75-462e-b900-1812e338cbf1). The name is derived by removing the last 5 substrings
|
|
244
|
+
* separated by "-". This will fail in the face of a UUID format change.
|
|
245
|
+
*
|
|
246
|
+
* @returns the "Window Manager" component, or "undefined" if the "Window Manager" is not found
|
|
247
|
+
*/
|
|
248
|
+
async function _Title_getWindowManagerForTab() {
|
|
249
|
+
// On second thought, ALL tabs will derive the WindowManager the same way; at least if it is wrong, it is wrong consistently
|
|
250
|
+
//
|
|
251
|
+
// if (finsembleWindow.thisWindowName === this.props?.windowIdentifier?.windowName) {
|
|
252
|
+
// return FSBL.Clients.WindowClient.options?.customData?.foreign?.components?.["Window Manager"] || FSBL.Clients.WindowClient.options?.customData?.appDConfig?.manifest?.foreign?.components?.["Window Manager"];
|
|
253
|
+
// } else {
|
|
150
254
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
255
|
+
// Check that "windowName" exists
|
|
151
256
|
if (!!((_b = (_a = this.props) === null || _a === void 0 ? void 0 : _a.windowIdentifier) === null || _b === void 0 ? void 0 : _b.windowName)) {
|
|
257
|
+
// Get the window name
|
|
152
258
|
const tabsWindowName = this.props.windowIdentifier.windowName;
|
|
259
|
+
// Get the active descriptors
|
|
153
260
|
const { data: activeDescriptors } = await FSBL.Clients.LauncherClient.getActiveDescriptors();
|
|
261
|
+
// Return the "Window Manager" for the window whose name matches THIS tab's name
|
|
154
262
|
return (_h = (_g = (_f = (_e = (_d = (_c = activeDescriptors === null || activeDescriptors === void 0 ? void 0 : activeDescriptors[tabsWindowName]) === null || _c === void 0 ? void 0 : _c.customData) === null || _d === void 0 ? void 0 : _d.appDConfig) === null || _e === void 0 ? void 0 : _e.manifest) === null || _f === void 0 ? void 0 : _f.foreign) === null || _g === void 0 ? void 0 : _g.components) === null || _h === void 0 ? void 0 : _h["Window Manager"];
|
|
155
263
|
}
|
|
156
264
|
return undefined;
|
|
157
|
-
}
|
|
265
|
+
// }
|
|
266
|
+
}, _Title_calculateTabTitle =
|
|
267
|
+
/**
|
|
268
|
+
* Calculates a tab title. Uses the following algorithm until a non-null value is found.
|
|
269
|
+
* <ol>
|
|
270
|
+
* <li>user edited tab title</li>
|
|
271
|
+
* <li>the component config</li>
|
|
272
|
+
* <li>document.title</li>
|
|
273
|
+
* <li>appd config</li>
|
|
274
|
+
* </ol>
|
|
275
|
+
*
|
|
276
|
+
* @returns the calculated tab title
|
|
277
|
+
*/
|
|
278
|
+
async function _Title_calculateTabTitle() {
|
|
158
279
|
return ((await __classPrivateFieldGet(this, _Title_instances, "m", _Title_getUserEditedTitle).call(this)) ||
|
|
159
280
|
(await __classPrivateFieldGet(this, _Title_instances, "m", _Title_getConfigTitle).call(this)) ||
|
|
160
281
|
(await __classPrivateFieldGet(this, _Title_instances, "m", _Title_getDocumentTitle).call(this)) ||
|
|
161
282
|
__classPrivateFieldGet(this, _Title_instances, "m", _Title_getAppDTitle).call(this));
|
|
162
|
-
}, _Title_getUserEditedTitle =
|
|
283
|
+
}, _Title_getUserEditedTitle =
|
|
284
|
+
/**
|
|
285
|
+
* Returns the name of the title supplied by a user; undefined if the user has not supplied a title.
|
|
286
|
+
*
|
|
287
|
+
* @returns The name of the title supplied by a user; undefined if the user has not supplied a title
|
|
288
|
+
*/
|
|
289
|
+
async function _Title_getUserEditedTitle() {
|
|
163
290
|
const { wrap: tabWindow } = await FSBL.FinsembleWindow.getInstance(this.props.windowIdentifier);
|
|
164
291
|
return new Promise((resolve) => {
|
|
165
292
|
tabWindow.getComponentState({ field: FIELD_NAME_PERSISTED_TITLE }, (error, persistedTitle) => {
|
|
166
293
|
if (!!error) {
|
|
294
|
+
// should always return value even if it hasn't been retrieved from the state
|
|
167
295
|
resolve(undefined);
|
|
168
296
|
}
|
|
169
297
|
else {
|
|
@@ -171,14 +299,28 @@ _Title_instances = new WeakSet(), _Title_getWindowManagerForTab = async function
|
|
|
171
299
|
}
|
|
172
300
|
});
|
|
173
301
|
});
|
|
174
|
-
}, _Title_getConfigTitle =
|
|
302
|
+
}, _Title_getConfigTitle =
|
|
303
|
+
/**
|
|
304
|
+
* Gets a title set in the component configuration.
|
|
305
|
+
*
|
|
306
|
+
* @returns any title set in the component configuration
|
|
307
|
+
*/
|
|
308
|
+
async function _Title_getConfigTitle() {
|
|
175
309
|
var _a;
|
|
176
310
|
const windowManager = await __classPrivateFieldGet(this, _Title_instances, "m", _Title_getWindowManagerForTab).call(this);
|
|
177
311
|
return ((_a = windowManager === null || windowManager === void 0 ? void 0 : windowManager.FSBLHeader) === null || _a === void 0 ? void 0 : _a.title) || (windowManager === null || windowManager === void 0 ? void 0 : windowManager.title);
|
|
178
|
-
}, _Title_getDocumentTitle =
|
|
312
|
+
}, _Title_getDocumentTitle =
|
|
313
|
+
/**
|
|
314
|
+
* Returns document.title.
|
|
315
|
+
*
|
|
316
|
+
* @returns the document.title (from the "tab name" store)
|
|
317
|
+
*/
|
|
318
|
+
async function _Title_getDocumentTitle() {
|
|
179
319
|
var _a, _b;
|
|
180
320
|
const store = await getWindowTabNameStore();
|
|
321
|
+
// If the store is unavailable, then the tab name cannot be updated
|
|
181
322
|
if (!store) {
|
|
323
|
+
// This is not critical, but tab titles may be stale
|
|
182
324
|
FSBL.Clients.Logger.warn("Error setting the tab title: the store was not found");
|
|
183
325
|
return;
|
|
184
326
|
}
|
|
@@ -189,23 +331,43 @@ _Title_instances = new WeakSet(), _Title_getWindowManagerForTab = async function
|
|
|
189
331
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
190
332
|
return (((_e = (_d = (_c = (_b = (_a = FSBL.Clients.WindowClient.options) === null || _a === void 0 ? void 0 : _a.customData) === null || _b === void 0 ? void 0 : _b.appDConfig) === null || _c === void 0 ? void 0 : _c.manifest) === null || _d === void 0 ? void 0 : _d.component) === null || _e === void 0 ? void 0 : _e.displayName) ||
|
|
191
333
|
((_h = (_g = (_f = FSBL.Clients.WindowClient.options) === null || _f === void 0 ? void 0 : _f.customData) === null || _g === void 0 ? void 0 : _g.appDConfig) === null || _h === void 0 ? void 0 : _h.name));
|
|
192
|
-
}, _Title_addListeners =
|
|
334
|
+
}, _Title_addListeners =
|
|
335
|
+
/**
|
|
336
|
+
* Adds the listener(s) required to set window and tab titles.
|
|
337
|
+
*/
|
|
338
|
+
async function _Title_addListeners() {
|
|
339
|
+
// Subscribe to the DistributedStoreClient (these messages originate from BaseWindow, when the
|
|
340
|
+
// DistributedStore has been updated).
|
|
341
|
+
//
|
|
342
|
+
// Each window will have n listeners, where n is the number of tabs held in the window.
|
|
343
|
+
// Get the store and add a listener
|
|
193
344
|
const store = await getWindowTabNameStore();
|
|
345
|
+
// If the store is unavailable, then the tab name cannot be updated
|
|
194
346
|
if (!store) {
|
|
347
|
+
// This is not critical, but tab titles may be stale
|
|
195
348
|
FSBL.Clients.Logger.warn("Error adding a tab title listener: the store was not found");
|
|
196
349
|
return;
|
|
197
350
|
}
|
|
351
|
+
// Add a listener
|
|
198
352
|
store.addListener({ field: this.props.windowIdentifier.windowName }, this.tabTitleChangedStoreListener, () => {
|
|
199
353
|
FSBL.Clients.Logger.debug(`Added listener to store "${WINDOW_TAB_TITLE_STORE}" for field "${this.props.windowIdentifier.windowName}"`);
|
|
200
354
|
});
|
|
201
|
-
}, _Title_removeListeners =
|
|
355
|
+
}, _Title_removeListeners =
|
|
356
|
+
/**
|
|
357
|
+
* Removes listener(s) required to set window and tab titles.
|
|
358
|
+
*/
|
|
359
|
+
async function _Title_removeListeners() {
|
|
360
|
+
// Unsubscribe from the window/tab store
|
|
202
361
|
const store = await getWindowTabNameStore();
|
|
362
|
+
// If the store is unavailable, then the tab name cannot be updated
|
|
203
363
|
if (!store) {
|
|
364
|
+
// This is not critical, but tab titles may be stale
|
|
204
365
|
FSBL.Clients.Logger.warn("Error removing a tab title listener: the store was not found");
|
|
205
366
|
return;
|
|
206
367
|
}
|
|
207
368
|
store.removeListener({ field: this.props.windowIdentifier.windowName }, this.tabTitleChangedStoreListener, (err, response) => {
|
|
208
369
|
if (!!err) {
|
|
370
|
+
// This is not critical; the listener could not be removed from the store - this may be a memory leak
|
|
209
371
|
FSBL.Clients.Logger.warn(`Could not remove listener from store "${WINDOW_TAB_TITLE_STORE}" for field "${this.props.windowIdentifier.windowName}"`, err);
|
|
210
372
|
return;
|
|
211
373
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windowTitle.js","sourceRoot":"","sources":["../../../../src/components/windowTitleBar/components/windowTitle.tsx"],"names":[],"mappings":"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","sourcesContent":["import { WindowIdentifier, WindowDescriptor, services } from \"@finsemble/finsemble-api\";\nimport { ListenerFunction } from \"@finsemble/finsemble-api/types/clients/StoreModel\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport React, { Component } from \"react\";\nimport { EditTabProps } from \"../../../types/windowTitleBar\";\nimport { Icon } from \"../../icon/Icon\";\nimport { Store } from \"../stores/windowTitleBarStore\";\n\ntype IconDescriptor = services.window.types.IconDescriptor;\n\n/**\n * TAB TITLES: HOW DO THEY WORK?\n *\n * Each component, when stacked, will have several tab titles. For each component, there is a window. For each window, there are 2 tab titles per component.\n *\n * Whichever component is \"active\" will render all tabs - exactly one \"active\" tab and n-1 \"inactive\" tabs (where n is the number of components in the stack). When\n * the active component is changed (via a click, for example), then the visible window becomes the window associated with the active component.\n *\n * Tab titles may change at any time, and for a number of reasons. For example, the component may execute \"document.title='...some title'\". Or perhaps the tab title has\n * been edited by the user. In order to account for all title changes, the following flow is used:\n * *something* updates document.title\n * The WindowClient for the component will notice the title change and send a router message (via FinsembleWindow.setTitle) with a topic representitive of the windowName\n * BaseWindow listens to router changes on the same topic and updates a DistributedStore dedicated to tab names\n * The tab components all subscribe to the DistributedStore dedicated to tab names and will update the title accordingly\n *\n * This is a \"one-way\" operation; that is to say that some code will ultimately alter the DistributedStore and the tab title components will read the changes. While this generally\n * happens with a write to document.title, it can also happen when a user edits the tab title manually. In this case, the component state is altered with a field \"persistedTitle\"\n * whose value is the edited title. At render time, the tab title component will use any value in \"persistedTitle\" as the title, irregardless of any other value.\n *\n * NOTE: A tab may be edited only when it is the active component; ergo the call to \"setComponentState\" is safe.\n */\n\n/**\n * WINDOW TITLES: HOW DO THEY WORK?\n *\n * Each application window has a title which is displayed in the operating system taskbar and task switcher. This title comes from the\n * value of \"document.title\" in the window title bar component. It is important to understand that when tabs are stacked, the actual window\n * which holds the window title is the title of the window of the active component. It is therefore important to keep the window title and the\n * tab titles up to date and synchronized.\n */\n\ntype TitleProps = {\n\twindowIdentifier: WindowIdentifier;\n\tonUpdate?: Function;\n\ttitleWidth?: number;\n\tonClick?: () => void;\n};\n\ntype TitleState = {\n\ttitle: string | undefined;\n\ticon: any;\n\twindowName?: string;\n};\n\n// The store name for the distributed store which tracks tab titles\nconst WINDOW_TAB_TITLE_STORE = \"window-tab-title\";\n// The field name to watch for tab title edits\nconst FIELD_NAME_PERSISTED_TITLE = \"persistedTitle\";\n\n// The windowTabNameStore reference\nlet windowTabNameStore: any;\n\n/**\n * Gets the store which tracks the tab title for a windowName. This is a distributed store shared by all components.\n *\n * @returns a Promise which resolves the StoreModel associated with window and tab names\n */\nconst getWindowTabNameStore = async () => {\n\tif (!windowTabNameStore) {\n\t\tlet { data: store } = await FSBL.Clients.DistributedStoreClient.createGlobalStore({\n\t\t\tstore: WINDOW_TAB_TITLE_STORE,\n\t\t});\n\t\twindowTabNameStore = store;\n\t}\n\n\t// Return the store\n\treturn windowTabNameStore;\n};\n\n/**\n * The wrapper component for tab renaming\n * @param {*} props\n */\nfunction EditTab(props: EditTabProps) {\n\tconst [editingTitle, setEditingTitle] = React.useState(false);\n\tconst [clickTimeout, setClickTimeout] = React.useState<NodeJS.Timeout | undefined>(undefined);\n\tconst inputEl = React.useRef<HTMLInputElement>(null);\n\n\tconst updateTabTitle = async (e: React.KeyboardEvent<HTMLInputElement> | React.FocusEvent<HTMLInputElement>) => {\n\t\t// When the tab title has changed via a user edit, simply update the DistributedStore\n\n\t\t// Get the title\n\t\tconst title = (e.target as HTMLInputElement).value;\n\n\t\t// Get the tab name store\n\t\tlet store = await getWindowTabNameStore();\n\t\t// If the store is unavailable, then the tab name cannot be persisted\n\t\tif (!store) {\n\t\t\t// This is not critical, but tab titles may be stale\n\t\t\tFSBL.Clients.Logger.warn(\"Error persisting tab title via EditTab: the store was not found\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Persist the tab title\n\t\tstore.setValue({ field: props.windowIdentifier.windowName, value: title });\n\n\t\t// Get the window which coresponds to the tab being edited\n\t\tconst { wrap: win } = await FSBL.FinsembleWindow.getInstance(props.windowIdentifier);\n\n\t\t// Set the component state \"persistedTitle\" (which is the edited title)\n\t\tFSBL.Clients.Logger.debug(`Setting component state \"${FIELD_NAME_PERSISTED_TITLE}\" with value \"${title}\"`);\n\t\tawait win.setComponentState({ field: FIELD_NAME_PERSISTED_TITLE, value: title });\n\n\t\t// Stop editing in all cases\n\t\tsetEditingTitle(false);\n\t};\n\n\tconst beginEditing = async () => {\n\t\tawait setEditingTitle(true);\n\t\tinputEl?.current?.focus();\n\t\tif (inputEl?.current) {\n\t\t\tinputEl.current.value = props.title ?? \"\";\n\t\t}\n\t};\n\n\tconst clickHandler = () => {\n\t\tconst allowWindowTitleRenaming = Store.getValue(\"allowWindowTitleRenaming\");\n\n\t\tif (clickTimeout) {\n\t\t\t// double click\n\t\t\tif (allowWindowTitleRenaming) {\n\t\t\t\tbeginEditing();\n\t\t\t}\n\t\t} else if (!editingTitle) {\n\t\t\t// single click\n\t\t\tlet timeout = setTimeout(() => {\n\t\t\t\tclearTimeout(clickTimeout);\n\t\t\t\tsetClickTimeout(undefined);\n\t\t\t}, 500);\n\t\t\tsetClickTimeout(timeout);\n\t\t\tif (props.setActiveTab) props.setActiveTab();\n\t\t}\n\t};\n\n\tconst blurHandler = (e: React.FocusEvent<HTMLInputElement>) => {\n\t\tupdateTabTitle(e);\n\t};\n\n\tconst keyDownHandler = (e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\te.key === \"Enter\" && updateTabTitle(e);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"fsbl-tab-editor\"\n\t\t\t// We can't use Click and Dblclick events together cause for one dblclick fires two click events which close title editor.\n\t\t\t// Workaround with setTimeout should resolve this behavior.\n\t\t\tonClick={clickHandler}\n\t\t>\n\t\t\t{editingTitle ? (\n\t\t\t\t<div className=\"fsbl-tab fsbl-active-tab\" style={{ width: props.tabWidth || \"auto\" }}>\n\t\t\t\t\t{/* workaround to disable tab dragging in the edit mode */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tdraggable={true}\n\t\t\t\t\t\tonDragStart={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tid=\"title_editor_input\"\n\t\t\t\t\t\t\tref={inputEl}\n\t\t\t\t\t\t\tonBlur={blurHandler}\n\t\t\t\t\t\t\tonKeyDown={keyDownHandler}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tclassName=\"tab__input\"\n\t\t\t\t\t\t\tmaxLength={32}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\tprops.children\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\n/*\n * Description how stacked window tabs work.\n *\n * The simplest case - when you have only 2 tabs. In that case you will actually have 2 windows and 4 tabs.\n * Lets call them as: window 1 - w1, window 2 - w2, tab 1 from window 1 - w1_t1, tab 2 from window 1 - w1_t2, for tabs from window 2 - w2_t1 and w2_t2.\n * When you switch tabs you activate w1 or w2 with active tab w1_t1 or w2_t2 correspondingly.\n * Tabs w1_t2 and w2_t1 are inactive. They needed only for rendering. I call them as remote tabs, cause their titles must be synchronized with active tabs titles.\n * Thus when you rename active tab (w1_t1), the corresponding remote tab (w2_t1) should be updated automatically.\n */\n\nexport class Title extends Component<TitleProps, TitleState> {\n\t// The listener for tab title change events via the DistributedStoreClient, kept as a reference so\n\t// that the listener can be deregistered when the component is unmounted\n\ttabTitleChangedStoreListener: ListenerFunction = (err: StandardError, response: { field: string; value: string }) => {\n\t\tif (!!err) {\n\t\t\t// This is not critical; in the worst case this tab title will be stale\n\t\t\tFSBL.Clients.Logger.warn(\n\t\t\t\t`Listener error for store \"${WINDOW_TAB_TITLE_STORE}\" for field \"${this.props.windowIdentifier.windowName}\"`,\n\t\t\t\terr\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Log a message\n\t\tFSBL.Clients.Logger.debug(\n\t\t\t`Store \"${WINDOW_TAB_TITLE_STORE}\" notified of new title \"${response.value}\" for window \"${response.field}\"`\n\t\t);\n\n\t\t// Invoke updateTitle\n\t\tif (!!this._mounted) {\n\t\t\tthis.updateTitle();\n\t\t}\n\t};\n\n\t// Flag to determine if this instance is currently mounted; this is necessary because:\n\t// 1.) Title components are mounted and unmounted as an artifact of how the tab or tab list is rendered\n\t// 2.) Keeping tab titles synchronized is an asynchronous process\n\t// 3.) During the asynchronous process of tab title synchronization, a call to setState is made and\n\t// that raises a React warning since the component state cannot be changed while the component\n\t// is unmounted\n\t_mounted = false;\n\n\tconstructor(props: TitleProps) {\n\t\tsuper(props);\n\n\t\t// Declare the initial title as a blank string\n\t\tlet initialTitle = \" \";\n\n\t\t// If the currently rendering tab represents the current window, then use the document title (or window name)\n\t\tif (\n\t\t\tundefined !== finsembleWindow?.thisWindowName &&\n\t\t\tfinsembleWindow?.thisWindowName === props?.windowIdentifier?.windowName\n\t\t) {\n\t\t\tinitialTitle = document.title || props.windowIdentifier?.windowName;\n\t\t}\n\n\t\tthis.state = {\n\t\t\t// Use document.title first to prevent a title flickering when dragging a tab of another window.\n\t\t\t// The reason for flickering is the component re-rendering multiple times. The initial place\n\t\t\t// where re-rendering start is the `disallowDragOnCenterRegion()` at the WindowTitleBarShell.\n\t\t\t// At that function, we change the state of the parent component which triggers re-rendering for the children tree.\n\t\t\ttitle: initialTitle,\n\t\t\ticon: null,\n\t\t\t// The \"windowName\" is the name of the window which corresponds to the this instance of the\n\t\t\t// Title component, though the actual current window may belong to some other\n\t\t\t// component(ie this tab represents an inactive window)\n\t\t\twindowName: props.windowIdentifier?.windowName,\n\t\t};\n\n\t\t// Bind the \"updateTitle\" function (in order to use React component functions)\n\t\tthis.updateTitle = this.updateTitle.bind(this);\n\n\t\t// Initial title set\n\t\tthis.updateTitle();\n\t}\n\n\t/**\n\t * Gets a reference to the \"Window Manager\" component for the tab which is rendering. If the this tab IS the active tab, then the WindowManager will be the same as the WindowManager\n\t * attached to the WindowClient. However, all other tab components displayed in this window will need to derive the WindowManager from the config, based on the\n\t * tab's windowIdentifier.\n\t *\n\t * This is because the tab's windowIdentifier only has the name (ex: SomeApp-37ba6708-3a75-462e-b900-1812e338cbf1). The name is derived by removing the last 5 substrings\n\t * separated by \"-\". This will fail in the face of a UUID format change.\n\t *\n\t * @returns the \"Window Manager\" component, or \"undefined\" if the \"Window Manager\" is not found\n\t */\n\tasync #getWindowManagerForTab() {\n\t\t// On second thought, ALL tabs will derive the WindowManager the same way; at least if it is wrong, it is wrong consistently\n\t\t//\n\t\t// if (finsembleWindow.thisWindowName === this.props?.windowIdentifier?.windowName) {\n\t\t// \treturn FSBL.Clients.WindowClient.options?.customData?.foreign?.components?.[\"Window Manager\"] || FSBL.Clients.WindowClient.options?.customData?.appDConfig?.manifest?.foreign?.components?.[\"Window Manager\"];\n\t\t// } else {\n\n\t\t// Check that \"windowName\" exists\n\t\tif (!!this.props?.windowIdentifier?.windowName) {\n\t\t\t// Get the window name\n\t\t\tconst tabsWindowName = this.props.windowIdentifier.windowName;\n\t\t\t// Get the active descriptors\n\t\t\tconst { data: activeDescriptors } = await FSBL.Clients.LauncherClient.getActiveDescriptors();\n\t\t\t// Return the \"Window Manager\" for the window whose name matches THIS tab's name\n\t\t\treturn activeDescriptors?.[tabsWindowName]?.customData?.appDConfig?.manifest?.foreign?.components?.[\n\t\t\t\t\"Window Manager\"\n\t\t\t];\n\t\t}\n\n\t\treturn undefined;\n\t\t// }\n\t}\n\n\t/**\n\t * Calculates a tab title. Uses the following algorithm until a non-null value is found.\n\t * <ol>\n\t * <li>user edited tab title</li>\n\t * <li>the component config</li>\n\t * <li>document.title</li>\n\t * <li>appd config</li>\n\t * </ol>\n\t *\n\t * @returns the calculated tab title\n\t */\n\tasync #calculateTabTitle() {\n\t\treturn (\n\t\t\t(await this.#getUserEditedTitle()) ||\n\t\t\t(await this.#getConfigTitle()) ||\n\t\t\t(await this.#getDocumentTitle()) ||\n\t\t\tthis.#getAppDTitle()\n\t\t);\n\t}\n\n\t/**\n\t * Returns the name of the title supplied by a user; undefined if the user has not supplied a title.\n\t *\n\t * @returns The name of the title supplied by a user; undefined if the user has not supplied a title\n\t */\n\tasync #getUserEditedTitle() {\n\t\tconst { wrap: tabWindow } = await FSBL.FinsembleWindow.getInstance(this.props.windowIdentifier);\n\t\treturn new Promise((resolve) => {\n\t\t\ttabWindow.getComponentState({ field: FIELD_NAME_PERSISTED_TITLE }, (error: any, persistedTitle: any) => {\n\t\t\t\tif (!!error) {\n\t\t\t\t\t// should always return value even if it hasn't been retrieved from the state\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(persistedTitle);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Gets a title set in the component configuration.\n\t *\n\t * @returns any title set in the component configuration\n\t */\n\tasync #getConfigTitle() {\n\t\tconst windowManager = await this.#getWindowManagerForTab();\n\t\treturn windowManager?.FSBLHeader?.title || windowManager?.title;\n\t}\n\n\t/**\n\t * Returns document.title.\n\t *\n\t * @returns the document.title (from the \"tab name\" store)\n\t */\n\tasync #getDocumentTitle() {\n\t\tconst store = await getWindowTabNameStore();\n\n\t\t// If the store is unavailable, then the tab name cannot be updated\n\t\tif (!store) {\n\t\t\t// This is not critical, but tab titles may be stale\n\t\t\tFSBL.Clients.Logger.warn(\"Error setting the tab title: the store was not found\");\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.props?.windowIdentifier?.windowName\n\t\t\t? (await store.getGlobalValue(this.props.windowIdentifier.windowName)).data\n\t\t\t: undefined;\n\t}\n\n\t/**\n\t * Gets the AppD configuration\n\t *\n\t * @returns The AppD name\n\t */\n\t#getAppDTitle() {\n\t\treturn (\n\t\t\tFSBL.Clients.WindowClient.options?.customData?.appDConfig?.manifest?.component?.displayName ||\n\t\t\tFSBL.Clients.WindowClient.options?.customData?.appDConfig?.name\n\t\t);\n\t}\n\n\t/**\n\t * Updates the title for both the tab and the window.\n\t *\n\t * @returns a Promise which resolves nothing\n\t */\n\tasync updateTitle() {\n\t\t// There is a subtle difference bewtween windowTitle and tabTitle. Since this code executes\n\t\t// when *any* tab has a name change, this code can execute when the active window represents\n\t\t// a tab other than the currently rendering tab (ie an inactive tab).\n\n\t\t// The window represented by this tab title instance\n\t\tconst { wrap: tabWindow } = await FSBL.FinsembleWindow.getInstance(this.props.windowIdentifier);\n\n\t\t// \"tabWindowOptions\" refers to the options from the window which hosts the component represented by this tab\n\t\tconst { data: tabWindowOptions } = await tabWindow.getOptions();\n\n\t\t// Derive the title: \"config title\" then \"document.title\" then \"appd title\"\n\t\tlet title = await this.#calculateTabTitle();\n\n\t\t// Get the titleBar icon from the WindowDescriptor for the TAB window (not the CURRENT window)\n\t\tconst icon: IconDescriptor = (tabWindowOptions as WindowDescriptor)?.icons?.titleBarIcon ?? {\n\t\t\timageType: \"initials\",\n\t\t\tname: title,\n\t\t};\n\n\t\t// Log a message\n\t\tFSBL.Clients.Logger.debug(`Setting tab title ${title} for window ${this.props.windowIdentifier.windowName}`);\n\n\t\t// Finally, set the state if the component is mounted\n\t\tif (!!this._mounted) {\n\t\t\tthis.setState({\n\t\t\t\ttitle,\n\t\t\t\ticon: {\n\t\t\t\t\t...icon,\n\t\t\t\t\t// Application causes the background to default to a circle rather than a square\n\t\t\t\t\tcategory: \"Application\",\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\t// If this tab component instance represents the window (that is, this is the active tab), then set the title\n\t\tif (finsembleWindow.thisWindowName === this.props.windowIdentifier.windowName) {\n\t\t\tdocument.title = await this.#calculateTabTitle();\n\t\t}\n\t}\n\n\t/**\n\t * Adds the listener(s) required to set window and tab titles.\n\t */\n\tasync #addListeners() {\n\t\t// Subscribe to the DistributedStoreClient (these messages originate from BaseWindow, when the\n\t\t// DistributedStore has been updated).\n\t\t//\n\t\t// Each window will have n listeners, where n is the number of tabs held in the window.\n\n\t\t// Get the store and add a listener\n\t\tconst store = await getWindowTabNameStore();\n\n\t\t// If the store is unavailable, then the tab name cannot be updated\n\t\tif (!store) {\n\t\t\t// This is not critical, but tab titles may be stale\n\t\t\tFSBL.Clients.Logger.warn(\"Error adding a tab title listener: the store was not found\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Add a listener\n\t\tstore.addListener({ field: this.props.windowIdentifier.windowName }, this.tabTitleChangedStoreListener, () => {\n\t\t\tFSBL.Clients.Logger.debug(\n\t\t\t\t`Added listener to store \"${WINDOW_TAB_TITLE_STORE}\" for field \"${this.props.windowIdentifier.windowName}\"`\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Removes listener(s) required to set window and tab titles.\n\t */\n\tasync #removeListeners() {\n\t\t// Unsubscribe from the window/tab store\n\t\tconst store = await getWindowTabNameStore();\n\t\t// If the store is unavailable, then the tab name cannot be updated\n\t\tif (!store) {\n\t\t\t// This is not critical, but tab titles may be stale\n\t\t\tFSBL.Clients.Logger.warn(\"Error removing a tab title listener: the store was not found\");\n\t\t\treturn;\n\t\t}\n\t\tstore.removeListener(\n\t\t\t{ field: this.props.windowIdentifier.windowName },\n\t\t\tthis.tabTitleChangedStoreListener,\n\t\t\t(err: StandardError, response: boolean | undefined) => {\n\t\t\t\tif (!!err) {\n\t\t\t\t\t// This is not critical; the listener could not be removed from the store - this may be a memory leak\n\t\t\t\t\tFSBL.Clients.Logger.warn(\n\t\t\t\t\t\t`Could not remove listener from store \"${WINDOW_TAB_TITLE_STORE}\" for field \"${this.props.windowIdentifier.windowName}\"`,\n\t\t\t\t\t\terr\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tFSBL.Clients.Logger.debug(\n\t\t\t\t\t`Removed listener to store \"${WINDOW_TAB_TITLE_STORE}\" for field \"${this.props.windowIdentifier.windowName}\"`\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * React component lifecycle event, triggered once the component has been added to the DOM.\n\t */\n\tcomponentDidMount() {\n\t\t// Set the mounted flag to true (this component is currently mounted)\n\t\tthis._mounted = true;\n\n\t\t// Add listeners\n\t\tthis.#addListeners();\n\t}\n\n\t// Triggers a re-rendering of the drag handle in the title bar.\n\tcomponentDidUpdate() {\n\t\tif (typeof this.props.onUpdate === \"function\") {\n\t\t\tthis.props.onUpdate();\n\t\t}\n\t}\n\n\t/**\n\t * React component lifecycle event, triggered before the component is removed from the DOM.\n\t */\n\tcomponentWillUnmount() {\n\t\t// Set the mounted flag to false (this component is not currently mounted)\n\t\tthis._mounted = false;\n\n\t\t// Remove listeners\n\t\tthis.#removeListeners();\n\t}\n\n\trender() {\n\t\tconst { titleWidth } = this.props;\n\t\tconst style = titleWidth ? { width: titleWidth } : {};\n\t\treturn (\n\t\t\t<EditTab\n\t\t\t\ttabWidth={titleWidth}\n\t\t\t\tsetActiveTab={this?.props?.onClick}\n\t\t\t\ttitle={this.state.title}\n\t\t\t\t// The windowIdentifier indicates which app/component this tab instance should represent\n\t\t\t\twindowIdentifier={this.props.windowIdentifier}\n\t\t\t>\n\t\t\t\t<div className=\"fsbl-tab-title\" style={style}>\n\t\t\t\t\t{this.state.icon && <Icon {...this.state.icon} />}\n\t\t\t\t\t<div className=\"title-text\">{this.state.title}</div>\n\t\t\t\t</div>\n\t\t\t</EditTab>\n\t\t);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"windowTitle.js","sourceRoot":"","sources":["../../../../src/components/windowTitleBar/components/windowTitle.tsx"],"names":[],"mappings":"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","sourcesContent":["import { WindowIdentifier, WindowDescriptor, services } from \"@finsemble/finsemble-api\";\nimport { ListenerFunction } from \"@finsemble/finsemble-api/types/clients/StoreModel\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport React, { Component } from \"react\";\nimport { EditTabProps } from \"../../../types/windowTitleBar\";\nimport { Icon } from \"../../icon/Icon\";\nimport { Store } from \"../stores/windowTitleBarStore\";\n\ntype IconDescriptor = services.window.types.IconDescriptor;\n\n/**\n * TAB TITLES: HOW DO THEY WORK?\n *\n * Each component, when stacked, will have several tab titles. For each component, there is a window. For each window, there are 2 tab titles per component.\n *\n * Whichever component is \"active\" will render all tabs - exactly one \"active\" tab and n-1 \"inactive\" tabs (where n is the number of components in the stack). When\n * the active component is changed (via a click, for example), then the visible window becomes the window associated with the active component.\n *\n * Tab titles may change at any time, and for a number of reasons. For example, the component may execute \"document.title='...some title'\". Or perhaps the tab title has\n * been edited by the user. In order to account for all title changes, the following flow is used:\n * *something* updates document.title\n * The WindowClient for the component will notice the title change and send a router message (via FinsembleWindow.setTitle) with a topic representitive of the windowName\n * BaseWindow listens to router changes on the same topic and updates a DistributedStore dedicated to tab names\n * The tab components all subscribe to the DistributedStore dedicated to tab names and will update the title accordingly\n *\n * This is a \"one-way\" operation; that is to say that some code will ultimately alter the DistributedStore and the tab title components will read the changes. While this generally\n * happens with a write to document.title, it can also happen when a user edits the tab title manually. In this case, the component state is altered with a field \"persistedTitle\"\n * whose value is the edited title. At render time, the tab title component will use any value in \"persistedTitle\" as the title, irregardless of any other value.\n *\n * NOTE: A tab may be edited only when it is the active component; ergo the call to \"setComponentState\" is safe.\n */\n\n/**\n * WINDOW TITLES: HOW DO THEY WORK?\n *\n * Each application window has a title which is displayed in the operating system taskbar and task switcher. This title comes from the\n * value of \"document.title\" in the window title bar component. It is important to understand that when tabs are stacked, the actual window\n * which holds the window title is the title of the window of the active component. It is therefore important to keep the window title and the\n * tab titles up to date and synchronized.\n */\n\ntype TitleProps = {\n\twindowIdentifier: WindowIdentifier;\n\tonUpdate?: Function;\n\ttitleWidth?: number;\n\tonClick?: () => void;\n};\n\ntype TitleState = {\n\ttitle: string | undefined;\n\ticon: any;\n\twindowName?: string;\n};\n\n// The store name for the distributed store which tracks tab titles\nconst WINDOW_TAB_TITLE_STORE = \"window-tab-title\";\n// The field name to watch for tab title edits\nconst FIELD_NAME_PERSISTED_TITLE = \"persistedTitle\";\n\n// The windowTabNameStore reference\nlet windowTabNameStore: any;\n\n/**\n * Gets the store which tracks the tab title for a windowName. This is a distributed store shared by all components.\n *\n * @returns a Promise which resolves the StoreModel associated with window and tab names\n */\nconst getWindowTabNameStore = async () => {\n\tif (!windowTabNameStore) {\n\t\tlet { data: store } = await FSBL.Clients.DistributedStoreClient.createGlobalStore({\n\t\t\tstore: WINDOW_TAB_TITLE_STORE,\n\t\t});\n\t\twindowTabNameStore = store;\n\t}\n\n\t// Return the store\n\treturn windowTabNameStore;\n};\n\n/**\n * The wrapper component for tab renaming\n * @param {*} props\n */\nfunction EditTab(props: EditTabProps) {\n\tconst [editingTitle, setEditingTitle] = React.useState(false);\n\tconst [clickTimeout, setClickTimeout] = React.useState<NodeJS.Timeout | undefined>(undefined);\n\tconst inputEl = React.useRef<HTMLInputElement>(null);\n\n\tconst updateTabTitle = async (e: React.KeyboardEvent<HTMLInputElement> | React.FocusEvent<HTMLInputElement>) => {\n\t\t// When the tab title has changed via a user edit, simply update the DistributedStore\n\n\t\t// Get the title\n\t\tconst title = (e.target as HTMLInputElement).value;\n\n\t\t// Get the tab name store\n\t\tlet store = await getWindowTabNameStore();\n\t\t// If the store is unavailable, then the tab name cannot be persisted\n\t\tif (!store) {\n\t\t\t// This is not critical, but tab titles may be stale\n\t\t\tFSBL.Clients.Logger.warn(\"Error persisting tab title via EditTab: the store was not found\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Persist the tab title\n\t\tstore.setValue({ field: props.windowIdentifier.windowName, value: title });\n\n\t\t// Get the window which coresponds to the tab being edited\n\t\tconst { wrap: win } = await FSBL.FinsembleWindow.getInstance(props.windowIdentifier);\n\n\t\t// Set the component state \"persistedTitle\" (which is the edited title)\n\t\tFSBL.Clients.Logger.debug(`Setting component state \"${FIELD_NAME_PERSISTED_TITLE}\" with value \"${title}\"`);\n\t\tawait win.setComponentState({ field: FIELD_NAME_PERSISTED_TITLE, value: title });\n\n\t\t// Stop editing in all cases\n\t\tsetEditingTitle(false);\n\t};\n\n\tconst beginEditing = async () => {\n\t\tawait setEditingTitle(true);\n\t\tinputEl?.current?.focus();\n\t\tif (inputEl?.current) {\n\t\t\tinputEl.current.value = props.title ?? \"\";\n\t\t}\n\t};\n\n\tconst clickHandler = () => {\n\t\tconst allowWindowTitleRenaming = Store.getValue(\"allowWindowTitleRenaming\");\n\n\t\tif (clickTimeout) {\n\t\t\t// double click\n\t\t\tif (allowWindowTitleRenaming) {\n\t\t\t\tbeginEditing();\n\t\t\t}\n\t\t} else if (!editingTitle) {\n\t\t\t// single click\n\t\t\tlet timeout = setTimeout(() => {\n\t\t\t\tclearTimeout(clickTimeout);\n\t\t\t\tsetClickTimeout(undefined);\n\t\t\t}, 500);\n\t\t\tsetClickTimeout(timeout);\n\t\t\tif (props.setActiveTab) props.setActiveTab();\n\t\t}\n\t};\n\n\tconst blurHandler = (e: React.FocusEvent<HTMLInputElement>) => {\n\t\tupdateTabTitle(e);\n\t};\n\n\tconst keyDownHandler = (e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\te.key === \"Enter\" && updateTabTitle(e);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"fsbl-tab-editor\"\n\t\t\t// We can't use Click and Dblclick events together cause for one dblclick fires two click events which close title editor.\n\t\t\t// Workaround with setTimeout should resolve this behavior.\n\t\t\tonClick={clickHandler}\n\t\t>\n\t\t\t{editingTitle ? (\n\t\t\t\t<div className=\"fsbl-tab fsbl-active-tab\" style={{ width: props.tabWidth || \"auto\" }}>\n\t\t\t\t\t{/* workaround to disable tab dragging in the edit mode */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tdraggable={true}\n\t\t\t\t\t\tonDragStart={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tid=\"title_editor_input\"\n\t\t\t\t\t\t\tref={inputEl}\n\t\t\t\t\t\t\tonBlur={blurHandler}\n\t\t\t\t\t\t\tonKeyDown={keyDownHandler}\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tclassName=\"tab__input\"\n\t\t\t\t\t\t\tmaxLength={32}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\tprops.children\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\n/*\n * Description how stacked window tabs work.\n *\n * The simplest case - when you have only 2 tabs. In that case you will actually have 2 windows and 4 tabs.\n * Lets call them as: window 1 - w1, window 2 - w2, tab 1 from window 1 - w1_t1, tab 2 from window 1 - w1_t2, for tabs from window 2 - w2_t1 and w2_t2.\n * When you switch tabs you activate w1 or w2 with active tab w1_t1 or w2_t2 correspondingly.\n * Tabs w1_t2 and w2_t1 are inactive. They needed only for rendering. I call them as remote tabs, cause their titles must be synchronized with active tabs titles.\n * Thus when you rename active tab (w1_t1), the corresponding remote tab (w2_t1) should be updated automatically.\n */\n\nexport class Title extends Component<TitleProps, TitleState> {\n\t// The listener for tab title change events via the DistributedStoreClient, kept as a reference so\n\t// that the listener can be deregistered when the component is unmounted\n\ttabTitleChangedStoreListener: ListenerFunction = (err: StandardError, response: { field: string; value: string }) => {\n\t\tif (!!err) {\n\t\t\t// This is not critical; in the worst case this tab title will be stale\n\t\t\tFSBL.Clients.Logger.warn(\n\t\t\t\t`Listener error for store \"${WINDOW_TAB_TITLE_STORE}\" for field \"${this.props.windowIdentifier.windowName}\"`,\n\t\t\t\terr\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Log a message\n\t\tFSBL.Clients.Logger.debug(\n\t\t\t`Store \"${WINDOW_TAB_TITLE_STORE}\" notified of new title \"${response.value}\" for window \"${response.field}\"`\n\t\t);\n\n\t\t// Invoke updateTitle\n\t\tif (!!this._mounted) {\n\t\t\tthis.updateTitle();\n\t\t}\n\t};\n\n\t// Flag to determine if this instance is currently mounted; this is necessary because:\n\t// 1.) Title components are mounted and unmounted as an artifact of how the tab or tab list is rendered\n\t// 2.) Keeping tab titles synchronized is an asynchronous process\n\t// 3.) During the asynchronous process of tab title synchronization, a call to setState is made and\n\t// that raises a React warning since the component state cannot be changed while the component\n\t// is unmounted\n\t_mounted = false;\n\n\tconstructor(props: TitleProps) {\n\t\tsuper(props);\n\n\t\t// Declare the initial title as a blank string\n\t\tlet initialTitle = \" \";\n\n\t\t// If the currently rendering tab represents the current window, then use the document title (or window name)\n\t\tif (\n\t\t\tundefined !== finsembleWindow?.thisWindowName &&\n\t\t\tfinsembleWindow?.thisWindowName === props?.windowIdentifier?.windowName\n\t\t) {\n\t\t\tinitialTitle = document.title || props.windowIdentifier?.windowName;\n\t\t}\n\n\t\tthis.state = {\n\t\t\t// Use document.title first to prevent a title flickering when dragging a tab of another window.\n\t\t\t// The reason for flickering is the component re-rendering multiple times. The initial place\n\t\t\t// where re-rendering start is the `disallowDragOnCenterRegion()` at the WindowTitleBarShell.\n\t\t\t// At that function, we change the state of the parent component which triggers re-rendering for the children tree.\n\t\t\ttitle: initialTitle,\n\t\t\ticon: null,\n\t\t\t// The \"windowName\" is the name of the window which corresponds to the this instance of the\n\t\t\t// Title component, though the actual current window may belong to some other\n\t\t\t// component(ie this tab represents an inactive window)\n\t\t\twindowName: props.windowIdentifier?.windowName,\n\t\t};\n\n\t\t// Bind the \"updateTitle\" function (in order to use React component functions)\n\t\tthis.updateTitle = this.updateTitle.bind(this);\n\n\t\t// Initial title set\n\t\tthis.updateTitle();\n\t}\n\n\t/**\n\t * Gets a reference to the \"Window Manager\" component for the tab which is rendering. If the this tab IS the active tab, then the WindowManager will be the same as the WindowManager\n\t * attached to the WindowClient. However, all other tab components displayed in this window will need to derive the WindowManager from the config, based on the\n\t * tab's windowIdentifier.\n\t *\n\t * This is because the tab's windowIdentifier only has the name (ex: SomeApp-37ba6708-3a75-462e-b900-1812e338cbf1). The name is derived by removing the last 5 substrings\n\t * separated by \"-\". This will fail in the face of a UUID format change.\n\t *\n\t * @returns the \"Window Manager\" component, or \"undefined\" if the \"Window Manager\" is not found\n\t */\n\tasync #getWindowManagerForTab() {\n\t\t// On second thought, ALL tabs will derive the WindowManager the same way; at least if it is wrong, it is wrong consistently\n\t\t//\n\t\t// if (finsembleWindow.thisWindowName === this.props?.windowIdentifier?.windowName) {\n\t\t// \treturn FSBL.Clients.WindowClient.options?.customData?.foreign?.components?.[\"Window Manager\"] || FSBL.Clients.WindowClient.options?.customData?.appDConfig?.manifest?.foreign?.components?.[\"Window Manager\"];\n\t\t// } else {\n\n\t\t// Check that \"windowName\" exists\n\t\tif (!!this.props?.windowIdentifier?.windowName) {\n\t\t\t// Get the window name\n\t\t\tconst tabsWindowName = this.props.windowIdentifier.windowName;\n\t\t\t// Get the active descriptors\n\t\t\tconst { data: activeDescriptors } = await FSBL.Clients.LauncherClient.getActiveDescriptors();\n\t\t\t// Return the \"Window Manager\" for the window whose name matches THIS tab's name\n\t\t\treturn activeDescriptors?.[tabsWindowName]?.customData?.appDConfig?.manifest?.foreign?.components?.[\n\t\t\t\t\"Window Manager\"\n\t\t\t];\n\t\t}\n\n\t\treturn undefined;\n\t\t// }\n\t}\n\n\t/**\n\t * Calculates a tab title. Uses the following algorithm until a non-null value is found.\n\t * <ol>\n\t * <li>user edited tab title</li>\n\t * <li>the component config</li>\n\t * <li>document.title</li>\n\t * <li>appd config</li>\n\t * </ol>\n\t *\n\t * @returns the calculated tab title\n\t */\n\tasync #calculateTabTitle() {\n\t\treturn (\n\t\t\t(await this.#getUserEditedTitle()) ||\n\t\t\t(await this.#getConfigTitle()) ||\n\t\t\t(await this.#getDocumentTitle()) ||\n\t\t\tthis.#getAppDTitle()\n\t\t);\n\t}\n\n\t/**\n\t * Returns the name of the title supplied by a user; undefined if the user has not supplied a title.\n\t *\n\t * @returns The name of the title supplied by a user; undefined if the user has not supplied a title\n\t */\n\tasync #getUserEditedTitle() {\n\t\tconst { wrap: tabWindow } = await FSBL.FinsembleWindow.getInstance(this.props.windowIdentifier);\n\t\treturn new Promise((resolve) => {\n\t\t\ttabWindow.getComponentState({ field: FIELD_NAME_PERSISTED_TITLE }, (error: any, persistedTitle: any) => {\n\t\t\t\tif (!!error) {\n\t\t\t\t\t// should always return value even if it hasn't been retrieved from the state\n\t\t\t\t\tresolve(undefined);\n\t\t\t\t} else {\n\t\t\t\t\tresolve(persistedTitle);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Gets a title set in the component configuration.\n\t *\n\t * @returns any title set in the component configuration\n\t */\n\tasync #getConfigTitle() {\n\t\tconst windowManager = await this.#getWindowManagerForTab();\n\t\treturn windowManager?.FSBLHeader?.title || windowManager?.title;\n\t}\n\n\t/**\n\t * Returns document.title.\n\t *\n\t * @returns the document.title (from the \"tab name\" store)\n\t */\n\tasync #getDocumentTitle() {\n\t\tconst store = await getWindowTabNameStore();\n\n\t\t// If the store is unavailable, then the tab name cannot be updated\n\t\tif (!store) {\n\t\t\t// This is not critical, but tab titles may be stale\n\t\t\tFSBL.Clients.Logger.warn(\"Error setting the tab title: the store was not found\");\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.props?.windowIdentifier?.windowName\n\t\t\t? (await store.getGlobalValue(this.props.windowIdentifier.windowName)).data\n\t\t\t: undefined;\n\t}\n\n\t/**\n\t * Gets the AppD configuration\n\t *\n\t * @returns The AppD name\n\t */\n\t#getAppDTitle() {\n\t\treturn (\n\t\t\tFSBL.Clients.WindowClient.options?.customData?.appDConfig?.manifest?.component?.displayName ||\n\t\t\tFSBL.Clients.WindowClient.options?.customData?.appDConfig?.name\n\t\t);\n\t}\n\n\t/**\n\t * Updates the title for both the tab and the window.\n\t *\n\t * @returns a Promise which resolves nothing\n\t */\n\tasync updateTitle() {\n\t\t// There is a subtle difference bewtween windowTitle and tabTitle. Since this code executes\n\t\t// when *any* tab has a name change, this code can execute when the active window represents\n\t\t// a tab other than the currently rendering tab (ie an inactive tab).\n\n\t\t// The window represented by this tab title instance\n\t\tconst { wrap: tabWindow } = await FSBL.FinsembleWindow.getInstance(this.props.windowIdentifier);\n\n\t\t// \"tabWindowOptions\" refers to the options from the window which hosts the component represented by this tab\n\t\tconst { data: tabWindowOptions } = await tabWindow.getOptions();\n\n\t\t// Derive the title: \"config title\" then \"document.title\" then \"appd title\"\n\t\tlet title = await this.#calculateTabTitle();\n\n\t\t// Get the titleBar icon from the WindowDescriptor for the TAB window (not the CURRENT window)\n\t\tconst icon: IconDescriptor = (tabWindowOptions as WindowDescriptor)?.icons?.titleBarIcon ?? {\n\t\t\timageType: \"initials\",\n\t\t\tname: title,\n\t\t};\n\n\t\t// Log a message\n\t\tFSBL.Clients.Logger.debug(`Setting tab title ${title} for window ${this.props.windowIdentifier.windowName}`);\n\n\t\t// Finally, set the state if the component is mounted\n\t\tif (!!this._mounted) {\n\t\t\tthis.setState({\n\t\t\t\ttitle,\n\t\t\t\ticon: {\n\t\t\t\t\t...icon,\n\t\t\t\t\t// Application causes the background to default to a circle rather than a square\n\t\t\t\t\tcategory: \"Application\",\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\t// If this tab component instance represents the window (that is, this is the active tab), then set the title\n\t\tif (finsembleWindow.thisWindowName === this.props.windowIdentifier.windowName) {\n\t\t\tdocument.title = await this.#calculateTabTitle();\n\t\t}\n\t}\n\n\t/**\n\t * Adds the listener(s) required to set window and tab titles.\n\t */\n\tasync #addListeners() {\n\t\t// Subscribe to the DistributedStoreClient (these messages originate from BaseWindow, when the\n\t\t// DistributedStore has been updated).\n\t\t//\n\t\t// Each window will have n listeners, where n is the number of tabs held in the window.\n\n\t\t// Get the store and add a listener\n\t\tconst store = await getWindowTabNameStore();\n\n\t\t// If the store is unavailable, then the tab name cannot be updated\n\t\tif (!store) {\n\t\t\t// This is not critical, but tab titles may be stale\n\t\t\tFSBL.Clients.Logger.warn(\"Error adding a tab title listener: the store was not found\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Add a listener\n\t\tstore.addListener({ field: this.props.windowIdentifier.windowName }, this.tabTitleChangedStoreListener, () => {\n\t\t\tFSBL.Clients.Logger.debug(\n\t\t\t\t`Added listener to store \"${WINDOW_TAB_TITLE_STORE}\" for field \"${this.props.windowIdentifier.windowName}\"`\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * Removes listener(s) required to set window and tab titles.\n\t */\n\tasync #removeListeners() {\n\t\t// Unsubscribe from the window/tab store\n\t\tconst store = await getWindowTabNameStore();\n\t\t// If the store is unavailable, then the tab name cannot be updated\n\t\tif (!store) {\n\t\t\t// This is not critical, but tab titles may be stale\n\t\t\tFSBL.Clients.Logger.warn(\"Error removing a tab title listener: the store was not found\");\n\t\t\treturn;\n\t\t}\n\t\tstore.removeListener(\n\t\t\t{ field: this.props.windowIdentifier.windowName },\n\t\t\tthis.tabTitleChangedStoreListener,\n\t\t\t(err: StandardError, response: boolean | undefined) => {\n\t\t\t\tif (!!err) {\n\t\t\t\t\t// This is not critical; the listener could not be removed from the store - this may be a memory leak\n\t\t\t\t\tFSBL.Clients.Logger.warn(\n\t\t\t\t\t\t`Could not remove listener from store \"${WINDOW_TAB_TITLE_STORE}\" for field \"${this.props.windowIdentifier.windowName}\"`,\n\t\t\t\t\t\terr\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tFSBL.Clients.Logger.debug(\n\t\t\t\t\t`Removed listener to store \"${WINDOW_TAB_TITLE_STORE}\" for field \"${this.props.windowIdentifier.windowName}\"`\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * React component lifecycle event, triggered once the component has been added to the DOM.\n\t */\n\tcomponentDidMount() {\n\t\t// Set the mounted flag to true (this component is currently mounted)\n\t\tthis._mounted = true;\n\n\t\t// Add listeners\n\t\tthis.#addListeners();\n\t}\n\n\t// Triggers a re-rendering of the drag handle in the title bar.\n\tcomponentDidUpdate() {\n\t\tif (typeof this.props.onUpdate === \"function\") {\n\t\t\tthis.props.onUpdate();\n\t\t}\n\t}\n\n\t/**\n\t * React component lifecycle event, triggered before the component is removed from the DOM.\n\t */\n\tcomponentWillUnmount() {\n\t\t// Set the mounted flag to false (this component is not currently mounted)\n\t\tthis._mounted = false;\n\n\t\t// Remove listeners\n\t\tthis.#removeListeners();\n\t}\n\n\trender() {\n\t\tconst { titleWidth } = this.props;\n\t\tconst style = titleWidth ? { width: titleWidth } : {};\n\t\treturn (\n\t\t\t<EditTab\n\t\t\t\ttabWidth={titleWidth}\n\t\t\t\tsetActiveTab={this?.props?.onClick}\n\t\t\t\ttitle={this.state.title}\n\t\t\t\t// The windowIdentifier indicates which app/component this tab instance should represent\n\t\t\t\twindowIdentifier={this.props.windowIdentifier}\n\t\t\t>\n\t\t\t\t<div className=\"fsbl-tab-title\" style={style}>\n\t\t\t\t\t{this.state.icon && <Icon {...this.state.icon} />}\n\t\t\t\t\t<div className=\"title-text\">{this.state.title}</div>\n\t\t\t\t</div>\n\t\t\t</EditTab>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -43,6 +43,11 @@ declare type ActionsType = {
|
|
|
43
43
|
createParentWrapper: (params: ParentParams, cb?: Function) => void;
|
|
44
44
|
};
|
|
45
45
|
declare const Actions: ActionsType;
|
|
46
|
+
/**
|
|
47
|
+
* Initializes the store for the windowTitleBar.
|
|
48
|
+
*
|
|
49
|
+
* @param {any} cb
|
|
50
|
+
*/
|
|
46
51
|
declare function initialize(cb: Function): void;
|
|
47
52
|
declare let getStore: () => StoreModel;
|
|
48
53
|
declare class StoreManager {
|