teams list now renders

This commit is contained in:
Carter 2024-11-18 10:10:29 -06:00
parent 17c559bdfc
commit e95b654d7f
81 changed files with 6132 additions and 40 deletions

27
src/pbHelpers/Context.ts Normal file
View file

@ -0,0 +1,27 @@
export function getContextKeys(): string[] {
// Get the url entries without any zero length strings
let entries = document.location.pathname.split("/").filter(key => key.length > 0);
let cutTail = entries.length % 2 === 0;
// Filter out every other entry
entries = entries.filter((_, index) => index % 2 === 1);
if (cutTail) return entries.slice(0, -1);
return entries;
}
export function getContextTypes(): string[] {
// Get the url entries without any zero length strings
let entries = document.location.pathname.split("/").filter(key => key.length > 0);
// Filter out every other entry
entries = entries.filter((_, index) => index % 2 === 0);
// jobsite should just be site and none should end in s anymore
entries = entries.slice(0, -1).map(str => (str.endsWith("s") ? str.slice(0, -1) : str));
entries = entries.map(item => (item === "jobsite" ? "site" : item));
// Return all types but the last (it is the object being loaded, not the context)
return entries;
}

View file

@ -0,0 +1,21 @@
import { pond } from "protobuf-ts/pond";
import { or } from "utils/types";
export function permissionToString(permission: pond.Permission): string {
return or(
new Map<pond.Permission, string>([
[pond.Permission.PERMISSION_INVALID, "PERMISSION_INVALID"],
[pond.Permission.PERMISSION_READ, "PERMISSION_READ"],
[pond.Permission.PERMISSION_SHARE, "PERMISSION_SHARE"],
[pond.Permission.PERMISSION_USERS, "PERMISSION_USERS"],
[pond.Permission.PERMISSION_WRITE, "PERMISSION_WRITE"],
[pond.Permission.PERMISSION_FILE_MANAGEMENT, "PERMISSION_FILE_MANAGEMENT"],
[pond.Permission.PERMISSION_BILLING, "PERMISSION_BILLING"]
]).get(permission),
"PERMISSION_INVALID"
);
}
export function canWrite(permissions: pond.Permission[]): boolean {
return permissions.includes(pond.Permission.PERMISSION_WRITE);
}

41
src/pbHelpers/User.ts Normal file
View file

@ -0,0 +1,41 @@
import { pond } from "protobuf-ts/pond";
import moment from "moment-timezone";
import { User } from "models";
export function userRoleFromPermissions(permissions: Array<pond.Permission>): string {
//only be an owner if they have all 5
if (
permissions.includes(pond.Permission.PERMISSION_USERS) &&
permissions.includes(pond.Permission.PERMISSION_READ) &&
permissions.includes(pond.Permission.PERMISSION_WRITE) &&
permissions.includes(pond.Permission.PERMISSION_SHARE) &&
permissions.includes(pond.Permission.PERMISSION_FILE_MANAGEMENT)
)
return "Owner";
if (permissions.includes(pond.Permission.PERMISSION_WRITE)) return "Admin";
return "User";
}
export function sortUsersByRole(users: User[]): User[] {
let sortedUsers: User[] = users.slice(0).sort((a: User, b: User) => {
if (a.permissions.length === b.permissions.length) {
let aName: string = a.name().toLowerCase();
let bName: string = b.name().toLowerCase();
return aName > bName ? 1 : bName > aName ? -1 : 0;
}
return a.permissions.length - b.permissions.length;
});
return sortedUsers;
}
export function defaultUser(): User {
return User.any({
settings: {
notifyByDefault: true,
notificationMethods: [pond.NotificationMethod.NOTIFICATION_METHOD_EMAIL],
phoneNumber: "",
timezone: moment.tz.guess()
}
});
}