refactor(planner): extract Suggestion type to $lib/planner/types.ts

Removes the inline interface from RecipePicker.svelte and replaces
any[] in +page.svelte with Suggestion[] — compile-time safety.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-09 12:16:02 +02:00
committed by marcel
parent ccec0baa99
commit 1de4b15e34
3 changed files with 15 additions and 13 deletions

View File

@@ -1,16 +1,5 @@
<script lang="ts"> <script lang="ts">
interface Recipe { import type { Recipe, Suggestion } from '$lib/planner/types';
id: string;
name: string;
effort?: string;
cookTimeMin?: number;
}
interface Suggestion {
recipe: Recipe;
scoreDelta: number;
hasConflict: boolean;
}
let { let {
planId, planId,

View File

@@ -0,0 +1,12 @@
export interface Recipe {
id: string;
name: string;
effort?: string;
cookTimeMin?: number;
}
export interface Suggestion {
recipe: Recipe;
scoreDelta: number;
hasConflict: boolean;
}

View File

@@ -11,6 +11,7 @@
import BottomSheet from '$lib/components/BottomSheet.svelte'; import BottomSheet from '$lib/components/BottomSheet.svelte';
import UndoBar from '$lib/planner/UndoBar.svelte'; import UndoBar from '$lib/planner/UndoBar.svelte';
import { prevWeek, nextWeek, getWeekStart, weekDays, formatDayLabel, formatDayAbbr, formatWeekRange, sortEasiestFirst } from '$lib/planner/week'; import { prevWeek, nextWeek, getWeekStart, weekDays, formatDayLabel, formatDayAbbr, formatWeekRange, sortEasiestFirst } from '$lib/planner/week';
import type { Suggestion } from '$lib/planner/types';
let { data, form = null }: { data: { weekPlan: any; varietyScore: any; weekStart: string; recipes: any[] }; form?: any } = $props(); let { data, form = null }: { data: { weekPlan: any; varietyScore: any; weekStart: string; recipes: any[] }; form?: any } = $props();
@@ -69,7 +70,7 @@
: null : null
); );
let suggestions: any[] = $state([]); let suggestions: Suggestion[] = $state([]);
let isLoadingSuggestions = $state(false); let isLoadingSuggestions = $state(false);
// Recipes already in any slot this week — used for ⚠ overlap warnings // Recipes already in any slot this week — used for ⚠ overlap warnings