Release 1.0.0 baseline

This commit is contained in:
alexandrev-tibco
2026-02-26 10:27:09 +01:00
parent e593453abd
commit c5c7e3d2e4
24 changed files with 600 additions and 168 deletions
+49 -56
View File
@@ -26,9 +26,11 @@ struct HomeView: View {
ZStack {
Color.mealMoodBackground.ignoresSafeArea()
if let settings = settings,
let plan = viewModel.getOrCreateWeekPlan(context: context, settings: settings) {
mainContent(plan: plan, settings: settings)
if let settings = settings {
let plan = viewModel.getOrCreateWeekPlan(context: context, settings: settings)
if let plan {
mainContent(plan: plan, settings: settings)
}
}
}
.toast(isShowing: $viewModel.showToast, message: viewModel.toastMessage)
@@ -151,6 +153,26 @@ struct HomeView: View {
}
}
}
.onAppear {
guard let settings = settings,
let plan = viewModel.getOrCreateWeekPlan(context: context, settings: settings) else { return }
viewModel.reconcileSlotsIfNeeded(plan: plan, settings: settings, context: context)
}
.onChange(of: settings?.includeWeekends) { _, _ in
guard let settings = settings,
let plan = viewModel.getOrCreateWeekPlan(context: context, settings: settings) else { return }
viewModel.reconcileSlotsIfNeeded(plan: plan, settings: settings, context: context)
}
.onChange(of: settings?.mealWindows) { _, _ in
guard let settings = settings,
let plan = viewModel.getOrCreateWeekPlan(context: context, settings: settings) else { return }
viewModel.reconcileSlotsIfNeeded(plan: plan, settings: settings, context: context)
}
.onChange(of: viewModel.currentWeekStart) { _, _ in
guard let settings = settings,
let plan = viewModel.getOrCreateWeekPlan(context: context, settings: settings) else { return }
viewModel.reconcileSlotsIfNeeded(plan: plan, settings: settings, context: context)
}
}
@ViewBuilder
@@ -167,69 +189,37 @@ struct HomeView: View {
.padding(.bottom, 8)
}
if horizontalSizeClass == .regular {
HStack(alignment: .top, spacing: 20) {
VStack(spacing: 10) {
WeekCalendarView(
plan: plan,
settings: settings,
dishes: dishes,
tags: tags,
viewModel: viewModel,
onTapEmptySlot: { slot in
selectedEmptySlotId = slot.id
}
)
if isWeekComplete(plan: plan) {
exportCallout(plan: plan, settings: settings)
}
VStack(spacing: 10) {
WeekCalendarView(
plan: plan,
settings: settings,
dishes: dishes,
tags: tags,
viewModel: viewModel,
onTapEmptySlot: { slot in
selectedEmptySlotId = slot.id
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
)
VStack(spacing: 12) {
ScrollView(showsIndicators: true) {
dishDrawer(plan: plan, settings: settings)
.padding(.bottom, 6)
}
}
.frame(width: 360)
.frame(maxHeight: .infinity, alignment: .top)
if isWeekComplete(plan: plan) {
exportCallout(plan: plan, settings: settings)
}
.padding(.horizontal, 16)
.padding(.bottom, 0)
} else {
VStack(spacing: 10) {
WeekCalendarView(
plan: plan,
settings: settings,
dishes: dishes,
tags: tags,
viewModel: viewModel,
onTapEmptySlot: { slot in
selectedEmptySlotId = slot.id
}
)
if isWeekComplete(plan: plan) {
exportCallout(plan: plan, settings: settings)
}
ScrollView(showsIndicators: true) {
dishDrawer(plan: plan, settings: settings)
.padding(.bottom, 0)
}
.frame(maxHeight: .infinity)
ScrollView(showsIndicators: true) {
dishDrawer(plan: plan, settings: settings)
.padding(.bottom, 0)
}
.padding(.bottom, 0)
.frame(maxHeight: .infinity)
}
.frame(maxWidth: horizontalSizeClass == .regular ? 1160 : .infinity)
.frame(maxWidth: .infinity, alignment: .top)
.padding(.horizontal, horizontalSizeClass == .regular ? 14 : 0)
.padding(.bottom, 0)
}
.frame(maxHeight: .infinity, alignment: .top)
.safeAreaInset(edge: .bottom, spacing: 0) {
if !settings.isPremium {
AdBannerView()
.ignoresSafeArea(.container, edges: .bottom)
}
}
.alert("reset_title", isPresented: $viewModel.showResetAlert) {
@@ -596,7 +586,10 @@ struct HomeView: View {
private func renderWeekShareImage(plan: WeekPlan, settings: AppSettings) -> UIImage? {
let renderer = ImageRenderer(content: WeekPlanShareView(plan: plan, settings: settings, dishes: dishes, tags: tags))
renderer.proposedSize = ProposedViewSize(width: 2400, height: 1700)
renderer.proposedSize = ProposedViewSize(
width: WeekPlanShareView.a4LandscapeWidth,
height: WeekPlanShareView.a4LandscapeHeight
)
renderer.scale = 1
return renderer.uiImage
}