Skip to content

Commit 9d1f23c

Browse files
committed
[#477] HomeListView 선택 로직 수정 및 불필요한 코드 삭제
1 parent 2d270b2 commit 9d1f23c

File tree

4 files changed

+129
-144
lines changed

4 files changed

+129
-144
lines changed

Presentation/Home/HomeListView.swift

+60-99
Original file line numberDiff line numberDiff line change
@@ -10,98 +10,16 @@ import SwiftUI
1010
struct HomeListView: View {
1111
@EnvironmentObject private var homeViewModel: HomeViewModel
1212
@Binding var createFolder: Bool
13-
@Binding var selectedFolderID: UUID?
1413
@State private var expandedFolders: Set<UUID> = []
1514

16-
@State private var isMainSelected: Bool = true
17-
@State private var isFavoriteSelected: Bool = false
18-
@State private var isTagSelected: Bool = false
15+
@State private var selectedCategory: CategorySelection = .main
1916

2017
var body: some View {
2118
VStack(spacing: 0) {
2219
VStack(spacing: 0) {
23-
RoundedRectangle(cornerRadius: 12)
24-
.foregroundStyle(isMainSelected ? Color(hex: "EFEFF8") : .clear)
25-
.frame(height: 43)
26-
.overlay {
27-
HStack(spacing: 0) {
28-
Image(systemName: isMainSelected ? "text.page.fill" : "text.page")
29-
.font(.system(size: 18))
30-
.foregroundStyle(isMainSelected ? .primary1 : .gray700)
31-
.padding(.trailing, 11)
32-
33-
Text("전체")
34-
.reazyFont(isMainSelected ? .button1 : .text1)
35-
.foregroundStyle(isMainSelected ? .primary1 : .gray700)
36-
37-
Spacer()
38-
}
39-
.padding(.leading, 20)
40-
}
41-
.onTapGesture {
42-
self.isMainSelected = true
43-
self.isFavoriteSelected = false
44-
self.isTagSelected = false
45-
homeViewModel.isFavoriteSelected = false
46-
homeViewModel.isTagSelected = false
47-
}
48-
.padding(.bottom, 3)
49-
50-
RoundedRectangle(cornerRadius: 12)
51-
.foregroundStyle(isFavoriteSelected ? Color(hex: "EFEFF8") : .clear)
52-
.frame(height: 43)
53-
.overlay {
54-
HStack(spacing: 0) {
55-
Image(isFavoriteSelected ? "starfill" : "star")
56-
.renderingMode(.template)
57-
.resizable()
58-
.scaledToFit()
59-
.frame(width: 18, height: 18)
60-
.foregroundStyle(isFavoriteSelected ? .primary1 : .gray700)
61-
.padding(.trailing, 11)
62-
63-
Text("즐겨찾기")
64-
.reazyFont(isFavoriteSelected ? .button1 : .text1)
65-
.foregroundStyle(isFavoriteSelected ? .primary1 : .gray700)
66-
67-
Spacer()
68-
}
69-
.padding(.leading, 20)
70-
}
71-
.onTapGesture {
72-
self.isMainSelected = false
73-
self.isFavoriteSelected = true
74-
self.isTagSelected = false
75-
homeViewModel.isFavoriteSelected = true
76-
homeViewModel.isTagSelected = false
77-
}
78-
.padding(.bottom, 3)
79-
80-
RoundedRectangle(cornerRadius: 12)
81-
.foregroundStyle(isTagSelected ? Color(hex: "EFEFF8") : .clear)
82-
.frame(height: 43)
83-
.overlay {
84-
HStack(spacing: 0) {
85-
Image(systemName: isTagSelected ? "tag.fill" : "tag")
86-
.font(.system(size: 14))
87-
.foregroundStyle(isTagSelected ? .primary1 : .gray700)
88-
.padding(.trailing, 11)
89-
90-
Text("태그")
91-
.reazyFont(isTagSelected ? .button1 : .text1)
92-
.foregroundStyle(isTagSelected ? .primary1 : .gray700)
93-
94-
Spacer()
95-
}
96-
.padding(.leading, 20)
97-
}
98-
.onTapGesture {
99-
self.isMainSelected = false
100-
self.isFavoriteSelected = false
101-
self.isTagSelected = true
102-
homeViewModel.isFavoriteSelected = false
103-
homeViewModel.isTagSelected = true
104-
}
20+
categoryButton(icon: "text.page", selectedIcon: "text.page.fill", title: "전체", category: .main)
21+
categoryButton(image: "star", selectedImage: "starfill", title: "즐겨찾기", category: .favorite)
22+
categoryButton(icon: "tag", selectedIcon: "tag.fill", title: "태그", category: .tag)
10523
}
10624
.padding(.leading, 10)
10725
.padding(.trailing, 12)
@@ -134,6 +52,7 @@ struct HomeListView: View {
13452
}
13553
.padding(.bottom, 14)
13654
.padding(.leading, 20)
55+
.padding(.trailing, 6)
13756

13857
ScrollView {
13958
VStack(spacing: 0) {
@@ -145,22 +64,69 @@ struct HomeListView: View {
14564
childFolders: childFolders(of:),
14665
toggleExpansion: toggleExpansion,
14766
hasChildren: hasChildren(folder:),
148-
selectedFolderID: $selectedFolderID
67+
selectedFolderID: $homeViewModel.selectedFolderID,
68+
didSelectFolder: { folderID in
69+
selectedCategory = .folder(folderID)
70+
homeViewModel.selectCategory(.folder(folderID))
71+
}
14972
)
15073
.padding(.top, 10)
15174
}
15275
}
15376
}
15477
}
15578
.padding(.leading, 10)
156-
.padding(.trailing, 16)
79+
.padding(.trailing, 10)
15780

15881
Spacer()
15982
}
16083
.padding(.top, 24)
16184
.background(.primary2)
16285
}
16386

