diff --git a/frontend/composables/use-users/preferences.ts b/frontend/composables/use-users/preferences.ts index c8df3b011..6bef65ebd 100644 --- a/frontend/composables/use-users/preferences.ts +++ b/frontend/composables/use-users/preferences.ts @@ -22,6 +22,7 @@ export enum ImagePosition { } export interface UserMealPlanPreferences { + numberOfDaysPast: number; numberOfDays: number; } @@ -76,6 +77,7 @@ export function useUserMealPlanPreferences(): Ref { const fromStorage = useLocalStorage( "meal-planner-preferences", { + numberOfDaysPast: 0, numberOfDays: 7, }, { mergeDefaults: true }, diff --git a/frontend/lang/messages/en-US.json b/frontend/lang/messages/en-US.json index 211c9dda4..bccbbcf1a 100644 --- a/frontend/lang/messages/en-US.json +++ b/frontend/lang/messages/en-US.json @@ -331,6 +331,8 @@ "any-household": "Any Household", "no-meal-plan-defined-yet": "No meal plan defined yet", "no-meal-planned-for-today": "No meal planned for today", + "numberOfDaysPast-hint": "Number of days in the past on page load", + "numberOfDaysPast-label": "Default Days in the Past", "numberOfDays-hint": "Number of days on page load", "numberOfDays-label": "Default Days", "only-recipes-with-these-categories-will-be-used-in-meal-plans": "Only recipes with these categories will be used in Meal Plans", @@ -1471,4 +1473,4 @@ "min-length": "Must Be At Least {min} Characters", "max-length": "Must Be At Most {max} Character|Must Be At Most {max} Characters" } -} \ No newline at end of file +} diff --git a/frontend/pages/household/mealplan/planner.vue b/frontend/pages/household/mealplan/planner.vue index 9140d7953..d6ad1b96a 100644 --- a/frontend/pages/household/mealplan/planner.vue +++ b/frontend/pages/household/mealplan/planner.vue @@ -35,6 +35,18 @@ :local="$i18n.locale" /> + + + + (mealPlanPreferences.value.numberOfDaysPast || 0); const numberOfDays = ref(mealPlanPreferences.value.numberOfDays || 7); +watch(numberOfDaysPast, (val) => { + mealPlanPreferences.value.numberOfDaysPast = Number(val); +}); watch(numberOfDays, (val) => { mealPlanPreferences.value.numberOfDays = Number(val); }); @@ -135,7 +151,7 @@ function safeParseISO(date: string, fallback: Date | undefined = undefined) { } // Initialize dates from query parameters or defaults -const initialStartDate = safeParseISO(route.query.start as string, new Date()); +const initialStartDate = safeParseISO(route.query.start as string, addDays(new Date(), adjustForToday(-numberOfDaysPast.value))); const initialEndDate = safeParseISO(route.query.end as string, addDays(new Date(), adjustForToday(numberOfDays.value))); const state = ref({ @@ -163,7 +179,7 @@ const weekRange = computed(() => { return { start, end }; } return { - start: new Date(), + start: addDays(new Date(), adjustForToday(-numberOfDaysPast.value)), end: addDays(new Date(), adjustForToday(numberOfDays.value)), }; }); @@ -193,9 +209,9 @@ function filterMealByDate(date: Date) { } function adjustForToday(days: number) { - // The use case for this function is "how many days are we adding to 'today'?" - // e.g. If the user wants 7 days, we substract one to do "today + 6" - return days > 0 ? days - 1 : days + 1; + // e.g. If the user wants 7 days, we subtract one to do "today + 6" + // e.g. If the user wants 2 days in the past, we keep it the same to do "today - 2" + return days > 0 ? days - 1 : days; } const days = computed(() => { diff --git a/frontend/pages/household/mealplan/planner/view.vue b/frontend/pages/household/mealplan/planner/view.vue index 473dac46c..8e741bbf7 100644 --- a/frontend/pages/household/mealplan/planner/view.vue +++ b/frontend/pages/household/mealplan/planner/view.vue @@ -15,7 +15,7 @@ -

+

{{ $d(day.date, "short") }}

@@ -51,6 +51,8 @@