feature: save filter by stared

This commit is contained in:
Yusuke Hosonuma
2020-08-13 12:31:30 +09:00
parent 243d2a982c
commit eefc2bcbb8
4 changed files with 25 additions and 3 deletions
@@ -20,6 +20,7 @@ final class SettingEnvironment: ObservableObject {
@Published var zoomLevel: Int
#if os(iOS)
@Published var boardSelectDisplayStyle: BoardSelectStyle
@Published var isFilterByStared: Bool
#endif
#if os(macOS)
// TODO:
@@ -39,6 +40,7 @@ final class SettingEnvironment: ObservableObject {
#if os(iOS)
boardSelectDisplayStyle = UserDefaultSetting.shared.boardSelectDisplayStyle
isFilterByStared = UserDefaultSetting.shared.isFilterByStared
#endif
#if os(macOS)
@@ -95,6 +97,11 @@ final class SettingEnvironment: ObservableObject {
.dropFirst()
.assign(to: \.boardSelectDisplayStyle, on: UserDefaultSetting.shared)
.store(in: &cancellables)
$isFilterByStared
.dropFirst()
.assign(to: \.isFilterByStared, on: UserDefaultSetting.shared)
.store(in: &cancellables)
#endif
}
@@ -107,6 +114,7 @@ final class SettingEnvironment: ObservableObject {
#if os(iOS)
boardSelectDisplayStyle = UserDefaultSetting.DefaultBoardSelectDisplayStyle
isFilterByStared = UserDefaultSetting.DefaultIsFilterByStared
#endif
}
}
+4
View File
@@ -18,6 +18,7 @@ final class UserDefaultSetting {
#if os(iOS)
static let DefaultBoardSelectDisplayStyle: BoardSelectStyle = .grid
static let DefaultIsFilterByStared: Bool = false
#endif
@UserDefault(key: "boardSize", defaultValue: DefaultBoardSize)
@@ -32,5 +33,8 @@ final class UserDefaultSetting {
#if os(iOS)
@UserDefault(key: "boardSelectDisplayStyle", defaultValue: DefaultBoardSelectDisplayStyle)
var boardSelectDisplayStyle: BoardSelectStyle
@UserDefault(key: "isFilterByStared", defaultValue: DefaultIsFilterByStared)
var isFilterByStared: Bool
#endif
}
+11
View File
@@ -13,6 +13,17 @@ protocol UserDefaultConvertible {
func object() -> Any
}
extension Bool: UserDefaultConvertible {
init?(with object: Any) {
guard let value = object as? Bool else { return nil }
self = value
}
func object() -> Any {
self
}
}
extension Int: UserDefaultConvertible {
init?(with object: Any) {
guard let value = object as? Int else { return nil }
+2 -3
View File
@@ -13,13 +13,12 @@ struct BoardSelectView<Repository: FirestoreBoardRepositoryProtorol> : View {
@ObservedObject var repository: Repository // TODO: @EnvironmentObject
@Binding var isPresented: Bool
@State private var isStarOnly = false
// MARK: Computed properties
private var fileredItems: [BoardDocument] {
repository.items
.filter { isStarOnly ? $0.stared : true }
.filter { setting.isFilterByStared ? $0.stared : true }
}
// MARK: View
@@ -72,7 +71,7 @@ struct BoardSelectView<Repository: FirestoreBoardRepositoryProtorol> : View {
Divider()
Toggle(isOn: $isStarOnly) {
Toggle(isOn: $setting.isFilterByStared) {
Label("Star only", systemImage: "star.fill")
}
}, label: {