Refactor dashboard widget management: Update dashboardService to handle user-specific widget configurations with create and update logic. Enhance LoggedInView to support adding the same widget type and display error messages for save operations. Ensure effective endpoint handling for widgets and improve UI interactions.

This commit is contained in:
Torsten Schulz (local)
2026-01-30 07:31:38 +01:00
parent 39ac149430
commit 4779a6e4af
4 changed files with 114 additions and 48 deletions

View File

@@ -38,33 +38,34 @@ async function fetchNewsPage({ counter, language = 'de', category = 'top', nextP
}
/**
* Liefert die Seite für das „counter.“-te Widget (0 = erste Seite, 1 = zweite, …).
* Ruft die API ggf. mehrfach auf (nextPage), damit jede Widget-Instanz andere Artikel bekommt.
* Liefert den N-ten Artikel (counter = 0, 1, 2, …) für das N-te News-Widget.
* Lädt ggf. mehrere Seiten, bis genug Artikel vorhanden sind; jede Widget-Instanz bekommt einen anderen Artikel.
*
* @param {object} options
* @param {number} options.counter
* @param {number} options.counter - Index des Artikels (0 = erster, 1 = zweiter, …)
* @param {string} [options.language]
* @param {string} [options.category]
* @returns {Promise<{ results: Array, nextPage: string|null }>}
*/
async function getNews({ counter = 0, language = 'de', category = 'top' }) {
const neededIndex = Math.max(0, counter);
const collected = [];
let nextPageToken = null;
let lastResult = { results: [], nextPage: null };
for (let i = 0; i <= counter; i++) {
lastResult = await fetchNewsPage({
counter: i,
while (collected.length <= neededIndex) {
const page = await fetchNewsPage({
language,
category,
nextPageToken: nextPageToken || undefined
});
nextPageToken = lastResult.nextPage;
if (!nextPageToken && i < counter) {
break;
}
const items = page.results ?? [];
collected.push(...items);
nextPageToken = page.nextPage ?? null;
if (items.length === 0 || !nextPageToken) break;
}
return lastResult;
const single = collected[neededIndex] ? [collected[neededIndex]] : [];
return { results: single, nextPage: null };
}
export default { getNews };