@@ -21,7 +21,7 @@ import Data.Maybe (Maybe, fromMaybe, isNothing, maybe)
21
21
import Data.Monoid (guard )
22
22
import Data.Newtype (class Newtype , un )
23
23
import Data.Nullable as Nullable
24
- import Data.Traversable (for_ , traverse )
24
+ import Data.Traversable (for_ , traverse , traverse_ )
25
25
import Data.Tuple (Tuple (..))
26
26
import Effect (Effect )
27
27
import Effect.Aff (Aff , launchAff_ )
@@ -87,7 +87,7 @@ revalidate form props row = (un TableFormBuilder form props).validate row
87
87
editableTable
88
88
:: forall props row result
89
89
. { addLabel :: String
90
- , addRow :: Maybe (Aff row )
90
+ , addRow :: Maybe (Aff ( Maybe row ) )
91
91
, formBuilder :: TableFormBuilder { readonly :: Boolean | props } row result
92
92
, maxRows :: Int
93
93
-- | Controls what is displayed in the last cell of an editable table row,
@@ -97,6 +97,7 @@ editableTable
97
97
, update :: (row -> row ) -> Effect Unit
98
98
}
99
99
-> row
100
+ -> Maybe result
100
101
-> JSX
101
102
, summary :: JSX
102
103
}
@@ -127,8 +128,8 @@ editableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu, summar
127
128
, rows: Left $ mapWithIndex Tuple rows
128
129
, onRowAdd:
129
130
for_ addRow \addRow' -> launchAff_ do
130
- row <- addRow'
131
- liftEffect $ onChange ( flip Array .snoc row)
131
+ rowM <- addRow'
132
+ traverse_ ( liftEffect <<< onChange <<< flip Array .snoc) rowM
132
133
, onRowRemove: \(Tuple index _) ->
133
134
onChange \rows' -> fromMaybe rows' (Array .deleteAt index rows')
134
135
, removeCell: \onRowRemoveM (Tuple index row) ->
@@ -137,6 +138,7 @@ editableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu, summar
137
138
, update: onChange <<< ix index
138
139
}
139
140
row
141
+ (validate row)
140
142
, columns:
141
143
columns <#> \{ label, render } ->
142
144
{ label
@@ -152,14 +154,15 @@ editableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu, summar
152
154
nonEmptyEditableTable
153
155
:: forall props row result
154
156
. { addLabel :: String
155
- , addRow :: Maybe (Aff row )
157
+ , addRow :: Maybe (Aff ( Maybe row ) )
156
158
, formBuilder :: TableFormBuilder { readonly :: Boolean | props } row result
157
159
, maxRows :: Int
158
160
, rowMenu
159
161
:: { remove :: Maybe (Effect Unit )
160
162
, update :: (row -> row ) -> Effect Unit
161
163
}
162
164
-> row
165
+ -> Maybe result
163
166
-> JSX
164
167
, summary :: JSX
165
168
}
@@ -190,8 +193,8 @@ nonEmptyEditableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu
190
193
, rows: Right $ mapWithIndex Tuple rows
191
194
, onRowAdd:
192
195
for_ addRow \addRow' -> launchAff_ do
193
- row <- addRow'
194
- liftEffect $ onChange ( flip NEA .snoc row)
196
+ rowM <- addRow'
197
+ traverse_ ( liftEffect <<< onChange <<< flip NEA .snoc) rowM
195
198
, onRowRemove: \(Tuple index _) ->
196
199
onChange \rows' -> fromMaybe rows' (NEA .fromArray =<< NEA .deleteAt index rows')
197
200
, removeCell: \onRowRemoveM (Tuple index row) ->
@@ -200,6 +203,7 @@ nonEmptyEditableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu
200
203
, update: onChange <<< ix index
201
204
}
202
205
row
206
+ (validate row)
203
207
, columns:
204
208
columns <#> \{ label, render } ->
205
209
{ label
@@ -213,13 +217,14 @@ nonEmptyEditableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu
213
217
-- | Default row menu that displays a bin icon, which, when clicked, deletes the
214
218
-- | current row.
215
219
defaultRowMenu
216
- :: forall row
220
+ :: forall row result
217
221
. { remove :: Maybe (Effect Unit )
218
222
, update :: (row -> row ) -> Effect Unit
219
223
}
220
224
-> row
225
+ -> Maybe result
221
226
-> JSX
222
- defaultRowMenu { remove } row =
227
+ defaultRowMenu { remove } row _ =
223
228
EditableTable .defaultRemoveCell (map const remove) row
224
229
225
230
-- | Convert a `FormBuilder` into a column of a table form with the specified
0 commit comments