diff --git a/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.scss b/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.scss
new file mode 100644
index 0000000..c7acb4b
--- /dev/null
+++ b/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.scss
@@ -0,0 +1,3 @@
+mat-form-field {
+ width: 100%;
+}
diff --git a/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.ts b/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.ts
index 7b9c4b3..b8a4c62 100644
--- a/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.ts
+++ b/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.ts
@@ -14,6 +14,7 @@ enum EditMode {
@Component({
selector: 'app-settings-roles-edit',
templateUrl: './settings-roles-edit.component.html',
+ styleUrls: ['./settings-roles-edit.component.scss'],
})
export class SettingsRolesEditComponent implements OnInit {
private mode: EditMode = EditMode.edit;
diff --git a/frontend/src/app/routes/settings/settings.module.ts b/frontend/src/app/routes/settings/settings.module.ts
index babf072..b87d77c 100644
--- a/frontend/src/app/routes/settings/settings.module.ts
+++ b/frontend/src/app/routes/settings/settings.module.ts
@@ -1,5 +1,5 @@
import { CommonModule } from '@angular/common';
-import { Injector, NgModule } from '@angular/core';
+import { NgModule } from '@angular/core';
import { MatIconModule } from '@angular/material/icon';
import { MatListModule } from '@angular/material/list';
import { SettingsRoutingModule } from './settings.routing.module';
@@ -15,6 +15,4 @@ import { SettingsSidebarComponent } from './sidebar/settings-sidebar.component';
],
exports: [SettingsRoutingModule],
})
-export class SettingsRouteModule {
- constructor(private injector: Injector) {}
-}
+export class SettingsRouteModule {}
diff --git a/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.scss b/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.scss
index 0779a03..c7acb4b 100644
--- a/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.scss
+++ b/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.scss
@@ -1,3 +1,3 @@
-values-picker {
+mat-form-field {
width: 100%;
}
diff --git a/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.ts b/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.ts
index 900654b..081f630 100644
--- a/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.ts
+++ b/frontend/src/app/routes/settings/users/settings-users-edit/settings-users-edit.component.ts
@@ -47,12 +47,17 @@ export class SettingsUsersEditComponent implements OnInit {
) {}
ngOnInit() {
- Promise.all([this.initUser(), this.initRoles()]).catch(console.error);
+ Promise.all([
+ this.initUser(),
+ this.initRoles(),
+ this.initImmutableUsersList(),
+ ]).catch(console.error);
}
private async initUser() {
const username = this.route.snapshot.paramMap.get('username');
+ // Get special roles
const SpecialRoles = await this.rolesService.getSpecialRoles();
if (HasFailed(SpecialRoles)) {
this.utilService.showSnackBar(
@@ -61,9 +66,9 @@ export class SettingsUsersEditComponent implements OnInit {
);
return;
}
-
this.soulBoundRoles = SpecialRoles.SoulBoundRoles;
+ // Check if edit or add
if (!username) {
this.mode = EditMode.add;
@@ -71,21 +76,33 @@ export class SettingsUsersEditComponent implements OnInit {
return;
}
+ // Set known data
this.mode = EditMode.edit;
this.model.putUsername(username);
+ // Fetch more data
const user = await this.userManageService.getUser(username);
if (HasFailed(user)) {
this.utilService.showSnackBar('Failed to get user', SnackBarType.Error);
return;
}
+ // Set that data instead
this.model.putUsername(user.username);
this.model.putRoles(user.roles);
+ }
- const { ImmutableUsersList } =
- await this.userManageService.getSpecialRolesOptimistic();
- this.ImmutableUsersList = ImmutableUsersList;
+ private async initImmutableUsersList() {
+ const SpecialUsers = await this.userManageService.getSpecialUsers();
+ if (HasFailed(SpecialUsers)) {
+ this.utilService.showSnackBar(
+ 'Failed to get special users',
+ SnackBarType.Error
+ );
+ return;
+ }
+
+ this.ImmutableUsersList = SpecialUsers.ImmutableUsersList;
}
private async initRoles() {
diff --git a/frontend/src/app/routes/upload/upload.component.html b/frontend/src/app/routes/upload/upload.component.html
index 157b244..db647ec 100644
--- a/frontend/src/app/routes/upload/upload.component.html
+++ b/frontend/src/app/routes/upload/upload.component.html
@@ -1,12 +1,12 @@
-
+
Upload Image
Drag and drop an image here, or click to select an image
-
+
Please Log In
You do not yet have permission to upload
diff --git a/frontend/src/app/routes/upload/upload.component.ts b/frontend/src/app/routes/upload/upload.component.ts
index f990869..f3ae7a1 100644
--- a/frontend/src/app/routes/upload/upload.component.ts
+++ b/frontend/src/app/routes/upload/upload.component.ts
@@ -3,6 +3,7 @@ import { Router } from '@angular/router';
import { AutoUnsubscribe } from 'ngx-auto-unsubscribe-decorator';
import { NgxDropzoneChangeEvent } from 'ngx-dropzone';
import { Permission } from 'picsur-shared/dist/dto/permissions.dto';
+import { debounceTime } from 'rxjs';
import { PermissionService } from 'src/app/services/api/permission.service';
import { UtilService } from 'src/app/util/util.service';
import { ProcessingViewMetadata } from '../../models/dto/processing-view-metadata.dto';
@@ -12,12 +13,7 @@ import { ProcessingViewMetadata } from '../../models/dto/processing-view-metadat
styleUrls: ['./upload.component.scss'],
})
export class UploadComponent implements OnInit {
- private permissions: string[] = [];
-
- // Lets be optimistic here, this makes for a better ux
- public get hasUploadPermission() {
- return this.permissions.includes(Permission.ImageUpload);
- }
+ canUpload = true;
constructor(
private utilService: UtilService,
@@ -31,9 +27,11 @@ export class UploadComponent implements OnInit {
@AutoUnsubscribe()
onPermission() {
- return this.permissionService.live.subscribe((permissions) => {
- this.permissions = permissions;
- });
+ return this.permissionService.live
+ .pipe(debounceTime(100))
+ .subscribe((permissions) => {
+ this.canUpload = permissions.includes(Permission.ImageUpload);
+ });
}
onSelect(event: NgxDropzoneChangeEvent) {
diff --git a/frontend/src/app/routes/user/login/login.component.html b/frontend/src/app/routes/user/login/login.component.html
index 5d5fcf1..2dc8a16 100644
--- a/frontend/src/app/routes/user/login/login.component.html
+++ b/frontend/src/app/routes/user/login/login.component.html
@@ -4,11 +4,7 @@
Login
-
-
- Failed to login. Please check your username and password.
-
-
+
Username
@@ -26,6 +22,7 @@
+
Password
@@ -41,6 +38,7 @@
+