mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 23:58:31 -06:00
limited latex support
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { axiosClient } from "@/services/axiosUtils";
|
||||
import { withErrorHandling } from "@/services/withErrorHandling";
|
||||
import { AxiosResponseHeaders, RawAxiosResponseHeaders } from "axios";
|
||||
import {
|
||||
AxiosResponseHeaders,
|
||||
isAxiosError,
|
||||
RawAxiosResponseHeaders,
|
||||
} from "axios";
|
||||
|
||||
const getUrl = (params: { rest: string[] }) => {
|
||||
const { rest } = params;
|
||||
@@ -27,7 +31,9 @@ const getNextUrl = (
|
||||
const nextLink = links.find((link) => link.includes('rel="next"'));
|
||||
|
||||
if (!nextLink) {
|
||||
console.log("could not find next url in link header, reached end of pagination");
|
||||
console.log(
|
||||
"could not find next url in link header, reached end of pagination"
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
|
||||
@@ -58,9 +64,8 @@ export async function GET(
|
||||
url.toString()
|
||||
);
|
||||
|
||||
if(!Array.isArray(firstData))
|
||||
{
|
||||
return NextResponse.json(firstData)
|
||||
if (!Array.isArray(firstData)) {
|
||||
return NextResponse.json(firstData);
|
||||
}
|
||||
|
||||
var returnData = firstData;
|
||||
@@ -82,7 +87,6 @@ export async function GET(
|
||||
}
|
||||
|
||||
return NextResponse.json(returnData);
|
||||
|
||||
} catch (error: any) {
|
||||
return new NextResponse(
|
||||
JSON.stringify({ error: error.message || "Canvas GET request failed" }),
|
||||
@@ -97,18 +101,24 @@ export async function POST(
|
||||
{ params }: { params: { rest: string[] } }
|
||||
) {
|
||||
return withErrorHandling(async () => {
|
||||
const url = getUrl(params);
|
||||
const body = await req.json();
|
||||
let response;
|
||||
try {
|
||||
const url = getUrl(params);
|
||||
const body = await req.json();
|
||||
const response = await axiosClient.post(url.toString(), body);
|
||||
response = await axiosClient.post(url.toString(), body);
|
||||
|
||||
const headers = proxyResponseHeaders(response);
|
||||
return new NextResponse(JSON.stringify(response.data), { headers });
|
||||
} catch (error: any) {
|
||||
return new NextResponse(
|
||||
JSON.stringify({
|
||||
if (isAxiosError(error)) {
|
||||
console.log(url.toString(), body);
|
||||
console.log("response data", JSON.stringify( error.response?.data));
|
||||
console.log("is axios error");
|
||||
}
|
||||
return NextResponse.json(
|
||||
{
|
||||
error: error.message || "Canvas POST request failed",
|
||||
}),
|
||||
},
|
||||
{ status: error.response?.status || 500 }
|
||||
);
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ function DraggableListItem({
|
||||
href={getModuleItemUrl(courseName, moduleName, type, item.name)}
|
||||
shallow={true}
|
||||
className={
|
||||
" border rounded-sm px-1 mx-1 break-all " +
|
||||
" border rounded-sm px-1 mx-1 break-all mb-1 " +
|
||||
" border-slate-600 bg-slate-800 " +
|
||||
" block "
|
||||
}
|
||||
|
||||
@@ -15,9 +15,11 @@ import {
|
||||
useAddAssignmentToCanvasMutation,
|
||||
useCanvasAssignmentsQuery,
|
||||
useDeleteAssignmentFromCanvasMutation,
|
||||
useUpdateAssignmentInCanvasMutation,
|
||||
} from "@/hooks/canvas/canvasAssignmentHooks";
|
||||
import { Spinner } from "@/components/Spinner";
|
||||
import { baseCanvasUrl } from "@/services/canvas/canvasServiceUtils";
|
||||
import ClientOnly from "@/components/ClientOnly";
|
||||
|
||||
export default function EditAssignment({
|
||||
moduleName,
|
||||
@@ -79,10 +81,12 @@ export default function EditAssignment({
|
||||
<AssignmentPreview assignment={assignment} />
|
||||
</div>
|
||||
</div>
|
||||
<AssignmentButtons
|
||||
moduleName={moduleName}
|
||||
assignmentName={assignmentName}
|
||||
/>
|
||||
<ClientOnly>
|
||||
<AssignmentButtons
|
||||
moduleName={moduleName}
|
||||
assignmentName={assignmentName}
|
||||
/>
|
||||
</ClientOnly>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -100,13 +104,16 @@ function AssignmentButtons({
|
||||
const { data: assignment } = useAssignmentQuery(moduleName, assignmentName);
|
||||
const addToCanvas = useAddAssignmentToCanvasMutation();
|
||||
const deleteFromCanvas = useDeleteAssignmentFromCanvasMutation();
|
||||
const updateAssignment = useUpdateAssignmentInCanvasMutation();
|
||||
|
||||
const assignmentInCanvas = canvasAssignments.find(
|
||||
(a) => a.name === assignmentName
|
||||
);
|
||||
return (
|
||||
<div className="p-5 flex flex-row justify-end gap-3">
|
||||
{(addToCanvas.isPending || deleteFromCanvas.isPending) && <Spinner />}
|
||||
{(addToCanvas.isPending ||
|
||||
deleteFromCanvas.isPending ||
|
||||
updateAssignment.isPending) && <Spinner />}
|
||||
{assignmentInCanvas && !assignmentInCanvas.published && (
|
||||
<div className="text-rose-300 my-auto">Not Published</div>
|
||||
)}
|
||||
@@ -115,7 +122,7 @@ function AssignmentButtons({
|
||||
disabled={addToCanvas.isPending}
|
||||
onClick={() => addToCanvas.mutate(assignment)}
|
||||
>
|
||||
Add to canvas....
|
||||
Add to canvas
|
||||
</button>
|
||||
)}
|
||||
{assignmentInCanvas && (
|
||||
@@ -127,6 +134,20 @@ function AssignmentButtons({
|
||||
View in Canvas
|
||||
</a>
|
||||
)}
|
||||
{assignmentInCanvas && (
|
||||
<button
|
||||
className=""
|
||||
disabled={deleteFromCanvas.isPending}
|
||||
onClick={() =>
|
||||
updateAssignment.mutate({
|
||||
canvasAssignmentId: assignmentInCanvas.id,
|
||||
assignment,
|
||||
})
|
||||
}
|
||||
>
|
||||
Update in Canvas
|
||||
</button>
|
||||
)}
|
||||
{assignmentInCanvas && (
|
||||
<button
|
||||
className="btn-danger"
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
useCanvasPagesQuery,
|
||||
useCreateCanvasPageMutation,
|
||||
} from "@/hooks/canvas/canvasPageHooks";
|
||||
import { Spinner } from "@/components/Spinner";
|
||||
import EditPageButtons from "./EditPageButtons";
|
||||
|
||||
export default function EditPage({
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
/* monaco editor */
|
||||
.monaco-editor-background,
|
||||
.monaco-editor .margin {
|
||||
background-color: #18181b !important;
|
||||
background-color: #020617 !important;
|
||||
/* background-color: #18181b !important; */
|
||||
}
|
||||
.monaco-editor { position: absolute !important; }
|
||||
|
||||
@@ -59,6 +60,19 @@ ol {
|
||||
list-style-type: decimal;
|
||||
padding-left: 1.5rem;
|
||||
}
|
||||
table {
|
||||
@apply border-collapse border border-gray-700;
|
||||
}
|
||||
|
||||
thead {
|
||||
@apply text-lg ;
|
||||
}
|
||||
|
||||
th, td {
|
||||
@apply px-2 py-1 border border-gray-700;
|
||||
}
|
||||
|
||||
|
||||
hr {
|
||||
@apply border-t border-gray-500 my-4;
|
||||
}
|
||||
@@ -70,6 +84,7 @@ blockquote {
|
||||
code {
|
||||
@apply font-mono text-sm bg-gray-800 px-2 py-1 rounded-md leading-tight inline-block;
|
||||
}
|
||||
|
||||
p {
|
||||
@apply mb-3;
|
||||
}
|
||||
|
||||
@@ -5,8 +5,8 @@ import { Suspense } from "react";
|
||||
import { getQueryClient } from "./providersQueryClientUtils";
|
||||
import { hydrateCourses } from "@/hooks/hookHydration";
|
||||
import { dehydrate, HydrationBoundary } from "@tanstack/react-query";
|
||||
import { ToastBar, Toaster } from "react-hot-toast";
|
||||
import { MyToaster } from "./MyToaster";
|
||||
import "katex/dist/katex.min.css";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Canvas Manager 2.0",
|
||||
|
||||
Reference in New Issue
Block a user