Preview and minor fixes
This commit is contained in:
@@ -17,8 +17,39 @@ class DataController: ObservableObject {
|
|||||||
container.viewContext
|
container.viewContext
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static var preview: DataController = {
|
||||||
|
let result = DataController(inMemory: true)
|
||||||
|
let viewContext = result.container.viewContext
|
||||||
|
for _ in 0..<10 {
|
||||||
|
let flashcard = Flashcard(context: viewContext)
|
||||||
|
flashcard.id = UUID()
|
||||||
|
flashcard.name = ["This is a name", "This is another name", "This is a third name", "This is a fourth name"].randomElement()!
|
||||||
|
flashcard.desc = [
|
||||||
|
"This is a very long description that should be even longer maybe even lorem ipsum to cover all cases?",
|
||||||
|
"This is a very short description",
|
||||||
|
"This is a medium length description that should be long enough to cover all cases"
|
||||||
|
].randomElement()!
|
||||||
|
flashcard.nextSpacedRepetitionMilestone = SpacedRepetitionMilestoneEnum.allCases.randomElement()!.rawValue
|
||||||
|
flashcard.lastSeenOn = [nil, Date(), Date().addingTimeInterval([-86400, -24000, -100000].randomElement()!)].randomElement()!
|
||||||
|
flashcard.shownCount = [0, 1, 2, 3, 4, 5].randomElement()!
|
||||||
|
flashcard.dateAdded = [Date(), Date().addingTimeInterval(-86400), Date().addingTimeInterval(-172800)].randomElement()!
|
||||||
|
}
|
||||||
|
do {
|
||||||
|
try viewContext.save()
|
||||||
|
} catch {
|
||||||
|
// Replace this implementation with code to handle the error appropriately.
|
||||||
|
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
|
||||||
|
let nsError = error as NSError
|
||||||
|
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}()
|
||||||
|
|
||||||
init() {
|
|
||||||
|
init(inMemory: Bool = false) {
|
||||||
|
if inMemory {
|
||||||
|
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
|
||||||
|
}
|
||||||
container.loadPersistentStores { description, error in
|
container.loadPersistentStores { description, error in
|
||||||
if let error = error {
|
if let error = error {
|
||||||
print("Core data failed to load: \(error.localizedDescription)")
|
print("Core data failed to load: \(error.localizedDescription)")
|
||||||
@@ -40,40 +71,40 @@ class DataController: ObservableObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// public func getFlashCardsToDisplay() -> Flashcard? {
|
// public func getFlashCardsToDisplay() -> Flashcard? {
|
||||||
// let flashcards = self.getAllFlashcards()
|
// let flashcards = self.getAllFlashcards()
|
||||||
//
|
//
|
||||||
// if flashcards.count > 0 {
|
// if flashcards.count > 0 {
|
||||||
// let notShownFlashCards = flashcards.filter({!$0.shown})
|
// let notShownFlashCards = flashcards.filter({!$0.shown})
|
||||||
// // if today is the date they're supposed to be shown
|
// // if today is the date they're supposed to be shown
|
||||||
//
|
//
|
||||||
// let displayToday = flashcards.filter({
|
// let displayToday = flashcards.filter({
|
||||||
// $0.lastSeenOn != nil &&
|
// $0.lastSeenOn != nil &&
|
||||||
// $0.lastSeenOn!.addSpacedRepetitionMilestone(
|
// $0.lastSeenOn!.addSpacedRepetitionMilestone(
|
||||||
// milestone: SpacedRepetitionMilestoneEnum.getMilestoneFromInt(
|
// milestone: SpacedRepetitionMilestoneEnum.getMilestoneFromInt(
|
||||||
// value: $0.nextSpacedRepetitionMilestone))
|
// value: $0.nextSpacedRepetitionMilestone))
|
||||||
// .isBeforeTodayOrToday()
|
// .isBeforeTodayOrToday()
|
||||||
// })
|
// })
|
||||||
// if displayToday.count > 0 {
|
// if displayToday.count > 0 {
|
||||||
// return displayToday.first!
|
// return displayToday.first!
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
//// let shownWords = words.filter({ $0.shown })
|
//// let shownWords = words.filter({ $0.shown })
|
||||||
//// if shownWords.count == 0 {
|
//// if shownWords.count == 0 {
|
||||||
// if notShownFlashCards.count == 0 {
|
// if notShownFlashCards.count == 0 {
|
||||||
// return nil
|
// return nil
|
||||||
// }
|
// }
|
||||||
// return notShownFlashCards.sorted(by: {$0.id < $1.id}).first
|
// return notShownFlashCards.sorted(by: {$0.id < $1.id}).first
|
||||||
//// }
|
//// }
|
||||||
// // if today is the day to show a new word
|
// // if today is the day to show a new word
|
||||||
//// let settings = model.settings
|
//// let settings = model.settings
|
||||||
//// if shownWords.count == 0 ||
|
//// if shownWords.count == 0 ||
|
||||||
//// settings.lastShownNew == nil ||
|
//// settings.lastShownNew == nil ||
|
||||||
//// settings.lastShownNew!.addFrequency(frequency: settings.frequency).isAfterToday() {
|
//// settings.lastShownNew!.addFrequency(frequency: settings.frequency).isAfterToday() {
|
||||||
//// return words.first!
|
//// return words.first!
|
||||||
//// }
|
//// }
|
||||||
// }
|
// }
|
||||||
// // otherwise show nothing
|
// // otherwise show nothing
|
||||||
// return nil
|
// return nil
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,13 +12,18 @@ struct AddFlashCard: View {
|
|||||||
@State var description: String = ""
|
@State var description: String = ""
|
||||||
@Binding var isShowing: Bool
|
@Binding var isShowing: Bool
|
||||||
@Environment(\.managedObjectContext) var moc
|
@Environment(\.managedObjectContext) var moc
|
||||||
|
@FocusState private var focus: Bool
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationStack {
|
NavigationStack {
|
||||||
List {
|
List {
|
||||||
Section(header: Text("Flashcard details") ) {
|
Section(header: Text("Flashcard details") ) {
|
||||||
TextField("Name", text: $text)
|
TextField("Name", text: $text)
|
||||||
|
.focused($focus)
|
||||||
TextField("Description", text: $description, axis: .vertical)
|
TextField("Description", text: $description, axis: .vertical)
|
||||||
}
|
}
|
||||||
|
.onAppear {
|
||||||
|
self.focus = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItemGroup(placement: .topBarLeading) {
|
ToolbarItemGroup(placement: .topBarLeading) {
|
||||||
@@ -55,4 +60,5 @@ struct AddFlashCard: View {
|
|||||||
#Preview {
|
#Preview {
|
||||||
@State var isShowing = true
|
@State var isShowing = true
|
||||||
return AddFlashCard(isShowing: $isShowing)
|
return AddFlashCard(isShowing: $isShowing)
|
||||||
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,4 +83,5 @@ struct AnkiView: View {
|
|||||||
#Preview {
|
#Preview {
|
||||||
AnkiView()
|
AnkiView()
|
||||||
.environmentObject(WordAXModelView())
|
.environmentObject(WordAXModelView())
|
||||||
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,16 +46,16 @@ struct FlashCardListRowView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#Preview {
|
#Preview {
|
||||||
let fc = Flashcard()
|
let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first
|
||||||
fc.id = UUID()
|
|
||||||
fc.name = "Mesmerizing"
|
|
||||||
fc.desc = "Some very long description like Lorem Ipsum which I'm to lazy to copy"
|
|
||||||
return Group {
|
return Group {
|
||||||
FlashCardListRowView(flashcard: fc)
|
FlashCardListRowView(flashcard: flashcard!)
|
||||||
.environmentObject(WordAXModelView())
|
.environmentObject(WordAXModelView())
|
||||||
FlashCardListRowView(flashcard: fc)
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
|
FlashCardListRowView(flashcard: flashcard!)
|
||||||
.environmentObject(WordAXModelView())
|
.environmentObject(WordAXModelView())
|
||||||
FlashCardListRowView(flashcard: fc)
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
|
FlashCardListRowView(flashcard: flashcard!)
|
||||||
.environmentObject(WordAXModelView())
|
.environmentObject(WordAXModelView())
|
||||||
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ struct FlashCardListView: View {
|
|||||||
@EnvironmentObject var model: WordAXModelView
|
@EnvironmentObject var model: WordAXModelView
|
||||||
@State var showDescription = true
|
@State var showDescription = true
|
||||||
@State var addFlashcard = false
|
@State var addFlashcard = false
|
||||||
// @ObservedObject var flashcards = DataController.shared.getAllFlashcards()
|
@FetchRequest(sortDescriptors: [NSSortDescriptor(key: "dateAdded", ascending: false)]) var flashcards: FetchedResults<Flashcard>
|
||||||
@FetchRequest(sortDescriptors: []) var flashcards: FetchedResults<Flashcard>
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
GeometryReader { geometry in
|
GeometryReader { geometry in
|
||||||
NavigationSplitView {
|
NavigationSplitView {
|
||||||
@@ -52,7 +51,8 @@ struct FlashCardListView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//#Preview {
|
#Preview {
|
||||||
// FlashCardListView()
|
FlashCardListView()
|
||||||
// .environmentObject(WordAXModelView())
|
.environmentObject(WordAXModelView())
|
||||||
//}
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import CoreData
|
||||||
|
|
||||||
struct FlashCardView: View {
|
struct FlashCardView: View {
|
||||||
var flashcard: Flashcard
|
var flashcard: Flashcard
|
||||||
@@ -47,6 +48,8 @@ struct FlashCardView: View {
|
|||||||
|
|
||||||
#Preview {
|
#Preview {
|
||||||
@State var showDescription = false
|
@State var showDescription = false
|
||||||
return FlashCardView(flashcard: DataController().getAllFlashcards()[0], showDescription: $showDescription)
|
let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first
|
||||||
|
return FlashCardView(flashcard: flashcard!, showDescription: $showDescription)
|
||||||
.environmentObject(WordAXModelView())
|
.environmentObject(WordAXModelView())
|
||||||
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,4 +45,5 @@ struct MainView: View {
|
|||||||
#Preview {
|
#Preview {
|
||||||
MainView()
|
MainView()
|
||||||
.environmentObject(WordAXModelView())
|
.environmentObject(WordAXModelView())
|
||||||
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ extension ShapeStyle where Self == Color {
|
|||||||
|
|
||||||
//#Preview {
|
//#Preview {
|
||||||
// @State var showDescription = false
|
// @State var showDescription = false
|
||||||
// return NextRepetitionButtonView(buttonText: "Excellent", nextMilestone: Flashcard.SpacedRepetitionMilestoneEnum.OneDay, wordId: 0, showDescription: $showDescription)
|
// let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first
|
||||||
|
// return NextRepetitionButtonView(buttonText: "Excellent", nextMilestone: Flashcard.SpacedRepetitionMilestoneEnum.OneDay, showDescription: $showDescription)
|
||||||
// .environmentObject(WordAXModelView())
|
// .environmentObject(WordAXModelView())
|
||||||
|
// .environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
//}
|
//}
|
||||||
|
|||||||
@@ -16,4 +16,5 @@ struct SettingsView: View {
|
|||||||
#Preview {
|
#Preview {
|
||||||
SettingsView()
|
SettingsView()
|
||||||
.environmentObject(WordAXModelView())
|
.environmentObject(WordAXModelView())
|
||||||
|
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user