@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":"utils.js","sourceRoot":"","sources":["../../../src/components/notifications/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAczD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,YAA2B,EAA2B,EAAE;IAC3F,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IAE/D,IAAI,kBAAkB,GAAG;QACxB,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,CAClC,CAAC,CAAmB,EAAE,CAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CACvG;KACD,CAAC;IAEF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;QAClC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;KAC7B;SAAM;QACN,OAAO,IAAI,CAAC;KACZ;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,YAA2B,EAAE,gCAAwC,EAAE,EAAE;IAC1G,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAE3D,IACC,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,KAAK,gBAAgB,CAAC;QAChE,YAAY,CAAC,MAAM;QACnB,CAAC,YAAY,CAAC,cAAc,IAAI,YAAY,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,EACtE;QACD,OAAO,KAAK,CAAC;KACb;IACD,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,gCAAgC,CAAC;AAC5G,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,YAA2B,EAAE,gCAAwC,EAAE,EAAE;IACzG,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAE3D,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,KAAK,CAAC;IAElF,OAAO,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,GAAG,gCAAgC,CAAC;AACrH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,kBAAmD,EAAW,EAAE,CAC/F,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3G,MAAM,MAAM,GAAG,CACd,YAA2B,EAC3B,WAAkD,EAClD,YAAoB,EACV,EAAE;IACZ,IAAI,WAAW,EAAE;QAChB,OAAQ,YAAY,CAAC,WAAW,CAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;KAChG;SAAM;QACN,OAAO,CACL,YAAY,CAAC,OAAO,CAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACnF,YAAY,CAAC,SAAS,CAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;YACrF,YAAY,CAAC,QAAQ,CAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CACrF,CAAC;KACF;IACD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,aAA8B,EAAE,UAAkB,EAAmB,EAAE,CAC1G,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE;IAC1C,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;QACjC,OAAO,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KAC7D;SAAM;QACN,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YACzF,OAAO,MAAM,CAAC,YAAY,EAAE,KAA8C,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACvG;aAAM;YACN,OAAO,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC7D;KACD;AACF,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,YAA2B,EAAe,EAAE;IACzF,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,YAAY,CAAC,MAAM,EAAE;QACxB,UAAU,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;KACxC;IACD,IAAI,YAAY,CAAC,IAAI,EAAE;QACtB,UAAU,CAAC,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;KACpC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC","sourcesContent":["import { parseISO, differenceInSeconds } from \"date-fns\";\n\n// Types\nimport { Control, NotificationCenterControlsProps } from \"./types\";\nimport { services } from \"@finsemble/finsemble-
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/notifications/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { parseISO, differenceInSeconds } from \"date-fns\";\n\n// Types\nimport { Control, NotificationCenterControlsProps } from \"./types\";\nimport { services } from \"@finsemble/finsemble-api\";\n\ntype INotification = services.notification.types.INotification;\ntype IMuteFilter = services.notification.types.IMuteFilter;\ntype IPerformedAction = services.notification.types.IPerformedAction;\n\n/**\n * Simplify this function with optional chaining\nreturn notification?.actionsHistory?.sort((a: IPerformedAction, b: IPerformedAction) => Date.parse(b.datePerformed) - Date.parse(a.datePerformed))?.[0]\n */\nexport const getMostRecentAction = (notification: INotification): IPerformedAction | null => {\n\tif (!notification || !notification.actionsHistory) return null;\n\n\tlet actionHistoryArray = [\n\t\t...notification.actionsHistory.sort(\n\t\t\t(a: IPerformedAction, b: IPerformedAction) => Date.parse(b.datePerformed) - Date.parse(a.datePerformed)\n\t\t),\n\t];\n\n\tif (actionHistoryArray.length > 0) {\n\t\treturn actionHistoryArray[0];\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexport const isNewNotification = (notification: INotification, newNotificationHaloPeriodSeconds: number) => {\n\tconst mostRecentAction = getMostRecentAction(notification);\n\n\tif (\n\t\t(mostRecentAction && mostRecentAction.type === \"FINSEMBLE:READ\") ||\n\t\tnotification.isRead ||\n\t\t(notification.actionsHistory && notification.actionsHistory.length > 1)\n\t) {\n\t\treturn false;\n\t}\n\treturn differenceInSeconds(Date.now(), parseISO(notification.issuedAt)) < newNotificationHaloPeriodSeconds;\n};\n\nexport const isReNotification = (notification: INotification, newNotificationHaloPeriodSeconds: number) => {\n\tconst mostRecentAction = getMostRecentAction(notification);\n\n\tif (!mostRecentAction || mostRecentAction.type !== \"FINSEMBLE:WAKE\") return false;\n\n\treturn differenceInSeconds(Date.now(), parseISO(mostRecentAction.datePerformed)) < newNotificationHaloPeriodSeconds;\n};\n\nexport const getActiveFilter = (drawerControlProps: NotificationCenterControlsProps): Control =>\n\tdrawerControlProps.controls.filter((control: Control) => control.action === drawerControlProps.active)[0];\n\nconst search = (\n\tnotification: INotification,\n\tsearchField: \"title\" | \"details\" | \"source\" | null,\n\tsearchString: string\n): boolean => {\n\tif (searchField) {\n\t\treturn (notification[searchField] as string).toLowerCase().includes(searchString.toLowerCase());\n\t} else {\n\t\treturn (\n\t\t\t(notification[\"title\"] as string).toLowerCase().includes(searchString.toLowerCase()) ||\n\t\t\t(notification[\"details\"] as string).toLowerCase().includes(searchString.toLowerCase()) ||\n\t\t\t(notification[\"source\"] as string).toLowerCase().includes(searchString.toLowerCase())\n\t\t);\n\t}\n\treturn false;\n};\n\nexport const searchNotifications = (notifications: INotification[], searchTerm: string): INotification[] =>\n\t[...notifications].filter((notification) => {\n\t\tconst searchTermSplit = searchTerm.split(\":\");\n\t\tif (searchTermSplit.length === 1) {\n\t\t\treturn search(notification, null, searchTermSplit[0].trim());\n\t\t} else {\n\t\t\tconst field = searchTermSplit[0].trim();\n\t\t\tif ([\"title\", \"details\", \"source\"].includes(field) && notification.hasOwnProperty(field)) {\n\t\t\t\treturn search(notification, field as \"title\" | \"details\" | \"source\" | null, searchTermSplit[1].trim());\n\t\t\t} else {\n\t\t\t\treturn search(notification, null, searchTermSplit[1].trim());\n\t\t\t}\n\t\t}\n\t});\n\nexport const getMuteFilterFromNotification = (notification: INotification): IMuteFilter => {\n\tconst muteFilter: IMuteFilter = {};\n\tif (notification.source) {\n\t\tmuteFilter.source = notification.source;\n\t}\n\tif (notification.type) {\n\t\tmuteFilter.type = notification.type;\n\t}\n\treturn muteFilter;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcessMonitor.js","sourceRoot":"","sources":["../../../src/components/processMonitor/ProcessMonitor.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { Store, Actions } from \"./stores/ProcessMonitorStore\";\nimport ListHeader from \"./components/ListHeader\";\nimport ProcessStatistics from \"./components/ProcessStatistics\";\nimport ChildWindow from \"./components/ChildWindow\";\nimport { EMPTY_TOTALS, SIMPLE_MODE_STATISTICS, ADVANCED_MODE_STATISTICS } from \"./constants.js\";\nimport { statReducer, roundDecimalToPrecision, bytesToSize } from \"./helpers.js\";\nimport \"../../assets/css/processMonitor.css\";\nimport { ProcessType, ViewModeEnums, ChildWindowType } from \"./ProcessMonitorTypes\";\nimport { StandardError } from \"@finsemble/finsemble-core/types/types\";\n\nimport FloatingFocus from \"@q42/floating-focus-a11y\";\n// The package FloatingFocus injects a focus indicator that moves around the page, but only for\n// keyboard users. (Mouse users don't see the indicator.) All that needs to be done is to envoke it.\nnew FloatingFocus();\n\ninterface IProps {}\ninterface IState {\n\tprocessList: ProcessType[];\n\tviewMode: ViewModeEnums;\n}\nclass ProcessMonitorBase extends React.Component<IProps, IState> {\n\tconstructor(props: {}) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tprocessList: [],\n\t\t\tviewMode: ViewModeEnums.SIMPLE,\n\t\t};\n\t\tthis.bindCorrectContext();\n\t}\n\n\tbindCorrectContext() {\n\t\tthis.onProcessListChanged = this.onProcessListChanged.bind(this);\n\t\tthis.onViewModeChanged = this.onViewModeChanged.bind(this);\n\t}\n\n\t/**\n\t * Handler for when we go from simple to advanced mode, or the opposite.\n\t */\n\tonViewModeChanged(err: StandardError, response: { value: ViewModeEnums }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\tviewMode: value,\n\t\t});\n\t}\n\n\t/**\n\t * Invoked at minimum, once per second. This listener handles updates that we receive from the system.\n\t */\n\tonProcessListChanged(err: StandardError, response: { value: ProcessType[] }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\tprocessList: value,\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\tActions.initialize(() => {\n\t\t\tStore?.addListener({ field: \"processList\" }, this.onProcessListChanged);\n\t\t\tStore?.addListener({ field: \"viewMode\" }, this.onViewModeChanged);\n\t\t});\n\t}\n\n\tcomponentWillUnmount() {\n\t\tStore?.removeListener({ field: \"processList\" }, this.onProcessListChanged);\n\t\tStore?.removeListener({ field: \"viewMode\" }, this.onViewModeChanged);\n\t}\n\n\trender() {\n\t\tif (!Store) return null;\n\t\t// View modes are:\n\t\t// * Simple - Top-level views, showing stats: CPU, Memory\n\t\t// * Advanced - Expanded processes, showing stats: CPU, Memory, Peak Memory, PID\n\n\t\t// statReducer is an array.reduce function that will sum all of the CPU/memory usage across the app.\n\t\tconst totals = this.state.processList.length ? this.state.processList.reduce(statReducer) : EMPTY_TOTALS;\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<div className=\"process-list-wrapper\">\n\t\t\t\t\t<ListHeader\n\t\t\t\t\t\tfields={this.state.viewMode === ViewModeEnums.SIMPLE ? SIMPLE_MODE_STATISTICS : ADVANCED_MODE_STATISTICS}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"process-list\">\n\t\t\t\t\t\t{/* Filter will remove the hidden processes. Afterwards, map will render the remaining processes in turn. */}\n\t\t\t\t\t\t{this.state.processList\n\t\t\t\t\t\t\t.filter((proc) => proc.visible)\n\t\t\t\t\t\t\t.map((proc, i) => (\n\t\t\t\t\t\t\t\t<div key={i} className=\"process\">\n\t\t\t\t\t\t\t\t\t{/* Process statistics is the meat of this component. It's the statistics and the child windows. */}\n\t\t\t\t\t\t\t\t\t<ProcessStatistics\n\t\t\t\t\t\t\t\t\t\tmode={this.state.viewMode}\n\t\t\t\t\t\t\t\t\t\tfields={\n\t\t\t\t\t\t\t\t\t\t\tthis.state.viewMode === ViewModeEnums.SIMPLE ? SIMPLE_MODE_STATISTICS : ADVANCED_MODE_STATISTICS\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tstats={proc.statistics}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{proc.childWindows?.map((cw: ChildWindowType, j: number) => (\n\t\t\t\t\t\t\t\t\t\t<ChildWindow key={j} viewMode={this.state.viewMode} cw={cw} />\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"bottom-section\">\n\t\t\t\t\t<div className=\"summary-statistics-wrapper\">\n\t\t\t\t\t\t<div className=\"summary-statistics-header\">Finsemble Total Usage</div>\n\t\t\t\t\t\t<div className=\"summary-statistics\">\n\t\t\t\t\t\t\t{typeof totals.statistics.cpuUsage !== \"undefined\" && (\n\t\t\t\t\t\t\t\t<div className=\"summary-statistic\">\n\t\t\t\t\t\t\t\t\t<div className=\"summary-statistic-label\">CPU</div>\n\t\t\t\t\t\t\t\t\t<div className=\"summary-statistic-number\">{`${roundDecimalToPrecision(\n\t\t\t\t\t\t\t\t\t\ttotals.statistics.cpuUsage,\n\t\t\t\t\t\t\t\t\t\t2\n\t\t\t\t\t\t\t\t\t)}%`}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{typeof totals.statistics.workingSetSize !== \"undefined\" && (\n\t\t\t\t\t\t\t\t<div className=\"summary-statistic\">\n\t\t\t\t\t\t\t\t\t<div className=\"summary-statistic-label\">Memory</div>\n\t\t\t\t\t\t\t\t\t<div className=\"summary-statistic-number\">{bytesToSize(totals.statistics.workingSetSize)}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"advanced-button-wrapper\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"fsbl-button advanced-button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tActions.toggleViewMode();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\tActions.toggleViewMode();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{this.state.viewMode === ViewModeEnums.ADVANCED ? \"Simple\" : \"Advanced\"}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\n/**\n * The window that shows performance data for applications running in Finsemble, such as CPU and memory usage.\n */\nexport const ProcessMonitor = () => <ProcessMonitorBase />;\n"]}
|
|
1
|
+
{"version":3,"file":"ProcessMonitor.js","sourceRoot":"","sources":["../../../src/components/processMonitor/ProcessMonitor.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { Store, Actions } from \"./stores/ProcessMonitorStore\";\nimport ListHeader from \"./components/ListHeader\";\nimport ProcessStatistics from \"./components/ProcessStatistics\";\nimport ChildWindow from \"./components/ChildWindow\";\nimport { EMPTY_TOTALS, SIMPLE_MODE_STATISTICS, ADVANCED_MODE_STATISTICS } from \"./constants.js\";\nimport { statReducer, roundDecimalToPrecision, bytesToSize } from \"./helpers.js\";\nimport \"../../assets/css/processMonitor.css\";\nimport { ProcessType, ViewModeEnums, ChildWindowType } from \"./ProcessMonitorTypes\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\n\nimport FloatingFocus from \"@q42/floating-focus-a11y\";\n// The package FloatingFocus injects a focus indicator that moves around the page, but only for\n// keyboard users. (Mouse users don't see the indicator.) All that needs to be done is to envoke it.\nnew FloatingFocus();\n\ninterface IProps {}\ninterface IState {\n\tprocessList: ProcessType[];\n\tviewMode: ViewModeEnums;\n}\nclass ProcessMonitorBase extends React.Component<IProps, IState> {\n\tconstructor(props: {}) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tprocessList: [],\n\t\t\tviewMode: ViewModeEnums.SIMPLE,\n\t\t};\n\t\tthis.bindCorrectContext();\n\t}\n\n\tbindCorrectContext() {\n\t\tthis.onProcessListChanged = this.onProcessListChanged.bind(this);\n\t\tthis.onViewModeChanged = this.onViewModeChanged.bind(this);\n\t}\n\n\t/**\n\t * Handler for when we go from simple to advanced mode, or the opposite.\n\t */\n\tonViewModeChanged(err: StandardError, response: { value: ViewModeEnums }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\tviewMode: value,\n\t\t});\n\t}\n\n\t/**\n\t * Invoked at minimum, once per second. This listener handles updates that we receive from the system.\n\t */\n\tonProcessListChanged(err: StandardError, response: { value: ProcessType[] }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\tprocessList: value,\n\t\t});\n\t}\n\n\tcomponentDidMount() {\n\t\tActions.initialize(() => {\n\t\t\tStore?.addListener({ field: \"processList\" }, this.onProcessListChanged);\n\t\t\tStore?.addListener({ field: \"viewMode\" }, this.onViewModeChanged);\n\t\t});\n\t}\n\n\tcomponentWillUnmount() {\n\t\tStore?.removeListener({ field: \"processList\" }, this.onProcessListChanged);\n\t\tStore?.removeListener({ field: \"viewMode\" }, this.onViewModeChanged);\n\t}\n\n\trender() {\n\t\tif (!Store) return null;\n\t\t// View modes are:\n\t\t// * Simple - Top-level views, showing stats: CPU, Memory\n\t\t// * Advanced - Expanded processes, showing stats: CPU, Memory, Peak Memory, PID\n\n\t\t// statReducer is an array.reduce function that will sum all of the CPU/memory usage across the app.\n\t\tconst totals = this.state.processList.length ? this.state.processList.reduce(statReducer) : EMPTY_TOTALS;\n\t\treturn (\n\t\t\t<div>\n\t\t\t\t<div className=\"process-list-wrapper\">\n\t\t\t\t\t<ListHeader\n\t\t\t\t\t\tfields={this.state.viewMode === ViewModeEnums.SIMPLE ? SIMPLE_MODE_STATISTICS : ADVANCED_MODE_STATISTICS}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"process-list\">\n\t\t\t\t\t\t{/* Filter will remove the hidden processes. Afterwards, map will render the remaining processes in turn. */}\n\t\t\t\t\t\t{this.state.processList\n\t\t\t\t\t\t\t.filter((proc) => proc.visible)\n\t\t\t\t\t\t\t.map((proc, i) => (\n\t\t\t\t\t\t\t\t<div key={i} className=\"process\">\n\t\t\t\t\t\t\t\t\t{/* Process statistics is the meat of this component. It's the statistics and the child windows. */}\n\t\t\t\t\t\t\t\t\t<ProcessStatistics\n\t\t\t\t\t\t\t\t\t\tmode={this.state.viewMode}\n\t\t\t\t\t\t\t\t\t\tfields={\n\t\t\t\t\t\t\t\t\t\t\tthis.state.viewMode === ViewModeEnums.SIMPLE ? SIMPLE_MODE_STATISTICS : ADVANCED_MODE_STATISTICS\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tstats={proc.statistics}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{proc.childWindows?.map((cw: ChildWindowType, j: number) => (\n\t\t\t\t\t\t\t\t\t\t<ChildWindow key={j} viewMode={this.state.viewMode} cw={cw} />\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div className=\"bottom-section\">\n\t\t\t\t\t<div className=\"summary-statistics-wrapper\">\n\t\t\t\t\t\t<div className=\"summary-statistics-header\">Finsemble Total Usage</div>\n\t\t\t\t\t\t<div className=\"summary-statistics\">\n\t\t\t\t\t\t\t{typeof totals.statistics.cpuUsage !== \"undefined\" && (\n\t\t\t\t\t\t\t\t<div className=\"summary-statistic\">\n\t\t\t\t\t\t\t\t\t<div className=\"summary-statistic-label\">CPU</div>\n\t\t\t\t\t\t\t\t\t<div className=\"summary-statistic-number\">{`${roundDecimalToPrecision(\n\t\t\t\t\t\t\t\t\t\ttotals.statistics.cpuUsage,\n\t\t\t\t\t\t\t\t\t\t2\n\t\t\t\t\t\t\t\t\t)}%`}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{typeof totals.statistics.workingSetSize !== \"undefined\" && (\n\t\t\t\t\t\t\t\t<div className=\"summary-statistic\">\n\t\t\t\t\t\t\t\t\t<div className=\"summary-statistic-label\">Memory</div>\n\t\t\t\t\t\t\t\t\t<div className=\"summary-statistic-number\">{bytesToSize(totals.statistics.workingSetSize)}</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"advanced-button-wrapper\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"fsbl-button advanced-button\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tActions.toggleViewMode();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\tActions.toggleViewMode();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{this.state.viewMode === ViewModeEnums.ADVANCED ? \"Simple\" : \"Advanced\"}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\n/**\n * The window that shows performance data for applications running in Finsemble, such as CPU and memory usage.\n */\nexport const ProcessMonitor = () => <ProcessMonitorBase />;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChildWindow.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/components/ChildWindow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAmB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAUxD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,KAAK,CAAC,SAAiB;IAC/D,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,MAAM;QACL,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAGpC,MAAM,kBAAkB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACpC,MAAM,oBAAoB,GAAG,GAAG,EAAE;YACjC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAkB,EAAE,UAAmB,EAAE,EAAE;gBACpE,IAAI,GAAG,EAAE;oBACR,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAC;iBACtE;gBAGD,IAAI,CAAC,UAAU,EAAE;oBAChB,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;iBAC3B;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,QAAQ,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAErG,MAAM,kBAAkB,GAAG,gBAAgB,QAAQ,EAAE,CAAC;QACtD,OAAO,CACN,6BAAK,SAAS,EAAE,kBAAkB;YACjC,6BAAK,SAAS,EAAC,sBAAsB,IACnC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,CAC7E,2BACC,SAAS,EAAC,uBAAuB,EACjC,OAAO,EAAE,GAAG,EAAE;oBACb,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;oBAC1B,IAAI,IAAI,EAAE;wBACT,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;qBACpC;gBACF,CAAC,EACD,QAAQ,EAAE,CAAC,EACX,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAC,CAAsB,EAAE,EAAE;oBACrC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;wBACvC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;wBAC1B,IAAI,IAAI,EAAE;4BACT,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;yBACpC;qBACD;gBACF,CAAC,GACG,CACL,CACI;YACN,6BAAK,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,cAAc,IACxD,EAAE,CAAC,IAAI,CACH,CACD,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nimport { StandardError } from \"@finsemble/finsemble-
|
|
1
|
+
{"version":3,"file":"ChildWindow.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/components/ChildWindow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAmB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAUxD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,KAAK,CAAC,SAAiB;IAC/D,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;IAED,MAAM;QACL,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAGpC,MAAM,kBAAkB,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;QACpC,MAAM,oBAAoB,GAAG,GAAG,EAAE;YACjC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAkB,EAAE,UAAmB,EAAE,EAAE;gBACpE,IAAI,GAAG,EAAE;oBACR,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAC;iBACtE;gBAGD,IAAI,CAAC,UAAU,EAAE;oBAChB,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;iBAC3B;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,QAAQ,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAErG,MAAM,kBAAkB,GAAG,gBAAgB,QAAQ,EAAE,CAAC;QACtD,OAAO,CACN,6BAAK,SAAS,EAAE,kBAAkB;YACjC,6BAAK,SAAS,EAAC,sBAAsB,IACnC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,CAC7E,2BACC,SAAS,EAAC,uBAAuB,EACjC,OAAO,EAAE,GAAG,EAAE;oBACb,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;oBAC1B,IAAI,IAAI,EAAE;wBACT,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;qBACpC;gBACF,CAAC,EACD,QAAQ,EAAE,CAAC,EACX,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAC,CAAsB,EAAE,EAAE;oBACrC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;wBACvC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;wBAC1B,IAAI,IAAI,EAAE;4BACT,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;yBACpC;qBACD;gBACF,CAAC,GACG,CACL,CACI;YACN,6BAAK,SAAS,EAAC,mBAAmB,EAAC,OAAO,EAAE,cAAc,IACxD,EAAE,CAAC,IAAI,CACH,CACD,CACN,CAAC;IACH,CAAC;CACD","sourcesContent":["import React from \"react\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport { ChildWindowType, ViewModeEnums } from \"../ProcessMonitorTypes\";\nimport { Actions } from \"../stores/ProcessMonitorStore\";\n\ninterface IProps {\n\tcw: ChildWindowType;\n\tviewMode: ViewModeEnums;\n}\n\n/**\n * This file is the react component for an individual window beneath a process. It allows the user to close the window.\n */\nexport default class ChildWindow extends React.Component<IProps> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t}\n\n\trender() {\n\t\tconst { cw, viewMode } = this.props;\n\n\t\t//If we're in simple mode, onClick does nothing. In advanced mode, we'll identify the window by making it flash.\n\t\tconst simpleClickHandler = () => {};\n\t\tconst advancedClickHandler = () => {\n\t\t\tActions.getFlashingState((err: StandardError, flashState: boolean) => {\n\t\t\t\tif (err) {\n\t\t\t\t\tconsole.error(\"Error getting current flashing state of window.\", err);\n\t\t\t\t}\n\n\t\t\t\t// Only begin flashing if not already started\n\t\t\t\tif (!flashState) {\n\t\t\t\t\tActions.identifyWindow(cw);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst cwClickHandler = viewMode === ViewModeEnums.SIMPLE ? simpleClickHandler : advancedClickHandler;\n\n\t\tconst childWindowClasses = `child-window ${viewMode}`;\n\t\treturn (\n\t\t\t<div className={childWindowClasses}>\n\t\t\t\t<div className=\"child-window-actions\">\n\t\t\t\t\t{this.props.cw.type === \"window\" && typeof this.props.cw.uuid === \"string\" && (\n\t\t\t\t\t\t<i\n\t\t\t\t\t\t\tclassName=\"close-window ff-close\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tconst { uuid, name } = cw;\n\t\t\t\t\t\t\t\tif (uuid) {\n\t\t\t\t\t\t\t\t\tActions.closeWindow({ uuid, name });\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\tconst { uuid, name } = cw;\n\t\t\t\t\t\t\t\t\tif (uuid) {\n\t\t\t\t\t\t\t\t\t\tActions.closeWindow({ uuid, name });\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t></i>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"child-window-name\" onClick={cwClickHandler}>\n\t\t\t\t\t{cw.name}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { SortObjectType, ModeStatsType } from "../ProcessMonitorTypes";
|
|
3
|
-
import { StandardError } from "@finsemble/finsemble-
|
|
3
|
+
import { StandardError } from "@finsemble/finsemble-api/types/types";
|
|
4
4
|
interface IProps {
|
|
5
5
|
fields: ModeStatsType[];
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListHeader.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/components/ListHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAiB/D,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,KAAK,CAAC,SAAyB;IACtE,YAAY,KAAa;QACxB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG;YACZ,IAAI,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACxC,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAGD,aAAa,CAAC,GAAkB,EAAE,QAAmC;QACpE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC;YACb,IAAI,EAAE,KAAK;SACX,CAAC,CAAC;IACJ,CAAC;IAED,yBAAyB;QACxB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED,oBAAoB;QACnB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM;QAEL,OAAO,CACN,6BAAK,SAAS,EAAC,aAAa;YAE3B,6BACC,SAAS,EAAC,8CAA8C,EACxD,OAAO,EAAE,GAAG,EAAE;oBACb,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC,EACD,QAAQ,EAAE,CAAC,EACX,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAC,CAAsB,EAAE,EAAE;oBACrC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;wBACvC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;qBACxB;gBACF,CAAC;;
|
|
1
|
+
{"version":3,"file":"ListHeader.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/components/ListHeader.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { Store, Actions } from \"../stores/ProcessMonitorStore\";\nimport { SortObjectType, ModeStatsType } from \"../ProcessMonitorTypes\";\nimport { StandardError } from \"@finsemble/finsemble-api/types/types\";\n\ninterface IProps {\n\tfields: ModeStatsType[];\n}\n\ninterface IState {\n\tsort: SortObjectType;\n}\n\n/**\n * This is the \"table header\" that shows which columns are visible.\n * Since we aren't using an HTML table, this component exists.\n * It handles column display and sorting.\n **/\nexport default class ListHeader extends React.Component<IProps, IState> {\n\tconstructor(props: IProps) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tsort: Store?.getValue({ field: \"sort\" }),\n\t\t};\n\t\tthis.onSortChanged = this.onSortChanged.bind(this);\n\t}\n\n\t// When the sort value changes in the store, change it locally, and re-render the direction arrow.\n\tonSortChanged(err: StandardError, response: { value: SortObjectType }) {\n\t\tlet { value } = response;\n\t\tthis.setState({\n\t\t\tsort: value,\n\t\t});\n\t}\n\n\tUNSAFE_componentWillMount() {\n\t\tStore?.addListener({ field: \"sort\" }, this.onSortChanged);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tStore?.removeListener({ field: \"sort\" }, this.onSortChanged);\n\t}\n\n\trender() {\n\t\t//Just a list of the things beneath it. name, CPU, mem, etc. drive from store.\n\t\treturn (\n\t\t\t<div className=\"list-header\">\n\t\t\t\t{/* The name is separate because it isn't a statistic, per se. So I split it out. */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"list-header-statistic-label list-header-name\"\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tActions.setSort(\"name\");\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={0}\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\tActions.setSort(\"name\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tName\n\t\t\t\t\t{/* If this field is the one being sorted, render the direction of the sort. Otherwise return null. */}\n\t\t\t\t\t{/* eslint-disable no-nested-ternary */}\n\t\t\t\t\t{this.state.sort.field === \"name\" ? (\n\t\t\t\t\t\tthis.state.sort.direction === \"ascending\" ? (\n\t\t\t\t\t\t\t<i className=\"sort-direction ff-arrow-up\"></i>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<i className=\"sort-direction ff-arrow-down\"></i>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t<div className=\"list-header-statistic-labels\">\n\t\t\t\t\t{this.props.fields.map((field, i) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tclassName=\"list-header-statistic-label\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tActions.setSort(field.value);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\tonKeyDown={(e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\tActions.setSort(field.value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{field.label}\n\t\t\t\t\t\t\t{/* If this field is the one being sorted, render the direction of the sort. Otherwise return null. */}\n\t\t\t\t\t\t\t{this.state.sort.field === field.value ? (\n\t\t\t\t\t\t\t\tthis.state.sort.direction === \"ascending\" ? (\n\t\t\t\t\t\t\t\t\t<i className=\"sort-direction ff-arrow-up\"></i>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<i className=\"sort-direction ff-arrow-down\"></i>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t\t<div className=\"list-header-statistic-label\"></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChildWindowType, ProcessType } from "../ProcessMonitorTypes";
|
|
2
|
-
import StoreModel from "@finsemble/finsemble-
|
|
3
|
-
import { StandardCallback, StandardError } from "@finsemble/finsemble-
|
|
4
|
-
import { ProcessInfo } from "@finsemble/finsemble-
|
|
2
|
+
import StoreModel from "@finsemble/finsemble-api/types/clients/StoreModel";
|
|
3
|
+
import { StandardCallback, StandardError } from "@finsemble/finsemble-api/types/types";
|
|
4
|
+
import { ProcessInfo } from "@finsemble/finsemble-api/types/FEA";
|
|
5
5
|
declare let ProcessMonitorStore: StoreModel | undefined;
|
|
6
6
|
declare type VoidCallback = () => void;
|
|
7
7
|
export declare let storeWrapper: StoreModel | null | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcessMonitorStore.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/stores/ProcessMonitorStore.ts"],"names":[],"mappings":"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","sourcesContent":["import { getViewName, getViewBaseName } from \"../helpers\";\nimport { ChildWindowType, ProcessType, SortObjectType } from \"../ProcessMonitorTypes\";\nimport StoreModel from \"@finsemble/finsemble-core/types/clients/StoreModel\";\nimport { StandardCallback, StandardError } from \"@finsemble/finsemble-core/types/types\";\nimport { ProcessInfo } from \"@finsemble/finsemble-core/types/FEA\";\nimport { FinsembleWindow } from \"@finsemble/finsemble-core/types/main\";\nimport async from \"async\";\n\nlet ProcessMonitorStore: StoreModel | undefined;\n\ntype VoidCallback = () => void;\n\n//Regex code taken from https://gist.github.com/mattheyan/46a230da86a0894a5ff654b9139ec5f2\nconst DEFAULT_SORT_DIRECTION = \"ascending\";\nconst DEFAULT_STORE_DATA = {\n\tviewMode: \"simple\",\n\tsort: {\n\t\tfield: \"name\",\n\t\tdirection: \"ascending\",\n\t},\n};\nconst MAGIC_NUMBER_TERMINATION_TIMEOUT = 4000;\n\nexport let storeWrapper: StoreModel | null | undefined;\n\nfunction createLocalStore(done: VoidCallback) {\n\tFSBL.Clients.DistributedStoreClient.createStore(\n\t\t{\n\t\t\tstore: \"Finsemble-ProcessMonitor-Local-Store\",\n\t\t\tvalues: DEFAULT_STORE_DATA,\n\t\t},\n\t\t(err: StandardError, store?: StoreModel) => {\n\t\t\tProcessMonitorStore = store;\n\t\t\tstoreWrapper = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nconst Actions = {\n\t/**\n\t * Creates the local store, then gets the first cut at stats for the process list.\n\t */\n\tinitialize: (cb: VoidCallback) => {\n\t\tcreateLocalStore(() => {\n\t\t\tActions.getInitialData();\n\t\t\tcb();\n\t\t});\n\t},\n\n\t/**\n\t * Gets the process list, pulls the statistics out, and renders the app. Also sets up an interval where we'll retrieve more stats from the system.\n\t */\n\tgetInitialData: () => {\n\t\tFSBL.System.getProcessList(Actions.extractData);\n\t\tsetInterval(() => {\n\t\t\tFSBL.System.getProcessList(Actions.extractData);\n\t\t}, 1000);\n\t},\n\n\t/**\n\t * Sets the sort field; if it's the same field as we had previously, we flip the sort direction.\n\t */\n\tsetSort: (field: string) => {\n\t\tconst currentSort = ProcessMonitorStore?.getValue({ field: \"sort\" });\n\t\tlet procs = ProcessMonitorStore?.getValue({ field: \"processList\" });\n\t\tlet newSort;\n\t\t//If it's the same field as before, flip the direction\n\t\tif (currentSort.field === field) {\n\t\t\tnewSort = currentSort;\n\t\t\tif (currentSort.direction == \"ascending\") {\n\t\t\t\tnewSort.direction = \"descending\";\n\t\t\t} else {\n\t\t\t\tnewSort.direction = \"ascending\";\n\t\t\t}\n\t\t} else {\n\t\t\tnewSort = {\n\t\t\t\tfield,\n\t\t\t\tdirection: DEFAULT_SORT_DIRECTION,\n\t\t\t};\n\t\t}\n\n\t\tProcessMonitorStore?.setValue({ field: \"sort\", value: newSort }, () => {\n\t\t\t// When changing sort we'll re-render the UI immediately instead of waiting for the process list to update. Without this step, it could be 999ms until the next update, which makes the process monitor feel very unresponsive and very bad.\n\t\t\tprocs = Actions.sortProcesses(procs);\n\t\t\tProcessMonitorStore?.setValue({ field: \"processList\", value: procs });\n\t\t});\n\t},\n\n\t/**\n\t * Extracts data from the process list (via the createDataModel function), and then sets the processList value on the store. This causes the UI to re-render.\n\t */\n\textractData: (processes: ProcessInfo[]) => {\n\t\tActions.createDataModel(processes, (procs) => {\n\t\t\t//set store.\n\t\t\tProcessMonitorStore?.setValue({ field: \"processList\", value: procs });\n\t\t});\n\t},\n\n\t/**\n\t * Converts the system.getProcessList response into something that's easily render-able.\n\t */\n\tcreateDataModel: (processes: ProcessInfo[], cb: (procs: ProcessType[]) => void) => {\n\t\tconst mode = ProcessMonitorStore?.getValue({ field: \"viewMode\" });\n\n\t\ttype ViewOrWindow = ProcessInfo[\"windows\"][0] | ProcessInfo[\"views\"][0];\n\n\t\tconst sortWindow = (a: { name: string }, b: { name: string }) => {\n\t\t\tif (a.name < b.name) return -1;\n\t\t\tif (a.name > b.name) return 1;\n\t\t\treturn 0;\n\t\t};\n\n\t\tconst viewOrWindowToProc = (item: ViewOrWindow) => {\n\t\t\tconst name =\n\t\t\t\t\"name\" in item\n\t\t\t\t\t? item.name\n\t\t\t\t\t: getViewName({\n\t\t\t\t\t\t\twindowName: item.windowName,\n\t\t\t\t\t\t\tviewId: String(item.id),\n\t\t\t\t\t });\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\ttype: \"name\" in item ? \"window\" : \"view\",\n\t\t\t};\n\t\t};\n\n\t\tconst allowAdvanced = (item: ViewOrWindow) => {\n\t\t\tconst windowName: string = \"name\" in item ? item.name.toLowerCase() : item.windowName.toLowerCase();\n\t\t\tconst windowIsService = windowName.includes(\"service\");\n\t\t\tconst windowIsSystem = windowName.includes(\"system\");\n\t\t\tconst windowIsUnnamed = windowName.includes(\"unnamed\");\n\t\t\tconst windowIsSimple = windowIsService || windowIsSystem || windowIsUnnamed;\n\t\t\treturn mode !== \"simple\" || !windowIsSimple;\n\t\t};\n\n\t\tconst procs: ProcessType[] = processes.map((proc) => {\n\t\t\tconst procName = proc.name.toLowerCase();\n\t\t\tconst isService = procName.includes(\"service\");\n\t\t\tconst isSystem = procName.includes(\"system\");\n\t\t\tconst isUnnamed = procName.includes(\"unnamed\");\n\t\t\tconst procIsSimple = isService || isSystem || isUnnamed;\n\t\t\tif (mode === \"simple\" && procIsSimple) {\n\t\t\t\treturn {\n\t\t\t\t\tstatistics: proc,\n\t\t\t\t\tvisible: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst childWindows: ChildWindowType[] = [...proc.windows, ...proc.views]\n\t\t\t\t.filter(allowAdvanced)\n\t\t\t\t.map(viewOrWindowToProc)\n\t\t\t\t.sort(sortWindow);\n\n\t\t\treturn {\n\t\t\t\tstatistics: proc,\n\t\t\t\tvisible: true,\n\t\t\t\ttype: proc.type,\n\t\t\t\tchildWindows,\n\t\t\t};\n\t\t});\n\n\t\tcb(Actions.sortProcesses(procs));\n\t},\n\n\t/**\n\t * Sorting function. Handles ascending and descending.\n\t */\n\tsortProcesses: (procs: ProcessType[]) => {\n\t\tlet currentSort: SortObjectType = ProcessMonitorStore?.getValue({ field: \"sort\" });\n\t\tlet sortFN = (a: ProcessType, b: ProcessType) => {\n\t\t\tlet aValue = a.statistics[currentSort.field];\n\t\t\tlet bValue = b.statistics[currentSort.field];\n\n\t\t\tif (typeof aValue === \"undefined\" || typeof bValue === \"undefined\") {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t//Comparing upper and lowercase names makes the sort look wrong. we equalize all strings here.\n\t\t\tif (typeof aValue === \"string\") {\n\t\t\t\taValue = aValue.toLowerCase();\n\t\t\t}\n\t\t\tif (typeof bValue === \"string\") {\n\t\t\t\tbValue = bValue.toLowerCase();\n\t\t\t}\n\n\t\t\tif (currentSort.direction === \"ascending\") {\n\t\t\t\tif (aValue < bValue) return -1;\n\t\t\t\tif (aValue > bValue) return 1;\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (aValue > bValue) return -1;\n\t\t\tif (aValue < bValue) return 1;\n\t\t\treturn 0;\n\t\t};\n\t\treturn procs.sort(sortFN);\n\t},\n\n\t/**\n\t * Toggles advanced/simple mode\n\t */\n\ttoggleViewMode: () => {\n\t\tconst mode = ProcessMonitorStore?.getValue({ field: \"viewMode\" });\n\t\tProcessMonitorStore?.setValue({\n\t\t\tfield: \"viewMode\",\n\t\t\tvalue: mode === \"advanced\" ? \"simple\" : \"advanced\",\n\t\t});\n\t},\n\n\t/**\n\t * Gets the current \"flashing\" state - whether the process monitor is currently flashing a window\n\t */\n\tgetFlashingState: (cb?: StandardCallback) => {\n\t\tProcessMonitorStore?.getValue(\"flashing\", cb);\n\t},\n\n\t/**\n\t * Gets the current \"flashing\" state for the process monitor\n\t */\n\tsetFlashingState: (value: boolean, cb?: StandardCallback) => {\n\t\tProcessMonitorStore?.setValue({ field: \"flashing\", value }, cb);\n\t},\n\n\t/**\n\t * Make the window flash a couple of times so that the user can identify it.\n\t */\n\tidentifyWindow: function (winID: ChildWindowType) {\n\t\tif (winID.name.includes(\"Service\")) return;\n\t\t// If the item clicked is a view, the window for that view should flash, thus we need to get that window's name here\n\t\tconst baseName = getViewBaseName(winID);\n\n\t\tthis.setFlashingState(true);\n\n\t\tconst OPACITY_ANIMATION_DURATION = 200;\n\t\tFSBL.FinsembleWindow.getInstance({ name: baseName }, (err: StandardError, win: FinsembleWindow) => {\n\t\t\tlet windowState = \"hidden\";\n\t\t\tfunction flash(n: any, done: any) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\twin.hide(() => {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\twin.show(() => {\n\t\t\t\t\t\t\t\tdone(null);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, OPACITY_ANIMATION_DURATION / 1.5);\n\t\t\t\t\t});\n\t\t\t\t}, OPACITY_ANIMATION_DURATION / 1.5);\n\t\t\t}\n\t\t\twin.isShowing({}, (error: StandardError, isVisible) => {\n\t\t\t\t//cache the visible state of the window prior to making it flash. If it was hidden before, hide it when the flashing is done.\n\t\t\t\twindowState = isVisible ? \"visible\" : \"hidden\";\n\t\t\t\twin.show(() => {\n\t\t\t\t\twin.bringToFront(() => {\n\t\t\t\t\t\t//Flash 5 times, in series.\n\t\t\t\t\t\tasync.timesSeries(5, flash, () => {\n\t\t\t\t\t\t\tif (windowState === \"hidden\") {\n\t\t\t\t\t\t\t\twin.hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.setFlashingState(false);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n\t * Terminates a process. Prompts first. If it fails to terminate the process, displays an error message.\n\t */\n\tterminateProcess: (AppIdentifier: { uuid: string }, force = false) => {\n\t\t// AppIdentifier should be of type ChildWindow, but that has `uuid` as optional, and\n\t\t// uuid is required for this function\n\n\t\tconst app = FSBL.System.Application.wrap(AppIdentifier.uuid);\n\t\t/**\n\t\t * This whole routine is a little hectic because of all of the closures - but there's a method to the madness. Here's the logic.\n\t\t *\n\t\t * 1st time we try to close: Politely close the window. If that fails, recurse, but pass \"force\" === true.\n\t\t * 2nd time, we try to forceClose the process. If that fails, we will terminate the process forcibly, which isn't graceful.\n\t\t */\n\n\t\tconst onCloseFailure = () => {\n\t\t\t//If Actions.terminateProcess is invoked with force === true, that means that we tried to force close the process, and it failed. So we will terminate it. If not, we will try to force close (the else block).\n\t\t\tif (force) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\tterminateProcess();\n\t\t\t} else {\n\t\t\t\t//If we've already tried to close the process once, but it failed, we'll try to terminate it. The first attempt is a close, which is more graceful.\n\t\t\t\tActions.terminateProcess(AppIdentifier, true);\n\t\t\t}\n\t\t};\n\n\t\tconst forceCloseProcess = () => {\n\t\t\t//If the process fails to close in 4 seconds, we will call this method again, but try to force close it.\n\t\t\tconst closeTimeout = setTimeout(() => {\n\t\t\t\tonCloseFailure();\n\t\t\t}, MAGIC_NUMBER_TERMINATION_TIMEOUT);\n\n\t\t\tconst onCloseSuccess = () => {\n\t\t\t\tclearTimeout(closeTimeout);\n\t\t\t};\n\t\t\tapp.close(force, onCloseSuccess, onCloseFailure);\n\t\t};\n\n\t\tconst terminateProcess = () => {\n\t\t\t// Should never get into here, but just in case the process is hung, we'll show an error message to the user.\n\t\t\tapp.terminate(\n\t\t\t\t() => {},\n\t\t\t\t() => {\n\t\t\t\t\tFSBL.Clients.DialogManager.open(\n\t\t\t\t\t\t\"yesNo\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Error\",\n\t\t\t\t\t\t\tquestion: \"The process that you are attempting to close is unresponsive. Please contact support.\",\n\t\t\t\t\t\t\taffirmativeButtonLabel: \"Okay\",\n\t\t\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\t\t\tshowNegativeButton: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\n\t\t// If we're force closing, no need to prompt the user (which is what happens below);\n\t\tif (force) {\n\t\t\treturn forceCloseProcess();\n\t\t}\n\n\t\t//Ask user if they're sure. If they says \"yes\", close it.\n\t\tFSBL.Clients.DialogManager.open(\n\t\t\t\"yesNo\",\n\t\t\t{\n\t\t\t\ttitle: \"Terminate Process?\",\n\t\t\t\tquestion: \"Terminating the process may close other apps. Are you sure you want to continue?\",\n\t\t\t\taffirmativeResponseLabel: \"Terminate\",\n\t\t\t\tshowNegativeButton: false,\n\t\t\t},\n\t\t\t(err: StandardError, response: { choice: string }) => {\n\t\t\t\tif (err || response.choice === \"affirmative\") {\n\t\t\t\t\tforceCloseProcess();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * This function exists to make the UI feel snappy. May take a second or so for the window to close properly and for the change to flow to system.getProcessList. To make that lag go away, we immediately render the change.\n\t */\n\tremoveWindowLocally: function (winID: { uuid: string; name: string }) {\n\t\tlet procs: ProcessType[] = ProcessMonitorStore?.getValue({ field: \"processList\" });\n\t\tprocs = procs.map((proc) => {\n\t\t\tif (proc.childWindows) {\n\t\t\t\tconst cwIndex = proc.childWindows.findIndex((cw) => cw.name === winID.name);\n\t\t\t\tproc.childWindows.splice(cwIndex, 1);\n\t\t\t}\n\t\t\treturn proc;\n\t\t});\n\t\tProcessMonitorStore?.setValue({ field: \"processList\", value: procs });\n\t},\n\n\t/**\n\t * Try to close the window. If that fails, try to force close the window. If that fails, ask if they'd like to terminate the parent process.\n\t */\n\tcloseWindow: function (winID: { uuid: string; name: string }, force = false) {\n\t\tconst win = FSBL.System.Window.wrap(winID.uuid, winID.name);\n\n\t\t//Make the UI feel snappy.\n\t\tActions.removeWindowLocally(winID);\n\n\t\tconst onCloseFailure = () => {\n\t\t\t//If Actions.closeWindow was called with force === true, and the close failed, give the user the opportunity to terminate the process.\n\t\t\tif (force) {\n\t\t\t\tFSBL.Clients.DialogManager.open(\n\t\t\t\t\t\"yesNo\",\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Terminate Process?\",\n\t\t\t\t\t\tquestion:\n\t\t\t\t\t\t\t\"The app that you are attempting to close is unresponsive. Would you like to terminate the process? Terminating the process may close other apps.\",\n\t\t\t\t\t\taffirmativeResponseLabel: \"Terminate\",\n\t\t\t\t\t\tshowNegativeButton: false,\n\t\t\t\t\t},\n\t\t\t\t\t(err: StandardError, response: { choice: string }) => {\n\t\t\t\t\t\tif (err || response.choice === \"affirmative\") {\n\t\t\t\t\t\t\treturn Actions.terminateProcess({ uuid: winID.uuid }, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tActions.closeWindow(winID, true);\n\t\t\t}\n\t\t};\n\n\t\t//If we can't close within 4 seconds, something's wrong - try to force close it.\n\t\tconst closeTimeout = setTimeout(() => {\n\t\t\tonCloseFailure();\n\t\t}, MAGIC_NUMBER_TERMINATION_TIMEOUT);\n\n\t\tconst onCloseSuccess = () => {\n\t\t\tclearTimeout(closeTimeout);\n\t\t};\n\n\t\twin.close(force, onCloseSuccess, onCloseFailure);\n\t},\n};\n\nexport { ProcessMonitorStore as Store, Actions };\n"]}
|
|
1
|
+
{"version":3,"file":"ProcessMonitorStore.js","sourceRoot":"","sources":["../../../../src/components/processMonitor/stores/ProcessMonitorStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAM1D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,IAAI,mBAA2C,CAAC;AAKhD,MAAM,sBAAsB,GAAG,WAAW,CAAC;AAC3C,MAAM,kBAAkB,GAAG;IAC1B,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE;QACL,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,WAAW;KACtB;CACD,CAAC;AACF,MAAM,gCAAgC,GAAG,IAAI,CAAC;AAE9C,MAAM,CAAC,IAAI,YAA2C,CAAC;AAEvD,SAAS,gBAAgB,CAAC,IAAkB;IAC3C,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,WAAW,CAC9C;QACC,KAAK,EAAE,sCAAsC;QAC7C,MAAM,EAAE,kBAAkB;KAC1B,EACD,CAAC,GAAkB,EAAE,KAAkB,EAAE,EAAE;QAC1C,mBAAmB,GAAG,KAAK,CAAC;QAC5B,YAAY,GAAG,KAAK,CAAC;QACrB,IAAI,EAAE,CAAC;IACR,CAAC,CACD,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG;IAIf,UAAU,EAAE,CAAC,EAAgB,EAAE,EAAE;QAChC,gBAAgB,CAAC,GAAG,EAAE;YACrB,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,EAAE,EAAE,CAAC;QACN,CAAC,CAAC,CAAC;IACJ,CAAC;IAKD,cAAc,EAAE,GAAG,EAAE;QACpB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChD,WAAW,CAAC,GAAG,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACjD,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAKD,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE;QAC1B,MAAM,WAAW,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,IAAI,KAAK,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC;QAEZ,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK,EAAE;YAChC,OAAO,GAAG,WAAW,CAAC;YACtB,IAAI,WAAW,CAAC,SAAS,IAAI,WAAW,EAAE;gBACzC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;aACjC;iBAAM;gBACN,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC;aAChC;SACD;aAAM;YACN,OAAO,GAAG;gBACT,KAAK;gBACL,SAAS,EAAE,sBAAsB;aACjC,CAAC;SACF;QAED,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE;YAErE,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACrC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACJ,CAAC;IAKD,WAAW,EAAE,CAAC,SAAwB,EAAE,EAAE;QACzC,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAE5C,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACJ,CAAC;IAKD,eAAe,EAAE,CAAC,SAAwB,EAAE,EAAkC,EAAE,EAAE;QACjF,MAAM,IAAI,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAIlE,MAAM,UAAU,GAAG,CAAC,CAAmB,EAAE,CAAmB,EAAE,EAAE;YAC/D,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;gBAAE,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC;QACV,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,CAAC,IAAkB,EAAE,EAAE;YACjD,MAAM,IAAI,GACT,MAAM,IAAI,IAAI;gBACb,CAAC,CAAC,IAAI,CAAC,IAAI;gBACX,CAAC,CAAC,WAAW,CAAC;oBACZ,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;iBACtB,CAAC,CAAC;YACP,OAAO;gBACN,IAAI;gBACJ,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;aACxC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,IAAkB,EAAE,EAAE;YAC5C,MAAM,UAAU,GAAW,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YACpG,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,cAAc,GAAG,eAAe,IAAI,cAAc,IAAI,eAAe,CAAC;YAC5E,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC;QAC7C,CAAC,CAAC;QAEF,MAAM,KAAK,GAAkB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,SAAS,IAAI,QAAQ,IAAI,SAAS,CAAC;YACxD,IAAI,IAAI,KAAK,QAAQ,IAAI,YAAY,EAAE;gBACtC,OAAO;oBACN,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,KAAK;iBACd,CAAC;aACF;YAED,MAAM,YAAY,GAAsB,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;iBACtE,MAAM,CAAC,aAAa,CAAC;iBACrB,GAAG,CAAC,kBAAkB,CAAC;iBACvB,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnB,OAAO;gBACN,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,YAAY;aACZ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IAKD,aAAa,EAAE,CAAC,KAAoB,EAAE,EAAE;QACvC,IAAI,WAAW,GAAmB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACnF,IAAI,MAAM,GAAG,CAAC,CAAc,EAAE,CAAc,EAAE,EAAE;YAC/C,IAAI,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;gBACnE,OAAO,CAAC,CAAC;aACT;YAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC/B,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;aAC9B;YACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC/B,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;aAC9B;YAED,IAAI,WAAW,CAAC,SAAS,KAAK,WAAW,EAAE;gBAC1C,IAAI,MAAM,GAAG,MAAM;oBAAE,OAAO,CAAC,CAAC,CAAC;gBAC/B,IAAI,MAAM,GAAG,MAAM;oBAAE,OAAO,CAAC,CAAC;gBAC9B,OAAO,CAAC,CAAC;aACT;YAED,IAAI,MAAM,GAAG,MAAM;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC/B,IAAI,MAAM,GAAG,MAAM;gBAAE,OAAO,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC;QACV,CAAC,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAKD,cAAc,EAAE,GAAG,EAAE;QACpB,MAAM,IAAI,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAClE,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC;YAC7B,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;SAClD,CAAC,CAAC;IACJ,CAAC;IAKD,gBAAgB,EAAE,CAAC,EAAqB,EAAE,EAAE;QAC3C,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAKD,gBAAgB,EAAE,CAAC,KAAc,EAAE,EAAqB,EAAE,EAAE;QAC3D,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAKD,cAAc,EAAE,UAAU,KAAsB;QAC/C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO;QAE3C,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE5B,MAAM,0BAA0B,GAAG,GAAG,CAAC;QACvC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAkB,EAAE,GAAoB,EAAE,EAAE;YACjG,IAAI,WAAW,GAAG,QAAQ,CAAC;YAC3B,SAAS,KAAK,CAAC,CAAM,EAAE,IAAS;gBAC/B,UAAU,CAAC,GAAG,EAAE;oBACf,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;wBACb,UAAU,CAAC,GAAG,EAAE;4BACf,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gCACb,IAAI,CAAC,IAAI,CAAC,CAAC;4BACZ,CAAC,CAAC,CAAC;wBACJ,CAAC,EAAE,0BAA0B,GAAG,GAAG,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;gBACJ,CAAC,EAAE,0BAA0B,GAAG,GAAG,CAAC,CAAC;YACtC,CAAC;YACD,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,KAAoB,EAAE,SAAS,EAAE,EAAE;gBAErD,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC/C,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;oBACb,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE;wBAErB,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;4BAChC,IAAI,WAAW,KAAK,QAAQ,EAAE;gCAC7B,GAAG,CAAC,IAAI,EAAE,CAAC;6BACX;4BACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;wBAC9B,CAAC,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAKD,gBAAgB,EAAE,CAAC,aAA+B,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;QAIpE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAQ7D,MAAM,cAAc,GAAG,GAAG,EAAE;YAE3B,IAAI,KAAK,EAAE;gBAEV,gBAAgB,EAAE,CAAC;aACnB;iBAAM;gBAEN,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;aAC9C;QACF,CAAC,CAAC;QAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAE9B,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBACpC,cAAc,EAAE,CAAC;YAClB,CAAC,EAAE,gCAAgC,CAAC,CAAC;YAErC,MAAM,cAAc,GAAG,GAAG,EAAE;gBAC3B,YAAY,CAAC,YAAY,CAAC,CAAC;YAC5B,CAAC,CAAC;YACF,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC,CAAC;QAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;YAE7B,GAAG,CAAC,SAAS,CACZ,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE;gBACJ,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAC9B,OAAO,EACP;oBACC,KAAK,EAAE,OAAO;oBACd,QAAQ,EAAE,uFAAuF;oBACjG,sBAAsB,EAAE,MAAM;oBAC9B,gBAAgB,EAAE,KAAK;oBACvB,kBAAkB,EAAE,KAAK;iBACzB,EACD,GAAG,EAAE,GAAE,CAAC,CACR,CAAC;YACH,CAAC,CACD,CAAC;QACH,CAAC,CAAC;QAGF,IAAI,KAAK,EAAE;YACV,OAAO,iBAAiB,EAAE,CAAC;SAC3B;QAGD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAC9B,OAAO,EACP;YACC,KAAK,EAAE,oBAAoB;YAC3B,QAAQ,EAAE,kFAAkF;YAC5F,wBAAwB,EAAE,WAAW;YACrC,kBAAkB,EAAE,KAAK;SACzB,EACD,CAAC,GAAkB,EAAE,QAA4B,EAAE,EAAE;YACpD,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE;gBAC7C,iBAAiB,EAAE,CAAC;aACpB;QACF,CAAC,CACD,CAAC;IACH,CAAC;IAKD,mBAAmB,EAAE,UAAU,KAAqC;QACnE,IAAI,KAAK,GAAkB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACnF,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5E,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aACrC;YACD,OAAO,IAAI,CAAC;QACb,CAAC,CAAC,CAAC;QACH,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IAKD,WAAW,EAAE,UAAU,KAAqC,EAAE,KAAK,GAAG,KAAK;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAG5D,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAEnC,MAAM,cAAc,GAAG,GAAG,EAAE;YAE3B,IAAI,KAAK,EAAE;gBACV,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAC9B,OAAO,EACP;oBACC,KAAK,EAAE,oBAAoB;oBAC3B,QAAQ,EACP,kJAAkJ;oBACnJ,wBAAwB,EAAE,WAAW;oBACrC,kBAAkB,EAAE,KAAK;iBACzB,EACD,CAAC,GAAkB,EAAE,QAA4B,EAAE,EAAE;oBACpD,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,EAAE;wBAC7C,OAAO,OAAO,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;qBAC5D;gBACF,CAAC,CACD,CAAC;aACF;iBAAM;gBACN,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aACjC;QACF,CAAC,CAAC;QAGF,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,cAAc,EAAE,CAAC;QAClB,CAAC,EAAE,gCAAgC,CAAC,CAAC;QAErC,MAAM,cAAc,GAAG,GAAG,EAAE;YAC3B,YAAY,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC,CAAC;QAEF,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;CACD,CAAC;AAEF,OAAO,EAAE,mBAAmB,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC","sourcesContent":["import { getViewName, getViewBaseName } from \"../helpers\";\nimport { ChildWindowType, ProcessType, SortObjectType } from \"../ProcessMonitorTypes\";\nimport StoreModel from \"@finsemble/finsemble-api/types/clients/StoreModel\";\nimport { StandardCallback, StandardError } from \"@finsemble/finsemble-api/types/types\";\nimport { ProcessInfo } from \"@finsemble/finsemble-api/types/FEA\";\nimport { FinsembleWindow } from \"@finsemble/finsemble-api/types/main\";\nimport async from \"async\";\n\nlet ProcessMonitorStore: StoreModel | undefined;\n\ntype VoidCallback = () => void;\n\n//Regex code taken from https://gist.github.com/mattheyan/46a230da86a0894a5ff654b9139ec5f2\nconst DEFAULT_SORT_DIRECTION = \"ascending\";\nconst DEFAULT_STORE_DATA = {\n\tviewMode: \"simple\",\n\tsort: {\n\t\tfield: \"name\",\n\t\tdirection: \"ascending\",\n\t},\n};\nconst MAGIC_NUMBER_TERMINATION_TIMEOUT = 4000;\n\nexport let storeWrapper: StoreModel | null | undefined;\n\nfunction createLocalStore(done: VoidCallback) {\n\tFSBL.Clients.DistributedStoreClient.createStore(\n\t\t{\n\t\t\tstore: \"Finsemble-ProcessMonitor-Local-Store\",\n\t\t\tvalues: DEFAULT_STORE_DATA,\n\t\t},\n\t\t(err: StandardError, store?: StoreModel) => {\n\t\t\tProcessMonitorStore = store;\n\t\t\tstoreWrapper = store;\n\t\t\tdone();\n\t\t}\n\t);\n}\n\nconst Actions = {\n\t/**\n\t * Creates the local store, then gets the first cut at stats for the process list.\n\t */\n\tinitialize: (cb: VoidCallback) => {\n\t\tcreateLocalStore(() => {\n\t\t\tActions.getInitialData();\n\t\t\tcb();\n\t\t});\n\t},\n\n\t/**\n\t * Gets the process list, pulls the statistics out, and renders the app. Also sets up an interval where we'll retrieve more stats from the system.\n\t */\n\tgetInitialData: () => {\n\t\tFSBL.System.getProcessList(Actions.extractData);\n\t\tsetInterval(() => {\n\t\t\tFSBL.System.getProcessList(Actions.extractData);\n\t\t}, 1000);\n\t},\n\n\t/**\n\t * Sets the sort field; if it's the same field as we had previously, we flip the sort direction.\n\t */\n\tsetSort: (field: string) => {\n\t\tconst currentSort = ProcessMonitorStore?.getValue({ field: \"sort\" });\n\t\tlet procs = ProcessMonitorStore?.getValue({ field: \"processList\" });\n\t\tlet newSort;\n\t\t//If it's the same field as before, flip the direction\n\t\tif (currentSort.field === field) {\n\t\t\tnewSort = currentSort;\n\t\t\tif (currentSort.direction == \"ascending\") {\n\t\t\t\tnewSort.direction = \"descending\";\n\t\t\t} else {\n\t\t\t\tnewSort.direction = \"ascending\";\n\t\t\t}\n\t\t} else {\n\t\t\tnewSort = {\n\t\t\t\tfield,\n\t\t\t\tdirection: DEFAULT_SORT_DIRECTION,\n\t\t\t};\n\t\t}\n\n\t\tProcessMonitorStore?.setValue({ field: \"sort\", value: newSort }, () => {\n\t\t\t// When changing sort we'll re-render the UI immediately instead of waiting for the process list to update. Without this step, it could be 999ms until the next update, which makes the process monitor feel very unresponsive and very bad.\n\t\t\tprocs = Actions.sortProcesses(procs);\n\t\t\tProcessMonitorStore?.setValue({ field: \"processList\", value: procs });\n\t\t});\n\t},\n\n\t/**\n\t * Extracts data from the process list (via the createDataModel function), and then sets the processList value on the store. This causes the UI to re-render.\n\t */\n\textractData: (processes: ProcessInfo[]) => {\n\t\tActions.createDataModel(processes, (procs) => {\n\t\t\t//set store.\n\t\t\tProcessMonitorStore?.setValue({ field: \"processList\", value: procs });\n\t\t});\n\t},\n\n\t/**\n\t * Converts the system.getProcessList response into something that's easily render-able.\n\t */\n\tcreateDataModel: (processes: ProcessInfo[], cb: (procs: ProcessType[]) => void) => {\n\t\tconst mode = ProcessMonitorStore?.getValue({ field: \"viewMode\" });\n\n\t\ttype ViewOrWindow = ProcessInfo[\"windows\"][0] | ProcessInfo[\"views\"][0];\n\n\t\tconst sortWindow = (a: { name: string }, b: { name: string }) => {\n\t\t\tif (a.name < b.name) return -1;\n\t\t\tif (a.name > b.name) return 1;\n\t\t\treturn 0;\n\t\t};\n\n\t\tconst viewOrWindowToProc = (item: ViewOrWindow) => {\n\t\t\tconst name =\n\t\t\t\t\"name\" in item\n\t\t\t\t\t? item.name\n\t\t\t\t\t: getViewName({\n\t\t\t\t\t\t\twindowName: item.windowName,\n\t\t\t\t\t\t\tviewId: String(item.id),\n\t\t\t\t\t });\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\ttype: \"name\" in item ? \"window\" : \"view\",\n\t\t\t};\n\t\t};\n\n\t\tconst allowAdvanced = (item: ViewOrWindow) => {\n\t\t\tconst windowName: string = \"name\" in item ? item.name.toLowerCase() : item.windowName.toLowerCase();\n\t\t\tconst windowIsService = windowName.includes(\"service\");\n\t\t\tconst windowIsSystem = windowName.includes(\"system\");\n\t\t\tconst windowIsUnnamed = windowName.includes(\"unnamed\");\n\t\t\tconst windowIsSimple = windowIsService || windowIsSystem || windowIsUnnamed;\n\t\t\treturn mode !== \"simple\" || !windowIsSimple;\n\t\t};\n\n\t\tconst procs: ProcessType[] = processes.map((proc) => {\n\t\t\tconst procName = proc.name.toLowerCase();\n\t\t\tconst isService = procName.includes(\"service\");\n\t\t\tconst isSystem = procName.includes(\"system\");\n\t\t\tconst isUnnamed = procName.includes(\"unnamed\");\n\t\t\tconst procIsSimple = isService || isSystem || isUnnamed;\n\t\t\tif (mode === \"simple\" && procIsSimple) {\n\t\t\t\treturn {\n\t\t\t\t\tstatistics: proc,\n\t\t\t\t\tvisible: false,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst childWindows: ChildWindowType[] = [...proc.windows, ...proc.views]\n\t\t\t\t.filter(allowAdvanced)\n\t\t\t\t.map(viewOrWindowToProc)\n\t\t\t\t.sort(sortWindow);\n\n\t\t\treturn {\n\t\t\t\tstatistics: proc,\n\t\t\t\tvisible: true,\n\t\t\t\ttype: proc.type,\n\t\t\t\tchildWindows,\n\t\t\t};\n\t\t});\n\n\t\tcb(Actions.sortProcesses(procs));\n\t},\n\n\t/**\n\t * Sorting function. Handles ascending and descending.\n\t */\n\tsortProcesses: (procs: ProcessType[]) => {\n\t\tlet currentSort: SortObjectType = ProcessMonitorStore?.getValue({ field: \"sort\" });\n\t\tlet sortFN = (a: ProcessType, b: ProcessType) => {\n\t\t\tlet aValue = a.statistics[currentSort.field];\n\t\t\tlet bValue = b.statistics[currentSort.field];\n\n\t\t\tif (typeof aValue === \"undefined\" || typeof bValue === \"undefined\") {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\t//Comparing upper and lowercase names makes the sort look wrong. we equalize all strings here.\n\t\t\tif (typeof aValue === \"string\") {\n\t\t\t\taValue = aValue.toLowerCase();\n\t\t\t}\n\t\t\tif (typeof bValue === \"string\") {\n\t\t\t\tbValue = bValue.toLowerCase();\n\t\t\t}\n\n\t\t\tif (currentSort.direction === \"ascending\") {\n\t\t\t\tif (aValue < bValue) return -1;\n\t\t\t\tif (aValue > bValue) return 1;\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (aValue > bValue) return -1;\n\t\t\tif (aValue < bValue) return 1;\n\t\t\treturn 0;\n\t\t};\n\t\treturn procs.sort(sortFN);\n\t},\n\n\t/**\n\t * Toggles advanced/simple mode\n\t */\n\ttoggleViewMode: () => {\n\t\tconst mode = ProcessMonitorStore?.getValue({ field: \"viewMode\" });\n\t\tProcessMonitorStore?.setValue({\n\t\t\tfield: \"viewMode\",\n\t\t\tvalue: mode === \"advanced\" ? \"simple\" : \"advanced\",\n\t\t});\n\t},\n\n\t/**\n\t * Gets the current \"flashing\" state - whether the process monitor is currently flashing a window\n\t */\n\tgetFlashingState: (cb?: StandardCallback) => {\n\t\tProcessMonitorStore?.getValue(\"flashing\", cb);\n\t},\n\n\t/**\n\t * Gets the current \"flashing\" state for the process monitor\n\t */\n\tsetFlashingState: (value: boolean, cb?: StandardCallback) => {\n\t\tProcessMonitorStore?.setValue({ field: \"flashing\", value }, cb);\n\t},\n\n\t/**\n\t * Make the window flash a couple of times so that the user can identify it.\n\t */\n\tidentifyWindow: function (winID: ChildWindowType) {\n\t\tif (winID.name.includes(\"Service\")) return;\n\t\t// If the item clicked is a view, the window for that view should flash, thus we need to get that window's name here\n\t\tconst baseName = getViewBaseName(winID);\n\n\t\tthis.setFlashingState(true);\n\n\t\tconst OPACITY_ANIMATION_DURATION = 200;\n\t\tFSBL.FinsembleWindow.getInstance({ name: baseName }, (err: StandardError, win: FinsembleWindow) => {\n\t\t\tlet windowState = \"hidden\";\n\t\t\tfunction flash(n: any, done: any) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\twin.hide(() => {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\twin.show(() => {\n\t\t\t\t\t\t\t\tdone(null);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}, OPACITY_ANIMATION_DURATION / 1.5);\n\t\t\t\t\t});\n\t\t\t\t}, OPACITY_ANIMATION_DURATION / 1.5);\n\t\t\t}\n\t\t\twin.isShowing({}, (error: StandardError, isVisible) => {\n\t\t\t\t//cache the visible state of the window prior to making it flash. If it was hidden before, hide it when the flashing is done.\n\t\t\t\twindowState = isVisible ? \"visible\" : \"hidden\";\n\t\t\t\twin.show(() => {\n\t\t\t\t\twin.bringToFront(() => {\n\t\t\t\t\t\t//Flash 5 times, in series.\n\t\t\t\t\t\tasync.timesSeries(5, flash, () => {\n\t\t\t\t\t\t\tif (windowState === \"hidden\") {\n\t\t\t\t\t\t\t\twin.hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.setFlashingState(false);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t},\n\n\t/**\n\t * Terminates a process. Prompts first. If it fails to terminate the process, displays an error message.\n\t */\n\tterminateProcess: (AppIdentifier: { uuid: string }, force = false) => {\n\t\t// AppIdentifier should be of type ChildWindow, but that has `uuid` as optional, and\n\t\t// uuid is required for this function\n\n\t\tconst app = FSBL.System.Application.wrap(AppIdentifier.uuid);\n\t\t/**\n\t\t * This whole routine is a little hectic because of all of the closures - but there's a method to the madness. Here's the logic.\n\t\t *\n\t\t * 1st time we try to close: Politely close the window. If that fails, recurse, but pass \"force\" === true.\n\t\t * 2nd time, we try to forceClose the process. If that fails, we will terminate the process forcibly, which isn't graceful.\n\t\t */\n\n\t\tconst onCloseFailure = () => {\n\t\t\t//If Actions.terminateProcess is invoked with force === true, that means that we tried to force close the process, and it failed. So we will terminate it. If not, we will try to force close (the else block).\n\t\t\tif (force) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\t\t\tterminateProcess();\n\t\t\t} else {\n\t\t\t\t//If we've already tried to close the process once, but it failed, we'll try to terminate it. The first attempt is a close, which is more graceful.\n\t\t\t\tActions.terminateProcess(AppIdentifier, true);\n\t\t\t}\n\t\t};\n\n\t\tconst forceCloseProcess = () => {\n\t\t\t//If the process fails to close in 4 seconds, we will call this method again, but try to force close it.\n\t\t\tconst closeTimeout = setTimeout(() => {\n\t\t\t\tonCloseFailure();\n\t\t\t}, MAGIC_NUMBER_TERMINATION_TIMEOUT);\n\n\t\t\tconst onCloseSuccess = () => {\n\t\t\t\tclearTimeout(closeTimeout);\n\t\t\t};\n\t\t\tapp.close(force, onCloseSuccess, onCloseFailure);\n\t\t};\n\n\t\tconst terminateProcess = () => {\n\t\t\t// Should never get into here, but just in case the process is hung, we'll show an error message to the user.\n\t\t\tapp.terminate(\n\t\t\t\t() => {},\n\t\t\t\t() => {\n\t\t\t\t\tFSBL.Clients.DialogManager.open(\n\t\t\t\t\t\t\"yesNo\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Error\",\n\t\t\t\t\t\t\tquestion: \"The process that you are attempting to close is unresponsive. Please contact support.\",\n\t\t\t\t\t\t\taffirmativeButtonLabel: \"Okay\",\n\t\t\t\t\t\t\tshowCancelButton: false,\n\t\t\t\t\t\t\tshowNegativeButton: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => {}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\n\t\t// If we're force closing, no need to prompt the user (which is what happens below);\n\t\tif (force) {\n\t\t\treturn forceCloseProcess();\n\t\t}\n\n\t\t//Ask user if they're sure. If they says \"yes\", close it.\n\t\tFSBL.Clients.DialogManager.open(\n\t\t\t\"yesNo\",\n\t\t\t{\n\t\t\t\ttitle: \"Terminate Process?\",\n\t\t\t\tquestion: \"Terminating the process may close other apps. Are you sure you want to continue?\",\n\t\t\t\taffirmativeResponseLabel: \"Terminate\",\n\t\t\t\tshowNegativeButton: false,\n\t\t\t},\n\t\t\t(err: StandardError, response: { choice: string }) => {\n\t\t\t\tif (err || response.choice === \"affirmative\") {\n\t\t\t\t\tforceCloseProcess();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t},\n\n\t/**\n\t * This function exists to make the UI feel snappy. May take a second or so for the window to close properly and for the change to flow to system.getProcessList. To make that lag go away, we immediately render the change.\n\t */\n\tremoveWindowLocally: function (winID: { uuid: string; name: string }) {\n\t\tlet procs: ProcessType[] = ProcessMonitorStore?.getValue({ field: \"processList\" });\n\t\tprocs = procs.map((proc) => {\n\t\t\tif (proc.childWindows) {\n\t\t\t\tconst cwIndex = proc.childWindows.findIndex((cw) => cw.name === winID.name);\n\t\t\t\tproc.childWindows.splice(cwIndex, 1);\n\t\t\t}\n\t\t\treturn proc;\n\t\t});\n\t\tProcessMonitorStore?.setValue({ field: \"processList\", value: procs });\n\t},\n\n\t/**\n\t * Try to close the window. If that fails, try to force close the window. If that fails, ask if they'd like to terminate the parent process.\n\t */\n\tcloseWindow: function (winID: { uuid: string; name: string }, force = false) {\n\t\tconst win = FSBL.System.Window.wrap(winID.uuid, winID.name);\n\n\t\t//Make the UI feel snappy.\n\t\tActions.removeWindowLocally(winID);\n\n\t\tconst onCloseFailure = () => {\n\t\t\t//If Actions.closeWindow was called with force === true, and the close failed, give the user the opportunity to terminate the process.\n\t\t\tif (force) {\n\t\t\t\tFSBL.Clients.DialogManager.open(\n\t\t\t\t\t\"yesNo\",\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Terminate Process?\",\n\t\t\t\t\t\tquestion:\n\t\t\t\t\t\t\t\"The app that you are attempting to close is unresponsive. Would you like to terminate the process? Terminating the process may close other apps.\",\n\t\t\t\t\t\taffirmativeResponseLabel: \"Terminate\",\n\t\t\t\t\t\tshowNegativeButton: false,\n\t\t\t\t\t},\n\t\t\t\t\t(err: StandardError, response: { choice: string }) => {\n\t\t\t\t\t\tif (err || response.choice === \"affirmative\") {\n\t\t\t\t\t\t\treturn Actions.terminateProcess({ uuid: winID.uuid }, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tActions.closeWindow(winID, true);\n\t\t\t}\n\t\t};\n\n\t\t//If we can't close within 4 seconds, something's wrong - try to force close it.\n\t\tconst closeTimeout = setTimeout(() => {\n\t\t\tonCloseFailure();\n\t\t}, MAGIC_NUMBER_TERMINATION_TIMEOUT);\n\n\t\tconst onCloseSuccess = () => {\n\t\t\tclearTimeout(closeTimeout);\n\t\t};\n\n\t\twin.close(force, onCloseSuccess, onCloseFailure);\n\t},\n};\n\nexport { ProcessMonitorStore as Store, Actions };\n"]}
|
|
@@ -3,11 +3,12 @@ import { MenuItem } from "../menu/MenuItem";
|
|
|
3
3
|
import { Icon } from "../icon/Icon";
|
|
4
4
|
import { Highlight } from "./Highlight";
|
|
5
5
|
export const SearchResult = (props) => {
|
|
6
|
-
var _a;
|
|
6
|
+
var _a, _b, _c;
|
|
7
7
|
const { data, searchQuery, resetSearch } = props;
|
|
8
8
|
const displayName = (_a = data.displayName) !== null && _a !== void 0 ? _a : data.name;
|
|
9
9
|
const onSearchResultClicked = () => {
|
|
10
|
-
|
|
10
|
+
var _a;
|
|
11
|
+
FSBL.Clients.SearchClient.invokeItemAction(data, (_a = data.actions) === null || _a === void 0 ? void 0 : _a[0]);
|
|
11
12
|
resetSearch();
|
|
12
13
|
};
|
|
13
14
|
const onActionClicked = (action) => {
|
|
@@ -27,7 +28,7 @@ export const SearchResult = (props) => {
|
|
|
27
28
|
React.createElement("div", { className: "menu-item-row" },
|
|
28
29
|
React.createElement(Icon, Object.assign({}, icon)),
|
|
29
30
|
React.createElement(Highlight, { text: displayName, matchAgainst: searchQuery || "" }),
|
|
30
|
-
data.actions.length > 1 && (React.createElement("div", { className: "search-actions" }, data.actions.map((action, i) => (React.createElement("div", { key: `actionbtn${i}`, className: "search-actions actionButton", onClick: (e) => {
|
|
31
|
+
((_b = data.actions) === null || _b === void 0 ? void 0 : _b.length) > 1 && (React.createElement("div", { className: "search-actions" }, (_c = data.actions) === null || _c === void 0 ? void 0 : _c.map((action, i) => (React.createElement("div", { key: `actionbtn${i}`, className: "search-actions actionButton", onClick: (e) => {
|
|
31
32
|
e.preventDefault();
|
|
32
33
|
e.stopPropagation();
|
|
33
34
|
onActionClicked(action);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchResult.js","sourceRoot":"","sources":["../../../src/components/search/SearchResult.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAuE,EAAE,EAAE;;IACvG,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAEjD,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,WAAW,mCAAI,IAAI,CAAC,IAAI,CAAC;IAIlD,MAAM,qBAAqB,GAAG,GAAG,EAAE
|
|
1
|
+
{"version":3,"file":"SearchResult.js","sourceRoot":"","sources":["../../../src/components/search/SearchResult.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAuE,EAAE,EAAE;;IACvG,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAEjD,MAAM,WAAW,GAAG,MAAA,IAAI,CAAC,WAAW,mCAAI,IAAI,CAAC,IAAI,CAAC;IAIlD,MAAM,qBAAqB,GAAG,GAAG,EAAE;;QAClC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAA,IAAI,CAAC,OAAO,0CAAG,CAAC,CAAC,CAAC,CAAC;QACpE,WAAW,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,MAAW,EAAE,EAAE;QACvC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzD,WAAW,EAAE,CAAC;IACf,CAAC,CAAC;IAGF,IAAI,IAAI,GAAQ;QACf,SAAS,EAAE,UAAU;QACrB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,IAAI,CAAC,IAAI;KACnB,CAAC;IAGF,IAAI,IAAI,CAAC,IAAI,EAAE;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KAC3B;IAED,OAAO,CACN,oBAAC,QAAQ,IAAC,OAAO,EAAE,qBAAqB;QACvC,6BAAK,SAAS,EAAC,eAAe;YAC7B,oBAAC,IAAI,oBAAK,IAAI,EAAI;YAClB,oBAAC,SAAS,IAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,IAAI,EAAE,GAAI;YAChE,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,IAAG,CAAC,IAAI,CAC5B,6BAAK,SAAS,EAAC,gBAAgB,IAC7B,MAAA,IAAI,CAAC,OAAO,0CAAE,GAAG,CAAC,CAAC,MAAW,EAAE,CAAS,EAAE,EAAE,CAAC,CAC9C,6BACC,GAAG,EAAE,YAAY,CAAC,EAAE,EACpB,SAAS,EAAC,6BAA6B,EACvC,OAAO,EAAE,CAAC,CAAmB,EAAE,EAAE;oBAChC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,eAAe,CAAC,MAAM,CAAC,CAAC;oBACxB,WAAW,EAAE,CAAC;oBACd,eAAe,CAAC,IAAI,EAAE,CAAC;gBACxB,CAAC,IAEA,MAAM,CAAC,IAAI,CACP,CACN,CAAC,CACG,CACN,CACI,CACI,CACX,CAAC;AACH,CAAC,CAAC","sourcesContent":["import * as React from \"react\";\nimport { MenuItem } from \"../menu/MenuItem\";\nimport { Icon } from \"../icon/Icon\";\nimport { Highlight } from \"./Highlight\";\nimport { SearchQuery } from \"../../types/searchTypes\";\nexport const SearchResult = (props: { data: any; searchQuery: SearchQuery; resetSearch: () => void }) => {\n\tconst { data, searchQuery, resetSearch } = props;\n\n\tconst displayName = data.displayName ?? data.name;\n\n\t// Will trigger the action associated with the item\n\t// (e.g., loading a workspace, spawning a component)\n\tconst onSearchResultClicked = () => {\n\t\tFSBL.Clients.SearchClient.invokeItemAction(data, data.actions?.[0]);\n\t\tresetSearch();\n\t};\n\n\tconst onActionClicked = (action: any) => {\n\t\tFSBL.Clients.SearchClient.invokeItemAction(data, action);\n\t\tresetSearch();\n\t};\n\n\t// Default icon to be based on initials\n\tlet icon: any = {\n\t\timageType: \"initials\",\n\t\tname: displayName,\n\t\tcategory: data.type,\n\t};\n\n\t// If the search results return iconography then use convert and use it\n\tif (data.icon) {\n\t\ticon.imageType = data.icon.type;\n\t\ticon.path = data.icon.path;\n\t}\n\n\treturn (\n\t\t<MenuItem onClick={onSearchResultClicked}>\n\t\t\t<div className=\"menu-item-row\">\n\t\t\t\t<Icon {...icon} />\n\t\t\t\t<Highlight text={displayName} matchAgainst={searchQuery || \"\"} />\n\t\t\t\t{data.actions?.length > 1 && (\n\t\t\t\t\t<div className=\"search-actions\">\n\t\t\t\t\t\t{data.actions?.map((action: any, i: number) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={`actionbtn${i}`}\n\t\t\t\t\t\t\t\tclassName=\"search-actions actionButton\"\n\t\t\t\t\t\t\t\tonClick={(e: React.MouseEvent) => {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\tonActionClicked(action);\n\t\t\t\t\t\t\t\t\tresetSearch();\n\t\t\t\t\t\t\t\t\tfinsembleWindow.blur();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{action.name}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</MenuItem>\n\t);\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppEditAccess.js","sourceRoot":"","sources":["../../../src/components/smartDesktopDesigner/AppEditAccess.tsx"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright 2017 - 2020 by ChartIQ, Inc.\n * All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\nimport { SmartDesktopDesignerActions } from \"../../actions/smartDesktopDesignerActions\";\nimport { RootState } from \"../../reducers/rootReducer\";\nimport { useDispatch, useSelector } from \"../../store\";\nimport { ApplicationRule } from \"../../types/smartDesktopDesignerTypes\";\nimport { FinsembleSelect } from \"../common/FinsembleSelect\";\nimport { Tooltip } from \"../common/Tooltip\";\nimport RelativePortal from \"react-relative-portal\";\nimport { FinsembleIcon } from \"../common/FinsembleIcon\";\nimport { services } from \"@finsemble/finsemble-core\";\n\ntype AppDefinition = services.Interop.types.AppDefinition;\n\nexport type AppEditAccessProps = {\n\tappName: string;\n\trules: ApplicationRule[];\n\tonChange: (data: ApplicationRule[]) => any;\n\taddApp: typeof FSBL.Clients.SmartDesktopClient.prototype.addApp;\n\tisInboundInteropAuthorized: typeof FSBL.Clients.SmartDesktopClient.isInboundInteropAuthorized;\n\tisOutboundInteropAuthorized: typeof FSBL.Clients.SmartDesktopClient.isOutboundInteropAuthorized;\n};\n\nexport const AppEditAccess = (props: AppEditAccessProps) => {\n\tconst dispatch = useDispatch();\n\n\tconst apps = useSelector((state: RootState) => state.smartDesktopDesigner.apps);\n\n\tconst [rules, setRules] = useState(props.rules);\n\n\tconst [scrolling, setScrolling] = useState(false);\n\tlet timeout: any = null;\n\n\tuseEffect(() => {\n\t\tconst handleScroll = () => {\n\t\t\tsetScrolling(true);\n\t\t\tclearTimeout(timeout);\n\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tsetScrolling(false);\n\t\t\t}, 50);\n\t\t};\n\n\t\twindow.addEventListener(\"scroll\", handleScroll, { passive: true, capture: true });\n\n\t\treturn () => window.removeEventListener(\"scroll\", handleScroll);\n\t}, []);\n\n\t/**\n\t * Get a list of all apps other than this one (in order to pick which ones to authorize)\n\t */\n\tconst filteredApps = apps\n\t\t.filter((app) => !app.manifest?.temporary && app.name !== props.appName)\n\t\t.sort((a, b) => {\n\t\t\tif (a.name > b.name) {\n\t\t\t\treturn 1;\n\t\t\t} else if (b.name > a.name) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\n\t/**\n\t * When adding an app, there will not yet be a name. The app that is flagged as temporary is us.\n\t * During editing of an app, the app will not be temporary but it will have a name.\n\t * We must check for both circumstances in order to know which app in the list is the current app.\n\t */\n\tconst currentApp = apps.find((app) => app.manifest?.temporary || app.name === props.appName);\n\n\tconst [inboundAuthorizedApps, setInboundAuthorizedApps] = useState<string[]>([]);\n\tconst [outboundAuthorizedApps, setOutboundAuthorizedApps] = useState<string[]>([]);\n\tconst [advancedExpanded, setAdvancedExpanded] = useState(false);\n\n\tfunction doSetRules(newRules: ApplicationRule[]) {\n\t\tsetRules(newRules);\n\n\t\tprops.onChange(newRules);\n\t}\n\n\tfunction updateBlockingApp(config: AppDefinition) {\n\t\tprops.addApp(config.appId, config).then(() => {\n\t\t\tdispatch(SmartDesktopDesignerActions.update_app(config));\n\t\t});\n\t}\n\n\tfunction getOptions() {\n\t\treturn filteredApps.map((app) => {\n\t\t\tconst isInboundAuthorized = inboundAuthorizedApps.includes(app.name);\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={[\"app-edit-access-item\", !isInboundAuthorized ? \"app-edit-access-blocked\" : \"\"].join(\" \")}\n\t\t\t\t\tkey={app.name}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"app-edit-access-item-name\">{app.name}</span>\n\t\t\t\t\t{!isInboundAuthorized && (\n\t\t\t\t\t\t<RelativePortal\n\t\t\t\t\t\t\tclassName={[\"tooltip-portal\", scrolling || !advancedExpanded ? \"is-scrolling\" : \"\"].join(\" \")}\n\t\t\t\t\t\t\tcomponent=\"div\"\n\t\t\t\t\t\t\tleft={-13}\n\t\t\t\t\t\t\ttop={0}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\ttype=\"lock\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tupdateBlockingApp({\n\t\t\t\t\t\t\t\t\t\t...app,\n\t\t\t\t\t\t\t\t\t\tmanifest: {\n\t\t\t\t\t\t\t\t\t\t\t...app.manifest,\n\t\t\t\t\t\t\t\t\t\t\tinterop: {\n\t\t\t\t\t\t\t\t\t\t\t\t...app.manifest?.interop,\n\t\t\t\t\t\t\t\t\t\t\t\tselectConnect: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t...(app.manifest?.interop?.selectConnect || []),\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tauthorize: [{ name: props.appName || \"\" }],\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tThis app is blocking access. Click to allow access\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</RelativePortal>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t});\n\t}\n\n\tuseEffect(() => {\n\t\tif (currentApp) {\n\t\t\tfilteredApps.forEach((targetApp) => {\n\t\t\t\tif (targetApp.name === props.appName) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tprops\n\t\t\t\t\t.isInboundInteropAuthorized(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...currentApp,\n\t\t\t\t\t\t\tname: props.appName,\n\t\t\t\t\t\t\tmanifest: {\n\t\t\t\t\t\t\t\tinterop: {\n\t\t\t\t\t\t\t\t\tselectConnect: rules,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttargetApp\n\t\t\t\t\t)\n\t\t\t\t\t.then((inboundAuthorized: boolean) => {\n\t\t\t\t\t\tif (inboundAuthorized && !inboundAuthorizedApps.includes(targetApp.name)) {\n\t\t\t\t\t\t\tsetInboundAuthorizedApps([...inboundAuthorizedApps, targetApp.name]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tprops\n\t\t\t\t\t.isOutboundInteropAuthorized(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...currentApp,\n\t\t\t\t\t\t\tname: props.appName,\n\t\t\t\t\t\t\tmanifest: {\n\t\t\t\t\t\t\t\tinterop: {\n\t\t\t\t\t\t\t\t\tselectConnect: rules,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttargetApp\n\t\t\t\t\t)\n\t\t\t\t\t.then((outboundAuthorized: boolean) => {\n\t\t\t\t\t\tif (outboundAuthorized && !outboundAuthorizedApps.includes(targetApp.name)) {\n\t\t\t\t\t\t\tsetOutboundAuthorizedApps([...outboundAuthorizedApps, targetApp.name]);\n\t\t\t\t\t\t} else if (!outboundAuthorized && outboundAuthorizedApps.includes(targetApp.name)) {\n\t\t\t\t\t\t\tconst outboundAuthorizedAppsCopy = outboundAuthorizedApps.slice(0);\n\t\t\t\t\t\t\toutboundAuthorizedAppsCopy.splice(outboundAuthorizedAppsCopy.indexOf(targetApp.name), 1);\n\t\t\t\t\t\t\tsetOutboundAuthorizedApps(outboundAuthorizedAppsCopy);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n\n\treturn (\n\t\t<div className=\"app-edit-access\">\n\t\t\t<FinsembleSelect\n\t\t\t\toptions={filteredApps.map((app) => app.name)}\n\t\t\t\toptionComponents={getOptions()}\n\t\t\t\tselected={filteredApps.filter((app) => outboundAuthorizedApps.includes(app.name)).map((app) => app.name)}\n\t\t\t\tupdateCallback={(selected) => {\n\t\t\t\t\tlet newRules = [...rules];\n\n\t\t\t\t\tfilteredApps.forEach((app) => {\n\t\t\t\t\t\tconst isSelected = selected.find((name) => name === app.name);\n\n\t\t\t\t\t\tif (!isSelected) {\n\t\t\t\t\t\t\tnewRules = newRules.filter((rule) =>\n\t\t\t\t\t\t\t\trule.authorize?.some((auth: { name: string }) => auth.name !== app.name)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewRules.push({\n\t\t\t\t\t\t\t\tauthorize: [{ name: app.name }],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tdoSetRules(newRules);\n\t\t\t\t}}\n\t\t\t\tshowSearch={true}\n\t\t\t></FinsembleSelect>\n\t\t</div>\n\t);\n};\n"]}
|
|
1
|
+
{"version":3,"file":"AppEditAccess.js","sourceRoot":"","sources":["../../../src/components/smartDesktopDesigner/AppEditAccess.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAExF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,cAAc,MAAM,uBAAuB,CAAC;AAenD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAyB,EAAE,EAAE;IAC1D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,KAAgB,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEhF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,OAAO,GAAQ,IAAI,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,YAAY,GAAG,GAAG,EAAE;YACzB,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,YAAY,CAAC,OAAO,CAAC,CAAC;YAEtB,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC,EAAE,EAAE,CAAC,CAAC;QACR,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAElF,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC,EAAE,EAAE,CAAC,CAAC;IAKP,MAAM,YAAY,GAAG,IAAI;SACvB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAC,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,SAAS,CAAA,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAA,EAAA,CAAC;SACvE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;YACpB,OAAO,CAAC,CAAC;SACT;aAAM,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;YAC3B,OAAO,CAAC,CAAC,CAAC;SACV;QAED,OAAO,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;IAOJ,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,SAAS,KAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,CAAA,EAAA,CAAC,CAAC;IAE7F,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACjF,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACnF,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhE,SAAS,UAAU,CAAC,QAA2B;QAC9C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEnB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS,iBAAiB,CAAC,MAAqB;QAC/C,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5C,QAAQ,CAAC,2BAA2B,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,UAAU;QAClB,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAErE,OAAO,CACN,6BACC,SAAS,EAAE,CAAC,sBAAsB,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACpG,GAAG,EAAE,GAAG,CAAC,IAAI;gBAEb,8BAAM,SAAS,EAAC,2BAA2B,IAAE,GAAG,CAAC,IAAI,CAAQ;gBAC5D,CAAC,mBAAmB,IAAI,CACxB,oBAAC,cAAc,IACd,SAAS,EAAE,CAAC,gBAAgB,EAAE,SAAS,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC7F,SAAS,EAAC,KAAK,EACf,IAAI,EAAE,CAAC,EAAE,EACT,GAAG,EAAE,CAAC;oBAEN,oBAAC,OAAO,IACP,IAAI,EAAC,MAAM,EACX,OAAO,EAAE,GAAG,EAAE;;4BACb,iBAAiB,iCACb,GAAG,KACN,QAAQ,kCACJ,GAAG,CAAC,QAAQ,KACf,OAAO,kCACH,MAAA,GAAG,CAAC,QAAQ,0CAAE,OAAO,KACxB,aAAa,EAAE;4CACd,GAAG,CAAC,CAAA,MAAA,MAAA,GAAG,CAAC,QAAQ,0CAAE,OAAO,0CAAE,aAAa,KAAI,EAAE,CAAC;4CAC/C;gDACC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;6CAC1C;yCACD,UAGF,CAAC;wBACJ,CAAC,yDAGQ,CACM,CACjB,CACI,CACN,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,UAAU,EAAE;YACf,YAAY,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAClC,IAAI,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE;oBACrC,OAAO;iBACP;gBAED,KAAK;qBACH,0BAA0B,iCAEtB,UAAU,KACb,IAAI,EAAE,KAAK,CAAC,OAAO,EACnB,QAAQ,EAAE;wBACT,OAAO,EAAE;4BACR,aAAa,EAAE,KAAK;yBACpB;qBACD,KAEF,SAAS,CACT;qBACA,IAAI,CAAC,CAAC,iBAA0B,EAAE,EAAE;oBACpC,IAAI,iBAAiB,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBACzE,wBAAwB,CAAC,CAAC,GAAG,qBAAqB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;qBACrE;gBACF,CAAC,CAAC,CAAC;gBAEJ,KAAK;qBACH,2BAA2B,iCAEvB,UAAU,KACb,IAAI,EAAE,KAAK,CAAC,OAAO,EACnB,QAAQ,EAAE;wBACT,OAAO,EAAE;4BACR,aAAa,EAAE,KAAK;yBACpB;qBACD,KAEF,SAAS,CACT;qBACA,IAAI,CAAC,CAAC,kBAA2B,EAAE,EAAE;oBACrC,IAAI,kBAAkB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBAC3E,yBAAyB,CAAC,CAAC,GAAG,sBAAsB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;qBACvE;yBAAM,IAAI,CAAC,kBAAkB,IAAI,sBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;wBAClF,MAAM,0BAA0B,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACnE,0BAA0B,CAAC,MAAM,CAAC,0BAA0B,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;wBACzF,yBAAyB,CAAC,0BAA0B,CAAC,CAAC;qBACtD;gBACF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACH;IACF,CAAC,CAAC,CAAC;IAEH,OAAO,CACN,6BAAK,SAAS,EAAC,iBAAiB;QAC/B,oBAAC,eAAe,IACf,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAC5C,gBAAgB,EAAE,UAAU,EAAE,EAC9B,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EACxG,cAAc,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAC5B,IAAI,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;gBAE1B,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC5B,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;oBAE9D,IAAI,CAAC,UAAU,EAAE;wBAChB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,WACnC,OAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,IAAI,CAAC,CAAC,IAAsB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA,EAAA,CACxE,CAAC;qBACF;yBAAM;wBACN,QAAQ,CAAC,IAAI,CAAC;4BACb,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;yBAC/B,CAAC,CAAC;qBACH;gBACF,CAAC,CAAC,CAAC;gBAEH,UAAU,CAAC,QAAQ,CAAC,CAAC;YACtB,CAAC,EACD,UAAU,EAAE,IAAI,GACE,CACd,CACN,CAAC;AACH,CAAC,CAAC","sourcesContent":["/*!\n * Copyright 2017 - 2020 by ChartIQ, Inc.\n * All rights reserved.\n */\n\nimport React, { useEffect, useState } from \"react\";\nimport { SmartDesktopDesignerActions } from \"../../actions/smartDesktopDesignerActions\";\nimport { RootState } from \"../../reducers/rootReducer\";\nimport { useDispatch, useSelector } from \"../../store\";\nimport { ApplicationRule } from \"../../types/smartDesktopDesignerTypes\";\nimport { FinsembleSelect } from \"../common/FinsembleSelect\";\nimport { Tooltip } from \"../common/Tooltip\";\nimport RelativePortal from \"react-relative-portal\";\nimport { FinsembleIcon } from \"../common/FinsembleIcon\";\nimport { services } from \"@finsemble/finsemble-api\";\n\ntype AppDefinition = services.Interop.types.AppDefinition;\n\nexport type AppEditAccessProps = {\n\tappName: string;\n\trules: ApplicationRule[];\n\tonChange: (data: ApplicationRule[]) => any;\n\taddApp: typeof FSBL.Clients.SmartDesktopClient.prototype.addApp;\n\tisInboundInteropAuthorized: typeof FSBL.Clients.SmartDesktopClient.isInboundInteropAuthorized;\n\tisOutboundInteropAuthorized: typeof FSBL.Clients.SmartDesktopClient.isOutboundInteropAuthorized;\n};\n\nexport const AppEditAccess = (props: AppEditAccessProps) => {\n\tconst dispatch = useDispatch();\n\n\tconst apps = useSelector((state: RootState) => state.smartDesktopDesigner.apps);\n\n\tconst [rules, setRules] = useState(props.rules);\n\n\tconst [scrolling, setScrolling] = useState(false);\n\tlet timeout: any = null;\n\n\tuseEffect(() => {\n\t\tconst handleScroll = () => {\n\t\t\tsetScrolling(true);\n\t\t\tclearTimeout(timeout);\n\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\tsetScrolling(false);\n\t\t\t}, 50);\n\t\t};\n\n\t\twindow.addEventListener(\"scroll\", handleScroll, { passive: true, capture: true });\n\n\t\treturn () => window.removeEventListener(\"scroll\", handleScroll);\n\t}, []);\n\n\t/**\n\t * Get a list of all apps other than this one (in order to pick which ones to authorize)\n\t */\n\tconst filteredApps = apps\n\t\t.filter((app) => !app.manifest?.temporary && app.name !== props.appName)\n\t\t.sort((a, b) => {\n\t\t\tif (a.name > b.name) {\n\t\t\t\treturn 1;\n\t\t\t} else if (b.name > a.name) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\n\t/**\n\t * When adding an app, there will not yet be a name. The app that is flagged as temporary is us.\n\t * During editing of an app, the app will not be temporary but it will have a name.\n\t * We must check for both circumstances in order to know which app in the list is the current app.\n\t */\n\tconst currentApp = apps.find((app) => app.manifest?.temporary || app.name === props.appName);\n\n\tconst [inboundAuthorizedApps, setInboundAuthorizedApps] = useState<string[]>([]);\n\tconst [outboundAuthorizedApps, setOutboundAuthorizedApps] = useState<string[]>([]);\n\tconst [advancedExpanded, setAdvancedExpanded] = useState(false);\n\n\tfunction doSetRules(newRules: ApplicationRule[]) {\n\t\tsetRules(newRules);\n\n\t\tprops.onChange(newRules);\n\t}\n\n\tfunction updateBlockingApp(config: AppDefinition) {\n\t\tprops.addApp(config.appId, config).then(() => {\n\t\t\tdispatch(SmartDesktopDesignerActions.update_app(config));\n\t\t});\n\t}\n\n\tfunction getOptions() {\n\t\treturn filteredApps.map((app) => {\n\t\t\tconst isInboundAuthorized = inboundAuthorizedApps.includes(app.name);\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={[\"app-edit-access-item\", !isInboundAuthorized ? \"app-edit-access-blocked\" : \"\"].join(\" \")}\n\t\t\t\t\tkey={app.name}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"app-edit-access-item-name\">{app.name}</span>\n\t\t\t\t\t{!isInboundAuthorized && (\n\t\t\t\t\t\t<RelativePortal\n\t\t\t\t\t\t\tclassName={[\"tooltip-portal\", scrolling || !advancedExpanded ? \"is-scrolling\" : \"\"].join(\" \")}\n\t\t\t\t\t\t\tcomponent=\"div\"\n\t\t\t\t\t\t\tleft={-13}\n\t\t\t\t\t\t\ttop={0}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\ttype=\"lock\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tupdateBlockingApp({\n\t\t\t\t\t\t\t\t\t\t...app,\n\t\t\t\t\t\t\t\t\t\tmanifest: {\n\t\t\t\t\t\t\t\t\t\t\t...app.manifest,\n\t\t\t\t\t\t\t\t\t\t\tinterop: {\n\t\t\t\t\t\t\t\t\t\t\t\t...app.manifest?.interop,\n\t\t\t\t\t\t\t\t\t\t\t\tselectConnect: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t...(app.manifest?.interop?.selectConnect || []),\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tauthorize: [{ name: props.appName || \"\" }],\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tThis app is blocking access. Click to allow access\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t</RelativePortal>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t);\n\t\t});\n\t}\n\n\tuseEffect(() => {\n\t\tif (currentApp) {\n\t\t\tfilteredApps.forEach((targetApp) => {\n\t\t\t\tif (targetApp.name === props.appName) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tprops\n\t\t\t\t\t.isInboundInteropAuthorized(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...currentApp,\n\t\t\t\t\t\t\tname: props.appName,\n\t\t\t\t\t\t\tmanifest: {\n\t\t\t\t\t\t\t\tinterop: {\n\t\t\t\t\t\t\t\t\tselectConnect: rules,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttargetApp\n\t\t\t\t\t)\n\t\t\t\t\t.then((inboundAuthorized: boolean) => {\n\t\t\t\t\t\tif (inboundAuthorized && !inboundAuthorizedApps.includes(targetApp.name)) {\n\t\t\t\t\t\t\tsetInboundAuthorizedApps([...inboundAuthorizedApps, targetApp.name]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\tprops\n\t\t\t\t\t.isOutboundInteropAuthorized(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t...currentApp,\n\t\t\t\t\t\t\tname: props.appName,\n\t\t\t\t\t\t\tmanifest: {\n\t\t\t\t\t\t\t\tinterop: {\n\t\t\t\t\t\t\t\t\tselectConnect: rules,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttargetApp\n\t\t\t\t\t)\n\t\t\t\t\t.then((outboundAuthorized: boolean) => {\n\t\t\t\t\t\tif (outboundAuthorized && !outboundAuthorizedApps.includes(targetApp.name)) {\n\t\t\t\t\t\t\tsetOutboundAuthorizedApps([...outboundAuthorizedApps, targetApp.name]);\n\t\t\t\t\t\t} else if (!outboundAuthorized && outboundAuthorizedApps.includes(targetApp.name)) {\n\t\t\t\t\t\t\tconst outboundAuthorizedAppsCopy = outboundAuthorizedApps.slice(0);\n\t\t\t\t\t\t\toutboundAuthorizedAppsCopy.splice(outboundAuthorizedAppsCopy.indexOf(targetApp.name), 1);\n\t\t\t\t\t\t\tsetOutboundAuthorizedApps(outboundAuthorizedAppsCopy);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t});\n\t\t}\n\t});\n\n\treturn (\n\t\t<div className=\"app-edit-access\">\n\t\t\t<FinsembleSelect\n\t\t\t\toptions={filteredApps.map((app) => app.name)}\n\t\t\t\toptionComponents={getOptions()}\n\t\t\t\tselected={filteredApps.filter((app) => outboundAuthorizedApps.includes(app.name)).map((app) => app.name)}\n\t\t\t\tupdateCallback={(selected) => {\n\t\t\t\t\tlet newRules = [...rules];\n\n\t\t\t\t\tfilteredApps.forEach((app) => {\n\t\t\t\t\t\tconst isSelected = selected.find((name) => name === app.name);\n\n\t\t\t\t\t\tif (!isSelected) {\n\t\t\t\t\t\t\tnewRules = newRules.filter((rule) =>\n\t\t\t\t\t\t\t\trule.authorize?.some((auth: { name: string }) => auth.name !== app.name)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewRules.push({\n\t\t\t\t\t\t\t\tauthorize: [{ name: app.name }],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tdoSetRules(newRules);\n\t\t\t\t}}\n\t\t\t\tshowSearch={true}\n\t\t\t></FinsembleSelect>\n\t\t</div>\n\t);\n};\n"]}
|
|
@@ -19,5 +19,6 @@ export declare type AppEditPageProps = {
|
|
|
19
19
|
addApp: typeof FSBL.Clients.SmartDesktopClient.prototype.addApp;
|
|
20
20
|
isInboundInteropAuthorized: typeof FSBL.Clients.SmartDesktopClient.isInboundInteropAuthorized;
|
|
21
21
|
isOutboundInteropAuthorized: typeof FSBL.Clients.SmartDesktopClient.isOutboundInteropAuthorized;
|
|
22
|
+
preloadAliasList: string[];
|
|
22
23
|
};
|
|
23
|
-
export declare const AppEditPage: ({ startingDisplayName, startingAppType, startingWindowURL, startingNativePath, appData, validateURL, removeApplicationFn, cancelFn, submitFn, addApp, isInboundInteropAuthorized, isOutboundInteropAuthorized, }: AppEditPageProps) => JSX.Element;
|
|
24
|
+
export declare const AppEditPage: ({ startingDisplayName, startingAppType, startingWindowURL, startingNativePath, appData, validateURL, removeApplicationFn, cancelFn, submitFn, addApp, isInboundInteropAuthorized, isOutboundInteropAuthorized, preloadAliasList, }: AppEditPageProps) => JSX.Element;
|