forked from AcaMate/AcaMate_iOS
118 lines
4.7 KiB
Swift
118 lines
4.7 KiB
Swift
//
|
|
// AccountLoginView.swift
|
|
// AcaMate
|
|
//
|
|
// Created by Sean Kim on 12/14/24.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct AccountLoginView: View {
|
|
@ObservedObject var viewModel: LoginViewModel
|
|
@Binding var userId: String
|
|
@Binding var password: String
|
|
@Binding var isSecure: Bool
|
|
@Binding var isSave: Bool
|
|
var body: some View {
|
|
VStack(spacing: 0) {
|
|
ZStack(alignment: .leading) {
|
|
if userId.isEmpty {
|
|
Text("아이디를 입력하세요.")
|
|
.font(.nps(font: .regular, size: 16))
|
|
.foregroundStyle(Color(.Text.border))
|
|
.padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24))
|
|
}
|
|
CustomTextField(placeholder: "", text: $userId)
|
|
.frame(maxWidth: .infinity,maxHeight: 24)
|
|
.padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24))
|
|
}
|
|
.background {
|
|
RoundedRectangle(cornerRadius: 24)
|
|
.foregroundStyle(.white)
|
|
}
|
|
.padding(EdgeInsets(top: 0, leading: 12, bottom: 8, trailing: 12))
|
|
|
|
ZStack(alignment: .leading) {
|
|
if password.isEmpty {
|
|
Text("비밀번호를 입력하세요.")
|
|
.font(.nps(font: .regular, size: 16))
|
|
.foregroundStyle(Color(.Text.border))
|
|
.padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24))
|
|
}
|
|
CustomTextField(placeholder: "", text: $password, isSecure: $isSecure)
|
|
.frame(maxWidth: .infinity,maxHeight: 24)
|
|
.padding(EdgeInsets(top: 12, leading: 24, bottom: 12, trailing: 24))
|
|
|
|
HStack {
|
|
Spacer()
|
|
Button {
|
|
isSecure.toggle()
|
|
} label: {
|
|
if password.isEmpty {
|
|
Rectangle()
|
|
.frame(width: 16, height: 2)
|
|
.foregroundStyle(Color(.Text.border))
|
|
.padding(.trailing,24)
|
|
}
|
|
else {
|
|
if isSecure {
|
|
Image(systemName: "eye")
|
|
.frame(width: 16, height: 16)
|
|
.foregroundStyle(Color(.Text.detail))
|
|
.padding(.trailing,24)
|
|
}
|
|
else {
|
|
Image(systemName: "eye.slash")
|
|
.frame(width: 16, height: 16)
|
|
.foregroundStyle(Color(.Text.detail))
|
|
.padding(.trailing,24)
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.background {
|
|
RoundedRectangle(cornerRadius: 24)
|
|
.foregroundStyle(.white)
|
|
}
|
|
.padding(EdgeInsets(top: 0, leading: 12, bottom: 8, trailing: 12))
|
|
|
|
Button {
|
|
isSave.toggle()
|
|
} label: {
|
|
HStack(alignment: .center, spacing: 4) {
|
|
Spacer(minLength: 1)
|
|
if isSave {
|
|
Image(systemName: "checkmark.square")
|
|
.foregroundStyle(Color(.Second.normal))
|
|
.frame(width: 24, height: 24)
|
|
} else {
|
|
Image(systemName: "square")
|
|
.foregroundStyle(Color(.Second.normal))
|
|
.frame(width: 24, height: 24)
|
|
}
|
|
|
|
Text("로그인 정보 저장")
|
|
.font(.nps(font: .regular, size: 16))
|
|
.foregroundStyle(Color(.Text.detail))
|
|
}
|
|
}
|
|
.padding(EdgeInsets(top: 0, leading: 0, bottom: 24, trailing: 12))
|
|
|
|
Button {
|
|
viewModel.loginAction.send(true)
|
|
} label: {
|
|
Text("로그인")
|
|
.font(.nps(font: .bold, size: 24))
|
|
.foregroundStyle(Color(.Text.white))
|
|
.padding(EdgeInsets(top: 8, leading: 48, bottom: 8, trailing: 48))
|
|
.background{
|
|
RoundedRectangle(cornerRadius: 12)
|
|
.foregroundStyle(Color(.Second.normal))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|