ui: add follow hashtag ui on search view
This commit is contained in:
@@ -11,32 +11,70 @@ struct SearchView: View {
|
||||
let appstate: DamusState
|
||||
@ObservedObject var search: SearchModel
|
||||
@Environment(\.dismiss) var dismiss
|
||||
|
||||
|
||||
let height: CGFloat = 250.0
|
||||
|
||||
var body: some View {
|
||||
TimelineView<AnyView>(events: search.events, loading: $search.loading, damus: appstate, show_friend_icon: true, filter: { _ in true })
|
||||
.navigationBarTitle(describe_search(search.search))
|
||||
.onReceive(handle_notify(.switched_timeline)) { obj in
|
||||
dismiss()
|
||||
}
|
||||
.onAppear() {
|
||||
search.subscribe()
|
||||
}
|
||||
.onDisappear() {
|
||||
search.unsubscribe()
|
||||
}
|
||||
.onReceive(handle_notify(.new_mutes)) { notif in
|
||||
search.filter_muted()
|
||||
TimelineView(events: search.events, loading: $search.loading, damus: appstate, show_friend_icon: true, filter: { _ in true }) {
|
||||
ZStack(alignment: .leading) {
|
||||
DamusBackground(maxHeight: height)
|
||||
.mask(LinearGradient(gradient: Gradient(colors: [.black, .black, .black, .clear]), startPoint: .top, endPoint: .bottom))
|
||||
SearchHeaderView(state: appstate, described: described_search)
|
||||
.padding(.leading, 30)
|
||||
.padding(.top, 100)
|
||||
}
|
||||
}
|
||||
.ignoresSafeArea()
|
||||
.onReceive(handle_notify(.switched_timeline)) { obj in
|
||||
dismiss()
|
||||
}
|
||||
.onAppear() {
|
||||
search.subscribe()
|
||||
}
|
||||
.onDisappear() {
|
||||
search.unsubscribe()
|
||||
}
|
||||
.onReceive(handle_notify(.new_mutes)) { notif in
|
||||
search.filter_muted()
|
||||
}
|
||||
}
|
||||
|
||||
var described_search: DescribedSearch {
|
||||
return describe_search(search.search)
|
||||
}
|
||||
}
|
||||
|
||||
func describe_search(_ filter: NostrFilter) -> String {
|
||||
if let hashtags = filter.hashtag {
|
||||
if hashtags.count >= 1 {
|
||||
return "#" + hashtags[0]
|
||||
enum DescribedSearch {
|
||||
case hashtag(String)
|
||||
case unknown
|
||||
|
||||
var is_hashtag: String? {
|
||||
switch self {
|
||||
case .hashtag(let ht):
|
||||
return ht
|
||||
case .unknown:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return "Search"
|
||||
|
||||
var description: String {
|
||||
switch self {
|
||||
case .hashtag(let s):
|
||||
return "#" + s
|
||||
case .unknown:
|
||||
return "Search"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func describe_search(_ filter: NostrFilter) -> DescribedSearch {
|
||||
if let hashtags = filter.hashtag {
|
||||
if hashtags.count >= 1 {
|
||||
return .hashtag(hashtags[0])
|
||||
}
|
||||
}
|
||||
|
||||
return .unknown
|
||||
}
|
||||
|
||||
struct SearchView_Previews: PreviewProvider {
|
||||
|
||||
Reference in New Issue
Block a user