Skip to content

Commit 9b0c0a5

Browse files
committed
subtypebuilder in get
1 parent 23d6c83 commit 9b0c0a5

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

package-lock.json

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/resource.service.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {HalOptions, HalParam} from './rest.service';
1212
import {SubTypeBuilder} from './subtype-builder';
1313
import {Observable} from 'rxjs/internal/Observable';
1414
import {CustomEncoder} from './CustomEncoder';
15+
import * as url from 'url';
1516

1617
@Injectable()
1718
export class ResourceService {
@@ -35,15 +36,30 @@ export class ResourceService {
3536
catchError(error => observableThrowError(error)),);
3637
}
3738

38-
public get<T extends Resource>(type: { new(): T }, resource: string, id: any, params?: HalParam[]): Observable<T> {
39+
public get<T extends Resource>(type: { new(): T }, resource: string, id: any, params?: HalParam[], builder?: SubTypeBuilder): Observable<T> {
40+
let self = this;
3941
const uri = this.getResourceUrl(resource).concat('/', id);
40-
const result: T = new type();
42+
43+
let result: T = new type();
4144
const httpParams = ResourceHelper.params(new HttpParams(), params);
4245

4346
this.setUrlsResource(result);
44-
let observable = ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, params: httpParams});
45-
return observable.pipe(map(data => ResourceHelper.instantiateResource(result, data)),
46-
catchError(error => observableThrowError(error)),);
47+
let observable = ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, observe: 'response', params: httpParams});
48+
return observable.pipe(
49+
map((response: HttpResponse<any>) => {
50+
if(builder) {
51+
let linkHref = url.parse(response.body._links.self.href).pathname;
52+
let regex = /([A-Za-z0-9]+)\/([A-Za-z0-9]+)\/([A-Za-z0-9]+)/g;
53+
let match = regex.exec(linkHref);
54+
if (match != null) {
55+
let embeddedClassName = match[2];
56+
result = ResourceHelper.searchSubtypes(builder, embeddedClassName, result);
57+
}
58+
}
59+
return ResourceHelper.instantiateResourceFromResponse(result, response);
60+
}),
61+
catchError(error => this.handleError(error))
62+
);
4763
}
4864

4965
public getBySelfLink<T extends Resource>(type: { new(): T }, resourceLink: string): Observable<T> {

src/rest.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ export class RestService<T extends Resource> {
5353
}));
5454
}
5555

56-
public get(id: any, params?: HalParam[]): Observable<T> {
57-
return this.resourceService.get(this.type, this.resource, id, params);
56+
public get(id: any, params?: HalParam[], builder?: SubTypeBuilder): Observable<T> {
57+
return this.resourceService.get(this.type, this.resource, id, params, builder);
5858
}
5959

6060
public getBySelfLink(selfLink: string): Observable<T> {

0 commit comments

Comments
 (0)