From ad2f645de39d766d417f997bca95c4c2fb6db3b7 Mon Sep 17 00:00:00 2001 From: sumeyye Date: Tue, 7 Jul 2026 08:29:28 +0300 Subject: [PATCH] update: rest service with the request recource option --- .../core/src/lib/services/rest.service.ts | 15 ++++++++++++++- .../core/src/lib/tests/rest.service.spec.ts | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/rest.service.ts b/npm/ng-packs/packages/core/src/lib/services/rest.service.ts index 4121eaa75a..958e06dfc3 100644 --- a/npm/ng-packs/packages/core/src/lib/services/rest.service.ts +++ b/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( + request: Signal>, + config?: Rest.Config, + api?: string, + ) { + return rxResource({ + params: () => request(), + stream: ({ params }) => this.request(params, config, api), + }); + } + private getHttpClient(isExternal: boolean) { return isExternal ? this.externalHttp : this.http; } diff --git a/npm/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts index 3009b0d6dc..a2fcbdee56 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts +++ b/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');