@uxland/primary-shell 5.1.1 → 5.2.0
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/dist/index.js +27068 -26701
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1637 -1519
- package/dist/index.umd.cjs.map +1 -1
- package/dist/primary/shell/src/UI/bootstrapper.d.ts +1 -0
- package/dist/primary/shell/src/UI/components/bootstrapper.d.ts +1 -0
- package/dist/primary/shell/src/UI/components/{shell-header → primaria-shell/shell-header}/shell-header.d.ts +3 -3
- package/dist/primary/shell/src/UI/components/primaria-shell/shell-header/template.d.ts +3 -0
- package/dist/primary/shell/src/UI/index.d.ts +0 -1
- package/dist/primary/shell/src/UI/shared-components/bootstrapper.d.ts +1 -0
- package/dist/primary/shell/src/UI/shared-components/index.d.ts +0 -1
- package/dist/primary/shell/src/api/api.d.ts +4 -4
- package/dist/primary/shell/src/api/ecap-event-manager/ecap-event-manager.test.d.ts +1 -0
- package/dist/primary/shell/src/api/notification-service/notification-service-impl.test.d.ts +1 -0
- package/dist/primary/shell/src/api/pdf-viewer-manager/constants.d.ts +1 -0
- package/dist/primary/shell/src/api/pdf-viewer-manager/handle-views.d.ts +2 -0
- package/dist/primary/shell/src/api/pdf-viewer-manager/pdf-viewer-manager.d.ts +2 -4
- package/dist/primary/shell/src/api/pdf-viewer-manager/pdf-viewer-manager.test.d.ts +1 -0
- package/dist/primary/shell/src/api/region-manager/region-manager.test.d.ts +1 -0
- package/dist/primary/shell/src/bootstrapper.d.ts +0 -1
- package/dist/primary/shell/src/constants.d.ts +0 -2
- package/dist/primary/shell/src/features/bootstrapper.d.ts +2 -2
- package/dist/primary/shell/src/features/clinical-monitoring/bootstrapper.d.ts +4 -0
- package/dist/primary/shell/src/{UI/components/clinical-monitoring → features/clinical-monitoring/component}/clinical-monitoring.d.ts +3 -0
- package/dist/primary/shell/src/features/clinical-monitoring/constants.d.ts +1 -0
- package/dist/primary/shell/src/features/clinical-monitoring/handle-views.d.ts +1 -0
- package/dist/primary/shell/src/features/exit/bootstrapper.d.ts +4 -2
- package/dist/primary/shell/src/features/exit/handler.test.d.ts +1 -0
- package/dist/primary/shell/src/features/get-patient-cip/action.d.ts +3 -0
- package/dist/primary/shell/src/features/get-user-info/bootstrapper.d.ts +4 -2
- package/dist/primary/shell/src/features/get-user-info/handler.d.ts +1 -1
- package/dist/primary/shell/src/features/get-user-info/handler.test.d.ts +1 -0
- package/dist/primary/shell/src/features/navigate-to-ecap/navigate-without-closing-and-with-cip.d.ts +1 -0
- package/dist/primary/shell/src/handle-views.d.ts +1 -2
- package/dist/primary/shell/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.test.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/utils/normalize-string.d.ts +1 -1
- package/dist/primary/shell/src/internal-plugins/activity-history/utils/normalize-string.test.d.ts +1 -0
- package/dist/primary/shell/src/internal-plugins/activity-history/utils/prop-contains-string.test.d.ts +1 -0
- package/dist/primary/shell/src/locales.d.ts +1 -1
- package/package.json +2 -2
- package/src/UI/bootstrapper.ts +12 -0
- package/src/UI/components/bootstrapper.ts +17 -0
- package/src/UI/components/{primaria-error-view → error-view}/component.ts +2 -3
- package/src/UI/components/poc-events-ecap/poc-events-ecap.ts +3 -7
- package/src/UI/components/primaria-shell/primaria-shell.ts +8 -10
- package/src/UI/components/{shell-header → primaria-shell/shell-header}/shell-header.ts +8 -9
- package/src/UI/components/{shell-header → primaria-shell/shell-header}/template.ts +4 -4
- package/src/UI/components/primaria-shell/template.ts +14 -8
- package/src/UI/components/quick-actions-menu/quick-actions-menu.ts +0 -2
- package/src/UI/index.ts +0 -1
- package/src/UI/shared-components/bootstrapper.ts +12 -0
- package/src/UI/shared-components/index.ts +0 -3
- package/src/UI/shared-components/primaria-content-switcher/primaria-content-switcher.ts +1 -2
- package/src/UI/shared-components/primaria-nav-item/primaria-nav-item.ts +6 -7
- package/src/UI/shared-components/primaria-nav-tree-menu/primaria-nav-tree-menu.ts +3 -4
- package/src/UI/shared-components/primaria-text-editor/primaria-rich-text-editor.ts +1 -2
- package/src/api/api.ts +17 -14
- package/src/api/ecap-event-manager/ecap-event-manager.test.ts +48 -0
- package/src/api/notification-service/notification-service-impl.test.ts +56 -0
- package/src/api/pdf-viewer-manager/constants.ts +1 -0
- package/src/api/pdf-viewer-manager/handle-views.ts +32 -0
- package/src/api/pdf-viewer-manager/pdf-viewer-manager.test.ts +99 -0
- package/src/api/pdf-viewer-manager/pdf-viewer-manager.ts +15 -25
- package/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/pdf-selector/pdf-selector.ts +3 -4
- package/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/pdf-visor.ts +8 -9
- package/src/api/plugin-busy-manager/plugin-busy-list/component.ts +0 -2
- package/src/api/plugin-busy-manager/plugin-busy-manager.ts +7 -1
- package/src/api/region-manager/region-manager.test.ts +123 -0
- package/src/bootstrapper.ts +8 -9
- package/src/constants.ts +0 -2
- package/src/disposer.ts +2 -2
- package/src/features/bootstrapper.ts +14 -8
- package/src/features/clinical-monitoring/bootstrapper.ts +39 -0
- package/src/features/clinical-monitoring/component/clinical-monitoring.ts +57 -0
- package/src/{UI/components/clinical-monitoring → features/clinical-monitoring/component}/styles.css +0 -2
- package/src/features/clinical-monitoring/constants.ts +1 -0
- package/src/features/clinical-monitoring/handle-views.ts +6 -0
- package/src/features/exit/bootstrapper.ts +5 -5
- package/src/features/exit/handler.test.ts +103 -0
- package/src/features/exit/handler.ts +2 -2
- package/src/features/get-patient-cip/action.ts +5 -0
- package/src/features/get-user-info/bootstrapper.ts +5 -5
- package/src/features/get-user-info/handler.test.ts +60 -0
- package/src/features/get-user-info/handler.ts +2 -4
- package/src/features/navigate-to-ecap/navigate-without-closing-and-with-cip.ts +7 -0
- package/src/handle-plugins.ts +1 -1
- package/src/handle-views.ts +91 -133
- package/src/internal-plugins/activity-history/activity-history-item/list/UI/main-view/activity-history-main.ts +1 -1
- package/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.test.ts +61 -0
- package/src/internal-plugins/activity-history/utils/get-unique-values-by-prop-path.ts +2 -2
- package/src/internal-plugins/activity-history/utils/normalize-string.test.ts +29 -0
- package/src/internal-plugins/activity-history/utils/normalize-string.ts +5 -3
- package/src/internal-plugins/activity-history/utils/prop-contains-string.test.ts +47 -0
- package/src/locales.ts +1 -1
- package/dist/primary/shell/src/UI/components/index.d.ts +0 -1
- package/dist/primary/shell/src/UI/components/shell-header/template.d.ts +0 -3
- package/src/UI/components/clinical-monitoring/clinical-monitoring.ts +0 -28
- package/src/UI/components/index.ts +0 -7
- /package/dist/primary/shell/src/UI/components/{primaria-error-view → error-view}/component.d.ts +0 -0
- /package/dist/primary/shell/src/UI/components/{primaria-error-view → error-view}/template.d.ts +0 -0
- /package/dist/primary/shell/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/pdf-selector/pdf-selector.d.ts +0 -0
- /package/dist/primary/shell/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/pdf-selector/template.d.ts +0 -0
- /package/dist/primary/shell/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/pdf-visor.d.ts +0 -0
- /package/dist/primary/shell/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/utils.d.ts +0 -0
- /package/dist/primary/shell/src/{UI/components/clinical-monitoring → features/clinical-monitoring/component}/template.d.ts +0 -0
- /package/src/UI/components/{primaria-error-view → error-view}/styles.css +0 -0
- /package/src/UI/components/{primaria-error-view → error-view}/template.ts +0 -0
- /package/src/UI/components/{shell-header → primaria-shell/shell-header}/styles.css +0 -0
- /package/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/pdf-selector/styles.css +0 -0
- /package/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/pdf-selector/template.ts +0 -0
- /package/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/styles.css +0 -0
- /package/src/{UI/components → api/pdf-viewer-manager}/pdf-visor/utils.ts +0 -0
- /package/src/{UI/components/clinical-monitoring → features/clinical-monitoring/component}/template.ts +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { IRegion, region } from "@uxland/regions";
|
|
2
|
+
import { LitElement, css, html, unsafeCSS } from "lit";
|
|
3
|
+
import { PrimariaRegionHost } from "../../../api/api";
|
|
4
|
+
import { clinicalMonitoringRegions } from "../../../api/region-manager/regions";
|
|
5
|
+
import styles from "./styles.css?inline";
|
|
6
|
+
import { template } from "./template";
|
|
7
|
+
|
|
8
|
+
export class ClinicalMonitoring extends PrimariaRegionHost(LitElement) {
|
|
9
|
+
render() {
|
|
10
|
+
return html`${template(this)}`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
static styles = css`
|
|
14
|
+
${unsafeCSS(styles)}
|
|
15
|
+
`;
|
|
16
|
+
|
|
17
|
+
firstUpdated() {
|
|
18
|
+
this._observeMaximizedState();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private _observeMaximizedState() {
|
|
22
|
+
const contentRegion = this.renderRoot.querySelector("#content-widgets-region");
|
|
23
|
+
if (!contentRegion) return;
|
|
24
|
+
|
|
25
|
+
const observer = new MutationObserver(() => {
|
|
26
|
+
const activity = contentRegion.querySelector("activity-history-main");
|
|
27
|
+
if (!activity) return;
|
|
28
|
+
|
|
29
|
+
const isMaximized = activity.hasAttribute("maximized") || activity.maximized;
|
|
30
|
+
this._toggleWidgetsVisibility(!isMaximized);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
observer.observe(contentRegion, {
|
|
34
|
+
childList: true,
|
|
35
|
+
subtree: true,
|
|
36
|
+
attributes: true,
|
|
37
|
+
attributeFilter: ["maximized"],
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
private _toggleWidgetsVisibility(show: boolean) {
|
|
42
|
+
const sidebar = this.renderRoot.querySelector("#widgets-sidebar-region");
|
|
43
|
+
const header = this.renderRoot.querySelector("#header-widgets-region");
|
|
44
|
+
|
|
45
|
+
if (sidebar) sidebar.style.display = show ? "" : "none";
|
|
46
|
+
if (header) header.style.display = show ? "" : "none";
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@region({ targetId: "widgets-sidebar-region", name: clinicalMonitoringRegions.sidebar })
|
|
50
|
+
sidebarRegion: IRegion | undefined;
|
|
51
|
+
|
|
52
|
+
@region({ targetId: "header-widgets-region", name: clinicalMonitoringRegions.header })
|
|
53
|
+
headerRegion: IRegion | undefined;
|
|
54
|
+
|
|
55
|
+
@region({ targetId: "content-widgets-region", name: clinicalMonitoringRegions.content })
|
|
56
|
+
contentRegion: IRegion | undefined;
|
|
57
|
+
}
|
package/src/{UI/components/clinical-monitoring → features/clinical-monitoring/component}/styles.css
RENAMED
|
@@ -24,7 +24,6 @@
|
|
|
24
24
|
grid-template-columns: repeat(3, 1fr);
|
|
25
25
|
gap: 24px;
|
|
26
26
|
padding: 24px 40px;
|
|
27
|
-
z-index: 1;
|
|
28
27
|
}
|
|
29
28
|
#content-widgets-region {
|
|
30
29
|
flex: 1;
|
|
@@ -32,7 +31,6 @@
|
|
|
32
31
|
height: 100%;
|
|
33
32
|
padding-inline: 40px;
|
|
34
33
|
padding-bottom: 24px;
|
|
35
|
-
z-index: 2;
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const clinicalMonitoringId = "clinical-monitoring";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PrimariaApi } from "../../api/api";
|
|
2
2
|
import { BrokerDisposableHandler } from "../../api/broker/primaria-broker";
|
|
3
3
|
import { container } from "../../infrastructure/ioc/container";
|
|
4
4
|
import { registerRequest } from "../utils";
|
|
@@ -7,11 +7,11 @@ import { ExitShell } from "./request";
|
|
|
7
7
|
|
|
8
8
|
let request: BrokerDisposableHandler;
|
|
9
9
|
|
|
10
|
-
export const
|
|
11
|
-
|
|
12
|
-
request = registerRequest(
|
|
10
|
+
export const useExitShell = (api: PrimariaApi) => {
|
|
11
|
+
disposeExitShell();
|
|
12
|
+
request = registerRequest(api, container)(ExitShell, ExitShellHandler);
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
export const
|
|
15
|
+
export const disposeExitShell = () => {
|
|
16
16
|
request?.dispose();
|
|
17
17
|
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
import { ExitShellHandler } from "./handler";
|
|
3
|
+
import { ExitShell } from "./request";
|
|
4
|
+
import { disposePlugins } from "../../handle-plugins";
|
|
5
|
+
import { disposeShell, raiseCloseEvent } from "../../disposer";
|
|
6
|
+
import { PluginBusyTask } from "../../api/plugin-busy-manager/plugin-busy-manager";
|
|
7
|
+
import { PrimariaApi } from "@uxland/primary-shell";
|
|
8
|
+
|
|
9
|
+
vi.mock("../../handle-plugins", () => ({
|
|
10
|
+
disposePlugins: vi.fn(),
|
|
11
|
+
}));
|
|
12
|
+
|
|
13
|
+
vi.mock("../../disposer", () => ({
|
|
14
|
+
disposeShell: vi.fn(),
|
|
15
|
+
raiseCloseEvent: vi.fn(),
|
|
16
|
+
}));
|
|
17
|
+
|
|
18
|
+
const createMockApi = (): PrimariaApi =>
|
|
19
|
+
({
|
|
20
|
+
pluginBusyManager: {
|
|
21
|
+
getBusyPluginTasks: vi.fn(),
|
|
22
|
+
},
|
|
23
|
+
interactionService: {
|
|
24
|
+
confirm: vi.fn(),
|
|
25
|
+
},
|
|
26
|
+
notificationService: {
|
|
27
|
+
error: vi.fn(),
|
|
28
|
+
},
|
|
29
|
+
}) as any;
|
|
30
|
+
|
|
31
|
+
describe("ExitShellHandler", () => {
|
|
32
|
+
let handler: ExitShellHandler;
|
|
33
|
+
let mockApi: PrimariaApi;
|
|
34
|
+
const message = {} as ExitShell;
|
|
35
|
+
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
mockApi = createMockApi();
|
|
38
|
+
handler = new ExitShellHandler(mockApi);
|
|
39
|
+
vi.clearAllMocks();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("should dispose and raise close event if no busy tasks", async () => {
|
|
43
|
+
mockApi.pluginBusyManager.getBusyPluginTasks = vi.fn().mockReturnValue([]);
|
|
44
|
+
(disposePlugins as any).mockResolvedValue(undefined);
|
|
45
|
+
|
|
46
|
+
await handler.handle(message);
|
|
47
|
+
|
|
48
|
+
expect(disposePlugins).toHaveBeenCalled();
|
|
49
|
+
expect(disposeShell).toHaveBeenCalled();
|
|
50
|
+
expect(raiseCloseEvent).toHaveBeenCalled();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("should ask for confirmation if there are busy tasks", async () => {
|
|
54
|
+
const busyTasks: PluginBusyTask[] = [{ pluginId: "x" }] as any;
|
|
55
|
+
mockApi.pluginBusyManager.getBusyPluginTasks = vi.fn().mockReturnValue(busyTasks);
|
|
56
|
+
mockApi.interactionService.confirm = vi.fn().mockResolvedValue({ confirmed: true });
|
|
57
|
+
(disposePlugins as any).mockResolvedValue(undefined);
|
|
58
|
+
|
|
59
|
+
await handler.handle(message);
|
|
60
|
+
|
|
61
|
+
expect(mockApi.interactionService.confirm).toHaveBeenCalled();
|
|
62
|
+
expect(disposePlugins).toHaveBeenCalled();
|
|
63
|
+
expect(disposeShell).toHaveBeenCalled();
|
|
64
|
+
expect(raiseCloseEvent).toHaveBeenCalled();
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("should not continue if confirmation is declined", async () => {
|
|
68
|
+
const busyTasks: PluginBusyTask[] = [{ pluginId: "x" }] as any;
|
|
69
|
+
mockApi.pluginBusyManager.getBusyPluginTasks = vi.fn().mockReturnValue(busyTasks);
|
|
70
|
+
mockApi.interactionService.confirm = vi.fn().mockResolvedValue({ confirmed: false });
|
|
71
|
+
|
|
72
|
+
await handler.handle(message);
|
|
73
|
+
|
|
74
|
+
expect(mockApi.interactionService.confirm).toHaveBeenCalled();
|
|
75
|
+
expect(disposePlugins).not.toHaveBeenCalled();
|
|
76
|
+
expect(disposeShell).not.toHaveBeenCalled();
|
|
77
|
+
expect(raiseCloseEvent).not.toHaveBeenCalled();
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
it("should handle errors and raise close event", async () => {
|
|
81
|
+
const error = new Error("Something went wrong");
|
|
82
|
+
mockApi.pluginBusyManager.getBusyPluginTasks = vi.fn().mockReturnValue([]);
|
|
83
|
+
(disposePlugins as any).mockRejectedValue(error);
|
|
84
|
+
|
|
85
|
+
await handler.handle(message);
|
|
86
|
+
|
|
87
|
+
expect(mockApi.notificationService.error).toHaveBeenCalledWith("Something went wrong");
|
|
88
|
+
expect(raiseCloseEvent).toHaveBeenCalled();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it("should proceed if disposePlugins takes longer than 5 seconds", async () => {
|
|
92
|
+
mockApi.pluginBusyManager.getBusyPluginTasks = vi.fn().mockReturnValue([]);
|
|
93
|
+
(disposePlugins as any).mockImplementation(
|
|
94
|
+
() => new Promise((resolve) => setTimeout(resolve, 6000)),
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
await handler.handle(message);
|
|
98
|
+
|
|
99
|
+
expect(disposePlugins).toHaveBeenCalled();
|
|
100
|
+
expect(disposeShell).toHaveBeenCalled();
|
|
101
|
+
expect(raiseCloseEvent).toHaveBeenCalled();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
@@ -17,17 +17,17 @@ export class ExitShellHandler {
|
|
|
17
17
|
const { confirmed } = await this.askForClose(busyTasks);
|
|
18
18
|
if (!confirmed) return;
|
|
19
19
|
}
|
|
20
|
-
disposeShell();
|
|
21
20
|
|
|
22
21
|
// Per si un plugin tarda molt en fer dispose, màxim deixarem 5 segons, per no interrompre el tancar infinitament
|
|
23
22
|
await Promise.race([
|
|
24
23
|
disposePlugins(), // S'intenta executar un dispose normal
|
|
25
24
|
this.timeout(5000), // Si passen 5s, es segueix amb l'execució
|
|
26
25
|
]);
|
|
27
|
-
|
|
26
|
+
disposeShell();
|
|
28
27
|
raiseCloseEvent();
|
|
29
28
|
} catch (error) {
|
|
30
29
|
this.api.notificationService.error(error.message);
|
|
30
|
+
raiseCloseEvent();
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { shellApi } from "../../api/api";
|
|
1
|
+
import { PrimariaApi, shellApi } from "../../api/api";
|
|
2
2
|
import { BrokerDisposableHandler } from "../../api/broker/primaria-broker";
|
|
3
3
|
import { container, registerDep, unregisterDep } from "../../infrastructure/ioc/container";
|
|
4
4
|
import { registerRequest } from "../utils";
|
|
@@ -8,13 +8,13 @@ import { GetUserInfo } from "./request";
|
|
|
8
8
|
|
|
9
9
|
let request: BrokerDisposableHandler;
|
|
10
10
|
|
|
11
|
-
export const
|
|
12
|
-
|
|
13
|
-
request = registerRequest(
|
|
11
|
+
export const useGetUserInfo = (api: PrimariaApi) => {
|
|
12
|
+
disposeGetUserInfo();
|
|
13
|
+
request = registerRequest(api, container)(GetUserInfo, GetUserInfoHandler);
|
|
14
14
|
registerDep(GetUserInfoBackendAdapter);
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
export const
|
|
17
|
+
export const disposeGetUserInfo = () => {
|
|
18
18
|
request?.dispose();
|
|
19
19
|
unregisterDep(GetUserInfoBackendAdapter);
|
|
20
20
|
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
import { GetUserInfoHandler } from "./handler";
|
|
3
|
+
import { GetUserInfo } from "./request";
|
|
4
|
+
import { IUserInfo } from "./model";
|
|
5
|
+
import { UserInfoBackendAdapter } from "./backend-adapter";
|
|
6
|
+
import { PrimariaApi } from "../../api/api";
|
|
7
|
+
|
|
8
|
+
const createMockApi = (): PrimariaApi =>
|
|
9
|
+
({
|
|
10
|
+
globalStateManager: {
|
|
11
|
+
setData: vi.fn(),
|
|
12
|
+
},
|
|
13
|
+
notificationService: {
|
|
14
|
+
error: vi.fn(),
|
|
15
|
+
},
|
|
16
|
+
}) as any;
|
|
17
|
+
|
|
18
|
+
const createMockBackendAdapter = (): UserInfoBackendAdapter =>
|
|
19
|
+
({
|
|
20
|
+
getUserInfo: vi.fn(),
|
|
21
|
+
}) as any;
|
|
22
|
+
|
|
23
|
+
describe("GetUserInfoHandler", () => {
|
|
24
|
+
let handler: GetUserInfoHandler;
|
|
25
|
+
let api: PrimariaApi;
|
|
26
|
+
let backendAdapter: UserInfoBackendAdapter;
|
|
27
|
+
|
|
28
|
+
const message = {} as GetUserInfo;
|
|
29
|
+
const mockUserInfo: IUserInfo = {
|
|
30
|
+
name: "John Doe",
|
|
31
|
+
email: "john@example.com",
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
api = createMockApi();
|
|
36
|
+
backendAdapter = createMockBackendAdapter();
|
|
37
|
+
handler = new GetUserInfoHandler(api, backendAdapter);
|
|
38
|
+
vi.clearAllMocks();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("should fetch user info and store it in global state", async () => {
|
|
42
|
+
(backendAdapter.getUserInfo as any).mockResolvedValue(mockUserInfo);
|
|
43
|
+
|
|
44
|
+
const result = await handler.handle(message);
|
|
45
|
+
|
|
46
|
+
expect(backendAdapter.getUserInfo).toHaveBeenCalled();
|
|
47
|
+
expect(api.globalStateManager.setData).toHaveBeenCalledWith("userInfo", mockUserInfo);
|
|
48
|
+
expect(result).toEqual(mockUserInfo);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("should handle error and call notificationService", async () => {
|
|
52
|
+
const error = new Error("Failed to fetch user info");
|
|
53
|
+
(backendAdapter.getUserInfo as any).mockRejectedValue(error);
|
|
54
|
+
|
|
55
|
+
const result = await handler.handle(message);
|
|
56
|
+
|
|
57
|
+
expect(api.notificationService.error).toHaveBeenCalledWith("Failed to fetch user info");
|
|
58
|
+
expect(result).toBeUndefined();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { PrimariaApi } from "@uxland/primary-shell";
|
|
2
1
|
import { TYPES } from "../../infrastructure/ioc/types";
|
|
3
2
|
import { inject } from "inversify";
|
|
4
3
|
import { GetUserInfo } from "./request";
|
|
5
4
|
import { IUserInfo } from "./model";
|
|
6
5
|
import { UserInfoBackendAdapter } from "./backend-adapter";
|
|
7
6
|
import { GetUserInfoBackendAdapter } from "./backend-adapter";
|
|
7
|
+
import { PrimariaApi } from "../../api/api";
|
|
8
8
|
|
|
9
9
|
export class GetUserInfoHandler {
|
|
10
10
|
constructor(
|
|
@@ -17,9 +17,7 @@ export class GetUserInfoHandler {
|
|
|
17
17
|
this.api.globalStateManager.setData("userInfo", userInfo);
|
|
18
18
|
return userInfo;
|
|
19
19
|
} catch (error) {
|
|
20
|
-
this.api.notificationService.error(
|
|
21
|
-
error.message,
|
|
22
|
-
);
|
|
20
|
+
this.api.notificationService.error(error.message);
|
|
23
21
|
}
|
|
24
22
|
}
|
|
25
23
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { shellApi } from "../../api/api";
|
|
2
|
+
import { getPatientCip } from "../get-patient-cip/action";
|
|
3
|
+
|
|
4
|
+
export const navigateToEcapWithoutClosingWithCip = async (eventName: string) => {
|
|
5
|
+
const CIP = await getPatientCip(shellApi);
|
|
6
|
+
shellApi.ecapEventManager.publish(eventName, "NO_TANCAR", { CIP });
|
|
7
|
+
};
|
package/src/handle-plugins.ts
CHANGED
|
@@ -26,7 +26,7 @@ export const bootstrapPlugins = async (plugins: PluginDefinition[]) => {
|
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export const disposePlugins = async () => {
|
|
29
|
-
return Promise.all(bootstrappedPlugins.map((plugin: BootstrappedPlugin) => plugin
|
|
29
|
+
return Promise.all(bootstrappedPlugins.map((plugin: BootstrappedPlugin) => plugin?.dispose()));
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export type Plugin = PluginType<PrimariaApi>;
|