From deee043c669c7c03cc26379d21dc07ff11e1872e Mon Sep 17 00:00:00 2001 From: William Date: Fri, 13 May 2022 22:53:26 -0400 Subject: [PATCH] #30 Start group token dialog --- src/app/modules/accounts/accounts.module.ts | 9 ++- src/app/modules/accounts/group-token-add.html | 8 +++ src/app/modules/accounts/group-tokens.ts | 18 ++++++ .../accounts/services/group-token.service.ts | 26 ++++++++ src/app/modules/groups/group.module.ts | 10 ++- .../groups/pages/list/list.component.html | 53 ++++++++++++---- .../groups/pages/list/list.component.ts | 61 ++++++++++++------- .../modules/groups/services/group.service.ts | 20 +++--- src/app/modules/shared/model/account.model.ts | 7 +++ 9 files changed, 165 insertions(+), 47 deletions(-) create mode 100644 src/app/modules/accounts/group-token-add.html create mode 100644 src/app/modules/accounts/group-tokens.ts create mode 100644 src/app/modules/accounts/services/group-token.service.ts diff --git a/src/app/modules/accounts/accounts.module.ts b/src/app/modules/accounts/accounts.module.ts index 353042f..fbae01b 100644 --- a/src/app/modules/accounts/accounts.module.ts +++ b/src/app/modules/accounts/accounts.module.ts @@ -5,18 +5,23 @@ import {SharedModule} from '../shared/shared.module' import {Login, Logout} from './accounts' import {CreInputsModule} from '../shared/components/inputs/inputs.module' import {CreButtonsModule} from '../shared/components/buttons/buttons.module' +import {GroupTokenAdd} from "./group-tokens"; @NgModule({ declarations: [ Login, - Logout + Logout, + GroupTokenAdd + ], + exports: [ + GroupTokenAdd ], imports: [ SharedModule, AccountsRoutingModule, CreInputsModule, - CreButtonsModule, + CreButtonsModule ] }) export class AccountsModule { diff --git a/src/app/modules/accounts/group-token-add.html b/src/app/modules/accounts/group-token-add.html new file mode 100644 index 0000000..0dbc965 --- /dev/null +++ b/src/app/modules/accounts/group-token-add.html @@ -0,0 +1,8 @@ + + +
+ +
+
+
diff --git a/src/app/modules/accounts/group-tokens.ts b/src/app/modules/accounts/group-tokens.ts new file mode 100644 index 0000000..e4fa932 --- /dev/null +++ b/src/app/modules/accounts/group-tokens.ts @@ -0,0 +1,18 @@ +import {Component, ViewChild} from "@angular/core"; +import {CrePromptDialog} from "../shared/components/dialogs/dialogs"; +import {Group} from "../shared/model/account.model"; +import {FormControl, Validators} from "@angular/forms"; + +@Component({ + selector: 'cre-group-token-add', + templateUrl: 'group-token-add.html' +}) +export class GroupTokenAdd { + @ViewChild(CrePromptDialog) dialog: CrePromptDialog + + controls = {name: new FormControl(null, Validators.required)} + + show(group: Group) { + this.dialog.show() + } +} diff --git a/src/app/modules/accounts/services/group-token.service.ts b/src/app/modules/accounts/services/group-token.service.ts new file mode 100644 index 0000000..b6cc2ee --- /dev/null +++ b/src/app/modules/accounts/services/group-token.service.ts @@ -0,0 +1,26 @@ +import {Injectable} from "@angular/core"; +import {ApiService} from "../../shared/service/api.service"; +import {Observable} from "rxjs"; +import {GroupToken} from "../../shared/model/account.model"; + +@Injectable({ + providedIn: "root" +}) +export class GroupTokenService { + constructor( + private api: ApiService + ) { + } + + get all(): Observable { + return this.api.get('/account/group/token') + } + + get current(): Observable { + return this.api.get('/account/group/token/current') + } + + save(name: string): Observable { + return this.api.post('/account/group/token') + } +} diff --git a/src/app/modules/groups/group.module.ts b/src/app/modules/groups/group.module.ts index 7938a5b..e9fa649 100644 --- a/src/app/modules/groups/group.module.ts +++ b/src/app/modules/groups/group.module.ts @@ -5,13 +5,21 @@ import {ListComponent} from './pages/list/list.component'; import {SharedModule} from "../shared/shared.module"; import {AddComponent} from './pages/add/add.component'; import {EditComponent} from './pages/edit/edit.component'; +import {AccountsModule} from "../accounts/accounts.module"; +import {CreActionBarModule} from "../shared/components/action-bar/action-bar.module"; +import {CreButtonsModule} from "../shared/components/buttons/buttons.module"; +import {CreTablesModule} from "../shared/components/tables/tables.module"; @NgModule({ declarations: [ListComponent, AddComponent, EditComponent], imports: [ GroupRoutingModule, - SharedModule + SharedModule, + AccountsModule, + CreActionBarModule, + CreButtonsModule, + CreTablesModule ] }) export class GroupModule { } diff --git a/src/app/modules/groups/pages/list/list.component.html b/src/app/modules/groups/pages/list/list.component.html index 59ea8dc..506cd17 100644 --- a/src/app/modules/groups/pages/list/list.component.html +++ b/src/app/modules/groups/pages/list/list.component.html @@ -1,13 +1,42 @@ - - + + + Ajouter + + - - - + +

