Skip to content

Commit fe52927

Browse files
committed
Allow method to be passed into setContext hook
Signed-off-by: MattIPv4 <[email protected]>
1 parent 9b05be9 commit fe52927

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

packages/react/src/context/use-context-mutator.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export type ContextMutation = {
2121
* @param updatedContext
2222
* @returns Promise for awaiting the context update
2323
*/
24-
setContext: (updatedContext: EvaluationContext) => Promise<void>;
24+
setContext: (updatedContext: EvaluationContext | ((previousContext: EvaluationContext) => EvaluationContext)) => Promise<void>;
2525
};
2626

2727
/**
@@ -34,14 +34,18 @@ export function useContextMutator(options: ContextMutationOptions = { defaultCon
3434
const { domain } = useContext(Context) || {};
3535
const previousContext = useRef<null | EvaluationContext>(null);
3636

37-
const setContext = useCallback(async (updatedContext: EvaluationContext) => {
38-
if (previousContext.current !== updatedContext) {
37+
const setContext = useCallback(async (updatedContext: EvaluationContext | ((previousContext: EvaluationContext) => EvaluationContext)): Promise<void> => {
38+
const resolvedContext = typeof updatedContext === 'function'
39+
? updatedContext(OpenFeature.getContext(options?.defaultContext ? undefined : domain))
40+
: updatedContext;
41+
42+
if (previousContext.current !== resolvedContext) {
3943
if (!domain || options?.defaultContext) {
40-
OpenFeature.setContext(updatedContext);
44+
OpenFeature.setContext(resolvedContext);
4145
} else {
42-
OpenFeature.setContext(domain, updatedContext);
46+
OpenFeature.setContext(domain, resolvedContext);
4347
}
44-
previousContext.current = updatedContext;
48+
previousContext.current = resolvedContext;
4549
}
4650
}, [domain]);
4751

0 commit comments

Comments
 (0)