mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: init routes protection
This commit is contained in:
parent
49b6d1dfe7
commit
1ad8ee12b1
25 changed files with 82 additions and 64 deletions
|
|
@ -9,7 +9,7 @@ import AuthProvider from "@components/Security/AuthProvider";
|
||||||
import EditorWrapper from "@components/Editor/EditorWrapper";
|
import EditorWrapper from "@components/Editor/EditorWrapper";
|
||||||
import useSWR, { mutate } from "swr";
|
import useSWR, { mutate } from "swr";
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
|
|
||||||
function EditActivity(params: any) {
|
function EditActivity(params: any) {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { Title } from "@components/UI/Elements/Styles/Title";
|
||||||
import { createCollection } from "@services/courses/collections";
|
import { createCollection } from "@services/courses/collections";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
import { getOrganizationContextInfo } from "@services/organizations/orgs";
|
import { getOrganizationContextInfo } from "@services/organizations/orgs";
|
||||||
|
|
||||||
function NewCollection(params : any) {
|
function NewCollection(params : any) {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import styled from "styled-components";
|
||||||
import { Title } from "@components/UI/Elements/Styles/Title";
|
import { Title } from "@components/UI/Elements/Styles/Title";
|
||||||
import { deleteCollection } from "@services/courses/collections";
|
import { deleteCollection } from "@services/courses/collections";
|
||||||
import { getAPIUrl, getBackendUrl, getUriWithOrg } from "@services/config/config";
|
import { getAPIUrl, getBackendUrl, getUriWithOrg } from "@services/config/config";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
import useSWR, { mutate } from "swr";
|
import useSWR, { mutate } from "swr";
|
||||||
|
|
||||||
function Collections(params: any) {
|
function Collections(params: any) {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import { getCourse } from "@services/courses/courses";
|
||||||
import VideoActivity from "@components/Pages/Activities/Video/Video";
|
import VideoActivity from "@components/Pages/Activities/Video/Video";
|
||||||
import useSWR, { mutate } from "swr";
|
import useSWR, { mutate } from "swr";
|
||||||
import { Check } from "lucide-react";
|
import { Check } from "lucide-react";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
import { markActivityAsComplete } from "@services/courses/activity";
|
import { markActivityAsComplete } from "@services/courses/activity";
|
||||||
|
|
||||||
function ActivityPage(params: any) {
|
function ActivityPage(params: any) {
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import { createActivity, createFileActivity } from "@services/courses/activities
|
||||||
import { getOrganizationContextInfo } from "@services/organizations/orgs";
|
import { getOrganizationContextInfo } from "@services/organizations/orgs";
|
||||||
import Modal from "@components/UI/Modal/Modal";
|
import Modal from "@components/UI/Modal/Modal";
|
||||||
import AuthProvider from "@components/Security/AuthProvider";
|
import AuthProvider from "@components/Security/AuthProvider";
|
||||||
|
import { denyAccessToUser } from "@services/utils/react/middlewares/views";
|
||||||
|
|
||||||
function CourseEdit(params: any) {
|
function CourseEdit(params: any) {
|
||||||
|
|
||||||
|
|
@ -38,9 +39,7 @@ function CourseEdit(params: any) {
|
||||||
const courseChapters = await getCourseChaptersMetadata(courseid);
|
const courseChapters = await getCourseChaptersMetadata(courseid);
|
||||||
setData(courseChapters);
|
setData(courseChapters);
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
if (error.status === 401) {
|
denyAccessToUser(error, router)
|
||||||
router.push("/login");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,26 @@
|
||||||
"use client";
|
"use client";
|
||||||
import { EyeOpenIcon, Pencil2Icon } from "@radix-ui/react-icons";
|
import { EyeOpenIcon, Pencil2Icon } from "@radix-ui/react-icons";
|
||||||
import { removeCourse, startCourse } from "@services/courses/activity";
|
import { removeCourse, startCourse } from "@services/courses/activity";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import styled from "styled-components";
|
import styled from "styled-components";
|
||||||
import { getAPIUrl, getBackendUrl, getUriWithOrg } from "@services/config/config";
|
import { getAPIUrl, getBackendUrl, getUriWithOrg } from "@services/config/config";
|
||||||
import useSWR, { mutate } from "swr";
|
import useSWR, { mutate } from "swr";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
const CourseIdPage = (params: any) => {
|
const CourseIdPage = (params: any) => {
|
||||||
const courseid = params.params.courseid;
|
const courseid = params.params.courseid;
|
||||||
const orgslug = params.params.orgslug;
|
const orgslug = params.params.orgslug;
|
||||||
const { data: course, error: error } = useSWR(`${getAPIUrl()}courses/meta/course_${courseid}`, swrFetcher);
|
const router = useRouter();
|
||||||
|
|
||||||
|
const { data: course, error: error } = useSWR(`${getAPIUrl()}courses/meta/course_${courseid}`,
|
||||||
|
(url: string, body: any) => swrFetcher(url, body, router)
|
||||||
|
);
|
||||||
|
|
||||||
async function startCourseUI() {
|
async function startCourseUI() {
|
||||||
// Create activity
|
// Create activity
|
||||||
await startCourse("course_" + courseid, orgslug);
|
await startCourse("course_" + courseid, orgslug);
|
||||||
|
|
||||||
// Mutate course
|
// Mutate course
|
||||||
mutate(`${getAPIUrl()}courses/meta/course_${courseid}`);
|
mutate(`${getAPIUrl()}courses/meta/course_${courseid}`);
|
||||||
|
|
@ -24,7 +29,7 @@ const CourseIdPage = (params: any) => {
|
||||||
async function quitCourse() {
|
async function quitCourse() {
|
||||||
|
|
||||||
// Close activity
|
// Close activity
|
||||||
let activity = await removeCourse("course_" + courseid, orgslug);
|
let activity = await removeCourse("course_" + courseid, orgslug);
|
||||||
console.log(activity);
|
console.log(activity);
|
||||||
|
|
||||||
// Mutate course
|
// Mutate course
|
||||||
|
|
@ -42,7 +47,7 @@ const CourseIdPage = (params: any) => {
|
||||||
<p>Course</p>
|
<p>Course</p>
|
||||||
<h1>
|
<h1>
|
||||||
{course.course.name}{" "}
|
{course.course.name}{" "}
|
||||||
<Link href={getUriWithOrg(orgslug,"") +`/course/${courseid}/edit`} rel="noopener noreferrer">
|
<Link href={getUriWithOrg(orgslug, "") + `/course/${courseid}/edit`} rel="noopener noreferrer">
|
||||||
<Pencil2Icon />
|
<Pencil2Icon />
|
||||||
</Link>{" "}
|
</Link>{" "}
|
||||||
</h1>
|
</h1>
|
||||||
|
|
@ -53,7 +58,7 @@ const CourseIdPage = (params: any) => {
|
||||||
{chapter.activities.map((activity: any) => {
|
{chapter.activities.map((activity: any) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Link href={getUriWithOrg(orgslug,"") +`/course/${courseid}/activity/${activity.id.replace("activity_", "")}`}>
|
<Link href={getUriWithOrg(orgslug, "") + `/course/${courseid}/activity/${activity.id.replace("activity_", "")}`}>
|
||||||
<ChapterIndicator />
|
<ChapterIndicator />
|
||||||
</Link>{" "}
|
</Link>{" "}
|
||||||
</>
|
</>
|
||||||
|
|
@ -94,7 +99,7 @@ const CourseIdPage = (params: any) => {
|
||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
Activity {activity.name}
|
Activity {activity.name}
|
||||||
<Link href={getUriWithOrg(orgslug,"") +`/course/${courseid}/activity/${activity.id.replace("activity_", "")}`} rel="noopener noreferrer">
|
<Link href={getUriWithOrg(orgslug, "") + `/course/${courseid}/activity/${activity.id.replace("activity_", "")}`} rel="noopener noreferrer">
|
||||||
<EyeOpenIcon />
|
<EyeOpenIcon />
|
||||||
</Link>{" "}
|
</Link>{" "}
|
||||||
</p>
|
</p>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { Title } from "@components/UI/Elements/Styles/Title";
|
||||||
import { getAPIUrl, getBackendUrl, getSelfHostedOption, getUriWithOrg } from "@services/config/config";
|
import { getAPIUrl, getBackendUrl, getSelfHostedOption, getUriWithOrg } from "@services/config/config";
|
||||||
import { deleteCourseFromBackend } from "@services/courses/courses";
|
import { deleteCourseFromBackend } from "@services/courses/courses";
|
||||||
import useSWR, { mutate } from "swr";
|
import useSWR, { mutate } from "swr";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
import { Edit2, Trash } from "lucide-react";
|
import { Edit2, Trash } from "lucide-react";
|
||||||
|
|
||||||
const CoursesIndexPage = (params: any) => {
|
const CoursesIndexPage = (params: any) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
"use client";
|
"use client";
|
||||||
import { getAPIUrl, getBackendUrl } from "@services/config/config";
|
import { getAPIUrl, getBackendUrl } from "@services/config/config";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { styled } from "styled-components";
|
import { styled } from "styled-components";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
"use client";
|
"use client";
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import useSWR, { mutate } from "swr";
|
import useSWR, { mutate } from "swr";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
import { getAPIUrl } from '@services/config/config';
|
import { getAPIUrl } from '@services/config/config';
|
||||||
import { Field, Form, Formik } from 'formik';
|
import { Field, Form, Formik } from 'formik';
|
||||||
import { updateOrganization } from '@services/settings/org';
|
import { updateOrganization } from '@services/settings/org';
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import React from "react";
|
||||||
import { Title } from "../../components/UI/Elements/Styles/Title";
|
import { Title } from "../../components/UI/Elements/Styles/Title";
|
||||||
import { deleteOrganizationFromBackend } from "@services/organizations/orgs";
|
import { deleteOrganizationFromBackend } from "@services/organizations/orgs";
|
||||||
import useSWR, { mutate } from "swr";
|
import useSWR, { mutate } from "swr";
|
||||||
import { swrFetcher } from "@services/utils/requests";
|
import { swrFetcher } from "@services/utils/ts/requests";
|
||||||
import { getAPIUrl, getUriWithOrg } from "@services/config/config";
|
import { getAPIUrl, getUriWithOrg } from "@services/config/config";
|
||||||
import AuthProvider from "@components/Security/AuthProvider";
|
import AuthProvider from "@components/Security/AuthProvider";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
|
import { RequestBody, RequestBodyForm } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
export async function uploadNewImageFile(file: any, activity_id: string) {
|
export async function uploadNewImageFile(file: any, activity_id: string) {
|
||||||
// Send file thumbnail as form data
|
// Send file thumbnail as form data
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
|
import { RequestBody, RequestBodyForm } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
export async function uploadNewPDFFile(file: any, activity_id: string) {
|
export async function uploadNewPDFFile(file: any, activity_id: string) {
|
||||||
// Send file thumbnail as form data
|
// Send file thumbnail as form data
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
|
import { RequestBody, RequestBodyForm } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
|
|
||||||
export async function submitQuizBlock(activity_id: string, data: any) {
|
export async function submitQuizBlock(activity_id: string, data: any) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
|
import { RequestBody, RequestBodyForm } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
export async function uploadNewVideoFile(file: any, activity_id: string) {
|
export async function uploadNewVideoFile(file: any, activity_id: string) {
|
||||||
// Send file thumbnail as form data
|
// Send file thumbnail as form data
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
|
import { RequestBody, RequestBodyForm } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
export async function createActivity(data: any, chapter_id: any, org_id: any) {
|
export async function createActivity(data: any, chapter_id: any, org_id: any) {
|
||||||
data.content = {};
|
data.content = {};
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { RequestBody } from "@services/utils/requests";
|
import { RequestBody } from "@services/utils/ts/requests";
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import { initialData } from "../../components/Pages/CourseEdit/Draggables/data";
|
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "@services/utils/requests";
|
import { RequestBody, errorHandling } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
@ -9,38 +8,26 @@ import { RequestBody } from "@services/utils/requests";
|
||||||
|
|
||||||
//TODO : depreciate this function
|
//TODO : depreciate this function
|
||||||
export async function getCourseChaptersMetadata(course_id: any) {
|
export async function getCourseChaptersMetadata(course_id: any) {
|
||||||
const response = await fetch(`${getAPIUrl()}chapters/meta/course_${course_id}`, RequestBody("GET", null));
|
const result = await fetch(`${getAPIUrl()}chapters/meta/course_${course_id}`, RequestBody("GET", null));
|
||||||
|
const res = await errorHandling(result);
|
||||||
if (!response.ok) {
|
return res;
|
||||||
const error: any = new Error(`Error ${response.status}: ${response.statusText}`, {});
|
|
||||||
error.status = response.status;
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
|
|
||||||
const data = await response.json();
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function updateChaptersMetadata(course_id: any, data: any) {
|
export async function updateChaptersMetadata(course_id: any, data: any) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}chapters/meta/course_${course_id}`, RequestBody("PUT", data))
|
const result: any = await fetch(`${getAPIUrl()}chapters/meta/course_${course_id}`, RequestBody("PUT", data));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createChapter(data: any, course_id: any) {
|
export async function createChapter(data: any, course_id: any) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}chapters/?course_id=course_${course_id}`, RequestBody("POST", data))
|
const result: any = await fetch(`${getAPIUrl()}chapters/?course_id=course_${course_id}`, RequestBody("POST", data));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
|
||||||
|
|
||||||
return result;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteChapter(coursechapter_id: any) {
|
export async function deleteChapter(coursechapter_id: any) {
|
||||||
const result: any = await fetch(`${getAPIUrl()}chapters/${coursechapter_id}`, RequestBody("DELETE", null))
|
const result: any = await fetch(`${getAPIUrl()}chapters/${coursechapter_id}`, RequestBody("DELETE", null));
|
||||||
.then((result) => result.json())
|
const res = await errorHandling(result);
|
||||||
.catch((error) => console.log("error", error));
|
return res;
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "../config/config";
|
import { getAPIUrl } from "../config/config";
|
||||||
import { RequestBody } from "../utils/requests";
|
import { RequestBody } from "../utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody, RequestBodyForm } from "@services/utils/requests";
|
import { RequestBody, RequestBodyForm } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "../utils/requests";
|
import { RequestBody } from "../utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "@services/utils/requests";
|
import { RequestBody } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "@services/utils/requests";
|
import { RequestBody } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { getAPIUrl } from "@services/config/config";
|
import { getAPIUrl } from "@services/config/config";
|
||||||
import { RequestBody } from "@services/utils/requests";
|
import { RequestBody } from "@services/utils/ts/requests";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This file includes only POST, PUT, DELETE requests
|
This file includes only POST, PUT, DELETE requests
|
||||||
|
|
|
||||||
14
front/services/utils/react/middlewares/views.ts
Normal file
14
front/services/utils/react/middlewares/views.ts
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context";
|
||||||
|
import { NextRouter } from "next/router";
|
||||||
|
|
||||||
|
export const denyAccessToUser = (error : any, router: AppRouterInstance) => {
|
||||||
|
if (error.status === 401) {
|
||||||
|
router.push("/login");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error.status === 403) {
|
||||||
|
router.push("/login");
|
||||||
|
// TODO : add a message to the user to tell him he is not allowed to access this page, route to /error
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
import { AppRouterInstance } from "next/dist/shared/lib/app-router-context";
|
||||||
|
import { denyAccessToUser } from "../react/middlewares/views";
|
||||||
|
|
||||||
export const RequestBody = (method: string, data: any) => {
|
export const RequestBody = (method: string, data: any) => {
|
||||||
let HeadersConfig = new Headers({ "Content-Type": "application/json" });
|
let HeadersConfig = new Headers({ "Content-Type": "application/json" });
|
||||||
let options: any = {
|
let options: any = {
|
||||||
|
|
@ -24,7 +27,7 @@ export const RequestBodyForm = (method: string, data: any) => {
|
||||||
return options;
|
return options;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const swrFetcher = async (url: string, body: any) => {
|
export const swrFetcher = async (url: string, body: any, router?: AppRouterInstance) => {
|
||||||
// Create the request options
|
// Create the request options
|
||||||
let HeadersConfig = new Headers({ "Content-Type": "application/json" });
|
let HeadersConfig = new Headers({ "Content-Type": "application/json" });
|
||||||
let options: any = {
|
let options: any = {
|
||||||
|
|
@ -39,15 +42,25 @@ export const swrFetcher = async (url: string, body: any) => {
|
||||||
options.body = JSON.stringify(body);
|
options.body = JSON.stringify(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the data
|
try {
|
||||||
const res = await fetch(url, options);
|
// Fetch the data
|
||||||
|
const request = await fetch(url, options);
|
||||||
|
let res = errorHandling(request);
|
||||||
|
|
||||||
// If the response is not in the 200 range, throw an error
|
// Return the data
|
||||||
|
return res;
|
||||||
|
} catch (error: any) {
|
||||||
|
if (router) {
|
||||||
|
denyAccessToUser(error, router);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const errorHandling = (res: any) => {
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
const error = new Error("An error occurred while fetching the data.");
|
const error: any = new Error(`Error ${res.status}: ${res.statusText}`, {});
|
||||||
|
error.status = res.status;
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the data
|
|
||||||
return res.json();
|
return res.json();
|
||||||
};
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue