@equinor/fusion-framework-react 5.3.8 → 5.3.9

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.
@@ -0,0 +1 @@
1
+ export { useCurrentAppFeatureFlag, useCurrentAppFeatureFlags, useFrameworkFeatureFlag, useFrameworkFeatureFlags, } from './useFeatureFlags';
@@ -0,0 +1,21 @@
1
+ import { IFeatureFlag } from '@equinor/fusion-framework-module-feature-flag';
2
+ export declare const useCurrentAppFeatureFlag: (key: string) => {
3
+ feature: IFeatureFlag<unknown> | undefined;
4
+ error: unknown;
5
+ setFeatureEnabled: (key: string, enabled: boolean) => void;
6
+ };
7
+ export declare const useCurrentAppFeatureFlags: () => {
8
+ features: IFeatureFlag<unknown>[] | undefined;
9
+ error: unknown;
10
+ setFeatureEnabled: (key: string, enabled: boolean) => void;
11
+ };
12
+ export declare const useFrameworkFeatureFlag: (key: string) => {
13
+ feature: IFeatureFlag<unknown> | undefined;
14
+ error: unknown;
15
+ setFeatureEnabled: (key: string, enabled: boolean) => void;
16
+ };
17
+ export declare const useFrameworkFeatureFlags: () => {
18
+ features: IFeatureFlag<unknown>[] | undefined;
19
+ error: unknown;
20
+ setFeatureEnabled: (key: string, enabled: boolean) => void;
21
+ };
@@ -1 +1 @@
1
- export declare const version = "5.3.8";
1
+ export declare const version = "5.3.9";
package/package.json CHANGED
@@ -1,33 +1,16 @@
1
1
  {
2
2
  "name": "@equinor/fusion-framework-react",
3
- "version": "5.3.8",
3
+ "version": "5.3.9",
4
4
  "description": "",
5
5
  "main": "dist/esm/index.js",
6
6
  "exports": {
7
- ".": {
8
- "import": "./dist/esm/index.js",
9
- "types": "./dist/types/index.d.ts"
10
- },
11
- "./app": {
12
- "import": "./dist/esm/app/index.js",
13
- "types": "./dist/types/app/index.d.ts"
14
- },
15
- "./context": {
16
- "import": "./dist/esm/context/index.js",
17
- "types": "./dist/types/context/index.d.ts"
18
- },
19
- "./hooks": {
20
- "import": "./dist/esm/hooks/index.js",
21
- "types": "./dist/types/hooks/index.d.ts"
22
- },
23
- "./http": {
24
- "import": "./dist/esm/http/index.js",
25
- "types": "./dist/types/http/index.d.ts"
26
- },
27
- "./signalr": {
28
- "import": "./dist/esm/signalr/index.js",
29
- "types": "./dist/types/signalr/index.d.ts"
30
- }
7
+ ".": "./dist/esm/index.js",
8
+ "./app": "./dist/esm/app/index.js",
9
+ "./feature-flag": "./dist/esm/feature-flag/index.js",
10
+ "./context": "./dist/esm/context/index.js",
11
+ "./hooks": "./dist/esm/hooks/index.js",
12
+ "./http": "./dist/esm/http/index.js",
13
+ "./signalr": "./dist/esm/signalr/index.js"
31
14
  },
32
15
  "types": "dist/types/index.d.ts",
33
16
  "typesVersions": {
@@ -35,6 +18,9 @@
35
18
  "app": [
36
19
  "dist/types/app/index.d.ts"
37
20
  ],
21
+ "feature-flag": [
22
+ "dist/types/feature-flag/index.d.ts"
23
+ ],
38
24
  "context": [
39
25
  "dist/types/context/index.d.ts"
40
26
  ],
@@ -62,11 +48,11 @@
62
48
  },
63
49
  "dependencies": {
64
50
  "rxjs": "^7.8.1",
65
- "@equinor/fusion-framework-module": "^4.2.6",
66
- "@equinor/fusion-framework-react-module-http": "^4.0.5",
67
- "@equinor/fusion-framework-react-module": "^3.0.7",
68
51
  "@equinor/fusion-framework": "^7.0.28",
69
- "@equinor/fusion-observable": "^8.1.4"
52
+ "@equinor/fusion-framework-react-module": "^3.0.7",
53
+ "@equinor/fusion-framework-react-module-http": "^4.0.5",
54
+ "@equinor/fusion-observable": "^8.1.4",
55
+ "@equinor/fusion-framework-module": "^4.2.6"
70
56
  },
71
57
  "devDependencies": {
72
58
  "@types/react": "^18.2.20",
@@ -75,12 +61,14 @@
75
61
  "react-dom": "^18.2.0",
76
62
  "typescript": "^5.1.3",
77
63
  "@equinor/fusion-framework-module-app": "^5.2.12",
78
- "@equinor/fusion-framework-react-module-context": "^6.0.18"
64
+ "@equinor/fusion-framework-react-module-context": "^6.0.18",
65
+ "@equinor/fusion-framework-module-feature-flag": "^0.0.1"
79
66
  },
80
67
  "peerDependencies": {
81
- "@types/react": "^17.0.0 || ^18.0.0",
82
- "react": "^17.0.0 || ^18.0.0",
83
- "react-dom": "^17.0.0 || ^18.0.0",
68
+ "@types/react": "^17.0.0 || ^18.0.0",
69
+ "react": "^17.0.0 || ^18.0.0",
70
+ "react-dom": "^17.0.0 || ^18.0.0",
71
+ "@equinor/fusion-framework-module-feature-flag": "^0.0.1",
84
72
  "@equinor/fusion-framework-react-module-signalr": "^2.0.16"
85
73
  },
86
74
  "peerDependenciesMeta": {
@@ -90,6 +78,9 @@
90
78
  "@equinor/fusion-framework-react-module-signalr": {
91
79
  "optional": true
92
80
  },
81
+ "@equinor/fusion-framework-module-feature-flag": {
82
+ "optional": true
83
+ },
93
84
  "@types/react": {
94
85
  "optional": true
95
86
  },
@@ -0,0 +1,6 @@
1
+ export {
2
+ useCurrentAppFeatureFlag,
3
+ useCurrentAppFeatureFlags,
4
+ useFrameworkFeatureFlag,
5
+ useFrameworkFeatureFlags,
6
+ } from './useFeatureFlags';
@@ -0,0 +1,113 @@
1
+ import { useCallback, useMemo } from 'react';
2
+ import { useObservableState } from '@equinor/fusion-observable/react';
3
+ import {
4
+ FeatureFlagModule,
5
+ IFeatureFlagProvider,
6
+ IFeatureFlag,
7
+ } from '@equinor/fusion-framework-module-feature-flag';
8
+
9
+ import { useCurrentAppModules } from '../app/useCurrentAppModules';
10
+ import { EMPTY, map } from 'rxjs';
11
+ import { useFramework } from '../useFramework';
12
+
13
+ /**
14
+ * useCurrentAppFeatureFlag.
15
+ *
16
+ * Hook for getting current app's featureFlag from framework/portal.
17
+ *
18
+ * if in an app setting use hook "useFeatureFlag" from \@equinor/fusion-framework-react-app/feature-flag package.
19
+ */
20
+ export const useCurrentAppFeatureFlag = (
21
+ key: string,
22
+ ): {
23
+ feature: IFeatureFlag<unknown> | undefined;
24
+ error: unknown;
25
+ setFeatureEnabled: (key: string, enabled: boolean) => void;
26
+ } => {
27
+ const provider$ = useCurrentAppModules<[FeatureFlagModule]>().modules$.pipe(
28
+ map((val) => val?.featureFlag),
29
+ );
30
+ const { value: provider } = useObservableState(provider$);
31
+ const { value: feature, error } = useObservableState(_useFeatureFlag(key, provider));
32
+ const setFeatureEnabled = _useSetFeatureflag(provider);
33
+ return { feature, error, setFeatureEnabled };
34
+ };
35
+
36
+ /**
37
+ * useCurrentAppFeatureFlags.
38
+ *
39
+ * Hook for getting current app's featureFlags from framework/portal.
40
+ *
41
+ * if in an app setting use hook "useFeatureFlags" from \@equinor/fusion-framework-react-app/feature-flag package.
42
+ */
43
+ export const useCurrentAppFeatureFlags = (): {
44
+ features: IFeatureFlag<unknown>[] | undefined;
45
+ error: unknown;
46
+ setFeatureEnabled: (key: string, enabled: boolean) => void;
47
+ } => {
48
+ const provider$ = useCurrentAppModules<[FeatureFlagModule]>().modules$.pipe(
49
+ map((val) => val?.featureFlag),
50
+ );
51
+ const { value: provider } = useObservableState(provider$);
52
+ const { value: features, error } = useObservableState(_useFeatureFlags(provider));
53
+ const setFeatureEnabled = _useSetFeatureflag(provider);
54
+ return { features, error, setFeatureEnabled };
55
+ };
56
+
57
+ /**
58
+ * useFrameworkFeatureFlag.
59
+ *
60
+ * Hook for getting single featureFlag from framework/portal.
61
+ */
62
+ export const useFrameworkFeatureFlag = (
63
+ key: string,
64
+ ): {
65
+ feature: IFeatureFlag<unknown> | undefined;
66
+ error: unknown;
67
+ setFeatureEnabled: (key: string, enabled: boolean) => void;
68
+ } => {
69
+ const provider = useFramework<[FeatureFlagModule]>().modules.featureFlag;
70
+ const { value: feature, error } = useObservableState(_useFeatureFlag(key, provider));
71
+ const setFeatureEnabled = _useSetFeatureflag(provider);
72
+ return { feature, error, setFeatureEnabled };
73
+ };
74
+
75
+ /**
76
+ * useFrameworkFeatureFlags.
77
+ *
78
+ * Hook for getting featureFlags from framework/portal.
79
+ */
80
+ export const useFrameworkFeatureFlags = (): {
81
+ features: IFeatureFlag<unknown>[] | undefined;
82
+ error: unknown;
83
+ setFeatureEnabled: (key: string, enabled: boolean) => void;
84
+ } => {
85
+ const provider = useFramework<[FeatureFlagModule]>().modules.featureFlag;
86
+ const { value: features, error } = useObservableState(_useFeatureFlags(provider));
87
+ const setFeatureEnabled = _useSetFeatureflag(provider);
88
+ return { features, error, setFeatureEnabled };
89
+ };
90
+
91
+ const _useFeatureFlag = (key: string, provider?: IFeatureFlagProvider) => {
92
+ return useMemo(() => {
93
+ return provider ? provider.getFeature(key) : EMPTY;
94
+ }, [provider, key]);
95
+ };
96
+
97
+ const _useFeatureFlags = (provider?: IFeatureFlagProvider) => {
98
+ return useMemo(() => {
99
+ return provider ? provider.getFeatures((_) => true) : EMPTY;
100
+ }, [provider]);
101
+ };
102
+
103
+ const _useSetFeatureflag = (provider?: IFeatureFlagProvider) => {
104
+ return useCallback(
105
+ (key: string, enabled: boolean) => {
106
+ if (!provider) {
107
+ throw new Error('Missing IFeatureFlagProvider.');
108
+ }
109
+ provider.toggleFeature({ key, enabled });
110
+ },
111
+ [provider],
112
+ );
113
+ };
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by genversion.
2
- export const version = '5.3.8';
2
+ export const version = '5.3.9';