한정판 콘텐츠 상세
- 해당 콘텐츠를 업로드 한 크리에이터가 콘텐츠 구매자를 볼 수 있는 UI
This commit is contained in:
		@@ -6,64 +6,96 @@
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
import SwiftUI
 | 
			
		||||
import Kingfisher
 | 
			
		||||
 | 
			
		||||
struct ContentDetailInfoLimitedEditionView: View {
 | 
			
		||||
    
 | 
			
		||||
    let totalContentCount: Int
 | 
			
		||||
    let remainingContentCount: Int
 | 
			
		||||
    let orderSequence: Int?
 | 
			
		||||
    let buyerList: [ContentBuyer]
 | 
			
		||||
    
 | 
			
		||||
    var body: some View {
 | 
			
		||||
        HStack(spacing: 0) {
 | 
			
		||||
            Text("한정판")
 | 
			
		||||
                .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
			
		||||
                .foregroundColor(Color.button)
 | 
			
		||||
            
 | 
			
		||||
            Spacer()
 | 
			
		||||
            
 | 
			
		||||
            if let orderSequence = orderSequence {
 | 
			
		||||
                Text("\(orderSequence)")
 | 
			
		||||
                    .font(.custom(Font.bold.rawValue, size: 13.3))
 | 
			
		||||
                    .foregroundColor(Color.button)
 | 
			
		||||
                    .padding(.leading, 5.3)
 | 
			
		||||
                
 | 
			
		||||
                Text("/")
 | 
			
		||||
                    .font(.custom(Font.bold.rawValue, size: 13.3))
 | 
			
		||||
                    .foregroundColor(Color.grayd2)
 | 
			
		||||
                    .padding(.leading, 2.3)
 | 
			
		||||
                
 | 
			
		||||
                Text("\(totalContentCount)")
 | 
			
		||||
        VStack(alignment: .leading, spacing: 13.3) {
 | 
			
		||||
            HStack(spacing: 0) {
 | 
			
		||||
                Text("한정판")
 | 
			
		||||
                    .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
			
		||||
                    .foregroundColor(Color.grayd2)
 | 
			
		||||
                    .padding(.leading, 2.3)
 | 
			
		||||
            } else if (remainingContentCount <= 0) {
 | 
			
		||||
                Text("Sold Out")
 | 
			
		||||
                    .font(.custom(Font.medium.rawValue, size: 12))
 | 
			
		||||
                    .foregroundColor(Color.grayd2)
 | 
			
		||||
                    .padding(.horizontal, 5.3)
 | 
			
		||||
                    .padding(.vertical, 3.3)
 | 
			
		||||
                    .overlay(
 | 
			
		||||
                        RoundedRectangle(cornerRadius: 2.6)
 | 
			
		||||
                            .stroke(lineWidth: 1)
 | 
			
		||||
                            .foregroundColor(Color.grayd2)
 | 
			
		||||
                    )
 | 
			
		||||
            } else {
 | 
			
		||||
                Text("잔여수량")
 | 
			
		||||
                    .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
			
		||||
                    .foregroundColor(Color.grayd2)
 | 
			
		||||
                
 | 
			
		||||
                Text("\(remainingContentCount)")
 | 
			
		||||
                    .font(.custom(Font.bold.rawValue, size: 13.3))
 | 
			
		||||
                    .foregroundColor(Color.button)
 | 
			
		||||
                    .padding(.leading, 5.3)
 | 
			
		||||
                
 | 
			
		||||
                Spacer()
 | 
			
		||||
                
 | 
			
		||||
                if let orderSequence = orderSequence {
 | 
			
		||||
                    Text("\(orderSequence)")
 | 
			
		||||
                        .font(.custom(Font.bold.rawValue, size: 13.3))
 | 
			
		||||
                        .foregroundColor(Color.button)
 | 
			
		||||
                        .padding(.leading, 5.3)
 | 
			
		||||
                    
 | 
			
		||||
                    Text("/")
 | 
			
		||||
                        .font(.custom(Font.bold.rawValue, size: 13.3))
 | 
			
		||||
                        .foregroundColor(Color.grayd2)
 | 
			
		||||
                        .padding(.leading, 2.3)
 | 
			
		||||
                    
 | 
			
		||||
                    Text("\(totalContentCount)")
 | 
			
		||||
                        .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
			
		||||
                        .foregroundColor(Color.grayd2)
 | 
			
		||||
                        .padding(.leading, 2.3)
 | 
			
		||||
                } else if (remainingContentCount <= 0) {
 | 
			
		||||
                    Text("Sold Out")
 | 
			
		||||
                        .font(.custom(Font.medium.rawValue, size: 12))
 | 
			
		||||
                        .foregroundColor(Color.grayd2)
 | 
			
		||||
                        .padding(.horizontal, 5.3)
 | 
			
		||||
                        .padding(.vertical, 3.3)
 | 
			
		||||
                        .overlay(
 | 
			
		||||
                            RoundedRectangle(cornerRadius: 2.6)
 | 
			
		||||
                                .stroke(lineWidth: 1)
 | 
			
		||||
                                .foregroundColor(Color.grayd2)
 | 
			
		||||
                        )
 | 
			
		||||
                } else {
 | 
			
		||||
                    Text("잔여수량")
 | 
			
		||||
                        .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
			
		||||
                        .foregroundColor(Color.grayd2)
 | 
			
		||||
                    
 | 
			
		||||
                    Text("\(remainingContentCount)")
 | 
			
		||||
                        .font(.custom(Font.bold.rawValue, size: 13.3))
 | 
			
		||||
                        .foregroundColor(Color.button)
 | 
			
		||||
                        .padding(.leading, 5.3)
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
            .padding(.vertical, 8)
 | 
			
		||||
            .padding(.horizontal, 10.3)
 | 
			
		||||
            .background(Color(hex: "14262d"))
 | 
			
		||||
            .cornerRadius(5.3)
 | 
			
		||||
            .padding(.top, 13.3)
 | 
			
		||||
            
 | 
			
		||||
            if !buyerList.isEmpty {
 | 
			
		||||
                Text("구매자")
 | 
			
		||||
                    .font(.custom(Font.bold.rawValue, size: 18.3))
 | 
			
		||||
                    .foregroundColor(Color.grayee)
 | 
			
		||||
                
 | 
			
		||||
                ScrollView(.horizontal, showsIndicators: false) {
 | 
			
		||||
                    HStack(alignment: .top, spacing: 13.3) {
 | 
			
		||||
                        ForEach(0..<buyerList.count, id: \.self) {
 | 
			
		||||
                            let buyer = buyerList[$0]
 | 
			
		||||
                            
 | 
			
		||||
                            VStack(spacing: 6.7) {
 | 
			
		||||
                                KFImage(URL(string: buyer.profileImageUrl))
 | 
			
		||||
                                    .cancelOnDisappear(true)
 | 
			
		||||
                                    .resizable()
 | 
			
		||||
                                    .scaledToFill()
 | 
			
		||||
                                    .frame(width: 46.7, height: 46.7, alignment: .top)
 | 
			
		||||
                                    .clipShape(Circle())
 | 
			
		||||
                                
 | 
			
		||||
                                Text(buyer.nickname)
 | 
			
		||||
                                    .font(.custom(Font.medium.rawValue, size: 12))
 | 
			
		||||
                                    .foregroundColor(Color.graybb)
 | 
			
		||||
                                    .lineLimit(1)
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        .padding(.vertical, 8)
 | 
			
		||||
        .padding(.horizontal, 10.3)
 | 
			
		||||
        .background(Color(hex: "14262d"))
 | 
			
		||||
        .cornerRadius(5.3)
 | 
			
		||||
        .padding(.top, 13.3)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -71,6 +103,18 @@ struct ContentDetailInfoLimitedEditionView: View {
 | 
			
		||||
    ContentDetailInfoLimitedEditionView(
 | 
			
		||||
        totalContentCount: 10,
 | 
			
		||||
        remainingContentCount: 0,
 | 
			
		||||
        orderSequence: nil
 | 
			
		||||
        orderSequence: nil,
 | 
			
		||||
        buyerList: [
 | 
			
		||||
            ContentBuyer(nickname: "user1", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user2", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user3", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user4", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user5", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user6", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user7", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user8", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user9", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
            ContentBuyer(nickname: "user10", profileImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png"),
 | 
			
		||||
        ]
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user