reactfire 4.2.3-exp.1769cfb → 4.2.3-exp.4329c43

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.
@@ -1,7 +1,7 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { SuspenseSubject } from './SuspenseSubject';
3
3
  import { ReactFireOptions } from './';
4
- export declare function preloadObservable<T>(source: Observable<T>, id: string): SuspenseSubject<T>;
4
+ export declare function preloadObservable<T>(source: Observable<T>, id: string, suspenseEnabled?: boolean): SuspenseSubject<T>;
5
5
  export interface ObservableStatus<T> {
6
6
  /**
7
7
  * The loading status.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.2.3-exp.1769cfb",
2
+ "version": "4.2.3-exp.4329c43",
3
3
  "license": "MIT",
4
4
  "type": "module",
5
5
  "main": "dist/index.umd.cjs",
@@ -15,7 +15,7 @@ export class SuspenseSubject<T> extends Subject<T> {
15
15
  // @ts-expect-error: TODO: double check to see if this is an RXJS thing or if we should listen to TS
16
16
  private _resolveFirstEmission: () => void;
17
17
 
18
- constructor(innerObservable: Observable<T>, private _timeoutWindow: number) {
18
+ constructor(innerObservable: Observable<T>, private _timeoutWindow: number, private _suspenseEnabled: boolean) {
19
19
  super();
20
20
  this._firstEmission = new Promise<void>((resolve) => (this._resolveFirstEmission = resolve));
21
21
  this._innerObservable = innerObservable.pipe(
@@ -38,7 +38,13 @@ export class SuspenseSubject<T> extends Subject<T> {
38
38
 
39
39
  // set a timeout for resetting the cache, subscriptions will cancel the timeout
40
40
  // and reschedule again on unsubscribe
41
- this._timeoutHandler = setTimeout(this._reset.bind(this), this._timeoutWindow);
41
+ if (this._suspenseEnabled) {
42
+ // Noop if suspense is enabled
43
+ console.log('SuspenseSubject: Suspense is enabled');
44
+ this._timeoutHandler = setTimeout(() => {}, this._timeoutWindow);
45
+ } else {
46
+ this._timeoutHandler = setTimeout(this._reset.bind(this), this._timeoutWindow);
47
+ }
42
48
  }
43
49
 
44
50
  get hasValue(): boolean {
@@ -16,11 +16,11 @@ if (!(globalThis as any as ReactFireGlobals)._reactFirePreloadedObservables) {
16
16
  // Starts listening to an Observable.
17
17
  // Call this once you know you're going to render a
18
18
  // child that will consume the observable
19
- export function preloadObservable<T>(source: Observable<T>, id: string) {
19
+ export function preloadObservable<T>(source: Observable<T>, id: string, suspenseEnabled = false) {
20
20
  if (preloadedObservables.has(id)) {
21
21
  return preloadedObservables.get(id) as SuspenseSubject<T>;
22
22
  } else {
23
- const observable = new SuspenseSubject(source, DEFAULT_TIMEOUT);
23
+ const observable = new SuspenseSubject(source, DEFAULT_TIMEOUT, suspenseEnabled);
24
24
  preloadedObservables.set(id, observable);
25
25
  return observable;
26
26
  }
@@ -97,12 +97,13 @@ export function useObservable<T = unknown>(observableId: string, source: Observa
97
97
  if (!observableId) {
98
98
  throw new Error('cannot call useObservable without an observableId');
99
99
  }
100
- const observable = preloadObservable(source, observableId);
100
+ const suspenseEnabled = useSuspenseEnabledFromConfigAndContext(config.suspense);
101
+
102
+ const observable = preloadObservable(source, observableId, suspenseEnabled);
101
103
 
102
104
  // Suspend if suspense is enabled and no initial data exists
103
105
  const hasInitialData = config.hasOwnProperty('initialData') || config.hasOwnProperty('startWithValue');
104
106
  const hasData = observable.hasValue || hasInitialData;
105
- const suspenseEnabled = useSuspenseEnabledFromConfigAndContext(config.suspense);
106
107
  if (suspenseEnabled === true && !hasData) {
107
108
  throw observable.firstEmission;
108
109
  }