feat: cleanup assessmentsOverview

This commit is contained in:
SethBurkart123
2025-06-06 11:52:24 +10:00
parent c4dc4b58b8
commit 7a91550de5
4 changed files with 14 additions and 14 deletions
@@ -14,7 +14,7 @@ const assessmentsOverviewPlugin: Plugin<{}> = {
disableToggle: false, disableToggle: false,
styles, styles,
run: async (api) => { run: async () => {
const menu = (await waitForElm('[data-key="assessments"] > .sub > ul', true, 100, 60)) as HTMLElement; const menu = (await waitForElm('[data-key="assessments"] > .sub > ul', true, 100, 60)) as HTMLElement;
const gridItem = document.createElement('li'); const gridItem = document.createElement('li');
gridItem.className = 'item'; gridItem.className = 'item';
@@ -55,7 +55,7 @@ const assessmentsOverviewPlugin: Plugin<{}> = {
try { try {
const data = await getAssessmentsData(); const data = await getAssessmentsData();
const { renderGrid } = await import('./ui'); const { renderGrid } = await import('./ui');
renderGrid(container, data, api); renderGrid(container, data);
} catch (err) { } catch (err) {
console.error('Failed to load assessments:', err); console.error('Failed to load assessments:', err);
renderErrorState(container, err instanceof Error ? err.message : 'Unknown error'); renderErrorState(container, err instanceof Error ? err.message : 'Unknown error');
@@ -325,22 +325,18 @@
/* Column-specific styling */ /* Column-specific styling */
.column-upcoming .column-header { .column-upcoming .column-header {
background: linear-gradient(135deg, #ffffff 0%, #f0f9ff 100%); background: linear-gradient(135deg, #ffffff 0%, #f0f9ff 100%);
border-left: 4px solid #3b82f6;
} }
.column-due-soon .column-header { .column-due-soon .column-header {
background: linear-gradient(135deg, #ffffff 0%, #fffbeb 100%); background: linear-gradient(135deg, #ffffff 0%, #fffbeb 100%);
border-left: 4px solid #f59e0b;
} }
.column-overdue .column-header { .column-overdue .column-header {
background: linear-gradient(135deg, #ffffff 0%, #fef2f2 100%); background: linear-gradient(135deg, #ffffff 0%, #fef2f2 100%);
border-left: 4px solid #ef4444;
} }
.column-marked .column-header { .column-marked .column-header {
background: linear-gradient(135deg, #ffffff 0%, #f0fdf4 100%); background: linear-gradient(135deg, #ffffff 0%, #f0fdf4 100%);
border-left: 4px solid #10b981;
} }
/* Dark mode column headers */ /* Dark mode column headers */
@@ -22,14 +22,14 @@ let currentFilters: FilterOptions = {
sortBy: 'due' sortBy: 'due'
}; };
export function renderGrid(container: HTMLElement, data: any, api?: any) { export function renderGrid(container: HTMLElement, data: any) {
container.innerHTML = ''; container.innerHTML = '';
container.className = ''; container.className = '';
container.id = 'grid-view-container'; container.id = 'grid-view-container';
const header = document.createElement('div'); const header = document.createElement('div');
header.className = 'grid-view-header'; header.className = 'grid-view-header';
header.innerHTML = ` header.innerHTML = /* html */`
<h1 class="grid-view-title">Assessments</h1> <h1 class="grid-view-title">Assessments</h1>
<div class="grid-view-filters"> <div class="grid-view-filters">
<select class="filter-select" id="subject-filter"> <select class="filter-select" id="subject-filter">
@@ -105,10 +105,10 @@ export function renderGrid(container: HTMLElement, data: any, api?: any) {
return; return;
} }
renderKanbanBoard(contentArea, filteredAssessments, data, api); renderKanbanBoard(contentArea, filteredAssessments, data);
} }
function renderKanbanBoard(container: HTMLElement, assessments: any[], data: any, api?: any) { function renderKanbanBoard(container: HTMLElement, assessments: any[], data: any) {
// Group assessments by status // Group assessments by status
const statusGroups = { const statusGroups = {
'UPCOMING': [] as any[], 'UPCOMING': [] as any[],
@@ -184,7 +184,7 @@ export function renderGrid(container: HTMLElement, data: any, api?: any) {
`; `;
} else { } else {
assessmentList.forEach(assessment => { assessmentList.forEach(assessment => {
cardsContainer.appendChild(createKanbanCard(assessment, data.colors[assessment.code] || '#6366f1', api)); cardsContainer.appendChild(createKanbanCard(assessment, data.colors[assessment.code] || '#6366f1'));
}); });
} }
@@ -195,7 +195,7 @@ export function renderGrid(container: HTMLElement, data: any, api?: any) {
container.appendChild(board); container.appendChild(board);
} }
function createKanbanCard(assessment: any, color: string, api?: any): HTMLElement { function createKanbanCard(assessment: any, color: string): HTMLElement {
const status = determineStatus(assessment); const status = determineStatus(assessment);
const dueDateClass = getDueDateClass(assessment); const dueDateClass = getDueDateClass(assessment);
@@ -211,11 +211,13 @@ export function renderGrid(container: HTMLElement, data: any, api?: any) {
${assessment.submitted ? '<span class="card-label label-submitted" style="background: #10b981; color: white;">Submitted</span>' : ''} ${assessment.submitted ? '<span class="card-label label-submitted" style="background: #10b981; color: white;">Submitted</span>' : ''}
</div> </div>
<h3 class="assessment-title">${assessment.title}</h3> <h3 class="assessment-title">${assessment.title}</h3>
${!assessment.results ? `
<div class="assessment-meta"> <div class="assessment-meta">
<div class="due-date ${dueDateClass}"> <div class="due-date ${dueDateClass}">
📅 ${formatDate(assessment.due, assessment.submitted)} 📅 ${formatDate(assessment.due, assessment.submitted)}
</div> </div>
</div> </div>
` : ''}
${assessment.results ${assessment.results
? /* html */` ? /* html */`
<div class="card-footer"> <div class="card-footer">
@@ -223,7 +225,7 @@ export function renderGrid(container: HTMLElement, data: any, api?: any) {
<div style="width: ${assessment.results.percentage}%" class="Thermoscore__fill___ojxDI"> <div style="width: ${assessment.results.percentage}%" class="Thermoscore__fill___ojxDI">
<div title="${assessment.results.percentage}%" class="Thermoscore__text___XSR_M"> <div title="${assessment.results.percentage}%" class="Thermoscore__text___XSR_M">
${(() => { ${(() => {
const allSettings = settingsState.getAll(); const allSettings = settingsState.getAll() as unknown as any;
const letterGradeSetting = allSettings['plugin.assessments-average.settings']?.lettergrade; const letterGradeSetting = allSettings['plugin.assessments-average.settings']?.lettergrade;
return letterGradeSetting return letterGradeSetting
? percentageToLetter(assessment.results.percentage) ? percentageToLetter(assessment.results.percentage)
@@ -19,7 +19,9 @@ export function formatDate(dateStr: string, submitted?: boolean): string {
// If it's within a week // If it's within a week
if (diffDays <= 7) { if (diffDays <= 7) {
return d.toLocaleDateString(undefined, { weekday: 'long' }); const weekdayName = d.toLocaleDateString(undefined, { weekday: 'long' });
// If it's in the past, add "Last" prefix
return diffDays < 0 ? `Last ${weekdayName}` : weekdayName;
} }
// Otherwise show full date // Otherwise show full date