Refactor
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
6C4A87D22BE25D260074E0A9 /* Deck+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4A87D02BE25D260074E0A9 /* Deck+CoreDataClass.swift */; };
|
||||
6C4A87D32BE25D260074E0A9 /* Deck+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4A87D12BE25D260074E0A9 /* Deck+CoreDataProperties.swift */; };
|
||||
6C8184FE2B88C9580033CF46 /* WordAX.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8184FD2B88C9580033CF46 /* WordAX.swift */; };
|
||||
6C8185002B88C9660033CF46 /* WordAXModelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8184FF2B88C9660033CF46 /* WordAXModelView.swift */; };
|
||||
6C8185002B88C9660033CF46 /* Miscellaneous.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8184FF2B88C9660033CF46 /* Miscellaneous.swift */; };
|
||||
6C8185022B88C9FB0033CF46 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8185012B88C9FB0033CF46 /* SettingsView.swift */; };
|
||||
6C8185042B88CA210033CF46 /* AnkiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8185032B88CA210033CF46 /* AnkiView.swift */; };
|
||||
6C8185062B8A537F0033CF46 /* FlashCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8185052B8A537F0033CF46 /* FlashCardView.swift */; };
|
||||
@@ -33,7 +33,7 @@
|
||||
6C4A87D02BE25D260074E0A9 /* Deck+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Deck+CoreDataClass.swift"; sourceTree = "<group>"; };
|
||||
6C4A87D12BE25D260074E0A9 /* Deck+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Deck+CoreDataProperties.swift"; sourceTree = "<group>"; };
|
||||
6C8184FD2B88C9580033CF46 /* WordAX.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordAX.swift; sourceTree = "<group>"; };
|
||||
6C8184FF2B88C9660033CF46 /* WordAXModelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordAXModelView.swift; sourceTree = "<group>"; };
|
||||
6C8184FF2B88C9660033CF46 /* Miscellaneous.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Miscellaneous.swift; sourceTree = "<group>"; };
|
||||
6C8185012B88C9FB0033CF46 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
|
||||
6C8185032B88CA210033CF46 /* AnkiView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnkiView.swift; sourceTree = "<group>"; };
|
||||
6C8185052B8A537F0033CF46 /* FlashCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlashCardView.swift; sourceTree = "<group>"; };
|
||||
@@ -138,7 +138,7 @@
|
||||
6CF439512B83541D004C3543 /* WordAXApp.swift */,
|
||||
6C4632342BC2D99E003ED0E9 /* Views */,
|
||||
6C8184FD2B88C9580033CF46 /* WordAX.swift */,
|
||||
6C8184FF2B88C9660033CF46 /* WordAXModelView.swift */,
|
||||
6C8184FF2B88C9660033CF46 /* Miscellaneous.swift */,
|
||||
6CF439552B83541E004C3543 /* Assets.xcassets */,
|
||||
6CF439572B83541E004C3543 /* Preview Content */,
|
||||
);
|
||||
@@ -230,7 +230,7 @@
|
||||
6CEF7FA32BC88F6000E205F6 /* Flashcard+CoreDataProperties.swift in Sources */,
|
||||
6C81850A2B8BA5740033CF46 /* FlashCardListView.swift in Sources */,
|
||||
6CEF7FA62BC96F2B00E205F6 /* ButtonHStackView.swift in Sources */,
|
||||
6C8185002B88C9660033CF46 /* WordAXModelView.swift in Sources */,
|
||||
6C8185002B88C9660033CF46 /* Miscellaneous.swift in Sources */,
|
||||
6C8185042B88CA210033CF46 /* AnkiView.swift in Sources */,
|
||||
6CEF7F7D2BC457E600E205F6 /* DataController.swift in Sources */,
|
||||
6CF439522B83541D004C3543 /* WordAXApp.swift in Sources */,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// WordAXModelView.swift
|
||||
// Miscellaneous.swift
|
||||
// WordAX
|
||||
//
|
||||
// Created by Oliver Hnát on 23.02.2024.
|
||||
@@ -8,28 +8,14 @@
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
class WordAXModelView: ObservableObject {
|
||||
class Miscellaneous {
|
||||
typealias SpacedRepetitionMilestoneEnum = Flashcard.SpacedRepetitionMilestoneEnum
|
||||
|
||||
let settings: Settings
|
||||
|
||||
init() {
|
||||
static var dateFormatter: DateFormatter {
|
||||
let hourString = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: NSLocale.current)
|
||||
let dateFormatter = DateFormatter()
|
||||
dateFormatter.dateFormat = "dd/MM/YYYY \(hourString?.contains("a") ?? true ? "hh" : "HH"):mm\(hourString?.contains("a") ?? true ? " a" : "")"
|
||||
self.settings = Settings(dateFormatter: dateFormatter)
|
||||
}
|
||||
|
||||
struct Settings {
|
||||
var dateFormatter: DateFormatter
|
||||
}
|
||||
|
||||
public func getFlashcards(moc: DataController) -> [Flashcard] {
|
||||
moc.getAllFlashcards()
|
||||
}
|
||||
|
||||
public func getDateFormatter() -> DateFormatter {
|
||||
self.settings.dateFormatter
|
||||
return dateFormatter
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import CoreData
|
||||
|
||||
class DataController: ObservableObject {
|
||||
let container = NSPersistentContainer(name: "WordAXCD")
|
||||
// static let shared = DataController()
|
||||
typealias SpacedRepetitionMilestoneEnum = Flashcard.SpacedRepetitionMilestoneEnum
|
||||
|
||||
var viewContext: NSManagedObjectContext {
|
||||
@@ -57,20 +56,6 @@ class DataController: ObservableObject {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public func getAllFlashcards(predicate: NSPredicate? = nil) -> [Flashcard]{
|
||||
let request = NSFetchRequest<Flashcard>(entityName: "Flashcard")
|
||||
if predicate != nil {
|
||||
request.predicate = predicate
|
||||
}
|
||||
|
||||
do {
|
||||
return try viewContext.fetch(request)
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -18,13 +18,15 @@ extension Flashcard {
|
||||
|
||||
@NSManaged public var dateAdded: Date?
|
||||
@NSManaged public var desc: String?
|
||||
@NSManaged public var favorite: Bool
|
||||
@NSManaged public var id: UUID?
|
||||
@NSManaged public var lastSeenOn: Date?
|
||||
@NSManaged public var name: String?
|
||||
@NSManaged public var nextSpacedRepetitionMilestone: Int64
|
||||
@NSManaged public var shown: Bool
|
||||
@NSManaged public var shownCount: Int64
|
||||
@NSManaged public var favorite: Bool
|
||||
@NSManaged public var deck: Deck?
|
||||
|
||||
}
|
||||
|
||||
extension Flashcard : Identifiable {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<entity name="Deck" representedClassName="Deck" syncable="YES" coreSpotlightDisplayNameExpression="Deck">
|
||||
<attribute name="id" attributeType="UUID" usesScalarValueType="NO"/>
|
||||
<attribute name="name" attributeType="String"/>
|
||||
<relationship name="flashcards" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="Flashcard"/>
|
||||
<relationship name="flashcards" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="Flashcard" inverseName="deck" inverseEntity="Flashcard"/>
|
||||
</entity>
|
||||
<entity name="Flashcard" representedClassName="Flashcard" syncable="YES" coreSpotlightDisplayNameExpression="Card">
|
||||
<attribute name="dateAdded" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
@@ -15,5 +15,6 @@
|
||||
<attribute name="nextSpacedRepetitionMilestone" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
|
||||
<attribute name="shown" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
|
||||
<attribute name="shownCount" optional="YES" attributeType="Integer 64" defaultValueString="0" usesScalarValueType="YES"/>
|
||||
<relationship name="deck" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Deck" inverseName="flashcards" inverseEntity="Deck"/>
|
||||
</entity>
|
||||
</model>
|
||||
@@ -54,13 +54,10 @@ struct FlashCardListRowView: View {
|
||||
let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first
|
||||
return Group {
|
||||
FlashCardListRowView(flashcard: flashcard!)
|
||||
.environmentObject(WordAXModelView())
|
||||
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||
FlashCardListRowView(flashcard: flashcard!)
|
||||
.environmentObject(WordAXModelView())
|
||||
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||
FlashCardListRowView(flashcard: flashcard!)
|
||||
.environmentObject(WordAXModelView())
|
||||
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,6 +67,5 @@ struct FlashCardListView: View {
|
||||
|
||||
#Preview {
|
||||
FlashCardListView()
|
||||
.environmentObject(WordAXModelView())
|
||||
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ import CoreData
|
||||
struct FlashCardView: View {
|
||||
var flashcard: Flashcard
|
||||
@Binding var showDescription: Bool
|
||||
@EnvironmentObject var model: WordAXModelView
|
||||
@Environment(\.colorScheme) var colorScheme
|
||||
|
||||
|
||||
@@ -23,7 +22,7 @@ struct FlashCardView: View {
|
||||
VStack {
|
||||
// TODO: Figure out if this and create/edit menu could be more similar?
|
||||
if flashcard.lastSeenOn != nil {
|
||||
Text("Last seen: " + model.getDateFormatter().string(from: flashcard.lastSeenOn!))
|
||||
Text("Last seen: " + Miscellaneous.dateFormatter.string(from: flashcard.lastSeenOn!))
|
||||
.font(.subheadline)
|
||||
}
|
||||
if showDescription {
|
||||
@@ -56,6 +55,5 @@ struct FlashCardView: View {
|
||||
@State var showDescription = true
|
||||
let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first
|
||||
return FlashCardView(flashcard: flashcard!, showDescription: $showDescription)
|
||||
.environmentObject(WordAXModelView())
|
||||
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||
}
|
||||
|
||||
@@ -44,6 +44,5 @@ struct MainView: View {
|
||||
|
||||
#Preview {
|
||||
MainView()
|
||||
.environmentObject(WordAXModelView())
|
||||
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||
}
|
||||
|
||||
@@ -64,6 +64,5 @@ extension ShapeStyle where Self == Color {
|
||||
// @State var showDescription = false
|
||||
// let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first
|
||||
// return NextRepetitionButtonView(buttonText: "Excellent", nextMilestone: Flashcard.SpacedRepetitionMilestoneEnum.OneDay, showDescription: $showDescription)
|
||||
// .environmentObject(WordAXModelView())
|
||||
// .environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||
//}
|
||||
|
||||
@@ -43,6 +43,5 @@ extension UTType {
|
||||
|
||||
#Preview {
|
||||
SettingsView()
|
||||
.environmentObject(WordAXModelView())
|
||||
.environment(\.managedObjectContext, DataController.preview.container.viewContext)
|
||||
}
|
||||
|
||||
@@ -9,12 +9,10 @@ import SwiftUI
|
||||
|
||||
@main
|
||||
struct WordAXApp: App {
|
||||
@StateObject private var model = WordAXModelView()
|
||||
@StateObject private var dataControler = DataController()
|
||||
var body: some Scene {
|
||||
WindowGroup {
|
||||
MainView()
|
||||
.environmentObject(model)
|
||||
.environment(\.managedObjectContext, dataControler.container.viewContext)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user