46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
import {Group, User} from "@/interfaces/user";
|
|
import {getUserCompanyName, USER_TYPE_LABELS} from "@/resources/user";
|
|
import {capitalize} from "lodash";
|
|
import moment from "moment";
|
|
|
|
export interface UserListRow {
|
|
name: string;
|
|
email: string;
|
|
type: string;
|
|
companyName: string;
|
|
expiryDate: string;
|
|
verified: string;
|
|
country: string;
|
|
phone: string;
|
|
employmentPosition: string;
|
|
gender: string;
|
|
}
|
|
|
|
export const exportListToExcel = (rowUsers: User[], users: User[], groups: Group[]) => {
|
|
const rows: UserListRow[] = rowUsers.map((user) => ({
|
|
name: user.name,
|
|
email: user.email,
|
|
type: USER_TYPE_LABELS[user.type],
|
|
companyName: getUserCompanyName(user, users, groups),
|
|
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,Company Name,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.corporateInformation?.companyInformation?.name || user.name;
|
|
return user.name;
|
|
};
|