Browse Source

update: rest service with the request recource option

pull/25761/head
sumeyye 1 month ago
parent
commit
ad2f645de3
  1. 15
      npm/ng-packs/packages/core/src/lib/services/rest.service.ts
  2. 16
      npm/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts

15
npm/ng-packs/packages/core/src/lib/services/rest.service.ts

@ -1,5 +1,6 @@
import { HttpClient, HttpHeaders, HttpParameterCodec, HttpParams, HttpRequest } from '@angular/common/http';
import { Injectable, inject } from '@angular/core';
import { Injectable, Signal, inject } from '@angular/core';
import { rxResource } from '@angular/core/rxjs-interop';
import { Observable, from, of, throwError } from 'rxjs';
import { catchError, map, switchMap } from 'rxjs/operators';
import { ExternalHttpClient } from '../clients/http.client';
@ -66,6 +67,18 @@ export class RestService {
}),
);
}
requestResource<T, R>(
request: Signal<Rest.Request<T>>,
config?: Rest.Config,
api?: string,
) {
return rxResource({
params: () => request(),
stream: ({ params }) => this.request<T, R>(params, config, api),
});
}
private getHttpClient(isExternal: boolean) {
return isExternal ? this.externalHttp : this.http;
}

16
npm/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts

@ -1,4 +1,6 @@
import { HttpErrorResponse, HttpHeaders } from '@angular/common/http';
import { effect, signal } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { createHttpFactory, HttpMethod, SpectatorHttp, SpyObject } from '@ngneat/spectator/vitest';
import { OAuthService } from 'angular-oauth2-oidc';
import { of, throwError } from 'rxjs';
@ -92,6 +94,20 @@ describe('HttpClient testing', () => {
await completionPromise;
});
test('should create a resource-based request that still uses the ABP request pipeline', () => {
const resource = TestBed.runInInjectionContext(() => {
const resource = spectator.service.requestResource(signal({ method: HttpMethod.GET, url: '/test' }));
effect(() => {
resource.value();
});
return resource;
});
expect(typeof resource.reload).toBe('function');
expect(typeof resource.value).toBe('function');
expect(typeof resource.hasValue).toBe('function');
});
test('should handle the error', () => {
const spy = vi.spyOn(httpErrorReporter, 'reportError');

Loading…
Cancel
Save