207 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
//
 | 
						|
//  ContentDetailInfoView.swift
 | 
						|
//  SodaLive
 | 
						|
//
 | 
						|
//  Created by klaus on 2023/08/13.
 | 
						|
//
 | 
						|
 | 
						|
import SwiftUI
 | 
						|
 | 
						|
struct ContentDetailInfoView: View {
 | 
						|
    
 | 
						|
    @Binding var isExpandDescription: Bool
 | 
						|
    @Binding var isShowPreviewAlert: Bool
 | 
						|
    
 | 
						|
    let audioContent: GetAudioContentDetailResponse
 | 
						|
    let onClickLike: () -> Void
 | 
						|
    let onClickShare: () -> Void
 | 
						|
    let onClickDonation: () -> Void
 | 
						|
    
 | 
						|
    var body: some View {
 | 
						|
        VStack(alignment: .leading, spacing: 0) {
 | 
						|
            VStack(alignment: .leading, spacing: 8) {
 | 
						|
                HStack(spacing: 5.3) {
 | 
						|
                    if let _ = audioContent.releaseDate {
 | 
						|
                        Text("오픈예정")
 | 
						|
                            .font(.custom(Font.medium.rawValue, size: 12))
 | 
						|
                            .foregroundColor(Color(hex: "3bb9f1"))
 | 
						|
                            .padding(.horizontal, 5.3)
 | 
						|
                            .padding(.vertical, 3.3)
 | 
						|
                            .background(Color(hex: "003851"))
 | 
						|
                            .cornerRadius(2.6)
 | 
						|
                    }
 | 
						|
                    
 | 
						|
                    Text(audioContent.themeStr)
 | 
						|
                        .font(.custom(Font.medium.rawValue, size: 12))
 | 
						|
                        .foregroundColor(Color(hex: "3bac6a"))
 | 
						|
                        .padding(.horizontal, 5.3)
 | 
						|
                        .padding(.vertical, 3.3)
 | 
						|
                        .background(Color(hex: "28312b"))
 | 
						|
                        .cornerRadius(2.6)
 | 
						|
                    
 | 
						|
                    if audioContent.isAdult {
 | 
						|
                        Text("19")
 | 
						|
                            .font(.custom(Font.medium.rawValue, size: 12))
 | 
						|
                            .foregroundColor(Color(hex: "e33621"))
 | 
						|
                            .padding(.horizontal, 5.3)
 | 
						|
                            .padding(.vertical, 3.3)
 | 
						|
                            .background(Color(hex: "601d14"))
 | 
						|
                            .cornerRadius(2.6)
 | 
						|
                    }
 | 
						|
                    
 | 
						|
                    Spacer()
 | 
						|
                    
 | 
						|
                    if let orderType = audioContent.orderType, audioContent.existOrdered {
 | 
						|
                        if let remainingTime = audioContent.remainingTime, orderType == .RENTAL {
 | 
						|
                            HStack(spacing: 2.7) {
 | 
						|
                                Image("ic_time_l")
 | 
						|
                                
 | 
						|
                                Text(remainingTime)
 | 
						|
                                    .font(.custom(Font.medium.rawValue, size: 12))
 | 
						|
                                    .foregroundColor(Color(hex: "909090"))
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                        
 | 
						|
                        Text(orderType == .KEEP ? "소장중" : "대여중")
 | 
						|
                            .font(.custom(Font.medium.rawValue, size: 12))
 | 
						|
                            .foregroundColor(
 | 
						|
                                orderType == .KEEP ?
 | 
						|
                                Color(hex: "b1ef2c") :
 | 
						|
                                    Color.button
 | 
						|
                            )
 | 
						|
                            .padding(.horizontal, 5.3)
 | 
						|
                            .padding(.vertical, 3.3)
 | 
						|
                            .background(
 | 
						|
                                orderType == .KEEP ?
 | 
						|
                                Color(hex: "26310f") :
 | 
						|
                                    Color(hex: "30176f")
 | 
						|
                            )
 | 
						|
                            .cornerRadius(2.6)
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                
 | 
						|
                Text(audioContent.title)
 | 
						|
                    .font(.custom(Font.bold.rawValue, size: 16.7))
 | 
						|
                    .foregroundColor(Color.grayd2)
 | 
						|
                    .lineSpacing(5)
 | 
						|
                    .multilineTextAlignment(.leading)
 | 
						|
                    .fixedSize(horizontal: false, vertical: true)
 | 
						|
                    .frame(maxWidth: .infinity, alignment: .leading)
 | 
						|
            }
 | 
						|
            .padding(.top, 13.3)
 | 
						|
            
 | 
						|
            if !audioContent.contentUrl.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty && audioContent.releaseDate == nil {
 | 
						|
                ScrollView(.horizontal, showsIndicators: false) {
 | 
						|
                    HStack(spacing: 8) {
 | 
						|
                        HStack(spacing: 4) {
 | 
						|
                            Image(
 | 
						|
                                audioContent.isLike ?
 | 
						|
                                "ic_audio_content_heart_pressed" :
 | 
						|
                                    "ic_audio_content_heart_normal"
 | 
						|
                            )
 | 
						|
                            
 | 
						|
                            Text("\(audioContent.likeCount)")
 | 
						|
                                .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
						|
                                .foregroundColor(Color.grayd2)
 | 
						|
                        }
 | 
						|
                        .padding(.horizontal, 13.3)
 | 
						|
                        .padding(.vertical, 5.3)
 | 
						|
                        .background(Color(hex: "ffffff").opacity(0.1))
 | 
						|
                        .cornerRadius(26.7)
 | 
						|
                        .onTapGesture { onClickLike() }
 | 
						|
                        
 | 
						|
                        HStack(spacing: 4) {
 | 
						|
                            Image("ic_audio_content_share")
 | 
						|
                            
 | 
						|
                            Text("공유")
 | 
						|
                                .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
						|
                                .foregroundColor(Color.grayd2)
 | 
						|
                        }
 | 
						|
                        .padding(.horizontal, 13.3)
 | 
						|
                        .padding(.vertical, 5.3)
 | 
						|
                        .background(Color(hex: "ffffff").opacity(0.1))
 | 
						|
                        .cornerRadius(26.7)
 | 
						|
                        .onTapGesture { onClickShare() }
 | 
						|
                        
 | 
						|
                        if audioContent.isCommentAvailable {
 | 
						|
                            HStack(spacing: 4) {
 | 
						|
                                Image("ic_donation_white")
 | 
						|
                                    .resizable()
 | 
						|
                                    .frame(width: 13.3, height: 13.3)
 | 
						|
                                
 | 
						|
                                Text("후원")
 | 
						|
                                    .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
						|
                                    .foregroundColor(Color.grayd2)
 | 
						|
                            }
 | 
						|
                            .padding(.horizontal, 13.3)
 | 
						|
                            .padding(.vertical, 5.3)
 | 
						|
                            .background(Color(hex: "ffffff").opacity(0.1))
 | 
						|
                            .cornerRadius(26.7)
 | 
						|
                            .onTapGesture { onClickDonation() }
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                .padding(.top, 13.3)
 | 
						|
            }
 | 
						|
            
 | 
						|
            if let totalContentCount = audioContent.totalContentCount, let remainingContentCount = audioContent.remainingContentCount {
 | 
						|
                ContentDetailInfoLimitedEditionView(
 | 
						|
                    totalContentCount: totalContentCount,
 | 
						|
                    remainingContentCount: remainingContentCount,
 | 
						|
                    orderSequence: audioContent.orderSequence,
 | 
						|
                    buyerList: audioContent.buyerList
 | 
						|
                )
 | 
						|
            }
 | 
						|
            
 | 
						|
            ZStack {
 | 
						|
                VStack(spacing: 8) {
 | 
						|
                    if audioContent.tag.count > 0 {
 | 
						|
                        Text(audioContent.tag)
 | 
						|
                            .font(.custom(Font.medium.rawValue, size: 12))
 | 
						|
                            .foregroundColor(Color.button)
 | 
						|
                            .frame(maxWidth: .infinity, alignment: .leading)
 | 
						|
                    }
 | 
						|
                    
 | 
						|
                    Text(audioContent.detail)
 | 
						|
                        .font(.custom(Font.medium.rawValue, size: 14))
 | 
						|
                        .foregroundColor(Color.gray90)
 | 
						|
                        .lineLimit(isExpandDescription ? nil : 3)
 | 
						|
                        .lineSpacing(5)
 | 
						|
                        .frame(maxWidth: .infinity, alignment: .leading)
 | 
						|
                        .onTapGesture { isExpandDescription.toggle() }
 | 
						|
                }
 | 
						|
                .padding(.top, 13.3)
 | 
						|
                
 | 
						|
                if isShowingPreviewAlert() {
 | 
						|
                    HStack(spacing: 0) {
 | 
						|
                        Text("미리듣기 중입니다.\n콘텐츠 구매 후 전체를 감상해 보세요.")
 | 
						|
                            .font(.custom(Font.medium.rawValue, size: 12))
 | 
						|
                            .foregroundColor(Color.graybb)
 | 
						|
                            .lineSpacing(5)
 | 
						|
                        
 | 
						|
                        Spacer()
 | 
						|
                        
 | 
						|
                        Image("ic_circle_x_white")
 | 
						|
                            .onTapGesture { isShowPreviewAlert = false }
 | 
						|
                    }
 | 
						|
                    .padding(13.3)
 | 
						|
                    .background(Color(hex: "1e0e45").opacity(0.89))
 | 
						|
                    .cornerRadius(5.3)
 | 
						|
                    .overlay(
 | 
						|
                        RoundedRectangle(cornerRadius: 5.3)
 | 
						|
                            .stroke(lineWidth: 1)
 | 
						|
                            .foregroundColor(Color.button)
 | 
						|
                    )
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    private func isShowingPreviewAlert() -> Bool {
 | 
						|
        return isShowPreviewAlert &&
 | 
						|
        audioContent.creator.creatorId != UserDefaults.int(forKey: .userId) &&
 | 
						|
        !audioContent.existOrdered &&
 | 
						|
        audioContent.price > 0
 | 
						|
    }
 | 
						|
}
 |