Redesign dashboard

This commit is contained in:
世界
2025-11-26 22:25:51 +08:00
parent b7a810b168
commit 68b4142340
17 changed files with 759 additions and 89 deletions
@@ -0,0 +1,71 @@
import Foundation
import Library
import SwiftUI
@MainActor
public struct DashboardMenu: View {
@StateObject private var viewModel = DashboardMenuViewModel()
public init() {}
public var body: some View {
Menu {
ForEach(DashboardCard.allCases) { card in
Toggle(isOn: Binding(
get: { viewModel.enabledCards.contains(card) },
set: { _ in
Task {
await viewModel.toggleCard(card)
}
}
)) {
Label(card.title, systemImage: card.systemImage)
}
}
Divider()
Button("Reset to Default") {
Task {
await viewModel.resetToDefault()
}
}
} label: {
Label("Dashboard Items", systemImage: "square.grid.2x2")
}
.onAppear {
Task {
await viewModel.loadCards()
}
}
}
}
@MainActor
private final class DashboardMenuViewModel: ObservableObject {
@Published var enabledCards: [DashboardCard] = []
func loadCards() async {
let savedCards = await SharedPreferences.enabledDashboardCards.get()
if savedCards.isEmpty {
enabledCards = DashboardCard.defaultCards
} else {
enabledCards = savedCards.compactMap { DashboardCard(rawValue: $0) }
}
}
func toggleCard(_ card: DashboardCard) async {
if enabledCards.contains(card) {
enabledCards.removeAll { $0 == card }
} else {
enabledCards.append(card)
}
await SharedPreferences.enabledDashboardCards.set(enabledCards.map(\.rawValue))
}
func resetToDefault() async {
await SharedPreferences.enabledDashboardCards.set([])
await SharedPreferences.dashboardCardOrder.set([])
enabledCards = DashboardCard.defaultCards
}
}