@@ -15,6 +15,7 @@ module Functora.Miso.Widgets.Field
15
15
dynamicField ,
16
16
passwordField ,
17
17
fieldViewer ,
18
+ fieldIcon ,
18
19
)
19
20
where
20
21
@@ -27,8 +28,6 @@ import qualified Functora.Miso.Widgets.Grid as Grid
27
28
import qualified Functora.Miso.Widgets.Qr as Qr
28
29
import qualified Functora.Miso.Widgets.Select as Select
29
30
import qualified Language.Javascript.JSaddle as JS
30
- import qualified Material.IconButton as IconButton
31
- import qualified Material.TextField as TextField
32
31
import qualified Miso.String as MS
33
32
34
33
data Args model action t f = Args
@@ -120,7 +119,7 @@ field ::
120
119
Full model action t Unique ->
121
120
Opts model action ->
122
121
View action
123
- field full @ Full {fullArgs = args, fullParser = parser, fullViewer = viewer} opts =
122
+ field Full {fullArgs = args, fullParser = parser, fullViewer = viewer} opts =
124
123
Grid. cell
125
124
$ ( do
126
125
x0 <-
@@ -142,41 +141,42 @@ field full@Full {fullArgs = args, fullParser = parser, fullViewer = viewer} opts
142
141
)
143
142
<> [ keyed
144
143
uid
145
- $ TextField. outlined
146
- $ TextField. config
147
- & TextField. setType
148
- ( fmap htmlFieldType (st ^? cloneTraversal optic . # fieldType)
149
- )
150
- & TextField. setOnInput onInputAction
151
- & TextField. setDisabled (opts ^. # optsDisabled)
152
- & TextField. setLabel
153
- ( Just $ opts ^. # optsPlaceholder
154
- )
155
- & TextField. setLeadingIcon
156
- ( fmap
157
- (fieldIcon Leading full opts)
158
- (opts ^? # optsLeadingWidget . _Just . cloneTraversal widgetOptic)
159
- )
160
- & TextField. setTrailingIcon
161
- ( fmap
162
- (fieldIcon Trailing full opts)
163
- (opts ^? # optsTrailingWidget . _Just . cloneTraversal widgetOptic)
164
- )
165
- & TextField. setAttributes
166
- ( [ id_
167
- . either impureThrow id
168
- . decodeUtf8Strict
169
- . unTagged
170
- $ htmlUid uid,
171
- onKeyDown $ action . optsOnKeyDownAction opts uid,
172
- onBlur onBlurAction,
173
- Css. fullWidth
174
- ]
175
- <> ( opts ^. # optsExtraAttributes
176
- )
144
+ . input_
145
+ $ ( catMaybes
146
+ [ fmap
147
+ (type_ . htmlFieldType)
148
+ (st ^? cloneTraversal optic . # fieldType),
149
+ Just $ onInput onInputAction,
150
+ Just . disabled_ $ opts ^. # optsDisabled,
151
+ Just . placeholder_ $ opts ^. # optsPlaceholder,
152
+ Just
153
+ . id_
154
+ . either impureThrow id
155
+ . decodeUtf8Strict
156
+ . unTagged
157
+ $ htmlUid uid,
158
+ Just . onKeyDown $ action . optsOnKeyDownAction opts uid,
159
+ Just $ onBlur onBlurAction,
160
+ Just Css. fullWidth
161
+ ]
177
162
)
163
+ <> ( opts ^. # optsExtraAttributes
164
+ )
178
165
]
179
166
where
167
+ --
168
+ -- TODO : implement
169
+ --
170
+ -- & TextField.setLeadingIcon
171
+ -- ( fmap
172
+ -- (fieldIcon Leading full opts)
173
+ -- (opts ^? #optsLeadingWidget . _Just . cloneTraversal widgetOptic)
174
+ -- )
175
+ -- & TextField.setTrailingIcon
176
+ -- ( fmap
177
+ -- (fieldIcon Trailing full opts)
178
+ -- (opts ^? #optsTrailingWidget . _Just . cloneTraversal widgetOptic)
179
+ -- )
180
180
st = argsModel args
181
181
optic = argsOptic args
182
182
action = argsAction args
@@ -276,20 +276,19 @@ passwordField args opts =
276
276
)
277
277
278
278
fieldIcon ::
279
- LeadingOrTrailing ->
280
279
Full model action t Unique ->
281
280
Opts model action ->
282
281
OptsWidget model action ->
283
- TextField. Icon action
284
- fieldIcon lot full opts = \ case
282
+ View action
283
+ fieldIcon full opts = \ case
285
284
CopyWidget ->
286
- fieldIconSimple lot " content_copy" mempty
285
+ fieldIconSimple " content_copy" mempty
287
286
. action
288
287
$ case st ^? cloneTraversal optic . # fieldInput . # uniqueValue of
289
288
Nothing -> PureUpdate id
290
289
Just txt -> Jsm. shareText txt
291
290
ClearWidget ->
292
- fieldIconSimple lot " close" mempty
291
+ fieldIconSimple " close" mempty
293
292
. ( fromMaybe action
294
293
$ optsOnInputAction opts
295
294
)
@@ -316,49 +315,49 @@ fieldIcon lot full opts = \case
316
315
pure id
317
316
)
318
317
PasteWidget ->
319
- fieldIconSimple lot " content_paste_go" mempty
318
+ fieldIconSimple " content_paste_go" mempty
320
319
$ insertAction full Jsm. selectClipboard
321
320
ScanQrWidget ->
322
- fieldIconSimple lot " qr_code_scanner" mempty
321
+ fieldIconSimple " qr_code_scanner" mempty
323
322
$ insertAction full Jsm. selectBarcode
324
323
ShowOrHideWidget ->
325
324
case st ^? cloneTraversal optic . # fieldType of
326
325
Just FieldTypePassword ->
327
- fieldIconSimple lot " visibility_off" mempty
326
+ fieldIconSimple " visibility_off" mempty
328
327
. action
329
328
. PureUpdate
330
329
$ cloneTraversal optic
331
330
. # fieldType
332
331
.~ FieldTypeText
333
332
_ ->
334
- fieldIconSimple lot " visibility" mempty
333
+ fieldIconSimple " visibility" mempty
335
334
. action
336
335
. PureUpdate
337
336
$ cloneTraversal optic
338
337
. # fieldType
339
338
.~ FieldTypePassword
340
339
UpWidget opt idx attrs ->
341
- fieldIconSimple lot " keyboard_double_arrow_up" attrs
340
+ fieldIconSimple " keyboard_double_arrow_up" attrs
342
341
. action
343
342
$ Jsm. moveUp opt idx
344
343
DownWidget opt idx attrs ->
345
- fieldIconSimple lot " keyboard_double_arrow_down" attrs
344
+ fieldIconSimple " keyboard_double_arrow_down" attrs
346
345
. action
347
346
$ Jsm. moveDown opt idx
348
347
DeleteWidget opt idx attrs ->
349
- fieldIconSimple lot " delete_forever" attrs
348
+ fieldIconSimple " delete_forever" attrs
350
349
. action
351
350
$ Jsm. removeAt opt idx
352
351
ModalWidget (ModalItemWidget opt idx _ _ ooc) ->
353
- fieldIconSimple lot " settings" mempty
352
+ fieldIconSimple " settings" mempty
354
353
. action
355
354
. PureUpdate
356
355
$ cloneTraversal opt
357
356
. ix idx
358
357
. cloneTraversal ooc
359
358
.~ Opened
360
359
ModalWidget (ModalFieldWidget opt idx access _) ->
361
- fieldIconSimple lot " settings" mempty
360
+ fieldIconSimple " settings" mempty
362
361
. action
363
362
. PureUpdate
364
363
$ cloneTraversal opt
@@ -367,14 +366,14 @@ fieldIcon lot full opts = \case
367
366
. # fieldModalState
368
367
.~ Opened
369
368
ModalWidget (ModalMiniWidget opt) ->
370
- fieldIconSimple lot " settings" mempty
369
+ fieldIconSimple " settings" mempty
371
370
. action
372
371
. PureUpdate
373
372
$ cloneTraversal opt
374
373
. # fieldModalState
375
374
.~ Opened
376
375
ActionWidget icon attrs act ->
377
- fieldIconSimple lot icon attrs act
376
+ fieldIconSimple icon attrs act
378
377
where
379
378
st = full ^. # fullArgs . # argsModel
380
379
optic = full ^. # fullArgs . # argsOptic
@@ -387,24 +386,21 @@ fieldIcon lot full opts = \case
387
386
. # uniqueUid
388
387
389
388
fieldIconSimple ::
390
- LeadingOrTrailing ->
391
389
Unicode ->
392
390
[Attribute action ] ->
393
391
action ->
394
- TextField. Icon action
395
- fieldIconSimple lot txt attrs action =
396
- TextField. icon
397
- ( [ class_ $ case lot of
398
- Leading -> " mdc-text-field__icon--leading"
399
- Trailing -> " mdc-text-field__icon--trailing" ,
400
- style_ [(" pointer-events" , " auto" )],
392
+ View action
393
+ fieldIconSimple txt attrs action =
394
+ button_
395
+ ( [ style_ [(" pointer-events" , " auto" )],
401
396
textProp " role" " button" ,
402
397
intProp " tabindex" 0 ,
403
398
onClick action
404
399
]
405
400
<> attrs
406
401
)
407
- txt
402
+ [ text txt
403
+ ]
408
404
409
405
fieldModal :: Args model action t f -> ModalWidget' model -> [View action ]
410
406
fieldModal args@ Args {argsAction = action} (ModalItemWidget opt idx fps lbl ooc) =
@@ -726,11 +722,9 @@ genericFieldViewer args widget =
726
722
727
723
fieldViewerIcon :: Unicode -> action -> View action
728
724
fieldViewerIcon icon action =
729
- IconButton. iconButton
730
- ( IconButton. config
731
- & IconButton. setOnClick action
732
- )
733
- icon
725
+ button_
726
+ [onClick action]
727
+ [text icon]
734
728
735
729
truncateFieldViewer ::
736
730
Bool ->
0 commit comments