🐛 Fix #6 : Make cancelling make more sense

pull/8/head
Alexis Drai 2 years ago
parent ce61496b5b
commit 04c27dde38

@ -16,7 +16,7 @@ class UnitsStore: ObservableObject {
in: .userDomainMask, in: .userDomainMask,
appropriateFor: nil, appropriateFor: nil,
create: false create: false
).appendingPathComponent("my.data") ).appendingPathComponent("my.local.data")
} }
func load<T: Codable>(defaultValue: [T]) async throws -> [T] { func load<T: Codable>(defaultValue: [T]) async throws -> [T] {

@ -17,9 +17,6 @@ struct SubjectViewCell: View {
var body: some View { var body: some View {
HStack { HStack {
VStack { VStack {
// FIXME (later, maybe) when getting updated from the UnitView, these two changes are persisted right away instead of waiting for user
// to confirm changes. They just don't get brought into the main UnitsManager, so the average is not recalculated when a unit's weight changes
// when 'cancel' is hit, it would be nice to reset these two values as well, like a user might expect
HStack { HStack {
TextField("", text: $subjectVM.model.name) TextField("", text: $subjectVM.model.name)
.disabled(!unitsManagerVM.isAllEditable) .disabled(!unitsManagerVM.isAllEditable)

@ -15,6 +15,8 @@ struct UnitView: View {
@State private var showingForm: Bool = false @State private var showingForm: Bool = false
var formVM = SubjectFormVM() var formVM = SubjectFormVM()
// TODO maybe later: when a subject is deleted this way, if the user clicks on 'Annuler', the deletion should be cancelled
// then update the readme accrodingly
private func delete(at offsets: IndexSet) { private func delete(at offsets: IndexSet) {
guard let index = offsets.first else { return } guard let index = offsets.first else { return }
let subjectVMToDelete = unitVM.SubjectsVM[index] let subjectVMToDelete = unitVM.SubjectsVM[index]
@ -75,9 +77,15 @@ struct UnitView: View {
Button(action: { showingForm = true }) { Button(action: { showingForm = true }) {
Image(systemName: "plus") Image(systemName: "plus")
} }
// FIXME this does cancel the changes made **to unit and subject** names and weights,
// but whereas names visibly revert instantaneously to old values, like we should expect,
// weights are displayed as new, cancelled values until user clicks on 'Modifier' again, when it finally takes on the true, old, value
// ... weights should visibly revert instantaneously to old values
Button(action: { Button(action: {
unitVM.isEdited = false
unitsManagerVM.isAllEditable.toggle() unitsManagerVM.isAllEditable.toggle()
unitVM.onEdited(isCancelled: true) unitVM.onEdited(isCancelled: true)
unitVM.SubjectsVM.forEach { $0.onEdited(isCancelled: true) }
}) { }) {
Text("Annuler") Text("Annuler")
} }
@ -137,6 +145,7 @@ struct UnitView: View {
// If user navigates back while editing but before clicking 'OK', the changes are cancelled // If user navigates back while editing but before clicking 'OK', the changes are cancelled
.onDisappear(perform: { .onDisappear(perform: {
if unitsManagerVM.isAllEditable { if unitsManagerVM.isAllEditable {
unitVM.isEdited = false
unitVM.onEdited(isCancelled: true) unitVM.onEdited(isCancelled: true)
unitsManagerVM.isAllEditable = false unitsManagerVM.isAllEditable = false
} }

@ -44,7 +44,6 @@ class UnitsManagerVM : ObservableObject {
private var original: UnitsManager private var original: UnitsManager
@Published var model: UnitsManager.Data @Published var model: UnitsManager.Data
@Published var isEdited: Bool = false
@Published var isAllEditable: Bool = false @Published var isAllEditable: Bool = false
private var unitsVM: [UnitVM] private var unitsVM: [UnitVM]

Loading…
Cancel
Save