Skip to content

Commit 8488a6c

Browse files
committed
wip
1 parent cb370a7 commit 8488a6c

File tree

3 files changed

+66
-12
lines changed

3 files changed

+66
-12
lines changed

ghcjs/delivery-calculator/src/App/Types.hs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ where
3535
import qualified Data.ByteString.Base64.URL as B64URL
3636
import qualified Data.ByteString.Lazy as BL
3737
import Data.Functor.Barbie
38+
import qualified Data.Generics as Syb
3839
import qualified Data.Version as Version
3940
import Functora.Cfg
4041
import Functora.Miso.Prelude
@@ -45,6 +46,7 @@ import Functora.Miso.Types as X hiding
4546
newFieldPairId,
4647
)
4748
import qualified Functora.Miso.Types as FM
49+
import qualified Functora.Miso.Widgets.Field as Field
4850
import Functora.Money hiding (Currency, Money, Text)
4951
import qualified Functora.Prelude as Prelude
5052
import qualified Functora.Rates as Rates
@@ -214,7 +216,12 @@ unQrCode = \case
214216
stUri :: (MonadThrow m) => Model -> m URI
215217
stUri st = do
216218
uri <- mkURI $ from @Unicode @Prelude.Text baseUri
217-
qxs <- stQuery . uniqueToIdentity $ st ^. #modelState
219+
qxs <-
220+
stQuery
221+
. Syb.everywhere (Syb.mkT $ Field.truncateDynamicField Nothing)
222+
. uniqueToIdentity
223+
$ st
224+
^. #modelState
218225
pure
219226
$ uri
220227
{ URI.uriQuery = qxs
@@ -271,8 +278,11 @@ unShareUri uri = do
271278
Just tSt -> do
272279
bSt <- either throwString pure . B64URL.decode $ encodeUtf8 tSt
273280
iSt <- either (throwString . thd3) pure $ decodeBinary bSt
274-
uSt <- identityToUnique iSt
275-
pure $ Just uSt
281+
uSt <-
282+
identityToUnique
283+
$ Syb.everywhere (Syb.mkT Field.expandDynamicField) iSt
284+
pure
285+
$ Just uSt
276286

277287
baseUri :: Unicode
278288
#ifdef GHCID

ghcjs/miso-widgets/src/Functora/Miso/Types.hs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ module Functora.Miso.Types
2121
newDynamicTitleField,
2222
DynamicField (..),
2323
parseDynamicField,
24+
parseDynamicFieldId,
2425
inspectDynamicField,
2526
FieldType (..),
2627
htmlFieldType,
@@ -248,6 +249,15 @@ parseDynamicField value =
248249
where
249250
str = value ^. #fieldInput . #uniqueValue
250251

252+
parseDynamicFieldId :: Field DynamicField Identity -> Maybe DynamicField
253+
parseDynamicFieldId value =
254+
case value ^. #fieldType of
255+
FieldTypeNumber -> DynamicFieldNumber <$> parseRatio str
256+
FieldTypePercent -> DynamicFieldNumber <$> parseRatio str
257+
_ -> Just $ DynamicFieldText str
258+
where
259+
str = value ^. #fieldInput . #runIdentity
260+
251261
inspectDynamicField :: DynamicField -> Unicode
252262
inspectDynamicField = \case
253263
DynamicFieldText x -> x

ghcjs/miso-widgets/src/Functora/Miso/Widgets/Field.hs

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ module Functora.Miso.Widgets.Field
66
OptsWidget (..),
77
OptsWidgetPair (..),
88
ModalWidget' (..),
9+
truncateUnicode,
10+
truncateDynamicField,
11+
expandDynamicField,
912
field,
1013
ratioField,
1114
textField,
@@ -198,7 +201,7 @@ field full@Full {fullArgs = args, fullParser = parser, fullViewer = viewer} opts
198201
. #uniqueUid
199202
getInput st' =
200203
st' ^? cloneTraversal optic . #fieldInput . #uniqueValue
201-
getOutput st' = do
204+
getOutput st' =
202205
(st' ^? cloneTraversal optic >>= parser)
203206
<|> (st' ^? cloneTraversal optic . #fieldOutput)
204207
getInputReplacement st' = do
@@ -872,7 +875,7 @@ genericFieldViewer args widget =
872875
[ Css.fullWidth
873876
]
874877
$ [ widget
875-
$ truncateFieldInput
878+
$ truncateFieldViewer
876879
allowTrunc
877880
stateTrunc
878881
(opts ^. #fieldOptsTruncateLimit)
@@ -966,20 +969,51 @@ fieldViewerIcon icon action =
966969
)
967970
icon
968971

969-
truncateFieldInput ::
972+
truncateFieldViewer ::
970973
Bool ->
971974
OpenedOrClosed ->
972975
Maybe Int ->
973976
Unicode ->
974977
Unicode
975-
truncateFieldInput True Closed limit full =
976-
let half = fromMaybe defTruncateLimit limit `div` 2
977-
in take half full
978-
<> "..."
979-
<> MS.takeEnd half full
980-
truncateFieldInput _ _ _ full =
978+
truncateFieldViewer True Closed limit full =
979+
truncateUnicode limit full
980+
truncateFieldViewer _ _ _ full =
981981
full
982982

983+
truncateDynamicField ::
984+
Maybe Int ->
985+
Field DynamicField Identity ->
986+
Field DynamicField Identity
987+
truncateDynamicField limit =
988+
(#fieldInput . #runIdentity %~ truncateUnicode limit)
989+
. ( #fieldOutput %~ \case
990+
DynamicFieldNumber {} -> DynamicFieldNumber 0
991+
DynamicFieldText {} -> DynamicFieldText mempty
992+
)
993+
994+
truncateUnicode :: Maybe Int -> Unicode -> Unicode
995+
truncateUnicode limit input =
996+
if length input <= full
997+
then input
998+
else
999+
take half input
1000+
<> "..."
1001+
<> MS.takeEnd half input
1002+
where
1003+
full = fromMaybe defTruncateLimit limit
1004+
half = full `div` 2
1005+
1006+
expandDynamicField ::
1007+
Field DynamicField Identity ->
1008+
Field DynamicField Identity
1009+
expandDynamicField x =
1010+
if null inp
1011+
then x & #fieldInput . #runIdentity .~ inspectDynamicField out
1012+
else x & #fieldOutput .~ fromMaybe out (parseDynamicFieldId x)
1013+
where
1014+
inp = x ^. #fieldInput . #runIdentity
1015+
out = x ^. #fieldOutput
1016+
9831017
insertAction ::
9841018
Full model action t Unique ->
9851019
((Maybe Unicode -> JSM ()) -> JSM ()) ->

0 commit comments

Comments
 (0)