From 01877f835106d338a6edb84a663a3ccfa6bce707 Mon Sep 17 00:00:00 2001 From: rubikscraft Date: Thu, 24 Mar 2022 00:17:26 +0100 Subject: [PATCH] add roles view part --- .../components/footer/footer.component.scss | 2 +- .../roles/settings-roles.component.html | 82 +++++++++++++++++++ .../roles/settings-roles.component.scss | 21 +++++ .../roles/settings-roles.component.ts | 62 +++++++++++++- .../settings/roles/settings-roles.module.ts | 10 +++ .../settings-syspref-option.component.html | 2 + .../settings-users-edit.component.html | 12 ++- .../users/settings-users.component.html | 17 +++- .../users/settings-users.component.scss | 4 + .../users/settings-users.component.ts | 1 + .../routes/user/login/login.component.html | 2 + .../user/register/register.component.html | 2 + shared/src/dto/permissions.ts | 6 +- 13 files changed, 211 insertions(+), 12 deletions(-) create mode 100644 frontend/src/app/routes/settings/roles/settings-roles.component.scss diff --git a/frontend/src/app/components/footer/footer.component.scss b/frontend/src/app/components/footer/footer.component.scss index db08325..2416d2b 100644 --- a/frontend/src/app/components/footer/footer.component.scss +++ b/frontend/src/app/components/footer/footer.component.scss @@ -14,5 +14,5 @@ span.line { .heart { font-size: 22px; - translate: 0 25%; + transform: translate(0, 25%); } diff --git a/frontend/src/app/routes/settings/roles/settings-roles.component.html b/frontend/src/app/routes/settings/roles/settings-roles.component.html index c3eecb7..42a708d 100644 --- a/frontend/src/app/routes/settings/roles/settings-roles.component.html +++ b/frontend/src/app/routes/settings/roles/settings-roles.component.html @@ -1,2 +1,84 @@

Roles

+ + + Name + {{ role.name }} + + + + Permissions + + + + System + + + {{ uiFriendlyPermission(permission) }} + + + +{{ role.permissions.length - permissionsTruncate }} + + + + + + + Actions + + + + + + + + + + + + + +
+ +
diff --git a/frontend/src/app/routes/settings/roles/settings-roles.component.scss b/frontend/src/app/routes/settings/roles/settings-roles.component.scss new file mode 100644 index 0000000..67c6177 --- /dev/null +++ b/frontend/src/app/routes/settings/roles/settings-roles.component.scss @@ -0,0 +1,21 @@ +mat-table { + width: 100%; + +} + +.mat-column-actions { + justify-content: end; +} + +.mat-column-permissions { + flex-grow: 3; +} + +.icon-red { + color: #f44336; +} + +mat-chip-list { + margin-top: 8px; + margin-bottom: 8px; +} diff --git a/frontend/src/app/routes/settings/roles/settings-roles.component.ts b/frontend/src/app/routes/settings/roles/settings-roles.component.ts index 1bae3af..8ea98ff 100644 --- a/frontend/src/app/routes/settings/roles/settings-roles.component.ts +++ b/frontend/src/app/routes/settings/roles/settings-roles.component.ts @@ -1,12 +1,68 @@ -import { Component, OnInit } from '@angular/core'; +import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatTableDataSource } from '@angular/material/table'; +import { + Permission, + UIFriendlyPermissions +} from 'picsur-shared/dist/dto/permissions'; +import { ERole } from 'picsur-shared/dist/entities/role.entity'; +import { HasFailed } from 'picsur-shared/dist/types'; +import { SnackBarType } from 'src/app/models/snack-bar-type'; +import { RolesService } from 'src/app/services/api/roles.service'; +import { UtilService } from 'src/app/util/util.service'; @Component({ templateUrl: './settings-roles.component.html', + styleUrls: ['./settings-roles.component.scss'], }) -export class SettingsRolesComponent implements OnInit { - constructor() {} +export class SettingsRolesComponent implements OnInit, AfterViewInit { + public readonly displayedColumns: string[] = [ + 'name', + 'permissions', + 'actions', + ]; + public readonly pageSizeOptions: number[] = [5, 10, 25, 100]; + public readonly startingPageSize = this.pageSizeOptions[2]; + public readonly permissionsTruncate = 5; + + public dataSource = new MatTableDataSource([]); + + @ViewChild(MatPaginator) paginator: MatPaginator; + + constructor( + private rolesService: RolesService, + private utilService: UtilService + ) {} ngOnInit(): void { + this.initRoles().catch(console.error); } + ngAfterViewInit() { + this.dataSource.paginator = this.paginator; + } + + async initRoles() { + const roles = await this.rolesService.getRoles(); + if (HasFailed(roles)) { + this.utilService.showSnackBar('Failed to load roles', SnackBarType.Error); + return; + } + + this.dataSource.data = roles; + } + + addRole() {} + + editRole(role: ERole) {} + + deleteRole(role: ERole) {} + + uiFriendlyPermission(permission: Permission) { + return UIFriendlyPermissions[permission]; + } + + isSystem(role: ERole) { + return false; + } } diff --git a/frontend/src/app/routes/settings/roles/settings-roles.module.ts b/frontend/src/app/routes/settings/roles/settings-roles.module.ts index 6140e66..bd53855 100644 --- a/frontend/src/app/routes/settings/roles/settings-roles.module.ts +++ b/frontend/src/app/routes/settings/roles/settings-roles.module.ts @@ -1,5 +1,10 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatChipsModule } from '@angular/material/chips'; +import { MatIconModule } from '@angular/material/icon'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatTableModule } from '@angular/material/table'; import { SettingsRolesComponent } from './settings-roles.component'; import { SettingsRolesRoutingModule } from './settings-roles.routing.module'; @@ -8,6 +13,11 @@ import { SettingsRolesRoutingModule } from './settings-roles.routing.module'; imports: [ CommonModule, SettingsRolesRoutingModule, + MatIconModule, + MatButtonModule, + MatTableModule, + MatChipsModule, + MatPaginatorModule, ], }) export class SettingsRolesRouteModule {} diff --git a/frontend/src/app/routes/settings/syspref/syspref-option/settings-syspref-option.component.html b/frontend/src/app/routes/settings/syspref/syspref-option/settings-syspref-option.component.html index 8c48d1a..b22d974 100644 --- a/frontend/src/app/routes/settings/syspref/syspref-option/settings-syspref-option.component.html +++ b/frontend/src/app/routes/settings/syspref/syspref-option/settings-syspref-option.component.html @@ -9,6 +9,8 @@ matInput [value]="pref.value" (change)="stringUpdateWrapper($event)" + autocorrect="off" + autocapitalize="none" /> diff --git a/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.html b/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.html index 0f5ee46..152ee8c 100644 --- a/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.html +++ b/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.html @@ -22,6 +22,8 @@ type="text" [formControl]="model.username" name="username" + autocorrect="off" + autocapitalize="none" required /> @@ -74,6 +76,8 @@ [matChipInputFor]="chipList" [matChipInputSeparatorKeyCodes]="separatorKeysCodes" (matChipInputTokenEnd)="addRole($event)" + autocorrect="off" + autocapitalize="none" /> - diff --git a/frontend/src/app/routes/settings/users/settings-users.component.html b/frontend/src/app/routes/settings/users/settings-users.component.html index 3a71499..caa4713 100644 --- a/frontend/src/app/routes/settings/users/settings-users.component.html +++ b/frontend/src/app/routes/settings/users/settings-users.component.html @@ -7,8 +7,8 @@ - Roles - + Roles + System - + {{ role }} + + +{{ user.roles.length - rolesTruncate }} + @@ -48,7 +57,7 @@ - pog + ([]); public updateSubject = new Subject(); diff --git a/frontend/src/app/routes/user/login/login.component.html b/frontend/src/app/routes/user/login/login.component.html index fa1eae2..5d5fcf1 100644 --- a/frontend/src/app/routes/user/login/login.component.html +++ b/frontend/src/app/routes/user/login/login.component.html @@ -17,6 +17,8 @@ type="text" [formControl]="model.username" name="username" + autocorrect="off" + autocapitalize="none" required /> diff --git a/frontend/src/app/routes/user/register/register.component.html b/frontend/src/app/routes/user/register/register.component.html index df13d6e..d753b74 100644 --- a/frontend/src/app/routes/user/register/register.component.html +++ b/frontend/src/app/routes/user/register/register.component.html @@ -15,6 +15,8 @@ type="text" [formControl]="model.username" name="username" + autocorrect="off" + autocapitalize="none" required /> diff --git a/shared/src/dto/permissions.ts b/shared/src/dto/permissions.ts index 12fa406..4b3c01d 100644 --- a/shared/src/dto/permissions.ts +++ b/shared/src/dto/permissions.ts @@ -35,12 +35,12 @@ export const UIFriendlyPermissions: { [Permission.ImageUpload]: 'Upload images', [Permission.UserLogin]: 'Login', - [Permission.UserMe]: 'View own user details', + [Permission.UserMe]: 'View self', [Permission.UserRegister]: 'Register', - [Permission.Settings]: 'View available settings', + [Permission.Settings]: 'View settings', [Permission.UserManage]: 'Manage users', [Permission.RoleManage]: 'Manage roles', - [Permission.SysPrefManage]: 'Manage system preferences', + [Permission.SysPrefManage]: 'Manage system', };