fix(action): commit tag order and favorite changes immediately

꼬리표 순서 변경 시트와 즐겨찾기 토글(리스트 스와이프·상세 화면)이
DataChange.commit 없이 autosave에만 의존해, 저장 확정이 지연되고
꼬리표 순서를 쓰는 워치 앱 그룹핑이 다음 커밋 시점까지 낡은 순서로
남을 수 있었다.

- TagOrderSheet: 드래그마다가 아니라 시트가 닫힐 때 1회만 커밋
  ('완료'와 스와이프 내리기 모두 onDisappear 경로) — 위젯 리로드 연발 방지
- 즐겨찾기 토글 2곳: 변경 즉시 커밋

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013yKDMhuF39GVYy3FMcGHh7
This commit is contained in:
songyc macbook 2026-07-13 19:35:29 +09:00
parent 417070bde7
commit d023f3eca1

View File

@ -131,6 +131,7 @@ struct ActionListView: View {
.swipeActions(edge: .leading, allowsFullSwipe: true) {
Button {
action.isFavorite.toggle()
DataChange.commit(context: context)
} label: {
Label(
action.isFavorite ? String(localized: "즐겨찾기 해제") : String(localized: "즐겨찾기"),
@ -174,8 +175,13 @@ struct ActionRow: View {
struct TagOrderSheet: View {
@Environment(\.dismiss) private var dismiss
@Environment(\.modelContext) private var context
@Query(sort: [SortDescriptor(\Tag.sortOrder), SortDescriptor(\Tag.createdAt)]) private var tags: [Tag]
///
/// ·
@State private var orderChanged = false
var body: some View {
NavigationStack {
List {
@ -191,6 +197,7 @@ struct TagOrderSheet: View {
for (index, tag) in ordered.enumerated() {
tag.sortOrder = index
}
orderChanged = true
}
}
.environment(\.editMode, .constant(.active))
@ -203,6 +210,11 @@ struct TagOrderSheet: View {
}
}
.presentationDetents([.medium, .large])
.onDisappear {
//
// ('' )
if orderChanged { DataChange.commit(context: context) }
}
}
}
@ -224,7 +236,11 @@ struct ActionDetailView: View {
Spacer()
Text(action.name).foregroundStyle(.secondary)
}
Toggle(isOn: Bindable(action).isFavorite) {
// ( )
Toggle(isOn: Binding(
get: { action.isFavorite },
set: { action.isFavorite = $0; DataChange.commit(context: context) }
)) {
Label {
Text("즐겨찾기")
} icon: {