Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 5x 7x 155x 155x 6x 375x 375x 375x 220x 114x 6x 6x 5x 5x 4x 4x 10x 2x 6x 2x 4x 12x 10x 12x | export type StatusType = "active" | "pending" | "denied" | "revoked";
export type UserRoleType = {
id: string;
email: string;
fullName: string;
role: string;
territory: string;
doneByEmail: string;
doneByName: string;
lastModifiedDate: number;
status: StatusType;
eventType: string;
group?: string;
division?: string;
};
export const initSortUserData = (userData: UserRoleType[]) => {
if (!userData.length) return [];
// separate pending / other
const pendingRoles = userData.filter((x: UserRoleType) => x.status === "pending");
const remainingRoles = userData.filter((x: UserRoleType) => x.status !== "pending");
const compare = (a: UserRoleType, b: UserRoleType) => {
const nameA = a.fullName.toLocaleLowerCase();
const nameB = b.fullName.toLocaleLowerCase();
if (nameA < nameB) return -1;
if (nameA > nameB) return 1;
return 0;
};
const sorted = pendingRoles.sort(compare).concat(remainingRoles.sort(compare));
return sorted;
};
export const sortUserData = (
sortByKey: keyof UserRoleType,
direction: boolean,
data: UserRoleType[],
) => {
if (!data.length) return [];
// when direction is true, that means we are descending
const [last, first] = direction ? [-1, 1] : [1, -1];
const sortStatus = (a: UserRoleType, b: UserRoleType) => {
switch (a.status) {
case "pending":
return first;
case "active":
return b.status === "pending" ? last : first;
case "denied":
return b.status === "revoked" ? first : last;
case "revoked":
return last;
default:
return last;
}
};
const mainSort = (a: UserRoleType, b: UserRoleType) =>
a[sortByKey] < b[sortByKey] ? first : last;
if (sortByKey === "status") return data.sort((a, b) => sortStatus(a, b));
return data.sort((a, b) => mainSort(a, b));
};
|