87 lines
2.0 KiB
TypeScript
87 lines
2.0 KiB
TypeScript
type EmployeeWithCompany = {
|
|
id: string
|
|
email: string
|
|
firstName: string
|
|
lastName: string
|
|
role: string
|
|
preferredLanguage?: string | null
|
|
companyId: string
|
|
company: {
|
|
name: string
|
|
slug: string
|
|
}
|
|
}
|
|
|
|
type CompanySignupResult = {
|
|
company: {
|
|
id: string
|
|
name: string
|
|
slug: string
|
|
}
|
|
trialEndAt: Date
|
|
emailDelivery?: unknown
|
|
}
|
|
|
|
type RenterProfile = {
|
|
id: string
|
|
firstName: string
|
|
lastName: string
|
|
email: string
|
|
phone: string | null
|
|
preferredLocale: string | null
|
|
preferredCurrency: string | null
|
|
emailVerified: boolean
|
|
savedCompanies: Array<{ companyId: string }>
|
|
}
|
|
|
|
type SavedCompany = {
|
|
id: string
|
|
brand: {
|
|
displayName: string | null
|
|
subdomain: string | null
|
|
logoUrl: string | null
|
|
} | null
|
|
}
|
|
|
|
export function presentEmployeeSession(employee: EmployeeWithCompany, token?: string) {
|
|
const data = {
|
|
employee: {
|
|
id: employee.id,
|
|
email: employee.email,
|
|
firstName: employee.firstName,
|
|
lastName: employee.lastName,
|
|
role: employee.role,
|
|
preferredLanguage: employee.preferredLanguage,
|
|
companyId: employee.companyId,
|
|
companyName: employee.company.name,
|
|
companySlug: employee.company.slug,
|
|
},
|
|
}
|
|
|
|
return token ? { token, ...data } : data
|
|
}
|
|
|
|
export function presentCompanySignup(result: CompanySignupResult) {
|
|
return {
|
|
companyId: result.company.id,
|
|
companyName: result.company.name,
|
|
slug: result.company.slug,
|
|
invitationId: null,
|
|
trialEndsAt: result.trialEndAt.toISOString(),
|
|
nextStep: 'workspace_created',
|
|
emailDelivery: result.emailDelivery ?? { attempted: false, success: false, error: null },
|
|
}
|
|
}
|
|
|
|
export function presentRenterProfile(renter: RenterProfile, companies: SavedCompany[]) {
|
|
const companyMap = new Map(companies.map((company) => [company.id, company]))
|
|
|
|
return {
|
|
...renter,
|
|
savedCompanies: renter.savedCompanies.map((savedCompany) => ({
|
|
id: savedCompany.companyId,
|
|
brand: companyMap.get(savedCompany.companyId)?.brand ?? null,
|
|
})),
|
|
}
|
|
}
|