mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-26 07:38:33 -06:00
styling
This commit is contained in:
@@ -14,6 +14,12 @@ import { getLectureUrl, getModuleItemUrl } from "@/services/urlUtils";
|
|||||||
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
|
import { LocalAssignment } from "@/models/local/assignment/localAssignment";
|
||||||
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
|
import { LocalQuiz } from "@/models/local/quiz/localQuiz";
|
||||||
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
|
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
|
||||||
|
import { useCanvasAssignmentsQuery } from "@/hooks/canvas/canvasAssignmentHooks";
|
||||||
|
import { CanvasAssignment } from "@/models/canvas/assignments/canvasAssignment";
|
||||||
|
import { useCanvasQuizzesQuery } from "@/hooks/canvas/canvasQuizHooks";
|
||||||
|
import { useCanvasPagesQuery } from "@/hooks/canvas/canvasPageHooks";
|
||||||
|
import { CanvasQuiz } from "@/models/canvas/quizzes/canvasQuizModel";
|
||||||
|
import { CanvasPage } from "@/models/canvas/pages/canvasPageModel";
|
||||||
|
|
||||||
export default function Day({ day, month }: { day: string; month: number }) {
|
export default function Day({ day, month }: { day: string; month: number }) {
|
||||||
const dayAsDate = getDateFromStringOrThrow(
|
const dayAsDate = getDateFromStringOrThrow(
|
||||||
@@ -22,14 +28,21 @@ export default function Day({ day, month }: { day: string; month: number }) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const { data: settings } = useLocalCourseSettingsQuery();
|
const { data: settings } = useLocalCourseSettingsQuery();
|
||||||
|
const { data: canvasAssignments } = useCanvasAssignmentsQuery();
|
||||||
|
const { data: canvasQuizzes } = useCanvasQuizzesQuery();
|
||||||
|
const { data: canvasPages } = useCanvasPagesQuery();
|
||||||
const itemsContext = useCalendarItemsContext();
|
const itemsContext = useCalendarItemsContext();
|
||||||
const { itemDrop } = useDraggingContext();
|
const { itemDrop } = useDraggingContext();
|
||||||
|
|
||||||
const dateKey = getDateOnlyMarkdownString(dayAsDate);
|
const dateKey = getDateOnlyMarkdownString(dayAsDate);
|
||||||
const todaysModules = itemsContext[dateKey];
|
const todaysModules = itemsContext[dateKey];
|
||||||
|
|
||||||
const { todaysAssignments, todaysQuizzes, todaysPages } =
|
const { todaysAssignments, todaysQuizzes, todaysPages } = getTodaysItems(
|
||||||
getTodaysItems(todaysModules);
|
todaysModules,
|
||||||
|
canvasAssignments,
|
||||||
|
canvasQuizzes,
|
||||||
|
canvasPages
|
||||||
|
);
|
||||||
|
|
||||||
const isInSameMonth = dayAsDate.getMonth() + 1 == month;
|
const isInSameMonth = dayAsDate.getMonth() + 1 == month;
|
||||||
|
|
||||||
@@ -46,28 +59,31 @@ export default function Day({ day, month }: { day: string; month: number }) {
|
|||||||
>
|
>
|
||||||
<DayTitle day={day} dayAsDate={dayAsDate} />
|
<DayTitle day={day} dayAsDate={dayAsDate} />
|
||||||
<div>
|
<div>
|
||||||
{todaysAssignments.map(({ assignment, moduleName }) => (
|
{todaysAssignments.map(({ assignment, moduleName, status }) => (
|
||||||
<DraggableListItem
|
<DraggableListItem
|
||||||
key={assignment.name}
|
key={assignment.name}
|
||||||
type={"assignment"}
|
type={"assignment"}
|
||||||
moduleName={moduleName}
|
moduleName={moduleName}
|
||||||
item={assignment}
|
item={assignment}
|
||||||
|
status={status}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
{todaysQuizzes.map(({ quiz, moduleName }) => (
|
{todaysQuizzes.map(({ quiz, moduleName, status }) => (
|
||||||
<DraggableListItem
|
<DraggableListItem
|
||||||
key={quiz.name}
|
key={quiz.name}
|
||||||
type={"quiz"}
|
type={"quiz"}
|
||||||
moduleName={moduleName}
|
moduleName={moduleName}
|
||||||
item={quiz}
|
item={quiz}
|
||||||
|
status={status}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
{todaysPages.map(({ page, moduleName }) => (
|
{todaysPages.map(({ page, moduleName, status }) => (
|
||||||
<DraggableListItem
|
<DraggableListItem
|
||||||
key={page.name}
|
key={page.name}
|
||||||
type={"page"}
|
type={"page"}
|
||||||
moduleName={moduleName}
|
moduleName={moduleName}
|
||||||
item={page}
|
item={page}
|
||||||
|
status={status}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
@@ -84,37 +100,80 @@ function DayTitle({ day, dayAsDate }: { day: string; dayAsDate: Date }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTodaysItems(todaysModules: {
|
function getTodaysItems(
|
||||||
[moduleName: string]: {
|
todaysModules: {
|
||||||
assignments: LocalAssignment[];
|
[moduleName: string]: {
|
||||||
quizzes: LocalQuiz[];
|
assignments: LocalAssignment[];
|
||||||
pages: LocalCoursePage[];
|
quizzes: LocalQuiz[];
|
||||||
};
|
pages: LocalCoursePage[];
|
||||||
}) {
|
};
|
||||||
const todaysAssignments = todaysModules
|
},
|
||||||
|
canvasAssignments: CanvasAssignment[],
|
||||||
|
canvasQuizzes: CanvasQuiz[],
|
||||||
|
canvasPages: CanvasPage[]
|
||||||
|
) {
|
||||||
|
const todaysAssignments: {
|
||||||
|
moduleName: string;
|
||||||
|
assignment: LocalAssignment;
|
||||||
|
status: "localOnly" | "unPublished" | "published";
|
||||||
|
}[] = todaysModules
|
||||||
? Object.keys(todaysModules).flatMap((moduleName) =>
|
? Object.keys(todaysModules).flatMap((moduleName) =>
|
||||||
todaysModules[moduleName].assignments.map((assignment) => ({
|
todaysModules[moduleName].assignments.map((assignment) => {
|
||||||
moduleName,
|
const canvasAssignment = canvasAssignments.find(
|
||||||
assignment,
|
(c) => c.name === assignment.name
|
||||||
}))
|
);
|
||||||
|
return {
|
||||||
|
moduleName,
|
||||||
|
assignment,
|
||||||
|
status: canvasAssignment
|
||||||
|
? canvasAssignment.published
|
||||||
|
? "published"
|
||||||
|
: "unPublished"
|
||||||
|
: "localOnly",
|
||||||
|
};
|
||||||
|
})
|
||||||
)
|
)
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
const todaysQuizzes = todaysModules
|
const todaysQuizzes: {
|
||||||
|
moduleName: string;
|
||||||
|
quiz: LocalQuiz;
|
||||||
|
status: "localOnly" | "unPublished" | "published";
|
||||||
|
}[] = todaysModules
|
||||||
? Object.keys(todaysModules).flatMap((moduleName) =>
|
? Object.keys(todaysModules).flatMap((moduleName) =>
|
||||||
todaysModules[moduleName].quizzes.map((quiz) => ({
|
todaysModules[moduleName].quizzes.map((quiz) => {
|
||||||
moduleName,
|
const canvasQuiz = canvasQuizzes.find((q) => q.title === quiz.name);
|
||||||
quiz,
|
return {
|
||||||
}))
|
moduleName,
|
||||||
|
quiz,
|
||||||
|
status: canvasQuiz
|
||||||
|
? canvasQuiz.published
|
||||||
|
? "published"
|
||||||
|
: "unPublished"
|
||||||
|
: "localOnly",
|
||||||
|
};
|
||||||
|
})
|
||||||
)
|
)
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
const todaysPages = todaysModules
|
const todaysPages: {
|
||||||
|
moduleName: string;
|
||||||
|
page: LocalCoursePage;
|
||||||
|
status: "localOnly" | "unPublished" | "published";
|
||||||
|
}[] = todaysModules
|
||||||
? Object.keys(todaysModules).flatMap((moduleName) =>
|
? Object.keys(todaysModules).flatMap((moduleName) =>
|
||||||
todaysModules[moduleName].pages.map((page) => ({
|
todaysModules[moduleName].pages.map((page) => {
|
||||||
moduleName,
|
const canvasPage = canvasPages.find((p) => p.title === page.name);
|
||||||
page,
|
return {
|
||||||
}))
|
moduleName,
|
||||||
|
page,
|
||||||
|
status: canvasPage
|
||||||
|
? canvasPage.published
|
||||||
|
? "published"
|
||||||
|
: "unPublished"
|
||||||
|
: "localOnly",
|
||||||
|
};
|
||||||
|
})
|
||||||
)
|
)
|
||||||
: [];
|
: [];
|
||||||
return { todaysAssignments, todaysQuizzes, todaysPages };
|
return { todaysAssignments, todaysQuizzes, todaysPages };
|
||||||
@@ -123,9 +182,11 @@ function getTodaysItems(todaysModules: {
|
|||||||
function DraggableListItem({
|
function DraggableListItem({
|
||||||
type,
|
type,
|
||||||
moduleName,
|
moduleName,
|
||||||
|
status,
|
||||||
item,
|
item,
|
||||||
}: {
|
}: {
|
||||||
type: "assignment" | "page" | "quiz";
|
type: "assignment" | "page" | "quiz";
|
||||||
|
status: "localOnly" | "unPublished" | "published";
|
||||||
moduleName: string;
|
moduleName: string;
|
||||||
item: IModuleItem;
|
item: IModuleItem;
|
||||||
}) {
|
}) {
|
||||||
@@ -136,8 +197,11 @@ function DraggableListItem({
|
|||||||
shallow={true}
|
shallow={true}
|
||||||
className={
|
className={
|
||||||
" border rounded-sm px-1 mx-1 break-all mb-1 " +
|
" border rounded-sm px-1 mx-1 break-all mb-1 " +
|
||||||
" border-slate-600 bg-slate-800 " +
|
" bg-slate-800 " +
|
||||||
" block "
|
" block " +
|
||||||
|
(status === "localOnly" && " text-slate-500 border-slate-600 ") +
|
||||||
|
(status === "unPublished" && " border-rose-900 ") +
|
||||||
|
(status === "published" && " border-green-800 ")
|
||||||
}
|
}
|
||||||
role="button"
|
role="button"
|
||||||
draggable="true"
|
draggable="true"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
|
import { LocalCoursePage } from "@/models/local/page/localCoursePage";
|
||||||
import { canvasPageService } from "@/services/canvas/canvasPageService";
|
import { canvasPageService } from "@/services/canvas/canvasPageService";
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
import { useMutation, useQuery, useQueryClient, useSuspenseQuery } from "@tanstack/react-query";
|
||||||
|
import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks";
|
||||||
|
|
||||||
export const canvasPageKeys = {
|
export const canvasPageKeys = {
|
||||||
pagesInCourse: (canvasCourseId: number) => [
|
pagesInCourse: (canvasCourseId: number) => [
|
||||||
@@ -10,11 +11,13 @@ export const canvasPageKeys = {
|
|||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
export const useCanvasPagesQuery = (canvasCourseId: number) =>
|
export const useCanvasPagesQuery = () => {
|
||||||
useQuery({
|
const { data: settings } = useLocalCourseSettingsQuery();
|
||||||
queryKey: canvasPageKeys.pagesInCourse(canvasCourseId),
|
return useSuspenseQuery({
|
||||||
queryFn: async () => await canvasPageService.getAll(canvasCourseId),
|
queryKey: canvasPageKeys.pagesInCourse(settings.canvasId),
|
||||||
|
queryFn: async () => await canvasPageService.getAll(settings.canvasId),
|
||||||
});
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export const useCreateCanvasPageMutation = (canvasCourseId: number) => {
|
export const useCreateCanvasPageMutation = (canvasCourseId: number) => {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|||||||
Reference in New Issue
Block a user