Skip to content

Commit 0d73e14

Browse files
committed
루틴 위젯 및 기타 버그 수정
1 parent e450816 commit 0d73e14

File tree

14 files changed

+81
-119
lines changed

14 files changed

+81
-119
lines changed

App/Moda/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<key>CFBundlePackageType</key>
1212
<string>APPL</string>
1313
<key>CFBundleShortVersionString</key>
14-
<string>1.11.0</string>
14+
<string>1.11.1</string>
1515
<key>CFBundleURLTypes</key>
1616
<array>
1717
<dict>
@@ -24,7 +24,7 @@
2424
</dict>
2525
</array>
2626
<key>CFBundleVersion</key>
27-
<string>1.11.0.7</string>
27+
<string>1.11.1.1</string>
2828
<key>GoogleServiceFileName</key>
2929
<string>$(ENV_GOOGLE_INFO_PLIST)</string>
3030
<key>ITSAppUsesNonExemptEncryption</key>

App/Moda/Sources/Feature/Routine/Childs/RoutineContent/RoutineContentCore.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ struct RoutineContentCore: Reducer {
2121
var shortcutVisualMode: DateVisualMode = .daily
2222
var visualMode: DateVisualMode = .daily
2323

24-
var allWeekdays: [Weekday] = Weekday.allCases(startWeekday: .sunday)
2524
var weekDates: [Date] = DateManager.shared.weekDates(for: Date.today)
2625
var weekdays: [Weekday] = Weekday.allCases(startWeekday: .sunday)
2726

App/Moda/Sources/Feature/Routine/Childs/RoutineContent/RoutineContentView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ private extension RoutineContentView {
4646
isShortcutFolded: $store.isShortcutFolded,
4747
visualMode: $store.shortcutVisualMode,
4848
currentDateIdx: store.currentDateIdx,
49-
allWeekdays: store.allWeekdays,
49+
allWeekdays: store.weekdays,
5050
categories: store.weeklyCategories,
5151
onTapEmoji: { send(.emojiTapped(categoryID: $0, routineID: $1, $2)) }
5252
)

App/ModaWidget/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<key>CFBundleName</key>
1414
<string>ModaWidget</string>
1515
<key>CFBundleVersion</key>
16-
<string>1.11.0.7</string>
16+
<string>1.11.1.1</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionPointIdentifier</key>

App/ModaWidget/Sources/Common/RoutineDashboardItemView.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import SwiftUI
1010

1111
struct RoutineDashboardItemView: View {
1212
let routine: Routine
13-
let routineRecords: [RoutineRecord]
13+
let weekDates: [Date]
1414
let todayIdx: Int
1515
let allWeekdays: [Weekday]
1616

@@ -29,8 +29,8 @@ struct RoutineDashboardItemView: View {
2929

3030
Spacer()
3131
HStack(spacing: 6) {
32-
ForEach(Array(routineRecords.enumerated()), id: \.element.id) { idx, record in
33-
if record.routineIds.contains(routine.id) {
32+
ForEach(Array(weekDates.enumerated()), id: \.element) { idx, date in
33+
if routine.completedDates.contains(date) {
3434
Image.icCheck
3535
.frame(size: 16)
3636
.background(
@@ -71,7 +71,7 @@ struct RoutineDashboardItemView: View {
7171
.foregroundStyle(Color.brandPrimary)
7272

7373
Spacer(minLength: 0)
74-
let count = routineRecords.filter { $0.routineIds.contains(routine.id) }.count
74+
let count = weekDates.filter { routine.completedDates.contains($0) }.count
7575
Text("\(count)")
7676
.font(.spoqaHans(size: 12))
7777
.foregroundStyle(Color.brandPrimary)

App/ModaWidget/Sources/Daily/Components/ModaDailyTodoView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ struct ModaDailyTodoView: View {
1717
ForEach(notDoneTodos, id: \.id) { todo in
1818
HStack(alignment: .center, spacing: 8) {
1919
Button(intent: DailyTodoDoneIntent(todoId: todo.id)) {
20-
Image.imgCheckActive
20+
Image.imgCheckInactive
2121
.resizable()
2222
.frame(size: 20)
2323
}

App/ModaWidget/Sources/Intent/RoutineDoneIntent.swift

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,7 @@ struct RoutineDoneIntent: AppIntent {
2626
}
2727

2828
func perform() async throws -> some IntentResult {
29-
dataManager.updateRoutineRecord(date: .today, routineId: routineId, isDone: true)
30-
31-
var updated = userData.updatedRoutinesByWidget.rawValue?.routineIds ?? .init()
32-
updated.insert(routineId)
33-
34-
// iOS 17 에서는 정상적으로 저장이 되지 않아 UserDefaults를 사용한다.
35-
userData.updatedRoutinesByWidget.update(RoutineRecordsByWidget(routineIds: updated))
29+
dataManager.updateRoutineCompleteDate(routineId: routineId, date: .today, isDone: true)
3630

3731
Task {
3832
WidgetCenter.shared.reloadTimelines(ofKind: "RoutineDashboardMediumWidget")

App/ModaWidget/Sources/RoutineDashboardLarge/RoutineDashboardLargeWidgetView.swift

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ struct RoutineDashboardLargeWidgetView : View {
1414
var entry: RoutineDashboardLargeProvider.Entry
1515

1616
@Environment(\.modelContext) var modelContext
17-
@Query var routineEntities: [RoutineEntity]
18-
@Query var routineRecordEntities: [RoutineRecordEntity]
17+
@Query var categoryEntities: [RoutineCategoryEntity]
1918

2019
var allWeekdays: [Weekday] { DateUtil.shared.allWeekdays }
2120
var todayIdx: Int { DateUtil.shared.dayNumberInWeek }
@@ -38,7 +37,7 @@ struct RoutineDashboardLargeWidgetView : View {
3837
ForEach(Array(routinesShownChart.prefix(limit)), id: \.id) { routine in
3938
RoutineDashboardItemView(
4039
routine: routine,
41-
routineRecords: routineRecords,
40+
weekDates: weekDates,
4241
todayIdx: todayIdx,
4342
allWeekdays: allWeekdays
4443
)
@@ -60,32 +59,22 @@ struct RoutineDashboardLargeWidgetView : View {
6059

6160
private extension RoutineDashboardLargeWidgetView {
6261
var routines: [Routine] {
63-
let routines = routineEntities.filter { $0.isDeprecated.not }.toDomain.ordering()
64-
65-
return routines
66-
}
67-
68-
var routineRecord: RoutineRecord? {
69-
let id = Date.today.format(.yyMMdd)
70-
return routineRecordEntities.first { $0.id == id }?.toDomain
71-
}
72-
73-
var routineRecords: [RoutineRecord] {
74-
var records: [RoutineRecord] = []
75-
for date in weekDates {
76-
let id = date.format(.yyMMdd)
77-
let record = routineRecordEntities.first(where: { $0.id == id })?.toDomain ?? .init(id: id, date: date, routineIds: .init())
78-
records.append(record)
62+
let sortedCategories = categoryEntities.sorted { $0.order < $1.order }
63+
let allRoutines = sortedCategories.flatMap { category in
64+
(category.routines ?? [])
65+
.filter { $0.isDeprecated.not }
66+
.sorted { $0.order < $1.order }
67+
.map(\.toDomain)
7968
}
80-
return records
69+
70+
return allRoutines
8171
}
8272

8373
var routinesShownChart: [Routine] {
8474
routines.filter { routine in
8575
if routine.duration.isMonth {
86-
let id = routine.id
87-
for record in routineRecords {
88-
if record.routineIds.contains(id) {
76+
for date in weekDates {
77+
if routine.completedDates.contains(date) {
8978
return true
9079
}
9180
}
@@ -95,18 +84,6 @@ private extension RoutineDashboardLargeWidgetView {
9584
}
9685
}
9786

98-
var notDoneRoutines: [Routine] {
99-
guard let routineRecord else { return routines }
100-
return routines.filter {
101-
routineRecord.routineIds.contains($0.id).not
102-
}
103-
}
104-
105-
var isAllDone: Bool {
106-
guard routines.count > 0 else { return false }
107-
return notDoneRoutines.isEmpty
108-
}
109-
11087
var limit: Int {
11188
let height = WidgetAttribute.largeSize.height
11289
return Int((height - 32) / 24)

App/ModaWidget/Sources/RoutineDashboardMedium/RoutineDashboardMediumWidgetView.swift

Lines changed: 12 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ struct RoutineDashboardMediumWidgetView : View {
1414
var entry: RoutineDashboardMediumProvider.Entry
1515

1616
@Environment(\.modelContext) var modelContext
17-
@Query var routineEntities: [RoutineEntity]
18-
@Query var routineRecordEntities: [RoutineRecordEntity]
17+
@Query var categoryEntities: [RoutineCategoryEntity]
1918

2019
var allWeekdays: [Weekday] { DateUtil.shared.allWeekdays }
2120
var todayIdx: Int { DateUtil.shared.dayNumberInWeek }
@@ -38,7 +37,7 @@ struct RoutineDashboardMediumWidgetView : View {
3837
ForEach(Array(routinesShownChart.prefix(limit)), id: \.id) { routine in
3938
RoutineDashboardItemView(
4039
routine: routine,
41-
routineRecords: routineRecords,
40+
weekDates: weekDates,
4241
todayIdx: todayIdx,
4342
allWeekdays: allWeekdays
4443
)
@@ -60,32 +59,22 @@ struct RoutineDashboardMediumWidgetView : View {
6059

6160
private extension RoutineDashboardMediumWidgetView {
6261
var routines: [Routine] {
63-
let routines = routineEntities.filter { $0.isDeprecated.not }.toDomain.ordering()
64-
65-
return routines
66-
}
67-
68-
var routineRecord: RoutineRecord? {
69-
let id = Date.today.format(.yyMMdd)
70-
return routineRecordEntities.first { $0.id == id }?.toDomain
71-
}
72-
73-
var routineRecords: [RoutineRecord] {
74-
var records: [RoutineRecord] = []
75-
for date in weekDates {
76-
let id = date.format(.yyMMdd)
77-
let record = routineRecordEntities.first(where: { $0.id == id })?.toDomain ?? .init(id: id, date: date, routineIds: .init())
78-
records.append(record)
62+
let sortedCategories = categoryEntities.sorted { $0.order < $1.order }
63+
let allRoutines = sortedCategories.flatMap { category in
64+
(category.routines ?? [])
65+
.filter { $0.isDeprecated.not }
66+
.sorted { $0.order < $1.order }
67+
.map(\.toDomain)
7968
}
80-
return records
69+
70+
return allRoutines
8171
}
8272

8373
var routinesShownChart: [Routine] {
8474
routines.filter { routine in
8575
if routine.duration.isMonth {
86-
let id = routine.id
87-
for record in routineRecords {
88-
if record.routineIds.contains(id) {
76+
for date in weekDates {
77+
if routine.completedDates.contains(date) {
8978
return true
9079
}
9180
}
@@ -95,18 +84,6 @@ private extension RoutineDashboardMediumWidgetView {
9584
}
9685
}
9786

98-
var notDoneRoutines: [Routine] {
99-
guard let routineRecord else { return routines }
100-
return routines.filter {
101-
routineRecord.routineIds.contains($0.id).not
102-
}
103-
}
104-
105-
var isAllDone: Bool {
106-
guard routines.count > 0 else { return false }
107-
return notDoneRoutines.isEmpty
108-
}
109-
11087
var limit: Int {
11188
let height = WidgetAttribute.mediumSize.height
11289
return Int((height - 32) / 24)

App/ModaWidget/Sources/RoutineLarge/RoutineLargeWidgetView.swift

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ struct RoutineLargeWidgetView : View {
1515
var entry: RoutineLargeProvider.Entry
1616

1717
@Environment(\.modelContext) var modelContext
18-
@Query var routineEntities: [RoutineEntity]
19-
@Query var routineRecordEntities: [RoutineRecordEntity]
18+
@Query var categoryEntities: [RoutineCategoryEntity]
2019

2120
var body: some View {
2221
VStack(spacing: 0) {
@@ -45,10 +44,17 @@ struct RoutineLargeWidgetView : View {
4544

4645
private extension RoutineLargeWidgetView {
4746
var routines: [Routine] {
48-
let routines = routineEntities.filter { $0.isDeprecated.not }.toDomain
49-
let weekday = DateUtil.shared.allWeekdays[DateUtil.shared.dayNumberInWeek]
47+
let weekday = DateUtil.shared.allWeekdays[DateUtil.shared.dayNumberInWeek]
5048

51-
return routines
49+
let sortedCategories = categoryEntities.sorted { $0.order < $1.order }
50+
let allRoutines = sortedCategories.flatMap { category in
51+
(category.routines ?? [])
52+
.filter { $0.isDeprecated.not }
53+
.sorted { $0.order < $1.order }
54+
.map(\.toDomain)
55+
}
56+
57+
return allRoutines
5258
.filter { $0.isActive }
5359
.filter {
5460
if $0.duration.isMonth {
@@ -59,18 +65,11 @@ private extension RoutineLargeWidgetView {
5965
}
6066
return true
6167
}
62-
.ordering()
63-
}
64-
65-
var routineRecord: RoutineRecord? {
66-
let id = Date.today.format(.yyMMdd)
67-
return routineRecordEntities.first { $0.id == id }?.toDomain
6868
}
6969

7070
var notDoneRoutines: [Routine] {
71-
guard let routineRecord else { return routines }
72-
return routines.filter {
73-
routineRecord.routineIds.contains($0.id).not
71+
routines.filter { routine in
72+
routine.completedDates.contains(.today).not
7473
}
7574
}
7675

0 commit comments

Comments
 (0)