@finsemble/finsemble-ui 6.4.0 → 6.5.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +19 -18
- package/react/actions/smartDesktopDesignerActions.d.ts +6 -2
- package/react/actions/smartDesktopDesignerActions.js +2 -0
- package/react/actions/smartDesktopDesignerActions.js.map +1 -1
- package/react/assets/icons/code-block.svg +15 -0
- package/react/components/FinsembleProvider.js.map +1 -1
- package/react/components/appCatalog/modules/FDC3.d.ts +1 -1
- package/react/components/appCatalog/modules/FDC3.js.map +1 -1
- package/react/components/appCatalog/stores/appStore.d.ts +2 -2
- package/react/components/appCatalog/stores/appStore.js.map +1 -1
- package/react/components/common/Checkbox.js +1 -1
- package/react/components/common/Checkbox.js.map +1 -1
- package/react/components/common/DropZone.js +3 -1
- package/react/components/common/DropZone.js.map +1 -1
- package/react/components/common/FinsembleIcon.d.ts +1 -1
- package/react/components/common/FinsembleIcon.js +2 -0
- package/react/components/common/FinsembleIcon.js.map +1 -1
- package/react/components/common/FinsembleSelect.js +1 -1
- package/react/components/common/FinsembleSelect.js.map +1 -1
- package/react/components/common/Tooltip.js +3 -1
- package/react/components/common/Tooltip.js.map +1 -1
- package/react/components/common/css/application-list.css +4 -0
- package/react/components/common/css/preload-edit-page.css +37 -0
- package/react/components/favorites/FavoritesShell.stories.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
- package/react/components/legacyControls/FinsembleDnDContext.d.ts +2 -1
- package/react/components/legacyControls/FinsembleDnDContext.js +8 -6
- package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
- package/react/components/linker/remoteRedux.d.ts +1 -1
- package/react/components/linker/remoteRedux.js.map +1 -1
- package/react/components/menu/MenuAutoResizer.js.map +1 -1
- package/react/components/menu/MenuPortal.js +19 -0
- package/react/components/menu/MenuPortal.js.map +1 -1
- package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
- package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js.map +1 -1
- package/react/components/notifications/components/shared/CheckButton.d.ts +1 -1
- package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
- package/react/components/notifications/components/shared/NotificationCardShell.d.ts +1 -1
- package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
- package/react/components/notifications/components/shared/OverflowMenu.d.ts +1 -1
- package/react/components/notifications/components/shared/OverflowMenu.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.d.ts +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.d.ts +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.d.ts +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.d.ts +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js.map +1 -1
- package/react/components/notifications/components/views/CardView.js.map +1 -1
- package/react/components/notifications/components/views/ListView.d.ts +1 -1
- package/react/components/notifications/components/views/ListView.js.map +1 -1
- package/react/components/notifications/components/views/NotificationDetailsView.d.ts +1 -1
- package/react/components/notifications/components/views/NotificationDetailsView.js.map +1 -1
- package/react/components/notifications/types.d.ts +1 -1
- package/react/components/notifications/types.js.map +1 -1
- package/react/components/notifications/utils.d.ts +1 -1
- package/react/components/notifications/utils.js.map +1 -1
- package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
- package/react/components/processMonitor/components/ChildWindow.js.map +1 -1
- package/react/components/processMonitor/components/ListHeader.d.ts +1 -1
- package/react/components/processMonitor/components/ListHeader.js.map +1 -1
- package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts +3 -3
- package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
- package/react/components/search/SearchResult.js +4 -3
- package/react/components/search/SearchResult.js.map +1 -1
- package/react/components/smartDesktopDesigner/AppEditAccess.js.map +1 -1
- package/react/components/smartDesktopDesigner/AppEditPage.d.ts +2 -1
- package/react/components/smartDesktopDesigner/AppEditPage.js +77 -73
- package/react/components/smartDesktopDesigner/AppEditPage.js.map +1 -1
- package/react/components/smartDesktopDesigner/Appearance.css +8 -0
- package/react/components/smartDesktopDesigner/Application.d.ts +10 -3
- package/react/components/smartDesktopDesigner/Application.js +35 -42
- package/react/components/smartDesktopDesigner/Application.js.map +1 -1
- package/react/components/smartDesktopDesigner/Applications.d.ts +2 -0
- package/react/components/smartDesktopDesigner/Applications.js +17 -7
- package/react/components/smartDesktopDesigner/Applications.js.map +1 -1
- package/react/components/smartDesktopDesigner/EditPreload.d.ts +14 -0
- package/react/components/smartDesktopDesigner/EditPreload.js +169 -0
- package/react/components/smartDesktopDesigner/EditPreload.js.map +1 -0
- package/react/components/smartDesktopDesigner/ItemList.d.ts +17 -0
- package/react/components/smartDesktopDesigner/ItemList.js +58 -0
- package/react/components/smartDesktopDesigner/ItemList.js.map +1 -0
- package/react/components/smartDesktopDesigner/OptionalSettingsView.d.ts +11 -0
- package/react/components/smartDesktopDesigner/OptionalSettingsView.js +71 -0
- package/react/components/smartDesktopDesigner/OptionalSettingsView.js.map +1 -0
- package/react/components/smartDesktopDesigner/Preloads.d.ts +8 -0
- package/react/components/smartDesktopDesigner/Preloads.js +26 -0
- package/react/components/smartDesktopDesigner/Preloads.js.map +1 -0
- package/react/components/smartDesktopDesigner/Publish.js.map +1 -1
- package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +1 -1
- package/react/components/smartDesktopDesigner/Toolbar.js +5 -5
- package/react/components/smartDesktopDesigner/Toolbar.js.map +1 -1
- package/react/components/smartDesktopDesigner/common/views.js +18 -0
- package/react/components/smartDesktopDesigner/common/views.js.map +1 -1
- package/react/components/smartDesktopDesigner/css/appearance.css +3 -0
- package/react/components/smartDesktopDesigner/fixtures/apps.d.ts +1 -1
- package/react/components/smartDesktopDesigner/fixtures/apps.js +23 -1
- package/react/components/smartDesktopDesigner/fixtures/apps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/exportProps.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/preloads.d.ts +22 -0
- package/react/components/smartDesktopDesigner/fixtures/preloads.js +40 -0
- package/react/components/smartDesktopDesigner/fixtures/preloads.js.map +1 -0
- package/react/components/smartDesktopDesigner/fixtures/publishProgress.d.ts +1 -1
- package/react/components/smartDesktopDesigner/fixtures/publishProgress.js.map +1 -1
- package/react/components/smartDesktopDesigner/fixtures/views.js +9 -0
- package/react/components/smartDesktopDesigner/fixtures/views.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.d.ts +1 -1
- package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.js +1 -0
- package/react/components/smartDesktopDesigner/stories/AppEditPage.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/stories/EditPreload.stories.d.ts +11 -0
- package/react/components/smartDesktopDesigner/stories/EditPreload.stories.js +35 -0
- package/react/components/smartDesktopDesigner/stories/EditPreload.stories.js.map +1 -0
- package/react/components/smartDesktopDesigner/stories/ItemList.stories.d.ts +16 -0
- package/react/components/smartDesktopDesigner/stories/{ApplicationList.stories.js → ItemList.stories.js} +26 -26
- package/react/components/smartDesktopDesigner/stories/ItemList.stories.js.map +1 -0
- package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.d.ts +11 -0
- package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.js +28 -0
- package/react/components/smartDesktopDesigner/stories/OptionalSettingsView.stories.js.map +1 -0
- package/react/components/smartDesktopDesigner/stories/Preloads.stories.d.ts +11 -0
- package/react/components/smartDesktopDesigner/stories/Preloads.stories.js +31 -0
- package/react/components/smartDesktopDesigner/stories/Preloads.stories.js.map +1 -0
- package/react/components/smartDesktopDesigner/stories/SmartDesktopDesigner.stories.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/AppEditPage.spec.js +1099 -258
- package/react/components/smartDesktopDesigner/tests/AppEditPage.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/{ApplicationList.spec.d.ts → Application.spec.d.ts} +0 -0
- package/react/components/smartDesktopDesigner/tests/Application.spec.js +1496 -0
- package/react/components/smartDesktopDesigner/tests/Application.spec.js.map +1 -0
- package/react/components/smartDesktopDesigner/tests/Applications.spec.js +3 -3
- package/react/components/smartDesktopDesigner/tests/Applications.spec.js.map +1 -1
- package/react/components/smartDesktopDesigner/tests/EditPreload.spec.d.ts +1 -0
- package/react/components/smartDesktopDesigner/tests/EditPreload.spec.js +61 -0
- package/react/components/smartDesktopDesigner/tests/EditPreload.spec.js.map +1 -0
- package/react/components/smartDesktopDesigner/tests/ItemList.spec.d.ts +1 -0
- package/react/components/smartDesktopDesigner/tests/{ApplicationList.spec.js → ItemList.spec.js} +8 -8
- package/react/components/smartDesktopDesigner/tests/ItemList.spec.js.map +1 -0
- package/react/components/smartDesktopDesigner/tests/Preloads.spec.d.ts +1 -0
- package/react/components/smartDesktopDesigner/tests/Preloads.spec.js +47 -0
- package/react/components/smartDesktopDesigner/tests/Preloads.spec.js.map +1 -0
- package/react/components/smartDesktopDesigner/tests/SmartDesktopDesigner.spec.js +6 -0
- package/react/components/smartDesktopDesigner/tests/SmartDesktopDesigner.spec.js.map +1 -1
- package/react/components/toolbar/DragHandle.spec.d.ts +1 -0
- package/react/components/toolbar/DragHandle.spec.js +31 -0
- package/react/components/toolbar/DragHandle.spec.js.map +1 -0
- package/react/components/toolbar/DragHandle.stories.d.ts +13 -0
- package/react/components/toolbar/DragHandle.stories.js +39 -0
- package/react/components/toolbar/DragHandle.stories.js.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.d.ts +1 -1
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/Content.d.ts +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/Content.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.d.ts +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.d.ts +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.d.ts +2 -2
- package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
- package/react/components/toolbar/appLauncher/components/componentList.d.ts +2 -2
- package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.d.ts +2 -2
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.js.map +1 -1
- package/react/components/toolbar/dashbar/Dashbar.js +9 -12
- package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.d.ts +2 -2
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.d.ts +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts +4 -4
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +1 -1
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
- package/react/components/userPreferences/components/content/Workspaces.d.ts +1 -1
- package/react/components/userPreferences/components/content/Workspaces.js +1 -1
- package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/notificationViewsUtils.js.map +1 -1
- package/react/components/userPreferences/stores/UserPreferencesStore.d.ts +1 -1
- package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
- package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +4 -2
- package/react/components/windowTitleBar/WindowTitleBarShell.js +60 -59
- package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
- package/react/components/windowTitleBar/components/center/TabList.d.ts +2 -2
- package/react/components/windowTitleBar/components/center/TabList.js +3 -0
- package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/GroupingButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/MaximizeButton.js.map +1 -1
- package/react/components/windowTitleBar/components/windowTitle.d.ts +5 -2
- package/react/components/windowTitleBar/components/windowTitle.js +93 -89
- package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
- package/react/components/windowTitleBar/stores/windowTitleBarStore.d.ts +3 -3
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js +213 -217
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
- package/react/hooks/useDashbar.js.map +1 -1
- package/react/hooks/useFavoritesShell.js.map +1 -1
- package/react/hooks/useNotifications.d.ts +1 -1
- package/react/hooks/useNotifications.js.map +1 -1
- package/react/reducers/rootReducer.d.ts +11 -3
- package/react/reducers/smartDesktopDesignerReducer.js +8 -0
- package/react/reducers/smartDesktopDesignerReducer.js.map +1 -1
- package/react/store.d.ts +22 -6
- package/react/types/fdc3.d.ts +2 -2
- package/react/types/fdc3.js.map +1 -1
- package/react/types/searchTypes.d.ts +1 -8
- package/react/types/searchTypes.js.map +1 -1
- package/react/types/smartDesktopDesignerTypes.d.ts +8 -2
- package/react/types/smartDesktopDesignerTypes.js.map +1 -1
- package/react/types/windowTitleBar.d.ts +1 -1
- package/react/types/windowTitleBar.js.map +1 -1
- package/react/components/smartDesktopDesigner/ApplicationList.d.ts +0 -16
- package/react/components/smartDesktopDesigner/ApplicationList.js +0 -60
- package/react/components/smartDesktopDesigner/ApplicationList.js.map +0 -1
- package/react/components/smartDesktopDesigner/stories/ApplicationList.stories.d.ts +0 -16
- package/react/components/smartDesktopDesigner/stories/ApplicationList.stories.js.map +0 -1
- package/react/components/smartDesktopDesigner/tests/ApplicationList.spec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreActions.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/advancedAppLauncher/stores/StoreActions.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { findIndex } from \"lodash\";\nimport { getStore } from \"./LauncherStore\";\nimport AppDirectory from \"../modules/AppDirectory\";\nimport FDC3 from \"../modules/FDC3\";\nimport { iconFromConfig } from \"../../../icon/Icon\";\nimport { FoldersType, FolderAppType } from \"../../../../types/advancedAppLauncherTypes\";\nimport { StandardError } from \"@finsemble/finsemble-core/types/types\";\nimport sortFunctions from \"../utils/sort-functions\";\nconst async = require(\"async\");\nlet FDC3Client: FDC3;\nlet appd: any;\nlet appDEndpoint: any;\n\ntype ComponentDescriptor = Record<string, any>;\ntype ComponentList = Record<string, ComponentDescriptor>;\n\ntype AppsType = {\n\tappID: string;\n\ttags: string[];\n\tname: string;\n\turl: string;\n\ttype: string;\n\tcanDelete: boolean;\n\tdisplayName?: string;\n};\ntype ConfigType = {\n\tappID: string;\n\ticon: any;\n\tname: string;\n\tdisplayName: string;\n\tsource: string;\n\ttags: string[];\n};\ntype DataType = {\n\tfolders: FoldersType[\"folders\"];\n\tfoldersList: FoldersType[\"list\"];\n\tapps: {\n\t\t[field: string]: AppsType;\n\t};\n\ttags: string[];\n\tactiveFolder: string;\n\tfilterText: string;\n\tsortBy: keyof typeof sortFunctions;\n\tisFormVisible: boolean;\n\tconfigComponents: {\n\t\t[field: string]: ConfigType;\n\t};\n};\n\nexport default {\n\tinitialize,\n\taddApp,\n\taddNewFolder,\n\taddAppToFolder,\n\tremoveAppFromFolder,\n\trenameFolder,\n\tdeleteFolder,\n\tdeleteApp,\n\tdeleteTag,\n\treorderFolders,\n\tgetFolders,\n\tgetFoldersList,\n\tgetActiveFolderName,\n\tgetActiveFolder,\n\tgetSingleFolder,\n\tgetAllAppsTags,\n\tgetAllApps,\n\tgetAllAppsFromFolder,\n\tgetFormStatus,\n\tgetSearchText,\n\tgetSortBy,\n\taddTag,\n\tgetTags,\n\tgetApp,\n\tgetDragDisabled,\n\tgetConstants,\n\tfindAppByField,\n\tgetApps,\n\trefreshAppDefinitions,\n};\n\nlet data = <DataType>{};\nconst ADVANCED_APP_LAUNCHER = \"Advanced App Launcher\";\nconst NEW_FOLDER_NAME = \"New folder\";\n// returns names of default folders.\nfunction getConstants() {\n\tconst DASHBOARDS = \"Dashboards\";\n\tconst FAVORITES = \"Favorites\";\n\treturn { ADVANCED_APP_LAUNCHER, DASHBOARDS, FAVORITES };\n}\n\n// Add to here if you want to disable dragging on a folder.\nfunction getDragDisabled() {\n\tconst { DASHBOARDS, FAVORITES } = getConstants();\n\treturn [ADVANCED_APP_LAUNCHER, DASHBOARDS, FAVORITES];\n}\n\nfunction initialize(callback = Function.prototype) {\n\tFSBL.Clients.ConfigClient.getValue({ field: \"finsemble.appDirectoryEndpoint\" }, (_, appDirectoryEndpoint) => {\n\t\t// cache value globally to be used in the event that we need to fetch data for a given component.\n\t\tappDEndpoint = appDirectoryEndpoint;\n\t\tconst store = getStore();\n\t\tdata.folders = store?.values.appFolders.folders;\n\t\tdata.foldersList = store?.values.appFolders.list;\n\t\tvalidateFolderDataStructure();\n\t\tdata.apps = store?.values.appDefinitions;\n\t\tdata.tags = store?.values.activeLauncherTags;\n\t\tdata.activeFolder = store?.values.activeFolder;\n\t\tdata.filterText = store?.values.filterText;\n\t\tdata.sortBy = store?.values.sortBy;\n\t\tdata.isFormVisible = store?.values.isFormVisible;\n\t\tdata.configComponents = {};\n\n\t\t// Add listeners to keep our copy up to date\n\t\tstore?.addListener({ field: \"appFolders.folders\" }, (foldersErr, dt) => {\n\t\t\tdata.folders = dt.value;\n\t\t});\n\t\tstore?.addListener({ field: \"appFolders.list\" }, (folderListErr, dt) => (data.foldersList = dt.value));\n\t\tstore?.addListener({ field: \"appDefinitions\" }, (appDefinitionsErr, dt) => (data.apps = dt.value));\n\t\tstore?.addListener({ field: \"activeFolder\" }, (activeFolderErr, dt) => {\n\t\t\tdata.activeFolder = dt.value;\n\t\t});\n\t\tstore?.addListener({ field: \"isFormVisible\" }, (visibilityErr, dt) => (data.isFormVisible = dt.value));\n\t\tstore?.addListener({ field: \"sortBy\" }, (sortErr, dt) => (data.sortBy = dt.value));\n\t\tstore?.addListener({ field: \"activeLauncherTags\" }, (launcherTagsErr, dt) => (data.tags = dt.value));\n\t\tstore?.addListener({ field: \"filterText\" }, (filterTextErr, dt) => (data.filterText = dt.value));\n\n\t\tFSBL.Clients.RouterClient.subscribe(\"Launcher.update\", (err, response) => {\n\t\t\tFSBL.Clients.Logger.debug(\"list updated\", err, response);\n\t\t\tif (err) {\n\t\t\t\treturn console.error(err);\n\t\t\t}\n\t\t\trefreshAppDefinitions(response.data.componentList);\n\t\t});\n\n\t\tFSBL.Clients.RouterClient.subscribe(\"Finsemble.Service.State.launcherService\", (unsubscribeErr) => {\n\t\t\tif (unsubscribeErr) {\n\t\t\t\tFSBL.Clients.Logger.error(\n\t\t\t\t\t\"App Launcher encountered an error unsubscribing from the launcher service\",\n\t\t\t\t\tunsubscribeErr\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tloadInstalledComponentsFromStore(() => {\n\t\t\t\t// We load our stored components(config driven) here\n\t\t\t\tloadInstalledConfigComponents(() => {\n\t\t\t\t\tupdateAppsInFolders(callback);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n}\n\n// This gets a specific app in FDC3 and returns the results\nfunction getApp(appID: string, cb = Function.prototype) {\n\tappd\n\t\t.get(appID)\n\t\t.then((app: any) => cb(null, app))\n\t\t.catch((err: StandardError) => cb(err));\n}\n/**\n * Ensures all 'apps' properties on folders conform\n * to the new structure (Array vs object)\n */\nfunction validateFolderDataStructure() {\n\tObject.keys(data.folders).forEach((folderName) => {\n\t\tconst folder = data.folders[folderName];\n\t\tif (!Array.isArray(folder.apps)) {\n\t\t\tconst warning =\n\t\t\t\t\"Application Launcher Persistent Store has data stored in deprecated format. Please check distributedStore configs\";\n\t\t\t// If the structure is wrong, notify the user in hopes that the foundation will be fixed\n\t\t\tFSBL.Clients.Logger.warn(warning);\n\t\t\tFSBL.UserNotification.alert(\"system\", \"ONCE-SINCE-STARTUP\", \"Distributed Store Type Mismatch\", warning);\n\t\t\tlet newApps: FolderAppType[] = [];\n\t\t\tObject.values(folder.apps).forEach((app: any) => {\n\t\t\t\tnewApps.push(app);\n\t\t\t});\n\t\t\tfolder.apps = newApps;\n\t\t}\n\t});\n\t_setFolders();\n}\n\n// Update apps in folders with updated config information\nfunction updateAppsInFolders(cb = Function.prototype) {\n\t// Loop through folders and update apps with new info\n\tconst { ADVANCED_APP_LAUNCHER: advancedAppLauncherFolderName } = getConstants();\n\tObject.keys(data.folders).forEach((folderName) => {\n\t\tif (folderName === advancedAppLauncherFolderName) return;\n\t\telse {\n\t\t\tconst folder = data.folders[folderName];\n\t\t\tObject.values(data.configComponents).forEach((configComp) => {\n\t\t\t\tlet index = -1;\n\t\t\t\tfolder.apps.forEach((folderApp, i) => {\n\t\t\t\t\tif (folderApp.appID.toString().trim() === configComp.appID.toString().trim()) {\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tdata.folders[folderName].apps.splice(index, 1, configComp);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t_setFolders(cb);\n}\n\n/**\n * Given a component config, will return tags, or an empty array.\n *\n * @param {*} componentConfig\n * @returns\n */\nfunction extractTagsFromFinsembleComponentConfig(componentConfig: ComponentDescriptor) {\n\tif (!componentConfig.foreign) return [];\n\tif (!componentConfig.foreign.components) return [];\n\tif (!componentConfig.foreign.components[\"App Launcher\"]) return [];\n\n\tconst { tags } = componentConfig.foreign.components[\"App Launcher\"];\n\n\tif (tags) {\n\t\tif (typeof tags === \"string\") {\n\t\t\treturn [tags];\n\t\t}\n\t\treturn tags;\n\t}\n\n\treturn [];\n}\n/**\n * Instantiates classes needed to interact with the appD server.\n * Only done when needed. If there are no components with source 'FDC3', this code will not execute.\n */\nfunction lazyLoadAppD() {\n\tif (!FDC3Client) FDC3Client = new FDC3({ url: appDEndpoint });\n\tif (!appd) appd = new AppDirectory(FDC3Client) as FDC3;\n}\n\n/**\n * Here we load apps from FDC3\n * @param {*} cb\n */\nfunction loadInstalledComponentsFromStore(cb = Function.prototype) {\n\tasync.map(\n\t\tObject.values(data.apps),\n\t\t(component: any, componentDone: any) => {\n\t\t\t// Load FDC3 components here\n\t\t\tif (component.source && component.source === \"FDC3\") {\n\t\t\t\tlazyLoadAppD();\n\t\t\t\t// get the app info so we can load it into the launcher\n\t\t\t\treturn getApp(component.appID, (err: StandardError) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\t// don't want to kill this;\n\t\t\t\t\t\tdeleteApp(component.appID);\n\t\t\t\t\t\tconsole.error(\"there was an error loading from FDC3\", component, err);\n\t\t\t\t\t}\n\t\t\t\t\treturn componentDone();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Assumption - component is always a user defined component\n\t\t\t// when testing I was never able to get any other component types in this method\n\t\t\tFSBL.Clients.LauncherClient.addUserDefinedComponent(component, (compAddErr) => {\n\t\t\t\tif (compAddErr) {\n\t\t\t\t\tconsole.warn(\"Failed to add new app:\", compAddErr);\n\t\t\t\t}\n\t\t\t\tcomponentDone(compAddErr);\n\t\t\t});\n\t\t},\n\t\t(err: StandardError) => {\n\t\t\tcb(err);\n\t\t}\n\t);\n}\n\n// We load our apps that were loaded from the config.\nfunction loadInstalledConfigComponents(cb = Function.prototype) {\n\t// Get the list of components from the launcher service\n\tFSBL.Clients.LauncherClient.getComponentList((err, componentList) => {\n\t\t/*\n\t\t * Update the folders under the \"App\" menu and delete any apps in the folder\n\t\t * that are no longer in the config and are not user defined components.\n\t\t */\n\t\trefreshAppDefinitions(componentList || {});\n\t\tcb();\n\t});\n}\n\nfunction getApps() {\n\treturn data.apps;\n}\n\nfunction refreshAppDefinitions(componentList: ComponentList) {\n\tconst componentTypeList = Object.keys(componentList);\n\n\tconst { folders } = data;\n\t// Get the user defined apps\n\tconst apps = Object.keys(data.apps);\n\tObject.keys(folders).forEach((folderName) => {\n\t\tfolders[folderName].apps.forEach((configDefinedApp, i) => {\n\t\t\tconst { name, appID } = configDefinedApp;\n\t\t\t// If the component is not in the config component list and is not a user defined component\n\t\t\tif (!componentTypeList.includes(name) && !apps.includes(appID)) {\n\t\t\t\t// Delete app from the folder\n\t\t\t\tfolders[folderName].apps.splice(i, 1);\n\t\t\t}\n\t\t});\n\t});\n\n\tcomponentTypeList.forEach((componentType) => {\n\t\tconst component = componentList?.[componentType];\n\t\tif (component && component.component) {\n\t\t\tconst launchableByUser = component?.foreign?.components?.[\"App Launcher\"]?.launchableByUser;\n\n\t\t\tconst displayName = component.component.displayName ?? componentType;\n\t\t\tconst iconObject = iconFromConfig(component?.foreign?.components?.Toolbar, displayName);\n\t\t\t// Make sure the app is launchable by user\n\t\t\tif (launchableByUser && !component.component.isUserDefined) {\n\t\t\t\tdata.configComponents[componentType] = {\n\t\t\t\t\tappID: componentType,\n\t\t\t\t\ticon: iconObject,\n\t\t\t\t\tname: componentType,\n\t\t\t\t\tdisplayName,\n\t\t\t\t\tsource: \"config\",\n\t\t\t\t\ttags: extractTagsFromFinsembleComponentConfig(component),\n\t\t\t\t};\n\t\t\t} else if (!launchableByUser && data.configComponents[componentType]) {\n\t\t\t\tdelete data.configComponents[componentType];\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction _setValue(field: string, value: any, cb: any) {\n\tgetStore()?.setValue(\n\t\t{\n\t\t\tfield: field,\n\t\t\tvalue: value,\n\t\t},\n\t\t(error) => {\n\t\t\tif (error) {\n\t\t\t\tFSBL.Clients.Logger.error(`Advanced App Launcher: Failed to save: ${field}:${value}`);\n\t\t\t} else {\n\t\t\t\tcb && cb();\n\t\t\t}\n\t\t}\n\t);\n}\n\nfunction _setFolders(cb = Function.prototype) {\n\t_setValue(\"appFolders.folders\", data.folders, (err: StandardError) => {\n\t\tif (err) {\n\t\t\tFSBL.Clients.Logger.error(`Advanced App Launcher: Failed to set folders: ${err}`);\n\t\t\treturn;\n\t\t}\n\n\t\tcb();\n\t});\n}\n\nfunction _findAppIndexInFolders(appID: string, folderName: string) {\n\treturn findIndex(data.folders[folderName].apps, (app) => app.appID === appID);\n}\n\nfunction getFolders() {\n\treturn data.folders;\n}\n\nfunction getFoldersList() {\n\treturn data.foldersList;\n}\n\nfunction getAllApps() {\n\treturn Object.assign({}, data.apps, data.configComponents);\n}\n\nfunction getFormStatus() {\n\treturn data.isFormVisible;\n}\n\nfunction getSingleFolder(folderName: string) {\n\treturn data.folders[folderName];\n}\n\nfunction reorderFolders(destIndex: number, srcIndex: number) {\n\t// There are two types of folders: Those that can be arranged, and those that cannot. We don't want to reorder the folders relative to the unorderable folders. Split them out, and then combine them after doing the filtering/swapping.\n\tconst dragDisabled = getDragDisabled();\n\tconst unorderableFolders = data.foldersList.filter((folderName) => dragDisabled.includes(folderName));\n\tconst orderableFolders = data.foldersList.filter((folderName) => !dragDisabled.includes(folderName));\n\tconst movedFolder = orderableFolders[destIndex];\n\tconst remainingItems = orderableFolders.filter((item, index) => index !== destIndex);\n\tdata.foldersList = [\n\t\t...unorderableFolders,\n\t\t...remainingItems.slice(0, srcIndex),\n\t\tmovedFolder,\n\t\t...remainingItems.slice(srcIndex),\n\t];\n\t_setValue(\"appFolders.list\", data.foldersList, () => {});\n\treturn data.foldersList;\n}\n\nfunction addApp(app = <AppsType>{}, cb: any) {\n\tconst appID = `${new Date().getTime()}`;\n\tconst folder = data.activeFolder;\n\tconst newAppData = {\n\t\tappID,\n\t\ttags: app.tags,\n\t\tname: app.name,\n\t\turl: app.url,\n\t\ttype: \"component\",\n\t\tcanDelete: true,\n\t};\n\n\t/**\n\t * Note, the advanced app launcher can currently only keep track of apps that\n\t * are added by itself. Apps added by the basic launcher, or any other means,\n\t * will not be detected. A reconciliation process would need to be added that\n\t * listens on the distributed store similar to how the basic app launcher works.\n\t *\n\t * FSBL.Clients.RouterClient.subscribe(\"Launcher.update\", (err, response) => {\n\t\t\tFSBL.Clients.Logger.debug(\"list updated\", err, response);\n\t\t\tif (err) {\n\t\t\t\treturn console.error(err);\n\t\t\t}\n\t\t\tself.filterComponents(response.data.componentList);\n\t\t});\n\t */\n\tFSBL.Clients.LauncherClient.addUserDefinedComponent(newAppData, (compAddErr) => {\n\t\tif (compAddErr) {\n\t\t\tcb({ code: \"failed_to_add_app\", message: compAddErr });\n\t\t\tconsole.warn(\"Failed to add new app:\", compAddErr);\n\t\t\treturn;\n\t\t}\n\t\tdata.apps[appID] = newAppData;\n\n\t\t// Add to ADVANCED_APP_LAUNCHER folder\n\t\tdata.folders[ADVANCED_APP_LAUNCHER].apps.push(newAppData);\n\n\t\t// Check if we need to add to another folder as well\n\t\tif (folder !== ADVANCED_APP_LAUNCHER) {\n\t\t\tdata.folders[folder].apps.push(newAppData);\n\t\t}\n\t\t// Save appDefinitions and then folders\n\t\t_setValue(\"appDefinitions\", data.apps, () => {\n\t\t\t_setFolders();\n\t\t\tcb && cb();\n\t\t});\n\t});\n}\n\nfunction deleteApp(appID: string) {\n\t// Delete app from any folder that has it\n\tfor (const key in data.folders) {\n\t\tconst appIndex = _findAppIndexInFolders(appID, key);\n\t\tdata.folders[key].apps.splice(appIndex, 1);\n\t}\n\n\t// Delete app from the apps list\n\tFSBL.Clients.LauncherClient.removeUserDefinedComponent(data.apps[appID], () => {\n\t\tdelete data.apps[appID];\n\t\t// Save appDefinitions and then folders\n\t\t_setValue(\"appDefinitions\", data.apps, () => {\n\t\t\t_setFolders();\n\t\t});\n\t});\n}\n\nfunction addNewFolder(name?: string) {\n\t// Each new folder is given a number, lets store them here\n\t// to get the highest one and then increment\n\t// result of this will be [0, 1, 2] etc\n\tconst newFoldersNums = [\n\t\t0,\n\t\t// Find folders that have a name of \"New folder\" or \"New folder #\"\n\t\t...data.foldersList\n\t\t\t.filter((folder) => folder.startsWith(NEW_FOLDER_NAME))\n\t\t\t.map((folder) => {\n\t\t\t\tconst numbers: any[] = folder.match(/\\d+/g) || [];\n\t\t\t\treturn Math.max(...numbers);\n\t\t\t}),\n\t];\n\tconst highestFolderNumber = Math.max(...newFoldersNums);\n\tconst folderName: string = name ?? `${NEW_FOLDER_NAME} ${highestFolderNumber + 1}`;\n\tconst newFolder = {\n\t\tdisableUserRemove: true,\n\t\ticon: \"ff-adp-hamburger\",\n\t\tcanEdit: true,\n\t\tcanDelete: true,\n\t\tapps: [],\n\t};\n\tdata.folders[folderName] = newFolder;\n\t_setFolders(() => {\n\t\t// Update folders order if adding was successful\n\t\tdata.foldersList.push(folderName);\n\t\t_setValue(\"appFolders.list\", data.foldersList, () => {});\n\t});\n}\n\nfunction deleteFolder(folderName: string) {\n\t// Check if user is trying to delete the active folder\n\tif (folderName === data.activeFolder) {\n\t\tdata.activeFolder = ADVANCED_APP_LAUNCHER;\n\t\t_setValue(\"activeFolder\", data.activeFolder, () => {});\n\t}\n\n\tdelete data.folders[folderName] &&\n\t\t_setFolders(() => {\n\t\t\t// Update the order of folders\n\t\t\tconst index = data.foldersList.indexOf(folderName);\n\t\t\tdata.foldersList.splice(index, 1);\n\t\t\t_setValue(\"appFolders.list\", data.foldersList, () => {});\n\t\t});\n}\n\nfunction renameFolder(oldName: string, newName: string) {\n\tlet indexOfOld = data.foldersList.findIndex((folderName) => folderName === oldName);\n\n\tif (indexOfOld > -1) {\n\t\tlet oldFolder = data.folders[oldName];\n\t\tdata.folders[newName] = oldFolder;\n\t\tdata.foldersList.splice(indexOfOld, 1, newName);\n\n\t\t_setFolders(() => {\n\t\t\t_setValue(\"appFolders.list\", data.foldersList, () => {});\n\n\t\t\tif (data.activeFolder === oldName) {\n\t\t\t\t_setValue(\"activeFolder\", newName, () => {});\n\t\t\t}\n\n\t\t\tdelete data.folders[oldName];\n\t\t});\n\t}\n}\n\nfunction addAppToFolder(folderName: string, app: FolderAppType) {\n\tconst appIndex = _findAppIndexInFolders(app.appID, folderName);\n\n\tif (appIndex < 0) {\n\t\tdata.folders[folderName].apps.push({\n\t\t\tname: app.name,\n\t\t\tdisplayName: app.displayName,\n\t\t\tappID: app.appID,\n\t\t});\n\t\t_setFolders();\n\t}\n}\n\nfunction removeAppFromFolder(folderName: string, app: FolderAppType) {\n\tconst appIndex = _findAppIndexInFolders(app.appID, folderName);\n\tdata.folders[folderName].apps.splice(appIndex, 1);\n\t_setFolders();\n}\n\nfunction getAllAppsFromFolder(folderName: string) {\n\treturn data.folders[folderName].apps;\n}\n\n/**\n * Given a field, search through FDC3 apps and apps pulled in via config and return that app.\n * */\nfunction findAppByField(field: keyof AppsType | keyof ConfigType, value: any) {\n\treturn (\n\t\tObject.values(data.apps).find((app) => (app ? (app as any)[field] === value : false)) ||\n\t\tObject.values(data.configComponents).find((app) => (app ? (app as any)[field] === value : false))\n\t);\n}\n\nfunction getActiveFolder() {\n\tconst folder = data.folders[data.activeFolder];\n\n\tif (!folder) {\n\t\tFSBL.Clients.Logger.error(`activeFolder:\"${data.activeFolder}\" not found! Defaulting to empty folder`);\n\t\treturn {\n\t\t\tname: data.activeFolder,\n\t\t\tapps: [],\n\t\t};\n\t}\n\n\tObject.values(folder.apps).forEach((app) => {\n\t\tconst appData = findAppByField(\"appID\", app.appID);\n\t\tif (!appData) {\n\t\t\tapp.tags = [];\n\t\t} else {\n\t\t\tapp.tags = appData.tags;\n\t\t}\n\t});\n\t// Need a name for the AppDefinition/AppActionsMenu rendering\n\tfolder.name = data.activeFolder;\n\treturn folder;\n}\n\nfunction getActiveFolderName() {\n\treturn data.activeFolder;\n}\n\nfunction getSearchText() {\n\treturn data.filterText;\n}\n\nfunction getSortBy() {\n\treturn data.sortBy;\n}\n\nfunction getTags() {\n\treturn data.tags;\n}\n\nfunction getAllAppsTags() {\n\tlet tags: any[] = [];\n\t// Pull tags from applications installed via FDC3 and the component config.\n\tconst apps = Object.values(data.apps).concat(Object.values(data.configComponents) as any);\n\n\tapps.forEach((app) => {\n\t\ttags = tags.concat(app.tags);\n\t});\n\t// return unique ones only\n\treturn tags.filter((tag, index) => tags.indexOf(tag) === index);\n}\n\nfunction addTag(tag: string) {\n\t// Push new tag to list\n\tdata.tags.indexOf(tag) < 0 && data.tags.push(tag);\n\t// Update tags in store\n\t_setValue(\"activeLauncherTags\", data.tags, () => {});\n}\n\nfunction deleteTag(tag: string) {\n\t// Push new tag to list\n\tdata.tags.splice(data.tags.indexOf(tag), 1);\n\t// Update tags in store\n\t_setValue(\"activeLauncherTags\", data.tags, () => {});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"StoreActions.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/advancedAppLauncher/stores/StoreActions.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { findIndex } from \"lodash\";\nimport { getStore } from \"./LauncherStore\";\nimport AppDirectory from \"../modules/AppDirectory\";\nimport FDC3 from \"../modules/FDC3\";\nimport { iconFromConfig } from \"../../../icon/Icon\";\nimport { FoldersType, FolderAppType } from \"../../../../types/advancedAppLauncherTypes\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport sortFunctions from \"../utils/sort-functions\";\nconst async = require(\"async\");\nlet FDC3Client: FDC3;\nlet appd: any;\nlet appDEndpoint: any;\n\ntype ComponentDescriptor = Record<string, any>;\ntype ComponentList = Record<string, ComponentDescriptor>;\n\ntype AppsType = {\n\tappID: string;\n\ttags: string[];\n\tname: string;\n\turl: string;\n\ttype: string;\n\tcanDelete: boolean;\n\tdisplayName?: string;\n};\ntype ConfigType = {\n\tappID: string;\n\ticon: any;\n\tname: string;\n\tdisplayName: string;\n\tsource: string;\n\ttags: string[];\n};\ntype DataType = {\n\tfolders: FoldersType[\"folders\"];\n\tfoldersList: FoldersType[\"list\"];\n\tapps: {\n\t\t[field: string]: AppsType;\n\t};\n\ttags: string[];\n\tactiveFolder: string;\n\tfilterText: string;\n\tsortBy: keyof typeof sortFunctions;\n\tisFormVisible: boolean;\n\tconfigComponents: {\n\t\t[field: string]: ConfigType;\n\t};\n};\n\nexport default {\n\tinitialize,\n\taddApp,\n\taddNewFolder,\n\taddAppToFolder,\n\tremoveAppFromFolder,\n\trenameFolder,\n\tdeleteFolder,\n\tdeleteApp,\n\tdeleteTag,\n\treorderFolders,\n\tgetFolders,\n\tgetFoldersList,\n\tgetActiveFolderName,\n\tgetActiveFolder,\n\tgetSingleFolder,\n\tgetAllAppsTags,\n\tgetAllApps,\n\tgetAllAppsFromFolder,\n\tgetFormStatus,\n\tgetSearchText,\n\tgetSortBy,\n\taddTag,\n\tgetTags,\n\tgetApp,\n\tgetDragDisabled,\n\tgetConstants,\n\tfindAppByField,\n\tgetApps,\n\trefreshAppDefinitions,\n};\n\nlet data = <DataType>{};\nconst ADVANCED_APP_LAUNCHER = \"Advanced App Launcher\";\nconst NEW_FOLDER_NAME = \"New folder\";\n// returns names of default folders.\nfunction getConstants() {\n\tconst DASHBOARDS = \"Dashboards\";\n\tconst FAVORITES = \"Favorites\";\n\treturn { ADVANCED_APP_LAUNCHER, DASHBOARDS, FAVORITES };\n}\n\n// Add to here if you want to disable dragging on a folder.\nfunction getDragDisabled() {\n\tconst { DASHBOARDS, FAVORITES } = getConstants();\n\treturn [ADVANCED_APP_LAUNCHER, DASHBOARDS, FAVORITES];\n}\n\nfunction initialize(callback = Function.prototype) {\n\tFSBL.Clients.ConfigClient.getValue({ field: \"finsemble.appDirectoryEndpoint\" }, (_, appDirectoryEndpoint) => {\n\t\t// cache value globally to be used in the event that we need to fetch data for a given component.\n\t\tappDEndpoint = appDirectoryEndpoint;\n\t\tconst store = getStore();\n\t\tdata.folders = store?.values.appFolders.folders;\n\t\tdata.foldersList = store?.values.appFolders.list;\n\t\tvalidateFolderDataStructure();\n\t\tdata.apps = store?.values.appDefinitions;\n\t\tdata.tags = store?.values.activeLauncherTags;\n\t\tdata.activeFolder = store?.values.activeFolder;\n\t\tdata.filterText = store?.values.filterText;\n\t\tdata.sortBy = store?.values.sortBy;\n\t\tdata.isFormVisible = store?.values.isFormVisible;\n\t\tdata.configComponents = {};\n\n\t\t// Add listeners to keep our copy up to date\n\t\tstore?.addListener({ field: \"appFolders.folders\" }, (foldersErr, dt) => {\n\t\t\tdata.folders = dt.value;\n\t\t});\n\t\tstore?.addListener({ field: \"appFolders.list\" }, (folderListErr, dt) => (data.foldersList = dt.value));\n\t\tstore?.addListener({ field: \"appDefinitions\" }, (appDefinitionsErr, dt) => (data.apps = dt.value));\n\t\tstore?.addListener({ field: \"activeFolder\" }, (activeFolderErr, dt) => {\n\t\t\tdata.activeFolder = dt.value;\n\t\t});\n\t\tstore?.addListener({ field: \"isFormVisible\" }, (visibilityErr, dt) => (data.isFormVisible = dt.value));\n\t\tstore?.addListener({ field: \"sortBy\" }, (sortErr, dt) => (data.sortBy = dt.value));\n\t\tstore?.addListener({ field: \"activeLauncherTags\" }, (launcherTagsErr, dt) => (data.tags = dt.value));\n\t\tstore?.addListener({ field: \"filterText\" }, (filterTextErr, dt) => (data.filterText = dt.value));\n\n\t\tFSBL.Clients.RouterClient.subscribe(\"Launcher.update\", (err, response) => {\n\t\t\tFSBL.Clients.Logger.debug(\"list updated\", err, response);\n\t\t\tif (err) {\n\t\t\t\treturn console.error(err);\n\t\t\t}\n\t\t\trefreshAppDefinitions(response.data.componentList);\n\t\t});\n\n\t\tFSBL.Clients.RouterClient.subscribe(\"Finsemble.Service.State.launcherService\", (unsubscribeErr) => {\n\t\t\tif (unsubscribeErr) {\n\t\t\t\tFSBL.Clients.Logger.error(\n\t\t\t\t\t\"App Launcher encountered an error unsubscribing from the launcher service\",\n\t\t\t\t\tunsubscribeErr\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tloadInstalledComponentsFromStore(() => {\n\t\t\t\t// We load our stored components(config driven) here\n\t\t\t\tloadInstalledConfigComponents(() => {\n\t\t\t\t\tupdateAppsInFolders(callback);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n}\n\n// This gets a specific app in FDC3 and returns the results\nfunction getApp(appID: string, cb = Function.prototype) {\n\tappd\n\t\t.get(appID)\n\t\t.then((app: any) => cb(null, app))\n\t\t.catch((err: StandardError) => cb(err));\n}\n/**\n * Ensures all 'apps' properties on folders conform\n * to the new structure (Array vs object)\n */\nfunction validateFolderDataStructure() {\n\tObject.keys(data.folders).forEach((folderName) => {\n\t\tconst folder = data.folders[folderName];\n\t\tif (!Array.isArray(folder.apps)) {\n\t\t\tconst warning =\n\t\t\t\t\"Application Launcher Persistent Store has data stored in deprecated format. Please check distributedStore configs\";\n\t\t\t// If the structure is wrong, notify the user in hopes that the foundation will be fixed\n\t\t\tFSBL.Clients.Logger.warn(warning);\n\t\t\tFSBL.UserNotification.alert(\"system\", \"ONCE-SINCE-STARTUP\", \"Distributed Store Type Mismatch\", warning);\n\t\t\tlet newApps: FolderAppType[] = [];\n\t\t\tObject.values(folder.apps).forEach((app: any) => {\n\t\t\t\tnewApps.push(app);\n\t\t\t});\n\t\t\tfolder.apps = newApps;\n\t\t}\n\t});\n\t_setFolders();\n}\n\n// Update apps in folders with updated config information\nfunction updateAppsInFolders(cb = Function.prototype) {\n\t// Loop through folders and update apps with new info\n\tconst { ADVANCED_APP_LAUNCHER: advancedAppLauncherFolderName } = getConstants();\n\tObject.keys(data.folders).forEach((folderName) => {\n\t\tif (folderName === advancedAppLauncherFolderName) return;\n\t\telse {\n\t\t\tconst folder = data.folders[folderName];\n\t\t\tObject.values(data.configComponents).forEach((configComp) => {\n\t\t\t\tlet index = -1;\n\t\t\t\tfolder.apps.forEach((folderApp, i) => {\n\t\t\t\t\tif (folderApp.appID.toString().trim() === configComp.appID.toString().trim()) {\n\t\t\t\t\t\tindex = i;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tdata.folders[folderName].apps.splice(index, 1, configComp);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t_setFolders(cb);\n}\n\n/**\n * Given a component config, will return tags, or an empty array.\n *\n * @param {*} componentConfig\n * @returns\n */\nfunction extractTagsFromFinsembleComponentConfig(componentConfig: ComponentDescriptor) {\n\tif (!componentConfig.foreign) return [];\n\tif (!componentConfig.foreign.components) return [];\n\tif (!componentConfig.foreign.components[\"App Launcher\"]) return [];\n\n\tconst { tags } = componentConfig.foreign.components[\"App Launcher\"];\n\n\tif (tags) {\n\t\tif (typeof tags === \"string\") {\n\t\t\treturn [tags];\n\t\t}\n\t\treturn tags;\n\t}\n\n\treturn [];\n}\n/**\n * Instantiates classes needed to interact with the appD server.\n * Only done when needed. If there are no components with source 'FDC3', this code will not execute.\n */\nfunction lazyLoadAppD() {\n\tif (!FDC3Client) FDC3Client = new FDC3({ url: appDEndpoint });\n\tif (!appd) appd = new AppDirectory(FDC3Client) as FDC3;\n}\n\n/**\n * Here we load apps from FDC3\n * @param {*} cb\n */\nfunction loadInstalledComponentsFromStore(cb = Function.prototype) {\n\tasync.map(\n\t\tObject.values(data.apps),\n\t\t(component: any, componentDone: any) => {\n\t\t\t// Load FDC3 components here\n\t\t\tif (component.source && component.source === \"FDC3\") {\n\t\t\t\tlazyLoadAppD();\n\t\t\t\t// get the app info so we can load it into the launcher\n\t\t\t\treturn getApp(component.appID, (err: StandardError) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\t// don't want to kill this;\n\t\t\t\t\t\tdeleteApp(component.appID);\n\t\t\t\t\t\tconsole.error(\"there was an error loading from FDC3\", component, err);\n\t\t\t\t\t}\n\t\t\t\t\treturn componentDone();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Assumption - component is always a user defined component\n\t\t\t// when testing I was never able to get any other component types in this method\n\t\t\tFSBL.Clients.LauncherClient.addUserDefinedComponent(component, (compAddErr) => {\n\t\t\t\tif (compAddErr) {\n\t\t\t\t\tconsole.warn(\"Failed to add new app:\", compAddErr);\n\t\t\t\t}\n\t\t\t\tcomponentDone(compAddErr);\n\t\t\t});\n\t\t},\n\t\t(err: StandardError) => {\n\t\t\tcb(err);\n\t\t}\n\t);\n}\n\n// We load our apps that were loaded from the config.\nfunction loadInstalledConfigComponents(cb = Function.prototype) {\n\t// Get the list of components from the launcher service\n\tFSBL.Clients.LauncherClient.getComponentList((err, componentList) => {\n\t\t/*\n\t\t * Update the folders under the \"App\" menu and delete any apps in the folder\n\t\t * that are no longer in the config and are not user defined components.\n\t\t */\n\t\trefreshAppDefinitions(componentList || {});\n\t\tcb();\n\t});\n}\n\nfunction getApps() {\n\treturn data.apps;\n}\n\nfunction refreshAppDefinitions(componentList: ComponentList) {\n\tconst componentTypeList = Object.keys(componentList);\n\n\tconst { folders } = data;\n\t// Get the user defined apps\n\tconst apps = Object.keys(data.apps);\n\tObject.keys(folders).forEach((folderName) => {\n\t\tfolders[folderName].apps.forEach((configDefinedApp, i) => {\n\t\t\tconst { name, appID } = configDefinedApp;\n\t\t\t// If the component is not in the config component list and is not a user defined component\n\t\t\tif (!componentTypeList.includes(name) && !apps.includes(appID)) {\n\t\t\t\t// Delete app from the folder\n\t\t\t\tfolders[folderName].apps.splice(i, 1);\n\t\t\t}\n\t\t});\n\t});\n\n\tcomponentTypeList.forEach((componentType) => {\n\t\tconst component = componentList?.[componentType];\n\t\tif (component && component.component) {\n\t\t\tconst launchableByUser = component?.foreign?.components?.[\"App Launcher\"]?.launchableByUser;\n\n\t\t\tconst displayName = component.component.displayName ?? componentType;\n\t\t\tconst iconObject = iconFromConfig(component?.foreign?.components?.Toolbar, displayName);\n\t\t\t// Make sure the app is launchable by user\n\t\t\tif (launchableByUser && !component.component.isUserDefined) {\n\t\t\t\tdata.configComponents[componentType] = {\n\t\t\t\t\tappID: componentType,\n\t\t\t\t\ticon: iconObject,\n\t\t\t\t\tname: componentType,\n\t\t\t\t\tdisplayName,\n\t\t\t\t\tsource: \"config\",\n\t\t\t\t\ttags: extractTagsFromFinsembleComponentConfig(component),\n\t\t\t\t};\n\t\t\t} else if (!launchableByUser && data.configComponents[componentType]) {\n\t\t\t\tdelete data.configComponents[componentType];\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction _setValue(field: string, value: any, cb: any) {\n\tgetStore()?.setValue(\n\t\t{\n\t\t\tfield: field,\n\t\t\tvalue: value,\n\t\t},\n\t\t(error) => {\n\t\t\tif (error) {\n\t\t\t\tFSBL.Clients.Logger.error(`Advanced App Launcher: Failed to save: ${field}:${value}`);\n\t\t\t} else {\n\t\t\t\tcb && cb();\n\t\t\t}\n\t\t}\n\t);\n}\n\nfunction _setFolders(cb = Function.prototype) {\n\t_setValue(\"appFolders.folders\", data.folders, (err: StandardError) => {\n\t\tif (err) {\n\t\t\tFSBL.Clients.Logger.error(`Advanced App Launcher: Failed to set folders: ${err}`);\n\t\t\treturn;\n\t\t}\n\n\t\tcb();\n\t});\n}\n\nfunction _findAppIndexInFolders(appID: string, folderName: string) {\n\treturn findIndex(data.folders[folderName].apps, (app) => app.appID === appID);\n}\n\nfunction getFolders() {\n\treturn data.folders;\n}\n\nfunction getFoldersList() {\n\treturn data.foldersList;\n}\n\nfunction getAllApps() {\n\treturn Object.assign({}, data.apps, data.configComponents);\n}\n\nfunction getFormStatus() {\n\treturn data.isFormVisible;\n}\n\nfunction getSingleFolder(folderName: string) {\n\treturn data.folders[folderName];\n}\n\nfunction reorderFolders(destIndex: number, srcIndex: number) {\n\t// There are two types of folders: Those that can be arranged, and those that cannot. We don't want to reorder the folders relative to the unorderable folders. Split them out, and then combine them after doing the filtering/swapping.\n\tconst dragDisabled = getDragDisabled();\n\tconst unorderableFolders = data.foldersList.filter((folderName) => dragDisabled.includes(folderName));\n\tconst orderableFolders = data.foldersList.filter((folderName) => !dragDisabled.includes(folderName));\n\tconst movedFolder = orderableFolders[destIndex];\n\tconst remainingItems = orderableFolders.filter((item, index) => index !== destIndex);\n\tdata.foldersList = [\n\t\t...unorderableFolders,\n\t\t...remainingItems.slice(0, srcIndex),\n\t\tmovedFolder,\n\t\t...remainingItems.slice(srcIndex),\n\t];\n\t_setValue(\"appFolders.list\", data.foldersList, () => {});\n\treturn data.foldersList;\n}\n\nfunction addApp(app = <AppsType>{}, cb: any) {\n\tconst appID = `${new Date().getTime()}`;\n\tconst folder = data.activeFolder;\n\tconst newAppData = {\n\t\tappID,\n\t\ttags: app.tags,\n\t\tname: app.name,\n\t\turl: app.url,\n\t\ttype: \"component\",\n\t\tcanDelete: true,\n\t};\n\n\t/**\n\t * Note, the advanced app launcher can currently only keep track of apps that\n\t * are added by itself. Apps added by the basic launcher, or any other means,\n\t * will not be detected. A reconciliation process would need to be added that\n\t * listens on the distributed store similar to how the basic app launcher works.\n\t *\n\t * FSBL.Clients.RouterClient.subscribe(\"Launcher.update\", (err, response) => {\n\t\t\tFSBL.Clients.Logger.debug(\"list updated\", err, response);\n\t\t\tif (err) {\n\t\t\t\treturn console.error(err);\n\t\t\t}\n\t\t\tself.filterComponents(response.data.componentList);\n\t\t});\n\t */\n\tFSBL.Clients.LauncherClient.addUserDefinedComponent(newAppData, (compAddErr) => {\n\t\tif (compAddErr) {\n\t\t\tcb({ code: \"failed_to_add_app\", message: compAddErr });\n\t\t\tconsole.warn(\"Failed to add new app:\", compAddErr);\n\t\t\treturn;\n\t\t}\n\t\tdata.apps[appID] = newAppData;\n\n\t\t// Add to ADVANCED_APP_LAUNCHER folder\n\t\tdata.folders[ADVANCED_APP_LAUNCHER].apps.push(newAppData);\n\n\t\t// Check if we need to add to another folder as well\n\t\tif (folder !== ADVANCED_APP_LAUNCHER) {\n\t\t\tdata.folders[folder].apps.push(newAppData);\n\t\t}\n\t\t// Save appDefinitions and then folders\n\t\t_setValue(\"appDefinitions\", data.apps, () => {\n\t\t\t_setFolders();\n\t\t\tcb && cb();\n\t\t});\n\t});\n}\n\nfunction deleteApp(appID: string) {\n\t// Delete app from any folder that has it\n\tfor (const key in data.folders) {\n\t\tconst appIndex = _findAppIndexInFolders(appID, key);\n\t\tdata.folders[key].apps.splice(appIndex, 1);\n\t}\n\n\t// Delete app from the apps list\n\tFSBL.Clients.LauncherClient.removeUserDefinedComponent(data.apps[appID], () => {\n\t\tdelete data.apps[appID];\n\t\t// Save appDefinitions and then folders\n\t\t_setValue(\"appDefinitions\", data.apps, () => {\n\t\t\t_setFolders();\n\t\t});\n\t});\n}\n\nfunction addNewFolder(name?: string) {\n\t// Each new folder is given a number, lets store them here\n\t// to get the highest one and then increment\n\t// result of this will be [0, 1, 2] etc\n\tconst newFoldersNums = [\n\t\t0,\n\t\t// Find folders that have a name of \"New folder\" or \"New folder #\"\n\t\t...data.foldersList\n\t\t\t.filter((folder) => folder.startsWith(NEW_FOLDER_NAME))\n\t\t\t.map((folder) => {\n\t\t\t\tconst numbers: any[] = folder.match(/\\d+/g) || [];\n\t\t\t\treturn Math.max(...numbers);\n\t\t\t}),\n\t];\n\tconst highestFolderNumber = Math.max(...newFoldersNums);\n\tconst folderName: string = name ?? `${NEW_FOLDER_NAME} ${highestFolderNumber + 1}`;\n\tconst newFolder = {\n\t\tdisableUserRemove: true,\n\t\ticon: \"ff-adp-hamburger\",\n\t\tcanEdit: true,\n\t\tcanDelete: true,\n\t\tapps: [],\n\t};\n\tdata.folders[folderName] = newFolder;\n\t_setFolders(() => {\n\t\t// Update folders order if adding was successful\n\t\tdata.foldersList.push(folderName);\n\t\t_setValue(\"appFolders.list\", data.foldersList, () => {});\n\t});\n}\n\nfunction deleteFolder(folderName: string) {\n\t// Check if user is trying to delete the active folder\n\tif (folderName === data.activeFolder) {\n\t\tdata.activeFolder = ADVANCED_APP_LAUNCHER;\n\t\t_setValue(\"activeFolder\", data.activeFolder, () => {});\n\t}\n\n\tdelete data.folders[folderName] &&\n\t\t_setFolders(() => {\n\t\t\t// Update the order of folders\n\t\t\tconst index = data.foldersList.indexOf(folderName);\n\t\t\tdata.foldersList.splice(index, 1);\n\t\t\t_setValue(\"appFolders.list\", data.foldersList, () => {});\n\t\t});\n}\n\nfunction renameFolder(oldName: string, newName: string) {\n\tlet indexOfOld = data.foldersList.findIndex((folderName) => folderName === oldName);\n\n\tif (indexOfOld > -1) {\n\t\tlet oldFolder = data.folders[oldName];\n\t\tdata.folders[newName] = oldFolder;\n\t\tdata.foldersList.splice(indexOfOld, 1, newName);\n\n\t\t_setFolders(() => {\n\t\t\t_setValue(\"appFolders.list\", data.foldersList, () => {});\n\n\t\t\tif (data.activeFolder === oldName) {\n\t\t\t\t_setValue(\"activeFolder\", newName, () => {});\n\t\t\t}\n\n\t\t\tdelete data.folders[oldName];\n\t\t});\n\t}\n}\n\nfunction addAppToFolder(folderName: string, app: FolderAppType) {\n\tconst appIndex = _findAppIndexInFolders(app.appID, folderName);\n\n\tif (appIndex < 0) {\n\t\tdata.folders[folderName].apps.push({\n\t\t\tname: app.name,\n\t\t\tdisplayName: app.displayName,\n\t\t\tappID: app.appID,\n\t\t});\n\t\t_setFolders();\n\t}\n}\n\nfunction removeAppFromFolder(folderName: string, app: FolderAppType) {\n\tconst appIndex = _findAppIndexInFolders(app.appID, folderName);\n\tdata.folders[folderName].apps.splice(appIndex, 1);\n\t_setFolders();\n}\n\nfunction getAllAppsFromFolder(folderName: string) {\n\treturn data.folders[folderName].apps;\n}\n\n/**\n * Given a field, search through FDC3 apps and apps pulled in via config and return that app.\n * */\nfunction findAppByField(field: keyof AppsType | keyof ConfigType, value: any) {\n\treturn (\n\t\tObject.values(data.apps).find((app) => (app ? (app as any)[field] === value : false)) ||\n\t\tObject.values(data.configComponents).find((app) => (app ? (app as any)[field] === value : false))\n\t);\n}\n\nfunction getActiveFolder() {\n\tconst folder = data.folders[data.activeFolder];\n\n\tif (!folder) {\n\t\tFSBL.Clients.Logger.error(`activeFolder:\"${data.activeFolder}\" not found! Defaulting to empty folder`);\n\t\treturn {\n\t\t\tname: data.activeFolder,\n\t\t\tapps: [],\n\t\t};\n\t}\n\n\tObject.values(folder.apps).forEach((app) => {\n\t\tconst appData = findAppByField(\"appID\", app.appID);\n\t\tif (!appData) {\n\t\t\tapp.tags = [];\n\t\t} else {\n\t\t\tapp.tags = appData.tags;\n\t\t}\n\t});\n\t// Need a name for the AppDefinition/AppActionsMenu rendering\n\tfolder.name = data.activeFolder;\n\treturn folder;\n}\n\nfunction getActiveFolderName() {\n\treturn data.activeFolder;\n}\n\nfunction getSearchText() {\n\treturn data.filterText;\n}\n\nfunction getSortBy() {\n\treturn data.sortBy;\n}\n\nfunction getTags() {\n\treturn data.tags;\n}\n\nfunction getAllAppsTags() {\n\tlet tags: any[] = [];\n\t// Pull tags from applications installed via FDC3 and the component config.\n\tconst apps = Object.values(data.apps).concat(Object.values(data.configComponents) as any);\n\n\tapps.forEach((app) => {\n\t\ttags = tags.concat(app.tags);\n\t});\n\t// return unique ones only\n\treturn tags.filter((tag, index) => tags.indexOf(tag) === index);\n}\n\nfunction addTag(tag: string) {\n\t// Push new tag to list\n\tdata.tags.indexOf(tag) < 0 && data.tags.push(tag);\n\t// Update tags in store\n\t_setValue(\"activeLauncherTags\", data.tags, () => {});\n}\n\nfunction deleteTag(tag: string) {\n\t// Push new tag to list\n\tdata.tags.splice(data.tags.indexOf(tag), 1);\n\t// Update tags in store\n\t_setValue(\"activeLauncherTags\", data.tags, () => {});\n}\n"]}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
import React from "react";
|
|
6
|
-
import { StandardError } from "@finsemble/finsemble-
|
|
7
|
-
import { WindowIdentifier } from "@finsemble/finsemble-
|
|
6
|
+
import { StandardError } from "@finsemble/finsemble-api/types/types";
|
|
7
|
+
import { WindowIdentifier } from "@finsemble/finsemble-api";
|
|
8
8
|
declare type AppLauncherContainerProps = {
|
|
9
9
|
componentFilter?: string[];
|
|
10
10
|
suppressFavorites?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"componentList.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/appLauncher/components/componentList.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\n/**\n * This is the list of all components in the appLauncher.\n */\nimport React from \"react\";\nimport { getStore, Actions as appLauncherActions } from \"../stores/appLauncherStore\";\nimport { MenuItem } from \"../../../menu/MenuItem\";\nimport { FavoriteMaker } from \"../../../favorites/FavoriteMaker\";\nimport { useFavorites } from \"../../../../hooks/useFavorites\";\nimport { iconFromConfig } from \"../../../icon/Icon\";\nimport StoreModel from \"@finsemble/finsemble-core/types/clients/StoreModel\";\nimport { StandardError } from \"@finsemble/finsemble-core/types/types\";\nimport { WindowIdentifier } from \"@finsemble/finsemble-core\";\n\nlet appLauncherStore: StoreModel | undefined;\n\ntype DeleteComponentProps = {\n\tname: string;\n};\n\n/**\n * Handles deleting a component and removing it from favorites if necessary\n * @param {} props\n */\nconst DeleteComponent = ({ name }: DeleteComponentProps) => {\n\tconst { isFavorited, removeFavorite } = useFavorites();\n\tconst doDeleteComponent = (e: React.MouseEvent<HTMLSpanElement>) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tappLauncherActions.handleRemoveCustomComponent(name, (wasDeleted: boolean) => {\n\t\t\tif (wasDeleted && isFavorited(name)) {\n\t\t\t\tremoveFavorite(name);\n\t\t\t}\n\t\t});\n\t};\n\treturn (\n\t\t<span onClick={doDeleteComponent} className=\"menu-item-icon\">\n\t\t\t<i className=\"ff-adp-trash-outline\" title=\"Delete\"></i>\n\t\t</span>\n\t);\n};\n\ntype AppLauncherContainerProps = {\n\tcomponentFilter?: string[];\n\tsuppressFavorites?: boolean;\n};\ntype ComponentDescriptor = Record<string, any>;\ntype ComponentList = Record<string, ComponentDescriptor>;\n\ninterface IState {\n\tcomponentList: ComponentList;\n\tfilteredListOfComponents: string[];\n}\n\nexport default class appLauncherContainer extends React.Component<AppLauncherContainerProps, IState> {\n\tconstructor(props: AppLauncherContainerProps) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tcomponentList: {},\n\t\t\t// list of components to display instead of all components\n\t\t\tfilteredListOfComponents: props.componentFilter ?? [],\n\t\t};\n\t\tthis.bindCorrectContext();\n\t}\n\n\tcomponentDidUpdate(prevProps: AppLauncherContainerProps) {\n\t\tif (this.props.componentFilter !== prevProps.componentFilter) {\n\t\t\tthis.setState({\n\t\t\t\tfilteredListOfComponents: this.props.componentFilter ?? [],\n\t\t\t});\n\t\t}\n\t}\n\n\tbindCorrectContext() {\n\t\tthis.onComponentListUpdate = this.onComponentListUpdate.bind(this);\n\t\tthis.buildComponentItem = this.buildComponentItem.bind(this);\n\t}\n\n\tonComponentListUpdate(err: StandardError, data: { field: string; value: ComponentList }) {\n\t\tFSBL.Clients.Logger.system.debug(\"appLauncher onComponentListUpdate\");\n\t\tthis.setState({\n\t\t\tcomponentList: data.value,\n\t\t});\n\t}\n\n\tsetInitialState() {\n\t\tlet self = this;\n\t\tappLauncherStore?.getValue({ field: \"componentList\" }, (err: StandardError, data?: ComponentList) => {\n\t\t\tif (typeof data !== \"undefined\") {\n\t\t\t\tself.setState({\n\t\t\t\t\tcomponentList: data,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\tappLauncherStore = getStore();\n\t\tthis.setInitialState();\n\t\tappLauncherStore?.addListener({ field: \"componentList\" }, this.onComponentListUpdate);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tappLauncherStore?.removeListener({ field: \"componentList\" }, this.onComponentListUpdate);\n\t}\n\n\tlaunchComponent(component: any, params: any, cb?: (win?: WindowIdentifier) => void) {\n\t\t// If we are launching a group\n\t\tif (component.group) {\n\t\t\tfor (let i of Object.keys(component.list)) {\n\t\t\t\tconst cloneParams = Object.assign({}, params);\n\t\t\t\tconst c = component.list[i];\n\t\t\t\tif (c.component.windowGroup) {\n\t\t\t\t\tcloneParams.groupName = c.component.windowGroup;\n\t\t\t\t}\n\t\t\t\tappLauncherActions.launchComponent(component.list[i], params, cb);\n\t\t\t}\n\t\t} else {\n\t\t\tif (component.component.windowGroup) {\n\t\t\t\tparams.groupName = component.component.windowGroup;\n\t\t\t}\n\t\t\tappLauncherActions.launchComponent(component, params, cb);\n\t\t}\n\t}\n\n\tbuildComponentItem(params: { i: number; key: string; isUserDefined: boolean }) {\n\t\tconst { key, isUserDefined } = params;\n\t\tconst config = this.state.componentList?.[key];\n\t\tlet displayName = key;\n\n\t\t// If the app isn't launchable by the user, don't show it\n\t\tif (\n\t\t\t(!config ||\n\t\t\t\t!config.window ||\n\t\t\t\t!config.foreign ||\n\t\t\t\t!config.foreign.components ||\n\t\t\t\t!config.foreign.components[\"App Launcher\"] ||\n\t\t\t\t!config.foreign.components[\"App Launcher\"].launchableByUser) &&\n\t\t\t!config?.group\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the app is temporary (actively being configured in the Smart Desktop Designer), don't show it\n\t\tif (config.appDConfig?.manifest?.temporary) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Component developers can define a display name that will show instead of the component's type.\n\t\tif (config.component && config.component.displayName) {\n\t\t\t({ displayName } = config.component);\n\t\t}\n\t\tconst iconObject = iconFromConfig(config.foreign?.components?.Toolbar, displayName);\n\t\treturn (\n\t\t\t<MenuItem key={key} onClick={() => this.launchComponent(config, {})}>\n\t\t\t\t<div className=\"menu-item-row\">\n\t\t\t\t\t<span className=\"app-name\" title={displayName}>\n\t\t\t\t\t\t{displayName}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"menu-item-row-push-right\">\n\t\t\t\t\t\t{isUserDefined && <DeleteComponent name={displayName} />}\n\t\t\t\t\t\t{!this.props.suppressFavorites && (\n\t\t\t\t\t\t\t<FavoriteMaker\n\t\t\t\t\t\t\t\tid={config?.component?.type}\n\t\t\t\t\t\t\t\tcategory=\"Application\"\n\t\t\t\t\t\t\t\tname={displayName}\n\t\t\t\t\t\t\t\ticon={iconObject}\n\t\t\t\t\t\t\t\tclassName=\"menu-item-icon\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\n\trenderComponentsList() {\n\t\tconst { state } = this;\n\t\tconst components = Object.keys(state.componentList ?? {}).filter((componentType) => {\n\t\t\tif (state.filteredListOfComponents.length) {\n\t\t\t\treturn state.filteredListOfComponents.includes(componentType);\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\t// if this is greater than 0, we don't show a note telling the user to check their configs.\n\t\t// iterate through componentList and render a componentItem for each one.\n\t\tconst componentList = components.map((key, i) => {\n\t\t\tconst { component } = state.componentList[key];\n\t\t\tconst isUserDefined = Boolean(component && component.isUserDefined);\n\t\t\treturn this.buildComponentItem({ i, key, isUserDefined });\n\t\t});\n\t\treturn (\n\t\t\t<div className=\"app-launcher-list\">\n\t\t\t\t{componentList.length ? (\n\t\t\t\t\tcomponentList\n\t\t\t\t) : (\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\tNo components loaded. Make sure to check ./src/components.json to make sure you've set everything up\n\t\t\t\t\t\tcorrectly.\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn this.state.componentList ? this.renderComponentsList() : <div></div>;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"componentList.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/appLauncher/components/componentList.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\n/**\n * This is the list of all components in the appLauncher.\n */\nimport React from \"react\";\nimport { getStore, Actions as appLauncherActions } from \"../stores/appLauncherStore\";\nimport { MenuItem } from \"../../../menu/MenuItem\";\nimport { FavoriteMaker } from \"../../../favorites/FavoriteMaker\";\nimport { useFavorites } from \"../../../../hooks/useFavorites\";\nimport { iconFromConfig } from \"../../../icon/Icon\";\nimport StoreModel from \"@finsemble/finsemble-api/types/clients/StoreModel\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport { WindowIdentifier } from \"@finsemble/finsemble-api\";\n\nlet appLauncherStore: StoreModel | undefined;\n\ntype DeleteComponentProps = {\n\tname: string;\n};\n\n/**\n * Handles deleting a component and removing it from favorites if necessary\n * @param {} props\n */\nconst DeleteComponent = ({ name }: DeleteComponentProps) => {\n\tconst { isFavorited, removeFavorite } = useFavorites();\n\tconst doDeleteComponent = (e: React.MouseEvent<HTMLSpanElement>) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tappLauncherActions.handleRemoveCustomComponent(name, (wasDeleted: boolean) => {\n\t\t\tif (wasDeleted && isFavorited(name)) {\n\t\t\t\tremoveFavorite(name);\n\t\t\t}\n\t\t});\n\t};\n\treturn (\n\t\t<span onClick={doDeleteComponent} className=\"menu-item-icon\">\n\t\t\t<i className=\"ff-adp-trash-outline\" title=\"Delete\"></i>\n\t\t</span>\n\t);\n};\n\ntype AppLauncherContainerProps = {\n\tcomponentFilter?: string[];\n\tsuppressFavorites?: boolean;\n};\ntype ComponentDescriptor = Record<string, any>;\ntype ComponentList = Record<string, ComponentDescriptor>;\n\ninterface IState {\n\tcomponentList: ComponentList;\n\tfilteredListOfComponents: string[];\n}\n\nexport default class appLauncherContainer extends React.Component<AppLauncherContainerProps, IState> {\n\tconstructor(props: AppLauncherContainerProps) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tcomponentList: {},\n\t\t\t// list of components to display instead of all components\n\t\t\tfilteredListOfComponents: props.componentFilter ?? [],\n\t\t};\n\t\tthis.bindCorrectContext();\n\t}\n\n\tcomponentDidUpdate(prevProps: AppLauncherContainerProps) {\n\t\tif (this.props.componentFilter !== prevProps.componentFilter) {\n\t\t\tthis.setState({\n\t\t\t\tfilteredListOfComponents: this.props.componentFilter ?? [],\n\t\t\t});\n\t\t}\n\t}\n\n\tbindCorrectContext() {\n\t\tthis.onComponentListUpdate = this.onComponentListUpdate.bind(this);\n\t\tthis.buildComponentItem = this.buildComponentItem.bind(this);\n\t}\n\n\tonComponentListUpdate(err: StandardError, data: { field: string; value: ComponentList }) {\n\t\tFSBL.Clients.Logger.system.debug(\"appLauncher onComponentListUpdate\");\n\t\tthis.setState({\n\t\t\tcomponentList: data.value,\n\t\t});\n\t}\n\n\tsetInitialState() {\n\t\tlet self = this;\n\t\tappLauncherStore?.getValue({ field: \"componentList\" }, (err: StandardError, data?: ComponentList) => {\n\t\t\tif (typeof data !== \"undefined\") {\n\t\t\t\tself.setState({\n\t\t\t\t\tcomponentList: data,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\tappLauncherStore = getStore();\n\t\tthis.setInitialState();\n\t\tappLauncherStore?.addListener({ field: \"componentList\" }, this.onComponentListUpdate);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tappLauncherStore?.removeListener({ field: \"componentList\" }, this.onComponentListUpdate);\n\t}\n\n\tlaunchComponent(component: any, params: any, cb?: (win?: WindowIdentifier) => void) {\n\t\t// If we are launching a group\n\t\tif (component.group) {\n\t\t\tfor (let i of Object.keys(component.list)) {\n\t\t\t\tconst cloneParams = Object.assign({}, params);\n\t\t\t\tconst c = component.list[i];\n\t\t\t\tif (c.component.windowGroup) {\n\t\t\t\t\tcloneParams.groupName = c.component.windowGroup;\n\t\t\t\t}\n\t\t\t\tappLauncherActions.launchComponent(component.list[i], params, cb);\n\t\t\t}\n\t\t} else {\n\t\t\tif (component.component.windowGroup) {\n\t\t\t\tparams.groupName = component.component.windowGroup;\n\t\t\t}\n\t\t\tappLauncherActions.launchComponent(component, params, cb);\n\t\t}\n\t}\n\n\tbuildComponentItem(params: { i: number; key: string; isUserDefined: boolean }) {\n\t\tconst { key, isUserDefined } = params;\n\t\tconst config = this.state.componentList?.[key];\n\t\tlet displayName = key;\n\n\t\t// If the app isn't launchable by the user, don't show it\n\t\tif (\n\t\t\t(!config ||\n\t\t\t\t!config.window ||\n\t\t\t\t!config.foreign ||\n\t\t\t\t!config.foreign.components ||\n\t\t\t\t!config.foreign.components[\"App Launcher\"] ||\n\t\t\t\t!config.foreign.components[\"App Launcher\"].launchableByUser) &&\n\t\t\t!config?.group\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If the app is temporary (actively being configured in the Smart Desktop Designer), don't show it\n\t\tif (config.appDConfig?.manifest?.temporary) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Component developers can define a display name that will show instead of the component's type.\n\t\tif (config.component && config.component.displayName) {\n\t\t\t({ displayName } = config.component);\n\t\t}\n\t\tconst iconObject = iconFromConfig(config.foreign?.components?.Toolbar, displayName);\n\t\treturn (\n\t\t\t<MenuItem key={key} onClick={() => this.launchComponent(config, {})}>\n\t\t\t\t<div className=\"menu-item-row\">\n\t\t\t\t\t<span className=\"app-name\" title={displayName}>\n\t\t\t\t\t\t{displayName}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"menu-item-row-push-right\">\n\t\t\t\t\t\t{isUserDefined && <DeleteComponent name={displayName} />}\n\t\t\t\t\t\t{!this.props.suppressFavorites && (\n\t\t\t\t\t\t\t<FavoriteMaker\n\t\t\t\t\t\t\t\tid={config?.component?.type}\n\t\t\t\t\t\t\t\tcategory=\"Application\"\n\t\t\t\t\t\t\t\tname={displayName}\n\t\t\t\t\t\t\t\ticon={iconObject}\n\t\t\t\t\t\t\t\tclassName=\"menu-item-icon\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\n\trenderComponentsList() {\n\t\tconst { state } = this;\n\t\tconst components = Object.keys(state.componentList ?? {}).filter((componentType) => {\n\t\t\tif (state.filteredListOfComponents.length) {\n\t\t\t\treturn state.filteredListOfComponents.includes(componentType);\n\t\t\t}\n\t\t\treturn true;\n\t\t});\n\t\t// if this is greater than 0, we don't show a note telling the user to check their configs.\n\t\t// iterate through componentList and render a componentItem for each one.\n\t\tconst componentList = components.map((key, i) => {\n\t\t\tconst { component } = state.componentList[key];\n\t\t\tconst isUserDefined = Boolean(component && component.isUserDefined);\n\t\t\treturn this.buildComponentItem({ i, key, isUserDefined });\n\t\t});\n\t\treturn (\n\t\t\t<div className=\"app-launcher-list\">\n\t\t\t\t{componentList.length ? (\n\t\t\t\t\tcomponentList\n\t\t\t\t) : (\n\t\t\t\t\t<p>\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\tNo components loaded. Make sure to check ./src/components.json to make sure you've set everything up\n\t\t\t\t\t\tcorrectly.\n\t\t\t\t\t</p>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\trender() {\n\t\treturn this.state.componentList ? this.renderComponentsList() : <div></div>;\n\t}\n}\n"]}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright 2017 by ChartIQ, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*/
|
|
5
|
-
import StoreModel from "@finsemble/finsemble-
|
|
6
|
-
import { WindowIdentifier } from "@finsemble/finsemble-
|
|
5
|
+
import StoreModel from "@finsemble/finsemble-api/types/clients/StoreModel";
|
|
6
|
+
import { WindowIdentifier } from "@finsemble/finsemble-api";
|
|
7
7
|
declare let appLauncherStore: StoreModel | undefined;
|
|
8
8
|
declare type VoidCallback = () => void;
|
|
9
9
|
declare type ComponentDescriptor = Record<string, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appLauncherStore.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/appLauncher/stores/appLauncherStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\n\nimport StoreModel from \"@finsemble/finsemble-core/types/clients/StoreModel\";\nimport { SpawnResponse } from \"@finsemble/finsemble-core/types/clients/launcherClient\";\nimport { StandardError } from \"@finsemble/finsemble-core/types/types\";\nimport async from \"async\";\nimport { WindowIdentifier } from \"@finsemble/finsemble-core\";\nlet appLauncherStore: StoreModel | undefined;\nlet COMPONENT_UPDATE_CHANNEL: string;\ntype VoidCallback = () => void;\ntype ComponentDescriptor = Record<string, any>;\ntype ComponentList = Record<string, ComponentDescriptor>;\n\nconst Actions = {\n\tcomponentList: {} as ComponentList,\n\tinitialize: function (cb: VoidCallback) {\n\t\tasync.parallel(\n\t\t\t[\n\t\t\t\tActions.initializeComponentList,\n\t\t\t\tActions.getUserDefinedComponentList,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\tsetupHotkeys,\n\t\t\t],\n\t\t\t(err) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t}\n\t\t\t\tFSBL.Clients.Logger.system.debug(\"Actions.initialize done\");\n\t\t\t\tcb();\n\t\t\t}\n\t\t);\n\t},\n\tgetComponentList(cb?: VoidCallback) {\n\t\tFSBL.Clients.LauncherClient.getComponentList((err: StandardError, response) => {\n\t\t\tif (typeof err === \"string\") {\n\t\t\t\tthrow new Error(err);\n\t\t\t}\n\t\t\t// Each AppLauncher\n\t\t\tFSBL.Clients.Logger.system.debug(\"getComponentList from LauncherClient\", response);\n\t\t\tActions.filterComponents(response);\n\t\t\tif (cb) {\n\t\t\t\tcb();\n\t\t\t}\n\t\t});\n\t},\n\tinitializeComponentList(cb: VoidCallback) {\n\t\tconst self = Actions;\n\t\tlet firstTime = true;\n\n\t\t// When an app launcher button is clicked, it sends over the types of components that the app launcher can spawn. We assign that data to an object in the windowClient, and then use that to render the app launcher.\n\t\tFSBL.Clients.RouterClient.subscribe(COMPONENT_UPDATE_CHANNEL, (_err, response) => {\n\t\t\tif (!FSBL.Clients.WindowClient.options.customData.spawnData) {\n\t\t\t\tFSBL.Clients.WindowClient.options.customData.spawnData = {};\n\t\t\t}\n\t\t\tObject.assign(FSBL.Clients.WindowClient.options.customData.spawnData, response.data);\n\t\t\tif (firstTime) {\n\t\t\t\t// only update component list the first time to eliminate re-rendering the menu\n\t\t\t\tActions.getComponentList(cb);\n\t\t\t\tfirstTime = false;\n\t\t\t}\n\t\t});\n\n\t\t// Whenever we add or remove a component, this event is fired. We get a list of all components, then filter it out to include only the ones that this particular launcher is capable of spawning.\n\t\tFSBL.Clients.RouterClient.subscribe(\"Launcher.update\", (err, response) => {\n\t\t\tFSBL.Clients.Logger.system.debug(\"list updated\", err, response);\n\t\t\tif (err) {\n\t\t\t\treturn console.error(err);\n\t\t\t}\n\t\t\tself.filterComponents(response.data.componentList);\n\t\t});\n\t},\n\t// get quick components that the user created from storage.\n\tgetUserDefinedComponentList(cb: VoidCallback) {\n\t\treturn cb();\n\t},\n\t// saves quick components\n\tsaveCustomComponents() {\n\t\tconst UDCs: { [key: string]: any } = {};\n\t\tconst components = Object.keys(Actions.componentList);\n\t\tfor (let i = 0; i < components.length; i++) {\n\t\t\tconst config = Actions.componentList[components[i]];\n\t\t\tif (config.component && config.component.isUserDefined) {\n\t\t\t\tUDCs[config.component.type] = config;\n\t\t\t}\n\t\t}\n\t\tFSBL.Clients.StorageClient.save({\n\t\t\ttopic: \"finsemble\",\n\t\t\tkey: \"userDefinedComponents\",\n\t\t\tvalue: UDCs,\n\t\t});\n\t},\n\t/**\n\t * Produce a filtered component list based on the settings for this menu (either \"mode\" or \"list\").\n\t *\n\t * Components will only be added to the returned list if they match the specified mode or\n\t * are found in the specified list\n\t */\n\tprocessSettings(settings: any, components: ComponentList): ComponentList {\n\t\tlet componentList: ComponentList = {};\n\t\tconst keys = Object.keys(components);\n\t\tif (settings.mode) {\n\t\t\tconst settingsMode = Array.isArray(settings.mode) ? settings.mode : [settings.mode];\n\n\t\t\tkeys.forEach((componentType) => {\n\t\t\t\tconst config = components[componentType];\n\t\t\t\tconst mode = config?.component?.mode || [\"\"];\n\t\t\t\tconst coponentMode = Array.isArray(mode) ? mode : [mode];\n\n\t\t\t\tconst commonModes = coponentMode.filter((n: ComponentDescriptor) => settingsMode.indexOf(n) !== -1);\n\n\t\t\t\t// If the current mode isn't in the list of modes for the component then don't include it in our list\n\t\t\t\tif (commonModes.length) {\n\t\t\t\t\tcomponentList[componentType] = components[componentType];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (settings.list) {\n\t\t\tconst commonItems = settings.list.filter((n: any) => keys.indexOf(n) !== -1);\n\n\t\t\tfor (let i = 0; i < commonItems.length; i++) {\n\t\t\t\tcomponentList[commonItems[i]] = components[commonItems[i]];\n\t\t\t}\n\t\t}\n\t\treturn componentList;\n\t},\n\t// This filters components based on the mode and list settings in customData\n\t// Available settings are list - where you list specific individual component Types, mode - which piggybacks on config.mode and lists all components where the mode matches\n\t// If neither mode not list are set, all components are shown\n\t// Custom Components are always shown\n\tfilterComponents(components: ComponentList = {}) {\n\t\tconst settings = FSBL.Clients.WindowClient.getSpawnData() ?? {};\n\t\tthis.componentList = settings.mode || settings.list ? this.processSettings(settings, components) : components;\n\n\t\tFSBL.Clients.Logger.system.debug(\n\t\t\t\"appLauncher filterComponents\",\n\t\t\tthis.componentList,\n\t\t\t\"settings\",\n\t\t\tsettings,\n\t\t\t\"customData\",\n\t\t\tFSBL.Clients.WindowClient.options.customData\n\t\t);\n\t\tappLauncherStore?.setValue({\n\t\t\tfield: \"componentList\",\n\t\t\tvalue: this.componentList,\n\t\t});\n\t\tthis.saveCustomComponents();\n\t},\n\t// Handler for when the user wants to remove a quick component.\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\thandleRemoveCustomComponent(componentName: string, cb = (wasDeconsted: boolean) => {}) {\n\t\tconst self = this;\n\t\tFSBL.Clients.DialogManager.open(\n\t\t\t\"yesNo\",\n\t\t\t{\n\t\t\t\ttitle: \"Delete this App?\",\n\t\t\t\tquestion: `Are you sure you would like to delete \"${componentName}\"?`,\n\t\t\t\taffirmativeResponseLabel: \"Delete\",\n\t\t\t\tshowNegativeButton: false,\n\t\t\t},\n\t\t\t(err, response) => {\n\t\t\t\t// If the user chooses \"affirmative\" then delete the component.\n\t\t\t\t// We should never get an error, but if we do then go ahead and delete the component too.\n\t\t\t\tif (err || response.choice === \"affirmative\") {\n\t\t\t\t\tcb(true);\n\t\t\t\t\tself.removeCustomComponent(componentName);\n\t\t\t\t} else {\n\t\t\t\t\tcb(false);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\t// Remove the component, notify others.\n\tremoveCustomComponent(componentName: string) {\n\t\tFSBL.Clients.LauncherClient.removeUserDefinedComponent(\n\t\t\t{\n\t\t\t\tname: componentName,\n\t\t\t},\n\t\t\t(err) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treturn console.error(err);\n\t\t\t\t}\n\t\t\t\tActions.getComponentList();\n\t\t\t}\n\t\t);\n\t},\n\t// Hide the window.\n\thideWindow() {\n\t\tfinsembleWindow.hide();\n\t},\n\t// Spawn a component.\n\tlaunchComponent(config: any, params: any, cb?: (win?: WindowIdentifier) => void) {\n\t\t// Actions.hideWindow();\n\t\tconst defaultParams = {\n\t\t\taddToWorkspace: true,\n\t\t\tmonitor: \"mine\",\n\t\t\toptions: { customData: {} },\n\t\t};\n\t\tparams = Object.assign(defaultParams, params);\n\t\tif (!params.options.customData) {\n\t\t\tparams.options.customData = {};\n\t\t}\n\t\tif (!params.options.customData.component) {\n\t\t\tparams.options.customData.component = {};\n\t\t}\n\t\tif (config.component.windowGroup) {\n\t\t\tparams.groupName = config.component.windowGroup;\n\t\t}\n\t\tFSBL.Clients.LauncherClient.spawn(\n\t\t\tconfig.component.type,\n\t\t\tparams,\n\t\t\t(_err: StandardError, windowInfo?: SpawnResponse) => {\n\t\t\t\tif (cb) {\n\t\t\t\t\tcb(windowInfo?.windowIdentifier);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n};\n\nfunction createLocalStore(done: VoidCallback) {\n\tconst defaultData = {\n\t\tcomponentList: {},\n\t\tmonitorDimensions: {},\n\t};\n\n\tFSBL.Clients.DistributedStoreClient.createStore(\n\t\t{ store: \"Finsemble-AppLauncher-Local-Store\", values: defaultData },\n\t\t(_err, store) => {\n\t\t\tappLauncherStore = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nfunction getWindowGroupStore(done: VoidCallback) {\n\tFSBL.Clients.DistributedStoreClient.createStore({ global: true, store: \"Finsemble-WindowGroups\" }, () => {\n\t\tdone();\n\t});\n}\n\nfunction initialize(cb: (store?: StoreModel) => void) {\n\tCOMPONENT_UPDATE_CHANNEL = `${finsembleWindow.name}.ComponentsToRender`;\n\tFSBL.Clients.RouterClient.addPubSubResponder(COMPONENT_UPDATE_CHANNEL, {});\n\tasync.parallel([createLocalStore, getWindowGroupStore, Actions.initialize], (err) => {\n\t\tif (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t\tFSBL.Clients.Logger.system.debug(\"appLauncherstore init done\");\n\t\tcb(appLauncherStore);\n\t});\n}\n\nconst keys: { [key: string]: any } = {};\nfunction setupHotkeys(cb: VoidCallback) {\n\tFSBL.Clients.RouterClient.subscribe(\"humanInterface.keydown\", (_err, response) => {\n\t\tif (!keys[response.data.key]) {\n\t\t\tkeys[response.data.key] = {};\n\t\t}\n\t\tkeys[response.data.key] = true;\n\t\tif (keys[160] && keys[162] && keys[68] && Actions.componentList[\"Advanced Chart\"]) {\n\t\t\tFSBL.Clients.LauncherClient.spawn(\"Advanced Chart\", { addToWorkspace: true, monitor: \"mine\" });\n\t\t}\n\t});\n\tFSBL.Clients.RouterClient.subscribe(\"humanInterface.keyup\", (_err, response) => {\n\t\tif (!keys[response.data.key]) {\n\t\t\tkeys[response.data.key] = {};\n\t\t}\n\t\tkeys[response.data.key] = false;\n\t});\n\n\treturn cb();\n}\n\nconst getStore = () => appLauncherStore;\n\nclass StoreManager {\n\tinitialized: boolean;\n\n\tinitializing: boolean;\n\n\tcallbacks: Function[];\n\n\tstore: StoreModel | undefined | null;\n\n\tconstructor() {\n\t\tthis.initialized = false;\n\t\tthis.initializing = false;\n\t\tthis.callbacks = [];\n\t\tthis.store = null;\n\t}\n\n\tinitialize() {\n\t\tif (this.initializing) return;\n\t\tthis.initializing = true;\n\t\tinitialize((store?: StoreModel) => {\n\t\t\tthis.initialized = true;\n\t\t\tthis.store = store;\n\t\t\tthis.callbacks.forEach((cb) => cb(store));\n\t\t});\n\t}\n\n\taddInitializedListener(cb: (store: StoreModel) => void) {\n\t\tif (this.initialized && this.store) return cb(this.store);\n\t\tthis.callbacks.push(cb);\n\t}\n\n\tremoveInitializedListener(cb: Function) {\n\t\tthis.callbacks = this.callbacks.filter((entry) => entry !== cb);\n\t}\n}\nconst storeManager = new StoreManager();\n\nexport { storeManager, initialize, appLauncherStore as Store, Actions, getStore };\n"]}
|
|
1
|
+
{"version":3,"file":"appLauncherStore.js","sourceRoot":"","sources":["../../../../../src/components/toolbar/appLauncher/stores/appLauncherStore.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 by ChartIQ, Inc.\n * All rights reserved.\n */\n\nimport StoreModel from \"@finsemble/finsemble-api/types/clients/StoreModel\";\nimport { SpawnResponse } from \"@finsemble/finsemble-api/types/clients/launcherClient\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport async from \"async\";\nimport { WindowIdentifier } from \"@finsemble/finsemble-api\";\nlet appLauncherStore: StoreModel | undefined;\nlet COMPONENT_UPDATE_CHANNEL: string;\ntype VoidCallback = () => void;\ntype ComponentDescriptor = Record<string, any>;\ntype ComponentList = Record<string, ComponentDescriptor>;\n\nconst Actions = {\n\tcomponentList: {} as ComponentList,\n\tinitialize: function (cb: VoidCallback) {\n\t\tasync.parallel(\n\t\t\t[\n\t\t\t\tActions.initializeComponentList,\n\t\t\t\tActions.getUserDefinedComponentList,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\tsetupHotkeys,\n\t\t\t],\n\t\t\t(err) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t}\n\t\t\t\tFSBL.Clients.Logger.system.debug(\"Actions.initialize done\");\n\t\t\t\tcb();\n\t\t\t}\n\t\t);\n\t},\n\tgetComponentList(cb?: VoidCallback) {\n\t\tFSBL.Clients.LauncherClient.getComponentList((err: StandardError, response) => {\n\t\t\tif (typeof err === \"string\") {\n\t\t\t\tthrow new Error(err);\n\t\t\t}\n\t\t\t// Each AppLauncher\n\t\t\tFSBL.Clients.Logger.system.debug(\"getComponentList from LauncherClient\", response);\n\t\t\tActions.filterComponents(response);\n\t\t\tif (cb) {\n\t\t\t\tcb();\n\t\t\t}\n\t\t});\n\t},\n\tinitializeComponentList(cb: VoidCallback) {\n\t\tconst self = Actions;\n\t\tlet firstTime = true;\n\n\t\t// When an app launcher button is clicked, it sends over the types of components that the app launcher can spawn. We assign that data to an object in the windowClient, and then use that to render the app launcher.\n\t\tFSBL.Clients.RouterClient.subscribe(COMPONENT_UPDATE_CHANNEL, (_err, response) => {\n\t\t\tif (!FSBL.Clients.WindowClient.options.customData.spawnData) {\n\t\t\t\tFSBL.Clients.WindowClient.options.customData.spawnData = {};\n\t\t\t}\n\t\t\tObject.assign(FSBL.Clients.WindowClient.options.customData.spawnData, response.data);\n\t\t\tif (firstTime) {\n\t\t\t\t// only update component list the first time to eliminate re-rendering the menu\n\t\t\t\tActions.getComponentList(cb);\n\t\t\t\tfirstTime = false;\n\t\t\t}\n\t\t});\n\n\t\t// Whenever we add or remove a component, this event is fired. We get a list of all components, then filter it out to include only the ones that this particular launcher is capable of spawning.\n\t\tFSBL.Clients.RouterClient.subscribe(\"Launcher.update\", (err, response) => {\n\t\t\tFSBL.Clients.Logger.system.debug(\"list updated\", err, response);\n\t\t\tif (err) {\n\t\t\t\treturn console.error(err);\n\t\t\t}\n\t\t\tself.filterComponents(response.data.componentList);\n\t\t});\n\t},\n\t// get quick components that the user created from storage.\n\tgetUserDefinedComponentList(cb: VoidCallback) {\n\t\treturn cb();\n\t},\n\t// saves quick components\n\tsaveCustomComponents() {\n\t\tconst UDCs: { [key: string]: any } = {};\n\t\tconst components = Object.keys(Actions.componentList);\n\t\tfor (let i = 0; i < components.length; i++) {\n\t\t\tconst config = Actions.componentList[components[i]];\n\t\t\tif (config.component && config.component.isUserDefined) {\n\t\t\t\tUDCs[config.component.type] = config;\n\t\t\t}\n\t\t}\n\t\tFSBL.Clients.StorageClient.save({\n\t\t\ttopic: \"finsemble\",\n\t\t\tkey: \"userDefinedComponents\",\n\t\t\tvalue: UDCs,\n\t\t});\n\t},\n\t/**\n\t * Produce a filtered component list based on the settings for this menu (either \"mode\" or \"list\").\n\t *\n\t * Components will only be added to the returned list if they match the specified mode or\n\t * are found in the specified list\n\t */\n\tprocessSettings(settings: any, components: ComponentList): ComponentList {\n\t\tlet componentList: ComponentList = {};\n\t\tconst keys = Object.keys(components);\n\t\tif (settings.mode) {\n\t\t\tconst settingsMode = Array.isArray(settings.mode) ? settings.mode : [settings.mode];\n\n\t\t\tkeys.forEach((componentType) => {\n\t\t\t\tconst config = components[componentType];\n\t\t\t\tconst mode = config?.component?.mode || [\"\"];\n\t\t\t\tconst coponentMode = Array.isArray(mode) ? mode : [mode];\n\n\t\t\t\tconst commonModes = coponentMode.filter((n: ComponentDescriptor) => settingsMode.indexOf(n) !== -1);\n\n\t\t\t\t// If the current mode isn't in the list of modes for the component then don't include it in our list\n\t\t\t\tif (commonModes.length) {\n\t\t\t\t\tcomponentList[componentType] = components[componentType];\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (settings.list) {\n\t\t\tconst commonItems = settings.list.filter((n: any) => keys.indexOf(n) !== -1);\n\n\t\t\tfor (let i = 0; i < commonItems.length; i++) {\n\t\t\t\tcomponentList[commonItems[i]] = components[commonItems[i]];\n\t\t\t}\n\t\t}\n\t\treturn componentList;\n\t},\n\t// This filters components based on the mode and list settings in customData\n\t// Available settings are list - where you list specific individual component Types, mode - which piggybacks on config.mode and lists all components where the mode matches\n\t// If neither mode not list are set, all components are shown\n\t// Custom Components are always shown\n\tfilterComponents(components: ComponentList = {}) {\n\t\tconst settings = FSBL.Clients.WindowClient.getSpawnData() ?? {};\n\t\tthis.componentList = settings.mode || settings.list ? this.processSettings(settings, components) : components;\n\n\t\tFSBL.Clients.Logger.system.debug(\n\t\t\t\"appLauncher filterComponents\",\n\t\t\tthis.componentList,\n\t\t\t\"settings\",\n\t\t\tsettings,\n\t\t\t\"customData\",\n\t\t\tFSBL.Clients.WindowClient.options.customData\n\t\t);\n\t\tappLauncherStore?.setValue({\n\t\t\tfield: \"componentList\",\n\t\t\tvalue: this.componentList,\n\t\t});\n\t\tthis.saveCustomComponents();\n\t},\n\t// Handler for when the user wants to remove a quick component.\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\thandleRemoveCustomComponent(componentName: string, cb = (wasDeconsted: boolean) => {}) {\n\t\tconst self = this;\n\t\tFSBL.Clients.DialogManager.open(\n\t\t\t\"yesNo\",\n\t\t\t{\n\t\t\t\ttitle: \"Delete this App?\",\n\t\t\t\tquestion: `Are you sure you would like to delete \"${componentName}\"?`,\n\t\t\t\taffirmativeResponseLabel: \"Delete\",\n\t\t\t\tshowNegativeButton: false,\n\t\t\t},\n\t\t\t(err, response) => {\n\t\t\t\t// If the user chooses \"affirmative\" then delete the component.\n\t\t\t\t// We should never get an error, but if we do then go ahead and delete the component too.\n\t\t\t\tif (err || response.choice === \"affirmative\") {\n\t\t\t\t\tcb(true);\n\t\t\t\t\tself.removeCustomComponent(componentName);\n\t\t\t\t} else {\n\t\t\t\t\tcb(false);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\t// Remove the component, notify others.\n\tremoveCustomComponent(componentName: string) {\n\t\tFSBL.Clients.LauncherClient.removeUserDefinedComponent(\n\t\t\t{\n\t\t\t\tname: componentName,\n\t\t\t},\n\t\t\t(err) => {\n\t\t\t\tif (err) {\n\t\t\t\t\treturn console.error(err);\n\t\t\t\t}\n\t\t\t\tActions.getComponentList();\n\t\t\t}\n\t\t);\n\t},\n\t// Hide the window.\n\thideWindow() {\n\t\tfinsembleWindow.hide();\n\t},\n\t// Spawn a component.\n\tlaunchComponent(config: any, params: any, cb?: (win?: WindowIdentifier) => void) {\n\t\t// Actions.hideWindow();\n\t\tconst defaultParams = {\n\t\t\taddToWorkspace: true,\n\t\t\tmonitor: \"mine\",\n\t\t\toptions: { customData: {} },\n\t\t};\n\t\tparams = Object.assign(defaultParams, params);\n\t\tif (!params.options.customData) {\n\t\t\tparams.options.customData = {};\n\t\t}\n\t\tif (!params.options.customData.component) {\n\t\t\tparams.options.customData.component = {};\n\t\t}\n\t\tif (config.component.windowGroup) {\n\t\t\tparams.groupName = config.component.windowGroup;\n\t\t}\n\t\tFSBL.Clients.LauncherClient.spawn(\n\t\t\tconfig.component.type,\n\t\t\tparams,\n\t\t\t(_err: StandardError, windowInfo?: SpawnResponse) => {\n\t\t\t\tif (cb) {\n\t\t\t\t\tcb(windowInfo?.windowIdentifier);\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n};\n\nfunction createLocalStore(done: VoidCallback) {\n\tconst defaultData = {\n\t\tcomponentList: {},\n\t\tmonitorDimensions: {},\n\t};\n\n\tFSBL.Clients.DistributedStoreClient.createStore(\n\t\t{ store: \"Finsemble-AppLauncher-Local-Store\", values: defaultData },\n\t\t(_err, store) => {\n\t\t\tappLauncherStore = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nfunction getWindowGroupStore(done: VoidCallback) {\n\tFSBL.Clients.DistributedStoreClient.createStore({ global: true, store: \"Finsemble-WindowGroups\" }, () => {\n\t\tdone();\n\t});\n}\n\nfunction initialize(cb: (store?: StoreModel) => void) {\n\tCOMPONENT_UPDATE_CHANNEL = `${finsembleWindow.name}.ComponentsToRender`;\n\tFSBL.Clients.RouterClient.addPubSubResponder(COMPONENT_UPDATE_CHANNEL, {});\n\tasync.parallel([createLocalStore, getWindowGroupStore, Actions.initialize], (err) => {\n\t\tif (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t\tFSBL.Clients.Logger.system.debug(\"appLauncherstore init done\");\n\t\tcb(appLauncherStore);\n\t});\n}\n\nconst keys: { [key: string]: any } = {};\nfunction setupHotkeys(cb: VoidCallback) {\n\tFSBL.Clients.RouterClient.subscribe(\"humanInterface.keydown\", (_err, response) => {\n\t\tif (!keys[response.data.key]) {\n\t\t\tkeys[response.data.key] = {};\n\t\t}\n\t\tkeys[response.data.key] = true;\n\t\tif (keys[160] && keys[162] && keys[68] && Actions.componentList[\"Advanced Chart\"]) {\n\t\t\tFSBL.Clients.LauncherClient.spawn(\"Advanced Chart\", { addToWorkspace: true, monitor: \"mine\" });\n\t\t}\n\t});\n\tFSBL.Clients.RouterClient.subscribe(\"humanInterface.keyup\", (_err, response) => {\n\t\tif (!keys[response.data.key]) {\n\t\t\tkeys[response.data.key] = {};\n\t\t}\n\t\tkeys[response.data.key] = false;\n\t});\n\n\treturn cb();\n}\n\nconst getStore = () => appLauncherStore;\n\nclass StoreManager {\n\tinitialized: boolean;\n\n\tinitializing: boolean;\n\n\tcallbacks: Function[];\n\n\tstore: StoreModel | undefined | null;\n\n\tconstructor() {\n\t\tthis.initialized = false;\n\t\tthis.initializing = false;\n\t\tthis.callbacks = [];\n\t\tthis.store = null;\n\t}\n\n\tinitialize() {\n\t\tif (this.initializing) return;\n\t\tthis.initializing = true;\n\t\tinitialize((store?: StoreModel) => {\n\t\t\tthis.initialized = true;\n\t\t\tthis.store = store;\n\t\t\tthis.callbacks.forEach((cb) => cb(store));\n\t\t});\n\t}\n\n\taddInitializedListener(cb: (store: StoreModel) => void) {\n\t\tif (this.initialized && this.store) return cb(this.store);\n\t\tthis.callbacks.push(cb);\n\t}\n\n\tremoveInitializedListener(cb: Function) {\n\t\tthis.callbacks = this.callbacks.filter((entry) => entry !== cb);\n\t}\n}\nconst storeManager = new StoreManager();\n\nexport { storeManager, initialize, appLauncherStore as Store, Actions, getStore };\n"]}
|
|
@@ -58,7 +58,7 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
|
|
|
58
58
|
};
|
|
59
59
|
const [leftButtonTooltip, setLeftButtonTooltip] = useState("");
|
|
60
60
|
const [rightButtonTooltip, setRightButtonTooltip] = useState("");
|
|
61
|
-
const setWidgetsPositions = async (
|
|
61
|
+
const setWidgetsPositions = async () => {
|
|
62
62
|
var _a;
|
|
63
63
|
const { data: bounds } = await finsembleWindow.getBounds();
|
|
64
64
|
const scrollButtonsEnabled = document.querySelectorAll("#dashbar-container > .chevron-container").length > 0;
|
|
@@ -102,9 +102,6 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
|
|
|
102
102
|
}
|
|
103
103
|
setLeftButtonTooltip(`${leftItemsCount} more`);
|
|
104
104
|
setRightButtonTooltip(`${rightItemsCount} more`);
|
|
105
|
-
if (!isCalledFromDashbar) {
|
|
106
|
-
await setWidgetsPositions(true);
|
|
107
|
-
}
|
|
108
105
|
};
|
|
109
106
|
const addWidgets = async () => {
|
|
110
107
|
const _widgets = widgets;
|
|
@@ -136,7 +133,7 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
|
|
|
136
133
|
setWidgets(_widgets);
|
|
137
134
|
setHorizontalBounds(tempHorizontalBounds);
|
|
138
135
|
};
|
|
139
|
-
const removeWidgets = () => {
|
|
136
|
+
const removeWidgets = async () => {
|
|
140
137
|
const _widgets = widgets;
|
|
141
138
|
const toRemove = [];
|
|
142
139
|
Object.keys(_widgets).forEach((widgetId) => {
|
|
@@ -152,10 +149,10 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
|
|
|
152
149
|
toRemove.push(widgetId);
|
|
153
150
|
}
|
|
154
151
|
});
|
|
152
|
+
let tempNewHorizontalBounds = 0;
|
|
155
153
|
for (const id of toRemove) {
|
|
156
154
|
if (_widgets.hasOwnProperty(id)) {
|
|
157
|
-
|
|
158
|
-
_widgets[id].view.remove(() => {
|
|
155
|
+
await _widgets[id].view.remove(() => {
|
|
159
156
|
delete _widgets[id];
|
|
160
157
|
Object.values(_widgets).forEach((widget) => {
|
|
161
158
|
widget.bounds = {
|
|
@@ -167,14 +164,14 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
|
|
|
167
164
|
widget.view.setBounds(widget.bounds);
|
|
168
165
|
tempNewHorizontalBounds = tempNewHorizontalBounds + widget.bounds.width;
|
|
169
166
|
});
|
|
170
|
-
setWidgets(_widgets);
|
|
171
|
-
setHorizontalBounds(tempNewHorizontalBounds);
|
|
172
167
|
});
|
|
173
168
|
}
|
|
174
169
|
else {
|
|
175
170
|
FSBL.Clients.Logger.system.error(`Error removing widget: ${id} from dashbar`);
|
|
176
171
|
}
|
|
177
172
|
}
|
|
173
|
+
setWidgets(_widgets);
|
|
174
|
+
setHorizontalBounds(tempNewHorizontalBounds);
|
|
178
175
|
};
|
|
179
176
|
const reorganizeWidgets = () => {
|
|
180
177
|
const _widgets = widgets;
|
|
@@ -203,7 +200,7 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
|
|
|
203
200
|
setTotalWidgetsWidth(getTotalWidth());
|
|
204
201
|
}
|
|
205
202
|
else if (dashbarItems.length < WIDGET_COUNT) {
|
|
206
|
-
removeWidgets();
|
|
203
|
+
await removeWidgets();
|
|
207
204
|
setTotalWidgetsWidth(getTotalWidth());
|
|
208
205
|
}
|
|
209
206
|
else if (wasReorganized) {
|
|
@@ -211,7 +208,7 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
|
|
|
211
208
|
return;
|
|
212
209
|
reorganizeWidgets();
|
|
213
210
|
}
|
|
214
|
-
await setWidgetsPositions(
|
|
211
|
+
await setWidgetsPositions();
|
|
215
212
|
setIsUpdatingState(false);
|
|
216
213
|
};
|
|
217
214
|
if (isUpdatingState === false) {
|
|
@@ -281,7 +278,7 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
|
|
|
281
278
|
titleGrabPosition = location;
|
|
282
279
|
};
|
|
283
280
|
return (React.createElement("div", { className: wrapperClasses, style: { height: dashbarHeight } },
|
|
284
|
-
WIDGET_COUNT > 0 && (React.createElement(FinsembleDnDContext, { onDragEnd: reorderItems, onDragStart: startMove, onDragMove: moveItem, onLayoutUpdate: setWidgetsPositions, className: "finsemble-dashbar-section rearrange-region", id: "dashbar-container", axis: AllowableDnDAxis.x, lockAxis: AllowableDnDAxis.x, allowHorizontalScroll: true, showScrollButtonsTooltip: true, leftButtonTooltip: leftButtonTooltip, rightButtonTooltip: rightButtonTooltip }, Object.values(widgets).map((widget, i) => (React.createElement(DashbarItem, { key: i, id: Object.keys(widgets)[i], index: i, widgetTitleGenerator: titleGenerator, widget: widget, dashbarHeight: dashbar.height, widgetDividerWidth: widgetDividerWidth, setTitleHeight: setTitleHeight, setGrabLocation: setGrabLocation }))))),
|
|
281
|
+
WIDGET_COUNT > 0 && (React.createElement(FinsembleDnDContext, { onDragEnd: reorderItems, onDragStart: startMove, onDragMove: moveItem, onLayoutUpdate: setWidgetsPositions, className: "finsemble-dashbar-section rearrange-region", id: "dashbar-container", axis: AllowableDnDAxis.x, lockAxis: AllowableDnDAxis.x, allowHorizontalScroll: true, showScrollButtonsTooltip: true, leftButtonTooltip: leftButtonTooltip, rightButtonTooltip: rightButtonTooltip, metadata: { dashbar } }, Object.values(widgets).map((widget, i) => (React.createElement(DashbarItem, { key: i, id: Object.keys(widgets)[i], index: i, widgetTitleGenerator: titleGenerator, widget: widget, dashbarHeight: dashbar.height, widgetDividerWidth: widgetDividerWidth, setTitleHeight: setTitleHeight, setGrabLocation: setGrabLocation }))))),
|
|
285
282
|
WIDGET_COUNT === 0 && (React.createElement("div", { className: "add-dashbar-item-button", onClick: launchDashbar },
|
|
286
283
|
React.createElement("span", null,
|
|
287
284
|
React.createElement("i", { className: "ff-plus" })))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashbar.js","sourceRoot":"","sources":["../../../../src/components/toolbar/dashbar/Dashbar.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { DashbarItem } from \"./DashbarItem\";\nimport { Dashbar as DashbarType, DashbarItem as DashbarItemType, DashbarView } from \"../../../types/dashbarTypes\";\nimport { useDashbar } from \"../../../hooks/useDashbar\";\nimport { useToolbar } from \"../../../hooks/useToolbar\";\nimport { FinsembleDnDContext, AllowableDnDAxis } from \"../../legacyControls/FinsembleDnDContext\";\n\nimport \"../../../assets/css/dashbar.css\";\n\ntype DashbarViews = {\n\t[key: string]: DashbarView;\n} & {};\n\nlet cachedWidgetTop: number;\nlet cachedWidgetHeight: number;\n\nexport const Dashbar = ({ className, children, widgetTitleGenerator }: DashbarType) => {\n\tconst { dashbarItems, reorderDashbarItems } = useDashbar();\n\tconst { launchPreferences } = useToolbar();\n\n\tconst [widgets, setWidgets] = useState({});\n\tconst [horizontalBounds, setHorizontalBounds] = useState(0);\n\tconst [wasReorganized, setReorganized] = useState(false);\n\tconst [totalWidgetsWidth, setTotalWidgetsWidth] = useState(0);\n\tconst [isUpdatingState, setIsUpdatingState] = useState(false);\n\tconst [secondUpdateRequired, setSecondUpdateRequired] = useState(false);\n\n\tlet movingIndex: number | null = null; // The dasharItem index being dragged, null if none\n\tlet titleGrabPosition: number | null = null; // The mouse of event when a widget title is dragged\n\tlet offsetX: number | null = null; // The original grab location of a given view titlebar\n\n\tconst WIDGET_COUNT: number = Object.keys(widgets).length;\n\tconst SCROLL_BUTTON_WIDTH = 30;\n\n\tconst defaultWidgetTitleGenerator = (widget: DashbarView, titleRef: React.MutableRefObject<null>) => {\n\t\tconst handleWidgetTitleClick = () => {\n\t\t\tif (widget.raiseIntentOptions) {\n\t\t\t\tfdc3.raiseIntent(\n\t\t\t\t\twidget.raiseIntentOptions.intent,\n\t\t\t\t\twidget.raiseIntentOptions.context,\n\t\t\t\t\twidget.raiseIntentOptions.targetApp\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div ref={titleRef} onClick={() => handleWidgetTitleClick()}>\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: widget.title }}></span>\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst titleGenerator = widgetTitleGenerator ?? defaultWidgetTitleGenerator;\n\n\t/**\n\t *\n\t * @param {object} params\n\t * @param {number} oldIndex The index of the item being moved\n\t * @param {number} newIndex The index to move the item to\n\t */\n\tconst reorderItems = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\tmovingIndex = null;\n\t\ttitleGrabPosition = null;\n\t\toffsetX = null;\n\t\tsetReorganized(true);\n\t\t// Update the redux store\n\t\treorderDashbarItems({ oldIndex, newIndex });\n\t};\n\n\tconst launchDashbar = () => {\n\t\tlaunchPreferences(\"Dashbar\");\n\t};\n\n\tconst { dashbar } = FSBL.Clients.WindowClient.getSpawnData();\n\n\t// Dashbar is disabled (no config in toolbar) or dashbar height is not specified\n\tif (!dashbar || !dashbar.height) {\n\t\treturn null;\n\t}\n\tconst toolbarHeight = finsembleWindow.windowOptions.height;\n\tconst dashbarHeight = `${dashbar.height}px`;\n\tconst verticalBounds = toolbarHeight - dashbar.height;\n\tconst widgetDividerWidth = dashbar.widgetDividerWidth || 0;\n\n\tconst wrapperClasses = `finsemble-dashbar ${className || \"\"}`.trim();\n\n\tconst getTotalWidth = () => {\n\t\tlet totalWidth = 0;\n\t\tdashbarItems.forEach((item: DashbarItemType) => {\n\t\t\ttotalWidth = totalWidth + item.width;\n\t\t});\n\t\treturn totalWidth;\n\t};\n\n\tconst [leftButtonTooltip, setLeftButtonTooltip] = useState(\"\");\n\tconst [rightButtonTooltip, setRightButtonTooltip] = useState(\"\");\n\n\tconst setWidgetsPositions = async (isCalledFromDashbar?: boolean) => {\n\t\tconst { data: bounds } = await finsembleWindow.getBounds();\n\t\tconst scrollButtonsEnabled = document.querySelectorAll(\"#dashbar-container > .chevron-container\").length > 0;\n\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\tlet toolbarWidth = bounds?.width ?? 0;\n\t\tif (scrollButtonsEnabled) toolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;\n\n\t\tlet tempLeft = 0;\n\t\tlet leftButtonSize = 0;\n\t\tif (scrollButtonsEnabled) {\n\t\t\ttempLeft = SCROLL_BUTTON_WIDTH;\n\t\t\tleftButtonSize = SCROLL_BUTTON_WIDTH;\n\t\t}\n\n\t\tlet leftItemsCount = 0;\n\t\tlet rightItemsCount = 0;\n\n\t\tfor (const element of elements) {\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tconst widget = (widgets as DashbarViews)[element.id];\n\t\t\t// Happens when widgets were removed, but dom-elements still exists. So just ignore.\n\t\t\tif (!widget) continue;\n\n\t\t\tif (rect.left < SCROLL_BUTTON_WIDTH && scrollButtonsEnabled) {\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\tleftItemsCount++;\n\t\t\t} else {\n\t\t\t\twidget.bounds.width = rect.width - widgetDividerWidth;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t}\n\t\t\ttempLeft = tempLeft + widget.bounds.width + widgetDividerWidth;\n\n\t\t\tlet offsetRight = rect.left + rect.width + widgetDividerWidth - leftButtonSize - toolbarWidth;\n\t\t\tif (offsetRight > 0) {\n\t\t\t\t// hide title for invisible items\n\t\t\t\t(element.childNodes[0] as HTMLElement).style.visibility = \"hidden\";\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\trightItemsCount++;\n\t\t\t} else {\n\t\t\t\t(element.childNodes[0] as HTMLElement).style.visibility = \"visible\";\n\t\t\t}\n\t\t\twidget.view.setBounds(widget.bounds);\n\t\t}\n\n\t\tsetLeftButtonTooltip(`${leftItemsCount} more`);\n\t\tsetRightButtonTooltip(`${rightItemsCount} more`);\n\n\t\t//double call for fix fake empty space between widgets while scrolling\n\t\tif (!isCalledFromDashbar) {\n\t\t\tawait setWidgetsPositions(true);\n\t\t}\n\t};\n\n\tconst addWidgets = async () => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\tlet tempHorizontalBounds = horizontalBounds;\n\n\t\tfor (const item of dashbarItems) {\n\t\t\tconst widgetBounds = {\n\t\t\t\ttop: verticalBounds,\n\t\t\t\tleft: tempHorizontalBounds,\n\t\t\t\twidth: item.width - widgetDividerWidth,\n\t\t\t\theight: item.height || dashbar.height,\n\t\t\t};\n\n\t\t\tif (!_widgets.hasOwnProperty(item.id)) {\n\t\t\t\tconst res: any = await finsembleWindow.addBrowserView({\n\t\t\t\t\turl: item.url,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tallowAutoResize: false,\n\t\t\t\t});\n\n\t\t\t\t_widgets[item.id] = {\n\t\t\t\t\turl: item.url,\n\t\t\t\t\ttitle: item.title,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tview: res,\n\t\t\t\t\twidth: item.width,\n\t\t\t\t\traiseIntentOptions: item.raiseIntentOptions,\n\t\t\t\t};\n\n\t\t\t\ttempHorizontalBounds = tempHorizontalBounds + item.width;\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempHorizontalBounds);\n\t};\n\n\tconst removeWidgets = () => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\t// Widgets is an object, with each key being a reference to an item in dashbarItems\n\t\t// but dashbarItems is an array of objects. Its necessary to loop through them to determine\n\t\t// the differences to figure out which items were removed.\n\t\tconst toRemove: string[] = [];\n\t\tObject.keys(_widgets).forEach((widgetId) => {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < dashbarItems.length; i++) {\n\t\t\t\tconst dashItem = dashbarItems[i];\n\t\t\t\tif (dashItem.id === widgetId) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\ttoRemove.push(widgetId);\n\t\t\t}\n\t\t});\n\n\t\t// toRemove is an array of widgetIds which were no longer found in dashbarItems\n\t\t// As items are removed, the remaining items have to be shuffled to fill the space\n\t\tfor (const id of toRemove) {\n\t\t\tif (_widgets.hasOwnProperty(id)) {\n\t\t\t\tlet tempNewHorizontalBounds = 0;\n\t\t\t\t_widgets[id].view.remove(() => {\n\t\t\t\t\tdelete _widgets[id];\n\t\t\t\t\t// Shuffle remaining views to fill any gaps that were left\n\t\t\t\t\tObject.values(_widgets).forEach((widget) => {\n\t\t\t\t\t\twidget.bounds = {\n\t\t\t\t\t\t\twidth: widget.bounds.width,\n\t\t\t\t\t\t\theight: widget.bounds.height,\n\t\t\t\t\t\t\tleft: tempNewHorizontalBounds,\n\t\t\t\t\t\t\ttop: widget.bounds.top,\n\t\t\t\t\t\t};\n\t\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t\t\ttempNewHorizontalBounds = tempNewHorizontalBounds + widget.bounds.width;\n\t\t\t\t\t});\n\t\t\t\t\tsetWidgets(_widgets);\n\t\t\t\t\tsetHorizontalBounds(tempNewHorizontalBounds);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(`Error removing widget: ${id} from dashbar`);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst reorganizeWidgets = () => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\t// Each view needs to be resituated to fill any holes\n\t\t// left by views that have been removed. Use a tempBounds\n\t\t// int to keep track of new widths and set the overall width\n\t\t// once everything is re-seated\n\t\tlet tempBounds = 0;\n\t\tdashbarItems.forEach((item) => {\n\t\t\tconst widget = _widgets[item.id];\n\n\t\t\twidget.bounds = {\n\t\t\t\theight: cachedWidgetHeight || widget.bounds.height,\n\t\t\t\twidth: widget.bounds.width,\n\t\t\t\ttop: cachedWidgetTop || verticalBounds,\n\t\t\t\tleft: tempBounds,\n\t\t\t};\n\n\t\t\twidget.view.setBounds(widget.bounds);\n\n\t\t\tdelete _widgets[item.id];\n\t\t\t_widgets[item.id] = widget;\n\n\t\t\ttempBounds = tempBounds + item.width;\n\t\t});\n\n\t\tsetReorganized(false);\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempBounds);\n\t};\n\n\tconst updateItems = () => {\n\t\tconst doUpdate = async () => {\n\t\t\tif (dashbarItems.length > WIDGET_COUNT) {\n\t\t\t\t//Items have been added\n\t\t\t\tawait addWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (dashbarItems.length < WIDGET_COUNT) {\n\t\t\t\t//Items have been removed\n\t\t\t\tremoveWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (wasReorganized) {\n\t\t\t\tif (movingIndex) return;\n\t\t\t\t// Length is the same, order has changed\n\t\t\t\treorganizeWidgets();\n\t\t\t}\n\n\t\t\tawait setWidgetsPositions(true);\n\t\t\tsetIsUpdatingState(false);\n\t\t};\n\n\t\tif (isUpdatingState === false) {\n\t\t\tsetIsUpdatingState(true);\n\t\t\tdoUpdate();\n\t\t} else if (!secondUpdateRequired) {\n\t\t\tsetSecondUpdateRequired(true);\n\t\t}\n\t};\n\n\t/**\n\t * When the distributed store's 'dashbaritems' is updated it will cause this hook to\n\t * execute. The local representation of widgets will be mutated, then a call to\n\t * setWidgets will re-render the component\n\t */\n\tuseEffect(() => {\n\t\tupdateItems();\n\t}, [dashbarItems]);\n\n\t/**\n\t * DashbarItems can be changed very quickly before all widgets will be initialized.\n\t * Double-calling updateItems() fixes a bug.\n\t */\n\tuseEffect(() => {\n\t\tif (secondUpdateRequired && !isUpdatingState) {\n\t\t\tupdateItems();\n\t\t\tsetSecondUpdateRequired(false);\n\t\t}\n\t}, [isUpdatingState, secondUpdateRequired]);\n\n\t/**\n\t * Sets the title height as determined by the DashbarItem\n\t * component, since the CSS can be changed by the user\n\t * the component will render the title and pass back\n\t * computed height of that title, then the Dashbar will\n\t * make room for item\n\t *\n\t * @param {number} titleHeight The height of the span containing the title\n\t * @param {string} id The key'ed id of the view\n\t */\n\tconst setTitleHeight = (titleHeight: number, id: string) => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\tconst widget = _widgets[id];\n\t\tif (cachedWidgetTop) {\n\t\t\ttitleHeight = 0;\n\t\t}\n\n\t\tconst newBounds = {\n\t\t\ttop: cachedWidgetTop || widget.bounds.top + titleHeight,\n\t\t\tleft: widget.bounds.left,\n\t\t\theight: cachedWidgetHeight || widget.bounds.height - titleHeight,\n\t\t\twidth: widget.bounds.width,\n\t\t};\n\t\tcachedWidgetTop = newBounds.top;\n\t\tcachedWidgetHeight = newBounds.height;\n\n\t\twidget.view.setBounds(newBounds);\n\t\twidget.bounds = newBounds;\n\t\tsetWidgets(_widgets);\n\t};\n\n\t/**\n\t * When a view starts moving, bring it to the front\n\t *\n\t * @param {MouseEvent} event The event passed by react-sortable-hoc\n\t */\n\tconst startMove = (node: any, event: any) => {\n\t\tmovingIndex = node.index;\n\t\tif (offsetX === null && titleGrabPosition !== null) {\n\t\t\toffsetX = event.clientX - titleGrabPosition;\n\t\t}\n\t\tconst widget = Object.values(widgets)[node.index] as DashbarView;\n\t\twidget.view.bringToFront();\n\t};\n\n\t/**\n\t * Event triggered by view movement\n\t *\n\t * @param {MouseEvent} event\n\t */\n\tconst moveItem = (event: any) => {\n\t\tif (movingIndex !== null) {\n\t\t\tconst movingWidget = Object.values(widgets)[movingIndex] as DashbarView;\n\n\t\t\tmovingWidget.view.setBounds({\n\t\t\t\ttop: movingWidget.bounds.top,\n\t\t\t\theight: movingWidget.bounds.height,\n\t\t\t\twidth: movingWidget.bounds.width,\n\t\t\t\tleft: event.clientX - (offsetX || 0),\n\t\t\t});\n\n\t\t\t// Some completely not react very hacky stuff to make browserviews move in conjunction with the titles\n\t\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\t\tfor (const element of elements) {\n\t\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\t\tconst widget = (widgets as any)[element.id];\n\t\t\t\tif (widget !== movingWidget && widget.bounds.left !== rect.left) {\n\t\t\t\t\twidget.bounds.left = rect.left;\n\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst setGrabLocation = (location: number) => {\n\t\ttitleGrabPosition = location;\n\t};\n\n\treturn (\n\t\t<div className={wrapperClasses} style={{ height: dashbarHeight }}>\n\t\t\t{WIDGET_COUNT > 0 && (\n\t\t\t\t<FinsembleDnDContext\n\t\t\t\t\tonDragEnd={reorderItems}\n\t\t\t\t\tonDragStart={startMove}\n\t\t\t\t\tonDragMove={moveItem}\n\t\t\t\t\tonLayoutUpdate={setWidgetsPositions}\n\t\t\t\t\tclassName=\"finsemble-dashbar-section rearrange-region\"\n\t\t\t\t\tid=\"dashbar-container\"\n\t\t\t\t\taxis={AllowableDnDAxis.x}\n\t\t\t\t\tlockAxis={AllowableDnDAxis.x}\n\t\t\t\t\tallowHorizontalScroll={true}\n\t\t\t\t\tshowScrollButtonsTooltip={true}\n\t\t\t\t\tleftButtonTooltip={leftButtonTooltip}\n\t\t\t\t\trightButtonTooltip={rightButtonTooltip}\n\t\t\t\t>\n\t\t\t\t\t{Object.values(widgets).map((widget, i) => (\n\t\t\t\t\t\t<DashbarItem\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tid={Object.keys(widgets)[i]}\n\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\twidgetTitleGenerator={titleGenerator}\n\t\t\t\t\t\t\twidget={widget as DashbarView}\n\t\t\t\t\t\t\tdashbarHeight={dashbar.height}\n\t\t\t\t\t\t\twidgetDividerWidth={widgetDividerWidth}\n\t\t\t\t\t\t\tsetTitleHeight={setTitleHeight}\n\t\t\t\t\t\t\tsetGrabLocation={setGrabLocation}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</FinsembleDnDContext>\n\t\t\t)}\n\t\t\t{WIDGET_COUNT === 0 && (\n\t\t\t\t<div className=\"add-dashbar-item-button\" onClick={launchDashbar}>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<i className=\"ff-plus\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Dashbar.js","sourceRoot":"","sources":["../../../../src/components/toolbar/dashbar/Dashbar.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { DashbarItem } from \"./DashbarItem\";\nimport { Dashbar as DashbarType, DashbarItem as DashbarItemType, DashbarView } from \"../../../types/dashbarTypes\";\nimport { useDashbar } from \"../../../hooks/useDashbar\";\nimport { useToolbar } from \"../../../hooks/useToolbar\";\nimport { FinsembleDnDContext, AllowableDnDAxis } from \"../../legacyControls/FinsembleDnDContext\";\n\nimport \"../../../assets/css/dashbar.css\";\n\ntype DashbarViews = {\n\t[key: string]: DashbarView;\n} & {};\n\nlet cachedWidgetTop: number;\nlet cachedWidgetHeight: number;\n\nexport const Dashbar = ({ className, children, widgetTitleGenerator }: DashbarType) => {\n\tconst { dashbarItems, reorderDashbarItems } = useDashbar();\n\tconst { launchPreferences } = useToolbar();\n\n\tconst [widgets, setWidgets] = useState({});\n\tconst [horizontalBounds, setHorizontalBounds] = useState(0);\n\tconst [wasReorganized, setReorganized] = useState(false);\n\tconst [totalWidgetsWidth, setTotalWidgetsWidth] = useState(0);\n\tconst [isUpdatingState, setIsUpdatingState] = useState(false);\n\tconst [secondUpdateRequired, setSecondUpdateRequired] = useState(false);\n\n\tlet movingIndex: number | null = null; // The dasharItem index being dragged, null if none\n\tlet titleGrabPosition: number | null = null; // The mouse of event when a widget title is dragged\n\tlet offsetX: number | null = null; // The original grab location of a given view titlebar\n\n\tconst WIDGET_COUNT: number = Object.keys(widgets).length;\n\tconst SCROLL_BUTTON_WIDTH = 30;\n\n\tconst defaultWidgetTitleGenerator = (widget: DashbarView, titleRef: React.MutableRefObject<null>) => {\n\t\tconst handleWidgetTitleClick = () => {\n\t\t\tif (widget.raiseIntentOptions) {\n\t\t\t\tfdc3.raiseIntent(\n\t\t\t\t\twidget.raiseIntentOptions.intent,\n\t\t\t\t\twidget.raiseIntentOptions.context,\n\t\t\t\t\twidget.raiseIntentOptions.targetApp\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div ref={titleRef} onClick={() => handleWidgetTitleClick()}>\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: widget.title }}></span>\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst titleGenerator = widgetTitleGenerator ?? defaultWidgetTitleGenerator;\n\n\t/**\n\t *\n\t * @param {object} params\n\t * @param {number} oldIndex The index of the item being moved\n\t * @param {number} newIndex The index to move the item to\n\t */\n\tconst reorderItems = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\tmovingIndex = null;\n\t\ttitleGrabPosition = null;\n\t\toffsetX = null;\n\t\tsetReorganized(true);\n\t\t// Update the redux store\n\t\treorderDashbarItems({ oldIndex, newIndex });\n\t};\n\n\tconst launchDashbar = () => {\n\t\tlaunchPreferences(\"Dashbar\");\n\t};\n\n\tconst { dashbar } = FSBL.Clients.WindowClient.getSpawnData();\n\n\t// Dashbar is disabled (no config in toolbar) or dashbar height is not specified\n\tif (!dashbar || !dashbar.height) {\n\t\treturn null;\n\t}\n\tconst toolbarHeight = finsembleWindow.windowOptions.height;\n\tconst dashbarHeight = `${dashbar.height}px`;\n\tconst verticalBounds = toolbarHeight - dashbar.height;\n\tconst widgetDividerWidth = dashbar.widgetDividerWidth || 0;\n\n\tconst wrapperClasses = `finsemble-dashbar ${className || \"\"}`.trim();\n\n\tconst getTotalWidth = () => {\n\t\tlet totalWidth = 0;\n\t\tdashbarItems.forEach((item: DashbarItemType) => {\n\t\t\ttotalWidth = totalWidth + item.width;\n\t\t});\n\t\treturn totalWidth;\n\t};\n\n\tconst [leftButtonTooltip, setLeftButtonTooltip] = useState(\"\");\n\tconst [rightButtonTooltip, setRightButtonTooltip] = useState(\"\");\n\n\tconst setWidgetsPositions = async () => {\n\t\tconst { data: bounds } = await finsembleWindow.getBounds();\n\t\tconst scrollButtonsEnabled = document.querySelectorAll(\"#dashbar-container > .chevron-container\").length > 0;\n\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\tlet toolbarWidth = bounds?.width ?? 0;\n\t\tif (scrollButtonsEnabled) toolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;\n\n\t\tlet tempLeft = 0;\n\t\tlet leftButtonSize = 0;\n\t\tif (scrollButtonsEnabled) {\n\t\t\ttempLeft = SCROLL_BUTTON_WIDTH;\n\t\t\tleftButtonSize = SCROLL_BUTTON_WIDTH;\n\t\t}\n\n\t\tlet leftItemsCount = 0;\n\t\tlet rightItemsCount = 0;\n\n\t\tfor (const element of elements) {\n\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\tconst widget = (widgets as DashbarViews)[element.id];\n\t\t\t// Happens when widgets were removed, but dom-elements still exists. So just ignore.\n\t\t\tif (!widget) continue;\n\n\t\t\tif (rect.left < SCROLL_BUTTON_WIDTH && scrollButtonsEnabled) {\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\tleftItemsCount++;\n\t\t\t} else {\n\t\t\t\twidget.bounds.width = rect.width - widgetDividerWidth;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t}\n\t\t\ttempLeft = tempLeft + widget.bounds.width + widgetDividerWidth;\n\n\t\t\tlet offsetRight = rect.left + rect.width + widgetDividerWidth - leftButtonSize - toolbarWidth;\n\t\t\tif (offsetRight > 0) {\n\t\t\t\t// hide title for invisible items\n\t\t\t\t(element.childNodes[0] as HTMLElement).style.visibility = \"hidden\";\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\trightItemsCount++;\n\t\t\t} else {\n\t\t\t\t(element.childNodes[0] as HTMLElement).style.visibility = \"visible\";\n\t\t\t}\n\t\t\twidget.view.setBounds(widget.bounds);\n\t\t}\n\n\t\tsetLeftButtonTooltip(`${leftItemsCount} more`);\n\t\tsetRightButtonTooltip(`${rightItemsCount} more`);\n\t};\n\n\tconst addWidgets = async () => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\tlet tempHorizontalBounds = horizontalBounds;\n\n\t\tfor (const item of dashbarItems) {\n\t\t\tconst widgetBounds = {\n\t\t\t\ttop: verticalBounds,\n\t\t\t\tleft: tempHorizontalBounds,\n\t\t\t\twidth: item.width - widgetDividerWidth,\n\t\t\t\theight: item.height || dashbar.height,\n\t\t\t};\n\n\t\t\tif (!_widgets.hasOwnProperty(item.id)) {\n\t\t\t\tconst res: any = await finsembleWindow.addBrowserView({\n\t\t\t\t\turl: item.url,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tallowAutoResize: false,\n\t\t\t\t});\n\n\t\t\t\t_widgets[item.id] = {\n\t\t\t\t\turl: item.url,\n\t\t\t\t\ttitle: item.title,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tview: res,\n\t\t\t\t\twidth: item.width,\n\t\t\t\t\traiseIntentOptions: item.raiseIntentOptions,\n\t\t\t\t};\n\n\t\t\t\ttempHorizontalBounds = tempHorizontalBounds + item.width;\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempHorizontalBounds);\n\t};\n\n\tconst removeWidgets = async () => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\t// Widgets is an object, with each key being a reference to an item in dashbarItems\n\t\t// but dashbarItems is an array of objects. Its necessary to loop through them to determine\n\t\t// the differences to figure out which items were removed.\n\t\tconst toRemove: string[] = [];\n\t\tObject.keys(_widgets).forEach((widgetId) => {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < dashbarItems.length; i++) {\n\t\t\t\tconst dashItem = dashbarItems[i];\n\t\t\t\tif (dashItem.id === widgetId) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\ttoRemove.push(widgetId);\n\t\t\t}\n\t\t});\n\n\t\tlet tempNewHorizontalBounds = 0;\n\t\t// toRemove is an array of widgetIds which were no longer found in dashbarItems\n\t\t// As items are removed, the remaining items have to be shuffled to fill the space\n\t\tfor (const id of toRemove) {\n\t\t\tif (_widgets.hasOwnProperty(id)) {\n\t\t\t\tawait _widgets[id].view.remove(() => {\n\t\t\t\t\tdelete _widgets[id];\n\t\t\t\t\t// Shuffle remaining views to fill any gaps that were left\n\t\t\t\t\tObject.values(_widgets).forEach((widget) => {\n\t\t\t\t\t\twidget.bounds = {\n\t\t\t\t\t\t\twidth: widget.bounds.width,\n\t\t\t\t\t\t\theight: widget.bounds.height,\n\t\t\t\t\t\t\tleft: tempNewHorizontalBounds,\n\t\t\t\t\t\t\ttop: widget.bounds.top,\n\t\t\t\t\t\t};\n\t\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t\t\ttempNewHorizontalBounds = tempNewHorizontalBounds + widget.bounds.width;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(`Error removing widget: ${id} from dashbar`);\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempNewHorizontalBounds);\n\t};\n\n\tconst reorganizeWidgets = () => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\t// Each view needs to be resituated to fill any holes\n\t\t// left by views that have been removed. Use a tempBounds\n\t\t// int to keep track of new widths and set the overall width\n\t\t// once everything is re-seated\n\t\tlet tempBounds = 0;\n\t\tdashbarItems.forEach((item) => {\n\t\t\tconst widget = _widgets[item.id];\n\n\t\t\twidget.bounds = {\n\t\t\t\theight: cachedWidgetHeight || widget.bounds.height,\n\t\t\t\twidth: widget.bounds.width,\n\t\t\t\ttop: cachedWidgetTop || verticalBounds,\n\t\t\t\tleft: tempBounds,\n\t\t\t};\n\n\t\t\twidget.view.setBounds(widget.bounds);\n\n\t\t\tdelete _widgets[item.id];\n\t\t\t_widgets[item.id] = widget;\n\n\t\t\ttempBounds = tempBounds + item.width;\n\t\t});\n\n\t\tsetReorganized(false);\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempBounds);\n\t};\n\n\tconst updateItems = () => {\n\t\tconst doUpdate = async () => {\n\t\t\tif (dashbarItems.length > WIDGET_COUNT) {\n\t\t\t\t//Items have been added\n\t\t\t\tawait addWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (dashbarItems.length < WIDGET_COUNT) {\n\t\t\t\t//Items have been removed\n\t\t\t\tawait removeWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (wasReorganized) {\n\t\t\t\tif (movingIndex) return;\n\t\t\t\t// Length is the same, order has changed\n\t\t\t\treorganizeWidgets();\n\t\t\t}\n\n\t\t\tawait setWidgetsPositions();\n\t\t\tsetIsUpdatingState(false);\n\t\t};\n\n\t\tif (isUpdatingState === false) {\n\t\t\tsetIsUpdatingState(true);\n\t\t\tdoUpdate();\n\t\t} else if (!secondUpdateRequired) {\n\t\t\tsetSecondUpdateRequired(true);\n\t\t}\n\t};\n\n\t/**\n\t * When the distributed store's 'dashbaritems' is updated it will cause this hook to\n\t * execute. The local representation of widgets will be mutated, then a call to\n\t * setWidgets will re-render the component\n\t */\n\tuseEffect(() => {\n\t\tupdateItems();\n\t}, [dashbarItems]);\n\n\t/**\n\t * DashbarItems can be changed very quickly before all widgets will be initialized.\n\t * Double-calling updateItems() fixes a bug.\n\t */\n\tuseEffect(() => {\n\t\tif (secondUpdateRequired && !isUpdatingState) {\n\t\t\tupdateItems();\n\t\t\tsetSecondUpdateRequired(false);\n\t\t}\n\t}, [isUpdatingState, secondUpdateRequired]);\n\n\t/**\n\t * Sets the title height as determined by the DashbarItem\n\t * component, since the CSS can be changed by the user\n\t * the component will render the title and pass back\n\t * computed height of that title, then the Dashbar will\n\t * make room for item\n\t *\n\t * @param {number} titleHeight The height of the span containing the title\n\t * @param {string} id The key'ed id of the view\n\t */\n\tconst setTitleHeight = (titleHeight: number, id: string) => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\tconst widget = _widgets[id];\n\t\tif (cachedWidgetTop) {\n\t\t\ttitleHeight = 0;\n\t\t}\n\n\t\tconst newBounds = {\n\t\t\ttop: cachedWidgetTop || widget.bounds.top + titleHeight,\n\t\t\tleft: widget.bounds.left,\n\t\t\theight: cachedWidgetHeight || widget.bounds.height - titleHeight,\n\t\t\twidth: widget.bounds.width,\n\t\t};\n\t\tcachedWidgetTop = newBounds.top;\n\t\tcachedWidgetHeight = newBounds.height;\n\n\t\twidget.view.setBounds(newBounds);\n\t\twidget.bounds = newBounds;\n\t\tsetWidgets(_widgets);\n\t};\n\n\t/**\n\t * When a view starts moving, bring it to the front\n\t *\n\t * @param {MouseEvent} event The event passed by react-sortable-hoc\n\t */\n\tconst startMove = (node: any, event: any) => {\n\t\tmovingIndex = node.index;\n\t\tif (offsetX === null && titleGrabPosition !== null) {\n\t\t\toffsetX = event.clientX - titleGrabPosition;\n\t\t}\n\t\tconst widget = Object.values(widgets)[node.index] as DashbarView;\n\t\twidget.view.bringToFront();\n\t};\n\n\t/**\n\t * Event triggered by view movement\n\t *\n\t * @param {MouseEvent} event\n\t */\n\tconst moveItem = (event: any) => {\n\t\tif (movingIndex !== null) {\n\t\t\tconst movingWidget = Object.values(widgets)[movingIndex] as DashbarView;\n\n\t\t\tmovingWidget.view.setBounds({\n\t\t\t\ttop: movingWidget.bounds.top,\n\t\t\t\theight: movingWidget.bounds.height,\n\t\t\t\twidth: movingWidget.bounds.width,\n\t\t\t\tleft: event.clientX - (offsetX || 0),\n\t\t\t});\n\n\t\t\t// Some completely not react very hacky stuff to make browserviews move in conjunction with the titles\n\t\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\t\tfor (const element of elements) {\n\t\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\t\tconst widget = (widgets as any)[element.id];\n\t\t\t\tif (widget !== movingWidget && widget.bounds.left !== rect.left) {\n\t\t\t\t\twidget.bounds.left = rect.left;\n\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst setGrabLocation = (location: number) => {\n\t\ttitleGrabPosition = location;\n\t};\n\n\treturn (\n\t\t<div className={wrapperClasses} style={{ height: dashbarHeight }}>\n\t\t\t{WIDGET_COUNT > 0 && (\n\t\t\t\t<FinsembleDnDContext\n\t\t\t\t\tonDragEnd={reorderItems}\n\t\t\t\t\tonDragStart={startMove}\n\t\t\t\t\tonDragMove={moveItem}\n\t\t\t\t\tonLayoutUpdate={setWidgetsPositions}\n\t\t\t\t\tclassName=\"finsemble-dashbar-section rearrange-region\"\n\t\t\t\t\tid=\"dashbar-container\"\n\t\t\t\t\taxis={AllowableDnDAxis.x}\n\t\t\t\t\tlockAxis={AllowableDnDAxis.x}\n\t\t\t\t\tallowHorizontalScroll={true}\n\t\t\t\t\tshowScrollButtonsTooltip={true}\n\t\t\t\t\tleftButtonTooltip={leftButtonTooltip}\n\t\t\t\t\trightButtonTooltip={rightButtonTooltip}\n\t\t\t\t\tmetadata={{ dashbar }}\n\t\t\t\t>\n\t\t\t\t\t{Object.values(widgets).map((widget, i) => (\n\t\t\t\t\t\t<DashbarItem\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tid={Object.keys(widgets)[i]}\n\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\twidgetTitleGenerator={titleGenerator}\n\t\t\t\t\t\t\twidget={widget as DashbarView}\n\t\t\t\t\t\t\tdashbarHeight={dashbar.height}\n\t\t\t\t\t\t\twidgetDividerWidth={widgetDividerWidth}\n\t\t\t\t\t\t\tsetTitleHeight={setTitleHeight}\n\t\t\t\t\t\t\tsetGrabLocation={setGrabLocation}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</FinsembleDnDContext>\n\t\t\t)}\n\t\t\t{WIDGET_COUNT === 0 && (\n\t\t\t\t<div className=\"add-dashbar-item-button\" onClick={launchDashbar}>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<i className=\"ff-plus\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Workspace as WorkspaceType } from "@finsemble/finsemble-
|
|
2
|
+
import { Workspace as WorkspaceType } from "@finsemble/finsemble-api/types/common/workspace";
|
|
3
3
|
import "./workspaceManagementMenu.css";
|
|
4
|
-
import StoreModel from "@finsemble/finsemble-
|
|
4
|
+
import StoreModel from "@finsemble/finsemble-api/types/clients/StoreModel";
|
|
5
5
|
interface IProps {
|
|
6
6
|
id?: string;
|
|
7
7
|
className?: string;
|