Skip to content

Commit 17bde3e

Browse files
authored
Merge pull request #19 from klerick/for-child-module
feat(json-api-nestjs-sdk): for child static method
2 parents 210d760 + 3fc29db commit 17bde3e

File tree

10 files changed

+125
-7
lines changed

10 files changed

+125
-7
lines changed

apps/example-angular-client/src/app/app.component.html

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
<a routerLink="child">Config</a>
2+
<div>
3+
<router-outlet></router-outlet>
4+
</div>
15
<div>
26
<pre>{{dataItem | async | json}}</pre>
37
</div>

apps/example-angular-client/src/app/app.module.ts

+13-2
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,33 @@ import { NgModule } from '@angular/core';
22
import { CommonModule } from '@angular/common';
33
import { BrowserModule } from '@angular/platform-browser';
44
import { JsonApiNestjsSdkModule } from 'json-api-nestjs-sdk';
5-
import { BookList, Users, Roles, Comments, Addresses } from 'database/entity';
5+
import { Users, Roles, Comments, Addresses } from 'database/entity';
66

77
import { AppComponent } from './app.component';
88
import { NxWelcomeComponent } from './nx-welcome.component';
9+
import { ChildModule } from './child/child.module';
10+
import { Route, RouterModule } from '@angular/router';
11+
12+
export const appRoutes: Route[] = [
13+
{
14+
path: 'child',
15+
loadChildren: () =>
16+
import('./child/child.module').then((r) => r.ChildModule),
17+
},
18+
];
919

