@@ -3,104 +3,104 @@ import SharedUIComponents
33import SwiftUI
44
55struct APIKeyManagementView : View {
6- let store : StoreOf < APIKeyManagement >
6+ @ Perception . Bindable var store : StoreOf < APIKeyManagement >
77
88 var body : some View {
9- VStack ( spacing: 0 ) {
10- HStack {
11- Button ( action: {
12- store. send ( . closeButtonClicked)
13- } ) {
14- Image ( systemName: " xmark.circle.fill " )
15- . foregroundStyle ( . secondary)
16- . padding ( )
17- }
18- . buttonStyle ( . plain)
19- Text ( " API Keys " )
20- Spacer ( )
21- Button ( action: {
22- store. send ( . addButtonClicked)
23- } ) {
24- Image ( systemName: " plus.circle.fill " )
25- . foregroundStyle ( . secondary)
26- . padding ( )
9+ WithPerceptionTracking {
10+ VStack ( spacing: 0 ) {
11+ HStack {
12+ Button ( action: {
13+ store. send ( . closeButtonClicked)
14+ } ) {
15+ Image ( systemName: " xmark.circle.fill " )
16+ . foregroundStyle ( . secondary)
17+ . padding ( )
18+ }
19+ . buttonStyle ( . plain)
20+ Text ( " API Keys " )
21+ Spacer ( )
22+ Button ( action: {
23+ store. send ( . addButtonClicked)
24+ } ) {
25+ Image ( systemName: " plus.circle.fill " )
26+ . foregroundStyle ( . secondary)
27+ . padding ( )
28+ }
29+ . buttonStyle ( . plain)
2730 }
28- . buttonStyle ( . plain)
29- }
30- . background ( Color ( nsColor: . separatorColor) )
31-
32- List {
33- WithViewStore ( store, observe: { $0. availableAPIKeyNames } ) { viewStore in
34- ForEach ( viewStore. state, id: \. self) { name in
35- HStack {
36- Text ( name)
37- . contextMenu {
38- Button ( " Remove " ) {
39- viewStore. send ( . deleteButtonClicked( name: name) )
31+ . background ( Color ( nsColor: . separatorColor) )
32+
33+ List {
34+ WithPerceptionTracking {
35+ ForEach ( store. availableAPIKeyNames, id: \. self) { name in
36+ HStack {
37+ Text ( name)
38+ . contextMenu {
39+ Button ( " Remove " ) {
40+ store. send ( . deleteButtonClicked( name: name) )
41+ }
4042 }
43+ Spacer ( )
44+
45+ Button ( action: {
46+ store. send ( . deleteButtonClicked( name: name) )
47+ } ) {
48+ Image ( systemName: " trash.fill " )
49+ . foregroundStyle ( . secondary)
4150 }
42- Spacer ( )
43-
44- Button ( action: {
45- viewStore. send ( . deleteButtonClicked( name: name) )
46- } ) {
47- Image ( systemName: " trash.fill " )
48- . foregroundStyle ( . secondary)
51+ . buttonStyle ( . plain)
4952 }
50- . buttonStyle ( . plain)
5153 }
52- }
53- . modify { view in
54- if #available ( macOS 13 . 0 , * ) {
55- view . listRowSeparator ( . hidden ) . listSectionSeparator ( . hidden )
56- } else {
57- view
54+ . modify { view in
55+ if #available ( macOS 13 . 0 , * ) {
56+ view . listRowSeparator ( . hidden ) . listSectionSeparator ( . hidden )
57+ } else {
58+ view
59+ }
5860 }
5961 }
6062 }
61- }
62- . removeBackground ( )
63- . overlay {
64- WithViewStore ( store, observe: { $0. availableAPIKeyNames } ) { viewStore in
65- if viewStore. state. isEmpty {
66- Text ( """
63+ . removeBackground ( )
64+ . overlay {
65+ WithPerceptionTracking {
66+ if store. availableAPIKeyNames. isEmpty {
67+ Text ( """
6768 Empty
6869 Add a new key by clicking the add button
6970 """ )
70- . multilineTextAlignment ( . center)
71- . padding ( )
71+ . multilineTextAlignment ( . center)
72+ . padding ( )
73+ }
7274 }
7375 }
7476 }
75- }
76- . focusable ( false )
77- . frame ( width : 300 , height : 400 )
78- . background ( . thickMaterial )
79- . onAppear {
80- store . send ( . appear )
81- }
82- . sheet ( store : store . scope (
83- state : \. $ apiKeySubmission,
84- action : APIKeyManagement . Action . apiKeySubmission
85- ) ) { store in
86- APIKeySubmissionView ( store : store )
87- . frame ( minWidth : 400 )
77+ . focusable ( false )
78+ . frame ( width : 300 , height : 400 )
79+ . background ( . thickMaterial )
80+ . onAppear {
81+ store . send ( . appear )
82+ }
83+ . sheet ( item : $store . scope (
84+ state : \ . apiKeySubmission ,
85+ action : \. apiKeySubmission
86+ ) ) { store in
87+ APIKeySubmissionView ( store: store )
88+ . frame ( minWidth : 400 )
89+ }
8890 }
8991 }
9092}
9193
9294struct APIKeySubmissionView : View {
93- let store : StoreOf < APIKeySubmission >
95+ @ Perception . Bindable var store : StoreOf < APIKeySubmission >
9496
9597 var body : some View {
9698 ScrollView {
9799 VStack ( spacing: 0 ) {
98100 Form {
99- WithViewStore ( store, removeDuplicates: { $0. name == $1. name } ) { viewStore in
100- TextField ( " Name " , text: viewStore. $name)
101- }
102- WithViewStore ( store, removeDuplicates: { $0. key == $1. key } ) { viewStore in
103- SecureField ( " Key " , text: viewStore. $key)
101+ WithPerceptionTracking {
102+ TextField ( " Name " , text: $store. name)
103+ SecureField ( " Key " , text: $store. key)
104104 }
105105 } . padding ( )
106106
@@ -128,7 +128,7 @@ class APIKeyManagementView_Preview: PreviewProvider {
128128 initialState: . init(
129129 availableAPIKeyNames: [ " test1 " , " test2 " ]
130130 ) ,
131- reducer: APIKeyManagement ( )
131+ reducer: { APIKeyManagement ( ) }
132132 )
133133 )
134134 }
@@ -139,7 +139,7 @@ class APIKeySubmissionView_Preview: PreviewProvider {
139139 APIKeySubmissionView (
140140 store: . init(
141141 initialState: . init( ) ,
142- reducer: APIKeySubmission ( )
142+ reducer: { APIKeySubmission ( ) }
143143 )
144144 )
145145 }
0 commit comments