ui: add follow hashtag ui on search view

This commit is contained in:
William Casarin
2023-07-13 07:05:53 -07:00
parent bebaffd247
commit 17df2972d9
3 changed files with 203 additions and 19 deletions

View File

@@ -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 {