@equinor/fusion-framework-cli 10.6.1 → 10.7.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/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # Change Log
2
2
 
3
+ ## 10.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2930](https://github.com/equinor/fusion-framework/pull/2930) [`5da6b2d`](https://github.com/equinor/fusion-framework/commit/5da6b2d4cb7fb93ff3784753a0052d3362ab828d) Thanks [@odinr](https://github.com/odinr)! - **@equinor/fusion-framework-react:**
8
+
9
+ - Enhanced `useAppContextNavigation` to support custom context path extraction and generation. This allows for more flexible navigation handling based on application-specific requirements.
10
+
11
+ **@equinor/fusion-framework-module-context:**
12
+
13
+ - Added support for custom context path extraction and generation in `ContextConfigBuilder`, `ContextProvider`, and `ContextModuleConfigurator`.
14
+ - Introduced `setContextPathExtractor` and `setContextPathGenerator` methods in `ContextConfigBuilder` to allow developers to define custom logic for extracting and generating context paths.
15
+ - Updated `ContextProvider` to utilize `extractContextIdFromPath` and `generatePathFromContext` from the configuration, enabling dynamic path handling.
16
+ - Enhanced `ContextModuleConfigurator` to include `extractContextIdFromPath` and `generatePathFromContext` in the module configuration.
17
+
18
+ If you are using `@equinor/fusion-framework-module-context` and need custom logic for context path handling:
19
+
20
+ 1. Use `setContextPathExtractor` to define how to extract context IDs from paths.
21
+ 2. Use `setContextPathGenerator` to define how to generate paths based on context items.
22
+
23
+ Example:
24
+
25
+ ```typescript
26
+ builder.setContextPathExtractor((path) => {
27
+ // Custom logic to extract context ID from path
28
+ return path.match(/\/custom\/(.+)/)?.[1];
29
+ });
30
+
31
+ builder.setContextPathGenerator((context, path) => {
32
+ // Custom logic to generate path from context
33
+ return path.replace(/^(\/)?custom\/[^/]+(.*)$/, `/app/${item.id}$2`);
34
+ });
35
+ ```
36
+
37
+ If your portal is generating context paths based on context items, you can now define custom logic for context path handling:
38
+
39
+ ```typescript
40
+ contextProvider.currentContext$
41
+ .pipe(
42
+ map((context) => {
43
+ // Custom logic to generate path from context
44
+ const path = contextProvider.generatePathFromContext?.(
45
+ context,
46
+ location.pathname
47
+ );
48
+ return path ?? fallbackPathGenerator(context, location.pathname);
49
+ }),
50
+ filter(Boolean)
51
+ )
52
+ .subscribe((path) => history.push(path));
53
+ ```
54
+
3
55
  ## 10.6.1
4
56
 
5
57
  ### Patch Changes
@@ -4,6 +4,19 @@ import { extractContextIdFromPath } from '@equinor/fusion-framework-module-conte
4
4
  import { useObservableSubscription } from '@equinor/fusion-observable/react';
5
5
  import { EMPTY } from 'rxjs';
6
6
  import { useFrameworkModule } from '@equinor/fusion-framework-react';
7
+ const generatePathname = (currentPathname, item, context, pathContextId) => {
8
+ var _a, _b, _c, _d;
9
+ if (pathContextId) {
10
+ // context id exists in the url, replace it with the new context id
11
+ const pathname = (_b = (_a = context === null || context === void 0 ? void 0 : context.generatePathFromContext) === null || _a === void 0 ? void 0 : _a.call(context, item, currentPathname)) !== null && _b !== void 0 ? _b : currentPathname.replace(pathContextId, item.id);
12
+ console.debug(`🌍 Portal: context changed, navigating to app's context url:`, `found context id [${pathContextId}] in url, replacing with [${pathname}]`);
13
+ return pathname;
14
+ }
15
+ // could not find context id in the url, set the path to the new context id
16
+ const pathname = (_d = (_c = context === null || context === void 0 ? void 0 : context.generatePathFromContext) === null || _c === void 0 ? void 0 : _c.call(context, item, currentPathname)) !== null && _d !== void 0 ? _d : `/${item === null || item === void 0 ? void 0 : item.id}`;
17
+ console.debug(`🌍 Portal: context changed, navigating to app's context url:`, `could not find context id in url, navigating to path [${pathname}]`);
18
+ return pathname;
19
+ };
7
20
  /**
8
21
  * when current application changes, this hook will observe the application module instances.
9
22
  * If the module has Context and Navigation, this hook will navigate when the context changes
@@ -22,6 +35,7 @@ export const useAppContextNavigation = () => {
22
35
  (_a = context === null || context === void 0 ? void 0 : context.currentContext$) !== null && _a !== void 0 ? _a : EMPTY,
23
36
  // when the context changes, navigate to the new context
24
37
  useCallback((item) => {
38
+ var _a, _b;
25
39
  // sanity check, if the item or navigation is undefined, early return
26
40
  if (item === undefined || navigation === undefined) {
27
41
  return;
@@ -46,20 +60,11 @@ export const useAppContextNavigation = () => {
46
60
  }
47
61
  return;
48
62
  }
49
- // extract the context id from the current path
50
- const pathContextId = extractContextIdFromPath(currentPathname);
51
- // generate path to the selected context
52
- const pathname = pathContextId
53
- ? item
54
- ? // context id exists in the url, replace it with the new context id
55
- currentPathname.replace(pathContextId, item.id)
56
- : // context was cleared, set the path to the root
57
- '/'
58
- : // could not find context id in the url, set the path to the new context id
59
- `/${item === null || item === void 0 ? void 0 : item.id}`;
60
- console.debug('🌍 Portal:', "context changed, navigating to app's context url:", pathContextId
61
- ? `found context id [${pathContextId}] in url, ${item ? `replacing with [${item.id}]` : 'context was cleared, navigating to root'}`
62
- : `could not find context id in url, navigating to context id [${item ? item.id : 'root'}]`);
63
+ if (item === undefined) {
64
+ // no-op
65
+ return;
66
+ }
67
+ const pathname = generatePathname(currentPathname, item, context, (_b = (_a = context === null || context === void 0 ? void 0 : context.extractContextIdFromPath) === null || _a === void 0 ? void 0 : _a.call(context, currentPathname)) !== null && _b !== void 0 ? _b : extractContextIdFromPath(currentPathname));
63
68
  // if app has its own navigation, use it to navigate
64
69
  if (appNavigation) {
65
70
  // update the path of the app navigation, preserving search and hash
@@ -74,6 +79,7 @@ export const useAppContextNavigation = () => {
74
79
  navigation,
75
80
  // application navigation instance, may change when the application changes
76
81
  appNavigation,
82
+ context,
77
83
  ]));
78
84
  };
79
85
  //# sourceMappingURL=useAppContextNavigation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAppContextNavigation.js","sourceRoot":"","sources":["../../../src/bin/dev-portal/useAppContextNavigation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAppContextNavigation.js","sourceRoot":"","sources":["../../../src/bin/dev-portal/useAppContextNavigation.ts"],"names":[],"mappings":"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"}