import { useSyncExternalStore } from 'react';
import type { LiveData } from './livedata';
function noopSubscribe() {
return () => {};
}
function nullGetSnapshot() {
return null;
}
function undefinedGetSnapshot() {
return undefined;
}
/**
* subscribe LiveData and return the value.
*/
export function useLiveData | null | undefined>(
liveData: Input
): NonNullable extends LiveData
? Input extends undefined
? T | undefined
: Input extends null
? T | null
: T
: never {
return useSyncExternalStore(
liveData ? liveData.reactSubscribe : noopSubscribe,
liveData
? liveData.reactGetSnapshot
: liveData === undefined
? undefinedGetSnapshot
: nullGetSnapshot
);
}