87+
private func categoryButton(
88+
icon: String? = nil,
89+
selectedIcon: String? = nil,
90+
image: String? = nil,
91+
selectedImage: String? = nil,
92+
title: String,
93+
category: CategorySelection
94+
) -> some View {
95+
RoundedRectangle(cornerRadius: 12)
96+
.foregroundStyle(selectedCategory == category ? Color(hex: "EFEFF8") : .clear)
97+
.frame(height: 43)
98+
.overlay {
99+
HStack(spacing: 0) {
100+
if let icon = icon, let selectedIcon = selectedIcon {
101+
Image(systemName: selectedCategory == category ? selectedIcon : icon)
102+
.font(.system(size: 18))
103+
.foregroundStyle(selectedCategory == category ? .primary1 : .gray700)
104+
.padding(.trailing, 11)
105+
} else if let image = image, let selectedImage = selectedImage {
106+
Image(selectedCategory == category ? selectedImage : image)
107+
.renderingMode(.template)
108+
.resizable()
109+
.scaledToFit()
110+
.frame(width: 18, height: 18)
111+
.foregroundStyle(selectedCategory == category ? .primary1 : .gray700)
112+
.padding(.trailing, 11)
113+
}
114+
115+
Text(title)
116+
.reazyFont(selectedCategory == category ? .button1 : .text1)
117+
.foregroundStyle(selectedCategory == category ? .primary1 : .gray700)
118+
119+
Spacer()
120+
}
121+
.padding(.leading, 20)
122+
}
123+
.onTapGesture {
124+
selectedCategory = category
125+
homeViewModel.selectCategory(category)
126+
}
127+
.padding(.bottom, 3)
128+
}
129+
164130
private var rootFolders: [Folder] {
165131
homeViewModel.folders.filter { $0.parentFolderID == nil }
166132
}
@@ -191,8 +157,8 @@ private struct FolderListCell: View {
191157
let childFolders: (UUID) -> [Folder]
192158
let toggleExpansion: (Folder) -> Void
193159
let hasChildren: (Folder) -> Bool
194-
195160
@Binding var selectedFolderID: UUID?
161+
var didSelectFolder: (UUID) -> Void
196162

197163
var body: some View {
198164
VStack(spacing: 0) {
@@ -230,6 +196,7 @@ private struct FolderListCell: View {
230196
.foregroundStyle(.gray600)
231197
.padding(.trailing, 4)
232198
}
199+
.padding(.trailing, 10)
233200
}
234201
}
235202

@@ -241,7 +208,7 @@ private struct FolderListCell: View {
241208
.clipShape(RoundedRectangle(cornerRadius: 12))
242209
.contentShape(Rectangle())
243210
.onTapGesture {
244-
onTap()
211+
didSelectFolder(folder.id)
245212
}
246213

247214
if expandedFolders.contains(folder.id) {
@@ -253,7 +220,8 @@ private struct FolderListCell: View {
253220
childFolders: childFolders,
254221
toggleExpansion: toggleExpansion,
255222
hasChildren: hasChildren,
256-
selectedFolderID: $selectedFolderID
223+
selectedFolderID: $selectedFolderID,
224+
didSelectFolder: didSelectFolder
257225
)
258226
.transition(.move(edge: .top).combined(with: .opacity))
259227
.padding(.top, 10)
@@ -263,18 +231,11 @@ private struct FolderListCell: View {
263231
}
264232
}
265233
}
266-
267-
private func onTap() {
268-
if selectedFolderID != folder.id {
269-
selectedFolderID = folder.id
270-
}
271-
}
272234
}
273235

274236

275237
#Preview {
276238
HomeListView(
277-
createFolder: .constant(false),
278-
selectedFolderID: .constant(nil)
239+
createFolder: .constant(false)
279240
)
280241
}

Presentation/Home/HomeView.swift

+1-5
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ struct HomeView: View {
2727

2828
@State private var isEditingTitle: Bool = false
2929

30-
// 폴더 선택 변수
31-
@State private var selectedFolderID: UUID? = nil
32-
3330
// 폴더 추가 페이지 변수
3431
@State private var createFolder: Bool = false
3532
@State private var createMovingFolder: Bool = false
@@ -96,8 +93,7 @@ struct HomeView: View {
9693
} else {
9794
HStack(spacing: 0) {
9895
HomeListView(
99-
createFolder: $createFolder,
100-
selectedFolderID: $selectedFolderID
96+
createFolder: $createFolder
10197
)
10298
.frame(width: geometry.size.width / 4)
10399

Presentation/Home/Paper/PaperListView.swift

+9-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ struct PaperListView: View {
4747
.scaledToFit()
4848
.frame(height: 146)
4949
.padding(.bottom, 11)
50-
Text(homeViewModel.isFavoriteSelected ? "즐겨찾기 한 논문이 없어요." : "새로운 논문을 가져와 주세요")
50+
Text(emptyStateMessage())
5151
.reazyFont(.h5)
5252
.foregroundStyle(.gray550)
5353
.padding(.bottom, 80)
@@ -122,6 +122,14 @@ struct PaperListView: View {
122122
.ignoresSafeArea()
123123
}
124124
}
125+
126+
private func emptyStateMessage() -> String {
127+
if homeViewModel.isFavoriteSelected {
128+
return "즐겨찾기 한 논문이 없어요"
129+
} else {
130+
return "새로운 논문을 가져와 주세요"
131+
}
132+
}
125133
}
126134

127135
extension PaperListView {

0 commit comments

Comments
 (0)