first implementation of downloaded files viewer

This commit is contained in:
2023-05-24 13:19:04 +02:00
parent 3737e86de3
commit 908f4c6636
7 changed files with 276 additions and 31 deletions

View File

@@ -0,0 +1,44 @@
import { useEffect, useState } from 'react'
import { Observable } from 'rxjs'
/**
* Handles the subscription and unsubscription from an observable.
* Automatically disposes the subscription.
* @param source$ source observable
* @param nextHandler subscriber function
* @param errHandler error catching callback
*/
export function useSubscription<T>(
source$: Observable<T>,
nextHandler: (value: T) => void,
errHandler?: (err: any) => void,
) {
useEffect(() => {
if (source$) {
const sub = source$.subscribe({
next: nextHandler,
error: errHandler,
})
return () => sub.unsubscribe()
}
}, [source$])
}
/**
* Use an observable as state
* @param source$ source observable
* @param initialState the initial state prior to the emission
* @param errHandler error catching callback
* @returns value emitted to the observable
*/
export function useObservable<T>(
source$: Observable<T>,
initialState: T,
errHandler?: (err: any) => void,
): T {
const [value, setValue] = useState(initialState)
useSubscription(source$, setValue, errHandler)
return value
}