Skip to content

Commit c13b1af

Browse files
authored
Add Creators and Custom Designs Editing (#229)
* Add Design Editing This PR adds editing to the Creators and Custom Designs feature. * Make the row fully tappable * Simplify .updateDesign(_:)
1 parent 3404c83 commit c13b1af

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

ACHNBrowserUI/ACHNBrowserUI/packages/Backend/Sources/Backend/environments/UserCollection.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,12 @@ public class UserCollection: ObservableObject {
247247
save()
248248
}
249249

250+
public func updateDesign(_ design: Design) {
251+
guard let index = designs.firstIndex(of: design) else { return }
252+
designs[index] = design
253+
save()
254+
}
255+
250256
// MARK: - Chores
251257

252258
public func addChore(_ chore: Chore) {

ACHNBrowserUI/ACHNBrowserUI/viewModels/DesignFormViewModel.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,23 @@ final class DesignFormViewModel: ObservableObject {
1818
// MARK: - Private properties
1919

2020
private let userCollection: UserCollection
21+
private let isEditing: Bool
2122

2223
// MARK: - Life cycle
2324

2425
init(design: Design?, userCollection: UserCollection = .shared) {
26+
self.isEditing = design != nil
2527
self.design = design ?? Design()
2628
self.userCollection = userCollection
2729
}
2830

2931
// MARK: - Public
3032

3133
func save() {
32-
userCollection.addDesign(design)
34+
if isEditing {
35+
userCollection.updateDesign(design)
36+
} else {
37+
userCollection.addDesign(design)
38+
}
3339
}
3440
}

ACHNBrowserUI/ACHNBrowserUI/views/design/DesignListView.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ struct DesignListView: View {
1414

1515
@ObservedObject private var viewModel: DesignListViewModel
1616
@State private var sheet: Sheet.SheetType?
17+
@State private var editingMode: EditMode = .inactive
1718

1819
// MARK: - Life cycle
1920

@@ -34,12 +35,20 @@ struct DesignListView: View {
3435

3536
ForEach(viewModel.designs) { design in
3637
DesignRowView(viewModel: DesignRowViewModel(design: design))
38+
.contentShape(Rectangle())
39+
.onTapGesture {
40+
if self.editingMode == .active {
41+
self.sheet = .designForm(editingDesign: design)
42+
}
43+
}
3744
}.onDelete { indexes in
3845
self.viewModel.deleteDesign(at: indexes.first!)
3946
}
4047
}
4148
.navigationBarTitle(Text("Designs"), displayMode: .automatic)
49+
.navigationBarItems(trailing: EditButton())
4250
.sheet(item: $sheet, content: { Sheet(sheetType: $0) })
51+
.environment(\.editMode, self.$editingMode)
4352
}
4453
}
4554

ACHNBrowserUI/ACHNBrowserUI/views/design/DesignRowView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ struct DesignRowView: View {
1313

1414
// MARK: - Properties
1515

16-
let viewModel: DesignRowViewModel
16+
private let viewModel: DesignRowViewModel
17+
private let id = UUID()
1718

1819
// MARK: - Life cycle
1920

0 commit comments

Comments
 (0)