| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- //
- // Task.swift
- // Todos
- //
- // Created by Sam Jaffe on 2/28/26.
- //
- import Foundation
- import SwiftData
- enum Status : String, CaseIterable, Identifiable, Codable {
- case Default = " "
- case Complete = "V"
- case InProgress = "C"
- case Hiatus = "H"
- case Waiting = "R"
-
- var id: Self { self }
- var description: String { self.rawValue }
- var isStrong: Bool {
- self == .Complete || self == .Hiatus || self == .Waiting
- }
- }
- @Model
- final class SubTask {
- var name: String
- var notes: String = ""
- var status: Status = Status.Default
-
- init(name: String) {
- self.name = name
- }
-
- func yaml(_ indent: Int = 0) -> String {
- let h1 = String(repeating: " ", count: indent)
- let h2 = String(repeating: " ", count: indent + 1)
- var rval = h1 + "[\(status.rawValue)] \(name)\n"
- if !notes.isEmpty {
- rval += h2 + "# " + notes.replacingOccurrences(of: "\n", with: "\n" + h2 + "# ")
- }
- return rval
- }
- }
- struct Tag : Codable, Identifiable {
- var id: String
- }
- @Model
- final class Task {
- var name: String
- var tags: [Tag] = []
- var subtasks: [SubTask] = []
- var notes: String = ""
- var status: Status = Status.Default
-
- init(name: String) {
- self.name = name
- }
-
- func yaml(_ indent: Int = 0) -> String {
- let h1 = String(repeating: " ", count: indent)
- let h2 = String(repeating: " ", count: indent + 1)
- var rval = h1 + "[\(status.rawValue)] \(name) "
- rval += "(\(tags.map(\.id).joined(separator: " ")))\n"
- if !notes.isEmpty {
- rval += h2 + "# " + notes.replacingOccurrences(of: "\n", with: "\n" + h2 + "# ")
- }
- rval += subtasks.map({ $0.yaml(indent + 1) }).joined()
- return rval
- }
- }
|