fix: lost comment if send without comment first
This commit is contained in:
parent
e9d015720b
commit
3f62272162
|
@ -88,7 +88,7 @@ extension ReportViewModel {
|
||||||
}
|
}
|
||||||
if status.id == self.statusId {
|
if status.id == self.statusId {
|
||||||
attribute.isSelected = true
|
attribute.isSelected = true
|
||||||
self.reportQuery.append(statusID: status.id)
|
self.append(statusID: status.id)
|
||||||
self.continueEnableSubject.send(true)
|
self.continueEnableSubject.send(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,9 @@ class ReportViewModel: NSObject {
|
||||||
var userId: String
|
var userId: String
|
||||||
var statusId: String?
|
var statusId: String?
|
||||||
|
|
||||||
|
var statusIDs = [Mastodon.Entity.Status.ID]()
|
||||||
|
var comment: String?
|
||||||
|
|
||||||
var reportQuery: FileReportQuery
|
var reportQuery: FileReportQuery
|
||||||
var disposeBag = Set<AnyCancellable>()
|
var disposeBag = Set<AnyCancellable>()
|
||||||
let currentStep = CurrentValueSubject<Step, Never>(.one)
|
let currentStep = CurrentValueSubject<Step, Never>(.one)
|
||||||
|
@ -120,19 +123,19 @@ class ReportViewModel: NSObject {
|
||||||
|
|
||||||
attribute.isSelected = !attribute.isSelected
|
attribute.isSelected = !attribute.isSelected
|
||||||
if attribute.isSelected {
|
if attribute.isSelected {
|
||||||
self.reportQuery.append(statusID: status.id)
|
self.append(statusID: status.id)
|
||||||
} else {
|
} else {
|
||||||
self.reportQuery.remove(statusID: status.id)
|
self.remove(statusID: status.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
let continueEnable = (self.reportQuery.statusIDs?.count ?? 0) > 0
|
let continueEnable = self.statusIDs.count > 0
|
||||||
self.continueEnableSubject.send(continueEnable)
|
self.continueEnableSubject.send(continueEnable)
|
||||||
}
|
}
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
input.comment.assign(
|
input.comment.assign(
|
||||||
to: \.comment,
|
to: \.comment,
|
||||||
on: self.reportQuery
|
on: self
|
||||||
)
|
)
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
input.comment.sink { [weak self] (comment) in
|
input.comment.sink { [weak self] (comment) in
|
||||||
|
@ -150,7 +153,13 @@ class ReportViewModel: NSObject {
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
Publishers.Merge(skip, input.step1Continue)
|
let step1Continue = input.step1Continue.map { [weak self] value -> Void in
|
||||||
|
guard let self = self else { return value }
|
||||||
|
self.reportQuery.statusIDs = self.statusIDs
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
Publishers.Merge(skip, step1Continue)
|
||||||
.sink { [weak self] _ in
|
.sink { [weak self] _ in
|
||||||
self?.currentStep.value = .two
|
self?.currentStep.value = .two
|
||||||
self?.sendEnableSubject.send(false)
|
self?.sendEnableSubject.send(false)
|
||||||
|
@ -165,7 +174,13 @@ class ReportViewModel: NSObject {
|
||||||
return value
|
return value
|
||||||
}
|
}
|
||||||
|
|
||||||
return Publishers.Merge(skip, input.step2Continue)
|
let step2Continue = input.step2Continue.map { [weak self] value -> Void in
|
||||||
|
guard let self = self else { return value }
|
||||||
|
self.reportQuery.comment = self.comment
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
return Publishers.Merge(skip, step2Continue)
|
||||||
.flatMap { [weak self] (_) -> AnyPublisher<(Bool, Error?), Never> in
|
.flatMap { [weak self] (_) -> AnyPublisher<(Bool, Error?), Never> in
|
||||||
guard let self = self else {
|
guard let self = self else {
|
||||||
return Empty(completeImmediately: true).eraseToAnyPublisher()
|
return Empty(completeImmediately: true).eraseToAnyPublisher()
|
||||||
|
@ -189,4 +204,14 @@ class ReportViewModel: NSObject {
|
||||||
}
|
}
|
||||||
.eraseToAnyPublisher()
|
.eraseToAnyPublisher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func append(statusID: Mastodon.Entity.Status.ID) {
|
||||||
|
guard self.statusIDs.contains(statusID) != true else { return }
|
||||||
|
self.statusIDs.append(statusID)
|
||||||
|
}
|
||||||
|
|
||||||
|
func remove(statusID: String) {
|
||||||
|
guard let index = self.statusIDs.firstIndex(of: statusID) else { return }
|
||||||
|
self.statusIDs.remove(at: index)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,19 +87,5 @@ public extension Mastodon.API.Reports {
|
||||||
self.comment = comment
|
self.comment = comment
|
||||||
self.forward = forward
|
self.forward = forward
|
||||||
}
|
}
|
||||||
|
|
||||||
public func append(statusID: Mastodon.Entity.Status.ID) {
|
|
||||||
guard self.statusIDs?.contains(statusID) != true else { return }
|
|
||||||
if self.statusIDs == nil {
|
|
||||||
self.statusIDs = []
|
|
||||||
}
|
|
||||||
|
|
||||||
self.statusIDs?.append(statusID)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func remove(statusID: String) {
|
|
||||||
guard let index = self.statusIDs?.firstIndex(of: statusID) else { return }
|
|
||||||
self.statusIDs?.remove(at: index)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue