mirror of
https://github.com/ivanvorobei/SwiftUI.git
synced 2026-03-24 10:21:28 +01:00
40 lines
1.1 KiB
Swift
Executable File
40 lines
1.1 KiB
Swift
Executable File
import SwiftUI
|
|
|
|
struct TodoState {
|
|
var isCreatingItem: Bool = false
|
|
var partialItemName: String = ""
|
|
var todoItems: [TodoItem] = []
|
|
}
|
|
|
|
extension TodoState: StateMachine {
|
|
|
|
enum Event {
|
|
case startCreatingItem
|
|
case cancelCreatingItem
|
|
case changePartialItemName(String)
|
|
case addItem
|
|
case setItemDone(identifier: UUID, isDone: Bool)
|
|
}
|
|
|
|
mutating func update(with event: TodoState.Event) {
|
|
switch event {
|
|
case .addItem:
|
|
todoItems.append(TodoItem(id: UUID(), title: partialItemName, isFinished: false))
|
|
partialItemName = ""
|
|
isCreatingItem = false
|
|
case .changePartialItemName(let name):
|
|
partialItemName = name
|
|
case .cancelCreatingItem:
|
|
isCreatingItem = false
|
|
case .startCreatingItem:
|
|
isCreatingItem = true
|
|
partialItemName = ""
|
|
case .setItemDone(let identifier, let isDone):
|
|
if let index = todoItems.firstIndex(where: { $0.id == identifier }) {
|
|
todoItems[index].isFinished = isDone
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|