11import { HttpClient } from '@angular/common/http' ;
22import { Injectable } from '@angular/core' ;
3- import { map , mergeMap } from 'rxjs' ;
3+ import { ActivatedRouteSnapshot } from '@angular/router' ;
4+ import { first , map , mergeMap } from 'rxjs' ;
45import type { IWorker , IWorkerCreateInput , IWorkerUpdateInput } from '@openworkers/api-types' ;
56import { ResourceService } from './resource.service' ;
67
@@ -13,6 +14,29 @@ export class WorkersService extends ResourceService<IWorker, IWorkerCreateInput,
1314 super ( http , 'workers' ) ;
1415 }
1516
17+ /**
18+ * Fetch worker with script included (for editor page).
19+ */
20+ findByIdWithScript ( id : string ) {
21+ return this . http . get < IWorker > ( `/api/v1/workers/${ id } ` , { params : { script : 'true' } } ) . pipe (
22+ map ( ( data ) => this . cacheAndWatch ( data ) ) ,
23+ mergeMap ( ( data ) => data . asObservable ( ) )
24+ ) ;
25+ }
26+
27+ /**
28+ * Resolver for editor page (includes script).
29+ */
30+ resolveWithScript ( route : ActivatedRouteSnapshot ) {
31+ const id = route . paramMap . get ( 'id' ) ;
32+
33+ if ( ! id ) {
34+ throw new Error ( 'Missing id' ) ;
35+ }
36+
37+ return this . findByIdWithScript ( id ) . pipe ( first ( ) ) ;
38+ }
39+
1640 createCron ( workerId : string , value : string ) {
1741 return this . http . post < IWorker > ( `/api/v1/workers/${ workerId } /crons` , { expression : value } ) . pipe (
1842 map ( ( data ) => this . cacheAndWatch ( data ) ) ,
0 commit comments