Skip to content

Function: toRequestSource()

toRequestSource<Payload, TypePrefix>(typePrefix): (source$) => Observable<Action<Payload, `${TypePrefix}.success$`> | Action<any, `${TypePrefix}.error$`>>

Defined in: libs/rxjs/src/lib/sources/to-request-source.operator.ts:70

toRequestSource takes in a TypePrefix and converts an RxJS Observable of values of type Payload (inferred) into an Observable of values of type

ts
| { type: `${TypePrefix}.success$`; payload: Payload }
| { type: `${TypePrefix}.error$`; payload: any }

Example: Convert an HTTP POST observable into an observable with success$ and error$ values

typescript
import { exhaustMap } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { toRequestSource } from '@state-adapt/rxjs';

const deleteTodo$ = source<number>();

const deleteTodoRequest$ = deleteTodo$.pipe(
  exhaustMap((id) =>
    ajax({
      url: `https://jsonplaceholder.typicode.com/todos/${id}`,
      method: 'DELETE',
    }).pipe(toRequestSource('todo.delete'))
  )
);

deleteTodoRequest$.subscribe(console.log);

deleteTodo$.next(1);
// { type: 'todo.delete.success$', payload: AjaxResponse{…} }

deleteTodo$.next(Infinity);
// { type: 'todo.delete.error$', payload: 'AjaxErrorImpl{…} }

deleteTodo$.next(2);
// { type: 'todo.delete.success$', payload: AjaxResponse{…} }

The main stream is not killed because toRequestSource operates on the request observable instead of the outer observable.

Example: Converting any observable into a request source

typescript
import { interval } from 'rxjs';
import { toRequestSource } from '@state-adapt/rxjs';

const interval$ = interval(1000).pipe(
  map(n => n < 2 ? n : n.fakeNumberMethod()),
  toRequestSource('interval'),
);

interval$.subscribe(console.log);
// { type: 'interval.success$', payload: 0 }
// { type: 'interval.success$', payload: 1 }
// { type: 'interval.error$', payload: 'Error: n.fakeNumberMethod is not a function' }
// End

The main stream is killed because toRequestSource operates directly on it instead of on an inner observable.

Type Parameters

Payload

Payload

TypePrefix

TypePrefix extends string

Parameters

typePrefix

TypePrefix

Returns

(source$): Observable<Action<Payload, `${TypePrefix}.success$`> | Action<any, `${TypePrefix}.error$`>>

Parameters

source$

Observable<Payload>

Returns

Observable<Action<Payload, `${TypePrefix}.success$`> | Action<any, `${TypePrefix}.error$`>>