feat(series-list-all): 완결시리즈 전체보기 페이지 추가
This commit is contained in:
@@ -128,7 +128,7 @@ enum AppStep {
|
|||||||
|
|
||||||
case seriesDetail(seriesId: Int)
|
case seriesDetail(seriesId: Int)
|
||||||
|
|
||||||
case seriesAll(creatorId: Int? = nil, creatorNickname: String? = nil, isOriginal: Bool = false)
|
case seriesAll(creatorId: Int? = nil, creatorNickname: String? = nil, isOriginal: Bool = false, isCompleted: Bool = false)
|
||||||
|
|
||||||
case seriesContentAll(seriesId: Int, seriesTitle: String)
|
case seriesContentAll(seriesId: Int, seriesTitle: String)
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ struct SeriesMainHomeView: View {
|
|||||||
Text("전체보기")
|
Text("전체보기")
|
||||||
.font(.custom(Font.preRegular.rawValue, size: 14))
|
.font(.custom(Font.preRegular.rawValue, size: 14))
|
||||||
.foregroundColor(.init(hex: "78909C"))
|
.foregroundColor(.init(hex: "78909C"))
|
||||||
|
.onTapGesture {
|
||||||
|
AppState.shared
|
||||||
|
.setAppStep(step: .seriesAll(isCompleted: true))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.padding(.horizontal, 24)
|
.padding(.horizontal, 24)
|
||||||
|
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ struct SeriesMainItemView: View {
|
|||||||
.font(.custom(Font.preRegular.rawValue, size: 18))
|
.font(.custom(Font.preRegular.rawValue, size: 18))
|
||||||
.foregroundColor(Color(hex: "B0BEC5"))
|
.foregroundColor(Color(hex: "B0BEC5"))
|
||||||
.lineLimit(1)
|
.lineLimit(1)
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
.padding(.horizontal, 8)
|
.padding(.horizontal, 8)
|
||||||
|
|
||||||
Text(item.creator.nickname)
|
Text(item.creator.nickname)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import Foundation
|
|||||||
import Moya
|
import Moya
|
||||||
|
|
||||||
enum SeriesApi {
|
enum SeriesApi {
|
||||||
case getSeriesList(creatorId: Int?, isOriginal: Bool, sortType: SeriesListAllViewModel.SeriesSortType, isAdultContentVisible: Bool, contentType: ContentType, page: Int, size: Int)
|
case getSeriesList(creatorId: Int?, isOriginal: Bool, isCompleted: Bool, sortType: SeriesListAllViewModel.SeriesSortType, isAdultContentVisible: Bool, contentType: ContentType, page: Int, size: Int)
|
||||||
case getSeriesDetail(seriesId: Int, isAdultContentVisible: Bool)
|
case getSeriesDetail(seriesId: Int, isAdultContentVisible: Bool)
|
||||||
case getSeriesContentList(seriesId: Int, isAdultContentVisible: Bool, page: Int, size: Int, sortType: SeriesListAllViewModel.SeriesSortType)
|
case getSeriesContentList(seriesId: Int, isAdultContentVisible: Bool, page: Int, size: Int, sortType: SeriesListAllViewModel.SeriesSortType)
|
||||||
case getRecommendSeriesList(isAdultContentVisible: Bool, contentType: ContentType)
|
case getRecommendSeriesList(isAdultContentVisible: Bool, contentType: ContentType)
|
||||||
@@ -45,12 +45,13 @@ extension SeriesApi: TargetType {
|
|||||||
|
|
||||||
var task: Moya.Task {
|
var task: Moya.Task {
|
||||||
switch self {
|
switch self {
|
||||||
case .getSeriesList(let creatorId, let isOriginal, let sortType, let isAdultContentVisible, let contentType, let page, let size):
|
case .getSeriesList(let creatorId, let isOriginal, let isCompleted, let sortType, let isAdultContentVisible, let contentType, let page, let size):
|
||||||
var parameters = [
|
var parameters = [
|
||||||
"sortType": sortType,
|
"sortType": sortType,
|
||||||
"isAdultContentVisible": isAdultContentVisible,
|
"isAdultContentVisible": isAdultContentVisible,
|
||||||
"contentType": contentType,
|
"contentType": contentType,
|
||||||
"isOriginal": isOriginal,
|
"isOriginal": isOriginal,
|
||||||
|
"isCompleted": isCompleted,
|
||||||
"page": page - 1,
|
"page": page - 1,
|
||||||
"size": size
|
"size": size
|
||||||
] as [String : Any]
|
] as [String : Any]
|
||||||
|
|||||||
@@ -15,12 +15,15 @@ struct SeriesListAllView: View {
|
|||||||
var creatorNickname: String? = nil
|
var creatorNickname: String? = nil
|
||||||
|
|
||||||
var isOriginal = false
|
var isOriginal = false
|
||||||
|
var isCompleted = false
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationView {
|
NavigationView {
|
||||||
BaseView(isLoading: $viewModel.isLoading) {
|
BaseView(isLoading: $viewModel.isLoading) {
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
if isOriginal {
|
if isCompleted {
|
||||||
|
DetailNavigationBar(title: "완결 시리즈")
|
||||||
|
} else if isOriginal {
|
||||||
DetailNavigationBar(title: "오직 보이스온에서만")
|
DetailNavigationBar(title: "오직 보이스온에서만")
|
||||||
} else {
|
} else {
|
||||||
DetailNavigationBar(title: "\(creatorNickname ?? "") 님의 시리즈 전체보기")
|
DetailNavigationBar(title: "\(creatorNickname ?? "") 님의 시리즈 전체보기")
|
||||||
@@ -66,6 +69,7 @@ struct SeriesListAllView: View {
|
|||||||
.onAppear {
|
.onAppear {
|
||||||
viewModel.creatorId = creatorId
|
viewModel.creatorId = creatorId
|
||||||
viewModel.isOriginal = isOriginal
|
viewModel.isOriginal = isOriginal
|
||||||
|
viewModel.isCompleted = isCompleted
|
||||||
viewModel.getSeriesList()
|
viewModel.getSeriesList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ final class SeriesListAllViewModel: ObservableObject {
|
|||||||
|
|
||||||
var creatorId: Int? = nil
|
var creatorId: Int? = nil
|
||||||
var isOriginal: Bool = false
|
var isOriginal: Bool = false
|
||||||
|
var isCompleted: Bool = false
|
||||||
|
|
||||||
@Published var isLoading = false
|
@Published var isLoading = false
|
||||||
@Published var errorMessage = ""
|
@Published var errorMessage = ""
|
||||||
@@ -26,13 +27,13 @@ final class SeriesListAllViewModel: ObservableObject {
|
|||||||
|
|
||||||
var page = 1
|
var page = 1
|
||||||
var isLast = false
|
var isLast = false
|
||||||
private let pageSize = 10
|
private let pageSize = 20
|
||||||
|
|
||||||
func getSeriesList() {
|
func getSeriesList() {
|
||||||
if !isLoading && !isLast {
|
if !isLoading && !isLast {
|
||||||
isLoading = true
|
isLoading = true
|
||||||
repository
|
repository
|
||||||
.getSeriesList(creatorId: creatorId, isOriginal: isOriginal, sortType: .NEWEST, page: page, size: pageSize)
|
.getSeriesList(creatorId: creatorId, isOriginal: isOriginal, isCompleted: isCompleted, sortType: .NEWEST, page: page, size: pageSize)
|
||||||
.sink { result in
|
.sink { result in
|
||||||
switch result {
|
switch result {
|
||||||
case .finished:
|
case .finished:
|
||||||
|
|||||||
@@ -13,11 +13,12 @@ import Moya
|
|||||||
class SeriesRepository {
|
class SeriesRepository {
|
||||||
private let api = MoyaProvider<SeriesApi>()
|
private let api = MoyaProvider<SeriesApi>()
|
||||||
|
|
||||||
func getSeriesList(creatorId: Int?, isOriginal: Bool, sortType: SeriesListAllViewModel.SeriesSortType, page: Int, size: Int) -> AnyPublisher<Response, MoyaError> {
|
func getSeriesList(creatorId: Int?, isOriginal: Bool, isCompleted: Bool, sortType: SeriesListAllViewModel.SeriesSortType, page: Int, size: Int) -> AnyPublisher<Response, MoyaError> {
|
||||||
return api.requestPublisher(
|
return api.requestPublisher(
|
||||||
.getSeriesList(
|
.getSeriesList(
|
||||||
creatorId: creatorId,
|
creatorId: creatorId,
|
||||||
isOriginal: isOriginal,
|
isOriginal: isOriginal,
|
||||||
|
isCompleted: isCompleted,
|
||||||
sortType: sortType,
|
sortType: sortType,
|
||||||
isAdultContentVisible: UserDefaults.isAdultContentVisible(),
|
isAdultContentVisible: UserDefaults.isAdultContentVisible(),
|
||||||
contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL,
|
contentType: ContentType(rawValue: UserDefaults.string(forKey: .contentPreference)) ?? ContentType.ALL,
|
||||||
|
|||||||
@@ -193,8 +193,8 @@ struct ContentView: View {
|
|||||||
case .contentAllByTheme(let themeId):
|
case .contentAllByTheme(let themeId):
|
||||||
ContentAllByThemeView(themeId: themeId)
|
ContentAllByThemeView(themeId: themeId)
|
||||||
|
|
||||||
case .seriesAll(let creatorId, let creatorNickname, let isOriginal):
|
case .seriesAll(let creatorId, let creatorNickname, let isOriginal, let isCompleted):
|
||||||
SeriesListAllView(creatorId: creatorId, creatorNickname: creatorNickname, isOriginal: isOriginal)
|
SeriesListAllView(creatorId: creatorId, creatorNickname: creatorNickname, isOriginal: isOriginal, isCompleted: isCompleted)
|
||||||
|
|
||||||
case .seriesDetail(let seriesId):
|
case .seriesDetail(let seriesId):
|
||||||
SeriesDetailView(seriesId: seriesId)
|
SeriesDetailView(seriesId: seriesId)
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ struct SeriesListItemView: View {
|
|||||||
.font(.custom(Font.preMedium.rawValue, size: 18))
|
.font(.custom(Font.preMedium.rawValue, size: 18))
|
||||||
.foregroundColor(Color.grayee)
|
.foregroundColor(Color.grayee)
|
||||||
.lineLimit(2)
|
.lineLimit(2)
|
||||||
|
.multilineTextAlignment(.leading)
|
||||||
.frame(width: itemWidth, alignment: .leading)
|
.frame(width: itemWidth, alignment: .leading)
|
||||||
|
|
||||||
Text(item.publishedDaysOfWeek)
|
Text(item.publishedDaysOfWeek)
|
||||||
|
|||||||
Reference in New Issue
Block a user