@uxland/primary-shell 7.22.0 → 7.23.1

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.
Files changed (29) hide show
  1. package/dist/{component-Dwsijod7.js → component-C_PbI9wb.js} +2 -2
  2. package/dist/{component-Dwsijod7.js.map → component-C_PbI9wb.js.map} +1 -1
  3. package/dist/{index-DlsgRvfa.js → index-DvfICPCZ.js} +4850 -4839
  4. package/dist/index-DvfICPCZ.js.map +1 -0
  5. package/dist/index.js +1 -1
  6. package/dist/index.umd.cjs +313 -313
  7. package/dist/index.umd.cjs.map +1 -1
  8. package/dist/primary/shell/src/api/api.d.ts +2 -0
  9. package/dist/primary/shell/src/api/context-manager/context-manager.d.ts +27 -0
  10. package/dist/primary/shell/src/api/context-manager/context-manager.test.d.ts +1 -0
  11. package/dist/primary/shell/src/bootstrapper.d.ts +2 -4
  12. package/dist/primary/shell/src/features/bootstrapper.d.ts +1 -2
  13. package/dist/primary/shell/src/features/visit/finalize-visit/bootstrapper.d.ts +1 -2
  14. package/dist/primary/shell/src/features/visit/finalize-visit/component/finalize-visit-button.d.ts +0 -2
  15. package/dist/primary/shell/src/features/visit/finalize-visit/handler.d.ts +1 -1
  16. package/dist/primary/shell/src/features/visit/finalize-visit/request.d.ts +0 -2
  17. package/dist/primary/shell/src/index.d.ts +1 -0
  18. package/package.json +1 -1
  19. package/src/api/api.ts +4 -0
  20. package/src/api/context-manager/context-manager.test.ts +86 -0
  21. package/src/api/context-manager/context-manager.ts +41 -0
  22. package/src/bootstrapper.ts +7 -5
  23. package/src/features/bootstrapper.ts +2 -3
  24. package/src/features/visit/finalize-visit/bootstrapper.ts +4 -4
  25. package/src/features/visit/finalize-visit/component/finalize-visit-button.ts +1 -12
  26. package/src/features/visit/finalize-visit/handler.ts +5 -3
  27. package/src/features/visit/finalize-visit/request.ts +1 -3
  28. package/src/index.ts +1 -0
  29. package/dist/index-DlsgRvfa.js.map +0 -1
@@ -12,6 +12,7 @@ import { PrimariaRegionManager } from './region-manager/region-manager';
12
12
  import { TokenManager } from './token-manager/token-manager';
13
13
  import { UserManager } from './user-manager/user-manager';
14
14
  import { PrimariaImportDataManager } from './import-data-manager';
