94 lines
2.5 KiB
Swift
94 lines
2.5 KiB
Swift
//
|
|
// NotificationItemView.swift
|
|
// damus
|
|
//
|
|
// Created by William Casarin on 2023-02-21.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
enum ShowItem {
|
|
case show(NostrEvent?)
|
|
case dontshow(NostrEvent?)
|
|
}
|
|
|
|
func notification_item_event(events: EventCache, notif: NotificationItem) -> ShowItem {
|
|
switch notif {
|
|
case .repost(let evid, _):
|
|
return .dontshow(events.lookup(evid))
|
|
case .reply(let ev):
|
|
return .show(ev)
|
|
case .reaction(let evid, _):
|
|
return .dontshow(events.lookup(evid))
|
|
case .event_zap(let evid, _):
|
|
return .dontshow(events.lookup(evid))
|
|
case .profile_zap:
|
|
return .show(nil)
|
|
}
|
|
}
|
|
|
|
struct NotificationItemView: View {
|
|
let state: DamusState
|
|
let item: NotificationItem
|
|
|
|
var show_item: ShowItem {
|
|
notification_item_event(events: state.events, notif: item)
|
|
}
|
|
|
|
var options: EventViewOptions {
|
|
if state.settings.truncate_mention_text {
|
|
return [.wide, .truncate_content]
|
|
}
|
|
|
|
return [.wide]
|
|
}
|
|
|
|
func Item(_ ev: NostrEvent?) -> some View {
|
|
Group {
|
|
switch item {
|
|
case .repost(_, let evgrp):
|
|
EventGroupView(state: state, event: ev, group: .repost(evgrp))
|
|
|
|
case .event_zap(_, let zapgrp):
|
|
EventGroupView(state: state, event: ev, group: .zap(zapgrp))
|
|
|
|
case .profile_zap(let grp):
|
|
EventGroupView(state: state, event: nil, group: .profile_zap(grp))
|
|
|
|
case .reaction(_, let evgrp):
|
|
EventGroupView(state: state, event: ev, group: .reaction(evgrp))
|
|
|
|
case .reply(let ev):
|
|
NavigationLink(value: Route.Thread(thread: ThreadModel(event: ev, damus_state: state))) {
|
|
EventView(damus: state, event: ev, options: options)
|
|
}
|
|
.buttonStyle(.plain)
|
|
}
|
|
|
|
ThiccDivider()
|
|
}
|
|
}
|
|
|
|
var body: some View {
|
|
Group {
|
|
switch show_item {
|
|
case .show(let ev):
|
|
Item(ev)
|
|
|
|
case .dontshow(let ev):
|
|
if let ev {
|
|
Item(ev)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
let test_notification_item: NotificationItem = .repost(test_note.id, test_event_group)
|
|
|
|
struct NotificationItemView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
NotificationItemView(state: test_damus_state, item: test_notification_item)
|
|
}
|
|
}
|