UNPKG

phx-react

Version:

PHX REACT

163 lines • 8.02 kB
import PHXFuncGetLoggedInfo from '../../Func/getLoginInfo'; import { PHXClientQueryV6 } from '../../Func/GRPC/PHXGrpcClientV6'; import PHXGetCurrentYearWithTermV3 from '../../Func/SchoolYearV3/getSchoolYearV3'; import { ECoreSchemaGroup, ERoleCode, EMPTY_VALUE } from '../constant'; import { FIND_USER_INFO, FIND_CLASSROOM_BY_USER_IDS, FIND_STUDENT_BY_USER_CODE, FIND_STAFF_BY_USER_CODE, FIND_TEACHER_BY_USER_CODE, } from '../graphql/query'; export const useImportUser = () => { var _a, _b; const userInfo = PHXFuncGetLoggedInfo(); const schoolId = userInfo === null || userInfo === void 0 ? void 0 : userInfo.school_id; const schoolYear = PHXGetCurrentYearWithTermV3(); const schoolYearId = (_b = (_a = schoolYear === null || schoolYear === void 0 ? void 0 : schoolYear.current_school_year) === null || _a === void 0 ? void 0 : _a.schoolYear) === null || _b === void 0 ? void 0 : _b.id; const formatStaffData = (data) => data.map((item) => ({ id: item.id, code: item.coreAdminPublicProfileStaffByStaffIdAndSchoolId.userCode || EMPTY_VALUE, phone: item.phoneNumber || EMPTY_VALUE, email: item.email || EMPTY_VALUE, name: item.fullName || EMPTY_VALUE, emailSecondary: item.emailSecondary || EMPTY_VALUE, isUseEmailSecondary: item.isUseEmailSecondary, full_name: item.fullName, })); const formatTeacherData = (data) => data.map((item) => ({ id: item.coreAdminPublicUserByTeacherIdAndSchoolId.id, code: item.userCode || EMPTY_VALUE, phone: item.coreAdminPublicUserByTeacherIdAndSchoolId.phoneNumber || EMPTY_VALUE, email: item.coreAdminPublicUserByTeacherIdAndSchoolId.email || EMPTY_VALUE, name: item.coreAdminPublicUserByTeacherIdAndSchoolId.fullName || EMPTY_VALUE, emailSecondary: item.coreAdminPublicUserByTeacherIdAndSchoolId.emailSecondary || EMPTY_VALUE, isUseEmailSecondary: item.coreAdminPublicUserByTeacherIdAndSchoolId.isUseEmailSecondary, full_name: item.coreAdminPublicUserByTeacherIdAndSchoolId.fullName, })); const formatStudentData = (data, userInfoMap = {}) => data.map((item) => { var _a, _b, _c, _d, _e, _f, _g; const parents = (_c = (_b = (_a = item.coreStudentPublicUserByStudentIdAndSchoolId) === null || _a === void 0 ? void 0 : _a.coreStudentPublicRelationshipUsersByStudentIdAndSchoolId) === null || _b === void 0 ? void 0 : _b.nodes) === null || _c === void 0 ? void 0 : _c.filter((node) => { var _a; return !!((_a = userInfoMap[node.parentId]) === null || _a === void 0 ? void 0 : _a.fullName); }).map((node) => { var _a; return ({ id: node.parentId, relationship_code: node.relationshipCode || '', full_name: ((_a = userInfoMap[node.parentId]) === null || _a === void 0 ? void 0 : _a.fullName) || '', }); }); return { id: Number(item.studentId), code: item.userCode || EMPTY_VALUE, name: item.fullName || '', full_name: item.fullName || '', educational_level: ((_e = (_d = item.coreStudentPublicProgramMapEducationalLevelByProgramEducationalIdAndSchoolId) === null || _d === void 0 ? void 0 : _d.coreStudentPublicEducationalLevelByEducationalLevelIdAndSchoolId) === null || _e === void 0 ? void 0 : _e.name) || EMPTY_VALUE, grade: ((_f = item.coreStudentPublicGradeByGradeIdAndSchoolId) === null || _f === void 0 ? void 0 : _f.name) || EMPTY_VALUE, classroom: ((_g = item.classroom) === null || _g === void 0 ? void 0 : _g.name) || EMPTY_VALUE, parents: parents || [], }; }); const findUserInFo = async (ids) => { const { data } = await PHXClientQueryV6({ schemaGroup: ECoreSchemaGroup.CORE_ADMIN, variables: { ids, schoolId, }, query: FIND_USER_INFO, }); return data.allCoreAdminPublicUsers.nodes; }; const findClassroomByUserIds = async (userIds, querySchoolYearId, querySchoolId) => { const { data } = await PHXClientQueryV6({ schemaGroup: ECoreSchemaGroup.CORE_ACADEMIC, variables: { userIds, schoolYearId: querySchoolYearId, schoolId: querySchoolId, }, query: FIND_CLASSROOM_BY_USER_IDS, }); return data.allCoreAcademicPublicClassroomStudents.nodes; }; const findStudentByUserCodes = async (userCodes) => { const { data } = await PHXClientQueryV6({ schemaGroup: ECoreSchemaGroup.CORE_STUDENT, variables: { userCodes, schoolId, }, query: FIND_STUDENT_BY_USER_CODE, }); const result = data.allCoreStudentPublicProfileStudents.nodes; const userIds = new Set(); result.forEach((item) => { var _a, _b; userIds.add(item.studentId); const parentNodes = (_b = (_a = item.coreStudentPublicUserByStudentIdAndSchoolId) === null || _a === void 0 ? void 0 : _a.coreStudentPublicRelationshipUsersByStudentIdAndSchoolId) === null || _b === void 0 ? void 0 : _b.nodes; parentNodes === null || parentNodes === void 0 ? void 0 : parentNodes.forEach((node) => { if (node.parentId) { userIds.add(node.parentId); } }); }); const studentInfo = await findUserInFo(Array.from(userIds)); const userInfoMap = {}; studentInfo.forEach((user) => { userInfoMap[user.id] = user; }); const classroomData = await findClassroomByUserIds(Array.from(new Set(result.map((item) => item.studentId))), schoolYearId, schoolId); const classroomMap = {}; classroomData.forEach((item) => { classroomMap[item.studentId] = item.coreAcademicPublicClassroomByClassroomIdAndSchoolId; }); const mergeData = result.map((item) => { const userDetail = userInfoMap[item.studentId]; const classroom = classroomMap[item.studentId]; return { ...item, fullName: userDetail === null || userDetail === void 0 ? void 0 : userDetail.fullName, classroom: classroom ? { id: classroom.rowId, name: classroom.name, } : undefined, }; }); return formatStudentData(mergeData, userInfoMap); }; const findStaffByUserCodes = async (userCodes) => { const { data } = await PHXClientQueryV6({ schemaGroup: ECoreSchemaGroup.CORE_ADMIN, variables: { userCodes, schoolId, }, query: FIND_STAFF_BY_USER_CODE, }); const result = data.allCoreAdminPublicUsers.nodes; return formatStaffData(result); }; const findTeacherByUserCodes = async (userCodes) => { const { data } = await PHXClientQueryV6({ schemaGroup: ECoreSchemaGroup.CORE_ADMIN, variables: { userCodes, schoolId, }, query: FIND_TEACHER_BY_USER_CODE, }); const result = data.allCoreAdminPublicProfileTeachers.nodes; return formatTeacherData(result); }; const findUserByUserCodes = async (target, userCodes) => { switch (target) { case ERoleCode.STUDENT: return findStudentByUserCodes(userCodes); case ERoleCode.STAFF: return findStaffByUserCodes(userCodes); case ERoleCode.TEACHER: return findTeacherByUserCodes(userCodes); default: return []; } }; return { findUserByUserCodes, }; }; //# sourceMappingURL=use-import-user.js.map