15768: cleanup before sort/refresh fix Arvados-DCO-1.1-Signed-off-by: Lisa Knox...
[arvados-workbench2.git] / src / models / user.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { Resource, ResourceKind, RESOURCE_UUID_REGEX } from 'models/resource';
6
7 export type UserPrefs = {
8     profile?: {
9         organization?: string,
10         organization_email?: string,
11         lab?: string,
12         website_url?: string,
13         role?: string
14     }
15 };
16
17 export interface User {
18     email: string;
19     firstName: string;
20     lastName: string;
21     uuid: string;
22     ownerUuid: string;
23     username: string;
24     prefs: UserPrefs;
25     isAdmin: boolean;
26     isActive: boolean;
27 }
28
29 export const getUserFullname = (user: User) => {
30     return user.firstName && user.lastName
31         ? `${user.firstName} ${user.lastName}`
32         : "";
33 };
34
35 export const getUserDisplayName = (user: User, withEmail = false, withUuid = false) => {
36     const displayName = getUserFullname(user) || user.email || user.username || user.uuid;
37     let parts: string[] = [displayName];
38     if (withEmail && user.email && displayName !== user.email) {
39         parts.push(`<${user.email}>`);
40     }
41     if (withUuid) {
42         parts.push(`(${user.uuid})`);
43     }
44     return parts.join(' ');
45 };
46
47 export const getUserDetailsString = (user: User) => {
48     let parts: string[] = [];
49     const userCluster = getUserClusterID(user);
50     user.username.length && parts.push(user.username);
51     user.email.length && parts.push(`<${user.email}>`);
52     userCluster && userCluster.length && parts.push(`(${userCluster})`);
53     return parts.join(' ');
54 };
55
56 export const getUserClusterID = (user: User): string | undefined => {
57     const match = RESOURCE_UUID_REGEX.exec(user.uuid);
58     const parts = match ? match[0].split('-') : [];
59     return parts.length === 3 ? parts[0] : undefined;
60 };
61
62 export interface UserResource extends Resource, User {
63     kind: ResourceKind.USER;
64     defaultOwnerUuid: string;
65     writableBy: string[];
66 }