damus

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

GradientFollowButton.swift (2671B)


      1 //
      2 //  GradientFollowButton.swift
      3 //  damus
      4 //
      5 //  Created by klabo on 7/18/23.
      6 //
      7 
      8 import SwiftUI
      9 
     10 struct GradientFollowButton: View {
     11 
     12     let target: FollowTarget
     13     let follows_you: Bool
     14 
     15     @State var follow_state: FollowState
     16 
     17     private let grayTextColor = Color(#colorLiteral(red: 0.1450980392, green: 0.1607843137, blue: 0.1764705882, alpha: 1))
     18     private let grayBorder = Color(#colorLiteral(red: 0.8666666667, green: 0.8823529412, blue: 0.8901960784, alpha: 1))
     19 
     20     var body: some View {
     21 
     22         Button(action: {
     23             follow_state = perform_follow_btn_action(follow_state, target: target)
     24         }) {
     25             let followButtonText = follow_btn_txt(follow_state, follows_you: follows_you)
     26             Text(followButtonText)
     27                     .foregroundColor(follow_state == .unfollows ? .white : grayTextColor)
     28                     .font(.callout)
     29                     .fontWeight(.medium)
     30                     .padding([.top, .bottom], 10)
     31                     .padding([.leading, .trailing], 12)
     32                     .background(follow_state == .unfollows ? PinkGradient : GrayGradient)
     33                     .cornerRadius(12)
     34                     .overlay(
     35                         RoundedRectangle(cornerRadius: 12)
     36                             .stroke(grayBorder, lineWidth: follow_state == .unfollows ? 0 : 1)
     37                     )
     38         }
     39         .onReceive(handle_notify(.followed)) { ref in
     40             guard target.follow_ref == ref else { return }
     41             self.follow_state = .follows
     42         }
     43         .onReceive(handle_notify(.unfollowed)) { ref in
     44             guard target.follow_ref == ref else { return }
     45             self.follow_state = .unfollows
     46         }
     47     }
     48 }
     49 
     50 struct GradientFollowButtonPreviews: View {
     51     let target: FollowTarget = .pubkey(.empty)
     52     var body: some View {
     53         VStack {
     54             Text(verbatim: "Unfollows")
     55             GradientFollowButton(target: target, follows_you: false, follow_state: .unfollows)
     56 
     57             Text(verbatim: "Following")
     58             GradientFollowButton(target: target, follows_you: false, follow_state: .following)
     59 
     60             Text(verbatim: "Follows")
     61             GradientFollowButton(target: target, follows_you: false, follow_state: .follows)
     62 
     63             Text(verbatim: "Follows")
     64             GradientFollowButton(target: target, follows_you: true, follow_state: .follows)
     65 
     66             Text(verbatim: "Unfollowing")
     67             GradientFollowButton(target: target, follows_you: false, follow_state: .unfollowing)
     68         }
     69     }
     70 }
     71 
     72 struct GradientButton_Previews: PreviewProvider {
     73     static var previews: some View {
     74         GradientFollowButtonPreviews()
     75     }
     76 }