Skip to content

Commit ef7aa3d

Browse files
committed
refactor
1 parent a9791d6 commit ef7aa3d

File tree

5 files changed

+57
-29
lines changed

5 files changed

+57
-29
lines changed

Examples/Sources/ChatbotExample/ChatbotApp.swift

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,16 @@ import SwiftCrossUI
1010
@main
1111
@HotReloadable
1212
struct ChatbotApp: App {
13-
@State private var viewModel = ChatbotViewModel()
13+
@SwiftCrossUI.State private var viewModel = ChatbotViewModel()
1414

1515
var body: some Scene {
1616
WindowGroup("ChatBot") {
1717
#hotReloadable {
1818
NavigationSplitView {
1919
// Sidebar content
2020
ThreadSidebarView(
21-
threads: Binding(
22-
get: { viewModel.threads },
23-
set: { viewModel.threads = $0 }
24-
),
25-
selectedThread: Binding(
26-
get: { viewModel.selectedThread },
27-
set: { viewModel.selectedThread = $0 }
28-
),
21+
threads: viewModel.threadsBinding,
22+
selectedThread: viewModel.selectedThreadBinding,
2923
onNewThread: viewModel.createNewThread,
3024
onSelectThread: viewModel.selectThread,
3125
onDeleteThread: viewModel.deleteThread
@@ -38,14 +32,8 @@ struct ChatbotApp: App {
3832
// Settings Overlay
3933
if viewModel.showSettings {
4034
ChatSettingsDialog(
41-
isPresented: Binding(
42-
get: { viewModel.showSettings },
43-
set: { viewModel.showSettings = $0 }
44-
),
45-
selectedModel: Binding(
46-
get: { viewModel.selectedLLM },
47-
set: { viewModel.selectedLLM = $0 }
48-
),
35+
isPresented: viewModel.showSettingsBinding,
36+
selectedModel: viewModel.selectedLLMBinding,
4937
openAIService: viewModel.openAIService,
5038
apiKeyStorage: viewModel.apiKeyStorage,
5139
onSave: viewModel.reloadAPIKey

Examples/Sources/ChatbotExample/ViewModels/ChatbotViewModel.swift

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,49 @@ class ChatbotViewModel: SwiftCrossUI.ObservableObject {
189189
}
190190
}
191191
}
192+
193+
// MARK: - Binding Extensions
194+
195+
extension ChatbotViewModel {
196+
var threadsBinding: Binding<[ChatThread]> {
197+
Binding(
198+
get: { self.threads },
199+
set: { self.threads = $0 }
200+
)
201+
}
202+
203+
var selectedThreadBinding: Binding<ChatThread?> {
204+
Binding(
205+
get: { self.selectedThread },
206+
set: { self.selectedThread = $0 }
207+
)
208+
}
209+
210+
var currentMessageBinding: Binding<String> {
211+
Binding(
212+
get: { self.currentMessage },
213+
set: { self.currentMessage = $0 }
214+
)
215+
}
216+
217+
var errorMessageBinding: Binding<String?> {
218+
Binding(
219+
get: { self.errorMessage },
220+
set: { self.errorMessage = $0 }
221+
)
222+
}
223+
224+
var showSettingsBinding: Binding<Bool> {
225+
Binding(
226+
get: { self.showSettings },
227+
set: { self.showSettings = $0 }
228+
)
229+
}
230+
231+
var selectedLLMBinding: Binding<LLM> {
232+
Binding(
233+
get: { self.selectedLLM },
234+
set: { self.selectedLLM = $0 }
235+
)
236+
}
237+
}

Examples/Sources/ChatbotExample/Views/ChatSettingsDialog.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ struct ModelInfo: Identifiable, Equatable {
1919
struct ChatSettingsDialog: View {
2020
@Binding var isPresented: Bool
2121
@Binding var selectedModel: LLM
22-
@State private var model: ChatSettingsViewModel
22+
@SwiftCrossUI.State private var model: ChatSettingsViewModel
2323

2424
let onSave: () -> Void
2525

Examples/Sources/ChatbotExample/Views/LLMSelectionView.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ extension Array {
1515

1616
struct LLMSelectionView: View {
1717
@Binding var selectedModel: LLM
18-
@State private var availableModels: [LLM] = [.gpt4_o, .gpt4_o_mini, .gpt4_turbo, .gpt4, .gpt3_5Turbo]
19-
@State private var isLoading = false
20-
@State private var errorMessage: String?
18+
@SwiftCrossUI.State private var availableModels: [LLM] = [.gpt4_o, .gpt4_o_mini, .gpt4_turbo, .gpt4, .gpt3_5Turbo]
19+
@SwiftCrossUI.State private var isLoading = false
20+
@SwiftCrossUI.State private var errorMessage: String?
2121

2222
let openAIService: OpenAIService
2323

Examples/Sources/ChatbotExample/Views/MainChatView.swift

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,8 @@ struct MainChatView: View {
3030
// Input area
3131
if viewModel.isThreadSelected {
3232
ChatInputView(
33-
currentMessage: Binding(
34-
get: { viewModel.currentMessage },
35-
set: { viewModel.currentMessage = $0 }
36-
),
37-
errorMessage: Binding(
38-
get: { viewModel.errorMessage },
39-
set: { viewModel.errorMessage = $0 }
40-
),
33+
currentMessage: viewModel.currentMessageBinding,
34+
errorMessage: viewModel.errorMessageBinding,
4135
isLoading: viewModel.isLoading,
4236
messageCount: viewModel.currentThreadMessages.count,
4337
onSend: viewModel.sendMessage

0 commit comments

Comments
 (0)