version-bridge: leave it to the caller of useVersionedContext to check availability
Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
@@ -36,7 +36,7 @@ export function useVersionedContext<
|
||||
Versions extends {
|
||||
[version in number]: any;
|
||||
},
|
||||
>(key: string): VersionedValue<Versions>;
|
||||
>(key: string): VersionedValue<Versions> | undefined;
|
||||
|
||||
// @public
|
||||
export type VersionedValue<
|
||||
|
||||
@@ -65,13 +65,9 @@ describe('VersionedContext', () => {
|
||||
|
||||
const rendered = renderHook(() => useVersionedContext('test-context-3'));
|
||||
|
||||
expect(() => rendered.result.current).toThrow(
|
||||
'Global test-context-3 is not set',
|
||||
);
|
||||
expect(rendered.result.current).toBeUndefined();
|
||||
context.set({ 1: '3v1' });
|
||||
expect(() => rendered.result.current).toThrow(
|
||||
'Global test-context-3 is not set',
|
||||
);
|
||||
expect(rendered.result.current).toBeUndefined();
|
||||
// should need a rerender before update
|
||||
rendered.rerender();
|
||||
|
||||
@@ -86,9 +82,7 @@ describe('VersionedContext', () => {
|
||||
|
||||
context.reset();
|
||||
rendered.rerender();
|
||||
expect(() => rendered.result.current).toThrow(
|
||||
'Global test-context-3 is not set',
|
||||
);
|
||||
expect(rendered.result.current).toBeUndefined();
|
||||
|
||||
context.set({ 1: '3v1', 2: '3v2' });
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
import { createContext, useContext, Context } from 'react';
|
||||
import { getGlobalSingleton, getOrCreateGlobalSingleton } from './globalObject';
|
||||
import { getOrCreateGlobalSingleton } from './globalObject';
|
||||
import { createVersionedValueMap, VersionedValue } from './VersionedValue';
|
||||
|
||||
/**
|
||||
@@ -55,6 +55,10 @@ export function createVersionedContext<
|
||||
* ```ts
|
||||
* const versionedHolder = useVersionedContext<{ 1: string }>('my-context');
|
||||
*
|
||||
* if (!versionedHolder) {
|
||||
* throw new Error('My context is not available!')
|
||||
* }
|
||||
*
|
||||
* const myValue = versionedHolder.atVersion(1);
|
||||
*
|
||||
* // ...
|
||||
@@ -62,14 +66,8 @@ export function createVersionedContext<
|
||||
*/
|
||||
export function useVersionedContext<
|
||||
Versions extends { [version in number]: any },
|
||||
>(key: string): VersionedValue<Versions> {
|
||||
const versionedValue = useContext(
|
||||
getGlobalSingleton<Context<VersionedValue<Versions>>>(key),
|
||||
);
|
||||
if (!versionedValue) {
|
||||
throw new Error(`No provider available for ${key} context`);
|
||||
}
|
||||
return versionedValue;
|
||||
>(key: string): VersionedValue<Versions> | undefined {
|
||||
return useContext(createVersionedContext<Versions>(key));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user