Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 1x 5x 5x 2x 3x 1x 1x 1x 7x 7x 8x 8x 8x 8x 8x 8x 8x 5x 5x 5x 5x 5x 5x 5x | import { createAsyncThunk, createSlice } from "@reduxjs/toolkit";
import { StudentAssignmentAPI } from "@/api/student/StudentAssignmentAPI.js";
export const _studentFetchClassGradeAverage = createAsyncThunk(
"student/fetchClassGradeAverage",
async (classCode, { rejectWithValue }) => {
try {
const response = await StudentAssignmentAPI.prototype.fetchClassGradeAverage(classCode);
return response;
} catch (error) {
return rejectWithValue(error.response.data);
}
}
);
const EMPTY_STATUS_COUNTS = { graded: 0, missed: 0, incomplete: 0, pending: 0, rejected: 0 };
const StudentClassGrade = createSlice({
name: "StudentClassGrade",
initialState: {
average: null,
totalGraded: 0,
totalAssignments: 0,
statusCounts: EMPTY_STATUS_COUNTS,
assignments: [],
hasErrors: null,
isLoading: false,
},
reducers: {},
extraReducers: (builder) => {
builder
.addCase(_studentFetchClassGradeAverage.pending, (state) => {
state.hasErrors = null;
state.isLoading = true;
})
.addCase(_studentFetchClassGradeAverage.fulfilled, (state, action) => {
state.average = action.payload.data.average;
state.totalGraded = action.payload.data.total_graded;
state.totalAssignments = action.payload.data.total_assignments;
state.statusCounts = action.payload.data.status_counts ?? EMPTY_STATUS_COUNTS;
state.assignments = action.payload.data.assignments ?? [];
state.hasErrors = null;
state.isLoading = false;
})
.addCase(_studentFetchClassGradeAverage.rejected, (state, action) => {
state.average = null;
state.totalGraded = 0;
state.totalAssignments = 0;
state.statusCounts = EMPTY_STATUS_COUNTS;
state.assignments = [];
state.hasErrors = action.error.message;
state.isLoading = false;
});
},
});
export default StudentClassGrade;
|