Fix draft being deleted too early causing empty UI during dismiss compose animation

This commit is contained in:
Shadowfacts 2023-04-22 22:18:42 -04:00
parent 40197e04cf
commit 205056f636
3 changed files with 8 additions and 7 deletions

View File

@ -57,9 +57,6 @@ class PostService: ObservableObject {
do {
let (_, _) = try await mastodonController.run(request)
currentStep += 1
DraftsPersistentContainer.shared.viewContext.delete(self.draft)
DraftsPersistentContainer.shared.save()
} catch let error as Client.Error {
throw Error.posting(error)
}

View File

@ -45,6 +45,7 @@ public final class ComposeController: ViewController {
@Published var isShowingDraftsList = false
@Published var poster: PostService?
@Published var postError: (any Error)?
@Published public private(set) var didPostSuccessfully = false
var isPosting: Bool {
poster != nil
@ -172,13 +173,15 @@ public final class ComposeController: ViewController {
do {
try await poster.post()
didPostSuccessfully = true
// wait .25 seconds so the user can see the progress bar has completed
try? await Task.sleep(nanoseconds: 250_000_000)
config.dismiss(.post)
// don't unset the poster, so the ui remains disabled while dismissing
config.dismiss(.post)
} catch let error as PostService.Error {
self.postError = error
self.poster = nil
@ -202,7 +205,7 @@ public final class ComposeController: ViewController {
}
func onDisappear() {
if !draft.hasContent {
if !draft.hasContent || didPostSuccessfully {
DraftsPersistentContainer.shared.viewContext.delete(draft)
}
DraftsPersistentContainer.shared.save()

View File

@ -81,7 +81,8 @@ class ComposeSceneDelegate: UIResponder, UIWindowSceneDelegate, TuskerSceneDeleg
if let window = window,
let nav = window.rootViewController as? UINavigationController,
let compose = nav.topViewController as? ComposeHostingController {
let compose = nav.topViewController as? ComposeHostingController,
!compose.controller.didPostSuccessfully {
scene.userActivity = UserActivityManager.editDraftActivity(id: compose.controller.draft.id, accountID: scene.session.mastodonController!.accountInfo!.id)
}
}