Skip to content

Commit 4a50487

Browse files
wotjs020708y-eonee
authored andcommitted
fix: #172 시술 플로우 로딩 추가
1 parent c44ed7e commit 4a50487

5 files changed

Lines changed: 113 additions & 102 deletions

File tree

Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,35 +25,36 @@ struct NoTreatmentFilterView: View {
2525
var body: some View {
2626
VStack(spacing: 0) {
2727
TitleHeaderView(title: viewModel.selectedCategory?.title ?? "")
28-
29-
ScrollView(.vertical, showsIndicators: false){
30-
Spacer()
31-
.frame(height: 18.adjustedH)
32-
33-
ForEach(viewModel.treatments, id: \.id) { treatment in
34-
TreatmentRowView(
35-
displayMode: .checkBoxView,
36-
treatmentEntity: treatment,
37-
isSelected: .constant(viewModel.isSelected(treatment)),
38-
action: {
39-
if viewModel.isSelected(treatment) {
40-
viewModel.removeTreatment(treatment)
41-
} else {
42-
viewModel.addTreatment(treatment)
43-
44-
}
45-
}
46-
)
47-
.padding(.horizontal, 25.adjustedW)
28+
if viewModel.isLoading {
29+
CherrishLoadingView()
30+
} else {
31+
ScrollView(.vertical, showsIndicators: false) {
32+
Spacer()
33+
.frame(height: 18.adjustedH)
4834

35+
ForEach(viewModel.treatments, id: \.id) { treatment in
36+
TreatmentRowView(
37+
displayMode: .checkBoxView,
38+
treatmentEntity: treatment,
39+
isSelected: .constant(viewModel.isSelected(treatment)),
40+
action: {
41+
if viewModel.isSelected(treatment) {
42+
viewModel.removeTreatment(treatment)
43+
} else {
44+
viewModel.addTreatment(treatment)
45+
46+
}
47+
}
48+
)
49+
.padding(.horizontal, 25.adjustedW)
50+
51+
}
52+
Spacer()
53+
.frame(height: 198.adjustedH)
4954
}
50-
Spacer()
51-
.frame(
52-
height: viewModel.selectedTreatments.isEmpty ?
53-
24.adjustedH : scrollViewHeight.adjustedH + 24.adjustedH
54-
)
5555
}
5656

57+
5758
}
5859
.task {
5960
await viewModel.fetchNoTreatments()

Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift

Lines changed: 55 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -151,63 +151,67 @@ private struct TreatmentSelectedCategory: View {
151151
]
152152

153153
var body: some View {
154-
VStack(spacing: 0) {
155-
Spacer()
156-
.frame(height: 50.adjustedH)
157-
158-
HStack(spacing: 0) {
159-
VStack(alignment: .leading, spacing: 0) {
160-
TypographyText(
161-
"요즘 가장 신경 쓰이는 ",
162-
style: .title1_sb_18,
163-
color: .gray1000
164-
)
165-
.frame(height: 27.adjustedH)
154+
if viewModel.isLoading {
155+
CherrishLoadingView()
156+
} else {
157+
VStack(spacing: 0) {
158+
Spacer()
159+
.frame(height: 50.adjustedH)
160+
161+
HStack(spacing: 0) {
162+
VStack(alignment: .leading, spacing: 0) {
163+
TypographyText(
164+
"요즘 가장 신경 쓰이는 ",
165+
style: .title1_sb_18,
166+
color: .gray1000
167+
)
168+
.frame(height: 27.adjustedH)
169+
170+
TypographyText(
171+
"외모 고민은 무엇인가요?",
172+
style: .title1_sb_18,
173+
color: .gray1000
174+
)
175+
.frame(height: 27.adjustedH)
176+
Spacer()
177+
.frame(height: 4.adjustedH)
178+
TypographyText(
179+
"선택한 고민을 기준으로 시술 정보를 정리해줘요.",
180+
style: .body1_m_14,
181+
color: .gray700
182+
)
183+
.frame(height: 20.adjustedH)
184+
185+
}
186+
.frame(height: 78.adjustedH)
166187

167-
TypographyText(
168-
"외모 고민은 무엇인가요?",
169-
style: .title1_sb_18,
170-
color: .gray1000
171-
)
172-
.frame(height: 27.adjustedH)
173188
Spacer()
174-
.frame(height: 4.adjustedH)
175-
TypographyText(
176-
"선택한 고민을 기준으로 시술 정보를 정리해줘요.",
177-
style: .body1_m_14,
178-
color: .gray700
179-
)
180-
.frame(height: 20.adjustedH)
181-
182189
}
183-
.frame(height: 78.adjustedH)
190+
.padding(.horizontal, 34.adjustedW)
184191

185-
Spacer()
186-
}
187-
.padding(.horizontal, 34.adjustedW)
188-
189-
ScrollView(.vertical, showsIndicators:false) {
190-
Spacer()
191-
.frame(height: 40.adjustedH)
192-
LazyVGrid(columns: columns, spacing: 12.adjustedH) {
193-
ForEach(viewModel.categories, id: \.id) { category in
194-
SelectionChip(
195-
title: category.title,
196-
isSelected: Binding(
197-
get: {
198-
viewModel.selectedCategory == category
199-
},
200-
set: {
201-
isSelected in
202-
guard isSelected else {
203-
return
192+
ScrollView(.vertical, showsIndicators:false) {
193+
Spacer()
194+
.frame(height: 40.adjustedH)
195+
LazyVGrid(columns: columns, spacing: 12.adjustedH) {
196+
ForEach(viewModel.categories, id: \.id) { category in
197+
SelectionChip(
198+
title: category.title,
199+
isSelected: Binding(
200+
get: {
201+
viewModel.selectedCategory == category
202+
},
203+
set: {
204+
isSelected in
205+
guard isSelected else {
206+
return
207+
}
208+
viewModel.selectCategory(category)
204209
}
205-
viewModel.selectCategory(category)
206-
}
210+
)
207211
)
208-
)
209-
}
210-
} .padding(.horizontal, 34.adjustedW)
212+
}
213+
} .padding(.horizontal, 34.adjustedW)
214+
}
211215
}
212216
}
213217
}

Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -50,35 +50,32 @@ struct TreatmentFilterView: View {
5050
}
5151
.frame(height: 34.adjustedH)
5252
.padding(.horizontal, 25.adjustedW)
53-
54-
Spacer()
55-
.frame(height: 20.adjustedH)
56-
57-
if viewModel.treatments.isEmpty {
58-
Spacer()
59-
.frame(height: 148.adjustedH)
60-
filterEmptyView
53+
if viewModel.isLoading {
54+
CherrishLoadingView()
6155
} else {
62-
ForEach(viewModel.treatments, id: \.id) { treatment in
63-
TreatmentRowView(
64-
displayMode: .checkBoxView,
65-
treatmentEntity: treatment,
66-
isSelected: .constant(viewModel.isSelected(treatment)),
67-
action: { if viewModel.isSelected(treatment) {
68-
viewModel.removeTreatment(treatment)
69-
} else {
70-
viewModel.addTreatment(treatment)
71-
72-
} }
73-
)
56+
if viewModel.treatments.isEmpty {
57+
Spacer()
58+
.frame(height: 148.adjustedH)
59+
filterEmptyView
60+
} else {
61+
ForEach(viewModel.treatments, id: \.id) { treatment in
62+
TreatmentRowView(
63+
displayMode: .checkBoxView,
64+
treatmentEntity: treatment,
65+
isSelected: .constant(viewModel.isSelected(treatment)),
66+
action: { if viewModel.isSelected(treatment) {
67+
viewModel.removeTreatment(treatment)
68+
} else {
69+
viewModel.addTreatment(treatment)
70+
71+
} }
72+
)
73+
}
74+
.padding(.horizontal, 24.adjustedW)
7475
}
75-
.padding(.horizontal, 24.adjustedW)
76+
Spacer()
77+
.frame(height: 198.adjustedH)
7678
}
77-
Spacer()
78-
.frame(
79-
height: viewModel.selectedTreatments.isEmpty ?
80-
24.adjustedH : scrollViewHeight.adjustedH + 24.adjustedH
81-
)
8279
}
8380

8481
}

Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/ViewModel/NoTreatment/NoTreatmentViewModel.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ final class NoTreatmentViewModel: ObservableObject{
1818
@Published var month: String = ""
1919
@Published var day: String = ""
2020
@Published private(set) var warning: TreatmentInputWarning = .none
21+
@Published private(set) var isLoading: Bool = false
2122

2223
private let fetchCategoriesUseCase: FetchTreatmentCategoriesUseCase
2324
private let fetchTreatmentsUseCase: FetchTreatmentsUseCase
@@ -71,17 +72,21 @@ final class NoTreatmentViewModel: ObservableObject{
7172

7273
@MainActor
7374
func fetchCategories() async {
75+
isLoading = true
7476
do {
7577
categories = try await fetchCategoriesUseCase.execute()
78+
isLoading = false
7679
} catch {
7780
CherrishLogger.debug(error)
7881
}
7982
}
8083

8184
@MainActor
8285
func fetchNoTreatments() async {
86+
isLoading = true
8387
do {
8488
treatments = try await fetchTreatmentsUseCase.execute(id: selectedCategory?.id, keyword: "")
89+
isLoading = false
8590
} catch {
8691
treatments = []
8792
CherrishLogger.debug(error)

Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/ViewModel/Treatment/TreatmentViewModel.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ final class TreatmentViewModel: ObservableObject{
1818
@Published var day: String = ""
1919
@Published var searchText = ""
2020
@Published private(set) var warning: TreatmentInputWarning = .none
21+
@Published private(set) var isLoading: Bool = false
2122

2223
private let fetchTreatmentsUseCase: FetchTreatmentsUseCase
2324
private let createUserProcedureUseCase: CreateUserProcedureUseCase
@@ -63,10 +64,13 @@ final class TreatmentViewModel: ObservableObject{
6364

6465
@MainActor
6566
func fetchTreatments() async throws {
67+
isLoading = true
6668
do {
6769
treatments = try await fetchTreatmentsUseCase.execute(id: nil, keyword: searchText)
70+
isLoading = false
6871
} catch {
6972
treatments = []
73+
CherrishLogger.network(error)
7074
}
7175
}
7276

0 commit comments

Comments
 (0)