Skip to content

Commit 6c60bd4

Browse files
committed
wip
1 parent 6fab6fa commit 6c60bd4

File tree

1 file changed

+19
-11
lines changed
  • ghcjs/miso-functora/src/Functora/Miso

1 file changed

+19
-11
lines changed

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

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,9 @@ newDynamicField :: (MonadIO m) => DynamicField -> m (Field DynamicField Unique)
211211
newDynamicField output =
212212
newField
213213
( case output of
214-
DynamicFieldNumber {} -> FieldTypeNumber
215214
DynamicFieldText {} -> FieldTypeText
215+
DynamicFieldNumber {} -> FieldTypeNumber
216+
DynamicFieldRfc2397 {} -> FieldTypeImage
216217
)
217218
output
218219
inspectDynamicField
@@ -221,8 +222,9 @@ newDynamicFieldId :: DynamicField -> Field DynamicField Identity
221222
newDynamicFieldId output =
222223
newFieldId
223224
( case output of
224-
DynamicFieldNumber {} -> FieldTypeNumber
225225
DynamicFieldText {} -> FieldTypeText
226+
DynamicFieldNumber {} -> FieldTypeNumber
227+
DynamicFieldRfc2397 {} -> FieldTypeImage
226228
)
227229
inspectDynamicField
228230
output
@@ -237,31 +239,37 @@ newDynamicTitleField =
237239
data DynamicField
238240
= DynamicFieldText Unicode
239241
| DynamicFieldNumber Rational
242+
| DynamicFieldRfc2397 (Maybe Unicode) Rfc2397
240243
deriving stock (Eq, Ord, Show, Data, Generic)
241244
deriving (Binary) via GenericType DynamicField
242245

243246
parseDynamicField :: Field DynamicField Unique -> Maybe DynamicField
244247
parseDynamicField value =
245-
case value ^. #fieldType of
246-
FieldTypeNumber -> DynamicFieldNumber <$> parseRatio str
247-
FieldTypePercent -> DynamicFieldNumber <$> parseRatio str
248-
_ -> Just $ DynamicFieldText str
249-
where
250-
str = value ^. #fieldInput . #uniqueValue
248+
parseDynamic value $ value ^. #fieldInput . #uniqueValue
251249

252250
parseDynamicFieldId :: Field DynamicField Identity -> Maybe DynamicField
253251
parseDynamicFieldId value =
252+
parseDynamic value $ value ^. #fieldInput . #runIdentity
253+
254+
parseDynamic :: Field DynamicField f -> Unicode -> Maybe DynamicField
255+
parseDynamic value str =
254256
case value ^. #fieldType of
255257
FieldTypeNumber -> DynamicFieldNumber <$> parseRatio str
256258
FieldTypePercent -> DynamicFieldNumber <$> parseRatio str
257-
_ -> Just $ DynamicFieldText str
258-
where
259-
str = value ^. #fieldInput . #runIdentity
259+
FieldTypeImage -> do
260+
let mVal = decodeRfc2397 str
261+
let mRef = case value ^. #fieldOutput of
262+
DynamicFieldRfc2397 ref val | mVal == Just val -> ref
263+
_ -> Nothing
264+
fmap (DynamicFieldRfc2397 mRef) mVal <|> Just (DynamicFieldText str)
265+
_ ->
266+
Just $ DynamicFieldText str
260267

261268
inspectDynamicField :: DynamicField -> Unicode
262269
inspectDynamicField = \case
263270
DynamicFieldText x -> x
264271
DynamicFieldNumber x -> inspectRatioDef x
272+
DynamicFieldRfc2397 _ x -> encodeRfc2397 x
265273

266274
data FieldType
267275
= -- Rational

0 commit comments

Comments
 (0)