show overdue assignments today

This commit is contained in:
Yisroel Baum 2026-08-18 00:16:57 +03:00
parent 7bc7ad207b
commit 93d2f4ebd6
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
7 changed files with 77 additions and 13 deletions

View file

@ -31,6 +31,7 @@ const scheduleAssignmentSchema = assignmentIdentitySchema.extend({
})
export const assignmentForDateSchema = assignmentIdentitySchema.extend({
scheduledDate: isoDateSchema,
schedule: z.object({
id: z.number().int().positive(),
set: z.object({

View file

@ -36,6 +36,14 @@ function formatDate(value: string): string {
}).format(new Date(`${value}T00:00:00Z`))
}
function isOverdue(scheduledDate: string): boolean {
return scheduledDate < todayDate.value
}
function overdueLabel(scheduledDate: string): string {
return `Overdue · Due ${formatDate(scheduledDate)}`
}
async function completeAssignment(assignmentId: number): Promise<void> {
await schedulesStore.setAssignmentCompleted(assignmentId, true)
}
@ -76,7 +84,7 @@ async function completeAssignment(assignmentId: number): Promise<void> {
</div>
<p v-else-if="assignmentsForDate.length === 0" class="today-state" role="status">
Nothing is assigned for today.
Nothing is due today.
</p>
<ul v-else class="today-assignment-list" aria-label="Today's assignments">
@ -97,6 +105,12 @@ async function completeAssignment(assignmentId: number): Promise<void> {
<p>{{ assignment.schedule.set.name }}</p>
<span class="today-assignment__kind">{{ assignment.element.kind }}</span>
</div>
<time
v-if="isOverdue(assignment.scheduledDate)"
class="today-assignment__overdue"
:datetime="assignment.scheduledDate"
v-text="overdueLabel(assignment.scheduledDate)"
></time>
<p class="today-assignment__path">
{{ assignment.element.path.join(' / ') }}
</p>
@ -390,6 +404,19 @@ async function completeAssignment(assignmentId: number): Promise<void> {
text-transform: none;
}
.today-assignment__overdue {
display: inline-flex;
width: fit-content;
margin-top: 0.85rem;
padding: 0.3rem 0.55rem;
border-radius: 999px;
color: #923f31;
background: #f7e5dc;
font-size: 0.68rem;
font-weight: 800;
letter-spacing: 0.025em;
}
.today-assignment__path {
margin: 1.75rem 0 0;
color: #183029;