fix: saveCurrentMomentAsMeal crasht bij meal-group entries
Oorzaak: entry.item.kh probeerde meal-group entry's .item te lezen, maar meal-group entries hebben .items (array) i.p.v. .item. Fix: entry.type check in KH-berekening én preview rendering. - Meal-group: itereer entry.items voor KH + toon 'Naam (N items, Xg kh)' - Los item: origineel gedrag behouden Ook playwright.config gereset naar origineel (zonder projects array)
This commit is contained in:
parent
2077cb060b
commit
45a32ca964
3 changed files with 43 additions and 22 deletions
|
|
@ -4169,8 +4169,23 @@ button:active, .btn:active, .meal-card-main:active, .dagboek-item:active, .food-
|
||||||
return map[nevoCat] || 'overig';
|
return map[nevoCat] || 'overig';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Flatten mixed entries (items + meal-groups) naar uniform {item, portie} array */
|
||||||
|
function flattenEntries(entries) {
|
||||||
|
const result = [];
|
||||||
|
entries.forEach(entry => {
|
||||||
|
if (entry.type === 'meal') {
|
||||||
|
entry.items.forEach(e => result.push({ item: e.item, portie: e.portie }));
|
||||||
|
} else {
|
||||||
|
result.push({ item: entry.item, portie: entry.portie });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/** Genereer een slimme, menselijke maaltijdnaam op basis van de categorieën */
|
/** Genereer een slimme, menselijke maaltijdnaam op basis van de categorieën */
|
||||||
function suggestMealName(items) {
|
function suggestMealName(items) {
|
||||||
|
// Unwrap meal-group entries first
|
||||||
|
items = flattenEntries(items);
|
||||||
if (!items || items.length === 0) return '';
|
if (!items || items.length === 0) return '';
|
||||||
if (items.length === 1) return shortItemName(items[0].item.naam);
|
if (items.length === 1) return shortItemName(items[0].item.naam);
|
||||||
|
|
||||||
|
|
@ -4273,8 +4288,11 @@ button:active, .btn:active, .meal-card-main:active, .dagboek-item:active, .food-
|
||||||
|
|
||||||
function saveCurrentMomentAsMeal(momentId) {
|
function saveCurrentMomentAsMeal(momentId) {
|
||||||
const dayData = getOrCreateDay(activeDate);
|
const dayData = getOrCreateDay(activeDate);
|
||||||
const items = dayData[momentId] || [];
|
const rawItems = dayData[momentId] || [];
|
||||||
if (items.length === 0) return;
|
if (rawItems.length === 0) return;
|
||||||
|
|
||||||
|
// Flatten: unwrap meal-group entries into uniform {item, portie} items
|
||||||
|
const items = flattenEntries(rawItems);
|
||||||
|
|
||||||
// Calculate total kh
|
// Calculate total kh
|
||||||
let khTotaal = 0;
|
let khTotaal = 0;
|
||||||
|
|
@ -4337,7 +4355,7 @@ button:active, .btn:active, .meal-card-main:active, .dagboek-item:active, .food-
|
||||||
maaltijden.push({
|
maaltijden.push({
|
||||||
id: 'm' + Date.now(),
|
id: 'm' + Date.now(),
|
||||||
naam: name,
|
naam: name,
|
||||||
items: items.map(e => ({ item: e.item, portie: e.portie })),
|
items: items,
|
||||||
khTotaal: Math.round(khTotaal)
|
khTotaal: Math.round(khTotaal)
|
||||||
});
|
});
|
||||||
saveMaaltijden();
|
saveMaaltijden();
|
||||||
|
|
|
||||||
24
index.html
24
index.html
|
|
@ -4169,8 +4169,23 @@ button:active, .btn:active, .meal-card-main:active, .dagboek-item:active, .food-
|
||||||
return map[nevoCat] || 'overig';
|
return map[nevoCat] || 'overig';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Flatten mixed entries (items + meal-groups) naar uniform {item, portie} array */
|
||||||
|
function flattenEntries(entries) {
|
||||||
|
const result = [];
|
||||||
|
entries.forEach(entry => {
|
||||||
|
if (entry.type === 'meal') {
|
||||||
|
entry.items.forEach(e => result.push({ item: e.item, portie: e.portie }));
|
||||||
|
} else {
|
||||||
|
result.push({ item: entry.item, portie: entry.portie });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/** Genereer een slimme, menselijke maaltijdnaam op basis van de categorieën */
|
/** Genereer een slimme, menselijke maaltijdnaam op basis van de categorieën */
|
||||||
function suggestMealName(items) {
|
function suggestMealName(items) {
|
||||||
|
// Unwrap meal-group entries first
|
||||||
|
items = flattenEntries(items);
|
||||||
if (!items || items.length === 0) return '';
|
if (!items || items.length === 0) return '';
|
||||||
if (items.length === 1) return shortItemName(items[0].item.naam);
|
if (items.length === 1) return shortItemName(items[0].item.naam);
|
||||||
|
|
||||||
|
|
@ -4273,8 +4288,11 @@ button:active, .btn:active, .meal-card-main:active, .dagboek-item:active, .food-
|
||||||
|
|
||||||
function saveCurrentMomentAsMeal(momentId) {
|
function saveCurrentMomentAsMeal(momentId) {
|
||||||
const dayData = getOrCreateDay(activeDate);
|
const dayData = getOrCreateDay(activeDate);
|
||||||
const items = dayData[momentId] || [];
|
const rawItems = dayData[momentId] || [];
|
||||||
if (items.length === 0) return;
|
if (rawItems.length === 0) return;
|
||||||
|
|
||||||
|
// Flatten: unwrap meal-group entries into uniform {item, portie} items
|
||||||
|
const items = flattenEntries(rawItems);
|
||||||
|
|
||||||
// Calculate total kh
|
// Calculate total kh
|
||||||
let khTotaal = 0;
|
let khTotaal = 0;
|
||||||
|
|
@ -4337,7 +4355,7 @@ button:active, .btn:active, .meal-card-main:active, .dagboek-item:active, .food-
|
||||||
maaltijden.push({
|
maaltijden.push({
|
||||||
id: 'm' + Date.now(),
|
id: 'm' + Date.now(),
|
||||||
naam: name,
|
naam: name,
|
||||||
items: items.map(e => ({ item: e.item, portie: e.portie })),
|
items: items,
|
||||||
khTotaal: Math.round(khTotaal)
|
khTotaal: Math.round(khTotaal)
|
||||||
});
|
});
|
||||||
saveMaaltijden();
|
saveMaaltijden();
|
||||||
|
|
|
||||||
|
|
@ -4,26 +4,11 @@ module.exports = defineConfig({
|
||||||
testDir: './tests',
|
testDir: './tests',
|
||||||
timeout: 30000,
|
timeout: 30000,
|
||||||
expect: { timeout: 10000 },
|
expect: { timeout: 10000 },
|
||||||
retries: 1,
|
retries: 0,
|
||||||
fullyParallel: false,
|
|
||||||
workers: 1,
|
|
||||||
use: {
|
use: {
|
||||||
baseURL: 'https://eetdagboek.vantwout.dev',
|
baseURL: 'https://eetdagboek.vantwout.dev',
|
||||||
headless: true,
|
headless: true,
|
||||||
viewport: { width: 390, height: 844 }, // iPhone 14 size
|
viewport: { width: 390, height: 844 }, // iPhone 14 size
|
||||||
ignoreHTTPSErrors: true,
|
ignoreHTTPSErrors: true,
|
||||||
screenshot: 'only-on-failure',
|
|
||||||
video: 'retain-on-failure',
|
|
||||||
trace: 'retain-on-failure',
|
|
||||||
},
|
},
|
||||||
projects: [
|
|
||||||
{
|
|
||||||
name: 'mobile',
|
|
||||||
use: { viewport: { width: 375, height: 667 } },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'desktop',
|
|
||||||
use: { viewport: { width: 1280, height: 720 } },
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue