feat: 메인 라이브
- 라이브 다시 듣기 UI 추가
This commit is contained in:
		@@ -46,11 +46,11 @@ struct DayOfWeekSeriesView: View {
 | 
				
			|||||||
        VStack(alignment: .leading, spacing: 16) {
 | 
					        VStack(alignment: .leading, spacing: 16) {
 | 
				
			||||||
            HStack(spacing: 0) {
 | 
					            HStack(spacing: 0) {
 | 
				
			||||||
                Text("요일별")
 | 
					                Text("요일별")
 | 
				
			||||||
                    .font(.custom(Font.preBold.rawValue, size: 26))
 | 
					                    .font(.custom(Font.preBold.rawValue, size: 24))
 | 
				
			||||||
                    .foregroundColor(.button)
 | 
					                    .foregroundColor(.button)
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                Text(" 시리즈")
 | 
					                Text(" 시리즈")
 | 
				
			||||||
                    .font(.custom(Font.preBold.rawValue, size: 26))
 | 
					                    .font(.custom(Font.preBold.rawValue, size: 24))
 | 
				
			||||||
                    .foregroundColor(.white)
 | 
					                    .foregroundColor(.white)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            .padding(.horizontal, 24)
 | 
					            .padding(.horizontal, 24)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,11 +24,11 @@ struct HomeLatestContentView: View {
 | 
				
			|||||||
    var body: some View {
 | 
					    var body: some View {
 | 
				
			||||||
        HStack(spacing: 0) {
 | 
					        HStack(spacing: 0) {
 | 
				
			||||||
            Text("최신")
 | 
					            Text("최신")
 | 
				
			||||||
                .font(.custom(Font.preBold.rawValue, size: 26))
 | 
					                .font(.custom(Font.preBold.rawValue, size: 24))
 | 
				
			||||||
                .foregroundColor(.button)
 | 
					                .foregroundColor(.button)
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Text(" 콘텐츠")
 | 
					            Text(" 콘텐츠")
 | 
				
			||||||
                .font(.custom(Font.preBold.rawValue, size: 26))
 | 
					                .font(.custom(Font.preBold.rawValue, size: 24))
 | 
				
			||||||
                .foregroundColor(.white)
 | 
					                .foregroundColor(.white)
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Spacer()
 | 
					            Spacer()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,11 +23,11 @@ struct HomeWeeklyChartView: View {
 | 
				
			|||||||
        VStack(spacing: 16) {
 | 
					        VStack(spacing: 16) {
 | 
				
			||||||
            HStack(spacing: 0) {
 | 
					            HStack(spacing: 0) {
 | 
				
			||||||
                Text("보온")
 | 
					                Text("보온")
 | 
				
			||||||
                    .font(.custom(Font.preBold.rawValue, size: 26))
 | 
					                    .font(.custom(Font.preBold.rawValue, size: 24))
 | 
				
			||||||
                    .foregroundColor(.button)
 | 
					                    .foregroundColor(.button)
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                Text(" 주간 차트")
 | 
					                Text(" 주간 차트")
 | 
				
			||||||
                    .font(.custom(Font.preBold.rawValue, size: 26))
 | 
					                    .font(.custom(Font.preBold.rawValue, size: 24))
 | 
				
			||||||
                    .foregroundColor(.white)
 | 
					                    .foregroundColor(.white)
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                Spacer()
 | 
					                Spacer()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										67
									
								
								SodaLive/Sources/Live/LiveReplayListView.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								SodaLive/Sources/Live/LiveReplayListView.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  LiveReplayListView.swift
 | 
				
			||||||
 | 
					//  SodaLive
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by klaus on 7/22/25.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import SwiftUI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct LiveReplayListView: View {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    let contentList: [AudioContentMainItem]
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    let rows = [
 | 
				
			||||||
 | 
					        GridItem(.flexible(), alignment: .leading),
 | 
				
			||||||
 | 
					        GridItem(.flexible(), alignment: .leading)
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    var body: some View {
 | 
				
			||||||
 | 
					        VStack(spacing: 14) {
 | 
				
			||||||
 | 
					            HStack(spacing: 0) {
 | 
				
			||||||
 | 
					                Text("라이브")
 | 
				
			||||||
 | 
					                    .font(.custom(Font.preBold.rawValue, size: 24))
 | 
				
			||||||
 | 
					                    .foregroundColor(.button)
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                Text(" 다시 듣기")
 | 
				
			||||||
 | 
					                    .font(.custom(Font.preBold.rawValue, size: 24))
 | 
				
			||||||
 | 
					                    .foregroundColor(.white)
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                Spacer()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            .padding(.horizontal, 24)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            ScrollView(.horizontal, showsIndicators: false) {
 | 
				
			||||||
 | 
					                LazyHGrid(rows: rows, spacing: 16) {
 | 
				
			||||||
 | 
					                    ForEach(0..<contentList.count, id: \.self) { index in
 | 
				
			||||||
 | 
					                        ContentItemView(item: contentList[index])
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                .padding(.horizontal, 24)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Preview {
 | 
				
			||||||
 | 
					    LiveReplayListView(
 | 
				
			||||||
 | 
					        contentList: [
 | 
				
			||||||
 | 
					            AudioContentMainItem(
 | 
				
			||||||
 | 
					                contentId: 1,
 | 
				
			||||||
 | 
					                creatorId: 3,
 | 
				
			||||||
 | 
					                title: "ㅓ처랴햐햫햐햐",
 | 
				
			||||||
 | 
					                coverImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png",
 | 
				
			||||||
 | 
					                creatorNickname: "유저1",
 | 
				
			||||||
 | 
					                isPointAvailable: true
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            AudioContentMainItem(
 | 
				
			||||||
 | 
					                contentId: 2,
 | 
				
			||||||
 | 
					                creatorId: 8,
 | 
				
			||||||
 | 
					                title: "ㅓ처랴햐햫햐햐",
 | 
				
			||||||
 | 
					                coverImageUrl: "https://test-cf.sodalive.net/profile/default-profile.png",
 | 
				
			||||||
 | 
					                creatorNickname: "유저2",
 | 
				
			||||||
 | 
					                isPointAvailable: false
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -85,6 +85,10 @@ struct LiveView: View {
 | 
				
			|||||||
                                SectionRecommendLiveView(items: viewModel.recommendLiveItems)
 | 
					                                SectionRecommendLiveView(items: viewModel.recommendLiveItems)
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            
 | 
					                            
 | 
				
			||||||
 | 
					                            if viewModel.replayLiveItems.count > 0 {
 | 
				
			||||||
 | 
					                                LiveReplayListView(contentList: viewModel.replayLiveItems)
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
                            SectionLiveReservationView(
 | 
					                            SectionLiveReservationView(
 | 
				
			||||||
                                items: viewModel.liveReservationItems,
 | 
					                                items: viewModel.liveReservationItems,
 | 
				
			||||||
                                onClickCancel: { viewModel.getLiveMain() },
 | 
					                                onClickCancel: { viewModel.getLiveMain() },
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user