Add "Follows You" to profile
Changelog-Added: Add "Follows You" indicator on profile
This commit is contained in:
@@ -142,6 +142,8 @@
|
|||||||
4CB883AE2976FA9300DC99E7 /* FormatTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883AD2976FA9300DC99E7 /* FormatTests.swift */; };
|
4CB883AE2976FA9300DC99E7 /* FormatTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883AD2976FA9300DC99E7 /* FormatTests.swift */; };
|
||||||
4CB883B0297705DD00DC99E7 /* ZapButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883AF297705DD00DC99E7 /* ZapButton.swift */; };
|
4CB883B0297705DD00DC99E7 /* ZapButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883AF297705DD00DC99E7 /* ZapButton.swift */; };
|
||||||
4CB883B6297730E400DC99E7 /* LNUrls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883B5297730E400DC99E7 /* LNUrls.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 */; };
|
4CBCA930297DB57F00EC6B2F /* WebsiteLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CBCA92F297DB57F00EC6B2F /* WebsiteLink.swift */; };
|
||||||
4CC7AAE7297EFA7B00430951 /* Zap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAE6297EFA7B00430951 /* Zap.swift */; };
|
4CC7AAE7297EFA7B00430951 /* Zap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAE6297EFA7B00430951 /* Zap.swift */; };
|
||||||
4CC7AAEB297F0AEC00430951 /* BuilderEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC7AAEA297F0AEC00430951 /* BuilderEventView.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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
4CC7AAEA297F0AEC00430951 /* BuilderEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuilderEventView.swift; sourceTree = "<group>"; };
|
||||||
@@ -640,6 +644,7 @@
|
|||||||
4C75EFA227FA576C0006080F /* Views */ = {
|
4C75EFA227FA576C0006080F /* Views */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
4CB9D4A52992D01900A9A7E4 /* Profile */,
|
||||||
4CAAD8AE29888A9B00060CEA /* Relays */,
|
4CAAD8AE29888A9B00060CEA /* Relays */,
|
||||||
4CF0ABF42985CD4200D66079 /* Posting */,
|
4CF0ABF42985CD4200D66079 /* Posting */,
|
||||||
4CF0ABDF2981A83000D66079 /* Muting */,
|
4CF0ABDF2981A83000D66079 /* Muting */,
|
||||||
@@ -779,6 +784,15 @@
|
|||||||
path = Reactions;
|
path = Reactions;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
4CB9D4A52992D01900A9A7E4 /* Profile */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */,
|
||||||
|
4CB9D4A82992D2F400A9A7E4 /* FollowsYou.swift */,
|
||||||
|
);
|
||||||
|
path = Profile;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
4CC7AAEE297F11B300430951 /* Events */ = {
|
4CC7AAEE297F11B300430951 /* Events */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -1242,6 +1256,7 @@
|
|||||||
4C3AC7A728369BA200E1F516 /* SearchHomeView.swift in Sources */,
|
4C3AC7A728369BA200E1F516 /* SearchHomeView.swift in Sources */,
|
||||||
4CB883B0297705DD00DC99E7 /* ZapButton.swift in Sources */,
|
4CB883B0297705DD00DC99E7 /* ZapButton.swift in Sources */,
|
||||||
4C363A922825FCF2006E126D /* ProfileUpdate.swift in Sources */,
|
4C363A922825FCF2006E126D /* ProfileUpdate.swift in Sources */,
|
||||||
|
4CB9D4A92992D2F400A9A7E4 /* FollowsYou.swift in Sources */,
|
||||||
4C3BEFDA281DCA1400B3DE84 /* LikeCounter.swift in Sources */,
|
4C3BEFDA281DCA1400B3DE84 /* LikeCounter.swift in Sources */,
|
||||||
4CB88389296AF99A00DC99E7 /* EventDetailBar.swift in Sources */,
|
4CB88389296AF99A00DC99E7 /* EventDetailBar.swift in Sources */,
|
||||||
4CF0ABDE2981A69500D66079 /* MutelistModel.swift in Sources */,
|
4CF0ABDE2981A69500D66079 /* MutelistModel.swift in Sources */,
|
||||||
@@ -1274,6 +1289,7 @@
|
|||||||
4C75EFBB2804A34C0006080F /* ProofOfWork.swift in Sources */,
|
4C75EFBB2804A34C0006080F /* ProofOfWork.swift in Sources */,
|
||||||
4C3AC7A52836987600E1F516 /* MainTabView.swift in Sources */,
|
4C3AC7A52836987600E1F516 /* MainTabView.swift in Sources */,
|
||||||
3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */,
|
3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */,
|
||||||
|
4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
34
damus/Views/Profile/FollowsYou.swift
Normal file
34
damus/Views/Profile/FollowsYou.swift
Normal file
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
61
damus/Views/Profile/ProfileNameView.swift
Normal file
61
damus/Views/Profile/ProfileNameView.swift
Normal file
@@ -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())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 {
|
struct EditButton: View {
|
||||||
let damus_state: DamusState
|
let damus_state: DamusState
|
||||||
|
|
||||||
@@ -243,6 +214,33 @@ struct ProfileView: View {
|
|||||||
return 0
|
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 {
|
func NameSection(profile_data: Profile?) -> some View {
|
||||||
return Group {
|
return Group {
|
||||||
HStack(alignment: .center) {
|
HStack(alignment: .center) {
|
||||||
@@ -256,35 +254,12 @@ struct ProfileView: View {
|
|||||||
|
|
||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
Group {
|
ActionSection(profile_data: profile_data)
|
||||||
ActionSheetButton
|
.offset(y: -15.0) // Increase if set a frame
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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(.bottom)
|
||||||
.padding(.top,-(pfp_size/2.0))
|
.padding(.top,-(pfp_size/2.0))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user