Skip to content

Commit 4b97cde

Browse files
committed
[feat] #173 편집하기 float button 구성
1 parent dd7c0ce commit 4b97cde

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
//
2+
// PokitLinkEditFloatView.swift
3+
// Feature
4+
//
5+
// Created by 김민호 on 12/27/24.
6+
//
7+
8+
import SwiftUI
9+
10+
/// `포킷` -> `미분류` -> `편집하기` -> `하단 float Button`
11+
public struct PokitLinkEditFloatView: View {
12+
/// 전체 선택/해제 toggle
13+
@State private var isChecked: Bool = false
14+
private let delegateSend: ((PokitLinkEditFloatView.Delegate) -> Void)?
15+
16+
public init(
17+
delegateSend: ((PokitLinkEditFloatView.Delegate) -> Void)?
18+
) {
19+
self.delegateSend = delegateSend
20+
}
21+
22+
public var body: some View {
23+
RoundedRectangle(cornerRadius: 16)
24+
.foregroundStyle(.pokit(.bg(.brand)))
25+
.frame(height: 84)
26+
.overlay {
27+
HStack(spacing: 0) {
28+
button(isChecked ? .전체해제 : .전체선택)
29+
Spacer()
30+
button(.링크삭제)
31+
Spacer()
32+
button(.포킷이동)
33+
}
34+
.padding(.horizontal, 20)
35+
}
36+
.pokitShadow(
37+
x: 0,
38+
y: -2,
39+
blur: 20,
40+
spread: 0,
41+
color: Color.black,
42+
colorPercent: 10
43+
)
44+
}
45+
}
46+
private extension PokitLinkEditFloatView {
47+
func button(_ type: PokitLinkEditFloatType) -> some View {
48+
Button {
49+
if type == .전체선택 ||
50+
type == .전체해제 {
51+
isChecked.toggle()
52+
}
53+
delegateSend?(type.action)
54+
} label: {
55+
VStack(spacing: 4) {
56+
type.icon
57+
Text(type.label)
58+
.pokitFont(.detail2)
59+
.padding(.horizontal, 18)
60+
}
61+
}
62+
.buttonStyle(.plain)
63+
.foregroundStyle(.white)
64+
}
65+
}
66+
public extension PokitLinkEditFloatView {
67+
enum PokitLinkEditFloatType: String {
68+
case 전체해제 = "전체 해제"
69+
case 전체선택 = "전체 선택"
70+
case 링크삭제 = "링크 삭제"
71+
case 포킷이동 = "포킷 이동"
72+
73+
var label: String { self.rawValue }
74+
75+
var icon: Image {
76+
switch self {
77+
case .전체해제:
78+
return Image(.icon(.allUncheck))
79+
case .전체선택:
80+
return Image(.icon(.allCheck))
81+
case .링크삭제:
82+
return Image(.icon(.trash))
83+
case .포킷이동:
84+
return Image(.icon(.movePokit))
85+
}
86+
}
87+
88+
var action: Delegate {
89+
switch self {
90+
case .전체해제:
91+
return .전체해제_버튼_눌렀을때
92+
case .전체선택:
93+
return .전체선택_버튼_눌렀을때
94+
case .링크삭제:
95+
return .링크삭제_버튼_눌렀을때
96+
case .포킷이동:
97+
return .포킷이동_버튼_눌렀을때
98+
}
99+
}
100+
}
101+
102+
enum Delegate {
103+
case 전체선택_버튼_눌렀을때
104+
case 전체해제_버튼_눌렀을때
105+
case 링크삭제_버튼_눌렀을때
106+
case 포킷이동_버튼_눌렀을때
107+
}
108+
}
109+
#Preview {
110+
PokitLinkEditFloatView(delegateSend: {_ in }).padding(20)
111+
}

0 commit comments

Comments
 (0)