diff --git a/barker/routes.py b/barker/routes.py index b8e2303..644bcb7 100644 --- a/barker/routes.py +++ b/barker/routes.py @@ -87,11 +87,11 @@ def includeme(config): config.add_route('users_id', '/users/{id}') config.add_route('v1_roles_new', '/v1/roles/new') - config.add_route('v1_roles_list', '/v1/roles/list') config.add_route('v1_roles_id', '/v1/roles/{id}') + config.add_route('v1_roles_list', '/v1/roles') config.add_route('roles_new', '/roles/new') - config.add_route('roles_list', '/roles/list') config.add_route('roles_id', '/roles/{id}') + config.add_route('roles_list', '/roles') config.add_route('v1_guest_book_new', '/v1/guest-book/new') config.add_route('v1_guest_book_list', '/v1/guest-book/list') diff --git a/barker/views/role.py b/barker/views/role.py index 2532d03..6b38d09 100644 --- a/barker/views/role.py +++ b/barker/views/role.py @@ -7,7 +7,7 @@ from pyramid.view import view_config from barker.models import Permission, Role -@view_config(request_method='PUT', route_name='v1_roles_new', renderer='json', permission='Users', trans=True) +@view_config(request_method='POST', route_name='v1_roles_new', renderer='json', permission='Users', trans=True) def save(request): item = Role(request.json_body['name']) request.dbsession.add(item) @@ -18,7 +18,7 @@ def save(request): return role_info(item, permissions) -@view_config(request_method='POST', route_name='v1_roles_id', renderer='json', permission='Users', trans=True) +@view_config(request_method='PUT', route_name='v1_roles_id', renderer='json', permission='Users', trans=True) def update(request): id_ = request.matchdict['id'] item = request.dbsession.query(Role).filter(Role.id == uuid.UUID(id_)).one() diff --git a/bookie/src/app/app-routing.module.ts b/bookie/src/app/app-routing.module.ts index 8733fe8..16d4800 100644 --- a/bookie/src/app/app-routing.module.ts +++ b/bookie/src/app/app-routing.module.ts @@ -21,6 +21,10 @@ const routes: Routes = [ path: 'product-groups', loadChildren: () => import('./product-group/product-groups.module').then(mod => mod.ProductGroupsModule) }, + { + path: 'roles', + loadChildren: () => import('./roles/roles.module').then(mod => mod.RolesModule) + }, { path: 'running-tables', loadChildren: () => import('./running-tables/running-tables.module').then(mod => mod.RunningTablesModule) diff --git a/bookie/src/app/app.module.ts b/bookie/src/app/app.module.ts index 808323d..1c74faa 100644 --- a/bookie/src/app/app.module.ts +++ b/bookie/src/app/app.module.ts @@ -22,7 +22,6 @@ import {CoreModule} from "./core/core.module"; import {ReactiveFormsModule} from "@angular/forms"; import {SharedModule} from "./shared/shared.module"; import {UserModule} from "./user/user.module"; -import {RoleModule} from "./role/role.module"; @NgModule({ declarations: [ @@ -49,7 +48,6 @@ import {RoleModule} from "./role/role.module"; ReactiveFormsModule, CoreModule, SharedModule, - RoleModule, UserModule ], providers: [], diff --git a/bookie/src/app/bills/bill-resolver.service.ts b/bookie/src/app/bills/bill-resolver.service.ts new file mode 100644 index 0000000..6af8e97 --- /dev/null +++ b/bookie/src/app/bills/bill-resolver.service.ts @@ -0,0 +1,18 @@ +import {Injectable} from '@angular/core'; +import {ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot} from '@angular/router'; +import {Observable} from 'rxjs/internal/Observable'; +import {Table} from "../core/table"; +import {TableService} from "../tables/table.service"; + +@Injectable({ + providedIn: 'root' +}) +export class BillResolver implements Resolve { + + constructor(private ser: TableService, private router: Router) { + } + + resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + return this.ser.list(); + } +} diff --git a/bookie/src/app/bills/bills-routing.module.ts b/bookie/src/app/bills/bills-routing.module.ts new file mode 100644 index 0000000..41fa490 --- /dev/null +++ b/bookie/src/app/bills/bills-routing.module.ts @@ -0,0 +1,40 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { AuthGuard } from "../auth/auth-guard.service"; +import { BillsComponent } from "./bills.component"; +import { BillResolver } from "./bill-resolver.service"; + +const routes: Routes = [ + { + path: 'new', + component: BillsComponent, + canActivate: [AuthGuard], + data: { + permission: 'Guest Book' + }, + resolve: { + list: BillResolver + } + }, + { + path: ':id', + component: BillsComponent, + canActivate: [AuthGuard], + data: { + permission: 'Guest Book' + }, + resolve: { + item: BillResolver + } + } +]; + +@NgModule({ + declarations: [], + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], + providers: [ + BillResolver + ] +}) +export class BillsRoutingModule { } diff --git a/bookie/src/app/bills/bills.component.css b/bookie/src/app/bills/bills.component.css new file mode 100644 index 0000000..f4d909a --- /dev/null +++ b/bookie/src/app/bills/bills.component.css @@ -0,0 +1,10 @@ +.kot { + background-color: red; + font-weight: bold; +} + +.square-button { + min-width: 150px; + max-width: 150px; + min-height: 150px; +} diff --git a/bookie/src/app/bills/bills.component.html b/bookie/src/app/bills/bills.component.html new file mode 100644 index 0000000..618e836 --- /dev/null +++ b/bookie/src/app/bills/bills.component.html @@ -0,0 +1,15 @@ + + + Bill + + + + + + {{row.info}} + + + + + + diff --git a/bookie/src/app/bills/bills.component.spec.ts b/bookie/src/app/bills/bills.component.spec.ts new file mode 100644 index 0000000..3a37cee --- /dev/null +++ b/bookie/src/app/bills/bills.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BillsComponent } from './bills.component'; + +describe('BillsComponent', () => { + let component: BillsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ BillsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(BillsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/bookie/src/app/bills/bills.component.ts b/bookie/src/app/bills/bills.component.ts new file mode 100644 index 0000000..f977c65 --- /dev/null +++ b/bookie/src/app/bills/bills.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from "@angular/router"; +import { Table } from "../core/table"; + +@Component({ + selector: 'app-bills', + templateUrl: './bills.component.html', + styleUrls: ['./bills.component.css'] +}) +export class BillsComponent implements OnInit { + list: Table[]; + + constructor(private route: ActivatedRoute) { + } + + ngOnInit() { + this.route.data + .subscribe((data: { list: Table[] }) => { + this.list = data.list; + }); + } +} diff --git a/bookie/src/app/bills/bills.module.ts b/bookie/src/app/bills/bills.module.ts new file mode 100644 index 0000000..a16d5c3 --- /dev/null +++ b/bookie/src/app/bills/bills.module.ts @@ -0,0 +1,22 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { BillsRoutingModule } from './bills-routing.module'; +import { BillsComponent } from './bills.component'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatTableModule } from '@angular/material/table'; +import { FlexLayoutModule } from '@angular/flex-layout'; + +@NgModule({ + declarations: [BillsComponent], + imports: [ + CommonModule, + FlexLayoutModule, + MatButtonModule, + MatCardModule, + MatTableModule, + BillsRoutingModule + ] +}) +export class BillsModule { } diff --git a/bookie/src/app/home/home.component.html b/bookie/src/app/home/home.component.html index 5b387c5..a0faf26 100644 --- a/bookie/src/app/home/home.component.html +++ b/bookie/src/app/home/home.component.html @@ -19,6 +19,9 @@ Taxes + + Roles + account_box Logout {{name}} diff --git a/bookie/src/app/role/role-list/role-list-datasource.ts b/bookie/src/app/role/role-list/role-list-datasource.ts deleted file mode 100644 index 8d7a833..0000000 --- a/bookie/src/app/role/role-list/role-list-datasource.ts +++ /dev/null @@ -1,59 +0,0 @@ -import {DataSource} from '@angular/cdk/collections'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatSort } from '@angular/material/sort'; -import {map} from 'rxjs/operators'; -import {merge, Observable, of as observableOf} from 'rxjs'; -import {Role} from '../role'; - -export class RoleListDataSource extends DataSource { - - constructor(private paginator: MatPaginator, private sort: MatSort, public data: Role[]) { - super(); - } - - connect(): Observable { - const dataMutations = [ - observableOf(this.data), - this.paginator.page, - this.sort.sortChange - ]; - - // Set the paginators length - this.paginator.length = this.data.length; - - return merge(...dataMutations).pipe(map(() => { - return this.getPagedData(this.getSortedData([...this.data])); - })); - } - - disconnect() { - } - - private getPagedData(data: Role[]) { - const startIndex = this.paginator.pageIndex * this.paginator.pageSize; - return data.splice(startIndex, this.paginator.pageSize); - } - - private getSortedData(data: Role[]) { - if (!this.sort.active || this.sort.direction === '') { - return data; - } - - return data.sort((a, b) => { - const isAsc = this.sort.direction === 'asc'; - switch (this.sort.active) { - case 'name': - return compare(a.name, b.name, isAsc); - case 'id': - return compare(+a.id, +b.id, isAsc); - default: - return 0; - } - }); - } -} - -/** Simple sort comparator for example ID/Name columns (for user-side sorting). */ -function compare(a, b, isAsc) { - return (a < b ? -1 : 1) * (isAsc ? 1 : -1); -} diff --git a/bookie/src/app/role/role-detail/role-detail.component.css b/bookie/src/app/roles/role-detail/role-detail.component.css similarity index 100% rename from bookie/src/app/role/role-detail/role-detail.component.css rename to bookie/src/app/roles/role-detail/role-detail.component.css diff --git a/bookie/src/app/role/role-detail/role-detail.component.html b/bookie/src/app/roles/role-detail/role-detail.component.html similarity index 100% rename from bookie/src/app/role/role-detail/role-detail.component.html rename to bookie/src/app/roles/role-detail/role-detail.component.html diff --git a/bookie/src/app/roles/role-detail/role-detail.component.spec.ts b/bookie/src/app/roles/role-detail/role-detail.component.spec.ts new file mode 100644 index 0000000..9c216c1 --- /dev/null +++ b/bookie/src/app/roles/role-detail/role-detail.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {RoleDetailComponent} from './role-detail.component'; + +describe('RoleDetailComponent', () => { + let component: RoleDetailComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [RoleDetailComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RoleDetailComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/bookie/src/app/role/role-detail/role-detail.component.ts b/bookie/src/app/roles/role-detail/role-detail.component.ts similarity index 81% rename from bookie/src/app/role/role-detail/role-detail.component.ts rename to bookie/src/app/roles/role-detail/role-detail.component.ts index c3a782f..162ea79 100644 --- a/bookie/src/app/role/role-detail/role-detail.component.ts +++ b/bookie/src/app/roles/role-detail/role-detail.component.ts @@ -1,12 +1,11 @@ -import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core'; -import {ActivatedRoute, Router} from '@angular/router'; - -import {RoleService} from '../role.service'; -import {Role} from '../role'; -import {ToasterService} from '../../core/toaster.service'; -import {ConfirmDialogComponent} from '../../shared/confirm-dialog/confirm-dialog.component'; +import { AfterViewInit, Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { RoleService } from '../role.service'; +import { Role } from '../role'; +import { ToasterService } from '../../core/toaster.service'; +import { ConfirmDialogComponent } from '../../shared/confirm-dialog/confirm-dialog.component'; import { MatDialog } from '@angular/material/dialog'; -import {FormArray, FormBuilder, FormGroup} from '@angular/forms'; +import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; @Component({ selector: 'app-role-detail', @@ -62,7 +61,7 @@ export class RoleDetailComponent implements OnInit, AfterViewInit { .subscribe( (result) => { this.toaster.show('Success', ''); - this.router.navigateByUrl('/roles/list'); + this.router.navigateByUrl('/roles'); }, (error) => { this.toaster.show('Danger', error.error); @@ -75,7 +74,7 @@ export class RoleDetailComponent implements OnInit, AfterViewInit { .subscribe( (result) => { this.toaster.show('Success', ''); - this.router.navigateByUrl('/Roles'); + this.router.navigateByUrl('/roles'); }, (error) => { this.toaster.show('Danger', error.error); diff --git a/bookie/src/app/roles/role-list-resolver.service.spec.ts b/bookie/src/app/roles/role-list-resolver.service.spec.ts new file mode 100644 index 0000000..50794e6 --- /dev/null +++ b/bookie/src/app/roles/role-list-resolver.service.spec.ts @@ -0,0 +1,15 @@ +import {inject, TestBed} from '@angular/core/testing'; + +import {RoleListResolver} from './role-list-resolver.service'; + +describe('RoleListResolver', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [RoleListResolver] + }); + }); + + it('should be created', inject([RoleListResolver], (service: RoleListResolver) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/bookie/src/app/role/role-list-resolver.service.ts b/bookie/src/app/roles/role-list-resolver.service.ts similarity index 100% rename from bookie/src/app/role/role-list-resolver.service.ts rename to bookie/src/app/roles/role-list-resolver.service.ts diff --git a/bookie/src/app/roles/role-list/role-list-datasource.ts b/bookie/src/app/roles/role-list/role-list-datasource.ts new file mode 100644 index 0000000..8b95577 --- /dev/null +++ b/bookie/src/app/roles/role-list/role-list-datasource.ts @@ -0,0 +1,17 @@ +import { DataSource } from '@angular/cdk/collections'; +import { Observable, of as observableOf } from 'rxjs'; +import { Role } from '../role'; + +export class RoleListDataSource extends DataSource { + + constructor(public data: Role[]) { + super(); + } + + connect(): Observable { + return observableOf(this.data); + } + + disconnect() { + } +} diff --git a/bookie/src/app/role/role-list/role-list.component.css b/bookie/src/app/roles/role-list/role-list.component.css similarity index 100% rename from bookie/src/app/role/role-list/role-list.component.css rename to bookie/src/app/roles/role-list/role-list.component.css diff --git a/bookie/src/app/role/role-list/role-list.component.html b/bookie/src/app/roles/role-list/role-list.component.html similarity index 100% rename from bookie/src/app/role/role-list/role-list.component.html rename to bookie/src/app/roles/role-list/role-list.component.html diff --git a/bookie/src/app/roles/role-list/role-list.component.spec.ts b/bookie/src/app/roles/role-list/role-list.component.spec.ts new file mode 100644 index 0000000..4de7c52 --- /dev/null +++ b/bookie/src/app/roles/role-list/role-list.component.spec.ts @@ -0,0 +1,23 @@ +import {ComponentFixture, fakeAsync, TestBed} from '@angular/core/testing'; + +import {RoleListComponent} from './role-list.component'; + +describe('RoleListComponent', () => { + let component: RoleListComponent; + let fixture: ComponentFixture; + + beforeEach(fakeAsync(() => { + TestBed.configureTestingModule({ + declarations: [RoleListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(RoleListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should compile', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/bookie/src/app/role/role-list/role-list.component.ts b/bookie/src/app/roles/role-list/role-list.component.ts similarity index 51% rename from bookie/src/app/role/role-list/role-list.component.ts rename to bookie/src/app/roles/role-list/role-list.component.ts index bfd1621..4a503fd 100644 --- a/bookie/src/app/role/role-list/role-list.component.ts +++ b/bookie/src/app/roles/role-list/role-list.component.ts @@ -1,9 +1,7 @@ -import {Component, OnInit, ViewChild} from '@angular/core'; -import { MatPaginator } from '@angular/material/paginator'; -import { MatSort } from '@angular/material/sort'; -import {RoleListDataSource} from './role-list-datasource'; -import {Role} from '../role'; -import {ActivatedRoute} from '@angular/router'; +import { Component, OnInit } from '@angular/core'; +import { RoleListDataSource } from './role-list-datasource'; +import { Role } from '../role'; +import { ActivatedRoute } from '@angular/router'; @Component({ selector: 'app-role-list', @@ -11,8 +9,6 @@ import {ActivatedRoute} from '@angular/router'; styleUrls: ['./role-list.component.css'] }) export class RoleListComponent implements OnInit { - @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; - @ViewChild(MatSort, { static: true }) sort: MatSort; dataSource: RoleListDataSource; list: Role[]; /** Columns displayed in the table. Columns IDs can be added, removed, or reordered. */ @@ -26,6 +22,6 @@ export class RoleListComponent implements OnInit { .subscribe((data: { list: Role[] }) => { this.list = data.list; }); - this.dataSource = new RoleListDataSource(this.paginator, this.sort, this.list); + this.dataSource = new RoleListDataSource(this.list); } } diff --git a/bookie/src/app/roles/role-resolver.service.spec.ts b/bookie/src/app/roles/role-resolver.service.spec.ts new file mode 100644 index 0000000..02f06ff --- /dev/null +++ b/bookie/src/app/roles/role-resolver.service.spec.ts @@ -0,0 +1,15 @@ +import {inject, TestBed} from '@angular/core/testing'; + +import {RoleResolver} from './role-resolver.service'; + +describe('RoleResolver', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [RoleResolver] + }); + }); + + it('should be created', inject([RoleResolver], (service: RoleResolver) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/bookie/src/app/role/role-resolver.service.ts b/bookie/src/app/roles/role-resolver.service.ts similarity index 100% rename from bookie/src/app/role/role-resolver.service.ts rename to bookie/src/app/roles/role-resolver.service.ts diff --git a/bookie/src/app/roles/role.service.spec.ts b/bookie/src/app/roles/role.service.spec.ts new file mode 100644 index 0000000..8bfe235 --- /dev/null +++ b/bookie/src/app/roles/role.service.spec.ts @@ -0,0 +1,15 @@ +import {inject, TestBed} from '@angular/core/testing'; + +import {RoleService} from './role.service'; + +describe('RoleService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [RoleService] + }); + }); + + it('should be created', inject([RoleService], (service: RoleService) => { + expect(service).toBeTruthy(); + })); +}); diff --git a/bookie/src/app/role/role.service.ts b/bookie/src/app/roles/role.service.ts similarity index 77% rename from bookie/src/app/role/role.service.ts rename to bookie/src/app/roles/role.service.ts index bc9e575..cd5a3ee 100644 --- a/bookie/src/app/role/role.service.ts +++ b/bookie/src/app/roles/role.service.ts @@ -28,21 +28,29 @@ export class RoleService { list(): Observable { const options = {params: new HttpParams().set('l', '')}; - return >this.http.get(`${url}/list`, options) + return >this.http.get(url, options) + .pipe( + catchError(this.log.handleError(serviceName, 'list')) + ); + } + + listOfNames(): Observable { + const options = {params: new HttpParams().set('n', '')}; + return >this.http.get(url, options) .pipe( catchError(this.log.handleError(serviceName, 'list')) ); } save(role: Role): Observable { - return >this.http.put(`${url}/new`, role, httpOptions) + return >this.http.post(`${url}/new`, role, httpOptions) .pipe( catchError(this.log.handleError(serviceName, 'save')) ); } update(role: Role): Observable { - return >this.http.post(`${url}/${role.id}`, role, httpOptions) + return >this.http.put(`${url}/${role.id}`, role, httpOptions) .pipe( catchError(this.log.handleError(serviceName, 'update')) ); diff --git a/bookie/src/app/role/role.ts b/bookie/src/app/roles/role.ts similarity index 100% rename from bookie/src/app/role/role.ts rename to bookie/src/app/roles/role.ts diff --git a/bookie/src/app/roles/roles-routing.module.spec.ts b/bookie/src/app/roles/roles-routing.module.spec.ts new file mode 100644 index 0000000..ce0f799 --- /dev/null +++ b/bookie/src/app/roles/roles-routing.module.spec.ts @@ -0,0 +1,13 @@ +import { RolesRoutingModule } from './roles-routing.module'; + +describe('RolesRoutingModule', () => { + let rolesRoutingModule: RolesRoutingModule; + + beforeEach(() => { + rolesRoutingModule = new RolesRoutingModule(); + }); + + it('should create an instance', () => { + expect(rolesRoutingModule).toBeTruthy(); + }); +}); diff --git a/bookie/src/app/role/role-routing.module.ts b/bookie/src/app/roles/roles-routing.module.ts similarity index 91% rename from bookie/src/app/role/role-routing.module.ts rename to bookie/src/app/roles/roles-routing.module.ts index db0fc8c..6f0728c 100644 --- a/bookie/src/app/role/role-routing.module.ts +++ b/bookie/src/app/roles/roles-routing.module.ts @@ -9,7 +9,7 @@ import {AuthGuard} from '../auth/auth-guard.service'; const roleRoutes: Routes = [ { - path: 'roles/list', + path: '', component: RoleListComponent, canActivate: [AuthGuard], data: { @@ -20,7 +20,7 @@ const roleRoutes: Routes = [ } }, { - path: 'roles/new', + path: 'new', component: RoleDetailComponent, canActivate: [AuthGuard], data: { @@ -31,7 +31,7 @@ const roleRoutes: Routes = [ } }, { - path: 'roles/:id', + path: ':id', component: RoleDetailComponent, canActivate: [AuthGuard], data: { @@ -57,5 +57,5 @@ const roleRoutes: Routes = [ RoleResolver ] }) -export class RoleRoutingModule { +export class RolesRoutingModule { } diff --git a/bookie/src/app/roles/roles.module.spec.ts b/bookie/src/app/roles/roles.module.spec.ts new file mode 100644 index 0000000..4a8bd79 --- /dev/null +++ b/bookie/src/app/roles/roles.module.spec.ts @@ -0,0 +1,13 @@ +import { RolesModule } from './roles.module'; + +describe('RolesModule', () => { + let rolesModule: RolesModule; + + beforeEach(() => { + rolesModule = new RolesModule(); + }); + + it('should create an instance', () => { + expect(rolesModule).toBeTruthy(); + }); +}); diff --git a/bookie/src/app/role/role.module.ts b/bookie/src/app/roles/roles.module.ts similarity index 93% rename from bookie/src/app/role/role.module.ts rename to bookie/src/app/roles/roles.module.ts index efaf017..4605ed0 100644 --- a/bookie/src/app/role/role.module.ts +++ b/bookie/src/app/roles/roles.module.ts @@ -3,7 +3,7 @@ import {CommonModule} from '@angular/common'; import {RoleListComponent} from './role-list/role-list.component'; import {RoleDetailComponent} from './role-detail/role-detail.component'; -import {RoleRoutingModule} from './role-routing.module'; +import {RolesRoutingModule} from './roles-routing.module'; import { MatButtonModule } from '@angular/material/button'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; @@ -36,12 +36,12 @@ import {FlexLayoutModule} from '@angular/flex-layout'; MatTableModule, ReactiveFormsModule, SharedModule, - RoleRoutingModule + RolesRoutingModule ], declarations: [ RoleListComponent, RoleDetailComponent ] }) -export class RoleModule { +export class RolesModule { }