크리에이터 커뮤니티 페이지 추가
This commit is contained in:
		
							
								
								
									
										21
									
								
								SodaLive/Resources/Assets.xcassets/img_sample.imageset/Contents.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								SodaLive/Resources/Assets.xcassets/img_sample.imageset/Contents.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| { | ||||
|   "images" : [ | ||||
|     { | ||||
|       "idiom" : "universal", | ||||
|       "scale" : "1x" | ||||
|     }, | ||||
|     { | ||||
|       "idiom" : "universal", | ||||
|       "scale" : "2x" | ||||
|     }, | ||||
|     { | ||||
|       "filename" : "img_sample.png", | ||||
|       "idiom" : "universal", | ||||
|       "scale" : "3x" | ||||
|     } | ||||
|   ], | ||||
|   "info" : { | ||||
|     "author" : "xcode", | ||||
|     "version" : 1 | ||||
|   } | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								SodaLive/Resources/Assets.xcassets/img_sample.imageset/img_sample.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								SodaLive/Resources/Assets.xcassets/img_sample.imageset/img_sample.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 456 KiB | 
| @@ -111,4 +111,6 @@ enum AppStep { | ||||
|     case curationAll(title: String, curationId: Int) | ||||
|      | ||||
|     case contentRankingAll | ||||
|      | ||||
|     case creatorCommunityAll(creatorId: Int) | ||||
| } | ||||
|   | ||||
| @@ -163,6 +163,9 @@ struct ContentView: View { | ||||
|             case .contentRankingAll: | ||||
|                 ContentRankingAllView() | ||||
|                  | ||||
|             case .creatorCommunityAll(let creatorId): | ||||
|                 CreatorCommunityAllView(creatorId: creatorId) | ||||
|                  | ||||
|             default: | ||||
|                 EmptyView() | ||||
|                     .frame(width: 0, height: 0, alignment: .topLeading) | ||||
|   | ||||
							
								
								
									
										40
									
								
								SodaLive/Sources/CustomView/IconAndTitleButton.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								SodaLive/Sources/CustomView/IconAndTitleButton.swift
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| // | ||||
| //  IconAndTitleButton.swift | ||||
| //  SodaLive | ||||
| // | ||||
| //  Created by klaus on 2023/12/15. | ||||
| // | ||||
|  | ||||
| import SwiftUI | ||||
|  | ||||
| struct IconAndTitleButton: View { | ||||
|      | ||||
|     let iconName: String | ||||
|     let title: String | ||||
|     let onClick: () -> Void | ||||
|      | ||||
|     var body: some View { | ||||
|         HStack(spacing: 4) { | ||||
|             Image(iconName) | ||||
|              | ||||
|             Text(title) | ||||
|                 .font(.custom(Font.medium.rawValue, size: 13.3)) | ||||
|                 .foregroundColor(Color(hex: "d2d2d2")) | ||||
|         } | ||||
|         .padding(.horizontal, 13.3) | ||||
|         .padding(.vertical, 5.3) | ||||
|         .background(Color(hex: "ffffff").opacity(0.1)) | ||||
|         .cornerRadius(26.7) | ||||
|         .onTapGesture { onClick() } | ||||
|     } | ||||
| } | ||||
|  | ||||
| struct IconAndTitleButton_Previews: PreviewProvider { | ||||
|     static var previews: some View { | ||||
|         IconAndTitleButton( | ||||
|             iconName: "ic_audio_content_share", | ||||
|             title: "공유", | ||||
|             onClick: {} | ||||
|         ) | ||||
|     } | ||||
| } | ||||
							
								
								
									
										45
									
								
								SodaLive/Sources/CustomView/IconAndTitleToggleButton.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								SodaLive/Sources/CustomView/IconAndTitleToggleButton.swift
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| // | ||||
| //  IconAndTitleToggleButton.swift | ||||
| //  SodaLive | ||||
| // | ||||
| //  Created by klaus on 2023/12/15. | ||||
| // | ||||
|  | ||||
| import SwiftUI | ||||
|  | ||||
| struct IconAndTitleToggleButton: View { | ||||
|      | ||||
|     @Binding var isChecked: Bool | ||||
|      | ||||
|     let title: String | ||||
|     let normalIconName: String | ||||
|     let checkedIconName: String | ||||
|      | ||||
|     let onClick: () -> Void | ||||
|      | ||||
|     var body: some View { | ||||
|         HStack(spacing: 4) { | ||||
|             Image(isChecked ? checkedIconName : normalIconName) | ||||
|              | ||||
|             Text("\(title)") | ||||
|                 .font(.custom(Font.medium.rawValue, size: 13.3)) | ||||
|                 .foregroundColor(Color(hex: "d2d2d2")) | ||||
|         } | ||||
|         .padding(.horizontal, 13.3) | ||||
|         .padding(.vertical, 5.3) | ||||
|         .background(Color(hex: "ffffff").opacity(0.1)) | ||||
|         .cornerRadius(26.7) | ||||
|         .onTapGesture { onClick() } | ||||
|     } | ||||
| } | ||||
|  | ||||
| struct IconAndTitleToggleButton_Previews: PreviewProvider { | ||||
|     static var previews: some View { | ||||
|         IconAndTitleToggleButton( | ||||
|             isChecked: .constant(true), | ||||
|             title: "100", | ||||
|             normalIconName: "ic_audio_content_heart_normal", | ||||
|             checkedIconName: "ic_audio_content_heart_pressed" | ||||
|         ) {} | ||||
|     } | ||||
| } | ||||
| @@ -8,6 +8,9 @@ | ||||
| import SwiftUI | ||||
|  | ||||
| struct CreatorCommunityMoreItemView: View { | ||||
|      | ||||
|     let onClick: () -> Void | ||||
|      | ||||
|     var body: some View { | ||||
|         VStack(spacing: 11) { | ||||
|             Image("btn_item_more") | ||||
| @@ -18,11 +21,12 @@ struct CreatorCommunityMoreItemView: View { | ||||
|                 .font(.custom(Font.light.rawValue, size: 11)) | ||||
|                 .foregroundColor(Color(hex: "bbbbbb")) | ||||
|         } | ||||
|         .onTapGesture { onClick() } | ||||
|     } | ||||
| } | ||||
|  | ||||
| struct CreatorCommunityMoreItemView_Previews: PreviewProvider { | ||||
|     static var previews: some View { | ||||
|         CreatorCommunityMoreItemView() | ||||
|         CreatorCommunityMoreItemView {} | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,80 @@ | ||||
| // | ||||
| //  CreatorCommunityAllItemView.swift | ||||
| //  SodaLive | ||||
| // | ||||
| //  Created by klaus on 2023/12/15. | ||||
| // | ||||
|  | ||||
| import SwiftUI | ||||
|  | ||||
| struct CreatorCommunityAllItemView: View { | ||||
|      | ||||
|     @State var isExpandContent = true | ||||
|      | ||||
|     var body: some View { | ||||
|         VStack(spacing: 13.3) { | ||||
|             HStack(spacing: 0) { | ||||
|                 Image("ic_place_holder") | ||||
|                     .resizable() | ||||
|                     .frame(width: 40, height: 40) | ||||
|                     .clipShape(Circle()) | ||||
|                  | ||||
|                 VStack(alignment: .leading, spacing: 3) { | ||||
|                     Text("민하나") | ||||
|                         .font(.custom(Font.medium.rawValue, size: 13.3)) | ||||
|                         .foregroundColor(Color(hex: "eeeeee")) | ||||
|                      | ||||
|                     Text("1개월 전(수정됨)") | ||||
|                         .font(.custom(Font.light.rawValue, size: 13.3)) | ||||
|                         .foregroundColor(Color(hex: "777777")) | ||||
|                 } | ||||
|                 .padding(.leading, 11) | ||||
|                  | ||||
|                 Spacer() | ||||
|                  | ||||
|                 Image("ic_seemore_vertical") | ||||
|                     .padding(.trailing, 8.3) | ||||
|                     .onTapGesture {} | ||||
|             } | ||||
|              | ||||
|             Text("너무 조하유 앞으로도 좋은 라이브 많이 들려주세요!너무 조하유 앞으로도 좋은 라이브 많이 들려주세요!너무 조하유 앞으로도 좋은 라이브 많이 들려주세요!너무 조하유 앞으로도 좋은 라이브 많이 들려주세요!") | ||||
|                 .font(.custom(Font.medium.rawValue, size: 13.3)) | ||||
|                 .foregroundColor(Color(hex: "bbbbbb")) | ||||
|                 .fixedSize(horizontal: false, vertical: true) | ||||
|                 .frame(maxWidth: .infinity, alignment: .leading) | ||||
|                 .lineLimit(isExpandContent ? Int.max : 3) | ||||
|                 .onTapGesture { isExpandContent.toggle() } | ||||
|              | ||||
|             Image("img_sample") | ||||
|                 .resizable() | ||||
|                 .frame(maxWidth: .infinity) | ||||
|                 .scaledToFit() | ||||
|              | ||||
|             HStack(spacing: 8) { | ||||
|                 IconAndTitleToggleButton( | ||||
|                     isChecked: .constant(true), | ||||
|                     title: "252", | ||||
|                     normalIconName: "ic_audio_content_heart_normal", | ||||
|                     checkedIconName: "ic_audio_content_heart_pressed" | ||||
|                 ) {} | ||||
|                 IconAndTitleButton(iconName: "ic_audio_content_share", title: "공유") {} | ||||
|             } | ||||
|             .frame(maxWidth: .infinity, alignment: .leading) | ||||
|              | ||||
|             CreatorCommunityCommentView( | ||||
|                 commentCount: 2, | ||||
|                 commentList: [ | ||||
|                     "내용 읽어보니까 결혼해도 될것 같은데", | ||||
|                     "너무 조하유 앞으로도 좋은 라이브 많이 들려주세요" | ||||
|                 ], | ||||
|                 registerComment: { _ in } | ||||
|             ) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| struct CreatorCommunityAllItemView_Previews: PreviewProvider { | ||||
|     static var previews: some View { | ||||
|         CreatorCommunityAllItemView() | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,37 @@ | ||||
| // | ||||
| //  CreatorCommunityAllView.swift | ||||
| //  SodaLive | ||||
| // | ||||
| //  Created by klaus on 2023/12/15. | ||||
| // | ||||
|  | ||||
| import SwiftUI | ||||
|  | ||||
| struct CreatorCommunityAllView: View { | ||||
|      | ||||
|     let creatorId: Int | ||||
|      | ||||
|     var body: some View { | ||||
|         BaseView { | ||||
|             VStack(spacing: 0) { | ||||
|                 DetailNavigationBar(title: "커뮤니티") | ||||
|                  | ||||
|                 ScrollView(.vertical, showsIndicators: false) { | ||||
|                     LazyVStack(spacing: 26.7) { | ||||
|                         CreatorCommunityAllItemView() | ||||
|                         CreatorCommunityAllItemView() | ||||
|                         CreatorCommunityAllItemView() | ||||
|                     } | ||||
|                     .padding(.horizontal, 13.3) | ||||
|                     .padding(.vertical, 5.3) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| struct CreatorCommunityAllView_Previews: PreviewProvider { | ||||
|     static var previews: some View { | ||||
|         CreatorCommunityAllView(creatorId: 0) | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,93 @@ | ||||
| // | ||||
| //  CreatorCommunityCommentView.swift | ||||
| //  SodaLive | ||||
| // | ||||
| //  Created by klaus on 2023/12/15. | ||||
| // | ||||
|  | ||||
| import SwiftUI | ||||
|  | ||||
| struct CreatorCommunityCommentView: View { | ||||
|     let commentCount: Int | ||||
|     let commentList: [String] | ||||
|      | ||||
|     let registerComment: (String) -> Void | ||||
|      | ||||
|     @State private var comment = "" | ||||
|      | ||||
|     var body: some View { | ||||
|         VStack(alignment: .leading, spacing: 11) { | ||||
|             HStack(spacing: 5.3) { | ||||
|                 Text("댓글") | ||||
|                     .font(.custom(Font.medium.rawValue, size: 12)) | ||||
|                     .foregroundColor(.white) | ||||
|                  | ||||
|                 Text("\(commentCount)") | ||||
|                     .font(.custom(Font.medium.rawValue, size: 12)) | ||||
|                     .foregroundColor(Color(hex: "909090")) | ||||
|                  | ||||
|                 Spacer() | ||||
|             } | ||||
|              | ||||
|             HStack(spacing: 8) { | ||||
|                 Image("ic_place_holder") | ||||
|                 .resizable() | ||||
|                 .frame(width: 33.3, height: 33.3) | ||||
|                 .clipShape(Circle()) | ||||
|                  | ||||
|                 if commentCount > 0 { | ||||
|                     Text(commentList[0]) | ||||
|                         .font(.custom(Font.medium.rawValue, size: 12)) | ||||
|                         .foregroundColor(Color(hex: "bbbbbb")) | ||||
|                         .lineLimit(1) | ||||
|                         .padding(.leading, 3) | ||||
|                 } else { | ||||
|                     HStack(spacing: 0) { | ||||
|                         TextField("댓글을 입력해 보세요.", text: $comment) | ||||
|                             .autocapitalization(.none) | ||||
|                             .disableAutocorrection(true) | ||||
|                             .font(.custom(Font.medium.rawValue, size: 13.3)) | ||||
|                             .foregroundColor(Color(hex: "eeeeee")) | ||||
|                             .accentColor(Color(hex: "3bb9f1")) | ||||
|                             .keyboardType(.default) | ||||
|                             .padding(.horizontal, 13.3) | ||||
|                          | ||||
|                         Spacer() | ||||
|                          | ||||
|                         Image("btn_message_send") | ||||
|                             .resizable() | ||||
|                             .frame(width: 35, height: 35) | ||||
|                             .padding(6.7) | ||||
|                             .onTapGesture { | ||||
|                                 hideKeyboard() | ||||
|                                 registerComment(comment) | ||||
|                             } | ||||
|                     } | ||||
|                     .background(Color(hex: "232323")) | ||||
|                     .cornerRadius(10) | ||||
|                     .overlay( | ||||
|                         RoundedRectangle(cornerRadius: 10) | ||||
|                             .strokeBorder(lineWidth: 1) | ||||
|                             .foregroundColor(Color(hex: "3bb9f1")) | ||||
|                     ) | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         .padding(11) | ||||
|         .background(Color(hex: "ffffff").opacity(0.1)) | ||||
|         .cornerRadius(5.3) | ||||
|     } | ||||
| } | ||||
|  | ||||
| struct CreatorCommunityCommentView_Previews: PreviewProvider { | ||||
|     static var previews: some View { | ||||
|         CreatorCommunityCommentView( | ||||
|             commentCount: 0, | ||||
|             commentList: [ | ||||
|                 "내용 읽어보니까 결혼해도 될것 같은데", | ||||
|                 "너무 조하유 앞으로도 좋은 라이브 많이 들려주세요" | ||||
|             ], | ||||
|             registerComment: { _ in } | ||||
|         ) | ||||
|     } | ||||
| } | ||||
| @@ -74,7 +74,11 @@ struct UserProfileView: View { | ||||
|                                             CreatorCommunityItemView() | ||||
|                                                 .frame(width: 320) | ||||
|                                              | ||||
|                                             CreatorCommunityMoreItemView() | ||||
|                                             CreatorCommunityMoreItemView { | ||||
|                                                 AppState.shared.setAppStep( | ||||
|                                                     step: .creatorCommunityAll(creatorId: userId) | ||||
|                                                 ) | ||||
|                                             } | ||||
|                                         } | ||||
|                                         .padding(.horizontal, 15) | ||||
|                                     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Yu Sung
					Yu Sung