-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMessageSearchView.swift
102 lines (87 loc) · 3.35 KB
/
MessageSearchView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
//
// MessageSearchView.swift
// SendbirdSwiftUI
//
// Copyright © 2024 Sendbird, Inc. All rights reserved.
//
import SwiftUI
import SendbirdChatSDK
/// A view that displays a MessageSearch
public struct MessageSearchView: View {
// MARK: - Properties
@Environment(\.dismiss)
private var dismiss
var configurations: [(SBUMessageSearchViewController) -> Void] = []
var provider: MessageSearchViewProvider
public init(provider: MessageSearchViewProvider) {
self.provider = provider // Default provider
}
public var body: some View {
SBUViewControllerSet.MessageSearchViewController
.swiftUI {
createViewController()
}
.injectData { viewController in
if self.shouldUpdateData(viewController: viewController) {
// Inject data into view model and load
viewController.viewModel?.initializeAndLoad(
channelURL: self.provider.channelURL,
params: self.provider.messageSearchQueryParams
)
}
}
.configure { viewController in
// viewController.dismissAction = {
// dismiss()
// }
// Used in SubViewBuilder
configurations.forEach { config in
config(viewController)
}
// Apply viewUpdateHandlers recursively
viewConverter.applyViewUpdates(to: viewController)
}
.switchUIKitNavigationBar()
.onDisappear {
if GlobalOptions.enableViewAdaptorAutoReset {
SBViewConverterSet.MessageSearch = MessageSearchViewConverter()
}
}
}
// MARK: - Methods
private func createViewController() -> SBUMessageSearchViewController {
let viewController = SBUViewControllerSet.MessageSearchViewController.init(
channelURL: self.provider.channelURL
)
self.provider.bind(viewController: viewController)
return viewController
}
private func shouldUpdateData(viewController: SBUMessageSearchViewController) -> Bool {
let shouldUpdateChannelURL = viewController.viewModel?.channelURL == "" && self.provider.channelURL != ""
let shouldUpdateMessageSearchQueryParams = viewController.viewModel?.messageSearchQuery == nil && self.provider.messageSearchQueryParams != nil
return shouldUpdateChannelURL || shouldUpdateMessageSearchQueryParams
}
}
// MARK: - Initializers
/// MessageSearchView initializers
public extension MessageSearchView {
// MARK: - typealias
// typealias ListContent = MessageSearchViewConverter.List
// TODO: public after beta
private init(
provider: MessageSearchViewProvider,
headerItem: (() -> MessageSearchType.HeaderItem)? = nil,
listItem: (() -> MessageSearchType.ListItem)? = nil
) {
self.provider = provider
if let headerItem { _ = headerItem() }
if let listItem { _ = listItem() }
// Apply view converter in viewConverterSet.
self.applyViewConverterSet()
}
}
#Preview {
NavigationView {
MessageSearchView(provider: MessageSearchViewProvider(channelURL: ""))
}
}