시리즈 콘텐츠 리스트

- 정렬(최신순, 등록순) 추가
This commit is contained in:
Yu Sung 2024-09-10 18:05:05 +09:00
parent 7c5b30335e
commit 8aa69f02fc
6 changed files with 52 additions and 8 deletions

View File

@ -20,6 +20,37 @@ struct SeriesContentAllView: View {
VStack(spacing: 0) { VStack(spacing: 0) {
DetailNavigationBar(title: "\(seriesTitle) - 전체회차 듣기") DetailNavigationBar(title: "\(seriesTitle) - 전체회차 듣기")
HStack(spacing: 13.3) {
Spacer()
Text("최신순")
.font(.custom(Font.medium.rawValue, size: 13.3))
.foregroundColor(
Color.graye2
.opacity(viewModel.sortType == .NEWEST ? 1 : 0.5)
)
.onTapGesture {
if viewModel.sortType != .NEWEST {
viewModel.sortType = .NEWEST
}
}
Text("등록순")
.font(.custom(Font.medium.rawValue, size: 13.3))
.foregroundColor(
Color.graye2
.opacity(viewModel.sortType == .OLDEST ? 1 : 0.5)
)
.onTapGesture {
if viewModel.sortType != .OLDEST {
viewModel.sortType = .OLDEST
}
}
}
.padding(.vertical, 13.3)
.padding(.horizontal, 20)
.background(Color.gray16)
ScrollView(.vertical, showsIndicators: false) { ScrollView(.vertical, showsIndicators: false) {
VStack(spacing: 12) { VStack(spacing: 12) {
ForEach(0..<viewModel.seriesContentList.count, id: \.self) { index in ForEach(0..<viewModel.seriesContentList.count, id: \.self) { index in

View File

@ -19,14 +19,24 @@ final class SeriesContentAllViewModel: ObservableObject {
@Published var isShowPopup = false @Published var isShowPopup = false
@Published var seriesContentList = [GetSeriesContentListItem]() @Published var seriesContentList = [GetSeriesContentListItem]()
@Published var sortType: SeriesListAllViewModel.SeriesSortType = .NEWEST {
didSet {
page = 1
isLast = false
getSeriesContentList()
}
}
var page = 1 var page = 1
var isLast = false var isLast = false
private let pageSize = 10 private let pageSize = 10
func getSeriesContentList() { func getSeriesContentList() {
if !isLoading && !isLast { if !isLoading && !isLast {
isLoading = true
repository repository
.getSeriesContentList(seriesId: seriesId, page: page, size: pageSize) .getSeriesContentList(seriesId: seriesId, page: page, size: pageSize, sortType: sortType)
.sink { result in .sink { result in
switch result { switch result {
case .finished: case .finished:

View File

@ -11,7 +11,7 @@ import Moya
enum SeriesApi { enum SeriesApi {
case getSeriesList(creatorId: Int, sortType: SeriesListAllViewModel.SeriesSortType, page: Int, size: Int) case getSeriesList(creatorId: Int, sortType: SeriesListAllViewModel.SeriesSortType, page: Int, size: Int)
case getSeriesDetail(seriesId: Int) case getSeriesDetail(seriesId: Int)
case getSeriesContentList(seriesId: Int, page: Int, size: Int) case getSeriesContentList(seriesId: Int, page: Int, size: Int, sortType: SeriesListAllViewModel.SeriesSortType)
case getRecommendSeriesList case getRecommendSeriesList
} }
@ -28,7 +28,7 @@ extension SeriesApi: TargetType {
case .getSeriesDetail(let seriesId): case .getSeriesDetail(let seriesId):
return "/audio-content/series/\(seriesId)" return "/audio-content/series/\(seriesId)"
case .getSeriesContentList(let seriesId, _, _): case .getSeriesContentList(let seriesId, _, _, _):
return "/audio-content/series/\(seriesId)/content" return "/audio-content/series/\(seriesId)/content"
case .getRecommendSeriesList: case .getRecommendSeriesList:
@ -58,10 +58,11 @@ extension SeriesApi: TargetType {
case .getSeriesDetail, .getRecommendSeriesList: case .getSeriesDetail, .getRecommendSeriesList:
return .requestPlain return .requestPlain
case .getSeriesContentList(_, let page, let size): case .getSeriesContentList(_, let page, let size, let sortType):
let parameters = [ let parameters = [
"page": page - 1, "page": page - 1,
"size": size "size": size,
"sortType": sortType
] as [String : Any] ] as [String : Any]
return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString) return .requestParameters(parameters: parameters, encoding: URLEncoding.queryString)

View File

@ -13,7 +13,7 @@ final class SeriesListAllViewModel: ObservableObject {
private var subscription = Set<AnyCancellable>() private var subscription = Set<AnyCancellable>()
enum SeriesSortType: String { enum SeriesSortType: String {
case NEWEST, POPULAR case NEWEST, OLDEST
} }
var creatorId: Int = 0 var creatorId: Int = 0

View File

@ -21,8 +21,8 @@ class SeriesRepository {
return api.requestPublisher(.getSeriesDetail(seriesId: seriesId)) return api.requestPublisher(.getSeriesDetail(seriesId: seriesId))
} }
func getSeriesContentList(seriesId: Int, page: Int, size: Int) -> AnyPublisher<Response, MoyaError> { func getSeriesContentList(seriesId: Int, page: Int, size: Int, sortType: SeriesListAllViewModel.SeriesSortType) -> AnyPublisher<Response, MoyaError> {
return api.requestPublisher(.getSeriesContentList(seriesId: seriesId, page: page, size: size)) return api.requestPublisher(.getSeriesContentList(seriesId: seriesId, page: page, size: size, sortType: sortType))
} }
func getRecommendSeriesList() -> AnyPublisher<Response, MoyaError> { func getRecommendSeriesList() -> AnyPublisher<Response, MoyaError> {

View File

@ -14,6 +14,7 @@ extension Color {
static let button = Color(hex: "3bb9f1") static let button = Color(hex: "3bb9f1")
static let bg = Color(hex: "13181B") static let bg = Color(hex: "13181B")
static let gray11 = Color(hex: "111111") static let gray11 = Color(hex: "111111")
static let gray16 = Color(hex: "161616")
static let gray22 = Color(hex: "222222") static let gray22 = Color(hex: "222222")
static let gray23 = Color(hex: "232323") static let gray23 = Color(hex: "232323")
static let gray30 = Color(hex: "303030") static let gray30 = Color(hex: "303030")
@ -27,6 +28,7 @@ extension Color {
static let graybb = Color(hex: "bbbbbb") static let graybb = Color(hex: "bbbbbb")
static let grayd2 = Color(hex: "d2d2d2") static let grayd2 = Color(hex: "d2d2d2")
static let grayd8 = Color(hex: "d8d8d8") static let grayd8 = Color(hex: "d8d8d8")
static let graye2 = Color(hex: "e2e2e2")
static let grayee = Color(hex: "eeeeee") static let grayee = Color(hex: "eeeeee")
static let mainRed = Color(hex: "ff5c49") static let mainRed = Color(hex: "ff5c49")