@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
package/react/hooks/useMenu.js
CHANGED
|
@@ -2,6 +2,14 @@ import { useDispatch, useSelector } from "../store";
|
|
|
2
2
|
import { MenuActions } from "../actions/menuActions";
|
|
3
3
|
import { useCallback, useContext } from "react";
|
|
4
4
|
import { MenuContext } from "../components/menu/menuContext";
|
|
5
|
+
/**
|
|
6
|
+
* A hook for working with menus. It gets its implicit menu "id" from React context.
|
|
7
|
+
* It dispatches actions to the reducer to modify menu state across MenuShell instances.
|
|
8
|
+
*
|
|
9
|
+
* See menuReducer.ts for "toggle/blur" race condition algorithm
|
|
10
|
+
*
|
|
11
|
+
* Setting window.FSBL.debug=true will override menu close on blur, to make it easier to debug windows
|
|
12
|
+
*/
|
|
5
13
|
export const useMenu = () => {
|
|
6
14
|
const DURATION = 120;
|
|
7
15
|
const dispatch = useDispatch();
|
|
@@ -11,6 +19,7 @@ export const useMenu = () => {
|
|
|
11
19
|
dispatch(MenuActions.TOGGLE_MENU(thisMenuId));
|
|
12
20
|
}, [dispatch, thisMenuId]);
|
|
13
21
|
const openMenu = useCallback(() => {
|
|
22
|
+
// without this call, the toolbar will stay hidden behind other content, and the menus will not be visible
|
|
14
23
|
FSBL.Clients.WindowClient.bringToFront();
|
|
15
24
|
dispatch(MenuActions.OPEN_MENU(thisMenuId));
|
|
16
25
|
}, [dispatch, thisMenuId]);
|
|
@@ -19,11 +28,13 @@ export const useMenu = () => {
|
|
|
19
28
|
}, [dispatch, thisMenuId]);
|
|
20
29
|
const blurMenu = useCallback(() => {
|
|
21
30
|
if (FSBL === null || FSBL === void 0 ? void 0 : FSBL.debug)
|
|
22
|
-
return;
|
|
31
|
+
return; // If we're debugging then don't blur menus
|
|
32
|
+
// This is a purposeful closure. There is no need to update it with new state.
|
|
23
33
|
const closeIfPending = () => {
|
|
24
34
|
dispatch(MenuActions.CLOSE_MENU_IF_PENDING(thisMenuId));
|
|
25
35
|
};
|
|
26
36
|
dispatch(MenuActions.BLUR_MENU(thisMenuId));
|
|
37
|
+
// See menuReducer.ts for how this timeout is used. Removing the timeout will cause a race condition.
|
|
27
38
|
setTimeout(closeIfPending, DURATION);
|
|
28
39
|
}, [dispatch, thisMenuId]);
|
|
29
40
|
const isMenuActive = () => openMenuId === thisMenuId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenu.js","sourceRoot":"","sources":["../../src/hooks/useMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"useMenu.js","sourceRoot":"","sources":["../../src/hooks/useMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAgC7D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAa,EAAE;IACrC,MAAM,QAAQ,GAAW,GAAG,CAAC;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAE/C,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE3B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,0GAA0G;QAC1G,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACzC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE3B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE3B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QACjC,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK;YAAE,OAAO,CAAC,2CAA2C;QAEpE,8EAA8E;QAC9E,MAAM,cAAc,GAAG,GAAG,EAAE;YAC3B,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;QAEF,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAE5C,qGAAqG;QACrG,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE3B,MAAM,YAAY,GAAG,GAAY,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC;IAE9D,OAAO;QACN,UAAU;QACV,UAAU;QACV,SAAS;QACT,QAAQ;QACR,QAAQ;QACR,YAAY;KACZ,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { useDispatch, useSelector } from \"../store\";\nimport { MenuActions } from \"../actions/menuActions\";\nimport { useCallback, useContext } from \"react\";\nimport { MenuContext } from \"../components/menu/menuContext\";\n\ntype MenuHook = {\n\t/**\n\t * The Id of the menu that is currently open\n\t *\n\t * @type {string | null}\n\t */\n\topenMenuId: string | null;\n\t/**\n\t * Dispatches a TOGGLE_MENU action, which should cause the menu to close if it is open, or to open if it is closed.\n\t */\n\ttoggleMenu: () => void;\n\t/**\n\t * Dispatches a CLOSE_MENU action, which should cause the menu to close if it is open.\n\t */\n\tcloseMenu: () => void;\n\t/**\n\t * Dispatches a CLOSE_MENU action after a timeout (DURATION in ms). See description in useMenu comments.\n\t */\n\tblurMenu: () => void;\n\t/**\n\t * Dispatches a OPEN_MENU action, which should cause the menu to open if it is closed.\n\t */\n\topenMenu: () => void;\n\t/**\n\t * Returns true if the id of the menu matches the currently active menu\n\t * @return boolean - Returns true if the menu is active\n\t */\n\tisMenuActive: () => boolean;\n};\n\n/**\n * A hook for working with menus. It gets its implicit menu \"id\" from React context.\n * It dispatches actions to the reducer to modify menu state across MenuShell instances.\n *\n * See menuReducer.ts for \"toggle/blur\" race condition algorithm\n *\n * Setting window.FSBL.debug=true will override menu close on blur, to make it easier to debug windows\n */\nexport const useMenu = (): MenuHook => {\n\tconst DURATION: number = 120;\n\tconst dispatch = useDispatch();\n\tconst { openMenuId } = useSelector((state) => state.menu);\n\tconst { thisMenuId } = useContext(MenuContext);\n\n\tconst toggleMenu = useCallback(() => {\n\t\tdispatch(MenuActions.TOGGLE_MENU(thisMenuId));\n\t}, [dispatch, thisMenuId]);\n\n\tconst openMenu = useCallback(() => {\n\t\t// without this call, the toolbar will stay hidden behind other content, and the menus will not be visible\n\t\tFSBL.Clients.WindowClient.bringToFront();\n\t\tdispatch(MenuActions.OPEN_MENU(thisMenuId));\n\t}, [dispatch, thisMenuId]);\n\n\tconst closeMenu = useCallback(() => {\n\t\tdispatch(MenuActions.CLOSE_MENU(thisMenuId));\n\t}, [dispatch, thisMenuId]);\n\n\tconst blurMenu = useCallback(() => {\n\t\tif (FSBL?.debug) return; // If we're debugging then don't blur menus\n\n\t\t// This is a purposeful closure. There is no need to update it with new state.\n\t\tconst closeIfPending = () => {\n\t\t\tdispatch(MenuActions.CLOSE_MENU_IF_PENDING(thisMenuId));\n\t\t};\n\n\t\tdispatch(MenuActions.BLUR_MENU(thisMenuId));\n\n\t\t// See menuReducer.ts for how this timeout is used. Removing the timeout will cause a race condition.\n\t\tsetTimeout(closeIfPending, DURATION);\n\t}, [dispatch, thisMenuId]);\n\n\tconst isMenuActive = (): boolean => openMenuId === thisMenuId;\n\n\treturn {\n\t\topenMenuId,\n\t\ttoggleMenu,\n\t\tcloseMenu,\n\t\topenMenu,\n\t\tblurMenu,\n\t\tisMenuActive,\n\t};\n};\n"]}
|
|
@@ -6,19 +6,63 @@ declare type IMuteFilter = services.notification.types.IMuteFilter;
|
|
|
6
6
|
declare type INotification = services.notification.types.INotification;
|
|
7
7
|
declare type INotificationHistoryOptions = services.notification.types.INotificationHistoryOptions;
|
|
8
8
|
declare type NotificationUIStatePublish = (state: NotificationServiceState) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Thin wrapper around usePubSub to give us typesafety for the notification service's UI state.
|
|
11
|
+
* Automatically appends this client's windowName which is used by the notification service to
|
|
12
|
+
* display the notification center on an appropriate monitor.
|
|
13
|
+
*/
|
|
9
14
|
export declare const useNotificationUI: () => [state: services.notification.types.NotificationServiceState, setState: NotificationUIStatePublish];
|
|
10
15
|
export declare const moveToToolbarMonitor: () => Promise<void>;
|
|
11
16
|
export declare const getOS: () => "Windows" | "Linux" | "Mac" | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Example for setting up button clicks
|
|
19
|
+
*
|
|
20
|
+
* @param notification
|
|
21
|
+
* @param action
|
|
22
|
+
*/
|
|
12
23
|
export declare const doAction: (notification: INotification, action: any) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Example for setting up button clicks
|
|
26
|
+
*
|
|
27
|
+
* @param filter
|
|
28
|
+
*/
|
|
13
29
|
export declare const mute: (filter: IMuteFilter) => Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Example for setting up button clicks
|
|
32
|
+
*
|
|
33
|
+
* @param filter
|
|
34
|
+
*/
|
|
14
35
|
export declare const unmute: (filter: IMuteFilter) => Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Snooze a notification
|
|
38
|
+
*
|
|
39
|
+
* @param {INotification[]} notifications
|
|
40
|
+
*/
|
|
15
41
|
export declare const snoozeNotifications: (notifications: INotification[]) => Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Marks a notification as read
|
|
44
|
+
*
|
|
45
|
+
* @param {INotification[]} notifications
|
|
46
|
+
*/
|
|
16
47
|
export declare const markNotificationsUnread: (notifications: INotification[]) => void;
|
|
48
|
+
/**
|
|
49
|
+
* Marks a notification as read
|
|
50
|
+
*
|
|
51
|
+
* @param {INotification[]} notifications
|
|
52
|
+
*/
|
|
17
53
|
export declare const markNotificationsRead: (notifications: INotification[]) => void;
|
|
54
|
+
/**
|
|
55
|
+
* Dismisses a notification
|
|
56
|
+
*
|
|
57
|
+
* @param {INotification[]} notifications
|
|
58
|
+
*/
|
|
18
59
|
export declare const dismissNotification: (notifications: INotification[]) => void;
|
|
19
60
|
export declare const initializeCenterToggle: () => {
|
|
20
61
|
toggleCenter: () => void;
|
|
21
62
|
};
|
|
63
|
+
/**
|
|
64
|
+
* Get Notification's config from
|
|
65
|
+
*/
|
|
22
66
|
export declare const getNotificationConfig: () => NotificationsConfig;
|
|
23
67
|
export declare const getFetchHistoryParams: (config: any, params: any) => any[];
|
|
24
68
|
export default function useNotifications(params?: any): {
|
|
@@ -3,9 +3,15 @@ import { usePubSub } from "./usePubSub";
|
|
|
3
3
|
import { NOTIFICATIONS_PUBSUB_TOPIC } from "../components/notifications/constants";
|
|
4
4
|
const { WindowClient, NotificationClient } = FSBL.Clients;
|
|
5
5
|
const initialState = { notifications: [] };
|
|
6
|
+
/*
|
|
7
|
+
Action Types
|
|
8
|
+
*/
|
|
6
9
|
const CREATE_MULTIPLE = "CREATE_MULTIPLE";
|
|
7
10
|
const UPDATE = "UPDATE";
|
|
8
11
|
const REMOVE = "REMOVE";
|
|
12
|
+
/*
|
|
13
|
+
Reducer
|
|
14
|
+
*/
|
|
9
15
|
function reducer(state, action) {
|
|
10
16
|
switch (action.type) {
|
|
11
17
|
case CREATE_MULTIPLE:
|
|
@@ -13,7 +19,9 @@ function reducer(state, action) {
|
|
|
13
19
|
notifications: [...state.notifications, ...action.payload],
|
|
14
20
|
};
|
|
15
21
|
case UPDATE: {
|
|
22
|
+
// check to see if the notification exists if so update the values
|
|
16
23
|
const notificationExistsInArray = state.notifications.find((notification) => notification.id === action.payload.id);
|
|
24
|
+
//if the notification exists then do nothing and return the current state else add the the new notification to the state
|
|
17
25
|
const notifications = notificationExistsInArray
|
|
18
26
|
? state.notifications.map((notification) => notification.id === action.payload.id ? action.payload : notification)
|
|
19
27
|
: [action.payload, ...state.notifications];
|
|
@@ -27,6 +35,11 @@ function reducer(state, action) {
|
|
|
27
35
|
throw new Error();
|
|
28
36
|
}
|
|
29
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Thin wrapper around usePubSub to give us typesafety for the notification service's UI state.
|
|
40
|
+
* Automatically appends this client's windowName which is used by the notification service to
|
|
41
|
+
* display the notification center on an appropriate monitor.
|
|
42
|
+
*/
|
|
30
43
|
export const useNotificationUI = () => {
|
|
31
44
|
const [state, setState] = usePubSub(NOTIFICATIONS_PUBSUB_TOPIC);
|
|
32
45
|
const setStateAndAddWindowName = (newState) => {
|
|
@@ -97,34 +110,61 @@ export const getOS = () => {
|
|
|
97
110
|
return "Mac";
|
|
98
111
|
}
|
|
99
112
|
};
|
|
113
|
+
/**
|
|
114
|
+
* Example for setting up button clicks
|
|
115
|
+
*
|
|
116
|
+
* @param notification
|
|
117
|
+
* @param action
|
|
118
|
+
*/
|
|
100
119
|
export const doAction = (notification, action) => {
|
|
101
120
|
try {
|
|
102
121
|
NotificationClient.performAction([notification], action).then(() => {
|
|
122
|
+
// NOTE: The request to perform the action has be sent to the notifications service successfully
|
|
123
|
+
// The action itself has not necessarily been perform successfully
|
|
124
|
+
// 1) alert user notification has been sent (action may not have completed)
|
|
103
125
|
});
|
|
104
126
|
}
|
|
105
127
|
catch (e) {
|
|
128
|
+
// NOTE: The request to perform the action has failed
|
|
106
129
|
console.error("could not create a notification client", e);
|
|
107
130
|
FSBL.Clients.Logger.system.error("could not create a notification client", e);
|
|
108
131
|
}
|
|
109
132
|
};
|
|
133
|
+
/**
|
|
134
|
+
* Example for setting up button clicks
|
|
135
|
+
*
|
|
136
|
+
* @param filter
|
|
137
|
+
*/
|
|
110
138
|
export const mute = async (filter) => {
|
|
111
139
|
try {
|
|
112
140
|
await NotificationClient.mute(filter);
|
|
113
141
|
}
|
|
114
142
|
catch (e) {
|
|
143
|
+
// NOTE: The request to perform the action has failed
|
|
115
144
|
console.error("Could not save mute preferences", e);
|
|
116
145
|
FSBL.Clients.Logger.system.error("Could not save mute preferences", e);
|
|
117
146
|
}
|
|
118
147
|
};
|
|
148
|
+
/**
|
|
149
|
+
* Example for setting up button clicks
|
|
150
|
+
*
|
|
151
|
+
* @param filter
|
|
152
|
+
*/
|
|
119
153
|
export const unmute = async (filter) => {
|
|
120
154
|
try {
|
|
121
155
|
await NotificationClient.unmute(filter);
|
|
122
156
|
}
|
|
123
157
|
catch (e) {
|
|
158
|
+
// NOTE: The request to perform the action has failed
|
|
124
159
|
console.error("Could not save mute preferences", e);
|
|
125
160
|
FSBL.Clients.Logger.system.error("Could not save mute preferences", e);
|
|
126
161
|
}
|
|
127
162
|
};
|
|
163
|
+
/**
|
|
164
|
+
* Snooze a notification
|
|
165
|
+
*
|
|
166
|
+
* @param {INotification[]} notifications
|
|
167
|
+
*/
|
|
128
168
|
export const snoozeNotifications = async (notifications) => {
|
|
129
169
|
const preferences = await FSBL.Clients.NotificationClient.getPreferences();
|
|
130
170
|
const snoozeAction = new FSBL.Clients.NotificationClient.Action();
|
|
@@ -137,9 +177,16 @@ export const snoozeNotifications = async (notifications) => {
|
|
|
137
177
|
doAction(notifications[i], snoozeAction);
|
|
138
178
|
}
|
|
139
179
|
};
|
|
180
|
+
/**
|
|
181
|
+
* Marks a notification as read
|
|
182
|
+
*
|
|
183
|
+
* @param {INotification[]} notifications
|
|
184
|
+
*/
|
|
140
185
|
export const markNotificationsUnread = (notifications) => {
|
|
141
186
|
try {
|
|
142
187
|
NotificationClient.markUnread(notifications).then(() => {
|
|
188
|
+
// NOTE: The request to perform the action has be sent to the notifications service successfully
|
|
189
|
+
// The action itself has not necessarily been perform successfully
|
|
143
190
|
});
|
|
144
191
|
}
|
|
145
192
|
catch (e) {
|
|
@@ -147,9 +194,16 @@ export const markNotificationsUnread = (notifications) => {
|
|
|
147
194
|
FSBL.Clients.Logger.system.error("Could not mark notification as unread", e);
|
|
148
195
|
}
|
|
149
196
|
};
|
|
197
|
+
/**
|
|
198
|
+
* Marks a notification as read
|
|
199
|
+
*
|
|
200
|
+
* @param {INotification[]} notifications
|
|
201
|
+
*/
|
|
150
202
|
export const markNotificationsRead = (notifications) => {
|
|
151
203
|
try {
|
|
152
204
|
NotificationClient.markRead(notifications).then(() => {
|
|
205
|
+
// NOTE: The request to perform the action has be sent to the notifications service successfully
|
|
206
|
+
// The action itself has not necessarily been perform successfully
|
|
153
207
|
});
|
|
154
208
|
}
|
|
155
209
|
catch (e) {
|
|
@@ -157,9 +211,16 @@ export const markNotificationsRead = (notifications) => {
|
|
|
157
211
|
FSBL.Clients.Logger.system.error("Could not mark notification as read", e);
|
|
158
212
|
}
|
|
159
213
|
};
|
|
214
|
+
/**
|
|
215
|
+
* Dismisses a notification
|
|
216
|
+
*
|
|
217
|
+
* @param {INotification[]} notifications
|
|
218
|
+
*/
|
|
160
219
|
export const dismissNotification = (notifications) => {
|
|
161
220
|
try {
|
|
162
221
|
NotificationClient.deleteNotifications(notifications).then(() => {
|
|
222
|
+
// NOTE: The request to perform the action has be sent to the notifications service successfully
|
|
223
|
+
// The action itself has not necessarily been perform successfully
|
|
163
224
|
});
|
|
164
225
|
}
|
|
165
226
|
catch (e) {
|
|
@@ -176,6 +237,9 @@ export const initializeCenterToggle = () => {
|
|
|
176
237
|
toggleCenter,
|
|
177
238
|
};
|
|
178
239
|
};
|
|
240
|
+
/**
|
|
241
|
+
* Get Notification's config from
|
|
242
|
+
*/
|
|
179
243
|
export const getNotificationConfig = () => {
|
|
180
244
|
var _a, _b, _c, _d;
|
|
181
245
|
const config = WindowClient.options.customData;
|
|
@@ -186,10 +250,13 @@ export const getNotificationConfig = () => {
|
|
|
186
250
|
export const getFetchHistoryParams = (config, params) => {
|
|
187
251
|
var _a, _b;
|
|
188
252
|
const notificationsHistory = (config === null || config === void 0 ? void 0 : config.notificationsHistory) || ((_a = params === null || params === void 0 ? void 0 : params.config) === null || _a === void 0 ? void 0 : _a.notificationsHistory);
|
|
253
|
+
// Backwards compatibility - `since` replaced with `options` object
|
|
189
254
|
let options = notificationsHistory.since ? notificationsHistory.since : null;
|
|
255
|
+
// Use options object if it's been set in the component config
|
|
190
256
|
if (!options) {
|
|
191
257
|
options = notificationsHistory === null || notificationsHistory === void 0 ? void 0 : notificationsHistory.options;
|
|
192
258
|
}
|
|
259
|
+
// If no options object set and notificationsHistory is true set in config, use the params
|
|
193
260
|
if (!options && typeof notificationsHistory === "boolean" && notificationsHistory) {
|
|
194
261
|
options = (_b = params === null || params === void 0 ? void 0 : params.config) === null || _b === void 0 ? void 0 : _b.notificationsHistory.options;
|
|
195
262
|
}
|
|
@@ -198,6 +265,9 @@ export const getFetchHistoryParams = (config, params) => {
|
|
|
198
265
|
};
|
|
199
266
|
export default function useNotifications(params = {}) {
|
|
200
267
|
const [state, dispatch] = useReducer(reducer, initialState);
|
|
268
|
+
/*
|
|
269
|
+
Action Creators
|
|
270
|
+
*/
|
|
201
271
|
const removeNotification = (notification) => {
|
|
202
272
|
dispatch({ type: REMOVE, payload: notification });
|
|
203
273
|
};
|
|
@@ -207,6 +277,10 @@ export default function useNotifications(params = {}) {
|
|
|
207
277
|
const addMultipleNotifications = (notifications) => {
|
|
208
278
|
dispatch({ type: CREATE_MULTIPLE, payload: notifications });
|
|
209
279
|
};
|
|
280
|
+
/**
|
|
281
|
+
* Group Notifications by Type
|
|
282
|
+
* @param notifications
|
|
283
|
+
*/
|
|
210
284
|
const groupNotificationsByType = (notifications) => {
|
|
211
285
|
const groupBy = (arr) => arr
|
|
212
286
|
.map((notification) => { var _a; return (_a = notification.type) !== null && _a !== void 0 ? _a : "unknown"; })
|
|
@@ -216,6 +290,12 @@ export default function useNotifications(params = {}) {
|
|
|
216
290
|
}, {});
|
|
217
291
|
return groupBy(notifications);
|
|
218
292
|
};
|
|
293
|
+
/**
|
|
294
|
+
* * get the past notifications
|
|
295
|
+
* WARNING - The default will get all notifications all the way back from 1969!!!
|
|
296
|
+
* @param since
|
|
297
|
+
* @param filter
|
|
298
|
+
*/
|
|
219
299
|
const getNotificationHistory = (since = { sentAfter: "1969-12-31T23:59:59.999Z" }, filter = null) => NotificationClient.fetchHistory(since, filter);
|
|
220
300
|
const notificationIsActive = (notification, applyMuteFilterOverride) => {
|
|
221
301
|
let applyMuteFilters = applyMuteFilterOverride;
|
|
@@ -229,12 +309,16 @@ export default function useNotifications(params = {}) {
|
|
|
229
309
|
(applyMuteFilters ? !notification.isMuted : true));
|
|
230
310
|
};
|
|
231
311
|
const activeNotifications = (notifications, applyMuteFilterOverride) => notifications.filter((notification) => notificationIsActive(notification, applyMuteFilterOverride));
|
|
312
|
+
/**
|
|
313
|
+
* Main init function to start the subscription
|
|
314
|
+
*/
|
|
232
315
|
async function init() {
|
|
233
316
|
var _a, _b, _c, _d, _e;
|
|
234
317
|
try {
|
|
235
318
|
const subscription = new NotificationClient.Subscription();
|
|
236
319
|
const notificationConfig = getNotificationConfig();
|
|
237
320
|
const filter = new NotificationClient.Filter();
|
|
321
|
+
// make filters from the config
|
|
238
322
|
if (notificationConfig) {
|
|
239
323
|
((_a = notificationConfig.filter) === null || _a === void 0 ? void 0 : _a.include) && ((_b = filter.include) === null || _b === void 0 ? void 0 : _b.push(...notificationConfig.filter.include));
|
|
240
324
|
((_c = notificationConfig.filter) === null || _c === void 0 ? void 0 : _c.exclude) && ((_d = filter.exclude) === null || _d === void 0 ? void 0 : _d.push(...notificationConfig.filter.exclude));
|
|
@@ -247,6 +331,7 @@ export default function useNotifications(params = {}) {
|
|
|
247
331
|
addMultipleNotifications(pastNotifications);
|
|
248
332
|
}
|
|
249
333
|
const onNotification = function (notification) {
|
|
334
|
+
// This function will be called when a notification arrives
|
|
250
335
|
if (notification.isDeleted) {
|
|
251
336
|
removeNotification(notification);
|
|
252
337
|
}
|
|
@@ -260,6 +345,9 @@ export default function useNotifications(params = {}) {
|
|
|
260
345
|
console.error(error);
|
|
261
346
|
}
|
|
262
347
|
}
|
|
348
|
+
/**
|
|
349
|
+
* Set opaque class to html element
|
|
350
|
+
*/
|
|
263
351
|
function setOpaqueClassName(isOpaque) {
|
|
264
352
|
if (isOpaque) {
|
|
265
353
|
const htmlElement = document.getElementsByTagName("html")[0];
|
|
@@ -268,9 +356,11 @@ export default function useNotifications(params = {}) {
|
|
|
268
356
|
}
|
|
269
357
|
}
|
|
270
358
|
}
|
|
359
|
+
// start receiving Notifications and putting them in state
|
|
271
360
|
useEffect(() => {
|
|
272
361
|
const subscribe = init();
|
|
273
362
|
return () => {
|
|
363
|
+
// Unsubscribe using the subscription ID
|
|
274
364
|
(async () => {
|
|
275
365
|
const subscribeObject = (await subscribe);
|
|
276
366
|
if (subscribeObject) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNotifications.js","sourceRoot":"","sources":["../../src/hooks/useNotifications.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useReducer } from \"react\";\nimport { WindowConfig, NotificationsConfig } from \"../components/notifications/types\";\nimport { usePubSub } from \"./usePubSub\";\nimport { NOTIFICATIONS_PUBSUB_TOPIC } from \"../components/notifications/constants\";\nimport { services } from \"@finsemble/finsemble-api\";\ntype NotificationServiceState = services.notification.types.NotificationServiceState;\n\ntype IFilter = services.notification.types.IFilter;\ntype IMuteFilter = services.notification.types.IMuteFilter;\ntype INotification = services.notification.types.INotification;\ntype INotificationHistoryOptions = services.notification.types.INotificationHistoryOptions;\n\nconst { WindowClient, NotificationClient } = FSBL.Clients;\n\nconst initialState: any = { notifications: [] };\n\n/*\nAction Types\n*/\nconst CREATE_MULTIPLE = \"CREATE_MULTIPLE\";\nconst UPDATE = \"UPDATE\";\nconst REMOVE = \"REMOVE\";\n\n/*\n\tReducer\n\t*/\nfunction reducer(state: { notifications: INotification[] }, action: { type: string; payload: any }) {\n\tswitch (action.type) {\n\t\tcase CREATE_MULTIPLE:\n\t\t\treturn {\n\t\t\t\tnotifications: [...state.notifications, ...action.payload],\n\t\t\t};\n\t\tcase UPDATE: {\n\t\t\t// check to see if the notification exists if so update the values\n\t\t\tconst notificationExistsInArray = state.notifications.find(\n\t\t\t\t(notification: INotification) => notification.id === action.payload.id\n\t\t\t);\n\n\t\t\t//if the notification exists then do nothing and return the current state else add the the new notification to the state\n\t\t\tconst notifications = notificationExistsInArray\n\t\t\t\t? state.notifications.map((notification: INotification) =>\n\t\t\t\t\t\tnotification.id === action.payload.id ? action.payload : notification\n\t\t\t\t )\n\t\t\t\t: [action.payload, ...state.notifications];\n\n\t\t\treturn { notifications };\n\t\t}\n\t\tcase REMOVE:\n\t\t\treturn {\n\t\t\t\tnotifications: state.notifications.filter((notification) => notification.id !== action.payload.id),\n\t\t\t};\n\t\tdefault:\n\t\t\tthrow new Error();\n\t}\n}\n\ntype NotificationUIStatePublish = (state: NotificationServiceState) => void;\n\n/**\n * Thin wrapper around usePubSub to give us typesafety for the notification service's UI state.\n * Automatically appends this client's windowName which is used by the notification service to\n * display the notification center on an appropriate monitor.\n */\nexport const useNotificationUI = (): [state: NotificationServiceState, setState: NotificationUIStatePublish] => {\n\tconst [state, setState] = usePubSub(NOTIFICATIONS_PUBSUB_TOPIC);\n\n\tconst setStateAndAddWindowName = (newState: NotificationServiceState) => {\n\t\tsetState({\n\t\t\t...newState,\n\t\t\tmostRecentWindowName: finsembleWindow.name,\n\t\t});\n\t};\n\treturn [state as NotificationServiceState, setStateAndAddWindowName];\n};\n\nconst getActiveDescriptorsByType = (componentType: string): Promise<any[]> =>\n\tnew Promise(async (resolve, reject) => {\n\t\tFSBL.Clients.LauncherClient.getActiveDescriptors((err: any, data: any) => {\n\t\t\tconst activeDescriptors: any[] = [];\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tfor (const key in data) {\n\t\t\t\t\tif (data.hasOwnProperty(key) && data[key]?.componentType === componentType) {\n\t\t\t\t\t\tactiveDescriptors.push(data[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve(activeDescriptors);\n\t\t});\n\t});\n\nlet toolbarWindowName: string;\n\nexport const moveToToolbarMonitor = async () => {\n\tconst getToolbarMonitorData = async () =>\n\t\tnew Promise(async (resolve, reject) => {\n\t\t\tif (!toolbarWindowName) {\n\t\t\t\tconst activeDescriptors = await getActiveDescriptorsByType(\"Toolbar\");\n\t\t\t\ttoolbarWindowName = activeDescriptors[0]?.name;\n\t\t\t}\n\t\t\tconst { err, data } = (await FSBL.Clients.LauncherClient.getMonitorInfo({\n\t\t\t\twindowIdentifier: { windowName: toolbarWindowName },\n\t\t\t})) as any;\n\n\t\t\tif (err) {\n\t\t\t\tFSBL.Clients.Logger.system.error(\"Could not get Monitor info\", err);\n\t\t\t\treject(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(data);\n\t\t});\n\n\tconst data = (await getToolbarMonitorData()) as any;\n\tconst { data: bounds } = await finsembleWindow.getBounds();\n\tconst width = (bounds?.right ?? 0) - (bounds?.left ?? 0);\n\n\tfinsembleWindow.setBounds(\n\t\t{\n\t\t\tbounds: {\n\t\t\t\ttop: data[\"availableRect\"][\"top\"],\n\t\t\t\tleft: data[\"availableRect\"][\"right\"] - width,\n\t\t\t\theight: data[\"availableRect\"][\"height\"],\n\t\t\t\twidth: width,\n\t\t\t},\n\t\t},\n\t\t(err: any) => {\n\t\t\tif (err) {\n\t\t\t\tFSBL.Clients.Logger.system.error(\"Could not update position\", err);\n\t\t\t}\n\t\t}\n\t);\n};\n\nexport const getOS = () => {\n\tif (navigator.platform.indexOf(\"Win\") != -1) {\n\t\treturn \"Windows\";\n\t} else if (navigator.platform.indexOf(\"Linux\") != -1) {\n\t\treturn \"Linux\";\n\t} else if (navigator.platform.indexOf(\"Mac\") != -1) {\n\t\treturn \"Mac\";\n\t}\n};\n\n/**\n * Example for setting up button clicks\n *\n * @param notification\n * @param action\n */\nexport const doAction = (notification: INotification, action: any) => {\n\ttry {\n\t\tNotificationClient.performAction([notification], action).then(() => {\n\t\t\t// NOTE: The request to perform the action has be sent to the notifications service successfully\n\t\t\t// The action itself has not necessarily been perform successfully\n\t\t\t// 1) alert user notification has been sent (action may not have completed)\n\t\t});\n\t} catch (e) {\n\t\t// NOTE: The request to perform the action has failed\n\t\tconsole.error(\"could not create a notification client\", e);\n\t\tFSBL.Clients.Logger.system.error(\"could not create a notification client\", e);\n\t}\n};\n\n/**\n * Example for setting up button clicks\n *\n * @param filter\n */\nexport const mute = async (filter: IMuteFilter) => {\n\ttry {\n\t\tawait NotificationClient.mute(filter);\n\t} catch (e) {\n\t\t// NOTE: The request to perform the action has failed\n\t\tconsole.error(\"Could not save mute preferences\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not save mute preferences\", e);\n\t}\n};\n\n/**\n * Example for setting up button clicks\n *\n * @param filter\n */\nexport const unmute = async (filter: IMuteFilter) => {\n\ttry {\n\t\tawait NotificationClient.unmute(filter);\n\t} catch (e) {\n\t\t// NOTE: The request to perform the action has failed\n\t\tconsole.error(\"Could not save mute preferences\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not save mute preferences\", e);\n\t}\n};\n\n/**\n * Snooze a notification\n *\n * @param {INotification[]} notifications\n */\nexport const snoozeNotifications = async (notifications: INotification[]) => {\n\tconst preferences: any = await FSBL.Clients.NotificationClient.getPreferences();\n\tconst snoozeAction = new FSBL.Clients.NotificationClient.Action();\n\tsnoozeAction.type = FSBL.Clients.NotificationClient.ActionTypes.SNOOZE;\n\tif (preferences && preferences.defaultSnoozePeriodSeconds) {\n\t\tsnoozeAction.milliseconds = preferences.defaultSnoozePeriodSeconds * 1000;\n\t}\n\tsnoozeAction.buttonText = \"Snooze\";\n\n\tfor (let i = 0; i < notifications.length; i++) {\n\t\tdoAction(notifications[i], snoozeAction);\n\t}\n};\n\n/**\n * Marks a notification as read\n *\n * @param {INotification[]} notifications\n */\nexport const markNotificationsUnread = (notifications: INotification[]) => {\n\ttry {\n\t\tNotificationClient.markUnread(notifications).then(() => {\n\t\t\t// NOTE: The request to perform the action has be sent to the notifications service successfully\n\t\t\t// The action itself has not necessarily been perform successfully\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(\"Error marking messages as unread\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not mark notification as unread\", e);\n\t}\n};\n\n/**\n * Marks a notification as read\n *\n * @param {INotification[]} notifications\n */\nexport const markNotificationsRead = (notifications: INotification[]) => {\n\ttry {\n\t\tNotificationClient.markRead(notifications).then(() => {\n\t\t\t// NOTE: The request to perform the action has be sent to the notifications service successfully\n\t\t\t// The action itself has not necessarily been perform successfully\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(\"Error marking messages as read\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not mark notification as read\", e);\n\t}\n};\n\n/**\n * Dismisses a notification\n *\n * @param {INotification[]} notifications\n */\nexport const dismissNotification = (notifications: INotification[]) => {\n\ttry {\n\t\tNotificationClient.deleteNotifications(notifications).then(() => {\n\t\t\t// NOTE: The request to perform the action has be sent to the notifications service successfully\n\t\t\t// The action itself has not necessarily been perform successfully\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(\"Error marking messages as read\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not mark notification as read\", e);\n\t}\n};\n\nexport const initializeCenterToggle = () => {\n\tconst [uiState, setUIState] = useNotificationUI();\n\n\tconst toggleCenter = () => {\n\t\tsetUIState({\n\t\t\t...uiState,\n\t\t\tshowCenter: !uiState.showCenter,\n\t\t});\n\t};\n\n\treturn {\n\t\ttoggleCenter,\n\t};\n};\n\n/**\n * Get Notification's config from\n */\nexport const getNotificationConfig = (): NotificationsConfig => {\n\tconst config: WindowConfig = WindowClient.options.customData;\n\n\treturn Object.assign(config?.window?.data?.notifications || {}, {\n\t\tisTransparent: config?.window?.options?.transparent || false,\n\t});\n};\n\nexport const getFetchHistoryParams = (config: any, params: any) => {\n\tconst notificationsHistory = config?.notificationsHistory || params?.config?.notificationsHistory;\n\n\t// Backwards compatibility - `since` replaced with `options` object\n\tlet options = notificationsHistory.since ? notificationsHistory.since : null;\n\n\t// Use options object if it's been set in the component config\n\tif (!options) {\n\t\toptions = notificationsHistory?.options;\n\t}\n\n\t// If no options object set and notificationsHistory is true set in config, use the params\n\tif (!options && typeof notificationsHistory === \"boolean\" && notificationsHistory) {\n\t\toptions = params?.config?.notificationsHistory.options;\n\t}\n\n\tconst filter = notificationsHistory.filter ? notificationsHistory.filter : null;\n\n\treturn [options, filter];\n};\n\nexport default function useNotifications(params: any = {}) {\n\tconst [state, dispatch] = useReducer(reducer, initialState);\n\n\t/*\n\t\tAction Creators\n\t*/\n\tconst removeNotification = (notification: INotification) => {\n\t\tdispatch({ type: REMOVE, payload: notification });\n\t};\n\n\tconst addNotification = (notification: INotification) => {\n\t\tdispatch({ type: UPDATE, payload: notification });\n\t};\n\n\tconst addMultipleNotifications = (notifications: INotification[]) => {\n\t\tdispatch({ type: CREATE_MULTIPLE, payload: notifications });\n\t};\n\n\t/**\n\t * Group Notifications by Type\n\t * @param notifications\n\t */\n\tconst groupNotificationsByType = (notifications: INotification[]) => {\n\t\tconst groupBy = (arr: INotification[]) =>\n\t\t\tarr\n\t\t\t\t.map((notification: INotification): string => notification.type ?? \"unknown\")\n\t\t\t\t.reduce((acc: { [x: string]: any }, notificationType: string, index: number) => {\n\t\t\t\t\tacc[notificationType] = [...(acc[notificationType] || []), arr[index]];\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {});\n\n\t\treturn groupBy(notifications);\n\t};\n\n\t/**\n\t * \t * get the past notifications\n\t * WARNING - The default will get all notifications all the way back from 1969!!!\n\t * @param since\n\t * @param filter\n\t */\n\tconst getNotificationHistory = (\n\t\tsince: INotificationHistoryOptions = { sentAfter: \"1969-12-31T23:59:59.999Z\" },\n\t\tfilter: null | IFilter = null\n\t): Promise<INotification[]> => NotificationClient.fetchHistory(since, filter as IFilter);\n\n\tconst notificationIsActive = (notification: INotification, applyMuteFilterOverride?: boolean | undefined) => {\n\t\tlet applyMuteFilters = applyMuteFilterOverride;\n\n\t\tif (typeof applyMuteFilterOverride === \"undefined\") {\n\t\t\tconst config = getNotificationConfig();\n\t\t\tapplyMuteFilters = config?.applyMuteFilters ? config.applyMuteFilters : false;\n\t\t}\n\n\t\treturn (\n\t\t\t!notification.isSnoozed &&\n\t\t\t!notification.isRead &&\n\t\t\t!notification.isDeleted &&\n\t\t\t(applyMuteFilters ? !notification.isMuted : true)\n\t\t);\n\t};\n\n\tconst activeNotifications = (notifications: INotification[], applyMuteFilterOverride?: boolean | undefined) =>\n\t\tnotifications.filter((notification) => notificationIsActive(notification, applyMuteFilterOverride));\n\n\t/**\n\t * Main init function to start the subscription\n\t */\n\tasync function init() {\n\t\ttry {\n\t\t\tconst subscription = new NotificationClient.Subscription();\n\n\t\t\tconst notificationConfig: NotificationsConfig = getNotificationConfig();\n\n\t\t\tconst filter: IFilter = new NotificationClient.Filter();\n\n\t\t\t// make filters from the config\n\t\t\tif (notificationConfig) {\n\t\t\t\tnotificationConfig.filter?.include && filter.include?.push(...notificationConfig.filter.include);\n\t\t\t\tnotificationConfig.filter?.exclude && filter.exclude?.push(...notificationConfig.filter.exclude);\n\t\t\t}\n\n\t\t\tsubscription.filter = filter;\n\n\t\t\tconst notificationsHistory = notificationConfig?.notificationsHistory || params?.config?.notificationsHistory;\n\n\t\t\tif (notificationsHistory) {\n\t\t\t\tconst [options, historyFilter] = getFetchHistoryParams(notificationConfig, params);\n\n\t\t\t\tconst pastNotifications = await getNotificationHistory(options, historyFilter);\n\t\t\t\taddMultipleNotifications(pastNotifications);\n\t\t\t}\n\t\t\tconst onNotification = function (notification: INotification) {\n\t\t\t\t// This function will be called when a notification arrives\n\t\t\t\tif (notification.isDeleted) {\n\t\t\t\t\tremoveNotification(notification);\n\t\t\t\t} else {\n\t\t\t\t\taddNotification(notification);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn NotificationClient.subscribe(subscription, onNotification);\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * Set opaque class to html element\n\t */\n\tfunction setOpaqueClassName(isOpaque: boolean) {\n\t\tif (isOpaque) {\n\t\t\tconst htmlElement = document.getElementsByTagName(\"html\")[0];\n\t\t\tif (!htmlElement.className.includes(\"opaque\")) {\n\t\t\t\thtmlElement.className = `${htmlElement.className} opaque`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// start receiving Notifications and putting them in state\n\tuseEffect(() => {\n\t\tconst subscribe = init();\n\t\treturn () => {\n\t\t\t// Unsubscribe using the subscription ID\n\t\t\t(async () => {\n\t\t\t\tconst subscribeObject = (await subscribe) as any;\n\t\t\t\tif (subscribeObject) {\n\t\t\t\t\tawait NotificationClient.unsubscribe(subscribeObject.id);\n\t\t\t\t}\n\t\t\t})();\n\t\t};\n\t}, []);\n\n\treturn {\n\t\tactiveNotifications,\n\t\taddNotification,\n\t\tnotificationIsActive,\n\t\tgetNotificationHistory,\n\t\tgroupNotificationsByType,\n\t\tnotifications: state.notifications,\n\t\tremoveNotification,\n\t\tsetOpaqueClassName,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useNotifications.js","sourceRoot":"","sources":["../../src/hooks/useNotifications.ts"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useReducer } from \"react\";\nimport { WindowConfig, NotificationsConfig } from \"../components/notifications/types\";\nimport { usePubSub } from \"./usePubSub\";\nimport { NOTIFICATIONS_PUBSUB_TOPIC } from \"../components/notifications/constants\";\nimport { services } from \"@finsemble/finsemble-api\";\ntype NotificationServiceState = services.notification.types.NotificationServiceState;\n\ntype IFilter = services.notification.types.IFilter;\ntype IMuteFilter = services.notification.types.IMuteFilter;\ntype INotification = services.notification.types.INotification;\ntype INotificationHistoryOptions = services.notification.types.INotificationHistoryOptions;\n\nconst { WindowClient, NotificationClient } = FSBL.Clients;\n\nconst initialState: any = { notifications: [] };\n\n/*\nAction Types\n*/\nconst CREATE_MULTIPLE = \"CREATE_MULTIPLE\";\nconst UPDATE = \"UPDATE\";\nconst REMOVE = \"REMOVE\";\n\n/*\n\tReducer\n\t*/\nfunction reducer(state: { notifications: INotification[] }, action: { type: string; payload: any }) {\n\tswitch (action.type) {\n\t\tcase CREATE_MULTIPLE:\n\t\t\treturn {\n\t\t\t\tnotifications: [...state.notifications, ...action.payload],\n\t\t\t};\n\t\tcase UPDATE: {\n\t\t\t// check to see if the notification exists if so update the values\n\t\t\tconst notificationExistsInArray = state.notifications.find(\n\t\t\t\t(notification: INotification) => notification.id === action.payload.id\n\t\t\t);\n\n\t\t\t//if the notification exists then do nothing and return the current state else add the the new notification to the state\n\t\t\tconst notifications = notificationExistsInArray\n\t\t\t\t? state.notifications.map((notification: INotification) =>\n\t\t\t\t\t\tnotification.id === action.payload.id ? action.payload : notification\n\t\t\t\t )\n\t\t\t\t: [action.payload, ...state.notifications];\n\n\t\t\treturn { notifications };\n\t\t}\n\t\tcase REMOVE:\n\t\t\treturn {\n\t\t\t\tnotifications: state.notifications.filter((notification) => notification.id !== action.payload.id),\n\t\t\t};\n\t\tdefault:\n\t\t\tthrow new Error();\n\t}\n}\n\ntype NotificationUIStatePublish = (state: NotificationServiceState) => void;\n\n/**\n * Thin wrapper around usePubSub to give us typesafety for the notification service's UI state.\n * Automatically appends this client's windowName which is used by the notification service to\n * display the notification center on an appropriate monitor.\n */\nexport const useNotificationUI = (): [state: NotificationServiceState, setState: NotificationUIStatePublish] => {\n\tconst [state, setState] = usePubSub(NOTIFICATIONS_PUBSUB_TOPIC);\n\n\tconst setStateAndAddWindowName = (newState: NotificationServiceState) => {\n\t\tsetState({\n\t\t\t...newState,\n\t\t\tmostRecentWindowName: finsembleWindow.name,\n\t\t});\n\t};\n\treturn [state as NotificationServiceState, setStateAndAddWindowName];\n};\n\nconst getActiveDescriptorsByType = (componentType: string): Promise<any[]> =>\n\tnew Promise(async (resolve, reject) => {\n\t\tFSBL.Clients.LauncherClient.getActiveDescriptors((err: any, data: any) => {\n\t\t\tconst activeDescriptors: any[] = [];\n\t\t\tif (err) {\n\t\t\t\treject(err);\n\t\t\t} else {\n\t\t\t\tfor (const key in data) {\n\t\t\t\t\tif (data.hasOwnProperty(key) && data[key]?.componentType === componentType) {\n\t\t\t\t\t\tactiveDescriptors.push(data[key]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tresolve(activeDescriptors);\n\t\t});\n\t});\n\nlet toolbarWindowName: string;\n\nexport const moveToToolbarMonitor = async () => {\n\tconst getToolbarMonitorData = async () =>\n\t\tnew Promise(async (resolve, reject) => {\n\t\t\tif (!toolbarWindowName) {\n\t\t\t\tconst activeDescriptors = await getActiveDescriptorsByType(\"Toolbar\");\n\t\t\t\ttoolbarWindowName = activeDescriptors[0]?.name;\n\t\t\t}\n\t\t\tconst { err, data } = (await FSBL.Clients.LauncherClient.getMonitorInfo({\n\t\t\t\twindowIdentifier: { windowName: toolbarWindowName },\n\t\t\t})) as any;\n\n\t\t\tif (err) {\n\t\t\t\tFSBL.Clients.Logger.system.error(\"Could not get Monitor info\", err);\n\t\t\t\treject(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(data);\n\t\t});\n\n\tconst data = (await getToolbarMonitorData()) as any;\n\tconst { data: bounds } = await finsembleWindow.getBounds();\n\tconst width = (bounds?.right ?? 0) - (bounds?.left ?? 0);\n\n\tfinsembleWindow.setBounds(\n\t\t{\n\t\t\tbounds: {\n\t\t\t\ttop: data[\"availableRect\"][\"top\"],\n\t\t\t\tleft: data[\"availableRect\"][\"right\"] - width,\n\t\t\t\theight: data[\"availableRect\"][\"height\"],\n\t\t\t\twidth: width,\n\t\t\t},\n\t\t},\n\t\t(err: any) => {\n\t\t\tif (err) {\n\t\t\t\tFSBL.Clients.Logger.system.error(\"Could not update position\", err);\n\t\t\t}\n\t\t}\n\t);\n};\n\nexport const getOS = () => {\n\tif (navigator.platform.indexOf(\"Win\") != -1) {\n\t\treturn \"Windows\";\n\t} else if (navigator.platform.indexOf(\"Linux\") != -1) {\n\t\treturn \"Linux\";\n\t} else if (navigator.platform.indexOf(\"Mac\") != -1) {\n\t\treturn \"Mac\";\n\t}\n};\n\n/**\n * Example for setting up button clicks\n *\n * @param notification\n * @param action\n */\nexport const doAction = (notification: INotification, action: any) => {\n\ttry {\n\t\tNotificationClient.performAction([notification], action).then(() => {\n\t\t\t// NOTE: The request to perform the action has be sent to the notifications service successfully\n\t\t\t// The action itself has not necessarily been perform successfully\n\t\t\t// 1) alert user notification has been sent (action may not have completed)\n\t\t});\n\t} catch (e) {\n\t\t// NOTE: The request to perform the action has failed\n\t\tconsole.error(\"could not create a notification client\", e);\n\t\tFSBL.Clients.Logger.system.error(\"could not create a notification client\", e);\n\t}\n};\n\n/**\n * Example for setting up button clicks\n *\n * @param filter\n */\nexport const mute = async (filter: IMuteFilter) => {\n\ttry {\n\t\tawait NotificationClient.mute(filter);\n\t} catch (e) {\n\t\t// NOTE: The request to perform the action has failed\n\t\tconsole.error(\"Could not save mute preferences\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not save mute preferences\", e);\n\t}\n};\n\n/**\n * Example for setting up button clicks\n *\n * @param filter\n */\nexport const unmute = async (filter: IMuteFilter) => {\n\ttry {\n\t\tawait NotificationClient.unmute(filter);\n\t} catch (e) {\n\t\t// NOTE: The request to perform the action has failed\n\t\tconsole.error(\"Could not save mute preferences\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not save mute preferences\", e);\n\t}\n};\n\n/**\n * Snooze a notification\n *\n * @param {INotification[]} notifications\n */\nexport const snoozeNotifications = async (notifications: INotification[]) => {\n\tconst preferences: any = await FSBL.Clients.NotificationClient.getPreferences();\n\tconst snoozeAction = new FSBL.Clients.NotificationClient.Action();\n\tsnoozeAction.type = FSBL.Clients.NotificationClient.ActionTypes.SNOOZE;\n\tif (preferences && preferences.defaultSnoozePeriodSeconds) {\n\t\tsnoozeAction.milliseconds = preferences.defaultSnoozePeriodSeconds * 1000;\n\t}\n\tsnoozeAction.buttonText = \"Snooze\";\n\n\tfor (let i = 0; i < notifications.length; i++) {\n\t\tdoAction(notifications[i], snoozeAction);\n\t}\n};\n\n/**\n * Marks a notification as read\n *\n * @param {INotification[]} notifications\n */\nexport const markNotificationsUnread = (notifications: INotification[]) => {\n\ttry {\n\t\tNotificationClient.markUnread(notifications).then(() => {\n\t\t\t// NOTE: The request to perform the action has be sent to the notifications service successfully\n\t\t\t// The action itself has not necessarily been perform successfully\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(\"Error marking messages as unread\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not mark notification as unread\", e);\n\t}\n};\n\n/**\n * Marks a notification as read\n *\n * @param {INotification[]} notifications\n */\nexport const markNotificationsRead = (notifications: INotification[]) => {\n\ttry {\n\t\tNotificationClient.markRead(notifications).then(() => {\n\t\t\t// NOTE: The request to perform the action has be sent to the notifications service successfully\n\t\t\t// The action itself has not necessarily been perform successfully\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(\"Error marking messages as read\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not mark notification as read\", e);\n\t}\n};\n\n/**\n * Dismisses a notification\n *\n * @param {INotification[]} notifications\n */\nexport const dismissNotification = (notifications: INotification[]) => {\n\ttry {\n\t\tNotificationClient.deleteNotifications(notifications).then(() => {\n\t\t\t// NOTE: The request to perform the action has be sent to the notifications service successfully\n\t\t\t// The action itself has not necessarily been perform successfully\n\t\t});\n\t} catch (e) {\n\t\tconsole.error(\"Error marking messages as read\", e);\n\t\tFSBL.Clients.Logger.system.error(\"Could not mark notification as read\", e);\n\t}\n};\n\nexport const initializeCenterToggle = () => {\n\tconst [uiState, setUIState] = useNotificationUI();\n\n\tconst toggleCenter = () => {\n\t\tsetUIState({\n\t\t\t...uiState,\n\t\t\tshowCenter: !uiState.showCenter,\n\t\t});\n\t};\n\n\treturn {\n\t\ttoggleCenter,\n\t};\n};\n\n/**\n * Get Notification's config from\n */\nexport const getNotificationConfig = (): NotificationsConfig => {\n\tconst config: WindowConfig = WindowClient.options.customData;\n\n\treturn Object.assign(config?.window?.data?.notifications || {}, {\n\t\tisTransparent: config?.window?.options?.transparent || false,\n\t});\n};\n\nexport const getFetchHistoryParams = (config: any, params: any) => {\n\tconst notificationsHistory = config?.notificationsHistory || params?.config?.notificationsHistory;\n\n\t// Backwards compatibility - `since` replaced with `options` object\n\tlet options = notificationsHistory.since ? notificationsHistory.since : null;\n\n\t// Use options object if it's been set in the component config\n\tif (!options) {\n\t\toptions = notificationsHistory?.options;\n\t}\n\n\t// If no options object set and notificationsHistory is true set in config, use the params\n\tif (!options && typeof notificationsHistory === \"boolean\" && notificationsHistory) {\n\t\toptions = params?.config?.notificationsHistory.options;\n\t}\n\n\tconst filter = notificationsHistory.filter ? notificationsHistory.filter : null;\n\n\treturn [options, filter];\n};\n\nexport default function useNotifications(params: any = {}) {\n\tconst [state, dispatch] = useReducer(reducer, initialState);\n\n\t/*\n\t\tAction Creators\n\t*/\n\tconst removeNotification = (notification: INotification) => {\n\t\tdispatch({ type: REMOVE, payload: notification });\n\t};\n\n\tconst addNotification = (notification: INotification) => {\n\t\tdispatch({ type: UPDATE, payload: notification });\n\t};\n\n\tconst addMultipleNotifications = (notifications: INotification[]) => {\n\t\tdispatch({ type: CREATE_MULTIPLE, payload: notifications });\n\t};\n\n\t/**\n\t * Group Notifications by Type\n\t * @param notifications\n\t */\n\tconst groupNotificationsByType = (notifications: INotification[]) => {\n\t\tconst groupBy = (arr: INotification[]) =>\n\t\t\tarr\n\t\t\t\t.map((notification: INotification): string => notification.type ?? \"unknown\")\n\t\t\t\t.reduce((acc: { [x: string]: any }, notificationType: string, index: number) => {\n\t\t\t\t\tacc[notificationType] = [...(acc[notificationType] || []), arr[index]];\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {});\n\n\t\treturn groupBy(notifications);\n\t};\n\n\t/**\n\t * \t * get the past notifications\n\t * WARNING - The default will get all notifications all the way back from 1969!!!\n\t * @param since\n\t * @param filter\n\t */\n\tconst getNotificationHistory = (\n\t\tsince: INotificationHistoryOptions = { sentAfter: \"1969-12-31T23:59:59.999Z\" },\n\t\tfilter: null | IFilter = null\n\t): Promise<INotification[]> => NotificationClient.fetchHistory(since, filter as IFilter);\n\n\tconst notificationIsActive = (notification: INotification, applyMuteFilterOverride?: boolean | undefined) => {\n\t\tlet applyMuteFilters = applyMuteFilterOverride;\n\n\t\tif (typeof applyMuteFilterOverride === \"undefined\") {\n\t\t\tconst config = getNotificationConfig();\n\t\t\tapplyMuteFilters = config?.applyMuteFilters ? config.applyMuteFilters : false;\n\t\t}\n\n\t\treturn (\n\t\t\t!notification.isSnoozed &&\n\t\t\t!notification.isRead &&\n\t\t\t!notification.isDeleted &&\n\t\t\t(applyMuteFilters ? !notification.isMuted : true)\n\t\t);\n\t};\n\n\tconst activeNotifications = (notifications: INotification[], applyMuteFilterOverride?: boolean | undefined) =>\n\t\tnotifications.filter((notification) => notificationIsActive(notification, applyMuteFilterOverride));\n\n\t/**\n\t * Main init function to start the subscription\n\t */\n\tasync function init() {\n\t\ttry {\n\t\t\tconst subscription = new NotificationClient.Subscription();\n\n\t\t\tconst notificationConfig: NotificationsConfig = getNotificationConfig();\n\n\t\t\tconst filter: IFilter = new NotificationClient.Filter();\n\n\t\t\t// make filters from the config\n\t\t\tif (notificationConfig) {\n\t\t\t\tnotificationConfig.filter?.include && filter.include?.push(...notificationConfig.filter.include);\n\t\t\t\tnotificationConfig.filter?.exclude && filter.exclude?.push(...notificationConfig.filter.exclude);\n\t\t\t}\n\n\t\t\tsubscription.filter = filter;\n\n\t\t\tconst notificationsHistory = notificationConfig?.notificationsHistory || params?.config?.notificationsHistory;\n\n\t\t\tif (notificationsHistory) {\n\t\t\t\tconst [options, historyFilter] = getFetchHistoryParams(notificationConfig, params);\n\n\t\t\t\tconst pastNotifications = await getNotificationHistory(options, historyFilter);\n\t\t\t\taddMultipleNotifications(pastNotifications);\n\t\t\t}\n\t\t\tconst onNotification = function (notification: INotification) {\n\t\t\t\t// This function will be called when a notification arrives\n\t\t\t\tif (notification.isDeleted) {\n\t\t\t\t\tremoveNotification(notification);\n\t\t\t\t} else {\n\t\t\t\t\taddNotification(notification);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn NotificationClient.subscribe(subscription, onNotification);\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\n\t/**\n\t * Set opaque class to html element\n\t */\n\tfunction setOpaqueClassName(isOpaque: boolean) {\n\t\tif (isOpaque) {\n\t\t\tconst htmlElement = document.getElementsByTagName(\"html\")[0];\n\t\t\tif (!htmlElement.className.includes(\"opaque\")) {\n\t\t\t\thtmlElement.className = `${htmlElement.className} opaque`;\n\t\t\t}\n\t\t}\n\t}\n\n\t// start receiving Notifications and putting them in state\n\tuseEffect(() => {\n\t\tconst subscribe = init();\n\t\treturn () => {\n\t\t\t// Unsubscribe using the subscription ID\n\t\t\t(async () => {\n\t\t\t\tconst subscribeObject = (await subscribe) as any;\n\t\t\t\tif (subscribeObject) {\n\t\t\t\t\tawait NotificationClient.unsubscribe(subscribeObject.id);\n\t\t\t\t}\n\t\t\t})();\n\t\t};\n\t}, []);\n\n\treturn {\n\t\tactiveNotifications,\n\t\taddNotification,\n\t\tnotificationIsActive,\n\t\tgetNotificationHistory,\n\t\tgroupNotificationsByType,\n\t\tnotifications: state.notifications,\n\t\tremoveNotification,\n\t\tsetOpaqueClassName,\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOutsideClickDetector.js","sourceRoot":"","sources":["../../src/hooks/useOutsideClickDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useOutsideClickDetector.js","sourceRoot":"","sources":["../../src/hooks/useOutsideClickDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAA4C,EAAE,EAAY,EAAE,EAAE;IACrG,SAAS,CAAC,GAAG,EAAE;QACd,SAAS,kBAAkB,CAAC,KAAiB;YAC5C,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;gBAC/D,EAAE,EAAE,CAAC;aACL;QACF,CAAC;QACD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC3D,OAAO,GAAG,EAAE;YACX,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC/D,CAAC,CAAC;IACH,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,CAAC,CAAC","sourcesContent":["import { MutableRefObject, useEffect } from \"react\";\n\n/**\n * Hook that detects clicks outside of the passed ref and executes a function\n */\nexport const useOutsideClickDetector = (ref: MutableRefObject<null | HTMLDivElement>, fn: Function) => {\n\tuseEffect(() => {\n\t\tfunction handleClickOutside(event: MouseEvent) {\n\t\t\tif (ref.current && !ref.current.contains(event.target as Node)) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"mousedown\", handleClickOutside);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", handleClickOutside);\n\t\t};\n\t}, [ref]);\n};\n"]}
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A generic effect for getting and setting state dynamically from a Router pubsub channel.
|
|
3
|
+
*
|
|
4
|
+
* @param {string} topic The pubsub topic (i.e. channel) to subscribe
|
|
5
|
+
* @param {object} initialMessage The initial state (defaults to empty object)
|
|
6
|
+
* @returns [object, function] The current state of the pubsub channel (or initialMessage if no state exists).
|
|
7
|
+
* The second returned array parameter is a publish function which can be used to update state.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // Inside a React functional component
|
|
11
|
+
* const [currentState, publish] = usePubSub("topic", {});
|
|
12
|
+
* console.log(currentState);
|
|
13
|
+
*
|
|
14
|
+
* onClick = () => {
|
|
15
|
+
* publish(someNewState);
|
|
16
|
+
* }
|
|
17
|
+
*/
|
|
1
18
|
declare function usePubSub(topic: string, initialMessage?: object): [{
|
|
2
19
|
[key: string]: any;
|
|
3
20
|
}, Function];
|
package/react/hooks/usePubSub.js
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
const { useState, useEffect } = React;
|
|
3
|
+
/**
|
|
4
|
+
* A generic effect for getting and setting state dynamically from a Router pubsub channel.
|
|
5
|
+
*
|
|
6
|
+
* @param {string} topic The pubsub topic (i.e. channel) to subscribe
|
|
7
|
+
* @param {object} initialMessage The initial state (defaults to empty object)
|
|
8
|
+
* @returns [object, function] The current state of the pubsub channel (or initialMessage if no state exists).
|
|
9
|
+
* The second returned array parameter is a publish function which can be used to update state.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // Inside a React functional component
|
|
13
|
+
* const [currentState, publish] = usePubSub("topic", {});
|
|
14
|
+
* console.log(currentState);
|
|
15
|
+
*
|
|
16
|
+
* onClick = () => {
|
|
17
|
+
* publish(someNewState);
|
|
18
|
+
* }
|
|
19
|
+
*/
|
|
3
20
|
function usePubSub(topic, initialMessage = {}) {
|
|
4
21
|
const [message, setMessage] = useState(initialMessage);
|
|
5
22
|
const pub = (value) => FSBL.Clients.RouterClient.publish(topic, value);
|
|
6
23
|
useEffect(() => {
|
|
7
24
|
const subscribeId = FSBL.Clients.RouterClient.subscribe(topic, (err, res) => {
|
|
8
25
|
if (err) {
|
|
26
|
+
// Use Finsemble Logger?
|
|
9
27
|
console.error(err);
|
|
10
28
|
}
|
|
11
29
|
setMessage(res.data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePubSub.js","sourceRoot":"","sources":["../../src/hooks/usePubSub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"usePubSub.js","sourceRoot":"","sources":["../../src/hooks/usePubSub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;AAEtC;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,SAAS,CAAC,KAAa,EAAE,iBAAyB,EAAE;IAC5D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEvD,MAAM,GAAG,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE5E,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3E,IAAI,GAAG,EAAE;gBACR,wBAAwB;gBACxB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnB;YACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACX,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,CAAC","sourcesContent":["import * as React from \"react\";\n\nconst { useState, useEffect } = React;\n\n/**\n * A generic effect for getting and setting state dynamically from a Router pubsub channel.\n *\n * @param {string} topic The pubsub topic (i.e. channel) to subscribe\n * @param {object} initialMessage The initial state (defaults to empty object)\n * @returns [object, function] The current state of the pubsub channel (or initialMessage if no state exists).\n * The second returned array parameter is a publish function which can be used to update state.\n *\n * @example\n * // Inside a React functional component\n * const [currentState, publish] = usePubSub(\"topic\", {});\n * console.log(currentState);\n *\n * onClick = () => {\n * publish(someNewState);\n * }\n */\nfunction usePubSub(topic: string, initialMessage: object = {}): [{ [key: string]: any }, Function] {\n\tconst [message, setMessage] = useState(initialMessage);\n\n\tconst pub = (value: any) => FSBL.Clients.RouterClient.publish(topic, value);\n\n\tuseEffect(() => {\n\t\tconst subscribeId = FSBL.Clients.RouterClient.subscribe(topic, (err, res) => {\n\t\t\tif (err) {\n\t\t\t\t// Use Finsemble Logger?\n\t\t\t\tconsole.error(err);\n\t\t\t}\n\t\t\tsetMessage(res.data);\n\t\t});\n\t\treturn () => {\n\t\t\tFSBL.Clients.RouterClient.unsubscribe(subscribeId);\n\t\t};\n\t}, []);\n\n\treturn [message, pub];\n}\n\nexport { usePubSub };\n"]}
|
|
@@ -6,5 +6,10 @@ declare type SearchHook = {
|
|
|
6
6
|
updateQuery: (query: string) => void;
|
|
7
7
|
resetSearch: () => void;
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* A hook for working with search. Search results stream back, and this hook will relay those through
|
|
11
|
+
* a reducer. Note that the reducer implementation is a singleton (if you have multiple search) inputs
|
|
12
|
+
* across a component then they will all be synchronized to query and results.
|
|
13
|
+
*/
|
|
9
14
|
declare const useSearch: () => SearchHook;
|
|
10
15
|
export { useSearch };
|