mirror of
https://github.com/google/nomulus
synced 2026-01-04 04:04:22 +00:00
83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
// Copyright 2024 The Nomulus Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import { Injectable, signal } from '@angular/core';
|
|
import { switchMap, tap } from 'rxjs';
|
|
import { RegistrarService } from '../registrar/registrar.service';
|
|
import { BackendService } from '../shared/services/backend.service';
|
|
|
|
export const roleToDescription = (role: string) => {
|
|
if (!role) return 'N/A';
|
|
else if (role === 'ACCOUNT_MANAGER') {
|
|
return 'Viewer';
|
|
}
|
|
return 'Editor';
|
|
};
|
|
|
|
export interface CreateAutoTimestamp {
|
|
creationTime: string;
|
|
}
|
|
|
|
export interface User {
|
|
emailAddress: string;
|
|
role: string;
|
|
password?: string;
|
|
}
|
|
|
|
@Injectable()
|
|
export class UsersService {
|
|
users = signal<User[]>([]);
|
|
currentlyOpenUserEmail = signal<string>('');
|
|
isNewUser: boolean = false;
|
|
|
|
constructor(
|
|
private backendService: BackendService,
|
|
private registrarService: RegistrarService
|
|
) {}
|
|
|
|
fetchUsers() {
|
|
return this.backendService
|
|
.getUsers(this.registrarService.registrarId())
|
|
.pipe(
|
|
tap((users: User[]) => {
|
|
this.users.set(users);
|
|
})
|
|
);
|
|
}
|
|
|
|
createNewUser() {
|
|
return this.backendService
|
|
.createUser(this.registrarService.registrarId())
|
|
.pipe(
|
|
tap((newUser: User) => {
|
|
this.users.set([...this.users(), newUser]);
|
|
this.currentlyOpenUserEmail.set(newUser.emailAddress);
|
|
this.isNewUser = true;
|
|
})
|
|
);
|
|
}
|
|
|
|
deleteUser(user: User) {
|
|
return this.backendService
|
|
.deleteUser(this.registrarService.registrarId(), user)
|
|
.pipe(switchMap((_) => this.fetchUsers()));
|
|
}
|
|
|
|
updateUser(updatedUser: User) {
|
|
return this.backendService
|
|
.updateUser(this.registrarService.registrarId(), updatedUser)
|
|
.pipe(switchMap((_) => this.fetchUsers()));
|
|
}
|
|
}
|