From 5604cd3ddb1d30cbaf8989c2a23a84015ab5f25b Mon Sep 17 00:00:00 2001 From: Caster-L <376411239@qq.com> Date: Fri, 27 Mar 2026 11:10:05 +0800 Subject: [PATCH] feat: close the page automatically after exporting the calendar --- Fudan Kit/Course/UndergraduateCourseAPI.swift | 2 +- FudanUI/Pages/CoursePage.swift | 21 +++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Fudan Kit/Course/UndergraduateCourseAPI.swift b/Fudan Kit/Course/UndergraduateCourseAPI.swift index 07343b64..991b4d33 100644 --- a/Fudan Kit/Course/UndergraduateCourseAPI.swift +++ b/Fudan Kit/Course/UndergraduateCourseAPI.swift @@ -201,7 +201,7 @@ public enum UndergraduateCourseAPI { let courses = builders.map { $0.build() } for course in courses { - if courses.contains(where: { $0.code == course.code && $0.conflicts(with: course) }) { + if courses.contains(where: { $0.id != course.id && $0.code == course.code && $0.conflicts(with: course) }) { coursesToSplit.insert(course.code) } } diff --git a/FudanUI/Pages/CoursePage.swift b/FudanUI/Pages/CoursePage.swift index b10e571b..cfd62073 100644 --- a/FudanUI/Pages/CoursePage.swift +++ b/FudanUI/Pages/CoursePage.swift @@ -455,6 +455,7 @@ fileprivate struct ExportSheet: View { private func presentCalendarChooser() async throws { let eventStore = EKEventStore() + selectedCalendar = nil if #available(iOS 17, *) { let granted = try await eventStore.requestWriteOnlyAccessToEvents() @@ -543,14 +544,14 @@ fileprivate struct ExportSheet: View { } message: { Text(verbatim: exportError?.localizedDescription ?? "") } - .sheet(isPresented: $showCalendarChooser) { + .sheet(isPresented: $showCalendarChooser, onDismiss: { + if let selectedCalendar { + exportToCalendar(calendar: selectedCalendar) + self.selectedCalendar = nil + } + }) { CalendarChooserSheet(selectedCalendar: $selectedCalendar, eventStore: eventStore) .ignoresSafeArea() - .onDisappear { - if let selectedCalendar = selectedCalendar { - exportToCalendar(calendar: selectedCalendar) - } - } } } } @@ -579,11 +580,19 @@ fileprivate struct CalendarChooserSheet: UIViewControllerRepresentable { class Coordinator: NSObject, UINavigationControllerDelegate, EKCalendarChooserDelegate { let parent: CalendarChooserSheet + private var hasHandledSelection = false init(_ parent: CalendarChooserSheet) { self.parent = parent } + func calendarChooserSelectionDidChange(_ calendarChooser: EKCalendarChooser) { + guard !hasHandledSelection, let calendar = calendarChooser.selectedCalendars.first else { return } + hasHandledSelection = true + parent.selectedCalendar = calendar + parent.dismiss() + } + func calendarChooserDidFinish(_ calendarChooser: EKCalendarChooser) { if let calendar = calendarChooser.selectedCalendars.first { parent.selectedCalendar = calendar