Skip to content

Commit

Permalink
chore: better calendar links (#17)
Browse files Browse the repository at this point in the history
  • Loading branch information
Okabe-Rintarou-0 committed Apr 26, 2024
1 parent 76d548d commit 02c5796
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "sjtu_canvas_helper"
version = "1.2.10"
version = "1.2.11"
description = "SJTU Canvas Helper"
authors = ["Okabe"]
edition = "2021"
Expand Down
2 changes: 1 addition & 1 deletion src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
},
"package": {
"productName": "SJTU Canvas Helper",
"version": "1.2.10"
"version": "1.2.11"
},
"tauri": {
"allowlist": {
Expand Down
4 changes: 3 additions & 1 deletion src/components/course_select.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import { Select, Space, Tooltip } from "antd";
import { Course } from "../lib/model";
import { InfoCircleOutlined } from '@ant-design/icons'

export default function CourseSelect({ courses, disabled, onChange }: {
export default function CourseSelect({ courses, disabled, onChange, value }: {
courses: Course[],
disabled?: boolean,
onChange?: (courseId: number) => void,
value?: number
}) {
const formatCourses = (courses: Course[]) => {
const formatted: Course[] = [];
Expand All @@ -32,6 +33,7 @@ export default function CourseSelect({ courses, disabled, onChange }: {
return <Space>
<span>选择课程:</span>
<Select
value={value}
style={{ width: 350 }}
disabled={disabled}
onChange={onChange}
Expand Down
15 changes: 14 additions & 1 deletion src/page/assignments.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import dayjs from "dayjs";
import ModifyDDLModal from "../components/modify_ddl_modal";
import { SubmitModal } from "../components/submit_modal";
import { GradeOverviewChart } from "../components/grade_overview";
import { useSearchParams } from "react-router-dom";

export default function AssignmentsPage() {
const [messageApi, contextHolder] = useMessage();
Expand All @@ -27,6 +28,7 @@ export default function AssignmentsPage() {
const [showModal, setShowModal] = useState<boolean>(false);
const [selectedAssignment, setSelectedAssignment] = useState<Assignment | undefined>(undefined);
const [gradeMap, setGradeMap] = useState<Map<number, GradeStatus>>(new Map());
const [searchParams, setSearchParams] = useSearchParams();

const initMe = async () => {
try {
Expand All @@ -42,6 +44,17 @@ export default function AssignmentsPage() {
initCourses();
}, []);

useEffect(() => {
if (courses.length > 0) {
const courseId = Number.parseInt(searchParams.get("id") ?? "");
if (courseId > 0) {
setSearchParams({});
setSelectedCourseId(courseId);
handleGetAssignments(courseId, onlyShowUnfinished);
}
}
}, [courses]);

useEffect(() => {
let newGradeMap = new Map<number, GradeStatus>();
assignments.map(assignment => {
Expand Down Expand Up @@ -347,7 +360,7 @@ export default function AssignmentsPage() {
handleGetMySingleSubmission(selectedCourseId, selectedAssignment.id);
}} />}
<Space direction="vertical" style={{ width: "100%", overflow: "scroll" }} size={"large"}>
<CourseSelect onChange={handleCourseSelect} disabled={operating} courses={courses} />
<CourseSelect onChange={handleCourseSelect} disabled={operating} courses={courses} value={selectedCourseId === -1 ? undefined : selectedCourseId} />
{!isTA(selectedCourseId) && <Checkbox disabled={operating} onChange={handleSetOnlyShowUnfinished} defaultChecked>只显示未完成</Checkbox>}
<GradeOverviewChart gradeMap={gradeMap} />
<Table style={{ width: "100%" }}
Expand Down
23 changes: 20 additions & 3 deletions src/page/calendar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { firstDayOfMonth, lastDayOfMonth } from "../lib/utils";
import { invoke } from "@tauri-apps/api";
import useMessage from "antd/es/message/useMessage";
import { CalendarEvent, Colors, Course } from "../lib/model";
import { Link } from "react-router-dom";

export default function CalendarPage() {
const [currentDate, setCurrentDate] = useState<Dayjs>(dayjs());
Expand All @@ -26,6 +27,16 @@ export default function CalendarPage() {
const startDate = firstDayOfMonth(currentDate);
const endDate = lastDayOfMonth(currentDate);
let events = await handleGetCalendarEvents(contextCodes, startDate, endDate);
let assignmentSet = new Set<number>();
events.map(event => assignmentSet.add(event.assignment.id));
events = events.filter(event => {
if (assignmentSet.has(event.assignment.id)) {
assignmentSet.delete(event.assignment.id);
return true;
} else {
return false;
}
})
setEvents(events);
} catch (e) {
messageApi.error(e as string)
Expand All @@ -51,7 +62,7 @@ export default function CalendarPage() {
let events = await handleGetCalendarEvents(contextCodes, now, afterAWeek);
setHintEvents(events);
} catch (e) {
messageApi.error(e as string)
messageApi.error(e as string);
}
}

Expand All @@ -62,7 +73,7 @@ export default function CalendarPage() {
{filteredEvents.map((event) => (
<span key={event.title} style={{ whiteSpace: "nowrap" }}>
<Tooltip placement="top" title={event.context_name}>
<Badge color={colors?.custom_colors[event.context_code]} text={<a href={event.html_url} target="_blank">{event.title}</a>} />
<Badge color={colors?.custom_colors[event.context_code]} text={<Link to={`/assignments?id=${getCourseId(event)}`}>{event.title}</Link>} />
</Tooltip>
</span>
))}
Expand All @@ -86,13 +97,19 @@ export default function CalendarPage() {
}
}

const getCourseId = (event: CalendarEvent) => {
const parts = event.context_code.split('_');
const courseId = parts[parts.length - 1];
return courseId;
}

const hintList = hintEvents.map(event => {
const now = dayjs();
const diff = dayjs(event.end_at).diff(now, 'hour');
const days = Math.floor(diff / 24);
const hours = diff % 24;
return <div key={event.id}>
距离作业<a href={event.html_url} target="_blank">{event.title}</a>({event.context_name})截止还有<b>{days}{hours}小时</b>
距离作业<Link to={`/assignments?id=${getCourseId(event)}`} >{event.title}</Link>({event.context_name})截止还有<b>{days}{hours}小时</b>
</div>
})

Expand Down

0 comments on commit 02c5796

Please sign in to comment.