From e0e6fa057306d414dda25cd2cf99ffac89f1f31e Mon Sep 17 00:00:00 2001 From: eee4 <41441600+eee4@users.noreply.github.com> Date: Sun, 18 May 2025 20:39:47 +0200 Subject: [PATCH] feat: make sorting by date work --- WebApp/Endpoints/EventsEndpoints.cs | 32 +++++++++++---- WebApp/ts/eventList.ts | 20 +++++++++- WebApp/wwwroot/index.html | 2 +- WebApp/wwwroot/js/eventList.js | 61 ++++++++++++++++++----------- 4 files changed, 81 insertions(+), 34 deletions(-) diff --git a/WebApp/Endpoints/EventsEndpoints.cs b/WebApp/Endpoints/EventsEndpoints.cs index 55f3e96..7e03578 100644 --- a/WebApp/Endpoints/EventsEndpoints.cs +++ b/WebApp/Endpoints/EventsEndpoints.cs @@ -17,14 +17,30 @@ namespace WebApp.Endpoints .WithParameterValidation(); // GET /events - group.MapGet("/", - async (ApplicationDbContext dbContext, HttpContext httpContext) => - await dbContext.Events - .Include(Eve => Eve.Organisation) - .OrderByDescending(Eve => Eve.EventId) - .Select(Eve => Eve.ToEventSummaryDto()) //EventSummaryDto - .AsNoTracking() - .ToListAsync()); + group.MapGet("/", + async (ApplicationDbContext dbContext, HttpContext httpContext) => + { + + var sort = httpContext.Request.Query["sort"].ToString(); + IOrderedQueryable res; + var r = dbContext.Events + .Include(Eve => Eve.Organisation); + + if (sort is not null && sort.ToUpper() == "ASC") + { + res = r.OrderBy(Eve => Eve.EventId); + } + else + { + res = r.OrderByDescending(Eve => Eve.EventId); + } + + return await res + .Select(Eve => Eve.ToEventSummaryDto()) //EventSummaryDto + .AsNoTracking() + .ToListAsync(); + }); + // GET /events/1 group.MapGet("/{id}", diff --git a/WebApp/ts/eventList.ts b/WebApp/ts/eventList.ts index d5cd6a3..e3ab9b2 100644 --- a/WebApp/ts/eventList.ts +++ b/WebApp/ts/eventList.ts @@ -1,9 +1,16 @@ -document.addEventListener("DOMContentLoaded", async () => { +var isAscending: boolean = false; + +function toggleListSortOrder() { + isAscending = !isAscending; + loadEvents(); +} + +async function loadEvents() { const container = document.getElementById("eventList"); if (!container) return; try { - const res = await fetch("/api/events"); + const res = await fetch("/api/events" + (isAscending ? "?sort=asc" : "")); if (!res.ok) throw new Error("Błąd pobierania wydarzeń"); const events = await res.json(); @@ -31,4 +38,13 @@ container.innerHTML = `

Błąd ładowania danych.

`; console.error(err); } +} + +document.addEventListener("DOMContentLoaded", async () => { + loadEvents(); + // listen for clicks + const listSortToggleButton = document.getElementById("list-sort-btn"); + if (listSortToggleButton) { + listSortToggleButton.addEventListener("click", toggleListSortOrder); + } }); \ No newline at end of file diff --git a/WebApp/wwwroot/index.html b/WebApp/wwwroot/index.html index 7e672e0..3dbf68c 100644 --- a/WebApp/wwwroot/index.html +++ b/WebApp/wwwroot/index.html @@ -71,7 +71,7 @@ - + diff --git a/WebApp/wwwroot/js/eventList.js b/WebApp/wwwroot/js/eventList.js index 66fa15e..00f14d7 100644 --- a/WebApp/wwwroot/js/eventList.js +++ b/WebApp/wwwroot/js/eventList.js @@ -8,35 +8,50 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; -document.addEventListener("DOMContentLoaded", () => __awaiter(void 0, void 0, void 0, function* () { - const container = document.getElementById("eventList"); - if (!container) - return; - try { - const res = yield fetch("/api/events"); - if (!res.ok) - throw new Error("Błąd pobierania wydarzeń"); - const events = yield res.json(); - if (events.length === 0) { - container.innerHTML = "

Brak wydarzeń do wyświetlenia.

"; +var isAscending = false; +function toggleListSortOrder() { + isAscending = !isAscending; + loadEvents(); +} +function loadEvents() { + return __awaiter(this, void 0, void 0, function* () { + const container = document.getElementById("eventList"); + if (!container) return; - } - // Wyczyść kontener przed dodaniem nowych - container.innerHTML = ''; - for (const ev of events) { - const card = document.createElement("div"); - card.className = "event-card filled"; - card.innerHTML = ` + try { + const res = yield fetch("/api/events" + (isAscending ? "?sort=asc" : "")); + if (!res.ok) + throw new Error("Błąd pobierania wydarzeń"); + const events = yield res.json(); + if (events.length === 0) { + container.innerHTML = "

Brak wydarzeń do wyświetlenia.

"; + return; + } + // Wyczyść kontener przed dodaniem nowych + container.innerHTML = ''; + for (const ev of events) { + const card = document.createElement("div"); + card.className = "event-card filled"; + card.innerHTML = ` ${ev.title} `; - container.appendChild(card); + container.appendChild(card); + } } - } - catch (err) { - container.innerHTML = `

Błąd ładowania danych.

`; - console.error(err); + catch (err) { + container.innerHTML = `

Błąd ładowania danych.

`; + console.error(err); + } + }); +} +document.addEventListener("DOMContentLoaded", () => __awaiter(void 0, void 0, void 0, function* () { + loadEvents(); + // listen for clicks + const listSortToggleButton = document.getElementById("list-sort-btn"); + if (listSortToggleButton) { + listSortToggleButton.addEventListener("click", toggleListSortOrder); } }));