File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 88import SwiftUI
99
1010extension Color {
11+ static var randomValue : Color {
12+ Color (
13+ red: Double ( Int . random ( in: 0 ... 255 ) ) / 255 ,
14+ green: Double ( Int . random ( in: 0 ... 255 ) ) / 255 ,
15+ blue: Double ( Int . random ( in: 0 ... 255 ) ) / 255
16+ )
17+ }
18+
1119 init ? ( hexString: String ) {
1220 let trimmedHex = hexString. trimmingCharacters ( in: . whitespacesAndNewlines)
1321 let sanitizedHex = trimmedHex. hasPrefix ( " # " ) ? String ( trimmedHex. dropFirst ( ) ) : trimmedHex
@@ -24,7 +32,7 @@ extension Color {
2432 self . init ( red: red, green: green, blue: blue)
2533 }
2634
27- var hexString : String ? {
35+ var hexValue : String ? {
2836 let uiColor = UIColor ( self )
2937 var red : CGFloat = 0
3038 var green : CGFloat = 0
Original file line number Diff line number Diff line change @@ -27,6 +27,7 @@ final class TodoManageViewModel: Store {
2727 case setShowAlert( Bool )
2828 case setCategoryName( String )
2929 case setCategoryColor( Color )
30+ case setRandomCategoryColor
3031 case saveUserCategory
3132 }
3233
@@ -87,7 +88,7 @@ final class TodoManageViewModel: Store {
8788 state. category = UserTodoCategory (
8889 id: UUID ( ) . uuidString. lowercased ( ) ,
8990 name: " " ,
90- colorHex: " #0A84FF "
91+ colorHex: Color . randomValue . hexValue ?? " #000000 "
9192 )
9293 state. showSheet = true
9394 case . moveItem( let from, let target) :
@@ -143,7 +144,12 @@ final class TodoManageViewModel: Store {
143144 case . setCategoryColor( let color) :
144145 guard var category = state. category else { break }
145146
146- category. colorHex = color. hexString ?? " #0A84FF "
147+ category. colorHex = color. hexValue ?? " #000000 "
148+ state. category = category
149+ case . setRandomCategoryColor:
150+ guard var category = state. category else { break }
151+
152+ category. colorHex = Color . randomValue. hexValue ?? " #000000 "
147153 state. category = category
148154 case . saveUserCategory:
149155 guard let category = state. category else { break }
Original file line number Diff line number Diff line change @@ -127,13 +127,21 @@ struct TodoManageView: View {
127127 }
128128
129129 Section {
130- let color = Color ( hexString: viewModel. state. category? . colorHex ?? " #0A84FF " ) ?? . blue
130+ let color = Color ( hexString: viewModel. state. category? . colorHex ?? " " ) ?? . randomValue
131131 ColorPicker ( selection: Binding (
132132 get: { color } ,
133133 set: { viewModel. send ( . setCategoryColor( $0) ) }
134134 ) , supportsOpacity: false ) {
135135 Text ( viewModel. state. category? . colorHex ?? " # " )
136+ . overlay ( alignment: . bottom) {
137+ Rectangle ( )
138+ . frame ( height: 1 )
139+ . offset ( y: 1 )
140+ }
136141 . foregroundStyle ( color)
142+ . onTapGesture {
143+ viewModel. send ( . setRandomCategoryColor)
144+ }
137145 }
138146 . pickerStyle ( . palette)
139147 }
You can’t perform that action at this time.
0 commit comments