refactor(navigation): 전역 경로 기반 단일 내비게이션 흐름으로 전환한다
This commit is contained in:
@@ -10,6 +10,7 @@ import SwiftUI
|
||||
struct SeriesMainByGenreView: View {
|
||||
|
||||
@StateObject var viewModel = SeriesMainByGenreViewModel()
|
||||
@State private var isInitialized = false
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
@@ -41,17 +42,16 @@ struct SeriesMainByGenreView: View {
|
||||
) {
|
||||
ForEach(viewModel.seriesList.indices, id: \.self) { index in
|
||||
let item = viewModel.seriesList[index]
|
||||
NavigationLink {
|
||||
SeriesDetailView(seriesId: item.seriesId)
|
||||
} label: {
|
||||
SeriesMainItemView(item: item, width: width, height: width * 227 / 160)
|
||||
.contentShape(Rectangle())
|
||||
.onAppear {
|
||||
if index == viewModel.seriesList.count - 1 {
|
||||
viewModel.getSeriesListByGenre()
|
||||
}
|
||||
SeriesMainItemView(item: item, width: width, height: width * 227 / 160)
|
||||
.contentShape(Rectangle())
|
||||
.onAppear {
|
||||
if index == viewModel.seriesList.count - 1 {
|
||||
viewModel.getSeriesListByGenre()
|
||||
}
|
||||
}
|
||||
}
|
||||
.onTapGesture {
|
||||
AppState.shared.setAppStep(step: .seriesDetail(seriesId: item.seriesId))
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, horizontalPadding)
|
||||
@@ -73,7 +73,10 @@ struct SeriesMainByGenreView: View {
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
viewModel.getGenreList()
|
||||
if !isInitialized {
|
||||
viewModel.getGenreList()
|
||||
isInitialized = true
|
||||
}
|
||||
}
|
||||
|
||||
if viewModel.isLoading {
|
||||
|
||||
@@ -75,17 +75,14 @@ struct SeriesMainDayOfWeekView: View {
|
||||
) {
|
||||
ForEach(viewModel.seriesList.indices, id: \.self) { index in
|
||||
let item = viewModel.seriesList[index]
|
||||
NavigationLink {
|
||||
SeriesDetailView(seriesId: item.seriesId)
|
||||
} label: {
|
||||
SeriesMainItemView(item: item, width: width, height: width * 227 / 160)
|
||||
.contentShape(Rectangle())
|
||||
.onAppear {
|
||||
if index == viewModel.seriesList.count - 1 {
|
||||
viewModel.getDayOfWeekSeriesList(dayOfWeek: dayOfWeek)
|
||||
}
|
||||
SeriesMainItemView(item: item, width: width, height: width * 227 / 160)
|
||||
.contentShape(Rectangle())
|
||||
.onAppear {
|
||||
if index == viewModel.seriesList.count - 1 {
|
||||
viewModel.getDayOfWeekSeriesList(dayOfWeek: dayOfWeek)
|
||||
}
|
||||
}
|
||||
}
|
||||
.onTapGesture { AppState.shared.setAppStep(step: .seriesDetail(seriesId: item.seriesId)) }
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, horizontalPadding)
|
||||
|
||||
@@ -22,11 +22,8 @@ struct SeriesMainHomeBannerView: View {
|
||||
ForEach(0..<bannerList.count, id: \.self) { index in
|
||||
let item = bannerList[index]
|
||||
|
||||
NavigationLink {
|
||||
SeriesDetailView(seriesId: item.seriesId)
|
||||
} label: {
|
||||
SeriesMainHomeBannerImageView(url: item.imagePath, width: width, height: height)
|
||||
}
|
||||
SeriesMainHomeBannerImageView(url: item.imagePath, width: width, height: height)
|
||||
.onTapGesture { AppState.shared.setAppStep(step: .seriesDetail(seriesId: item.seriesId)) }
|
||||
}
|
||||
}
|
||||
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
|
||||
|
||||
@@ -10,6 +10,7 @@ import SwiftUI
|
||||
struct SeriesMainHomeView: View {
|
||||
|
||||
@StateObject var viewModel = SeriesMainHomeViewModel()
|
||||
@State private var isInitialized = false
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
@@ -43,11 +44,10 @@ struct SeriesMainHomeView: View {
|
||||
LazyHStack(spacing: 16) {
|
||||
ForEach(0..<viewModel.completedSeriesList.count, id: \.self) {
|
||||
let item = viewModel.completedSeriesList[$0]
|
||||
NavigationLink {
|
||||
SeriesDetailView(seriesId: item.seriesId)
|
||||
} label: {
|
||||
SeriesMainItemView(item: item)
|
||||
}
|
||||
SeriesMainItemView(item: item)
|
||||
.onTapGesture {
|
||||
AppState.shared.setAppStep(step: .seriesDetail(seriesId: item.seriesId))
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, 24)
|
||||
@@ -89,11 +89,10 @@ struct SeriesMainHomeView: View {
|
||||
) {
|
||||
ForEach(viewModel.recommendSeriesList.indices, id: \.self) {
|
||||
let item = viewModel.recommendSeriesList[$0]
|
||||
NavigationLink {
|
||||
SeriesDetailView(seriesId: item.seriesId)
|
||||
} label: {
|
||||
SeriesMainItemView(item: item, width: width, height: width * 227 / 160)
|
||||
}
|
||||
SeriesMainItemView(item: item, width: width, height: width * 227 / 160)
|
||||
.onTapGesture {
|
||||
AppState.shared.setAppStep(step: .seriesDetail(seriesId: item.seriesId))
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, horizontalPadding)
|
||||
@@ -117,7 +116,10 @@ struct SeriesMainHomeView: View {
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
viewModel.fetchHome()
|
||||
if !isInitialized {
|
||||
viewModel.fetchHome()
|
||||
isInitialized = true
|
||||
}
|
||||
}
|
||||
|
||||
if viewModel.isLoading {
|
||||
|
||||
@@ -25,7 +25,7 @@ struct SeriesMainView: View {
|
||||
@State private var selectedTab: InnerTab = .home
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
Group {
|
||||
BaseView {
|
||||
VStack(spacing: 0) {
|
||||
DetailNavigationBar(title: "시리즈 전체보기")
|
||||
|
||||
@@ -9,7 +9,8 @@ import SwiftUI
|
||||
|
||||
struct SeriesListAllView: View {
|
||||
|
||||
@ObservedObject var viewModel = SeriesListAllViewModel()
|
||||
@StateObject var viewModel = SeriesListAllViewModel()
|
||||
@State private var isInitialized = false
|
||||
|
||||
var creatorId: Int? = nil
|
||||
var creatorNickname: String? = nil
|
||||
@@ -18,7 +19,7 @@ struct SeriesListAllView: View {
|
||||
var isCompleted = false
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
Group {
|
||||
BaseView(isLoading: $viewModel.isLoading) {
|
||||
VStack(spacing: 0) {
|
||||
if isCompleted {
|
||||
@@ -48,17 +49,16 @@ struct SeriesListAllView: View {
|
||||
) {
|
||||
ForEach(0..<viewModel.seriesList.count, id: \.self) { index in
|
||||
let item = viewModel.seriesList[index]
|
||||
NavigationLink {
|
||||
SeriesDetailView(seriesId: item.seriesId)
|
||||
} label: {
|
||||
SeriesMainItemView(item: item, width: width, height: width * 227 / 160)
|
||||
.contentShape(Rectangle())
|
||||
.onAppear {
|
||||
if index == viewModel.seriesList.count - 1 {
|
||||
viewModel.getSeriesList()
|
||||
}
|
||||
SeriesMainItemView(item: item, width: width, height: width * 227 / 160)
|
||||
.contentShape(Rectangle())
|
||||
.onAppear {
|
||||
if index == viewModel.seriesList.count - 1 {
|
||||
viewModel.getSeriesList()
|
||||
}
|
||||
}
|
||||
}
|
||||
.onTapGesture {
|
||||
AppState.shared.setAppStep(step: .seriesDetail(seriesId: item.seriesId))
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(horizontalPadding)
|
||||
@@ -67,10 +67,24 @@ struct SeriesListAllView: View {
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
viewModel.creatorId = creatorId
|
||||
viewModel.isOriginal = isOriginal
|
||||
viewModel.isCompleted = isCompleted
|
||||
viewModel.getSeriesList()
|
||||
let hasFilterChanged =
|
||||
viewModel.creatorId != creatorId ||
|
||||
viewModel.isOriginal != isOriginal ||
|
||||
viewModel.isCompleted != isCompleted
|
||||
|
||||
if !isInitialized || hasFilterChanged {
|
||||
if hasFilterChanged {
|
||||
viewModel.page = 1
|
||||
viewModel.isLast = false
|
||||
viewModel.seriesList.removeAll()
|
||||
}
|
||||
|
||||
viewModel.creatorId = creatorId
|
||||
viewModel.isOriginal = isOriginal
|
||||
viewModel.isCompleted = isCompleted
|
||||
viewModel.getSeriesList()
|
||||
isInitialized = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user