File tree Expand file tree Collapse file tree 5 files changed +43
-6
lines changed
ts/smelter-web-client/src Expand file tree Collapse file tree 5 files changed +43
-6
lines changed Original file line number Diff line number Diff line change 1+ import { useEffect , useRef , useState } from 'react' ;
2+ import Smelter from '../smelter/live' ;
3+ import type { SmelterInstanceOptions } from '../manager' ;
4+
5+ export function useSmelter ( options : SmelterInstanceOptions ) : Smelter | undefined {
6+ const [ smelter , setSmelter ] = useState < Smelter > ( ) ;
7+ const cleanUpPromise = useRef < Promise < void > > ( ) ;
8+
9+ useEffect ( ( ) => {
10+ const smelter = new Smelter ( options ) ;
11+
12+ let cancel = false ;
13+ // TODO(noituri): Add smelter.restart()
14+ const promise = ( async ( ) => {
15+ await cleanUpPromise . current ;
16+
17+ await smelter . init ( ) ;
18+ await smelter . start ( ) ;
19+ if ( ! cancel ) {
20+ setSmelter ( smelter ) ;
21+ }
22+ } ) ( ) ;
23+
24+ return ( ) => {
25+ cancel = true ;
26+ cleanUpPromise . current = ( async ( ) => {
27+ await promise . catch ( ( ) => { } ) ;
28+ await smelter . terminate ( ) ;
29+ } ) ( ) ;
30+ } ;
31+ } , [ options ] ) ;
32+
33+ return smelter ;
34+ }
Original file line number Diff line number Diff line change 11import Smelter from './smelter/live' ;
22import OfflineSmelter from './smelter/offline' ;
33
4+ export { useSmelter } from './hooks/useSmelter' ;
5+ export { SmelterInstanceOptions } from './manager' ;
46export { OfflineSmelter } ;
7+
58export default Smelter ;
Original file line number Diff line number Diff line change @@ -9,15 +9,15 @@ import { sendRequest, sendMultipartRequest } from './fetch';
99import { retry , sleep } from './utils' ;
1010import { WebSocketConnection } from './ws' ;
1111
12- export type InstanceOptions = {
12+ export type SmelterInstanceOptions = {
1313 url : string | URL ;
1414} ;
1515
1616class RemoteInstanceManager implements SmelterManager {
1717 private url : URL ;
1818 private wsConnection : WebSocketConnection ;
1919
20- constructor ( opts : InstanceOptions ) {
20+ constructor ( opts : SmelterInstanceOptions ) {
2121 let url : URL ;
2222 if ( opts . url instanceof URL ) {
2323 url = opts . url ;
Original file line number Diff line number Diff line change @@ -3,13 +3,13 @@ import { pino } from 'pino';
33import type { Renderers } from '@swmansion/smelter' ;
44import { Smelter as CoreSmelter } from '@swmansion/smelter-core' ;
55import type { RegisterInput , RegisterOutput } from '../api' ;
6- import type { InstanceOptions } from '../manager' ;
6+ import type { SmelterInstanceOptions } from '../manager' ;
77import RemoteInstanceManager from '../manager' ;
88
99export default class Smelter {
1010 private coreSmelter : CoreSmelter ;
1111
12- public constructor ( opts : InstanceOptions ) {
12+ public constructor ( opts : SmelterInstanceOptions ) {
1313 const logger = pino ( {
1414 level : 'warn' ,
1515 browser : {
Original file line number Diff line number Diff line change @@ -3,13 +3,13 @@ import { OfflineSmelter as CoreSmelter } from '@swmansion/smelter-core';
33import type { Renderers } from '@swmansion/smelter' ;
44import { pino } from 'pino' ;
55import type { RegisterInput , RegisterOutput } from '../api' ;
6- import type { InstanceOptions } from '../manager' ;
6+ import type { SmelterInstanceOptions } from '../manager' ;
77import RemoteInstanceManager from '../manager' ;
88
99export default class OfflineSmelter {
1010 private coreSmelter : CoreSmelter ;
1111
12- public constructor ( opts : InstanceOptions ) {
12+ public constructor ( opts : SmelterInstanceOptions ) {
1313 const logger = pino ( {
1414 level : 'warn' ,
1515 browser : {
You can’t perform that action at this time.
0 commit comments