SodaLive
Preview Content
Resources
Sources
Agora
App
Audition
Common
Content
CustomView
Debug
Dialog
Explorer
Extensions
Follow
Font
FortuneWheel
IAP
ImagePicker
Keyboard
Live
Cancel
EventBanner
Now
Recommend
RecommendChannel
Reservation
All
DateWithWeekDaySymbol.swift
LiveReservationAllItemView.swift
LiveReservationAllView.swift
WeekCalendarView.swift
Complete
LiveReservationItemView.swift
MakeLiveReservationRequest.swift
MakeLiveReservationResponse.swift
MyLiveReservationItemView.swift
SectionLiveReservationView.swift
Room
GetRoomListResponse.swift
LiveApi.swift
LiveRepository.swift
LiveView.swift
LiveViewModel.swift
SectionCommunityPostView.swift
StartLiveRequest.swift
Main
Message
MyPage
NavigationBar
Onboarding
Report
SearchChannel
Settings
Shape
Splash
Tracking
UI
User
Utils
ContentView.swift
SodaLive.entitlements
SodaLive.xcworkspace
generated
.gitignore
Podfile
Podfile.lock
SodaLive-dev.entitlements
model-SodaLive-dev.json
model-SodaLive.json
96 lines
3.1 KiB
Swift
96 lines
3.1 KiB
Swift
//
|
|
// WeekCalendarView.swift
|
|
// SodaLive
|
|
//
|
|
// Created by klaus on 2023/08/14.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct WeekCalendarView: View {
|
|
|
|
@State private var selectedIndex = 0
|
|
let action: (String) -> Void
|
|
|
|
@ViewBuilder
|
|
func DateItemView(index: Int, dateWithWeekDaySymbol: DateWithWeekDaySymbol) -> some View {
|
|
VStack(spacing: 6.7) {
|
|
Text(dateWithWeekDaySymbol.weekDaySymbol)
|
|
.font(.custom(Font.medium.rawValue, size: 11.3))
|
|
.foregroundColor(
|
|
self.selectedIndex == index ?
|
|
.white :
|
|
Color(hex: "e2e2e2")
|
|
)
|
|
|
|
Text(dateWithWeekDaySymbol.dayOfMonth)
|
|
.font(.custom(Font.bold.rawValue, size: 15.3))
|
|
.foregroundColor(
|
|
self.selectedIndex == index ?
|
|
.white :
|
|
Color(hex: "e2e2e2")
|
|
)
|
|
}
|
|
.frame(width: 53.3)
|
|
.frame(minHeight: 66.7)
|
|
.background(index == selectedIndex ? Color(hex: "3bb9f1") : Color.clear)
|
|
.cornerRadius(6.7)
|
|
.onTapGesture {
|
|
if self.selectedIndex != index {
|
|
self.selectedIndex = index
|
|
action(dateWithWeekDaySymbol.date)
|
|
}
|
|
}
|
|
}
|
|
|
|
var body: some View {
|
|
VStack(spacing: 16.7) {
|
|
ScrollView(.horizontal, showsIndicators: false) {
|
|
HStack(spacing: 6.7) {
|
|
ForEach(0..<7, id: \.self) { index in
|
|
let dateWithWeekDaySymbol = getDateFromCurrent(afterDay: index)
|
|
DateItemView(
|
|
index: index,
|
|
dateWithWeekDaySymbol: dateWithWeekDaySymbol
|
|
)
|
|
}
|
|
}
|
|
}
|
|
.scaledToFit()
|
|
|
|
Rectangle()
|
|
.frame(height: 1)
|
|
.foregroundColor(Color(hex: "909090").opacity(0.5))
|
|
}
|
|
.onAppear {
|
|
self.selectedIndex = 0
|
|
action(getDateFromCurrent(afterDay: 0).date)
|
|
}
|
|
}
|
|
|
|
private func getDateFromCurrent(afterDay: Int) -> DateWithWeekDaySymbol {
|
|
var calendar = Calendar.current
|
|
calendar.locale = Locale(identifier: String(Locale.preferredLanguages[0].prefix(2)))
|
|
|
|
let currentDate = Date()
|
|
let futureDate = calendar.date(byAdding: .day, value: afterDay, to: currentDate)!
|
|
|
|
let dateFormatter = DateFormatter()
|
|
dateFormatter.dateFormat = "yyyy-MM-dd"
|
|
|
|
let dayOfMonthFormatter = DateFormatter()
|
|
dayOfMonthFormatter.dateFormat = "d"
|
|
|
|
let date = dateFormatter.string(from: futureDate)
|
|
let dayOfMonth = dayOfMonthFormatter.string(from: futureDate)
|
|
let day = calendar.component(.weekday, from: futureDate) - 1
|
|
let weekDaySymbol = calendar.shortWeekdaySymbols[day]
|
|
|
|
return DateWithWeekDaySymbol(
|
|
date: date,
|
|
dayOfMonth: dayOfMonth,
|
|
weekDaySymbol: weekDaySymbol
|
|
)
|
|
}
|
|
}
|