diff --git a/samples/BookStore-Angular-MongoDb/angular/package.json b/samples/BookStore-Angular-MongoDb/angular/package.json
index e2575ac04b..6ca4f5328d 100644
--- a/samples/BookStore-Angular-MongoDb/angular/package.json
+++ b/samples/BookStore-Angular-MongoDb/angular/package.json
@@ -48,6 +48,7 @@
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1",
"karma-jasmine-html-reporter": "^1.4.0",
+ "ngxs-schematic": "^1.1.5",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.15.0",
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/app-routing.module.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/app-routing.module.ts
index a495abb761..ac367f979f 100644
--- a/samples/BookStore-Angular-MongoDb/angular/src/app/app-routing.module.ts
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/app-routing.module.ts
@@ -16,6 +16,11 @@ const routes: Routes = [
} as ABP.Route,
},
},
+ { path: 'books', loadChildren: () => import('./books/books.module').then(m => m.BooksModule), data: {
+ routes: {
+ name: 'Books',
+ } as ABP.Route,
+ }, },
{
path: 'account',
loadChildren: () => import('./lazy-libs/account-wrapper.module').then(m => m.AccountWrapperModule),
@@ -33,6 +38,7 @@ const routes: Routes = [
data: { routes: TENANT_MANAGEMENT_ROUTES },
},
{ path: '**', redirectTo: '/' },
+
];
@NgModule({
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/app.module.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/app.module.ts
index a0dcd98c76..fe0603df3c 100644
--- a/samples/BookStore-Angular-MongoDb/angular/src/app/app.module.ts
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/app.module.ts
@@ -11,12 +11,15 @@ import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { SharedModule } from './shared/shared.module';
import { ThemeSharedModule } from '@abp/ng.theme.shared';
+import { BooksState } from './store/states/books.state';
+import { HttpClientModule } from '@angular/common/http';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
BrowserAnimationsModule,
+ HttpClientModule,
AppRoutingModule,
SharedModule,
ThemeSharedModule.forRoot(),
@@ -27,7 +30,7 @@ import { ThemeSharedModule } from '@abp/ng.theme.shared';
},
}),
OAuthModule.forRoot(),
- NgxsModule.forRoot([]),
+ NgxsModule.forRoot([BooksState, ]),
NgxsReduxDevtoolsPluginModule.forRoot({ disabled: environment.production }),
],
providers: [],
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/books/books-routing.module.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books-routing.module.ts
new file mode 100644
index 0000000000..429ac255aa
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books-routing.module.ts
@@ -0,0 +1,19 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { BooksComponent } from './books.component';
+import { LayoutApplicationComponent } from '@abp/ng.theme.basic';
+
+const routes: Routes = [
+ {
+ path: '',
+ component: LayoutApplicationComponent,
+ children: [{ path: '', component: BooksComponent }],
+ },
+];
+
+@NgModule({
+ imports: [RouterModule.forChild(routes)],
+ exports: [RouterModule]
+})
+export class BooksRoutingModule { }
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.html b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.html
new file mode 100644
index 0000000000..c83bc50050
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.html
@@ -0,0 +1 @@
+
books works!
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.scss b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.scss
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.spec.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.spec.ts
new file mode 100644
index 0000000000..13067baba9
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { BooksComponent } from './books.component';
+
+describe('BooksComponent', () => {
+ let component: BooksComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [ BooksComponent ]
+ })
+ .compileComponents();
+ }));
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(BooksComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.ts
new file mode 100644
index 0000000000..5514fc6ad6
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.component.ts
@@ -0,0 +1,13 @@
+import { Component, OnInit } from "@angular/core";
+import { Store } from "@ngxs/store";
+
+@Component({
+ selector: "app-books",
+ templateUrl: "./books.component.html",
+ styleUrls: ["./books.component.scss"]
+})
+export class BooksComponent implements OnInit {
+ constructor(private store: Store) {}
+
+ ngOnInit() {}
+}
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.module.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.module.ts
new file mode 100644
index 0000000000..07fd3b1b5c
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/books/books.module.ts
@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+import { BooksRoutingModule } from './books-routing.module';
+import { BooksComponent } from './books.component';
+import { SharedModule } from '../shared/shared.module';
+
+
+@NgModule({
+ declarations: [BooksComponent],
+ imports: [
+ CommonModule,
+ BooksRoutingModule,
+ SharedModule
+ ]
+})
+export class BooksModule { }
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/shared/services/books.service.spec.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/shared/services/books.service.spec.ts
new file mode 100644
index 0000000000..40950f51ae
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/shared/services/books.service.spec.ts
@@ -0,0 +1,12 @@
+import { TestBed } from '@angular/core/testing';
+
+import { BooksService } from './books.service';
+
+describe('BooksService', () => {
+ beforeEach(() => TestBed.configureTestingModule({}));
+
+ it('should be created', () => {
+ const service: BooksService = TestBed.get(BooksService);
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/shared/services/books.service.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/shared/services/books.service.ts
new file mode 100644
index 0000000000..7a893888c1
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/shared/services/books.service.ts
@@ -0,0 +1,15 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { environment } from 'src/environments/environment';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class BooksService {
+
+ constructor(private http: HttpClient) { }
+
+ get() {
+ return this.http.get(`${environment.apis.default.url}/app/book`)
+ }
+}
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/store/actions/books.actions.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/store/actions/books.actions.ts
new file mode 100644
index 0000000000..91aec20790
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/store/actions/books.actions.ts
@@ -0,0 +1,4 @@
+export class BooksGet {
+ static readonly type = '[Books] Get';
+ constructor(public readonly payload?: any) { }
+}
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/store/actions/index.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/store/actions/index.ts
new file mode 100644
index 0000000000..7cb6b259a1
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/store/actions/index.ts
@@ -0,0 +1 @@
+export * from './books.actions';
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/store/models/books.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/store/models/books.ts
new file mode 100644
index 0000000000..b694d6ccbc
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/store/models/books.ts
@@ -0,0 +1,5 @@
+export namespace Books {
+ export interface State {
+ data: any;
+ }
+}
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/store/models/index.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/store/models/index.ts
new file mode 100644
index 0000000000..dfe4aa9053
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/store/models/index.ts
@@ -0,0 +1 @@
+export * from './books';
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/store/states/books.state.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/store/states/books.state.ts
new file mode 100644
index 0000000000..066bfa2faf
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/store/states/books.state.ts
@@ -0,0 +1,27 @@
+import { State, Action, StateContext } from "@ngxs/store";
+import { BooksGet } from "../actions/books.actions";
+import { Books } from "../models/books";
+import { BooksService } from "src/app/shared/services/books.service";
+import { tap } from "rxjs/operators";
+
+@State({
+ name: "BooksState",
+ defaults: {} as Books.State
+})
+export class BooksState {
+ constructor(private booksService: BooksService) {}
+
+ @Action(BooksGet)
+ booksAction(
+ { getState, patchState }: StateContext,
+ { payload }: BooksGet
+ ) {
+ return this.booksService.get().pipe(
+ tap(data => {
+ patchState({
+ data
+ });
+ })
+ );
+ }
+}
diff --git a/samples/BookStore-Angular-MongoDb/angular/src/app/store/states/index.ts b/samples/BookStore-Angular-MongoDb/angular/src/app/store/states/index.ts
new file mode 100644
index 0000000000..8aca5a90f7
--- /dev/null
+++ b/samples/BookStore-Angular-MongoDb/angular/src/app/store/states/index.ts
@@ -0,0 +1 @@
+export * from "./books.state";