commit cbdff4a5f86e193495a01a8caa2af5280e12aeaa
parent 866afe970b49ce1638dead4850cd2abf5821524f
Author: Swift Coder <scoder1747@gmail.com>
Date: Sat, 7 Dec 2024 22:04:45 -0500
Add profile info text in stretchable banner with follow button
Changelog-Added: Add profile info text in stretchable banner with follow button
Signed-off-by: Swift Coder <scoder1747@gmail.com>
Diffstat:
1 file changed, 48 insertions(+), 8 deletions(-)
diff --git a/damus/Views/Profile/ProfileView.swift b/damus/Views/Profile/ProfileView.swift
@@ -51,13 +51,17 @@ func followedByString(_ friend_intersection: [Pubkey], ndb: Ndb, locale: Locale
struct VisualEffectView: UIViewRepresentable {
var effect: UIVisualEffect?
+ var darkeningOpacity: CGFloat = 0.3 // degree of darkening
func makeUIView(context: UIViewRepresentableContext<Self>) -> UIVisualEffectView {
- UIVisualEffectView()
+ let effectView = UIVisualEffectView()
+ effectView.backgroundColor = UIColor.black.withAlphaComponent(darkeningOpacity)
+ return effectView
}
func updateUIView(_ uiView: UIVisualEffectView, context: UIViewRepresentableContext<Self>) {
uiView.effect = effect
+ uiView.backgroundColor = UIColor.black.withAlphaComponent(darkeningOpacity)
}
}
@@ -103,6 +107,18 @@ struct ProfileView: View {
return Double(-yOffset > navbarHeight ? progress : 0)
}
+ func getProfileInfo() -> (String, String) {
+ let profile_txn = self.damus_state.profiles.lookup(id: profile.pubkey)
+ let ndbprofile = profile_txn?.unsafeUnownedValue
+ let displayName = Profile.displayName(profile: ndbprofile, pubkey: profile.pubkey).displayName.truncate(maxLength: 25)
+ let userName = Profile.displayName(profile: ndbprofile, pubkey: profile.pubkey).username.truncate(maxLength: 25)
+ return (displayName, "@\(userName)")
+ }
+
+ func showFollowBtnInBlurrBanner() -> Bool {
+ damus_state.contacts.follow_state(profile.pubkey) == .unfollows && bannerBlurViewOpacity() > 1.0
+ }
+
func content_filter(_ fstate: FilterState) -> ((NostrEvent) -> Bool) {
var filters = ContentFilters.defaults(damus_state: damus_state)
filters.append(fstate.filter)
@@ -450,14 +466,38 @@ struct ProfileView: View {
.navigationBarBackButtonHidden()
.toolbar {
ToolbarItem(placement: .topBarLeading) {
- navBackButton
- .padding(.top, 5)
- .accentColor(DamusColors.white)
+ HStack(spacing: 8) {
+ navBackButton
+ .padding(.top, 5)
+ .accentColor(DamusColors.white)
+ VStack(alignment: .leading, spacing: -4.5) {
+ Text(getProfileInfo().0) // Display name
+ .font(.headline)
+ .foregroundColor(.white)
+ Text(getProfileInfo().1) // Username
+ .font(.subheadline)
+ .foregroundColor(.white.opacity(0.8))
+ }
+ .opacity(bannerBlurViewOpacity())
+ .frame(maxWidth: .infinity, alignment: .leading)
+ .padding(.top, max(5, 15 + (yOffset / 30)))
+ }
}
- ToolbarItem(placement: .topBarTrailing) {
- navActionSheetButton
- .padding(.top, 5)
- .accentColor(DamusColors.white)
+ if showFollowBtnInBlurrBanner() {
+ ToolbarItem(placement: .topBarTrailing) {
+ FollowButtonView(
+ target: profile.get_follow_target(),
+ follows_you: profile.follows(pubkey: damus_state.pubkey),
+ follow_state: damus_state.contacts.follow_state(profile.pubkey)
+ )
+ .padding(.top, 8)
+ }
+ } else {
+ ToolbarItem(placement: .topBarTrailing) {
+ navActionSheetButton
+ .padding(.top, 5)
+ .accentColor(DamusColors.white)
+ }
}
}
.toolbarBackground(.hidden)