//
// ListView.swift
// Notes10
//
// Created by Mansidak Singh on 6/15/22.
//
import SwiftUI
import FirebaseFirestore
import Firebase
import FirebaseAuth
struct ListView: View {
@StateObject var dataManager = DataManager()
@State var isPresented = false
var body: some View {
NavigationView {
ZStack{
List(dataManager.notes) { note in
NavigationLink(destination: NoteView(newNote: note.content, idd: note.id)) {
EmptyView()
Text(note.content)}.buttonStyle(PlainButtonStyle())
.frame(height: 0)
.navigationTitle("Notes")
.navigationBarItems(
trailing: Button (action: {},
label: {
NavigationLink(destination: NoteView(newNote: "", idd: "") )
{Image(systemName: "plus")}
.simultaneousGesture(TapGesture().onEnded{
dataManager.addNote()
})}
))
.listStyle(.plain)
.buttonStyle(PlainButtonStyle())
}.environment(\.defaultMinListRowHeight, 55)
.listStyle(.plain)
.buttonStyle(PlainButtonStyle())
.padding(.trailing, -80.0)
//
}
}.accentColor(.black)
} }
Here is the Data Manager code that runs the addNote function
import Foundation
import FirebaseFirestore
import SwiftUI
import Firebase
import FirebaseDatabase
import FirebaseAuth
class DataManager : ObservableObject {
@Published var notes: [Note] = []
@Published var idd = ""
func addNote()-> String{
let user = Auth.auth().currentUser
let uid = Auth.auth().currentUser!.uid
let db = Firestore.firestore()
var ref: DocumentReference? = nil
ref = db.collection("userslist").document(uid).collection("actualnotes").addDocument(data: ["content":"New Note","time": [".sv": "timestamp"]])
{error in
if let error = error{
print(error.localizedDescription)
}
else {
print("Document added with ID: \(ref!.documentID)")
}
}
// @Binding var idd: String
let idd = ref!.documentID
return idd
}
Here is the NotesView code that accepts the idd
import Foundation
import SwiftUI
struct NoteView: View {
@State var newNote: String = ""
@State var idd: String = ""
@StateObject var dataManager = DataManager()
var body: some View {
TextEditor(text: $newNote)
TextEditor(text: $idd)
.padding(EdgeInsets(top: -10, leading: 10, bottom: 40, trailing: 0))
.font(.system(size: 16, design: .monospaced))
Button (action: {
dataManager.updateNote(idd: idd, noteContent: newNote)
}, label: {Text("Update")}) .listStyle(.plain)
.buttonStyle(PlainButtonStyle())
}
}