-
You do not have time credits for your account type!
+ {hasExpired &&
You do not have time credits for your account type!}
{isIndividual() && (
diff --git a/src/pages/api/register.ts b/src/pages/api/register.ts
index f5b0348f..e1607d3d 100644
--- a/src/pages/api/register.ts
+++ b/src/pages/api/register.ts
@@ -6,6 +6,7 @@ import {withIronSessionApiRoute} from "iron-session/next";
import {getFirestore, doc, setDoc, query, collection, where, getDocs} from "firebase/firestore";
import {CorporateInformation, DemographicInformation, Type} from "@/interfaces/user";
import {addUserToGroupOnCreation} from "@/utils/registration";
+import moment from "moment";
const auth = getAuth(app);
const db = getFirestore(app);
@@ -45,12 +46,12 @@ async function registerIndividual(req: NextApiRequest, res: NextApiResponse) {
const codeQuery = query(collection(db, "codes"), where("code", "==", code));
const codeDocs = (await getDocs(codeQuery)).docs.filter((x) => !Object.keys(x.data()).includes("userId"));
- if (codeDocs.length === 0) {
+ if (code && code.length > 0 && codeDocs.length === 0) {
res.status(400).json({error: "Invalid Code!"});
return;
}
- const codeData = codeDocs[0].data() as {code: string; type: Type; creator?: string; expiryDate: Date | null};
+ const codeData = codeDocs.length > 0 ? (codeDocs[0].data() as {code: string; type: Type; creator?: string; expiryDate: Date | null}) : undefined;
createUserWithEmailAndPassword(auth, email, password)
.then(async (userCredentials) => {
@@ -62,17 +63,20 @@ async function registerIndividual(req: NextApiRequest, res: NextApiResponse) {
desiredLevels: DEFAULT_DESIRED_LEVELS,
levels: DEFAULT_LEVELS,
bio: "",
- isFirstLogin: codeData.type === "student",
+ isFirstLogin: codeData ? codeData.type === "student" : true,
focus: "academic",
- type: codeData.type,
- subscriptionExpirationDate: codeData.expiryDate,
+ type: codeData ? codeData.type : "student",
+ subscriptionExpirationDate: codeData ? codeData.expiryDate : moment().subtract(1, "days").toISOString(),
registrationDate: new Date(),
status: code ? "active" : "paymentDue",
};
await setDoc(doc(db, "users", userId), user);
- await setDoc(codeDocs[0].ref, {userId: userId}, {merge: true});
- if (codeData.creator) await addUserToGroupOnCreation(userId, codeData.type, codeData.creator);
+
+ if (codeDocs.length > 0 && codeData) {
+ await setDoc(codeDocs[0].ref, {userId: userId}, {merge: true});
+ if (codeData.creator) await addUserToGroupOnCreation(userId, codeData.type, codeData.creator);
+ }
req.session.user = {...user, id: userId};
await req.session.save();
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index e249d187..db14347e 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -92,7 +92,7 @@ export default function Home() {
)}
- {(user.status === "paymentDue" || checkIfUserExpired()) &&
}
+ {(user.status === "paymentDue" || checkIfUserExpired()) &&
}
>
);
}
diff --git a/src/pages/payment.tsx b/src/pages/payment.tsx
new file mode 100644
index 00000000..a0a6945a
--- /dev/null
+++ b/src/pages/payment.tsx
@@ -0,0 +1,70 @@
+/* eslint-disable @next/next/no-img-element */
+import Head from "next/head";
+import Navbar from "@/components/Navbar";
+import {BsFileEarmarkText, BsPencil, BsStar, BsBook, BsHeadphones, BsPen, BsMegaphone} from "react-icons/bs";
+import {withIronSessionSsr} from "iron-session/next";
+import {sessionOptions} from "@/lib/session";
+import {useEffect, useState} from "react";
+import useStats from "@/hooks/useStats";
+import {averageScore, groupBySession, totalExams} from "@/utils/stats";
+import useUser from "@/hooks/useUser";
+import Sidebar from "@/components/Sidebar";
+import Diagnostic from "@/components/Diagnostic";
+import {ToastContainer} from "react-toastify";
+import {capitalize} from "lodash";
+import {Module} from "@/interfaces";
+import ProgressBar from "@/components/Low/ProgressBar";
+import Layout from "@/components/High/Layout";
+import {calculateAverageLevel} from "@/utils/score";
+import axios from "axios";
+import DemographicInformationInput from "@/components/DemographicInformationInput";
+import moment from "moment";
+import Link from "next/link";
+import {MODULE_ARRAY} from "@/utils/moduleUtils";
+import ProfileSummary from "@/components/ProfileSummary";
+import StudentDashboard from "@/dashboards/Student";
+import AdminDashboard from "@/dashboards/Admin";
+import CorporateDashboard from "@/dashboards/Corporate";
+import TeacherDashboard from "@/dashboards/Teacher";
+import AgentDashboard from "@/dashboards/Agent";
+import PaymentDue from "./(status)/PaymentDue";
+import {useRouter} from "next/router";
+
+export const getServerSideProps = withIronSessionSsr(({req, res}) => {
+ const user = req.session.user;
+
+ if (!user || !user.isVerified) {
+ res.setHeader("location", "/login");
+ res.statusCode = 302;
+ res.end();
+ return {
+ props: {
+ user: null,
+ },
+ };
+ }
+
+ return {
+ props: {user: req.session.user},
+ };
+}, sessionOptions);
+
+export default function Home() {
+ const {user, mutateUser} = useUser({redirectTo: "/login"});
+ const router = useRouter();
+
+ return (
+ <>
+
+
EnCoach
+
+
+
+
+ {user &&
}
+ >
+ );
+}
diff --git a/src/pages/profile.tsx b/src/pages/profile.tsx
index abf372c6..44386fab 100644
--- a/src/pages/profile.tsx
+++ b/src/pages/profile.tsx
@@ -296,9 +296,9 @@ export default function Home() {