@openmrs/esm-react-utils 5.0.3-pre.882 → 5.0.3-pre.894
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/.turbo/turbo-build.log +18 -18
- package/dist/openmrs-esm-react-utils.js +1 -1
- package/dist/openmrs-esm-react-utils.js.map +1 -1
- package/package.json +13 -12
- package/src/Extension.tsx +14 -2
- package/src/extensions.test.tsx +6 -3
- package/src/index.ts +1 -0
- package/src/useFeatureFlag.ts +31 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmrs/esm-react-utils",
|
|
3
|
-
"version": "5.0.3-pre.
|
|
3
|
+
"version": "5.0.3-pre.894",
|
|
4
4
|
"license": "MPL-2.0",
|
|
5
5
|
"description": "React utilities for OpenMRS.",
|
|
6
6
|
"browser": "dist/openmrs-esm-react-utils.js",
|
|
@@ -44,11 +44,11 @@
|
|
|
44
44
|
"swr": "^2.0.1"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@openmrs/esm-api": "
|
|
48
|
-
"@openmrs/esm-config": "
|
|
49
|
-
"@openmrs/esm-error-handling": "
|
|
50
|
-
"@openmrs/esm-extensions": "
|
|
51
|
-
"@openmrs/esm-globals": "
|
|
47
|
+
"@openmrs/esm-api": "5.x",
|
|
48
|
+
"@openmrs/esm-config": "5.x",
|
|
49
|
+
"@openmrs/esm-error-handling": "5.x",
|
|
50
|
+
"@openmrs/esm-extensions": "5.x",
|
|
51
|
+
"@openmrs/esm-globals": "5.x",
|
|
52
52
|
"dayjs": "1.x",
|
|
53
53
|
"i18next": "19.x",
|
|
54
54
|
"react": "18.x",
|
|
@@ -56,11 +56,12 @@
|
|
|
56
56
|
"react-i18next": "11.x"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@openmrs/esm-api": "^5.0.3-pre.
|
|
60
|
-
"@openmrs/esm-config": "^5.0.3-pre.
|
|
61
|
-
"@openmrs/esm-error-handling": "^5.0.3-pre.
|
|
62
|
-
"@openmrs/esm-extensions": "^5.0.3-pre.
|
|
63
|
-
"@openmrs/esm-
|
|
59
|
+
"@openmrs/esm-api": "^5.0.3-pre.894",
|
|
60
|
+
"@openmrs/esm-config": "^5.0.3-pre.894",
|
|
61
|
+
"@openmrs/esm-error-handling": "^5.0.3-pre.894",
|
|
62
|
+
"@openmrs/esm-extensions": "^5.0.3-pre.894",
|
|
63
|
+
"@openmrs/esm-feature-flags": "^5.0.3-pre.894",
|
|
64
|
+
"@openmrs/esm-globals": "^5.0.3-pre.894",
|
|
64
65
|
"dayjs": "^1.10.8",
|
|
65
66
|
"i18next": "^19.6.0",
|
|
66
67
|
"react": "^18.1.0",
|
|
@@ -69,5 +70,5 @@
|
|
|
69
70
|
"rxjs": "^6.5.3",
|
|
70
71
|
"webpack": "^5.88.0"
|
|
71
72
|
},
|
|
72
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "f23d967551442c25ae03cd386fbaf217c1c5f0bc"
|
|
73
74
|
}
|
package/src/Extension.tsx
CHANGED
|
@@ -41,7 +41,7 @@ export const Extension: React.FC<ExtensionProps> = ({
|
|
|
41
41
|
const [domElement, setDomElement] = useState<HTMLDivElement>();
|
|
42
42
|
const { extension } = useContext(ComponentContext);
|
|
43
43
|
const parcel = useRef<Parcel | null>(null);
|
|
44
|
-
const updatePromise = useRef<Promise<void
|
|
44
|
+
const updatePromise = useRef<Promise<void>>(Promise.resolve());
|
|
45
45
|
const rendering = useRef<boolean>(false);
|
|
46
46
|
|
|
47
47
|
useEffect(() => {
|
|
@@ -136,7 +136,19 @@ export const Extension: React.FC<ExtensionProps> = ({
|
|
|
136
136
|
parcel?.current?.getStatus() === "MOUNTED" &&
|
|
137
137
|
parcel.current.update
|
|
138
138
|
) {
|
|
139
|
-
updatePromise.current = parcel.current
|
|
139
|
+
updatePromise.current = parcel.current
|
|
140
|
+
.update({ ...state })
|
|
141
|
+
.catch((err) => {
|
|
142
|
+
// if we were trying to update but the component was unmounted
|
|
143
|
+
// while this was happening, ignore the error
|
|
144
|
+
if (
|
|
145
|
+
!(err instanceof Error) ||
|
|
146
|
+
!err.message.includes("minified message #32") ||
|
|
147
|
+
parcel.current?.getStatus() === "MOUNTED"
|
|
148
|
+
) {
|
|
149
|
+
throw err;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
140
152
|
}
|
|
141
153
|
}
|
|
142
154
|
);
|
package/src/extensions.test.tsx
CHANGED
|
@@ -181,11 +181,14 @@ describe("ExtensionSlot, Extension, and useExtensionSlotMeta", () => {
|
|
|
181
181
|
);
|
|
182
182
|
const metas = useExtensionSlotMeta("Box");
|
|
183
183
|
const wrapItem = useCallback(
|
|
184
|
-
(slot: React.ReactNode, extension
|
|
184
|
+
(slot: React.ReactNode, extension?: ExtensionData) => {
|
|
185
185
|
return (
|
|
186
186
|
<div>
|
|
187
187
|
<h1>
|
|
188
|
-
{
|
|
188
|
+
{
|
|
189
|
+
metas[getExtensionNameFromId(extension?.extensionId ?? "")]
|
|
190
|
+
.code
|
|
191
|
+
}
|
|
189
192
|
</h1>
|
|
190
193
|
{slot}
|
|
191
194
|
</div>
|
|
@@ -196,7 +199,7 @@ describe("ExtensionSlot, Extension, and useExtensionSlotMeta", () => {
|
|
|
196
199
|
return (
|
|
197
200
|
<div>
|
|
198
201
|
<ExtensionSlot name="Box">
|
|
199
|
-
<Extension
|
|
202
|
+
<Extension state={{ suffix }}>{wrapItem}</Extension>
|
|
200
203
|
</ExtensionSlot>
|
|
201
204
|
<button onClick={toggleSuffix}>Toggle suffix</button>
|
|
202
205
|
</div>
|
package/src/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from "./useExtensionInternalStore";
|
|
|
16
16
|
export * from "./useExtensionSlot";
|
|
17
17
|
export * from "./useExtensionSlotMeta";
|
|
18
18
|
export * from "./useExtensionStore";
|
|
19
|
+
export * from "./useFeatureFlag";
|
|
19
20
|
export * from "./useForceUpdate";
|
|
20
21
|
export * from "./useLayoutType";
|
|
21
22
|
export * from "./useLocations";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** @module @category Feature Flags */
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { useStore } from "./useStore";
|
|
4
|
+
import { featureFlagsStore } from "@openmrs/esm-feature-flags";
|
|
5
|
+
|
|
6
|
+
/** Use this function to tell whether a feature flag is toggled on or off.
|
|
7
|
+
*
|
|
8
|
+
* Example:
|
|
9
|
+
*
|
|
10
|
+
* ```tsx
|
|
11
|
+
* import { useFeatureFlag } from "@openmrs/esm-react-utils";
|
|
12
|
+
*
|
|
13
|
+
* export function MyComponent() {
|
|
14
|
+
* const isMyFeatureFlagOn = useFeatureFlag("my-feature-flag");
|
|
15
|
+
* return <>{isMyFeatureFlagOn && <ExperimentalFeature />}</>;
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function useFeatureFlag(flagName: string) {
|
|
20
|
+
const { flags } = useStore(featureFlagsStore);
|
|
21
|
+
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
if (!flags[flagName]) {
|
|
24
|
+
console.error(
|
|
25
|
+
`useFeatureFlag: Attempted to get value of non-existent flag "${flagName}". Did you forget to call registerFeatureFlag?`
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
}, [flags[flagName]]);
|
|
29
|
+
|
|
30
|
+
return flags[flagName]?.enabled;
|
|
31
|
+
}
|