1020
@NgModule({
1121
declarations: [AppComponent, NxWelcomeComponent],
1222
imports: [
1323
CommonModule,
1424
BrowserModule,
25+
RouterModule.forRoot(appRoutes),
1526
JsonApiNestjsSdkModule.forRoot(
1627
{
1728
apiPrefix: '/api/v1',
1829
apiHost: window.location.origin,
1930
},
20-
{ BookList, Users, Roles, Comments, Addresses }
31+
{ Users, Roles, Comments, Addresses }
2132
),
2233
],
2334
providers: [],

apps/example-angular-client/src/app/child/child.component.css

Whitespace-only changes.

apps/example-angular-client/src/app/child/child.component.html

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import {
2+
ChangeDetectionStrategy,
3+
Component,
4+
inject,
5+
OnInit,
6+
} from '@angular/core';
7+
import { JsonApiSdkService } from 'json-api-nestjs-sdk';
8+
import { BookList } from 'database/entity';
9+
10+
@Component({
11+
selector: 'nestjs-json-api-child',
12+
templateUrl: './child.component.html',
13+
styleUrls: ['./child.component.css'],
14+
changeDetection: ChangeDetectionStrategy.OnPush,
15+
})
16+
export class ChildComponent implements OnInit {
17+
jsonApiSdkService = inject(JsonApiSdkService);
18+
19+
ngOnInit(): void {
20+
this.jsonApiSdkService.getAll(BookList).subscribe((r) => console.log(r));
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { NgModule } from '@angular/core';
2+
import { ChildComponent } from './child.component';
3+
import { JsonApiNestjsSdkModule } from 'json-api-nestjs-sdk';
4+
import { BookList } from 'database/entity';
5+
import { RouterModule } from '@angular/router';
6+
7+
@NgModule({
8+
imports: [
9+
RouterModule.forChild([
10+
{
11+
path: '',
12+
component: ChildComponent,
13+
},
14+
]),
15+
JsonApiNestjsSdkModule.forChild({ BookList }),
16+
],
17+
declarations: [ChildComponent],
18+
exports: [ChildComponent],
19+
})
20+
export class ChildModule {}

libs/json-api-nestjs-sdk/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
"name": "json-api-nestjs-sdk",
33
"version": "0.0.1",
44
"peerDependencies": {
5-
"@angular/common": "^14.2.0",
6-
"@angular/core": "^14.2.0",
5+
"@angular/common": "^15.0.0",
6+
"@angular/core": "^15.0.0",
77
"json-api-nestjs": "^3.1.0"
88
},
99
"dependencies": {

libs/json-api-nestjs-sdk/src/lib/json-api-nestjs-sdk.module.ts

+39-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
import { ModuleWithProviders, NgModule, Provider } from '@angular/core';
1+
import {
2+
Inject,
3+
ModuleWithProviders,
4+
NgModule,
5+
Optional,
6+
Provider,
7+
Self,
8+
SkipSelf,
9+
} from '@angular/core';
210
import { HttpClientModule } from '@angular/common/http';
311

412
import {
513
ALL_ENTITIES,
614
JSON_API_SDK_CONFIG,
715
JsonApiSdkConfig,
816
ListEntities,
17+
PATCH_ENTITIES,
918
} from './token/json-api-sdk';
1019

1120
@NgModule({
@@ -32,4 +41,33 @@ export class JsonApiNestjsSdkModule {
3241
providers,
3342
};
3443
}
44+
45+
public static forChild(
46+
entities: ListEntities
47+
): ModuleWithProviders<JsonApiNestjsSdkModule> {
48+
return {
49+
ngModule: JsonApiNestjsSdkModule,
50+
providers: [
51+
{
52+
provide: PATCH_ENTITIES,
53+
useValue: entities,
54+
},
55+
],
56+
};
57+
}
58+
constructor(
59+
@Optional() @SkipSelf() parentModule: JsonApiNestjsSdkModule,
60+
@Optional()
61+
@Self()
62+
@Inject(PATCH_ENTITIES)
63+
patchEntities: ListEntities,
64+
@Optional()
65+
@SkipSelf()
66+
@Inject(ALL_ENTITIES)
67+
allEntities: ListEntities
68+
) {
69+
if (parentModule) {
70+
Object.assign(allEntities, patchEntities);
71+
}
72+
}
3573
}

libs/json-api-nestjs-sdk/src/lib/service/json-api-utils/json-api-utils.service.ts

+8
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
JSON_API_SDK_CONFIG,
66
JsonApiSdkConfig,
77
ListEntities,
8+
PATCH_ENTITIES,
89
} from '../../token/json-api-sdk';
910

1011
import {
@@ -25,6 +26,13 @@ import { ObjectLiteral } from 'typeorm';
2526
export class JsonApiUtilsService {
2627
protected jsonApiSdkConfig = inject<JsonApiSdkConfig>(JSON_API_SDK_CONFIG);
2728
protected listEntities = inject<ListEntities>(ALL_ENTITIES);
29+
// protected patchEntities = inject<ListEntities>(PATCH_ENTITIES, {
30+
// optional: true,
31+
// });
32+
33+
constructor() {
34+
console.log(this.listEntities);
35+
}
2836

2937
public getUrlForResource(resource: string): string {
3038
const url: string[] = [camelToKebab(resource).toLocaleLowerCase()];

libs/json-api-nestjs-sdk/src/lib/token/json-api-sdk.ts

+17-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { InjectionToken } from '@angular/core';
1+
import { inject, InjectionToken } from '@angular/core';
22

33
export interface JsonApiSdkConfig {
44
apiHost: string;
@@ -10,8 +10,23 @@ export interface ListEntities {
1010
}
1111

1212
export const JSON_API_SDK_CONFIG = new InjectionToken<JsonApiSdkConfig>(
13+
'Main config object for sdk'
14+
// {
15+
// // providedIn: JsonApiNestjsSdkModule,
16+
// factory: () => {
17+
// console.log(inject(API_SDK_CONFIG, { optional: true }));
18+
// return inject(API_SDK_CONFIG, { optional: true }) as any;
19+
// },
20+
// }
21+
);
22+
23+
export const API_SDK_CONFIG = new InjectionToken<JsonApiSdkConfig>(
1324
'Config object for sdk'
1425
);
1526
export const ALL_ENTITIES = new InjectionToken<ListEntities>(
16-
'List of all typeorm entities'
27+
'All List of all typeorm entities'
28+
);
29+
30+
export const PATCH_ENTITIES = new InjectionToken<ListEntities>(
31+
'Patch list of all typeorm entities'
1732
);

0 commit comments

Comments
 (0)