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:
Patrik Oldsberg
2021-09-11 12:48:28 +02:00
parent 671015f132
commit 921569b500
7 changed files with 26 additions and 23 deletions
+1 -1
View File
@@ -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));
}
/**