Add review workflows, tree-shaped workflows and a workflow editor
This commit is contained in:
@@ -110,6 +110,53 @@ struct ProjectView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private struct ReviewWorkflowMenu: View {
|
||||
let project: Project
|
||||
@Environment(Store.self) private var store
|
||||
@Environment(Overlays.self) private var overlays
|
||||
@ViewState private var reviewWorkflows: [String] = []
|
||||
|
||||
var body: some View {
|
||||
Menu {
|
||||
Button("No reviews") { set("") }
|
||||
ForEach(reviewWorkflows, id: \.self) { name in
|
||||
Button(name) { set(name) }
|
||||
}
|
||||
} label: {
|
||||
HStack(spacing: 6) {
|
||||
Text(project.reviewWorkflow.isEmpty ? "no reviews" : "reviews: \(project.reviewWorkflow)")
|
||||
Image(systemName: "chevron.up.chevron.down")
|
||||
.font(.system(size: 8, weight: .semibold))
|
||||
}
|
||||
.font(Fonts.font(11))
|
||||
.foregroundStyle(Palette.muted)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.menuStyle(.button)
|
||||
.buttonStyle(.plain)
|
||||
.menuIndicator(.hidden)
|
||||
.fixedSize()
|
||||
.help("The review workflow whose reviewers review every snapshot of this project's tasks")
|
||||
.task {
|
||||
do {
|
||||
reviewWorkflows = try await store.api.client.listWorkflows().ok.body.json.filter { $0.kind == .review }.map(\.name)
|
||||
} catch {
|
||||
reviewWorkflows = []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func set(_ name: String) {
|
||||
Task {
|
||||
do {
|
||||
_ = try await store.api.client.setReviewWorkflow(path: .init(projectId: project.id), body: .json(.init(workflow: name))).ok.body.json
|
||||
} catch {
|
||||
overlays.showAlert(errorText(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private struct ProjectBlock: View {
|
||||
let project: Project
|
||||
let todo: Result<Todo, ApiError>?
|
||||
@@ -121,6 +168,8 @@ private struct ProjectBlock: View {
|
||||
HStack(alignment: .firstTextBaseline, spacing: 6) {
|
||||
Text(project.name).font(Fonts.font(13, weight: 700))
|
||||
Text(project.defaultBranch).font(Fonts.font(11)).foregroundStyle(Palette.muted)
|
||||
Spacer()
|
||||
ReviewWorkflowMenu(project: project)
|
||||
}
|
||||
.padding(.top, 16)
|
||||
.padding(.bottom, 6)
|
||||
|
||||
Reference in New Issue
Block a user