import { EntityWithRoles, WithLabeledEntities } from "@/interfaces/entity"; import { Group, User } from "@/interfaces/user"; import { getUserCompanyName, USER_TYPE_LABELS } from "@/resources/user"; import { capitalize } from "lodash"; import moment from "moment"; import { mapBy } from "."; import { findAllowedEntities } from "./permissions"; import { getEntitiesUsers } from "./users.be"; export interface UserListRow { name: string; email: string; type: string; entities: string; expiryDate: string; verified: string; country: string; phone: string; employmentPosition: string; gender: string; } export const exportListToExcel = (rowUsers: WithLabeledEntities[]) => { const rows: UserListRow[] = rowUsers.map((user) => ({ name: user.name, email: user.email, type: USER_TYPE_LABELS[user.type], entities: user.entities.map((e) => e.label).join(', '), expiryDate: user.subscriptionExpirationDate ? moment(user.subscriptionExpirationDate).format("DD/MM/YYYY") : "Unlimited", country: user.demographicInformation?.country || "N/A", phone: user.demographicInformation?.phone || "N/A", employmentPosition: (user.type === "corporate" || user.type === "mastercorporate" ? user.demographicInformation?.position : user.demographicInformation?.employment) || "N/A", gender: user.demographicInformation?.gender ? capitalize(user.demographicInformation.gender) : "N/A", verified: user.isVerified?.toString() || "FALSE", })); const header = "Name,Email,Type,Entities,Expiry Date,Country,Phone,Employment/Department,Gender,Verification"; const rowsString = rows.map((x) => Object.values(x).join(",")).join("\n"); return `${header}\n${rowsString}`; }; export const getUserName = (user?: User) => { if (!user) return "N/A"; if (user.type === "corporate" || user.type === "mastercorporate") return user.name; return user.name; }; export const isAdmin = (user: User) => ["admin", "developer"].includes(user.type)