From 9dde163a3c0cd61b028f3d287b035ec102416ac4 Mon Sep 17 00:00:00 2001 From: Oleksandr Kozachuk Date: Sat, 5 Aug 2023 12:21:30 +0200 Subject: [PATCH] Temporary stuff. --- app/ChatMasterMind.xcodeproj/project.pbxproj | 11 +- .../xcshareddata/swiftpm/Package.resolved | 9 - .../UserInterfaceState.xcuserstate | Bin 37936 -> 49977 bytes app/ChatMasterMind/ChatData.swift | 20 +- app/ChatMasterMind/ContentView.swift | 185 +++++++++++++----- 5 files changed, 148 insertions(+), 77 deletions(-) diff --git a/app/ChatMasterMind.xcodeproj/project.pbxproj b/app/ChatMasterMind.xcodeproj/project.pbxproj index ab22070..7d2e974 100644 --- a/app/ChatMasterMind.xcodeproj/project.pbxproj +++ b/app/ChatMasterMind.xcodeproj/project.pbxproj @@ -231,7 +231,6 @@ ); mainGroup = 4F772AF82A4706F600D3266B; packageReferences = ( - 4F50EF3F2A49CA5E009BD94E /* XCRemoteSwiftPackageReference "Down" */, 4F50EF422A49CE31009BD94E /* XCRemoteSwiftPackageReference "MarkdownView" */, 4F50EF452A49D012009BD94E /* XCRemoteSwiftPackageReference "Highlightr" */, ); @@ -444,6 +443,7 @@ ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ChatMasterMind/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; @@ -485,6 +485,7 @@ ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ChatMasterMind/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES; @@ -644,14 +645,6 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 4F50EF3F2A49CA5E009BD94E /* XCRemoteSwiftPackageReference "Down" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/iwasrobbed/Down"; - requirement = { - branch = master; - kind = branch; - }; - }; 4F50EF422A49CE31009BD94E /* XCRemoteSwiftPackageReference "MarkdownView" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/LiYanan2004/MarkdownView.git"; diff --git a/app/ChatMasterMind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/app/ChatMasterMind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 083cf4f..29a051f 100644 --- a/app/ChatMasterMind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/app/ChatMasterMind.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,14 +1,5 @@ { "pins" : [ - { - "identity" : "down", - "kind" : "remoteSourceControl", - "location" : "https://github.com/iwasrobbed/Down", - "state" : { - "branch" : "master", - "revision" : "e754ab1c80920dd51a8e08290c912ac1c2ac8b58" - } - }, { "identity" : "highlightr", "kind" : "remoteSourceControl", diff --git a/app/ChatMasterMind.xcodeproj/project.xcworkspace/xcuserdata/ok.xcuserdatad/UserInterfaceState.xcuserstate b/app/ChatMasterMind.xcodeproj/project.xcworkspace/xcuserdata/ok.xcuserdatad/UserInterfaceState.xcuserstate index 5db0577d059240af7d0378df216152b95af6ff82..d6589910f6dfe7faebf0461219c90e7ba093ecc6 100644 GIT binary patch literal 49977 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 Void + let toggleAction: (Bool) -> Void + let dateFormatter: DateFormatter + + var body: some View { + VStack(alignment: .leading) { + GroupBox { + VStack(alignment: .leading) { + MarkdownView(text: chatPair.question) + Divider() + if let answer = chatPair.answer { + MarkdownView(text: answer) + } + } + } + .onTapGesture { + editAction() + } + .opacity(chatPair.disabled ? 0.5 : 1) + HStack { + Toggle("", isOn: Binding( + get: { !chatPair.disabled }, + set: { toggleAction($0) })) + .toggleStyle(CheckboxToggleStyle()) + .labelsHidden() + Text("\(chatPair.timestamp, formatter: dateFormatter)") + .foregroundColor(.secondary) + .font(.footnote) + } + } + .padding(.vertical) + } +} + +struct ChatPairEditor: View { + @Binding var chatPair: ChatPair? + @Binding var question: String + @Binding var answer: String + let saveAction: () -> Void + let cancelAction: () -> Void + + var body: some View { + VStack { + TextEditor(text: $question) + .overlay(RoundedRectangle(cornerRadius: 5).stroke(Color.gray)) + .frame(maxHeight: .infinity) + TextEditor(text: $answer) + .overlay(RoundedRectangle(cornerRadius: 5).stroke(Color.gray)) + .frame(maxHeight: .infinity) + HStack { + Button(action: cancelAction) { + Image(systemName: "xmark.circle.fill") + } + Button(action: saveAction) { + Image(systemName: "checkmark.circle.fill") + } + } + } + .padding() + } +} + struct ChatHistoryDetailView: View { @Environment(\.modelContext) private var modelContext - var chatHistory: ChatHistory + @State var chatHistory: ChatHistory @State private var newQuestion: String = "" @State private var pairToEdit: ChatPair? = nil @State private var newAnswer: String = "" @@ -65,59 +129,75 @@ struct ChatHistoryDetailView: View { var body: some View { VStack { List { - ForEach(chatHistory.chatPairs) { chatPair in - VStack(alignment: .leading) { - MarkdownView(text: chatPair.question) - if let answer = chatPair.answer { - MarkdownView(text: answer) - .tint(.secondary) - } - Button(action: { - pairToEdit = chatPair - newAnswer = chatPair.answer ?? "" - }) { - Text("Edit") - .foregroundColor(.blue) - } - } - Text("Timestamp: \(chatPair.timestamp)") - .foregroundColor(.secondary) - .font(.footnote) + ForEach(Array(chatHistory.chatPairs.enumerated()), id: \.element) { index, chatPair in + ChatPairView(chatPair: chatPair, + editAction: { + pairToEdit = chatPair + newQuestion = chatPair.question + newAnswer = chatPair.answer ?? "" + }, + toggleAction: { isEnabled in + chatPair.disabled = !isEnabled + saveContext() + }, + dateFormatter: itemFormatter) } + .onDelete(perform: deleteChatPair) + .onMove(perform: moveChatPair) } HStack { TextEditor(text: $newQuestion) - .frame(height: 100) + .frame(height: 50) .overlay(RoundedRectangle(cornerRadius: 5).stroke(Color.gray)) Button(action: { addChatPair() }) { - Text("Add") - } - Button(action: { - cancelEdit() - }) { - Text("Cancel") + Image(systemName: "plus.circle.fill") } } .padding() } .navigationTitle(chatHistory.name) .sheet(item: $pairToEdit) { pairToEdit in - VStack { - Text(pairToEdit.question) - TextEditor(text: $newAnswer) - .overlay(RoundedRectangle(cornerRadius: 5).stroke(Color.gray)) - .frame(maxHeight: .infinity) - Button(action: { - editChatPair(pairToEdit) - }) { - Text("Save") - } - } - .padding() + ChatPairEditor(chatPair: $pairToEdit, + question: $newQuestion, + answer: $newAnswer, + saveAction: { editChatPair(pairToEdit) }, + cancelAction: cancelEdit) } } + + private func saveContext() { + do { + try modelContext.save() + } catch { + print("Error saving model context: \(error)") + } + } + + private func deleteChatPair(at offsets: IndexSet) { + withAnimation { + offsets.forEach { index in + let chatPair = chatHistory.chatPairs[index] + modelContext.delete(chatPair) + } + saveContext() + } + } + + func moveChatPair(from source: IndexSet, to destination: Int) { + withAnimation { + chatHistory.moveChatPair(from: source, to: destination) + saveContext() + } + } + + private var itemFormatter: DateFormatter { + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .short + return formatter + } private func addChatPair() { guard !newQuestion.isEmpty else { return } @@ -125,34 +205,41 @@ struct ChatHistoryDetailView: View { let newPair = ChatPair(question: newQuestion) chatHistory.chatPairs.append(newPair) newQuestion = "" - do { - try modelContext.save() - } catch { - print("Error saving model context: \(error)") - } + saveContext() } } private func editChatPair(_ chatPair: ChatPair) { guard !newAnswer.isEmpty else { return } withAnimation { - chatHistory.editChatPair(withId: chatPair.id, question: nil, answer: newAnswer) + chatHistory.editChatPair(withId: chatPair.id, question: newQuestion, answer: newAnswer) newAnswer = "" pairToEdit = nil - do { - try modelContext.save() - } catch { - print("Error saving model context: \(error)") - } + saveContext() } } private func cancelEdit() { + newQuestion = "" newAnswer = "" pairToEdit = nil } } + + +struct CheckboxToggleStyle: ToggleStyle { + func makeBody(configuration: Configuration) -> some View { + HStack { + configuration.label + Spacer() + Image(systemName: configuration.isOn ? "eye" : "eye.slash") + .foregroundColor(configuration.isOn ? .blue : .gray) + .onTapGesture { configuration.isOn.toggle() } + } + } +} + #Preview { ContentView() .modelContainer(for: ChatHistory.self, inMemory: true)