Skip to content

Commit b156eba

Browse files
committed
Make form result available in row menu
1 parent 55a8a01 commit b156eba

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

src/Lumi/Components/Form/Table.purs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import Data.Maybe (Maybe, fromMaybe, isNothing, maybe)
2121
import Data.Monoid (guard)
2222
import Data.Newtype (class Newtype, un)
2323
import Data.Nullable as Nullable
24-
import Data.Traversable (for_, traverse)
24+
import Data.Traversable (for_, traverse, traverse_)
2525
import Data.Tuple (Tuple(..))
2626
import Effect (Effect)
2727
import Effect.Aff (Aff, launchAff_)
@@ -87,7 +87,7 @@ revalidate form props row = (un TableFormBuilder form props).validate row
8787
editableTable
8888
:: forall props row result
8989
. { addLabel :: String
90-
, addRow :: Maybe (Aff row)
90+
, addRow :: Maybe (Aff (Maybe row))
9191
, formBuilder :: TableFormBuilder { readonly :: Boolean | props } row result
9292
, maxRows :: Int
9393
-- | Controls what is displayed in the last cell of an editable table row,
@@ -97,6 +97,7 @@ editableTable
9797
, update :: (row -> row) -> Effect Unit
9898
}
9999
-> row
100+
-> Maybe result
100101
-> JSX
101102
, summary :: JSX
102103
}
@@ -127,8 +128,8 @@ editableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu, summar
127128
, rows: Left $ mapWithIndex Tuple rows
128129
, onRowAdd:
129130
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
132133
, onRowRemove: \(Tuple index _) ->
133134
onChange \rows' -> fromMaybe rows' (Array.deleteAt index rows')
134135
, removeCell: \onRowRemoveM (Tuple index row) ->
@@ -137,6 +138,7 @@ editableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu, summar
137138
, update: onChange <<< ix index
138139
}
139140
row
141+
(validate row)
140142
, columns:
141143
columns <#> \{ label, render } ->
142144
{ label
@@ -152,14 +154,15 @@ editableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu, summar
152154
nonEmptyEditableTable
153155
:: forall props row result
154156
. { addLabel :: String
155-
, addRow :: Maybe (Aff row)
157+
, addRow :: Maybe (Aff (Maybe row))
156158
, formBuilder :: TableFormBuilder { readonly :: Boolean | props } row result
157159
, maxRows :: Int
158160
, rowMenu
159161
:: { remove :: Maybe (Effect Unit)
160162
, update :: (row -> row) -> Effect Unit
161163
}
162164
-> row
165+
-> Maybe result
163166
-> JSX
164167
, summary :: JSX
165168
}
@@ -190,8 +193,8 @@ nonEmptyEditableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu
190193
, rows: Right $ mapWithIndex Tuple rows
191194
, onRowAdd:
192195
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
195198
, onRowRemove: \(Tuple index _) ->
196199
onChange \rows' -> fromMaybe rows' (NEA.fromArray =<< NEA.deleteAt index rows')
197200
, removeCell: \onRowRemoveM (Tuple index row) ->
@@ -200,6 +203,7 @@ nonEmptyEditableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu
200203
, update: onChange <<< ix index
201204
}
202205
row
206+
(validate row)
203207
, columns:
204208
columns <#> \{ label, render } ->
205209
{ label
@@ -213,13 +217,14 @@ nonEmptyEditableTable { addLabel, addRow, formBuilder: builder, maxRows, rowMenu
213217
-- | Default row menu that displays a bin icon, which, when clicked, deletes the
214218
-- | current row.
215219
defaultRowMenu
216-
:: forall row
220+
:: forall row result
217221
. { remove :: Maybe (Effect Unit)
218222
, update :: (row -> row) -> Effect Unit
219223
}
220224
-> row
225+
-> Maybe result
221226
-> JSX
222-
defaultRowMenu { remove } row =
227+
defaultRowMenu { remove } row _ =
223228
EditableTable.defaultRemoveCell (map const remove) row
224229

225230
-- | Convert a `FormBuilder` into a column of a table form with the specified

src/Lumi/Components/Input.purs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ displayStep (Step e) = show e
9191

9292
type InputProps =
9393
{ "type" :: String
94+
, inputMode :: String
9495
, autoComplete :: String
9596
, autoFocus :: Boolean
9697
, checked :: CheckboxState
@@ -125,6 +126,7 @@ input = makeStateless component $ element lumiInputElement <<< mapProps
125126
, "data-testid": props.testId
126127
, "data-variant": show props.variant
127128
, "type": props."type"
129+
, inputMode: props.inputMode
128130
, autoComplete: props.autoComplete
129131
, autoFocus: props.autoFocus
130132
, checked: props.checked == On
@@ -150,6 +152,7 @@ input = makeStateless component $ element lumiInputElement <<< mapProps
150152
text_ :: InputProps
151153
text_ =
152154
{ "type": "text"
155+
, inputMode: "text"
153156
, autoComplete: "on"
154157
, autoFocus: false
155158
, checked: Off
@@ -181,6 +184,7 @@ username = text_
181184
email :: InputProps
182185
email = text_
183186
{ "type" = "email"
187+
, inputMode = "email"
184188
, autoComplete = "email"
185189
}
186190

@@ -202,33 +206,39 @@ ccName = text_
202206

203207
ccNumber :: InputProps
204208
ccNumber = text_
205-
{ autoComplete = "cc-number"
209+
{ inputMode = "numeric"
210+
, autoComplete = "cc-number"
206211
}
207212

208213
ccExpMonth :: InputProps
209214
ccExpMonth = text_
210-
{ autoComplete = "cc-exp-month"
215+
{ inputMode = "numeric"
216+
, autoComplete = "cc-exp-month"
211217
}
212218

213219
ccExpYear :: InputProps
214220
ccExpYear = text_
215-
{ autoComplete = "cc-exp-year"
221+
{ inputMode = "numeric"
222+
, autoComplete = "cc-exp-year"
216223
}
217224

218225
ccCode :: InputProps
219226
ccCode = text_
220-
{ autoComplete = "cc-csc"
227+
{ inputMode = "numeric"
228+
, autoComplete = "cc-csc"
221229
}
222230

223231
telephone :: InputProps
224232
telephone = text_
225233
{ "type" = "tel"
234+
, inputMode = "tel"
226235
, autoComplete = "tel"
227236
}
228237

229238
search :: InputProps
230239
search = text_
231240
{ "type" = "search"
241+
, inputMode = "search"
232242
}
233243

234244
hidden :: InputProps
@@ -244,6 +254,7 @@ date = text_
244254
number :: InputProps
245255
number = text_
246256
{ "type" = "number"
257+
, inputMode = "decimal"
247258
, step = notNull Any
248259
}
249260

0 commit comments

Comments
 (0)