aboutsummaryrefslogtreecommitdiff
path: root/iTexSnip/Views/DetailedSnippetView.swift
diff options
context:
space:
mode:
authorNavan Chauhan <navanchauhan@gmail.com>2024-10-21 23:33:35 -0600
committerNavan Chauhan <navanchauhan@gmail.com>2024-10-21 23:34:28 -0600
commitc343140bcf9862b7b4b0d465b67e51eb42f45008 (patch)
tree56f4ec32382cfb9142d4ceaed0c3d0c2edcff769 /iTexSnip/Views/DetailedSnippetView.swift
parente2e7befe212b1340f851af88f3de4133dc33df14 (diff)
initial commit
Diffstat (limited to 'iTexSnip/Views/DetailedSnippetView.swift')
-rw-r--r--iTexSnip/Views/DetailedSnippetView.swift145
1 files changed, 145 insertions, 0 deletions
diff --git a/iTexSnip/Views/DetailedSnippetView.swift b/iTexSnip/Views/DetailedSnippetView.swift
new file mode 100644
index 0000000..c7386fa
--- /dev/null
+++ b/iTexSnip/Views/DetailedSnippetView.swift
@@ -0,0 +1,145 @@
+//
+// DetailedSnippetView.swift
+// iTexSnip
+//
+// Created by Navan Chauhan on 10/21/24.
+//
+
+import SwiftUI
+import LaTeXSwiftUI
+
+struct DetailedSnippetView: View {
+ @Environment(\.modelContext) var modelContext
+ @Environment(\.dismiss) private var dismiss
+
+ @State var showOriginal = false
+
+
+ var snippet: ImageSnippet
+ var body: some View {
+ VStack {
+ HStack {
+ Toggle("Show Original", isOn: $showOriginal)
+ .toggleStyle(.switch)
+ .padding()
+ Spacer()
+ HStack {
+ Button {
+ if snippet.rating == true {
+ updateRating(nil)
+ } else {
+ updateRating(true)
+ }
+ } label: {
+ if snippet.rating == true {
+ Image(systemName: "hand.thumbsup")
+ .foregroundStyle(.green)
+ .imageScale(.large)
+ } else {
+ Image(systemName: "hand.thumbsup")
+ .imageScale(.large)
+ }
+ }.buttonStyle(PlainButtonStyle())
+
+ Button {
+ if snippet.rating == false {
+ updateRating(nil)
+ } else {
+ updateRating(false)
+ }
+ } label: {
+ if snippet.rating == false {
+ Image(systemName: "hand.thumbsdown")
+ .foregroundStyle(.red)
+ .imageScale(.large)
+ } else {
+ Image(systemName: "hand.thumbsdown")
+ .imageScale(.large)
+ }
+ }.buttonStyle(PlainButtonStyle())
+
+ Button(role: .destructive) {
+ withAnimation {
+ modelContext.delete(snippet)
+ do {
+ try modelContext.save()
+ dismiss()
+ } catch {
+ print("Failed to delete snippet: \(error)")
+ }
+ }
+ } label: {
+ Image(systemName: "trash")
+ .imageScale(.large)
+ }
+ .padding()
+ .buttonStyle(PlainButtonStyle())
+ }.padding()
+ }
+ if (showOriginal) {
+ HStack {
+ Spacer()
+ Image(nsImage: NSImage(data: snippet.image)!)
+ .resizable()
+ .clipped()
+ .cornerRadius(10)
+ .scaledToFit()
+ .frame(height: 100)
+ Spacer()
+ }.padding()
+ }
+ HStack {
+ Spacer()
+ LaTeXEquationView(equation: snippet.transcribedText!)
+ .clipped()
+ .scaledToFit()
+ .frame(height: 100)
+ Spacer()
+ }
+ GeometryReader { geometry in
+ HStack {
+ Button {
+ print("Should Copy")
+ } label: {
+ Image(systemName: "document.on.clipboard")
+ }
+ ScrollView(.horizontal) {
+ Text(snippet.transcribedText!)
+ .frame(height: 50)
+ .textSelection(.enabled)
+ }
+ .frame(width: geometry.size.width * 0.8)
+ .border(Color.red)
+
+ Spacer()
+ Button {
+ print("Should Copy")
+ } label: {
+ Image(systemName: "document.on.clipboard")
+ }
+ }
+ }
+ Spacer()
+ }
+ }
+
+ func updateRating(_ rating: Bool?) {
+ withAnimation {
+ self.snippet.rate(rating)
+ do {
+ try modelContext.save()
+ } catch {
+ print("Error saving rating: \(error)")
+ }
+ }
+ }
+}
+
+struct LaTeXEquationView: View {
+ var equation: String
+ var body: some View {
+ LaTeX(equation)
+ .parsingMode(.all)
+ .font(.system(size: 28, weight: .bold))
+ }
+}