@@ -5,8 +5,6 @@ module Functora.Miso.Widgets.Field
5
5
defOpts ,
6
6
OptsWidget (.. ),
7
7
ModalWidget' (.. ),
8
- ViewerOpts (.. ),
9
- defViewerOpts ,
10
8
field ,
11
9
ratioField ,
12
10
textField ,
@@ -114,24 +112,6 @@ data ModalWidget' model where
114
112
ATraversal' model (Field a Unique ) ->
115
113
ModalWidget' model
116
114
117
- data ViewerOpts model = ViewerOpts
118
- { viewerOptsQrOptic :: Maybe (ATraversal' model OpenedOrClosed ),
119
- viewerOptsTruncateOptic :: Maybe (ATraversal' model OpenedOrClosed ),
120
- viewerOptsTruncateLimit :: Maybe Int
121
- }
122
- deriving stock (Generic )
123
-
124
- defViewerOpts :: ViewerOpts model
125
- defViewerOpts =
126
- ViewerOpts
127
- { viewerOptsQrOptic = Nothing ,
128
- viewerOptsTruncateOptic = Nothing ,
129
- viewerOptsTruncateLimit = Just defTruncateLimit
130
- }
131
-
132
- defTruncateLimit :: Int
133
- defTruncateLimit = 67
134
-
135
115
field ::
136
116
Full model action t Unique ->
137
117
Opts model action ->
@@ -765,25 +745,31 @@ fieldViewer ::
765
745
( Foldable1 f
766
746
) =>
767
747
Args model action t f ->
768
- ViewerOpts model ->
769
748
[View action ]
770
- fieldViewer args opts =
749
+ fieldViewer args =
771
750
case typ of
772
- FieldTypeNumber -> genericFieldViewer args opts text
773
- FieldTypePercent -> genericFieldViewer args opts $ text . (<> " %" )
774
- FieldTypeText -> genericFieldViewer args opts text
751
+ FieldTypeNumber -> genericFieldViewer args text
752
+ FieldTypePercent -> genericFieldViewer args $ text . (<> " %" )
753
+ FieldTypeText -> genericFieldViewer args text
775
754
FieldTypeTitle -> header val
776
755
FieldTypeHtml ->
777
- genericFieldViewer args opts {viewerOptsTruncateLimit = Nothing } rawHtml
778
- FieldTypePassword -> genericFieldViewer args opts $ const " *****"
779
- FieldTypeQrCode -> Qr. qr val <> genericFieldViewer args opts text
756
+ genericFieldViewer
757
+ ( args
758
+ & cloneTraversal optic
759
+ . # fieldOpts
760
+ . # fieldOptsTruncateLimit
761
+ .~ Nothing
762
+ )
763
+ rawHtml
764
+ FieldTypePassword -> genericFieldViewer args $ const " *****"
765
+ FieldTypeQrCode -> Qr. qr val <> genericFieldViewer args text
780
766
where
781
- opt =
767
+ optic =
782
768
# argsModel . argsOptic args
783
769
typ =
784
- fromMaybe FieldTypeText $ args ^? cloneTraversal opt . # fieldType
770
+ fromMaybe FieldTypeText $ args ^? cloneTraversal optic . # fieldType
785
771
val =
786
- maybe mempty fold1 $ args ^? cloneTraversal opt . # fieldInput
772
+ maybe mempty fold1 $ args ^? cloneTraversal optic . # fieldInput
787
773
788
774
header :: MisoString -> [View action ]
789
775
header txt =
@@ -803,10 +789,9 @@ genericFieldViewer ::
803
789
( Foldable1 f
804
790
) =>
805
791
Args model action t f ->
806
- ViewerOpts model ->
807
792
(MisoString -> View action ) ->
808
793
[View action ]
809
- genericFieldViewer args opts widget =
794
+ genericFieldViewer args widget =
810
795
if input == mempty
811
796
then mempty
812
797
else
@@ -835,7 +820,12 @@ genericFieldViewer args opts widget =
835
820
[ div_
836
821
[ Css. fullWidth
837
822
]
838
- $ [ widget $ truncateFieldInput allowTrunc stateTrunc opts input
823
+ $ [ widget
824
+ $ truncateFieldInput
825
+ allowTrunc
826
+ stateTrunc
827
+ (opts ^. # fieldOptsTruncateLimit)
828
+ input
839
829
]
840
830
<> ( if null extraWidgets
841
831
then mempty
@@ -850,38 +840,37 @@ genericFieldViewer args opts widget =
850
840
]
851
841
]
852
842
where
853
- opt =
854
- # argsModel . argsOptic args
843
+ st = argsModel args
844
+ optic = argsOptic args
845
+ action = argsAction args
855
846
input =
856
- maybe mempty fold1 $ args ^? cloneTraversal opt . # fieldInput
857
- action =
858
- args ^. # argsAction
859
- fopts =
860
- fromMaybe defFieldOpts $ args ^? cloneTraversal opt . # fieldOpts
847
+ maybe mempty fold1 $ st ^? cloneTraversal optic . # fieldInput
848
+ opts =
849
+ fromMaybe defFieldOpts $ st ^? cloneTraversal optic . # fieldOpts
861
850
stateQr =
862
- fromMaybe Closed $ fopts ^. # fieldOptsQrState
851
+ fromMaybe Closed $ opts ^. # fieldOptsQrState
863
852
allowCopy =
864
- fopts ^. # fieldOptsAllowCopy
853
+ opts ^. # fieldOptsAllowCopy
865
854
allowTrunc =
866
- maybe False (MS. length input > ) $ fopts ^. # fieldOptsTruncateLimit
867
- opticTrunc =
868
- opts ^. # viewerOptsTruncateOptic
855
+ maybe False (MS. length input > ) $ opts ^. # fieldOptsTruncateLimit
869
856
stateTrunc =
870
- fromMaybe Closed $ fopts ^. # fieldOptsTruncateState
857
+ fromMaybe Closed $ opts ^. # fieldOptsTruncateState
871
858
extraWidgets =
872
859
( if not allowTrunc
873
860
then mempty
874
861
else do
875
862
let icon = case stateTrunc of
876
863
Closed -> " open_in_full"
877
864
Opened -> " close_fullscreen"
878
- trav <- maybeToList opticTrunc
879
865
pure
880
866
. fieldViewerIcon icon
881
867
. action
882
868
$ pure
883
869
. ( &
884
- cloneTraversal trav
870
+ cloneTraversal optic
871
+ . # fieldOpts
872
+ . # fieldOptsTruncateState
873
+ . _Just
885
874
%~ ( \ case
886
875
Closed -> Opened
887
876
Opened -> Closed
@@ -892,13 +881,15 @@ genericFieldViewer args opts widget =
892
881
let icon = case stateQr of
893
882
Closed -> " qr_code_2"
894
883
Opened -> " grid_off"
895
- trav <- maybeToList $ opts ^. # viewerOptsQrOptic
896
884
pure
897
885
. fieldViewerIcon icon
898
886
. action
899
887
$ pure
900
888
. ( &
901
- cloneTraversal trav
889
+ cloneTraversal optic
890
+ . # fieldOpts
891
+ . # fieldOptsQrState
892
+ . _Just
902
893
%~ ( \ case
903
894
Closed -> Opened
904
895
Opened -> Closed
@@ -925,12 +916,12 @@ fieldViewerIcon icon action =
925
916
truncateFieldInput ::
926
917
Bool ->
927
918
OpenedOrClosed ->
928
- ViewerOpts model ->
919
+ Maybe Int ->
929
920
MisoString ->
930
921
MisoString
931
- truncateFieldInput True Closed opts raw =
922
+ truncateFieldInput True Closed limit raw =
932
923
let full = fromMisoString raw
933
- half = fromMaybe defTruncateLimit (viewerOptsTruncateLimit opts) `div` 2
924
+ half = fromMaybe defTruncateLimit limit `div` 2
934
925
in toMisoString
935
926
$ T. take half full
936
927
<> " ..."
0 commit comments