Il n'y a actuellement aucun groupe enregistré dans le système.

+

Vous pouvez en créer un ici.

+
+ + + + Nom + {{group.name}} + + + + Nombre de permissions + {{group.permissions.length}} + + + + + + + Définir par défaut + + + + + + + + + Modifier + + + + + + diff --git a/src/app/modules/groups/pages/list/list.component.ts b/src/app/modules/groups/pages/list/list.component.ts index ffeaf6f..b0a3d81 100644 --- a/src/app/modules/groups/pages/list/list.component.ts +++ b/src/app/modules/groups/pages/list/list.component.ts @@ -1,4 +1,4 @@ -import {Component} from '@angular/core' +import {Component, ViewChild} from '@angular/core' import {GroupService} from '../../services/group.service' import {Group, Permission} from '../../../shared/model/account.model' import {AccountService} from '../../../accounts/services/account.service' @@ -7,6 +7,8 @@ import {ActivatedRoute, Router} from '@angular/router' import {ErrorHandler, ErrorService} from '../../../shared/service/error.service' import {AlertService} from '../../../shared/service/alert.service' import {AppState} from '../../../shared/app-state' +import {GroupTokenService} from "../../../accounts/services/group-token.service"; +import {GroupTokenAdd} from "../../../accounts/group-tokens"; @Component({ selector: 'cre-groups', @@ -16,27 +18,34 @@ import {AppState} from '../../../shared/app-state' export class ListComponent extends ErrorHandlingComponent { groups$ = this.groupService.all defaultGroup: Group = null - columns = [ - {def: 'name', title: 'Nom', valueFn: g => g.name}, - {def: 'permissionCount', title: 'Nombre de permissions', valueFn: g => g.permissions.length} - ] - buttons = [{ - text: 'Définir par défaut', - clickFn: group => this.setDefaultGroup(group), - disabledFn: group => this.isDefaultGroup(group) - }, { - text: 'Modifier', - linkFn: group => `/admin/group/edit/${group.id}`, - permission: Permission.EDIT_USERS - }] + // columns = [ + // {def: 'name', title: 'Nom', valueFn: g => g.name}, + // {def: 'permissionCount', title: 'Nombre de permissions', valueFn: g => g.permissions.length} + // ] + // buttons = [{ + // text: 'Définir par défaut', + // clickFn: group => this.setDefaultGroup(group), + // disabledFn: group => this.isDefaultGroup(group) + // }, { + // text: 'Modifier', + // linkFn: group => `/admin/group/edit/${group.id}`, + // permission: Permission.EDIT_USERS + // }] + + groupsEmpty = false + + columns = ['name', 'permissionCount', 'setAsDefaultButton', 'editButton'] errorHandlers: ErrorHandler[] = [{ filter: error => error.type === 'nodefaultgroup', consumer: () => this.alertService.pushWarning('Aucun groupe par défaut n\'a été défini sur cet ordinateur') }] + @ViewChild(GroupTokenAdd) groupTokenDialog: GroupTokenAdd + constructor( private groupService: GroupService, + private groupTokenService: GroupTokenService, private accountService: AccountService, private alertService: AlertService, private appState: AppState, @@ -49,22 +58,30 @@ export class ListComponent extends ErrorHandlingComponent { } ngOnInit(): void { + // this.subscribe( + // this.groupService.defaultGroup, + // group => this.defaultGroup = group, + // true + // ) this.subscribe( - this.groupService.defaultGroup, - group => this.defaultGroup = group, - true + this.groupTokenService.current, + token => console.info(token) ) } setDefaultGroup(group: Group) { - this.subscribe( - this.groupService.setDefaultGroup(group), - () => this.defaultGroup = group, - true - ) + this.groupTokenDialog.show(group) } isDefaultGroup(group: Group): boolean { return this.defaultGroup && this.defaultGroup.id == group.id } + + get hasEditPermission(): boolean { + return this.accountService.hasPermission(Permission.EDIT_USERS) + } + + get hasAdminPermission(): boolean { + return this.accountService.hasPermission(Permission.ADMIN) + } } diff --git a/src/app/modules/groups/services/group.service.ts b/src/app/modules/groups/services/group.service.ts index cf42f02..cbf5821 100644 --- a/src/app/modules/groups/services/group.service.ts +++ b/src/app/modules/groups/services/group.service.ts @@ -14,7 +14,7 @@ export class GroupService { } get all(): Observable { - return this.api.get('/user/group') + return this.api.get('/account/group') } get allWithDefault(): Observable { @@ -27,40 +27,40 @@ export class GroupService { } getById(id: number): Observable { - return this.api.get(`/user/group/${id}`) + return this.api.get(`/account/group/${id}`) } get defaultGroup(): Observable { - return this.api.get('/user/group/default') + return this.api.get('/account/group/default') } setDefaultGroup(value: Group): Observable { - return this.api.post(`/user/group/default/${value.id}`, {}) + return this.api.post(`/account/group/default/${value.id}`, {}) } getUsersForGroup(id: number): Observable { - return this.api.get(`/user/group/${id}/users`) + return this.api.get(`/account/group/${id}/users`) } addUserToGroup(id: number, user: AccountModel): Observable { - return this.api.put(`/user/group/${id}/${user.id}`) + return this.api.put(`/account/group/${id}/${user.id}`) } removeUserFromGroup(user: AccountModel): Observable { - return this.api.delete(`/user/group/${user.group.id}/${user.id}`) + return this.api.delete(`/account/group/${user.group.id}/${user.id}`) } save(name: string, permissions: Permission[]): Observable { const group = {name, permissions} - return this.api.post('/user/group', group) + return this.api.post('/account/group', group) } update(id: number, name: string, permissions: Permission[]): Observable { const group = {id, name, permissions} - return this.api.put('/user/group', group) + return this.api.put('/account/group', group) } delete(id: number): Observable { - return this.api.delete(`/user/group/${id}`) + return this.api.delete(`/account/group/${id}`) } } diff --git a/src/app/modules/shared/model/account.model.ts b/src/app/modules/shared/model/account.model.ts index 4eebe51..60aa354 100644 --- a/src/app/modules/shared/model/account.model.ts +++ b/src/app/modules/shared/model/account.model.ts @@ -28,6 +28,13 @@ export class Group { } } +export interface GroupToken { + id: string, + name: string, + enabled: boolean, + groupId: Group +} + export enum Permission { VIEW_RECIPES = 'VIEW_RECIPES', VIEW_USERS = 'VIEW_USERS',