@equinor/fusion-framework-module-widget 2.0.10 → 3.0.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +82 -70
  2. package/dist/esm/Widget.js +255 -0
  3. package/dist/esm/Widget.js.map +1 -0
  4. package/dist/esm/WidgetModuleConfigurator.js +39 -73
  5. package/dist/esm/WidgetModuleConfigurator.js.map +1 -1
  6. package/dist/esm/WidgetModuleProvider.js +85 -17
  7. package/dist/esm/WidgetModuleProvider.js.map +1 -1
  8. package/dist/esm/enable-widget-module.js +8 -2
  9. package/dist/esm/enable-widget-module.js.map +1 -1
  10. package/dist/esm/errors.js +22 -4
  11. package/dist/esm/errors.js.map +1 -1
  12. package/dist/esm/events.js +2 -0
  13. package/dist/esm/events.js.map +1 -0
  14. package/dist/esm/index.js +1 -1
  15. package/dist/esm/index.js.map +1 -1
  16. package/dist/esm/module.js +5 -2
  17. package/dist/esm/module.js.map +1 -1
  18. package/dist/esm/state/actions.js +31 -0
  19. package/dist/esm/state/actions.js.map +1 -0
  20. package/dist/esm/state/create-reducer.js +32 -0
  21. package/dist/esm/state/create-reducer.js.map +1 -0
  22. package/dist/esm/state/create-state.js +12 -0
  23. package/dist/esm/state/create-state.js.map +1 -0
  24. package/dist/esm/state/flows.js +21 -0
  25. package/dist/esm/state/flows.js.map +1 -0
  26. package/dist/esm/utils.js +43 -0
  27. package/dist/esm/utils.js.map +1 -0
  28. package/dist/esm/version.js +2 -1
  29. package/dist/esm/version.js.map +1 -1
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/dist/types/Widget.d.ts +78 -0
  32. package/dist/types/WidgetModuleConfigurator.d.ts +27 -27
  33. package/dist/types/WidgetModuleProvider.d.ts +44 -5
  34. package/dist/types/enable-widget-module.d.ts +5 -1
  35. package/dist/types/errors.d.ts +7 -2
  36. package/dist/types/events.d.ts +54 -0
  37. package/dist/types/index.d.ts +1 -1
  38. package/dist/types/module.d.ts +3 -3
  39. package/dist/types/state/actions.d.ts +92 -0
  40. package/dist/types/state/create-reducer.d.ts +3 -0
  41. package/dist/types/state/create-state.d.ts +5 -0
  42. package/dist/types/state/flows.d.ts +7 -0
  43. package/dist/types/types.d.ts +81 -5
  44. package/dist/types/utils.d.ts +5 -0
  45. package/dist/types/version.d.ts +1 -1
  46. package/package.json +4 -1
  47. package/src/Widget.ts +324 -0
  48. package/src/WidgetModuleConfigurator.ts +48 -118
  49. package/src/WidgetModuleProvider.ts +110 -22
  50. package/src/enable-widget-module.ts +2 -2
  51. package/src/errors.ts +38 -4
  52. package/src/events.ts +75 -0
  53. package/src/index.ts +1 -5
  54. package/src/module.ts +8 -5
  55. package/src/state/actions.ts +70 -0
  56. package/src/state/create-reducer.ts +44 -0
  57. package/src/state/create-state.ts +21 -0
  58. package/src/state/flows.ts +75 -0
  59. package/src/types.ts +89 -9
  60. package/src/utils.ts +51 -0
  61. package/src/version.ts +1 -1
  62. package/tsconfig.json +1 -3
  63. package/dist/esm/WidgetModuleConfigBuilder.js +0 -42
  64. package/dist/esm/WidgetModuleConfigBuilder.js.map +0 -1
  65. package/dist/types/WidgetModuleConfigBuilder.d.ts +0 -19
  66. package/src/WidgetModuleConfigBuilder.ts +0 -70