15
+ import { PrimariaContextManager } from './context-manager/context-manager';
15
16
  export interface PrimariaApi extends HarmonixApi {
16
17
  httpClient: HttpClient;
17
18
  interactionService: PrimariaInteractionService;
@@ -19,6 +20,7 @@ export interface PrimariaApi extends HarmonixApi {
19
20
  broker: PrimariaBroker;
20
21
  regionManager: PrimariaRegionManager;
21
22
  globalStateManager: PrimariaGlobalStateManager;
23
+ contextManager: PrimariaContextManager;
22
24
  tokenManager: TokenManager;
23
25
  userManager: UserManager;
24
26
  ecapEventManager: EcapEventManager;
@@ -0,0 +1,27 @@
1
+ export interface EcapContext {
2
+ visi_id?: string;
3
+ signador?: string;
4
+ campanya?: string;
5
+ }
6
+ export declare abstract class PrimariaContextManager {
7
+ abstract getContext(): Readonly<EcapContext>;
8
+ }
9
+ declare class PrimariaContextManagerImpl implements PrimariaContextManager {
10
+ private context;
11
+ /**
12
+ * Initializes the context with the provided ECAP context data.
13
+ * This should only be called once during shell initialization.
14
+ *
15
+ * @param {EcapContext} context - The context data from ECAP
16
+ * @return {void}
17
+ */
18
+ initializeContext(context: EcapContext): void;
19
+ /**
20
+ * Returns a read-only copy of the entire ECAP context.
21
+ *
22
+ * @return {Readonly<EcapContext>} The context object
23
+ */
24
+ getContext(): Readonly<EcapContext>;
25
+ }
26
+ export declare const createContextManager: () => PrimariaContextManagerImpl;
27
+ export {};
@@ -1,4 +1,2 @@
1
- export interface IShellParams {
2
- visitId: string;
3
- }
4
- export declare const initializeShell: (hostAppElement: HTMLElement, shellParams?: IShellParams) => void;
1
+ import { EcapContext } from './api/context-manager/context-manager';
2
+ export declare const initializeShell: (hostAppElement: HTMLElement, ecapContext?: EcapContext) => void;
@@ -1,4 +1,3 @@
1
1
  import { PrimariaApi } from '../api/api';
2
- import { IShellParams } from '../bootstrapper';
3
- export declare const useFeatures: (api: PrimariaApi, shellParams?: IShellParams) => void;
2
+ export declare const useFeatures: (api: PrimariaApi) => void;
4
3
  export declare const disposeFeatures: (api: PrimariaApi) => void;
@@ -1,4 +1,3 @@
1
1
  import { PrimariaApi } from '../../../api/api';
2
- import { IShellParams } from '../../../bootstrapper';
3
- export declare const useFinalizeVisit: (api: PrimariaApi, shellParams?: IShellParams) => void;
2
+ export declare const useFinalizeVisit: (api: PrimariaApi) => void;
4
3
  export declare const disposeFinalizeVisit: () => void;
@@ -1,7 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
2
  export declare class FinalizeVisitButton extends LitElement {
3
- constructor(visitId: string);
4
3
  render(): import('lit').TemplateResult<1>;
5
- visitId: string;
6
4
  finalizeVisitHandler(): void;
7
5
  }
@@ -3,5 +3,5 @@ import { FinalizeVisit } from './request';
3
3
  export declare class FinalizeVisitHandler {
4
4
  private api;
5
5
  constructor(api: PrimariaApi);
6
- handle(data: FinalizeVisit): Promise<void>;
6
+ handle(_data: FinalizeVisit): Promise<void>;
7
7
  }
@@ -1,4 +1,2 @@
1
1
  export declare class FinalizeVisit {
2
- visitId: string;
3
- constructor(visitId: string);
4
2
  }
@@ -4,6 +4,7 @@ export * from './api/region-manager/regions';
4
4
  export * from './handle-plugins';
5
5
  export * from './api/api';
6
6
  export * from './api/broker/primaria-broker';
7
+ export type { PrimariaContextManager, EcapContext } from './api/context-manager/context-manager';
7
8
  export * from './UI/index';
8
9
  export { PrimariaNavItem } from './UI/shared-components/primaria-nav-item/primaria-nav-item';
9
10
  export { PrimariaRegion } from './UI/shared-components/primaria-region';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uxland/primary-shell",
3
- "version": "7.22.0",
3
+ "version": "7.23.1",
4
4
  "description": "Primaria Shell",
5
5
  "author": "UXLand <dev@uxland.es>",
6
6
  "homepage": "https://github.com/uxland/harmonix/tree/app#readme",
package/src/api/api.ts CHANGED
@@ -30,6 +30,7 @@ import { PrimariaRegionManager, createRegionManagerProxy } from "./region-manage
30
30
  import { TokenManager, createTokenManager } from "./token-manager/token-manager";
31
31
  import { UserManager, createUserManager } from "./user-manager/user-manager";
32
32
  import { PrimariaImportDataManager, ImportDataManagerImpl } from "./import-data-manager";
33
+ import { PrimariaContextManager, createContextManager } from "./context-manager/context-manager";
33
34
 
34
35
  const broker = createBroker();
35
36
 
@@ -40,6 +41,7 @@ export interface PrimariaApi extends HarmonixApi {
40
41
  broker: PrimariaBroker;
41
42
  regionManager: PrimariaRegionManager;
42
43
  globalStateManager: PrimariaGlobalStateManager;
44
+ contextManager: PrimariaContextManager;
43
45
  tokenManager: TokenManager;
44
46
  userManager: UserManager;
45
47
  ecapEventManager: EcapEventManager;
@@ -54,6 +56,7 @@ export const PrimariaRegionHost: any = createRegionHost(regionManager as any);
54
56
  const tokenManager = createTokenManager();
55
57
  const userManager = createUserManager(tokenManager);
56
58
  const globalStateManager: PrimariaGlobalStateManager = createGlobalStateManager(broker);
59
+ const contextManager = createContextManager();
57
60
  const pluginBusyManager = new PluginBusyManagerImpl();
58
61
  const quickActionBusyManager = new QuickActionBusyManagerImpl(broker);
59
62
  const interactionService = new ParimariaInteractionServiceImpl();
@@ -80,6 +83,7 @@ export const primariaApiFactory: ApiFactory<PrimariaApi> = (
80
83
  broker,
81
84
  createLocaleManager: createLocaleManager(pluginInfo.pluginId) as any,
82
85
  globalStateManager,
86
+ contextManager,
83
87
  tokenManager,
84
88
  userManager,
85
89
  ecapEventManager,
@@ -0,0 +1,86 @@
1
+ import { describe, it, expect, beforeEach } from "vitest";
2
+ import { createContextManager, EcapContext } from "./context-manager";
3
+
4
+ describe("PrimariaContextManager", () => {
5
+ let contextManager: ReturnType<typeof createContextManager>;
6
+
7
+ beforeEach(() => {
8
+ contextManager = createContextManager();
9
+ // Reset context before each test
10
+ contextManager.initializeContext({});
11
+ });
12
+
13
+ describe("initializeContext", () => {
14
+ it("should initialize context with provided data", () => {
15
+ const context: EcapContext = {
16
+ visi_id: "12345",
17
+ signador: "Dr. Smith",
18
+ campanya: "2024-Q1",
19
+ };
20
+
21
+ contextManager.initializeContext(context);
22
+
23
+ expect(contextManager.getContext()).toEqual(context);
24
+ });
25
+
26
+ it("should handle partial context data", () => {
27
+ const context: EcapContext = {
28
+ visi_id: "12345",
29
+ };
30
+
31
+ contextManager.initializeContext(context);
32
+ const result = contextManager.getContext();
33
+
34
+ expect(result.visi_id).toBe("12345");
35
+ expect(result.signador).toBeUndefined();
36
+ expect(result.campanya).toBeUndefined();
37
+ });
38
+ });
39
+
40
+ describe("getContext", () => {
41
+ it("should return a read-only copy of context", () => {
42
+ const context: EcapContext = {
43
+ visi_id: "12345",
44
+ signador: "Dr. Smith",
45
+ };
46
+
47
+ contextManager.initializeContext(context);
48
+ const returnedContext = contextManager.getContext();
49
+
50
+ expect(returnedContext).toEqual(context);
51
+ expect(returnedContext).not.toBe(context); // Ensure it's a copy
52
+ });
53
+
54
+ it("should return empty object if not initialized", () => {
55
+ const context = contextManager.getContext();
56
+ expect(context).toEqual({});
57
+ });
58
+ });
59
+
60
+ describe("context properties access", () => {
61
+ it("should access visit ID through context", () => {
62
+ contextManager.initializeContext({ visi_id: "12345" });
63
+ const context = contextManager.getContext();
64
+ expect(context.visi_id).toBe("12345");
65
+ });
66
+
67
+ it("should access signador through context", () => {
68
+ contextManager.initializeContext({ signador: "Dr. Smith" });
69
+ const context = contextManager.getContext();
70
+ expect(context.signador).toBe("Dr. Smith");
71
+ });
72
+
73
+ it("should access campanya through context", () => {
74
+ contextManager.initializeContext({ campanya: "2024-Q1" });
75
+ const context = contextManager.getContext();
76
+ expect(context.campanya).toBe("2024-Q1");
77
+ });
78
+
79
+ it("should return undefined for unset properties", () => {
80
+ const context = contextManager.getContext();
81
+ expect(context.visi_id).toBeUndefined();
82
+ expect(context.signador).toBeUndefined();
83
+ expect(context.campanya).toBeUndefined();
84
+ });
85
+ });
86
+ });
@@ -0,0 +1,41 @@
1
+ export interface EcapContext {
2
+ visi_id?: string;
3
+ signador?: string;
4
+ campanya?: string;
5
+ }
6
+
7
+ export abstract class PrimariaContextManager {
8
+ abstract getContext(): Readonly<EcapContext>;
9
+ }
10
+
11
+ class PrimariaContextManagerImpl implements PrimariaContextManager {
12
+ private context: EcapContext = {};
13
+
14
+ /**
15
+ * Initializes the context with the provided ECAP context data.
16
+ * This should only be called once during shell initialization.
17
+ *
18
+ * @param {EcapContext} context - The context data from ECAP
19
+ * @return {void}
20
+ */
21
+ public initializeContext(context: EcapContext): void {
22
+ this.context = { ...context };
23
+ }
24
+
25
+ /**
26
+ * Returns a read-only copy of the entire ECAP context.
27
+ *
28
+ * @return {Readonly<EcapContext>} The context object
29
+ */
30
+ getContext(): Readonly<EcapContext> {
31
+ return { ...this.context };
32
+ }
33
+ }
34
+
35
+ let contextManager: PrimariaContextManagerImpl;
36
+
37
+ export const createContextManager = (): PrimariaContextManagerImpl => {
38
+ if (contextManager) return contextManager;
39
+ contextManager = new PrimariaContextManagerImpl();
40
+ return contextManager;
41
+ };
@@ -1,17 +1,19 @@
1
1
  import { PrimariaShell } from "./UI/components/primaria-shell/primaria-shell";
2
2
  import { shellApi } from "./api/api";
3
+ import { EcapContext } from "./api/context-manager/context-manager";
3
4
  import { useFeatures } from "./features/bootstrapper";
4
5
  import { useLocalization } from "./locales";
5
6
  import { useUI } from "./UI/bootstrapper";
6
7
 
7
- export interface IShellParams {
8
- visitId: string;
9
- }
8
+ export const initializeShell = (hostAppElement: HTMLElement, ecapContext?: EcapContext) => {
9
+ // Initialize the context manager with ECAP parameters
10
+ if (ecapContext) {
11
+ (shellApi.contextManager as any).initializeContext(ecapContext);
12
+ }
10
13
 
11
- export const initializeShell = (hostAppElement: HTMLElement, shellParams?: IShellParams) => {
12
14
  useLocalization(shellApi);
13
15
  useUI();
14
- useFeatures(shellApi, shellParams);
16
+ useFeatures(shellApi);
15
17
  const shell = new PrimariaShell();
16
18
  hostAppElement.appendChild(shell as any);
17
19
  };
@@ -1,6 +1,5 @@
1
1
  import { mediatorSettings } from "mediatr-ts";
2
2
  import { PrimariaApi } from "../api/api";
3
- import { IShellParams } from "../bootstrapper";
4
3
  import { container } from "../infrastructure/ioc/container";
5
4
  import { TYPES } from "../infrastructure/ioc/types";
6
5
  import { useExitShell, disposeExitShell } from "./exit/bootstrapper";
@@ -9,12 +8,12 @@ import { GetUserInfo } from "./get-user-info/request";
9
8
  import { disposeGetVisitId, useGetVisitId } from "./visit/get-visit-id/bootstrapper";
10
9
  import { disposeFinalizeVisit, useFinalizeVisit } from "./visit/finalize-visit/bootstrapper";
11
10
 
12
- export const useFeatures = (api: PrimariaApi, shellParams?: IShellParams) => {
11
+ export const useFeatures = (api: PrimariaApi) => {
13
12
  container.bind(TYPES.primaryApi).toConstantValue(api);
14
13
  useGetUserInfo(api);
15
14
  useExitShell(api);
16
15
  useGetVisitId(api);
17
- useFinalizeVisit(api, shellParams);
16
+ useFinalizeVisit(api);
18
17
  api.broker.send(new GetUserInfo());
19
18
  };
20
19
 
@@ -1,5 +1,4 @@
1
1
  import { PrimariaApi } from "../../../api/api";
2
- import { IShellParams } from "../../../bootstrapper";
3
2
  import { BrokerDisposableHandler } from "../../../api/broker/primaria-broker";
4
3
  import { container } from "../../../infrastructure/ioc/container";
5
4
  import { registerRequest } from "../../utils";
@@ -9,13 +8,14 @@ import { FinalizeVisitButton } from "./component/finalize-visit-button";
9
8
 
10
9
  let request: BrokerDisposableHandler;
11
10
 
12
- export const useFinalizeVisit = (api: PrimariaApi, shellParams?: IShellParams) => {
11
+ export const useFinalizeVisit = (api: PrimariaApi) => {
13
12
  disposeFinalizeVisit();
14
- if (shellParams?.visitId) {
13
+ const visitId = api.contextManager.getContext().visi_id;
14
+ if (visitId) {
15
15
  api.regionManager.registerView(api.regionManager.regions.shell.headerRightActions, {
16
16
  id: "finalize-visit-button",
17
17
  sortHint: "0001",
18
- factory: () => Promise.resolve(new FinalizeVisitButton(shellParams.visitId)),
18
+ factory: () => Promise.resolve(new FinalizeVisitButton()),
19
19
  });
20
20
  request = registerRequest(api, container)(FinalizeVisit, FinalizeVisitHandler);
21
21
  }
@@ -1,25 +1,14 @@
1
1
  import { LitElement, html } from "lit";
2
2
  import { template } from "./template";
3
- import { property } from "lit/decorators.js";
4
3
  import { shellApi } from "../../../../api/api";
5
4
  import { FinalizeVisit } from "../request";
6
5
 
7
6
  export class FinalizeVisitButton extends LitElement {
8
- constructor(visitId: string) {
9
- super();
10
- this.visitId = visitId;
11
- }
12
-
13
7
  render() {
14
8
  return html`${template(this)}`;
15
9
  }
16
10
 
17
- @property({ type: String })
18
- visitId: string;
19
-
20
11
  finalizeVisitHandler() {
21
- if (this.visitId) {
22
- shellApi.broker.send(new FinalizeVisit(this.visitId));
23
- }
12
+ shellApi.broker.send(new FinalizeVisit());
24
13
  }
25
14
  }
@@ -6,10 +6,12 @@ import { ExitShell } from "../../exit/request";
6
6
 
7
7
  export class FinalizeVisitHandler {
8
8
  constructor(@inject(TYPES.primaryApi) private api: PrimariaApi) {}
9
- async handle(data: FinalizeVisit) {
9
+ async handle(_data: FinalizeVisit) {
10
10
  try {
11
- const visitIdData = data.visitId;
12
- this.api.broker.send(new ExitShell("RESOL_VISITA", { VisiID: visitIdData }))
11
+ const visitId = this.api.contextManager.getContext().visi_id;
12
+ if (visitId) {
13
+ this.api.broker.send(new ExitShell("RESOL_VISITA", { VisiID: visitId }));
14
+ }
13
15
  } catch (error) {
14
16
  this.api.notificationService.error(error.message);
15
17
  }
@@ -1,3 +1 @@
1
- export class FinalizeVisit {
2
- constructor(public visitId: string) {}
3
- }
1
+ export class FinalizeVisit {}
package/src/index.ts CHANGED
@@ -14,6 +14,7 @@ export * from "./api/region-manager/regions";
14
14
  export * from "./handle-plugins";
15
15
  export * from "./api/api";
16
16
  export * from "./api/broker/primaria-broker";
17
+ export type { PrimariaContextManager, EcapContext } from "./api/context-manager/context-manager";
17
18
  export * from "./UI/index";
18
19
  export { PrimariaNavItem } from "./UI/shared-components/primaria-nav-item/primaria-nav-item";
19
20
  export { PrimariaRegion } from "./UI/shared-components/primaria-region";