Skip to content

Commit e27ee0b

Browse files
authored
Merge pull request #342 from EAT-SSU/feat/#338
[#338] ๋‹ค์ด์–ผ๋กœ๊ทธ ์—…๋ฐ์ดํŠธ ๋ฐ ํ•˜๋‹จ๋ฐ” ์„ธํŒ…
2 parents 6ab2739 + 75873a5 commit e27ee0b

File tree

51 files changed

+1231
-431
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1231
-431
lines changed

โ€Ž.gitignoreโ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,4 @@ fastlane/api_key.json
8787
fastlane/AuthKey_*.p8
8888
*.p8
8989

90+

โ€ŽEATSSU/App/Sources/Data/Firebase/FirebaseRemoteConfig.swiftโ€Ž

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ class FirebaseRemoteConfig {
2323
}
2424

2525
func noticeCheck(completion: @escaping (String?) -> Void) {
26+
#if DEBUG
27+
// ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” Remote Config ์ฒดํฌ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
28+
completion(nil)
29+
return
30+
#endif
2631
remoteConfig.fetch { [weak self] status, error in
2732
guard let self else { return }
2833

โ€ŽEATSSU/App/Sources/Presentation/Auth/Enum/NIcknameTextFieldResultType.swiftโ€Ž

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import UIKit
99

10+
import EATSSUDesign
11+
1012
enum NicknameTextFieldResultType {
1113
/// common
1214
case textFieldEmpty
@@ -19,15 +21,15 @@ enum NicknameTextFieldResultType {
1921
var hintMessage: String {
2022
switch self {
2123
case .textFieldEmpty:
22-
"ํ•„์ˆ˜ ์ž…๋ ฅ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค"
24+
"ํ•„์ˆ˜ ์ž…๋ ฅ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค."
2325
case .nicknameTextFieldOver:
24-
"2~8์ž๋‚ด๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”"
26+
"2~8์ž๋‚ด๋กœ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
2527
case .nicknameTextFieldDoubleCheck:
26-
"์ค‘๋ณต ํ™•์ธ์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”"
28+
"์ค‘๋ณต ํ™•์ธ์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”."
2729
case .nicknameTextFieldDuplicated:
28-
"์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๋‹‰๋„ค์ž„์ด์—์š”"
30+
"์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๋‹‰๋„ค์ž„์ด์—์š”."
2931
case .nicknameTextFieldValid:
30-
"์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋‹‰๋„ค์ž„์ด์—์š”"
32+
"์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋‹‰๋„ค์ž„์ด์—์š”."
3133
}
3234
}
3335

@@ -36,7 +38,7 @@ enum NicknameTextFieldResultType {
3638
case .textFieldEmpty, .nicknameTextFieldOver, .nicknameTextFieldDuplicated, .nicknameTextFieldDoubleCheck:
3739
.primary
3840
case .nicknameTextFieldValid:
39-
.gray700
41+
EATSSUDesignAsset.Color.info.color
4042
}
4143
}
4244
}

โ€ŽEATSSU/App/Sources/Presentation/Auth/View/DropDownView.swiftโ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ final class DropDownView: BaseUIView {
5151
override func setLayout() {
5252
button.snp.makeConstraints {
5353
$0.edges.equalToSuperview()
54+
$0.height.equalTo(52)
5455
}
5556

5657
arrow.snp.makeConstraints {

โ€ŽEATSSU/App/Sources/Presentation/Auth/View/SetNickNameView.swiftโ€Ž

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,15 +154,23 @@ final class SetNickNameView: BaseUIView {
154154
$0.top.equalTo(safeAreaLayoutGuide).offset(16)
155155
$0.leading.equalToSuperview().inset(24)
156156
}
157+
158+
inputNickNameTextField.snp.makeConstraints {
159+
$0.height.equalTo(52)
160+
}
161+
157162
setNickNameStackView.snp.makeConstraints {
158163
$0.top.equalTo(nickNameLabel.snp.bottom).offset(8)
159164
$0.leading.equalToSuperview().inset(24)
160165
$0.trailing.equalTo(nicknameDoubleCheckButton.snp.leading).offset(-5)
161166
}
167+
162168
nicknameDoubleCheckButton.snp.makeConstraints {
163169
$0.top.equalTo(inputNickNameTextField)
164170
$0.trailing.equalToSuperview().inset(16)
171+
$0.height.equalTo(52)
165172
}
173+
166174
affiliationLabel.snp.makeConstraints {
167175
$0.top.equalTo(setNickNameStackView.snp.bottom).offset(24)
168176
$0.leading.equalToSuperview().inset(24)
@@ -172,8 +180,8 @@ final class SetNickNameView: BaseUIView {
172180
$0.top.equalTo(affiliationLabel.snp.bottom).offset(8)
173181
$0.horizontalEdges.equalToSuperview().inset(24)
174182
}
175-
collegeDropDownView.snp.makeConstraints { $0.height.equalTo(48) }
176-
departmentDropDownView.snp.makeConstraints { $0.height.equalTo(48) }
183+
collegeDropDownView.snp.makeConstraints { $0.height.equalTo(52) }
184+
departmentDropDownView.snp.makeConstraints { $0.height.equalTo(52) }
177185

178186
totalAccountStackView.snp.makeConstraints {
179187
$0.top.equalTo(affiliationStackView.snp.bottom).offset(40)
@@ -183,6 +191,7 @@ final class SetNickNameView: BaseUIView {
183191
completeSettingNickNameButton.snp.makeConstraints {
184192
$0.horizontalEdges.equalToSuperview().inset(24)
185193
$0.bottom.equalTo(safeAreaLayoutGuide).inset(26)
194+
$0.height.equalTo(52)
186195
}
187196
}
188197

@@ -235,6 +244,48 @@ final class SetNickNameView: BaseUIView {
235244
}
236245
}
237246

247+
func updateValidationUI(
248+
for newNickname: String,
249+
originalNickname: String?
250+
) {
251+
if newNickname.isEmpty {
252+
nicknameValidationMessageLabel.text = NicknameTextFieldResultType.textFieldEmpty.hintMessage
253+
nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.textFieldEmpty.textColor
254+
inputNickNameTextField.layer.borderWidth = 1.0
255+
inputNickNameTextField.layer.borderColor = NicknameTextFieldResultType.textFieldEmpty.textColor.cgColor
256+
nicknameDoubleCheckButton.isEnabled = false
257+
258+
} else if !(2...8).contains(newNickname.count) {
259+
nicknameValidationMessageLabel.text = NicknameTextFieldResultType.nicknameTextFieldOver.hintMessage
260+
nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.nicknameTextFieldOver.textColor
261+
inputNickNameTextField.layer.borderWidth = 1.0
262+
inputNickNameTextField.layer.borderColor = NicknameTextFieldResultType.nicknameTextFieldOver.textColor.cgColor
263+
nicknameDoubleCheckButton.isEnabled = false
264+
265+
} else if newNickname != originalNickname {
266+
nicknameValidationMessageLabel.text = NicknameTextFieldResultType.nicknameTextFieldDoubleCheck.hintMessage
267+
nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.nicknameTextFieldDoubleCheck.textColor
268+
inputNickNameTextField.layer.borderWidth = 1.0
269+
inputNickNameTextField.layer.borderColor = NicknameTextFieldResultType.nicknameTextFieldDoubleCheck.textColor.cgColor
270+
nicknameDoubleCheckButton.isEnabled = true
271+
272+
} else {
273+
nicknameValidationMessageLabel.text = ""
274+
inputNickNameTextField.layer.borderWidth = 1.0
275+
inputNickNameTextField.layer.borderColor = EATSSUDesignAsset.Color.GrayScale.gray300.color.cgColor
276+
nicknameDoubleCheckButton.isEnabled = false
277+
}
278+
}
279+
280+
func updateCheckResultUI(isAvailable: Bool) {
281+
let resultType: NicknameTextFieldResultType = isAvailable ? .nicknameTextFieldValid : .nicknameTextFieldDuplicated
282+
283+
nicknameValidationMessageLabel.text = resultType.hintMessage
284+
nicknameValidationMessageLabel.textColor = resultType.textColor
285+
inputNickNameTextField.layer.borderWidth = 1.0
286+
inputNickNameTextField.layer.borderColor = resultType.textColor.cgColor
287+
}
288+
238289
public func updateCollegeItems(_ items: [String]) {
239290
collegeDropDownView.updateItems(items)
240291
}
@@ -259,16 +310,19 @@ private extension SetNickNameView {
259310
func textFieldSettingWhenEmpty(_: UITextField) {
260311
nicknameValidationMessageLabel.text = NicknameTextFieldResultType.textFieldEmpty.hintMessage
261312
nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.textFieldEmpty.textColor
313+
updateTextFieldBorder(type: .textFieldEmpty)
262314
}
263315

264316
func checkNicknameValidation(_ textField: UITextField) {
265317
if let userNickname = textField.text {
266318
if nicknameInputChanged(nickname: userNickname) {
267319
nicknameValidationMessageLabel.text = NicknameTextFieldResultType.nicknameTextFieldDoubleCheck.hintMessage
268320
nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.nicknameTextFieldDoubleCheck.textColor
321+
updateTextFieldBorder(type: .nicknameTextFieldDoubleCheck)
269322
} else {
270323
nicknameValidationMessageLabel.text = NicknameTextFieldResultType.nicknameTextFieldOver.hintMessage
271324
nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.nicknameTextFieldOver.textColor
325+
updateTextFieldBorder(type: .nicknameTextFieldOver)
272326
}
273327
}
274328
}
@@ -285,4 +339,9 @@ private extension SetNickNameView {
285339
return false
286340
}
287341
}
342+
343+
func updateTextFieldBorder(type: NicknameTextFieldResultType) {
344+
inputNickNameTextField.layer.borderWidth = 1.0
345+
inputNickNameTextField.layer.borderColor = type.textColor.cgColor
346+
}
288347
}

โ€ŽEATSSU/App/Sources/Presentation/Auth/ViewController/LoginViewController.swiftโ€Ž

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ final class LoginViewController: BaseViewController {
1919

2020
public static let isVacationPeriod = false
2121
public var toastMessage: String?
22+
var toastType: ToastType = .info
23+
2224

2325
// MARK: - UI Components
2426

@@ -37,9 +39,11 @@ final class LoginViewController: BaseViewController {
3739

3840
override func viewDidAppear(_ animated: Bool) {
3941
super.viewDidAppear(animated)
40-
showToastMessageIfNeeded()
41-
42-
logScreenView(screenID: FirebaseScreenID.Login.log3)
42+
43+
if let message = toastMessage {
44+
showToast(message: message, type: toastType)
45+
self.toastMessage = nil
46+
}
4347
}
4448

4549
// MARK: - Functions
@@ -119,11 +123,6 @@ final class LoginViewController: BaseViewController {
119123
print("โญ๏ธโญ๏ธ ํ† ํฐ ์ €์žฅ ์„ฑ๊ณต โญ๏ธโญ๏ธ", accessToken)
120124
#endif
121125
}
122-
123-
private func showToastMessageIfNeeded() {
124-
guard let toastMessage = self.toastMessage else { return }
125-
view.showToast(message: toastMessage)
126-
}
127126

128127
// MARK: - ์•ก์…˜ ๋ฉ”์„œ๋“œ
129128

@@ -195,9 +194,9 @@ extension LoginViewController {
195194
} catch {
196195
switch accountType {
197196
case .apple:
198-
presentBottomAlert("์นด์นด์˜คํ†ก์œผ๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.")
197+
showToast(message: "์นด์นด์˜คํ†ก์œผ๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.", type: .warning)
199198
case .kakao:
200-
presentBottomAlert("Apple๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.")
199+
showToast(message: "Apple๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.", type: .warning)
201200
}
202201

203202
#if DEBUG
@@ -227,7 +226,7 @@ extension LoginViewController {
227226
getMyInfo()
228227

229228
case .failure(let error):
230-
presentBottomAlert("์นด์นด์˜คํ†ก์œผ๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.")
229+
showToast(message: "์นด์นด์˜คํ†ก์œผ๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.", type: .warning)
231230
#if DEBUG
232231
print(error.localizedDescription)
233232
#endif
@@ -255,7 +254,7 @@ extension LoginViewController {
255254
getMyInfo()
256255

257256
case .failure(let error):
258-
presentBottomAlert("Apple๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.")
257+
showToast(message: "Apple๋กœ ์ƒ์„ฑ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.", type: .warning)
259258
#if DEBUG
260259
print(error.localizedDescription)
261260
#endif

โ€ŽEATSSU/App/Sources/Presentation/Auth/ViewController/SetNickNameViewController.swiftโ€Ž

Lines changed: 33 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,16 @@ import Moya
1111

1212
import FirebaseAnalytics
1313

14+
import EATSSUDesign
15+
1416
enum SetNickNameSource {
1517
case signup // ์ฒซ ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์‹œ
1618
case mypage // ๋งˆ์ดํŽ˜์ด์ง€-๋‚ด ์ •๋ณด ์‹œ
1719
}
1820

1921
final class SetNickNameViewController: BaseViewController {
2022
var source: SetNickNameSource = .signup
23+
override var shouldHideTabBar: Bool { true }
2124
// MARK: - Properties
2225

2326
private var originalNickname: String?
@@ -107,7 +110,6 @@ final class SetNickNameViewController: BaseViewController {
107110

108111
guard hasNicknameChanged || departmentChanged else {
109112
print("๋ณ€๊ฒฝ๋œ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
110-
view.showToast(message: "๋ณ€๊ฒฝ๋œ ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.")
111113
return
112114
}
113115

@@ -142,10 +144,30 @@ final class SetNickNameViewController: BaseViewController {
142144

143145
dispatchGroup.notify(queue: .main) {
144146
if isNicknameUpdateSuccess && isDepartmentUpdateSuccess {
145-
self.showCompletionAlert()
147+
self.navigateToMyPageWithToast()
146148
} else {
147-
// ์‹คํŒจ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ
148-
self.showAlertController(title: "์˜ค๋ฅ˜", message: "์ •๋ณด ์—…๋ฐ์ดํŠธ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", style: .cancel)
149+
self.showToast(message: "์ •๋ณด ์—…๋ฐ์ดํŠธ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", type: .danger)
150+
}
151+
}
152+
}
153+
154+
private func navigateToMyPageWithToast() {
155+
if let myPageVC = self.navigationController?
156+
.viewControllers
157+
.first(where: { $0 is MyPageViewController }) as? MyPageViewController {
158+
159+
self.navigationController?.popToViewController(myPageVC, animated: true)
160+
161+
DispatchQueue.main.asyncAfter(deadline: .now()) {
162+
myPageVC.showToast(message: "๋‚ด ์ •๋ณด๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์–ด์š”.", type: .success)
163+
}
164+
} else {
165+
let homeVC = HomeViewController()
166+
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
167+
let keyWindow = windowScene.windows.first(where: { $0.isKeyWindow }) {
168+
keyWindow.replaceRootViewController(
169+
UINavigationController(rootViewController: homeVC)
170+
)
149171
}
150172
}
151173
}
@@ -158,22 +180,10 @@ final class SetNickNameViewController: BaseViewController {
158180
self.isNicknameChecked = false
159181
}
160182

161-
if newNickname.isEmpty {
162-
setNickNameView.nicknameValidationMessageLabel.text = NicknameTextFieldResultType.textFieldEmpty.hintMessage
163-
setNickNameView.nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.textFieldEmpty.textColor
164-
setNickNameView.nicknameDoubleCheckButton.isEnabled = false
165-
} else if !(2...8).contains(newNickname.count) {
166-
setNickNameView.nicknameValidationMessageLabel.text = NicknameTextFieldResultType.nicknameTextFieldOver.hintMessage
167-
setNickNameView.nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.nicknameTextFieldOver.textColor
168-
setNickNameView.nicknameDoubleCheckButton.isEnabled = false
169-
} else if isNicknameChanged {
170-
setNickNameView.nicknameValidationMessageLabel.text = NicknameTextFieldResultType.nicknameTextFieldDoubleCheck.hintMessage
171-
setNickNameView.nicknameValidationMessageLabel.textColor = NicknameTextFieldResultType.nicknameTextFieldDoubleCheck.textColor
172-
setNickNameView.nicknameDoubleCheckButton.isEnabled = true
173-
} else {
174-
setNickNameView.nicknameValidationMessageLabel.text = ""
175-
setNickNameView.nicknameDoubleCheckButton.isEnabled = false
176-
}
183+
setNickNameView.updateValidationUI(
184+
for: newNickname,
185+
originalNickname: originalNickname
186+
)
177187

178188
updateSaveButtonState()
179189
}
@@ -233,6 +243,8 @@ final class SetNickNameViewController: BaseViewController {
233243
private func navigateToLogin() {
234244
let loginVC = LoginViewController()
235245
loginVC.toastMessage = "์„ธ์…˜์ด ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•ด์ฃผ์„ธ์š”."
246+
loginVC.toastType = .info
247+
236248
DispatchQueue.main.async {
237249
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
238250
let keyWindow = windowScene.windows.first(where: { $0.isKeyWindow }) {
@@ -277,13 +289,8 @@ extension SetNickNameViewController {
277289

278290
switch result {
279291
case .success(let isNicknameAvailable):
280-
let resultType: NicknameTextFieldResultType = isNicknameAvailable ? .nicknameTextFieldValid : .nicknameTextFieldDuplicated
281-
let toastMessage = isNicknameAvailable ? "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹‰๋„ค์ž„์ด์—์š”" : "์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๋‹‰๋„ค์ž„์ด์—์š”"
282-
283292
self.isNicknameChecked = isNicknameAvailable
284-
self.view.showToast(message: toastMessage)
285-
self.setNickNameView.nicknameValidationMessageLabel.text = resultType.hintMessage
286-
self.setNickNameView.nicknameValidationMessageLabel.textColor = resultType.textColor
293+
self.setNickNameView.updateCheckResultUI(isAvailable: isNicknameAvailable)
287294
self.setNickNameView.setNicknameChecked(isNicknameAvailable)
288295
self.updateSaveButtonState()
289296

@@ -362,24 +369,4 @@ extension SetNickNameViewController {
362369
}
363370
}
364371
}
365-
366-
private func showCompletionAlert() {
367-
self.showAlertController(title: "์™„๋ฃŒ",
368-
message: "์ •๋ณด ์ˆ˜์ •์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.",
369-
style: .cancel) {
370-
if let myPageVC = self.navigationController?
371-
.viewControllers
372-
.first(where: { $0 is MyPageViewController }) {
373-
self.navigationController?.popToViewController(myPageVC, animated: true)
374-
} else {
375-
let homeVC = HomeViewController()
376-
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
377-
let keyWindow = windowScene.windows.first(where: { $0.isKeyWindow }) {
378-
keyWindow.replaceRootViewController(
379-
UINavigationController(rootViewController: homeVC)
380-
)
381-
}
382-
}
383-
}
384-
}
385372
}

0 commit comments

Comments
ย (0)