damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit 3c629621eb393a6e14945ee131fb1e92667f48ed
parent 09f12845c0b9ad39f67820327a1884ef71d50717
Author: William Casarin <jb55@jb55.com>
Date:   Tue,  7 Feb 2023 10:51:08 -0800

Add "Follows You" to profile

Changelog-Added: Add "Follows You" indicator on profile

Diffstat:
Mdamus.xcodeproj/project.pbxproj | 16++++++++++++++++
Adamus/Views/Profile/FollowsYou.swift | 34++++++++++++++++++++++++++++++++++
Adamus/Views/Profile/ProfileNameView.swift | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mdamus/Views/ProfileView.swift | 87++++++++++++++++++++++++++++---------------------------------------------------
4 files changed, 142 insertions(+), 56 deletions(-)

diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj @@ -142,6 +142,8 @@ 4CB883AE2976FA9300DC99E7 /* FormatTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883AD2976FA9300DC99E7 /* FormatTests.swift */; }; 4CB883B0297705DD00DC99E7 /* ZapButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883AF297705DD00DC99E7 /* ZapButton.swift */; }; 4CB883B6297730E400DC99E7 /* LNUrls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883B5297730E400DC99E7 /* LNUrls.swift */; }; + 4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */; }; + 4CB9D4A92992D2F400A9A7E4 /* FollowsYou.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB9D4A82992D2F400A9A7E4 /* FollowsYou.swift */; }; 4CBCA930297DB57F00EC6B2F /* WebsiteLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CBCA92F297DB57F00EC6B2F /* WebsiteLink.swift */; }; 4CC7AAE7297EFA7B00430951 /* Zap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAE6297EFA7B00430951 /* Zap.swift */; }; 4CC7AAEB297F0AEC00430951 /* BuilderEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAEA297F0AEC00430951 /* BuilderEventView.swift */; }; @@ -425,6 +427,8 @@ 4CB883AD2976FA9300DC99E7 /* FormatTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormatTests.swift; sourceTree = "<group>"; }; 4CB883AF297705DD00DC99E7 /* ZapButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapButton.swift; sourceTree = "<group>"; }; 4CB883B5297730E400DC99E7 /* LNUrls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LNUrls.swift; sourceTree = "<group>"; }; + 4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileNameView.swift; sourceTree = "<group>"; }; + 4CB9D4A82992D2F400A9A7E4 /* FollowsYou.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowsYou.swift; sourceTree = "<group>"; }; 4CBCA92F297DB57F00EC6B2F /* WebsiteLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebsiteLink.swift; sourceTree = "<group>"; }; 4CC7AAE6297EFA7B00430951 /* Zap.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Zap.swift; sourceTree = "<group>"; }; 4CC7AAEA297F0AEC00430951 /* BuilderEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuilderEventView.swift; sourceTree = "<group>"; }; @@ -640,6 +644,7 @@ 4C75EFA227FA576C0006080F /* Views */ = { isa = PBXGroup; children = ( + 4CB9D4A52992D01900A9A7E4 /* Profile */, 4CAAD8AE29888A9B00060CEA /* Relays */, 4CF0ABF42985CD4200D66079 /* Posting */, 4CF0ABDF2981A83000D66079 /* Muting */, @@ -779,6 +784,15 @@ path = Reactions; sourceTree = "<group>"; }; + 4CB9D4A52992D01900A9A7E4 /* Profile */ = { + isa = PBXGroup; + children = ( + 4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */, + 4CB9D4A82992D2F400A9A7E4 /* FollowsYou.swift */, + ); + path = Profile; + sourceTree = "<group>"; + }; 4CC7AAEE297F11B300430951 /* Events */ = { isa = PBXGroup; children = ( @@ -1242,6 +1256,7 @@ 4C3AC7A728369BA200E1F516 /* SearchHomeView.swift in Sources */, 4CB883B0297705DD00DC99E7 /* ZapButton.swift in Sources */, 4C363A922825FCF2006E126D /* ProfileUpdate.swift in Sources */, + 4CB9D4A92992D2F400A9A7E4 /* FollowsYou.swift in Sources */, 4C3BEFDA281DCA1400B3DE84 /* LikeCounter.swift in Sources */, 4CB88389296AF99A00DC99E7 /* EventDetailBar.swift in Sources */, 4CF0ABDE2981A69500D66079 /* MutelistModel.swift in Sources */, @@ -1274,6 +1289,7 @@ 4C75EFBB2804A34C0006080F /* ProofOfWork.swift in Sources */, 4C3AC7A52836987600E1F516 /* MainTabView.swift in Sources */, 3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */, + 4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/damus/Views/Profile/FollowsYou.swift b/damus/Views/Profile/FollowsYou.swift @@ -0,0 +1,34 @@ +// +// FollowsYou.swift +// damus +// +// Created by William Casarin on 2023-02-07. +// + +import SwiftUI + +struct FollowsYou: View { + @Environment(\.colorScheme) var colorScheme + + var fill_color: Color { + colorScheme == .light ? Color("DamusLightGrey") : Color("DamusDarkGrey") + } + + var body: some View { + Text("Follows you") + .padding([.leading, .trailing], 6.0) + .padding([.top, .bottom], 2.0) + .foregroundColor(.gray) + .background { + RoundedRectangle(cornerRadius: 5.0) + .foregroundColor(fill_color) + } + .font(.footnote) + } +} + +struct FollowsYou_Previews: PreviewProvider { + static var previews: some View { + FollowsYou() + } +} diff --git a/damus/Views/Profile/ProfileNameView.swift b/damus/Views/Profile/ProfileNameView.swift @@ -0,0 +1,61 @@ +// +// ProfileNameView.swift +// damus +// +// Created by William Casarin on 2023-02-07. +// + +import SwiftUI + +struct ProfileNameView: View { + let pubkey: String + let profile: Profile? + let follows_you: Bool + let damus: DamusState + + var spacing: CGFloat { 10.0 } + + var body: some View { + Group { + if let real_name = profile?.display_name { + VStack(alignment: .leading) { + Text(real_name) + .font(.title3.weight(.bold)) + HStack(alignment: .center, spacing: spacing) { + ProfileName(pubkey: pubkey, profile: profile, prefix: "@", damus: damus, show_friend_confirmed: true) + .font(.callout) + .foregroundColor(.gray) + + if follows_you { + FollowsYou() + } + } + KeyView(pubkey: pubkey) + .pubkey_context_menu(bech32_pubkey: pubkey) + } + } else { + VStack(alignment: .leading) { + HStack(alignment: .center, spacing: spacing) { + ProfileName(pubkey: pubkey, profile: profile, damus: damus, show_friend_confirmed: true) + .font(.title3.weight(.bold)) + if follows_you { + FollowsYou() + } + } + KeyView(pubkey: pubkey) + .pubkey_context_menu(bech32_pubkey: pubkey) + } + } + } + } +} + +struct ProfileNameView_Previews: PreviewProvider { + static var previews: some View { + VStack { + ProfileNameView(pubkey: test_event.pubkey, profile: nil, follows_you: true, damus: test_damus_state()) + + ProfileNameView(pubkey: test_event.pubkey, profile: nil, follows_you: false, damus: test_damus_state()) + } + } +} diff --git a/damus/Views/ProfileView.swift b/damus/Views/ProfileView.swift @@ -49,35 +49,6 @@ func follow_btn_enabled_state(_ fs: FollowState) -> Bool { } } -struct ProfileNameView: View { - let pubkey: String - let profile: Profile? - let damus: DamusState - - var body: some View { - Group { - if let real_name = profile?.display_name { - VStack(alignment: .leading) { - Text(real_name) - .font(.title3.weight(.bold)) - ProfileName(pubkey: pubkey, profile: profile, prefix: "@", damus: damus, show_friend_confirmed: true) - .font(.callout) - .foregroundColor(.gray) - KeyView(pubkey: pubkey) - .pubkey_context_menu(bech32_pubkey: pubkey) - } - } else { - VStack(alignment: .leading) { - ProfileName(pubkey: pubkey, profile: profile, damus: damus, show_friend_confirmed: true) - .font(.title3.weight(.bold)) - KeyView(pubkey: pubkey) - .pubkey_context_menu(bech32_pubkey: pubkey) - } - } - } - } -} - struct EditButton: View { let damus_state: DamusState @@ -243,6 +214,33 @@ struct ProfileView: View { return 0 } + func ActionSection(profile_data: Profile?) -> some View { + return Group { + ActionSheetButton + + if let profile = profile_data { + if let lnurl = profile.lnurl, lnurl != "" { + LNButton(lnurl: lnurl, profile: profile) + } + } + + DMButton + + if profile.pubkey != damus_state.pubkey { + FollowButtonView( + target: profile.get_follow_target(), + follows_you: profile.follows(pubkey: damus_state.pubkey), + follow_state: damus_state.contacts.follow_state(profile.pubkey) + ) + } else if damus_state.keypair.privkey != nil { + NavigationLink(destination: EditMetadataView(damus_state: damus_state)) { + EditButton(damus_state: damus_state) + } + } + + } + } + func NameSection(profile_data: Profile?) -> some View { return Group { HStack(alignment: .center) { @@ -256,35 +254,12 @@ struct ProfileView: View { Spacer() - Group { - ActionSheetButton - - if let profile = profile_data { - if let lnurl = profile.lnurl, lnurl != "" { - LNButton(lnurl: lnurl, profile: profile) - } - } - - DMButton - - if profile.pubkey != damus_state.pubkey { - FollowButtonView( - target: profile.get_follow_target(), - follows_you: profile.follows(pubkey: damus_state.pubkey), - follow_state: damus_state.contacts.follow_state(profile.pubkey) - ) - } else if damus_state.keypair.privkey != nil { - NavigationLink(destination: EditMetadataView(damus_state: damus_state)) { - EditButton(damus_state: damus_state) - } - } - - } - .offset(y: -15.0) // Increase if set a frame - + ActionSection(profile_data: profile_data) + .offset(y: -15.0) // Increase if set a frame } - ProfileNameView(pubkey: profile.pubkey, profile: profile_data, damus: damus_state) + let follows_you = profile.follows(pubkey: damus_state.pubkey) + ProfileNameView(pubkey: profile.pubkey, profile: profile_data, follows_you: follows_you, damus: damus_state) //.padding(.bottom) .padding(.top,-(pfp_size/2.0)) }