diff --git a/Students/package.json b/Students/package.json index 7166662..f302172 100644 --- a/Students/package.json +++ b/Students/package.json @@ -38,5 +38,5 @@ "tailwindcss": "^3.3.1", "vite": "^4.2.0" }, - "proxy": "http://localhost:5000" + "proxy": "https://ckodon-api-backend.onrender.com" } diff --git a/Students/src/app/api/api.js b/Students/src/app/api/api.js index 5079588..6700a60 100644 --- a/Students/src/app/api/api.js +++ b/Students/src/app/api/api.js @@ -3,7 +3,7 @@ import axios from 'axios'; export async function getASpecificReview(id) { - let response = await axios.get(`http://localhost:5000/undergradeReviews/id/${id}`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/undergradeReviews/id/${id}`) if(!response.status == 200){ throw { message: "Failed to fetch Review", @@ -18,7 +18,7 @@ import axios from 'axios'; } export async function getAUserReview(id) { - let response = await axios.get(`http://localhost:5000/undergradeReviews/user/${id}`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/undergradeReviews/user/${id}`) if(!response.status == 200){ @@ -35,7 +35,7 @@ export async function getAUserReview(id) { export async function getAUserHonor(id) { - let response = await axios.get(`http://localhost:5000/honors/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/honors/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Honor", @@ -50,7 +50,7 @@ export async function getAUserHonor(id) { } export async function getAUserActivity(id) { - let response = await axios.get(`http://localhost:5000/activities/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/activities/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Activity", @@ -65,7 +65,7 @@ export async function getAUserActivity(id) { } export async function getAUserAid(id) { - let response = await axios.get(`http://localhost:5000/aids/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/aids/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Aid", @@ -80,7 +80,7 @@ export async function getAUserAid(id) { } export async function getAUserEssay(id) { - let response = await axios.get(`http://localhost:5000/essays/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/essays/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Essay", @@ -95,7 +95,7 @@ export async function getAUserEssay(id) { } export async function getAUserRecommendation(id) { - let response = await axios.get(`http://localhost:5000/recommendations/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/recommendations/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Recommendation", diff --git a/Students/src/app/api/apiSlice.js b/Students/src/app/api/apiSlice.js index b3807ce..9cbcfa6 100644 --- a/Students/src/app/api/apiSlice.js +++ b/Students/src/app/api/apiSlice.js @@ -2,7 +2,7 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' import { setCredentials } from '../../features/auth/authSlice' const baseQuery = fetchBaseQuery({ - baseUrl: 'http://localhost:5000', + baseUrl: 'https://ckodon-api-backend.onrender.com', credentials: 'include', prepareHeaders: (headers, { getState }) => { const token = getState().auth.token @@ -15,9 +15,7 @@ const baseQuery = fetchBaseQuery({ }) const baseQueryWithReauth = async (args, api, extraOptions) => { - // console.log(args) // request url, method, body - // console.log(api) // signal, dispatch, getState() - // console.log(extraOptions) //custom like {shout: true} + let result = await baseQuery(args, api, extraOptions) diff --git a/Students/src/features/undergrad_students/sat scores/satScore.jsx b/Students/src/features/undergrad_students/sat scores/satScore.jsx index ac5d571..f1c9cb3 100644 --- a/Students/src/features/undergrad_students/sat scores/satScore.jsx +++ b/Students/src/features/undergrad_students/sat scores/satScore.jsx @@ -13,7 +13,7 @@ import { } from "../../../apiSlice/satSlice"; import useAuth from "../../../hooks/useAuth"; import NoContent from "../../../components/indications/noContent"; -import SatScoreComponent from '../../../components/scores/SatScore' +import SatScoreComponent from "../../../components/scores/SatScore"; function SatScore() { const student = useAuth(); const { @@ -23,16 +23,16 @@ function SatScore() { isError: satError, error: satMessage, } = useGetBySatUserQuery(student.id); - const [addTestScore, {isLoading, isSuccess, isError, error}] = useAddNewSatMutation() + const [addTestScore, { isLoading, isSuccess, isError, error }] = + useAddNewSatMutation(); const [readyToAddSat, setReadyToAddSat] = useState(false); - const [totalScore, setTotalScore] = useState(''); - const [mathScore, setMathScore] = useState(''); - const [englishScore, setEnglishScore] = useState(''); - const [dateTaken, setDateTaken] = useState(''); - const [state, setState] = useState(''); + const [totalScore, setTotalScore] = useState(""); + const [mathScore, setMathScore] = useState(""); + const [englishScore, setEnglishScore] = useState(""); + const [dateTaken, setDateTaken] = useState(""); + const [state, setState] = useState(""); - -console.log(sats) + console.log(sats); let content; const loading = loadSat || isLoading; @@ -44,11 +44,11 @@ console.log(sats) date: dateTaken, state: state, totalScore: totalScore, - reading:englishScore, + reading: englishScore, math: mathScore, - }) - if(res.data.isSuccess){ - setReadyToAddSat(false) + }); + if (res.data.isSuccess) { + setReadyToAddSat(false); toast.success(`You have successfully added a test score`, { position: "bottom-right", autoClose: 5000, @@ -59,7 +59,7 @@ console.log(sats) progress: undefined, theme: "colored", }); - }else if(res.error){ + } else if (res.error) { toast.error(`${res.error.message}`, { position: "bottom-right", autoClose: 5000, @@ -70,7 +70,7 @@ console.log(sats) progress: undefined, theme: "colored", }); - }else{ + } else { toast.error("Error occured! Try again", { position: "bottom-right", autoClose: 5000, @@ -83,7 +83,7 @@ console.log(sats) }); } } catch (error) { - toast.error("Error occured! Try again", { + toast.error("Error occured! Try again", { position: "bottom-right", autoClose: 5000, hideProgressBar: false, @@ -96,25 +96,23 @@ console.log(sats) } } -if(!sats?.length){ - content = ( - - ) -} + if (!sats?.length) { + content = ; + } -if(sats?.length){ - content = sats.map(sat=>{ - return ( - - ) - }) -} + if (sats?.length) { + content = sats.map((sat) => { + return ( + + ); + }); + } return ( <> @@ -122,14 +120,13 @@ Math={sat.math}
-{content} - + {content} {loading && ( @@ -140,74 +137,73 @@ Math={sat.math} {readyToAddSat && ( - + setTotalScore(e.target.value)} placeholder="1600" className="rounded-md w-80" required />
- - -
- - - + + +
diff --git a/admin/package.json b/admin/package.json index 999e869..a01b3d2 100644 --- a/admin/package.json +++ b/admin/package.json @@ -35,5 +35,5 @@ "tailwindcss": "^3.3.1", "vite": "^4.2.0" }, - "proxy": "http://localhost:5000" + "proxy": "https://ckodon-api-backend.onrender.com" } diff --git a/admin/src/App.jsx b/admin/src/App.jsx index 7f39d0b..333c7d8 100644 --- a/admin/src/App.jsx +++ b/admin/src/App.jsx @@ -32,6 +32,10 @@ import StudentDoc from "./features/admin/currentStudents/undergraduate/studentDo import PostFile from "./features/admin/files/PostFile"; +//mentor +import AllMentors from "./features/admin/mentors/allMentors"; +import DetailMentor from "./features/admin/mentors/detailMentor"; + const router = createBrowserRouter( createRoutesFromElements( @@ -90,6 +94,8 @@ const router = createBrowserRouter( } /> } /> } /> + } /> + } /> diff --git a/admin/src/apiSlice/mentors.js b/admin/src/apiSlice/mentors.js new file mode 100644 index 0000000..09eb173 --- /dev/null +++ b/admin/src/apiSlice/mentors.js @@ -0,0 +1,78 @@ +import { createSelector, createEntityAdapter } from "@reduxjs/toolkit"; +import { apiSlice } from "../app/api/apiSlice"; + +const mentorAdapter = createEntityAdapter({}); + +export const mentorApiSlice = apiSlice.injectEndpoints({ + endpoints: (builder) => ({ + getMentors: builder.query({ + query: () => "/mentors", + providesTags: ["Mentors"], + }), + + addNewMentor: builder.mutation({ + query: (initialmentorData) => ({ + url: "/mentors", + method: "POST", + body: { + ...initialmentorData, + }, + }), + invalidatesTags: ["Mentors"], + }), + updateMentor: builder.mutation({ + query: (initialmentorData) => ({ + url: "/mentors", + method: "PATCH", + body: { + ...initialmentorData, + }, + }), + invalidatesTags: ["Mentors", "SpecificMentor"], + }), + deleteMentor: builder.mutation({ + query: ({ id }) => ({ + url: `/mentors`, + method: "DELETE", + body: { id }, + }), + invalidatesTags: ["Mentors", "SpecificMentor"], + }), + getMentor: builder.query({ + query: (id) => ({ + url: `/mentors/${id}`, + method: "GET", + }), + providesTags: ["SpecificMentor"], + }), + assignMentor: builder.mutation({ + query: (initialmentorData) => ({ + url: "/mentors/asign", + method: "PATCH", + body: { + ...initialmentorData, + }, + }), + invalidatesTags: ["Mentors"], + }), + inviteMentor: builder.mutation({ + query: (initialmentorData) => ({ + url: "/mentors/invite", + method: "POST", + body: { + ...initialmentorData, + }, + }), + }), + }), +}); + +export const { + useGetMentorsQuery, + useAddNewMentorMutation, + useUpdateMentorMutation, + useDeleteMentorMutation, + useGetMentorQuery, + useAssignMentorMutation, + useInviteMentorMutation +} = mentorApiSlice; diff --git a/admin/src/apiSlice/usersApiSlice.js b/admin/src/apiSlice/usersApiSlice.js index 671ad2d..22b7e5f 100644 --- a/admin/src/apiSlice/usersApiSlice.js +++ b/admin/src/apiSlice/usersApiSlice.js @@ -69,6 +69,13 @@ export const usersApiSlice = apiSlice.injectEndpoints({ }), providesTags:['SpecificStudent'], }), + getStudents: builder.query({ + query: () => ({ + url: `/undergrads`, + method: "GET", + }), + providesTags:['User'], + }), }), }) @@ -77,7 +84,8 @@ export const { useAddNewUserMutation, useUpdateUserMutation, useDeleteUserMutation, - useGetStudentQuery + useGetStudentQuery, + useGetStudentsQuery } = usersApiSlice // returns the query result object diff --git a/admin/src/app/api/api.js b/admin/src/app/api/api.js index 5079588..6700a60 100644 --- a/admin/src/app/api/api.js +++ b/admin/src/app/api/api.js @@ -3,7 +3,7 @@ import axios from 'axios'; export async function getASpecificReview(id) { - let response = await axios.get(`http://localhost:5000/undergradeReviews/id/${id}`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/undergradeReviews/id/${id}`) if(!response.status == 200){ throw { message: "Failed to fetch Review", @@ -18,7 +18,7 @@ import axios from 'axios'; } export async function getAUserReview(id) { - let response = await axios.get(`http://localhost:5000/undergradeReviews/user/${id}`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/undergradeReviews/user/${id}`) if(!response.status == 200){ @@ -35,7 +35,7 @@ export async function getAUserReview(id) { export async function getAUserHonor(id) { - let response = await axios.get(`http://localhost:5000/honors/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/honors/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Honor", @@ -50,7 +50,7 @@ export async function getAUserHonor(id) { } export async function getAUserActivity(id) { - let response = await axios.get(`http://localhost:5000/activities/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/activities/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Activity", @@ -65,7 +65,7 @@ export async function getAUserActivity(id) { } export async function getAUserAid(id) { - let response = await axios.get(`http://localhost:5000/aids/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/aids/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Aid", @@ -80,7 +80,7 @@ export async function getAUserAid(id) { } export async function getAUserEssay(id) { - let response = await axios.get(`http://localhost:5000/essays/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/essays/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Essay", @@ -95,7 +95,7 @@ export async function getAUserEssay(id) { } export async function getAUserRecommendation(id) { - let response = await axios.get(`http://localhost:5000/recommendations/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/recommendations/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Recommendation", diff --git a/admin/src/app/api/apiSlice.js b/admin/src/app/api/apiSlice.js index a2baf64..ef5ecc9 100644 --- a/admin/src/app/api/apiSlice.js +++ b/admin/src/app/api/apiSlice.js @@ -2,7 +2,7 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' import { setCredentials } from '../../features/auth/authSlice' const baseQuery = fetchBaseQuery({ - baseUrl: 'http://localhost:5000', + baseUrl: 'https://ckodon-api-backend.onrender.com', credentials: 'include', prepareHeaders: (headers, { getState }) => { const token = getState().auth.token @@ -49,6 +49,6 @@ const baseQueryWithReauth = async (args, api, extraOptions) => { export const apiSlice = createApi({ baseQuery: baseQueryWithReauth, - tagTypes: ['UndergraduateApplicant', 'User', "Honor", "Activity", "Essay", 'Aid', 'Recommendation', "UndergraduateReview", "ReviewByUser", 'ReviewBySpecific', 'SpecificStudent' ], + tagTypes: ['UndergraduateApplicant', 'User', "Honor", "Activity", "Essay", 'Aid', 'Recommendation', "UndergraduateReview", "ReviewByUser", 'ReviewBySpecific', 'SpecificStudent', 'Mentors', 'SpecificMentor' ], endpoints: builder => ({}) }) \ No newline at end of file diff --git a/admin/src/components/modal.js/ModalBox.jsx b/admin/src/components/modal.js/ModalBox.jsx new file mode 100644 index 0000000..58b5ae8 --- /dev/null +++ b/admin/src/components/modal.js/ModalBox.jsx @@ -0,0 +1,45 @@ +import React from "react"; + +function ModalBox({modalHeader, children}) { + return ( + <> +
+
+ {/*content*/} +
+ {/*header*/} +
+

+ {modalHeader} +

+ +
+ +{children} + + +
+
+
+
+ + ); +} + +export default ModalBox; + +export function ModalBody(props){ +return ( +
+ {props.children} +
+) +} + +export function ModalFooter(props){ + return ( +
+ {props.children} +
+ ) +} \ No newline at end of file diff --git a/admin/src/components/toolkits/tollkit.jsx b/admin/src/components/toolkits/tollkit.jsx index 3bff48e..47c5269 100644 --- a/admin/src/components/toolkits/tollkit.jsx +++ b/admin/src/components/toolkits/tollkit.jsx @@ -31,6 +31,7 @@ export function CustomToolkit(props) {
{props.icon} diff --git a/admin/src/features/admin/mentors/allMentors.jsx b/admin/src/features/admin/mentors/allMentors.jsx new file mode 100644 index 0000000..e6bc4a0 --- /dev/null +++ b/admin/src/features/admin/mentors/allMentors.jsx @@ -0,0 +1,353 @@ +import React, { useState } from "react"; +import { Link } from "react-router-dom/dist/umd/react-router-dom.development"; +import { + useInviteMentorMutation, + useDeleteMentorMutation, + useGetMentorsQuery, + useAssignMentorMutation, +} from "../../../apiSlice/mentors"; +import { useGetStudentsQuery } from "../../../apiSlice/usersApiSlice"; +import Page from "../../../components/shared/page"; +import NoContent from "../../../components/indications/noContent"; +import { CoverLoaderMedium } from "../../../components/loaders/loader"; +import { ToastContainer, toast } from "react-toastify"; +import { Tooltip as ReactTooltip } from "react-tooltip"; +import { + RefreshToolkit, + CustomToolkit, +} from "../../../components/toolkits/tollkit"; +import { NormalInputs } from "../../../components/customHTML/textInputs"; +import { ButtonDefault } from "../../../components/buttons"; +import { + HiOutlineSearch, + HiOutlinePlus, + HiOutlineSwitchHorizontal, +} from "react-icons/hi"; +import { HiBarsArrowUp, HiBarsArrowDown } from "react-icons/hi2"; +import ModalBox, { + ModalBody, + ModalFooter, +} from "../../../components/modal.js/ModalBox"; +function AllMentors() { + const { data: mentors, isLoading: getmentor } = useGetMentorsQuery(); + const { data: students, isLoading: getStudents } = useGetStudentsQuery(); + const [assignMentors, { isLoading: assigning }] = useAssignMentorMutation(); + const [inviteMentorQuery, {isLoading: inviting}] = useInviteMentorMutation() + const [readToAssign, setReadToAssign] = useState(false); + const [readToAddMentor, setReadToAddMentor] = useState(false); + const [studentName, setStudentName] = useState(""); + const [mentorName, setMentorName] = useState(""); + const [mentorEmail, setMentorEmail] = useState(""); + const [isValidEmail, setIsValidEmail] = useState(false); + + const emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/g; + + let content; + const isLoading = getmentor || getStudents || assigning || inviting + + if (!mentors?.length) { + content = ; + } else { + content = ( + + + + + + + + + + + {mentors?.map((mentor, index) => ( + + + + + + + + ))} +
+ NO. + + Mentor name + + school + + time added +
{index + 1} + {`${mentor.firstName} ${mentor.lastName}`} + {mentor.school}... + + Open Files + +
+ ); + } + + //Assign mentor to student + + async function assignMentor() { + try { + let res = await assignMentors({ + studentId: studentName, + mentorId: mentorName, + }); + if (res?.data?.isSuccess) { + setReadToAssign(false); + setMentorName(''); + setStudentName(''); + toast.success(`${res.data.message}`, { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } else if (res.error) { + toast.error(`${res.error.data.message}`, { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } else { + toast.error("Error occured! Try again", { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } + } catch (error) { + toast.error("Error occured! Try again", { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } + } + async function inviteMentor() { + try { + let res = await inviteMentorQuery({ + email: mentorEmail, + }); + if (res?.data?.isSuccess) { + setReadToAddMentor(false); + setMentorEmail(''); + toast.success(`${res.data.message}`, { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } else if (res.error) { + toast.error(`${res.error.data.message}`, { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } else { + toast.error("Error occured! Try again", { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } + } catch (error) { + toast.error("Error occured! Try again", { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } + } + return ( + <> + +

+ All enrolled undergraduate students +

+ +
+
+ + + Search + +
+
+ setReadToAssign(true)} + icon={} + /> + } + action={() => setReadToAddMentor(true)} + /> + +
+ {content} +
+
+ {readToAssign && ( + + +
+
+

Student Name

+ +
+
+

Mentor Name

+ +
+
+
+ + + + +
+ )} + {readToAddMentor && ( + + + + { + setMentorEmail(e.target.value) + setIsValidEmail(emailRegex.test(mentorEmail)); + }} + className="border-2 border-MdBlue focus:border-emerald-600 py-2 px-3 rounded-md" + /> + + + + + + + )} + + {isLoading && } + + ); +} +export default AllMentors; diff --git a/admin/src/features/admin/mentors/detailMentor.jsx b/admin/src/features/admin/mentors/detailMentor.jsx new file mode 100644 index 0000000..63627ac --- /dev/null +++ b/admin/src/features/admin/mentors/detailMentor.jsx @@ -0,0 +1,262 @@ +import React, { useState } from "react"; +import { Link, useParams } from "react-router-dom"; +import { + HiLocationMarker, + HiMail, + HiPhone, + HiLibrary, + HiChat, + HiOutlineSwitchHorizontal, +} from "react-icons/hi"; +import Page from "../../../components/shared/page"; +import { + useGetMentorQuery, + useAssignMentorMutation, +} from "../../../apiSlice/mentors"; +import { useGetStudentsQuery } from "../../../apiSlice/usersApiSlice"; +import TextareaAutosize from "react-textarea-autosize"; +import { MediumLoader } from "../../../components/loaders/loader"; +import { HiPencil } from "react-icons/hi2"; +import { ToastContainer, toast } from "react-toastify"; +import ModalBox, { + ModalBody, + ModalFooter, +} from "../../../components/modal.js/ModalBox"; +import { CoverLoaderMedium } from "../../../components/loaders/loader"; + + + +function DetailMentor() { + const params = useParams(); + const { + data: mentor, + isLoading: getMentor, + + } = useGetMentorQuery(params.id); + const { + data: students, + isLoading: getStudents, + } = useGetStudentsQuery(); + const [assignStudent, { isLoading: updating }] = useAssignMentorMutation(); + const [readToAssign, setReadToAssign] = useState(false); + const [studentName, setStudentName] = useState(""); + let isLoading = getMentor || updating || getStudents + + + + async function assignMentor() { + try { + let res = await assignStudent({ + studentId: studentName, + mentorId: params.id, + }); + if (res?.data?.isSuccess) { + setReadToAssign(false); + setStudentName(''); + toast.success(`${res.data.message}`, { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } else if (res.error) { + toast.error(`${res.error.data.message}`, { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } else { + toast.error("Error occured! Try again", { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } + } catch (error) { + toast.error("Error occured! Try again", { + position: "bottom-right", + autoClose: 5000, + hideProgressBar: false, + closeOnClick: true, + pauseOnHover: true, + draggable: true, + progress: undefined, + theme: "colored", + }); + } + } + + return ( + <> + +
+
+
+
+
+
+
+ {mentor?.firstName} +
+
+ +
+
+ + +
+
+ +
+
+
+ + {mentor?.students?.length} + + + Mentees + +
+
+
+
+ +
+

+ {`${mentor?.firstName} ${mentor?.lastName}`} +

+
+ + {`${mentor?.residence}`} +
+ +
+ + {`${mentor?.school}`} +
+ +
+ + {`${mentor?.email}`} +
+ +
+ + {`${mentor?.phone}`} +
+
+ +
+

{`Students under ${mentor?.firstName} ${mentor?.lastName} mentorship`}

+ +
+ {mentor?.mentees?.map((mente) => ( + + {mente?.firstName} +

+ {`${mente?.firstName} ${mente?.lastName}`} +

+ + ))} +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {readToAssign && ( + + +
+
+

Student Name

+ +
+ +
+
+ + + + +
+ )} + + {isLoading && } + + ); +} + +export default DetailMentor; diff --git a/mentors/package.json b/mentors/package.json index 999e869..a01b3d2 100644 --- a/mentors/package.json +++ b/mentors/package.json @@ -35,5 +35,5 @@ "tailwindcss": "^3.3.1", "vite": "^4.2.0" }, - "proxy": "http://localhost:5000" + "proxy": "https://ckodon-api-backend.onrender.com" } diff --git a/mentors/src/app/api/api.js b/mentors/src/app/api/api.js index 5079588..6700a60 100644 --- a/mentors/src/app/api/api.js +++ b/mentors/src/app/api/api.js @@ -3,7 +3,7 @@ import axios from 'axios'; export async function getASpecificReview(id) { - let response = await axios.get(`http://localhost:5000/undergradeReviews/id/${id}`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/undergradeReviews/id/${id}`) if(!response.status == 200){ throw { message: "Failed to fetch Review", @@ -18,7 +18,7 @@ import axios from 'axios'; } export async function getAUserReview(id) { - let response = await axios.get(`http://localhost:5000/undergradeReviews/user/${id}`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/undergradeReviews/user/${id}`) if(!response.status == 200){ @@ -35,7 +35,7 @@ export async function getAUserReview(id) { export async function getAUserHonor(id) { - let response = await axios.get(`http://localhost:5000/honors/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/honors/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Honor", @@ -50,7 +50,7 @@ export async function getAUserHonor(id) { } export async function getAUserActivity(id) { - let response = await axios.get(`http://localhost:5000/activities/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/activities/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Activity", @@ -65,7 +65,7 @@ export async function getAUserActivity(id) { } export async function getAUserAid(id) { - let response = await axios.get(`http://localhost:5000/aids/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/aids/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Aid", @@ -80,7 +80,7 @@ export async function getAUserAid(id) { } export async function getAUserEssay(id) { - let response = await axios.get(`http://localhost:5000/essays/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/essays/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Essay", @@ -95,7 +95,7 @@ export async function getAUserEssay(id) { } export async function getAUserRecommendation(id) { - let response = await axios.get(`http://localhost:5000/recommendations/user/643e93e228fe348dc275fe37`) + let response = await axios.get(`https://ckodon-api-backend.onrender.com/recommendations/user/643e93e228fe348dc275fe37`) if(!response.status == 200){ throw { message: "Failed to fetch Recommendation", diff --git a/mentors/src/app/api/apiSlice.js b/mentors/src/app/api/apiSlice.js index a2baf64..403c78a 100644 --- a/mentors/src/app/api/apiSlice.js +++ b/mentors/src/app/api/apiSlice.js @@ -2,7 +2,7 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' import { setCredentials } from '../../features/auth/authSlice' const baseQuery = fetchBaseQuery({ - baseUrl: 'http://localhost:5000', + baseUrl: 'https://ckodon-api-backend.onrender.com', credentials: 'include', prepareHeaders: (headers, { getState }) => { const token = getState().auth.token