Skip to content

Commit

Permalink
feat(professor-score): add functionality to update professor score on…
Browse files Browse the repository at this point in the history
… the scoring island
  • Loading branch information
RishikeshNK committed Dec 5, 2023
1 parent 409dbbc commit deeab32
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 21 deletions.
33 changes: 21 additions & 12 deletions src/components/ProfessorScoring/ProfessorScoreCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,20 @@ import {
getProfessorScoreForUser,
updateProfessorScoreForUser,
} from '@/client/professorScore.client';
import { CreateProfessorScoreDto } from '@/models/professorScore.model';
import {
CreateProfessorScoreDto,
UpdateProfessorScoreDto,
} from '@/models/professorScore.model';
import { ResponseStatus } from '@/client/activities.client';
import StaticSideBarBubble from '@/shared/components/StaticSideBarBubble';
import InputContainer from '@/shared/components/InputContainer';
import TextInput from '@/shared/components/TextInput';
import ProfessorScoreItem from './ProfessorScoreItem';
import { useDispatch, useSelector } from 'react-redux';
import {
saveProfessorScore,
selectProfessorScores,
} from '@/store/professorScore.store';

interface ProfessorScoreCardProps {
professorId: number;
Expand All @@ -17,11 +25,12 @@ interface ProfessorScoreCardProps {
const ProfessorScoreCard: React.FC<ProfessorScoreCardProps> = ({
professorId,
}) => {
const [professorScore, setProfessorScore] =
useState<CreateProfessorScoreDto | null>(null);
const scores = useSelector(selectProfessorScores);
const [finalScore, setFinalScore] = useState('');
const [error, setError] = useState<string | null>(null);

const dispatch = useDispatch();

useEffect(() => {
getProfessorScoreForUser(professorId).then((data) => {
if (data === ResponseStatus.UnknownError) {
Expand All @@ -31,7 +40,7 @@ const ProfessorScoreCard: React.FC<ProfessorScoreCardProps> = ({
} else if (data === ResponseStatus.BadRequest) {
setError('Bad Request');
} else {
setProfessorScore(data);
dispatch(saveProfessorScore(data as UpdateProfessorScoreDto));
setFinalScore(data.totalScore.toString() ?? '');
}
});
Expand All @@ -46,7 +55,7 @@ const ProfessorScoreCard: React.FC<ProfessorScoreCardProps> = ({
}
}, [finalScore, professorId]);

if (!professorScore) {
if (!scores[professorId]) {
return null; // Use error in some other way...
}

Expand All @@ -58,15 +67,15 @@ const ProfessorScoreCard: React.FC<ProfessorScoreCardProps> = ({
};

const professorScores = [
{ category: 'Teaching', score: professorScore.teachingScore },
{ category: 'Research', score: professorScore.researchScore },
{ category: 'Service', score: professorScore.serviceScore },
{ category: 'Teaching', score: scores[professorId].teachingScore },
{ category: 'Research', score: scores[professorId].researchScore },
{ category: 'Service', score: scores[professorId].serviceScore },
];

const averageScore = (
(professorScore.teachingScore +
professorScore.researchScore +
professorScore.serviceScore) /
(scores[professorId].teachingScore! +
scores[professorId].researchScore! +
scores[professorId].serviceScore!) /
3
).toFixed(1);

Expand All @@ -82,7 +91,7 @@ const ProfessorScoreCard: React.FC<ProfessorScoreCardProps> = ({
{professorScores.map(({ category, score }) => (
<ProfessorScoreItem
category={category}
score={score}
score={score!}
key={category}
/>
))}
Expand Down
12 changes: 6 additions & 6 deletions src/pages/merit/professors/[professorId].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,10 @@ import { getNarrativesForUser } from '@/services/narrative';
import { seperateNarrativesByCategory } from '@/shared/utils/narrative.util';
import TenureBadge from '@/components/ProfessorScoring/TenureBadge';
import ErrorMessage from '@/shared/components/ErrorMessage';
import { computeProfessorScore } from '@/services/professorScore';
import { updateComputedProfessorScoreForUser } from '@/client/professorScore.client';
import InfoSidebar from '@/shared/components/InfoSidebar';
import NextNProgress from 'nextjs-progressbar';
import Header from '@/shared/components/Header';
import SideNavbar from '@/shared/components/SideNavbar';
import { saveProfessorScore } from '@/store/professorScore.store';
import { useDispatch } from 'react-redux';
import { UpdateProfessorScoreDto } from '@/models/professorScore.model';

interface ProfessorScoringPageProps {
professorId?: number;
Expand Down Expand Up @@ -141,6 +139,8 @@ const ProfessorScoringPage: React.FC<ProfessorScoringPageProps> = ({
return <ErrorMessage message="Missing Professor ID" />;
}

const dispatch = useDispatch();

const updateActivity = (updatedActivity: UpdateActivityDto) => {
updateActivityClient(updatedActivity).then((res) => {
if (res === ResponseStatus.Success) {
Expand All @@ -151,7 +151,7 @@ const ProfessorScoringPage: React.FC<ProfessorScoringPageProps> = ({

updateComputedProfessorScoreForUser(professorId).then((res) => {
if (res) {
console.log(res);
dispatch(saveProfessorScore(res as UpdateProfessorScoreDto));
} else {
setError('Unknown error');
}
Expand Down
13 changes: 10 additions & 3 deletions src/store/professorScore.store.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { RootState } from './app.store';
import { ProfessScoreDto } from '../models/professorScore.model';
import {
ProfessScoreDto,
UpdateProfessorScoreDto,
} from '../models/professorScore.model';
import { getProfessorScoreForUser } from '@/client/professorScore.client';

export interface ProfessorScoreState {
professorScores: Record<number, ProfessScoreDto>;
professorScores: Record<number, UpdateProfessorScoreDto>;
}

const initialState: ProfessorScoreState = {
Expand All @@ -14,7 +18,10 @@ export const professorScoreSlice = createSlice({
name: 'ProfessorScore',
initialState,
reducers: {
saveProfessorScore: (state, action: PayloadAction<ProfessScoreDto>) => {
saveProfessorScore: (
state,
action: PayloadAction<UpdateProfessorScoreDto>,
) => {
const { userId } = action.payload;
state.professorScores[userId] = action.payload;
},
Expand Down

0 comments on commit deeab32

Please sign in to comment.