Spaces:
Sleeping
Sleeping
File size: 2,713 Bytes
82b2f83 b7878a0 82b2f83 b7878a0 82b2f83 b7878a0 82b2f83 880e5b4 82b2f83 b7878a0 82b2f83 880e5b4 82b2f83 b7878a0 82b2f83 b7878a0 880e5b4 82b2f83 880e5b4 82b2f83 b7878a0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import React, { useMemo } from "react";
type Person = { name: string; email?: string };
export type CourseInfo = {
id: string;
name: string;
instructor?: Person;
teachingAssistant?: Person;
};
function gmailCompose(email: string, subject: string, body?: string) {
const s = encodeURIComponent(subject);
const b = body ? `&body=${encodeURIComponent(body)}` : "";
return `https://mail.google.com/mail/?view=cm&fs=1&to=${encodeURIComponent(email)}&su=${s}${b}`;
}
export function CourseInfoHeader({
course,
className,
}: {
course: CourseInfo;
className?: string;
}) {
const instructorLink = useMemo(() => {
const p = course.instructor;
if (!p?.email) return "";
return gmailCompose(
p.email,
`[Clare] Question about ${course.name}`,
`Hi ${p.name},\n\nI have a question about ${course.name}:\n\n(Write your question here)\n\nThanks,\n`
);
}, [course]);
const taLink = useMemo(() => {
const p = course.teachingAssistant;
if (!p?.email) return "";
return gmailCompose(
p.email,
`[Clare] Help request for ${course.name}`,
`Hi ${p.name},\n\nI need help with ${course.name}:\n\n(Write your question here)\n\nThanks,\n`
);
}, [course]);
const instructorName = course.instructor?.name ?? "N/A";
const taName = course.teachingAssistant?.name ?? "N/A";
return (
<div className={className ?? "px-4 pt-4 pb-3"}>
<div className="space-y-1">
<div className="text-base font-semibold text-foreground truncate">
{course.name}
</div>
<div className="text-sm text-muted-foreground">
Instructor:{" "}
{instructorLink ? (
<a
href={instructorLink}
target="_blank"
rel="noopener noreferrer"
className="text-primary hover:underline"
title={`Message ${instructorName} in Gmail`}
onClick={(e) => e.stopPropagation()}
>
{instructorName}
</a>
) : (
<span className="text-muted-foreground/60">{instructorName}</span>
)}
</div>
<div className="text-sm text-muted-foreground">
TA:{" "}
{taLink ? (
<a
href={taLink}
target="_blank"
rel="noopener noreferrer"
className="text-primary hover:underline"
title={`Message ${taName} in Gmail`}
onClick={(e) => e.stopPropagation()}
>
{taName}
</a>
) : (
<span className="text-muted-foreground/60">{taName}</span>
)}
</div>
</div>
</div>
);
}
|