Files
frontend-app-authoring/src/grading-settings/hooks.js
2023-08-14 14:44:01 -04:00

87 lines
2.2 KiB
JavaScript

import { useEffect, useRef, useState } from 'react';
import { v4 as uuidv4 } from 'uuid';
import { getGradingValues, getSortedGrades } from './grading-scale/utils';
const useConvertGradeCutoffs = (
gradeCutoffs,
) => {
const gradeLetters = gradeCutoffs && Object.keys(gradeCutoffs);
const gradeValues = gradeCutoffs && getGradingValues(gradeCutoffs);
const sortedGrades = gradeCutoffs && getSortedGrades(gradeValues);
return {
gradeLetters,
gradeValues,
sortedGrades,
};
};
const useUpdateGradingData = (gradingSettingsData, setOverrideInternetConnectionAlert, setShowSuccessAlert) => {
const uniqueId = uuidv4();
const [gradingData, setGradingData] = useState({});
const [showSavePrompt, setShowSavePrompt] = useState(false);
const resetDataRef = useRef(false);
const {
gradeCutoffs = {},
gracePeriod = { hours: '', minutes: '' },
minimumGradeCredit,
graders,
} = gradingData;
useEffect(() => {
if (gradingSettingsData !== undefined) {
setGradingData(gradingSettingsData);
}
}, [gradingSettingsData]);
const handleResetPageData = () => {
setShowSavePrompt(!showSavePrompt);
setShowSuccessAlert(false);
setGradingData(gradingSettingsData);
resetDataRef.current = true;
setOverrideInternetConnectionAlert(false);
};
const handleAddAssignment = () => {
setGradingData(prevState => ({
...prevState,
graders: [...prevState.graders, {
id: uniqueId,
dropCount: 0,
minCount: 1,
shortLabel: '',
type: '',
weight: 0,
}],
}));
setShowSuccessAlert(false);
};
const handleRemoveAssignment = (assignmentId) => {
setGradingData((prevState) => ({
...prevState,
graders: prevState.graders.filter((grade) => grade.id !== assignmentId),
}));
setShowSuccessAlert(false);
setShowSavePrompt(true);
};
return {
graders,
resetDataRef,
setGradingData,
gradingData,
gradeCutoffs,
gracePeriod,
minimumGradeCredit,
showSavePrompt,
setShowSavePrompt,
handleResetPageData,
handleAddAssignment,
handleRemoveAssignment,
};
};
export { useConvertGradeCutoffs, useUpdateGradingData };