mirror of
https://github.com/1SecondEveryday/MemoryTree.git
synced 2026-03-25 08:55:47 +00:00
98 lines
2.6 KiB
Swift
98 lines
2.6 KiB
Swift
//
|
|
// ContentView.swift
|
|
// MemoryTree
|
|
//
|
|
// Created by Work on 2023-02-05.
|
|
//
|
|
|
|
import Boutique
|
|
import SwiftUI
|
|
|
|
struct Entry: Hashable, Identifiable, Codable {
|
|
let id: UUID
|
|
let text: String
|
|
|
|
init(id: UUID = UUID(), text: String) {
|
|
self.id = id
|
|
self.text = text
|
|
}
|
|
}
|
|
|
|
extension Store where Item == Entry {
|
|
static let entriesStore = Store<Entry>(
|
|
storage: SQLiteStorageEngine.default(appendingPath: "Entries")
|
|
)
|
|
}
|
|
|
|
struct ContentView: View {
|
|
@State var isEditing = false
|
|
|
|
// @Stored(in: .entriesStore) var entries
|
|
@State var entries: [Entry] = []
|
|
|
|
@State var entryText = ""
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
VStack(spacing: 0) {
|
|
NavigationLink(destination: CloudView(entries: $entries)) {
|
|
Image(systemName: "wind.snow")
|
|
.imageScale(.large)
|
|
.foregroundColor(.white)
|
|
}
|
|
.padding()
|
|
.frame(maxWidth: .infinity, alignment: .trailing)
|
|
.opacity(entries.isEmpty ? 0 : 1)
|
|
|
|
Spacer()
|
|
|
|
Button {
|
|
isEditing = true
|
|
} label: {
|
|
Image(entries.isEmpty ? "TreeBare" : "TreeLeafy")
|
|
.renderingMode(.template)
|
|
.resizable()
|
|
.scaledToFit()
|
|
.foregroundColor(.white)
|
|
}
|
|
.frame(maxHeight: entries.isEmpty ? 100 : 300)
|
|
|
|
Color.green
|
|
.frame(height: 80)
|
|
|
|
Form {
|
|
TextField("What are you grateful for today?", text: $entryText)
|
|
.background(Color.white)
|
|
.tint(Color.blue)
|
|
}
|
|
.onSubmit {
|
|
// Task {
|
|
// try await $entries.insert(Entry(text: entryText))
|
|
// }
|
|
entries.append(Entry(text: entryText))
|
|
entryText = ""
|
|
isEditing = false
|
|
}
|
|
.frame(maxHeight: isEditing ? 120 : 0)
|
|
}
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
.edgesIgnoringSafeArea(.bottom)
|
|
.background(Color.blue)
|
|
}
|
|
}
|
|
}
|
|
|
|
struct ContentView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
Group {
|
|
ContentView()
|
|
|
|
ContentView(isEditing: true)
|
|
|
|
ContentView(entries: [Entry(text: "Coffee")])
|
|
|
|
ContentView(isEditing: true, entries: [Entry(text: "Coffee")])
|
|
}
|
|
.tint(.white)
|
|
}
|
|
}
|