@@ -0,0 +1,78 @@
1
+ import { ModuleType } from '@equinor/fusion-framework-module';
2
+ import { GetWidgetParameters, WidgetConfig, WidgetManifest, WidgetScriptModule, WidgetState, WidgetStateInitial } from './types';
3
+ import { EventModule } from '@equinor/fusion-framework-module-event';
4
+ import { Observable } from 'rxjs';
5
+ import WidgetModuleProvider from './WidgetModuleProvider';
6
+ import { WidgetModuleConfig } from './WidgetModuleConfigurator';
7
+ import './events';
8
+ export declare class Widget {
9
+ #private;
10
+ name: string;
11
+ config?: WidgetModuleConfig;
12
+ widgetPrams?: GetWidgetParameters['args'];
13
+ get state(): WidgetState;
14
+ /**
15
+ * Constructs a new Widget instance.
16
+ * @param value - Initial state of the widget.
17
+ * @param args - Configuration and event parameters for the widget.
18
+ */
19
+ constructor(value: WidgetStateInitial, args: {
20
+ provider: WidgetModuleProvider;
21
+ config?: WidgetModuleConfig;
22
+ event?: ModuleType<EventModule>;
23
+ widgetPrams?: GetWidgetParameters['args'];
24
+ });
25
+ /**
26
+ * Retrieves the manifest of the widget as an observable stream.
27
+ * @param force_refresh - Flag to force refresh the manifest.
28
+ * @returns An observable stream of the widget manifest.
29
+ */
30
+ getManifest(force_refresh?: boolean): Observable<WidgetManifest>;
31
+ /**
32
+ * Retrieves the configuration of the widget as an observable stream.
33
+ * @param force_refresh - Flag to force refresh the configuration.
34
+ * @returns An observable stream of the widget configuration.
35
+ */
36
+ getConfig(force_refresh?: boolean): Observable<WidgetConfig>;
37
+ /**
38
+ * Loads the configuration for the widget.
39
+ * @param update - Flag to force an update of the configuration.
40
+ */
41
+ loadConfig(update?: boolean): void;
42
+ /**
43
+ * Loads the manifest for the widget.
44
+ * @param update - Flag to force an update of the manifest.
45
+ */
46
+ loadManifest(update?: boolean): void;
47
+ /**
48
+ * Retrieves the widget module as an observable stream.
49
+ * @param force_refresh - Flag to force refresh the widget module.
50
+ * @returns An observable stream of the widget module.
51
+ */
52
+ getWidgetModule(force_refresh?: boolean): Observable<WidgetScriptModule>;
53
+ /**
54
+ * Initializes the widget and returns an observable stream with the combined results.
55
+ * @returns An observable stream with the manifest, script, and configuration.
56
+ */
57
+ initialize(): Observable<{
58
+ manifest: WidgetManifest;
59
+ script: WidgetScriptModule;
60
+ config?: WidgetConfig;
61
+ }>;
62
+ /**
63
+ * Retrieves the widget module asynchronously as a Promise.
64
+ * @param allow_cache - Flag to allow caching of the widget module.
65
+ * @returns A Promise containing the widget module.
66
+ */
67
+ getWidgetModuleAsync(allow_cache?: boolean): Promise<WidgetScriptModule>;
68
+ /**
69
+ * Updates the manifest of the widget.
70
+ * @param manifest - The new manifest for the widget.
71
+ * @param replace - Flag to replace the existing manifest.
72
+ */
73
+ updateManifest(manifest: WidgetManifest, replace?: false): void;
74
+ /**
75
+ * Disposes of the widget by unsubscribing from any active subscriptions.
76
+ */
77
+ dispose(): void;
78
+ }
@@ -1,29 +1,29 @@
1
- import { ModuleInitializerArgs } from '@equinor/fusion-framework-module';
2
- import { HttpModule, IHttpClient } from '@equinor/fusion-framework-module-http';
3
- import { ServiceDiscoveryModule } from '@equinor/fusion-framework-module-service-discovery';
4
- import { QueryCtorOptions } from '@equinor/fusion-query';
5
- import { WidgetModuleConfigBuilderCallback, WidgetEndpointBuilder } from './WidgetModuleConfigBuilder';
6
- import type { GetWidgetParameters, WidgetManifest } from './types';
7
- export interface WidgetModuleConfig {
8
- client: {
9
- getWidget: QueryCtorOptions<WidgetManifest, GetWidgetParameters>;
10
- };
11
- endpointBuilder: WidgetEndpointBuilder;
12
- }
13
- export interface IWidgetModuleConfigurator {
14
- addConfigBuilder: (init: WidgetModuleConfigBuilderCallback) => void;
15
- }
16
- export declare class WidgetModuleConfigurator implements IWidgetModuleConfigurator {
17
- #private;
1
+ import { BaseConfigBuilder, type ConfigBuilderCallback } from '@equinor/fusion-framework-module';
2
+ import { ConfigBuilderCallbackArgs } from '@equinor/fusion-framework-module';
3
+ import type { IClient } from './types';
4
+ export type WidgetModuleConfig = {
5
+ client: IClient;
6
+ };
7
+ export type WidgetModuleConfigBuilderCallback = (builder: WidgetModuleConfigurator) => void | Promise<void>;
8
+ export declare class WidgetModuleConfigurator extends BaseConfigBuilder<WidgetModuleConfig> {
18
9
  defaultExpireTime: number;
19
- addConfigBuilder(init: WidgetModuleConfigBuilderCallback): void;
20
- constructor(apiVersion?: string);
21
- protected _createHttpClient(init: ModuleInitializerArgs<IWidgetModuleConfigurator, [
22
- HttpModule,
23
- ServiceDiscoveryModule
24
- ]>): Promise<IHttpClient>;
25
- createConfig(init: ModuleInitializerArgs<IWidgetModuleConfigurator, [
26
- HttpModule,
27
- ServiceDiscoveryModule
28
- ]>): Promise<WidgetModuleConfig>;
10
+ /**
11
+ * Set the client for the WidgetModule configuration.
12
+ * @param cb - Callback function to configure the client.
13
+ */
14
+ setClient(cb: ConfigBuilderCallback<IClient>): void;
15
+ /**
16
+ * Create an HTTP client based on the provided parameters.
17
+ * @param clientId - Identifier for the client.
18
+ * @param init - Configuration builder callback arguments.
19
+ * @returns An instance of the HTTP client.
20
+ */
21
+ private _createHttpClient;
22
+ /**
23
+ * Process the WidgetModule configuration and create an HTTP client if needed.
24
+ * @param config - Partial configuration for the WidgetModule.
25
+ * @param _init - Configuration builder callback arguments.
26
+ * @returns The processed WidgetModule configuration.
27
+ */
28
+ protected _processConfig(config: Partial<WidgetModuleConfig>, _init: ConfigBuilderCallbackArgs): Promise<WidgetModuleConfig>;
29
29
  }
@@ -1,21 +1,60 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { ModuleType } from '@equinor/fusion-framework-module';
3
3
  import { EventModule } from '@equinor/fusion-framework-module-event';
4
- import type { GetWidgetParameters, WidgetManifest } from './types';
4
+ import type { GetWidgetParameters, WidgetConfig, WidgetManifest } from './types';
5
5
  import { WidgetModuleConfig } from './WidgetModuleConfigurator';
6
+ import { Widget } from './Widget';
6
7
  export interface IWidgetModuleProvider {
7
- getWidget(widgetKey: GetWidgetParameters['widgetKey'], args: GetWidgetParameters['args']): Observable<WidgetManifest>;
8
+ getWidget(widgetKey: GetWidgetParameters['widgetKey'], args?: GetWidgetParameters['args']): Widget;
9
+ getWidgetManifest(widgetKey: GetWidgetParameters['widgetKey'], args?: GetWidgetParameters['args']): Observable<WidgetManifest>;
10
+ getWidgetConfig(widgetKey: GetWidgetParameters['widgetKey'], args?: GetWidgetParameters['args']): Observable<WidgetConfig>;
8
11
  }
12
+ /**
13
+ * The `WidgetModuleProvider` class implements the `IWidgetModuleProvider` interface and serves as a provider for managing widgets.
14
+ */
9
15
  export declare class WidgetModuleProvider implements IWidgetModuleProvider {
10
16
  #private;
17
+ /**
18
+ * Constructs a new `WidgetModuleProvider` instance.
19
+ * @param args - An object containing configuration and optional event module for the widget provider.
20
+ */
11
21
  constructor(args: {
12
22
  config: WidgetModuleConfig;
13
23
  event?: ModuleType<EventModule>;
14
24
  });
15
- getWidget(name: string): Observable<WidgetManifest>;
16
- getWidgetByVersion(name: string, version: string): Observable<WidgetManifest>;
17
- getWidgetByTag(name: string, tag: string): Observable<WidgetManifest>;
25
+ /**
26
+ * Retrieves a widget instance based on the provided name and optional parameters.
27
+ * @param name - The name of the widget.
28
+ * @param widgetParams - Optional parameters for the widget.
29
+ * @returns A new `Widget` instance.
30
+ */
31
+ getWidget(name: string, widgetPrams?: GetWidgetParameters['args']): Widget;
32
+ /**
33
+ * Retrieves the manifest of a widget as an observable stream.
34
+ * @param name - The name of the widget.
35
+ * @param widgetParams - Optional parameters for the widget.
36
+ * @returns An observable stream of the widget manifest.
37
+ */
38
+ getWidgetManifest(name: string, widgetPrams?: GetWidgetParameters['args']): Observable<WidgetManifest>;
39
+ /**
40
+ * Retrieves the config of a widget as an observable stream.
41
+ * @param name - The name of the widget.
42
+ * @param widgetParams - Optional parameters for the widget.
43
+ * @returns An observable stream of the widget config.
44
+ */
45
+ getWidgetConfig(name: string, widgetPrams?: GetWidgetParameters['args']): Observable<WidgetConfig>;
46
+ protected _getWidgetConfig(widgetKey: GetWidgetParameters['widgetKey'], args?: GetWidgetParameters['args']): Observable<WidgetConfig>;
47
+ /**
48
+ * Fetches the configuration for a widget using a query.
49
+ * @param widgetKey - The key identifying the widget.
50
+ * @param args - Optional arguments for the widget.
51
+ * @returns An observable stream of the widget manifest.
52
+ * @protected
53
+ */
18
54
  protected _getWidget(widgetKey: GetWidgetParameters['widgetKey'], args?: GetWidgetParameters['args']): Observable<WidgetManifest>;
55
+ /**
56
+ * Disposes of the widget provider by unsubscribing from any active subscriptions.
57
+ */
19
58
  dispose(): void;
20
59
  }
21
60
  export default WidgetModuleProvider;
@@ -1,3 +1,7 @@
1
1
  import type { IModulesConfigurator } from '@equinor/fusion-framework-module';
2
- import type { WidgetModuleConfigBuilderCallback } from './WidgetModuleConfigBuilder';
2
+ import { WidgetModuleConfigBuilderCallback } from './WidgetModuleConfigurator';
3
+ /**
4
+ * Method for enabling the widget module
5
+ * @param configurator - configuration object
6
+ */
3
7
  export declare const enableWidgetModule: (configurator: IModulesConfigurator<any, any>, builder?: WidgetModuleConfigBuilderCallback) => void;
@@ -1,7 +1,12 @@
1
1
  type WidgetErrorType = 'not_found' | 'unauthorized' | 'unknown';
2
- export declare class GetWidgetError extends Error {
2
+ export declare class WidgetManifestLoadError extends Error {
3
3
  readonly type: WidgetErrorType;
4
- static fromHttpResponse(response: Response, options?: ErrorOptions): GetWidgetError;
4
+ static fromHttpResponse(response: Response, options?: ErrorOptions): WidgetManifestLoadError;
5
+ constructor(type: WidgetErrorType, message?: string, options?: ErrorOptions);
6
+ }
7
+ export declare class WidgetConfigLoadError extends Error {
8
+ readonly type: WidgetErrorType;
9
+ static fromHttpResponse(response: Response, options?: ErrorOptions): WidgetConfigLoadError;
5
10
  constructor(type: WidgetErrorType, message?: string, options?: ErrorOptions);
6
11
  }
7
12
  export declare class WidgetScriptModuleError extends Error {
@@ -0,0 +1,54 @@
1
+ import type { FrameworkEvent, FrameworkEventInit } from '@equinor/fusion-framework-module-event';
2
+ import type { Widget } from './Widget';
3
+ import type { WidgetConfig, WidgetManifest, WidgetModulesInstance, WidgetScriptModule } from './types';
4
+ /** base event type for applications */
5
+ export type WidgetEventInit<TDetail extends Record<string, unknown> | unknown = unknown> = FrameworkEventInit<
6
+ /** additional event details and key of target event */
7
+ TDetail & {
8
+ name: string;
9
+ },
10
+ /** source of the event */
11
+ Widget>;
12
+ export type WidgetEvent<TDetail extends Record<string, unknown> | unknown = unknown> = FrameworkEvent<WidgetEventInit<TDetail>>;
13
+ export type WidgetEventFailure = FrameworkEvent<WidgetEventInit<{
14
+ error: WidgetConfig;
15
+ }>>;
16
+ declare module '@equinor/fusion-framework-module-event' {
17
+ interface FrameworkEventMap {
18
+ /** fired when the application has initiated its modules */
19
+ onWidgetModulesLoaded: WidgetEvent<{
20
+ /** initiated modules for application */
21
+ modules: WidgetModulesInstance;
22
+ }>;
23
+ onWidgetManifestLoad: WidgetEvent;
24
+ /** fired when the application has loaded corresponding manifest */
25
+ onWidgetManifestLoaded: WidgetEvent<{
26
+ manifest: WidgetManifest;
27
+ }>;
28
+ onWidgetManifestFailure: WidgetEventFailure;
29
+ onWidgetConfigLoad: WidgetEvent;
30
+ /** fired when the application has loaded corresponding config */
31
+ onWidgetConfigLoaded: WidgetEvent<{
32
+ config: WidgetConfig;
33
+ }>;
34
+ onWidgetConfigFailure: WidgetEventFailure;
35
+ /** fired when the application has loaded corresponding javascript module */
36
+ onAWidgetScriptLoad: WidgetEvent;
37
+ onWidgetScriptLoaded: WidgetEvent<{
38
+ script: WidgetScriptModule;
39
+ }>;
40
+ onWidgetScriptFailure: WidgetEventFailure;
41
+ /** fired before application loads manifest, config and script */
42
+ onWidgetInitialize: WidgetEvent;
43
+ /**
44
+ * fired after application has loaded manifest, config and script
45
+ *
46
+ * __note:__ not fired until all loaders has settled (last emit)
47
+ */
48
+ onWidgetInitialized: WidgetEvent;
49
+ /** fired when application fails to load either manifest, config and script */
50
+ onWidgetInitializeFailure: WidgetEventFailure;
51
+ /** fired when the application is disposed (unmounts) */
52
+ onWidgetDispose: FrameworkEvent<WidgetEventInit>;
53
+ }
54
+ }
@@ -1,4 +1,4 @@
1
- export { WidgetModuleConfigurator, IWidgetModuleConfigurator, WidgetModuleConfig, } from './WidgetModuleConfigurator';
1
+ export { WidgetModuleConfigurator, WidgetModuleConfig } from './WidgetModuleConfigurator';
2
2
  export { WidgetModuleProvider } from './WidgetModuleProvider';
3
3
  export type { IWidgetModuleProvider } from './WidgetModuleProvider';
4
4
  export * from './types';
@@ -1,13 +1,13 @@
1
1
  import { Module } from '@equinor/fusion-framework-module';
2
2
  import { ModuleDeps } from './types';
3
- import { IWidgetModuleConfigurator } from './WidgetModuleConfigurator';
3
+ import { WidgetModuleConfigurator } from './WidgetModuleConfigurator';
4
4
  import { IWidgetModuleProvider } from './WidgetModuleProvider';
5
5
  export declare const moduleKey = "widget";
6
- export type WidgetModule = Module<typeof moduleKey, IWidgetModuleProvider, IWidgetModuleConfigurator, ModuleDeps>;
6
+ export type WidgetModule = Module<typeof moduleKey, IWidgetModuleProvider, WidgetModuleConfigurator, ModuleDeps>;
7
7
  export declare const module: WidgetModule;
8
8
  export default module;
9
9
  declare module '@equinor/fusion-framework-module' {
10
10
  interface Modules {
11
- widget: WidgetModule;
11
+ [moduleKey]: WidgetModule;
12
12
  }
13
13
  }
@@ -0,0 +1,92 @@
1
+ import { ActionInstanceMap, ActionTypes } from '@equinor/fusion-observable';
2
+ import { GetWidgetParameters, WidgetConfig, WidgetManifest, WidgetModulesInstance, WidgetScriptModule } from '../types';
3
+ declare const createActions: () => {
4
+ /** Manifest loading */
5
+ setManifest: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[manifest: WidgetManifest, update?: boolean | undefined], WidgetManifest, "set_manifest", never, {
6
+ created: number;
7
+ update: boolean | undefined;
8
+ }>;
9
+ fetchManifest: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[payload: {
10
+ key: string;
11
+ args?: GetWidgetParameters['args'];
12
+ }, update?: boolean | undefined], {
13
+ key: string;
14
+ args?: GetWidgetParameters['args'];
15
+ }, "fetch_manifest::request", never, {
16
+ update: boolean | undefined;
17
+ }> & {
18
+ success: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[manifest: WidgetManifest], WidgetManifest, "fetch_manifest::success", never, never>;
19
+ failure: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[error: unknown], unknown, "fetch_manifest::failure", never, never>;
20
+ };
21
+ /** Config loading */
22
+ setConfig: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[config: WidgetConfig], WidgetConfig, "set_config", never, never>;
23
+ fetchConfig: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[payload: {
24
+ key: string;
25
+ args?: GetWidgetParameters['args'];
26
+ }, update?: boolean | undefined], {
27
+ key: string;
28
+ args?: GetWidgetParameters['args'];
29
+ }, "fetch_config::request", never, {
30
+ update: boolean | undefined;
31
+ }> & {
32
+ success: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[config: WidgetConfig], WidgetConfig, "fetch_config::success", never, never>;
33
+ failure: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[error: unknown], unknown, "fetch_config::failure", never, never>;
34
+ };
35
+ setModule: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[module: any], any, "set_module", never, never>;
36
+ importWidget: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[entrypoint: string], string, "import_widget::request", never, never> & {
37
+ success: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[module: WidgetScriptModule], WidgetScriptModule, "import_widget::success", never, never>;
38
+ failure: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[error: unknown], unknown, "import_widget::failure", never, never>;
39
+ };
40
+ setInstance: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[instance: WidgetModulesInstance], WidgetModulesInstance, "set_instance", never, never>;
41
+ initialize: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[], null, "initialize_widget::request", never, never> & {
42
+ success: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[], null, "initialize_widget::success", never, never>;
43
+ failure: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[error: unknown], unknown, "initialize_widget::failure", never, never>;
44
+ };
45
+ };
46
+ export declare const actions: {
47
+ /** Manifest loading */
48
+ setManifest: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[manifest: WidgetManifest, update?: boolean | undefined], WidgetManifest, "set_manifest", never, {
49
+ created: number;
50
+ update: boolean | undefined;
51
+ }>;
52
+ fetchManifest: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[payload: {
53
+ key: string;
54
+ args?: GetWidgetParameters['args'];
55
+ }, update?: boolean | undefined], {
56
+ key: string;
57
+ args?: GetWidgetParameters['args'];
58
+ }, "fetch_manifest::request", never, {
59
+ update: boolean | undefined;
60
+ }> & {
61
+ success: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[manifest: WidgetManifest], WidgetManifest, "fetch_manifest::success", never, never>;
62
+ failure: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[error: unknown], unknown, "fetch_manifest::failure", never, never>;
63
+ };
64
+ /** Config loading */
65
+ setConfig: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[config: WidgetConfig], WidgetConfig, "set_config", never, never>;
66
+ fetchConfig: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[payload: {
67
+ key: string;
68
+ args?: GetWidgetParameters['args'];
69
+ }, update?: boolean | undefined], {
70
+ key: string;
71
+ args?: GetWidgetParameters['args'];
72
+ }, "fetch_config::request", never, {
73
+ update: boolean | undefined;
74
+ }> & {
75
+ success: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[config: WidgetConfig], WidgetConfig, "fetch_config::success", never, never>;
76
+ failure: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[error: unknown], unknown, "fetch_config::failure", never, never>;
77
+ };
78
+ setModule: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[module: any], any, "set_module", never, never>;
79
+ importWidget: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[entrypoint: string], string, "import_widget::request", never, never> & {
80
+ success: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[module: WidgetScriptModule], WidgetScriptModule, "import_widget::success", never, never>;
81
+ failure: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[error: unknown], unknown, "import_widget::failure", never, never>;
82
+ };
83
+ setInstance: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[instance: WidgetModulesInstance], WidgetModulesInstance, "set_instance", never, never>;
84
+ initialize: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[], null, "initialize_widget::request", never, never> & {
85
+ success: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[], null, "initialize_widget::success", never, never>;
86
+ failure: import("@equinor/fusion-observable").ActionCreatorWithPreparedPayload<[error: unknown], unknown, "initialize_widget::failure", never, never>;
87
+ };
88
+ };
89
+ export type ActionBuilder = ReturnType<typeof createActions>;
90
+ export type ActionMap = ActionInstanceMap<ActionBuilder>;
91
+ export type Actions = ActionTypes<typeof actions>;
92
+ export {};
@@ -0,0 +1,3 @@
1
+ import { WidgetStateInitial, WidgetState } from '../types';
2
+ export declare const createReducer: (value: WidgetStateInitial) => import("@equinor/fusion-observable").ReducerWithInitialState<WidgetState, import("@equinor/fusion-observable").AnyAction>;
3
+ export default createReducer;
@@ -0,0 +1,5 @@
1
+ import { FlowSubject } from '@equinor/fusion-observable';
2
+ import type { Actions } from './actions';
3
+ import { WidgetState, WidgetStateInitial } from '../types';
4
+ import WidgetModuleProvider from '../WidgetModuleProvider';
5
+ export declare const createState: (value: WidgetStateInitial, provider: WidgetModuleProvider) => FlowSubject<WidgetState, Actions>;
@@ -0,0 +1,7 @@
1
+ import type { Flow } from '@equinor/fusion-observable';
2
+ import type { Actions } from './actions';
3
+ import { WidgetState } from '../types';
4
+ import type WidgetModuleProvider from '../WidgetModuleProvider';
5
+ export declare const handleFetchManifest: (provider: WidgetModuleProvider) => Flow<Actions, WidgetState>;
6
+ export declare const handleFetchConfig: (provider: WidgetModuleProvider) => Flow<Actions, WidgetState>;
7
+ export declare const handleImportWidget: () => Flow<Actions, WidgetState>;
@@ -2,11 +2,32 @@ import type { AnyModule, CombinedModules, ModulesInstance } from '@equinor/fusio
2
2
  import type { EventModule } from '@equinor/fusion-framework-module-event';
3
3
  import type { HttpModule } from '@equinor/fusion-framework-module-http';
4
4
  import type { ServiceDiscoveryModule } from '@equinor/fusion-framework-module-service-discovery';
5
+ import { QueryCtorOptions } from '@equinor/fusion-query';
5
6
  type Fusion = any;
6
- export type WidgetEnv = {
7
- config?: WidgetManifest;
7
+ /**
8
+ * WidgetEnv type represents the environment configuration for a widget.
9
+ */
10
+ export type WidgetEnv<TProps = unknown> = {
11
+ basename?: string;
12
+ manifest?: WidgetManifest;
13
+ props?: TProps;
8
14
  };
15
+ /**
16
+ * IClient interface represents a client with properties and methods for widget-related operations.
17
+ */
18
+ export type IClient = {
19
+ apiVersion: string;
20
+ baseImportUrl: string;
21
+ getWidgetManifest: QueryCtorOptions<WidgetManifest, GetWidgetParameters>;
22
+ getWidgetConfig: QueryCtorOptions<WidgetConfig, GetWidgetParameters>;
23
+ };
24
+ /**
25
+ * ModuleDeps type represents a tuple of dependencies required for a module.
26
+ */
9
27
  export type ModuleDeps = [HttpModule, ServiceDiscoveryModule, EventModule];
28
+ /**
29
+ * GetWidgetParameters type represents parameters for retrieving widget information.
30
+ */
10
31
  export type GetWidgetParameters = {
11
32
  widgetKey: string;
12
33
  args?: {
@@ -14,6 +35,13 @@ export type GetWidgetParameters = {
14
35
  value: string;
15
36
  };
16
37
  };
38
+ /**
39
+ * WidgetEndpointBuilder type represents a function for building widget endpoints based on GetWidgetParameters.
40
+ */
41
+ export type WidgetEndpointBuilder = (args: GetWidgetParameters) => string;
42
+ /**
43
+ * WidgetManifest type represents the manifest information of a widget.
44
+ */
17
45
  export type WidgetManifest = {
18
46
  id: string;
19
47
  name: string;
@@ -22,19 +50,67 @@ export type WidgetManifest = {
22
50
  maintainers?: string[];
23
51
  entryPoint: string;
24
52
  assetPath: string;
25
- importBundle: () => Promise<WidgetScriptModule>;
26
53
  };
54
+ /**
55
+ * Endpoint type represents an endpoint with properties like name, uri, and optional scopes.
56
+ */
57
+ export type Endpoint = {
58
+ name: string;
59
+ uri: string;
60
+ scopes?: string[];
61
+ };
62
+ /**
63
+ * WidgetConfig type represents the configuration for a widget, including environment and endpoints.
64
+ */
65
+ export type WidgetConfig<TEnvironment = unknown> = {
66
+ environment: TEnvironment;
67
+ endpoints: Record<string, string | Endpoint>;
68
+ };
69
+ /**
70
+ * WidgetModules type represents a combination of modules related to events and service discovery.
71
+ */
27
72
  export type WidgetModules<TModules extends Array<AnyModule> | unknown = unknown> = CombinedModules<TModules, [
28
73
  EventModule,
29
74
  ServiceDiscoveryModule
30
75
  ]>;
31
- export type WidgetRenderArgs<TFusion extends Fusion = Fusion, TEnv = WidgetEnv> = {
76
+ /**
77
+ * WidgetProps type represents widget properties as a record of PropertyKey to unknown.
78
+ */
79
+ export type WidgetProps = Record<PropertyKey, unknown>;
80
+ /**
81
+ * WidgetRenderArgs type represents arguments for rendering a widget, including fusion, environment, and optional properties.
82
+ */
83
+ export type WidgetRenderArgs<TFusion extends Fusion = Fusion, TEnv = WidgetEnv, TProps extends WidgetProps = WidgetProps> = {
32
84
  fusion: TFusion;
33
85
  env: TEnv;
86
+ props?: TProps;
34
87
  };
35
- export type WidgetScriptModule<TProps extends Record<PropertyKey, unknown> = Record<PropertyKey, unknown>> = {
88
+ /**
89
+ * WidgetScriptModule type represents a script module for a widget with functions for rendering, rendering icons, etc.
90
+ */
91
+ export type WidgetScriptModule<TProps extends WidgetProps = WidgetProps> = {
36
92
  default: (el: HTMLElement, args: WidgetRenderArgs, props?: TProps) => VoidFunction;
37
93
  renderWidget: (el: HTMLElement, args: WidgetRenderArgs, props?: TProps) => VoidFunction;
94
+ renderIcon: (el: HTMLElement, args: WidgetRenderArgs, props?: TProps) => VoidFunction;
95
+ render: (el: HTMLElement, args: WidgetRenderArgs, props?: TProps) => VoidFunction;
38
96
  };
97
+ /**
98
+ * WidgetModulesInstance type represents an instance of widget modules.
99
+ */
39
100
  export type WidgetModulesInstance<TModules extends Array<AnyModule> | unknown = unknown> = ModulesInstance<WidgetModules<TModules>>;
101
+ /**
102
+ * WidgetState type represents the state of a widget, including properties like name, status, config, manifest, modules, and instance.
103
+ */
104
+ export type WidgetState<TModules = any> = {
105
+ name: string;
106
+ status: Set<string>;
107
+ config?: WidgetConfig;
108
+ manifest?: WidgetManifest;
109
+ modules?: WidgetScriptModule;
110
+ instance?: WidgetModulesInstance<TModules>;
111
+ };
112
+ /**
113
+ * WidgetStateInitial type represents an initial state of a widget, omitting the status property.
114
+ */
115
+ export type WidgetStateInitial = Omit<WidgetState, 'status'>;
40
116
  export {};
@@ -0,0 +1,5 @@
1
+ import { IClient, WidgetEndpointBuilder } from './types';
2
+ import { IHttpClient } from '@equinor/fusion-framework-module-http';
3
+ export declare const defaultManifestEndpointBuilder: (apiVersion: string) => WidgetEndpointBuilder;
4
+ export declare const defaultConfigEndpointBuilder: (apiVersion: string) => WidgetEndpointBuilder;
5
+ export declare const createDefaultClient: (httpClient: IHttpClient) => IClient;
@@ -1 +1 @@
1
- export declare const version = "2.0.10";
1
+ export declare const version = "3.0.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/fusion-framework-module-widget",
3
- "version": "2.0.10",
3
+ "version": "3.0.0",
4
4
  "description": "",
5
5
  "main": "dist/esm/index.js",
6
6
  "exports": {
@@ -33,12 +33,15 @@
33
33
  "directory": "packages/modules/widget"
34
34
  },
35
35
  "dependencies": {
36
+ "immer": "^9.0.16",
36
37
  "rxjs": "^7.8.1",
38
+ "@equinor/fusion-observable": "^8.1.5",
37
39
  "@equinor/fusion-query": "^4.0.6"
38
40
  },
39
41
  "devDependencies": {
40
42
  "typescript": "^5.1.3",
41
43
  "@equinor/fusion-framework-module": "^4.2.7",
44
+ "@equinor/fusion-query": "^4.0.6",
42
45
  "@equinor/fusion-framework-module-event": "^4.0.8",
43
46
  "@equinor/fusion-framework-module-http": "^5.1.6",
44
47
  "@equinor/fusion-framework-module-service-discovery": "^7.0.20"