76 lines
2.1 KiB
TypeScript

import type { SaveUserData } from '@/business/my-class/api';
export interface MyClassStudentFormValues {
readonly namePrefix: string;
readonly firstName: string;
readonly lastName: string;
readonly email: string;
readonly phoneNumber: string;
readonly avatar: string | null;
readonly guardians: readonly MyClassGuardianFormValues[];
}
export interface MyClassGuardianFormValues {
readonly key: string;
readonly id: string | null;
readonly namePrefix: string;
readonly firstName: string;
readonly lastName: string;
readonly email: string;
readonly phoneNumber: string;
readonly avatar: string | null;
}
export function buildMyClassStudentSaveData(
values: MyClassStudentFormValues,
classId: string,
studentRoleId: string,
): SaveUserData {
return {
name_prefix: values.namePrefix === '' ? null : values.namePrefix,
firstName: values.firstName.trim(),
lastName: values.lastName.trim(),
email: values.email.trim(),
phoneNumber: values.phoneNumber.trim() || null,
avatar: values.avatar,
app_role: studentRoleId,
classId,
};
}
export function hasMyClassGuardianFormValues(values: MyClassGuardianFormValues): boolean {
return Boolean(
values.namePrefix.trim()
|| values.firstName.trim()
|| values.lastName.trim()
|| values.email.trim()
|| values.phoneNumber.trim()
|| values.avatar,
);
}
export function buildMyClassGuardianSaveData(
values: MyClassGuardianFormValues,
guardianRoleId: string,
): SaveUserData {
return {
name_prefix: values.namePrefix.trim() === '' ? null : values.namePrefix.trim(),
firstName: values.firstName.trim(),
lastName: values.lastName.trim(),
email: values.email.trim(),
phoneNumber: values.phoneNumber.trim() || null,
avatar: values.avatar,
app_role: guardianRoleId,
};
}
export function canManageMyClassStudents(input: {
readonly hasUserPermission: boolean;
readonly classId: string | null;
readonly studentRoleId: string | null;
}): boolean {
return input.hasUserPermission
&& Boolean(input.classId)
&& Boolean(input.studentRoleId);
}