Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 24 additions & 24 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

6 changes: 0 additions & 6 deletions Projects/Feature/MainFeature/Sources/MainCore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ public struct MainCore: Reducer {
public var currentTab = 0
public var isInitial: Bool = true
public var isExistNewVersion: Bool = false
public var isDatePickerPresented: Bool = false
public var mealCore: MealCore.State?
public var timeTableCore: TimeTableCore.State?
@PresentationState public var settingsCore: SettingsCore.State?
Expand Down Expand Up @@ -74,7 +73,6 @@ public struct MainCore: Reducer {
case settingsCore(PresentationAction<SettingsCore.Action>)
case noticeCore(PresentationAction<NoticeCore.Action>)
case dateSelected(Date)
case toggleDatePicker(Bool)
case showReviewToast
case hideReviewToast
case requestReview
Expand Down Expand Up @@ -176,10 +174,6 @@ public struct MainCore: Reducer {
state.$displayDate.withLock { $0 = date }
return .none

case let .toggleDatePicker(isOn):
state.isDatePickerPresented = isOn
return .none

case .showReviewToast:
state.isShowingReviewToast = true
return .none
Expand Down
98 changes: 58 additions & 40 deletions Projects/Feature/MainFeature/Sources/MainView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
let store: StoreOf<MainCore>
@ObservedObject var viewStore: ViewStoreOf<MainCore>
@Environment(\.openURL) var openURL
@Environment(\.calendar) var calendar
@Dependency(\.userDefaultsClient) var userDefaultsClient

public init(store: StoreOf<MainCore>) {
Expand Down Expand Up @@ -111,20 +112,71 @@
.background(Color.backgroundMain)
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button {
viewStore.send(.toggleDatePicker(true))
TWLog.event(ClickDateTensePickerEventLog())
Menu {
let isSkipWeekend = userDefaultsClient.getValue(.isSkipWeekend) as? Bool ?? false
let isSkipAfterDinner = userDefaultsClient.getValue(.isSkipAfterDinner) as? Bool ?? true
let datePolicy = DatePolicy(isSkipWeekend: isSkipWeekend, isSkipAfterDinner: isSkipAfterDinner)

let today = Date()
let yesterday = datePolicy.previousDay(from: today)
let tomorrow = datePolicy.nextDay(from: today)

ForEach([yesterday, today, tomorrow], id: \.timeIntervalSince1970) { date in
Button {
let today = Date()
let tense: SelectDateTenseEventLog.Tense

if calendar.isDate(date, inSameDayAs: today) {
tense = .present
} else if date > today {
tense = .future
} else {
tense = .past
}

TWLog.event(SelectDateTenseEventLog(tense: tense))

_ = viewStore.send(.dateSelected(date))
} label: {
if calendar.isDate(viewStore.displayDate, inSameDayAs: date) {
Label {
Text(datePolicy.displayText(for: date, baseDate: today))
.twFont(.body1)
.foregroundStyle(
calendar.isDate(viewStore.displayDate, inSameDayAs: date)
? Color.extraWhite
: Color.extraBlack
)
.animation(.easeInOut(duration: 0.2), value: viewStore.displayDate)
} icon: {
Image(systemName: "checkmark")
}

Check warning on line 154 in Projects/Feature/MainFeature/Sources/MainView.swift

View workflow job for this annotation

GitHub Actions / swiftlint

Trailing Whitespace Violation: Lines should not have trailing whitespace (trailing_whitespace)

Check warning on line 155 in Projects/Feature/MainFeature/Sources/MainView.swift

View workflow job for this annotation

GitHub Actions / swiftlint

Vertical Whitespace Violation: Limit vertical whitespace to a single empty line; currently 2 (vertical_whitespace)
Comment thread
baekteun marked this conversation as resolved.
} else {
Text(datePolicy.displayText(for: date, baseDate: today))
.twFont(.body1)
.foregroundStyle(
calendar.isDate(viewStore.displayDate, inSameDayAs: date)
? Color.extraWhite
: Color.extraBlack
)
.animation(.easeInOut(duration: 0.2), value: viewStore.displayDate)
Comment thread
baekteun marked this conversation as resolved.
}
}
.accessibilityLabel("\(datePolicy.displayText(for: date, baseDate: today)) 선택")
.accessibilityHint("날짜 변경")
}
} label: {
HStack(spacing: 0) {
Text(viewStore.displayTitle)
.twFont(.headline3)
.foregroundColor(.extraBlack)
.foregroundStyle(Color.extraBlack)

Image.triangleDown
.renderingMode(.template)
.foregroundStyle(Color.textPrimary)
.rotationEffect(.degrees(viewStore.isDatePickerPresented ? 180.0 : 0))
.animation(.easeInOut, value: viewStore.isDatePickerPresented)
.rotationEffect(.degrees(0))
}
}
.accessibilityLabel("날짜 선택")
Expand Down Expand Up @@ -153,40 +205,6 @@
.accessibilityHint("앱 설정을 변경할 수 있습니다")
}
}
.overlay {
if viewStore.isDatePickerPresented {
Color.black.opacity(0.2)
.ignoresSafeArea()
.onTapGesture {
viewStore.send(.toggleDatePicker(false))
}
}
}
.overlay(alignment: .top) {
if viewStore.isDatePickerPresented {
DateTensePickerView(displayDate: viewStore.displayDate) { date in
let calendar = Calendar.current
let today = Date()
let tense: SelectDateTenseEventLog.Tense

if calendar.isDate(date, inSameDayAs: today) {
tense = .present
} else if date > today {
tense = .future
} else {
tense = .past
}

TWLog.event(SelectDateTenseEventLog(tense: tense))

_ = viewStore.send(.dateSelected(date))
_ = viewStore.send(.toggleDatePicker(false))
}
.padding(.horizontal, 16)
.transition(.move(edge: .top).combined(with: .opacity))
}
}
.animation(.spring(), value: viewStore.isDatePickerPresented)
.onAppear {
viewStore.send(.onAppear, animation: .default)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public struct TopTabbarView: View {
}
.frame(maxWidth: .infinity)
.background {
Color.extraWhite
Color.backgroundMain
}
.padding(.horizontal, 16)
}
Expand Down
Loading