reglas: plato fijo por dia y comida (ej. tortilla los viernes de cena)
- Dish.fixedDayOfWeek/fixedMealType (opcionales, aditivos para CloudKit) - Toggle + pickers de dia/comida en el formulario de plato - AutocompleteEngine: pre-pasada que asigna los platos fijos a su hueco antes del bucle MRV, de modo que cuentan para el resto de reglas - Evento analytics dish_fixed_slot_set; strings en 6 idiomas Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013H6bXqGX1ygwib1Dm3n3UG
This commit is contained in:
@@ -7,6 +7,9 @@ final class DishViewModel: ObservableObject {
|
||||
@Published var descriptionText: String = ""
|
||||
@Published var selectedTagIds: Set<UUID> = []
|
||||
@Published var isPriority: Bool = false
|
||||
@Published var hasFixedSlot: Bool = false
|
||||
@Published var fixedDayOfWeek: Int = 4 // Friday
|
||||
@Published var fixedMealType: MealType = .dinner
|
||||
@Published var ingredients: [String] = []
|
||||
@Published var photoData: Data?
|
||||
@Published var isGeneratingIngredients: Bool = false
|
||||
@@ -29,6 +32,13 @@ final class DishViewModel: ObservableObject {
|
||||
descriptionText = dish.descriptionText ?? ""
|
||||
selectedTagIds = Set(dish.tagIds)
|
||||
isPriority = dish.isPriority
|
||||
if let day = dish.fixedDayOfWeek, let meal = dish.fixedMealType.flatMap(MealType.init) {
|
||||
hasFixedSlot = true
|
||||
fixedDayOfWeek = day
|
||||
fixedMealType = meal
|
||||
} else {
|
||||
hasFixedSlot = false
|
||||
}
|
||||
ingredients = dish.ingredients
|
||||
photoData = dish.photoData
|
||||
}
|
||||
@@ -39,6 +49,9 @@ final class DishViewModel: ObservableObject {
|
||||
descriptionText = ""
|
||||
selectedTagIds = []
|
||||
isPriority = false
|
||||
hasFixedSlot = false
|
||||
fixedDayOfWeek = 4
|
||||
fixedMealType = .dinner
|
||||
ingredients = []
|
||||
photoData = nil
|
||||
}
|
||||
@@ -93,6 +106,8 @@ final class DishViewModel: ObservableObject {
|
||||
dish.descriptionText = descriptionText.isEmpty ? nil : descriptionText
|
||||
dish.tagIds = Array(selectedTagIds)
|
||||
dish.isPriority = isPriority
|
||||
dish.fixedDayOfWeek = hasFixedSlot ? fixedDayOfWeek : nil
|
||||
dish.fixedMealType = hasFixedSlot ? fixedMealType.rawValue : nil
|
||||
dish.ingredients = cleanIngredients
|
||||
dish.photoData = photoData
|
||||
} else {
|
||||
@@ -102,11 +117,14 @@ final class DishViewModel: ObservableObject {
|
||||
tagIds: Array(selectedTagIds),
|
||||
isPriority: isPriority,
|
||||
ingredients: cleanIngredients,
|
||||
photoData: photoData
|
||||
photoData: photoData,
|
||||
fixedDayOfWeek: hasFixedSlot ? fixedDayOfWeek : nil,
|
||||
fixedMealType: hasFixedSlot ? fixedMealType.rawValue : nil
|
||||
)
|
||||
context.insert(dish)
|
||||
AnalyticsService.logDishAdded(tagCount: selectedTagIds.count)
|
||||
}
|
||||
if hasFixedSlot { AnalyticsService.logEvent("dish_fixed_slot_set") }
|
||||
|
||||
try? context.save()
|
||||
reset()
|
||||
|
||||
Reference in New Issue
Block a user