콘텐츠 상세
- 이전화/다음화 버튼 추가
This commit is contained in:
		@@ -0,0 +1,112 @@
 | 
			
		||||
//
 | 
			
		||||
//  ContentDetailPreviousNextContentButtonView.swift
 | 
			
		||||
//  SodaLive
 | 
			
		||||
//
 | 
			
		||||
//  Created by klaus on 4/1/25.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
import SwiftUI
 | 
			
		||||
import Kingfisher
 | 
			
		||||
 | 
			
		||||
struct ContentDetailPreviousNextContentButtonView: View {
 | 
			
		||||
    
 | 
			
		||||
    let previousContent: OtherContentResponse?
 | 
			
		||||
    let nextContent: OtherContentResponse?
 | 
			
		||||
    let onClickButton: (Int) -> Void
 | 
			
		||||
    
 | 
			
		||||
    var body: some View {
 | 
			
		||||
        HStack(spacing: 8) {
 | 
			
		||||
            VStack {
 | 
			
		||||
                if let previousContent = previousContent {
 | 
			
		||||
                    HStack(alignment: .top, spacing: 5.3) {
 | 
			
		||||
                        KFImage(URL(string: previousContent.coverUrl))
 | 
			
		||||
                            .resizable()
 | 
			
		||||
                            .frame(width: 33.3, height: 33.3)
 | 
			
		||||
                            .cornerRadius(5.3)
 | 
			
		||||
                        
 | 
			
		||||
                        VStack(alignment: .leading, spacing: 5.3) {
 | 
			
		||||
                            Text(previousContent.title)
 | 
			
		||||
                                .font(.custom(Font.medium.rawValue, size: 11))
 | 
			
		||||
                                .foregroundColor(.grayd2)
 | 
			
		||||
                                .multilineTextAlignment(.leading)
 | 
			
		||||
                                .lineLimit(2)
 | 
			
		||||
                            
 | 
			
		||||
                            Text("이전화")
 | 
			
		||||
                                .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
			
		||||
                                .foregroundColor(.button)
 | 
			
		||||
                                .multilineTextAlignment(.leading)
 | 
			
		||||
                                .lineLimit(2)
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    .frame(maxWidth: .infinity, alignment: .leading)
 | 
			
		||||
                    .padding(5.3)
 | 
			
		||||
                    .background(Color.gray22)
 | 
			
		||||
                    .overlay(
 | 
			
		||||
                        RoundedRectangle(cornerRadius: 5.3)
 | 
			
		||||
                            .strokeBorder(lineWidth: 1)
 | 
			
		||||
                            .foregroundColor(Color.gray55)
 | 
			
		||||
                    )
 | 
			
		||||
                    .contentShape(Rectangle())
 | 
			
		||||
                    .onTapGesture {
 | 
			
		||||
                        onClickButton(previousContent.contentId)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            .frame(maxWidth: .infinity)
 | 
			
		||||
            
 | 
			
		||||
            VStack {
 | 
			
		||||
                if let nextContent = nextContent {
 | 
			
		||||
                    HStack(alignment: .top, spacing: 5.3) {
 | 
			
		||||
                        KFImage(URL(string: nextContent.coverUrl))
 | 
			
		||||
                            .resizable()
 | 
			
		||||
                            .frame(width: 33.3, height: 33.3)
 | 
			
		||||
                            .cornerRadius(5.3)
 | 
			
		||||
                        
 | 
			
		||||
                        VStack(alignment: .leading, spacing: 5.3) {
 | 
			
		||||
                            Text(nextContent.title)
 | 
			
		||||
                                .font(.custom(Font.medium.rawValue, size: 11))
 | 
			
		||||
                                .foregroundColor(.grayd2)
 | 
			
		||||
                                .multilineTextAlignment(.leading)
 | 
			
		||||
                                .lineLimit(2)
 | 
			
		||||
                            
 | 
			
		||||
                            Text("다음화")
 | 
			
		||||
                                .font(.custom(Font.medium.rawValue, size: 13.3))
 | 
			
		||||
                                .foregroundColor(.button)
 | 
			
		||||
                                .multilineTextAlignment(.leading)
 | 
			
		||||
                                .lineLimit(2)
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    .frame(maxWidth: .infinity, alignment: .leading)
 | 
			
		||||
                    .padding(5.3)
 | 
			
		||||
                    .background(Color.gray22)
 | 
			
		||||
                    .overlay(
 | 
			
		||||
                        RoundedRectangle(cornerRadius: 5.3)
 | 
			
		||||
                            .strokeBorder(lineWidth: 1)
 | 
			
		||||
                            .foregroundColor(Color.gray55)
 | 
			
		||||
                    )
 | 
			
		||||
                    .contentShape(Rectangle())
 | 
			
		||||
                    .onTapGesture {
 | 
			
		||||
                        onClickButton(nextContent.contentId)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            .frame(maxWidth: .infinity)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#Preview {
 | 
			
		||||
    ContentDetailPreviousNextContentButtonView(
 | 
			
		||||
        previousContent: OtherContentResponse(
 | 
			
		||||
            contentId: 1,
 | 
			
		||||
            title: "1화\n남편은 분명 성기사였다",
 | 
			
		||||
            coverUrl: "https://test-cf.sodalive.net/profile/default-profile.png"
 | 
			
		||||
        ),
 | 
			
		||||
        nextContent: OtherContentResponse(
 | 
			
		||||
            contentId: 3,
 | 
			
		||||
            title: "3화\n남편은 분명 성기사였다",
 | 
			
		||||
            coverUrl: "https://test-cf.sodalive.net/profile/default-profile.png"
 | 
			
		||||
        ),
 | 
			
		||||
        onClickButton: { _ in }
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user