|
1 | 1 | #if canImport(LiveTranslationSDK_iOS)
|
2 |
| -import LiveTranslationSDK_iOS |
3 |
| -import SwiftUI |
| 2 | + import LiveTranslationSDK_iOS |
| 3 | + import SwiftUI |
4 | 4 |
|
5 |
| -public struct LiveTranslationView: View { |
6 |
| - let viewModel: ViewModel |
7 |
| - @State var isSelectedLanguageSheet: Bool = false |
| 5 | + public struct LiveTranslationView: View { |
| 6 | + let viewModel: ViewModel |
| 7 | + @State var isSelectedLanguageSheet: Bool = false |
8 | 8 |
|
9 |
| - public init( |
10 |
| - roomNumber: String = ProcessInfo.processInfo.environment["LIVE_TRANSLATION_KEY"] |
11 |
| - ?? (Bundle.main.infoDictionary?["Live translation room number"] as? String) ?? "" |
12 |
| - ) { |
13 |
| - print(roomNumber) |
14 |
| - self.viewModel = ViewModel(roomNumber: roomNumber) |
15 |
| - } |
| 9 | + public init( |
| 10 | + roomNumber: String = ProcessInfo.processInfo.environment["LIVE_TRANSLATION_KEY"] |
| 11 | + ?? (Bundle.main.infoDictionary?["Live translation room number"] as? String) ?? "" |
| 12 | + ) { |
| 13 | + print(roomNumber) |
| 14 | + self.viewModel = ViewModel(roomNumber: roomNumber) |
| 15 | + } |
16 | 16 |
|
17 |
| - public var body: some View { |
18 |
| - NavigationStack { |
19 |
| - VStack { |
20 |
| - ScrollView { |
21 |
| - if self.viewModel.roomNumber.isEmpty { |
22 |
| - ContentUnavailableView("Room is unavailable", systemImage: "text.page.slash.fill") |
23 |
| - Spacer() |
24 |
| - } else if viewModel.chatList.isEmpty { |
25 |
| - ContentUnavailableView("Not started yet", systemImage: "text.page.slash.fill") |
26 |
| - Spacer() |
27 |
| - } else { |
28 |
| - LazyVStack { |
29 |
| - ForEach(viewModel.chatList) { item in |
30 |
| - Text(item.trItem?.content ?? item.item.text) |
31 |
| - .frame(maxWidth: .infinity, alignment: .leading) |
32 |
| - .multilineTextAlignment(.leading) |
33 |
| - .padding() |
| 17 | + public var body: some View { |
| 18 | + NavigationStack { |
| 19 | + VStack { |
| 20 | + ScrollView { |
| 21 | + if self.viewModel.roomNumber.isEmpty { |
| 22 | + ContentUnavailableView("Room is unavailable", systemImage: "text.page.slash.fill") |
| 23 | + Spacer() |
| 24 | + } else if viewModel.chatList.isEmpty { |
| 25 | + ContentUnavailableView("Not started yet", systemImage: "text.page.slash.fill") |
| 26 | + Spacer() |
| 27 | + } else { |
| 28 | + LazyVStack { |
| 29 | + ForEach(viewModel.chatList) { item in |
| 30 | + Text(item.trItem?.content ?? item.item.text) |
| 31 | + .frame(maxWidth: .infinity, alignment: .leading) |
| 32 | + .multilineTextAlignment(.leading) |
| 33 | + .padding() |
| 34 | + } |
34 | 35 | }
|
35 | 36 | }
|
36 |
| - } |
37 |
| - HStack { |
38 |
| - Spacer() |
39 |
| - Text("Powered by", bundle: .module) |
40 |
| - .font(.caption) |
41 |
| - .foregroundStyle(Color(.secondaryLabel)) |
42 |
| - Image(.flitto) |
43 |
| - .resizable() |
44 |
| - .aspectRatio(contentMode: .fit) |
45 |
| - .frame(maxHeight: 30) |
46 |
| - Spacer() |
| 37 | + HStack { |
| 38 | + Spacer() |
| 39 | + Text("Powered by", bundle: .module) |
| 40 | + .font(.caption) |
| 41 | + .foregroundStyle(Color(.secondaryLabel)) |
| 42 | + Image(.flitto) |
| 43 | + .resizable() |
| 44 | + .aspectRatio(contentMode: .fit) |
| 45 | + .frame(maxHeight: 30) |
| 46 | + Spacer() |
| 47 | + } |
47 | 48 | }
|
48 | 49 | }
|
49 |
| - } |
50 |
| - .task { |
51 |
| - viewModel.send(.onAppearedPage) |
52 |
| - viewModel.send(.connectChatStream) |
53 |
| - } |
54 |
| - .navigationTitle(Text("Live translation", bundle: .module)) |
55 |
| - .toolbar { |
56 |
| - ToolbarItem(placement: .navigationBarTrailing) { |
57 |
| - Button { |
58 |
| - isSelectedLanguageSheet.toggle() |
59 |
| - } label: { |
60 |
| - let selectedLanguage = |
61 |
| - viewModel.langSet?.langCodingKey(viewModel.selectedLangCode) ?? "" |
62 |
| - Text(selectedLanguage) |
63 |
| - Image(systemName: "globe") |
64 |
| - } |
65 |
| - .sheet(isPresented: $isSelectedLanguageSheet) { |
66 |
| - SelectLanguageSheet( |
67 |
| - languageList: viewModel.langList, |
68 |
| - langSet: viewModel.langSet, |
69 |
| - selectedLanguageAction: { langCode in |
70 |
| - viewModel.send(.changeLangCode(langCode)) |
71 |
| - isSelectedLanguageSheet = false |
72 |
| - } |
73 |
| - ) |
74 |
| - .presentationDetents([.medium, .large]) |
| 50 | + .task { |
| 51 | + viewModel.send(.onAppearedPage) |
| 52 | + viewModel.send(.connectChatStream) |
| 53 | + } |
| 54 | + .navigationTitle(Text("Live translation", bundle: .module)) |
| 55 | + .toolbar { |
| 56 | + ToolbarItem(placement: .navigationBarTrailing) { |
| 57 | + Button { |
| 58 | + isSelectedLanguageSheet.toggle() |
| 59 | + } label: { |
| 60 | + let selectedLanguage = |
| 61 | + viewModel.langSet?.langCodingKey(viewModel.selectedLangCode) ?? "" |
| 62 | + Text(selectedLanguage) |
| 63 | + Image(systemName: "globe") |
| 64 | + } |
| 65 | + .sheet(isPresented: $isSelectedLanguageSheet) { |
| 66 | + SelectLanguageSheet( |
| 67 | + languageList: viewModel.langList, |
| 68 | + langSet: viewModel.langSet, |
| 69 | + selectedLanguageAction: { langCode in |
| 70 | + viewModel.send(.changeLangCode(langCode)) |
| 71 | + isSelectedLanguageSheet = false |
| 72 | + } |
| 73 | + ) |
| 74 | + .presentationDetents([.medium, .large]) |
| 75 | + } |
75 | 76 | }
|
76 | 77 | }
|
77 | 78 | }
|
78 | 79 | }
|
79 | 80 | }
|
80 |
| -} |
81 | 81 |
|
82 |
| -#Preview { |
83 |
| - LiveTranslationView(roomNumber: "490294") |
84 |
| -} |
| 82 | + #Preview { |
| 83 | + LiveTranslationView(roomNumber: "490294") |
| 84 | + } |
85 | 85 | #endif
|
0 commit comments