Add Merge & continue and Other… to ready cards
This commit is contained in:
@@ -21,6 +21,7 @@ struct MergeWarning {
|
||||
final class MergeModel {
|
||||
let taskId: String
|
||||
let target: String
|
||||
let keepOpen: Bool
|
||||
let parentTitle: String?
|
||||
let coAuthors: [Participant]
|
||||
let original: String
|
||||
@@ -32,9 +33,10 @@ final class MergeModel {
|
||||
@ObservationIgnored var leave: Leave = { _ in }
|
||||
@ObservationIgnored private var loads = 0
|
||||
|
||||
init(taskId: String, target: String, parentTitle: String?, coAuthors: [Participant], title: String) {
|
||||
init(taskId: String, target: String, keepOpen: Bool, parentTitle: String?, coAuthors: [Participant], title: String) {
|
||||
self.taskId = taskId
|
||||
self.target = target
|
||||
self.keepOpen = keepOpen
|
||||
self.parentTitle = parentTitle
|
||||
self.coAuthors = coAuthors
|
||||
original = title
|
||||
@@ -72,7 +74,7 @@ final class MergeModel {
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func confirmMerge(_ taskId: String, _ store: Store, _ overlays: Overlays) async {
|
||||
func confirmMerge(_ taskId: String, _ store: Store, _ overlays: Overlays, keepOpen: Bool = false) async {
|
||||
guard let task = store.findTask(taskId), task.status == .active else {
|
||||
return
|
||||
}
|
||||
@@ -107,7 +109,7 @@ func confirmMerge(_ taskId: String, _ store: Store, _ overlays: Overlays) async
|
||||
}
|
||||
let title = mergeDrafts[taskId] ?? task.mergeTitle
|
||||
mergeDrafts[taskId] = nil
|
||||
let model = MergeModel(taskId: taskId, target: target, parentTitle: parent?.status == .active ? parent?.name : nil, coAuthors: coAuthors, title: title)
|
||||
let model = MergeModel(taskId: taskId, target: target, keepOpen: keepOpen, parentTitle: !keepOpen && parent?.status == .active ? parent?.name : nil, coAuthors: coAuthors, title: title)
|
||||
model.leave = { [weak model] go in
|
||||
if let model {
|
||||
mergeDrafts[taskId] = model.sentTitle
|
||||
@@ -131,13 +133,19 @@ func confirmMerge(_ taskId: String, _ store: Store, _ overlays: Overlays) async
|
||||
let merge = { (afterReview: Bool) in
|
||||
let body: Operations.MergeTask.Input.Body.JsonPayload = model.toParent
|
||||
? .init(target: .parent, afterReview: afterReview ? true : nil)
|
||||
: .init(mergeTitle: model.sentTitle, afterReview: afterReview ? true : nil)
|
||||
: .init(mergeTitle: model.sentTitle, afterReview: afterReview ? true : nil, keepOpen: keepOpen ? true : nil)
|
||||
do {
|
||||
_ = try await store.api.client.mergeTask(path: .init(taskId: taskId), body: .json(body)).accepted
|
||||
} catch {
|
||||
overlays.showAlert(errorText(error))
|
||||
}
|
||||
}
|
||||
if keepOpen {
|
||||
if await overlays.showModal(content, [ModalButton(label: "Cancel", value: "cancel"), ModalButton(label: "Merge & continue", value: "ok", primary: true)], inPane: true, canSubmit: { model.valid }) == "ok" {
|
||||
await merge(false)
|
||||
}
|
||||
return
|
||||
}
|
||||
if !model.running {
|
||||
if await overlays.showModal(content, [ModalButton(label: "Cancel", value: "cancel"), ModalButton(label: "Merge", value: "ok", primary: true)], inPane: true, canSubmit: { model.valid }) == "ok" {
|
||||
await merge(false)
|
||||
@@ -245,7 +253,7 @@ private struct MergeContent: View {
|
||||
.padding(.bottom, 16)
|
||||
}
|
||||
if !model.toParent {
|
||||
Text("Merge into \(model.target) as:")
|
||||
Text(model.keepOpen ? "Merge the work so far into \(model.target), keeping the task open, as:" : "Merge into \(model.target) as:")
|
||||
.foregroundStyle(Palette.muted)
|
||||
.padding(.bottom, 4)
|
||||
titleRow
|
||||
|
||||
Reference in New Issue
Block a user