@@ -657,6 +657,8 @@ instance (SupportsHydrationDomBuilder t m) => DomBuilder t (HydrationDomBuilderT
657657 (checkedChangedByUI, triggerCheckedChangedByUI) <- newTriggerEvent
658658 (checkedChangedBySetChecked, triggerCheckedChangedBySetChecked) <- newTriggerEvent
659659
660+ (fileChange, triggerFileChange) <- newTriggerEvent
661+
660662 -- Expected initial value from config
661663 let v0 = _inputElementConfig_initialValue cfg
662664
@@ -697,10 +699,12 @@ instance (SupportsHydrationDomBuilder t m) => DomBuilder t (HydrationDomBuilderT
697699 Input.setChecked domInputElement newChecked
698700 when (newChecked /= oldChecked) $ liftIO $ triggerCheckedChangedBySetChecked newChecked
699701
700−-- files <- holdDyn mempty <=< wrapDomEvent domInputElement (`on` Events.change) $ do
701−-- mfiles <- Input.getFiles domInputElement
702−-- let getMyFiles xs = fmap catMaybes . mapM (FileList.item xs) . flip take [0..] . fromIntegral =<< FileList.getLength xs
703−-- maybe (return []) getMyFiles mfiles
702+ liftJSM $ domInputElement `on` Events.change $ do
703+ mfiles <- Input.getFiles domInputElement
704+ let getMyFiles xs = fmap catMaybes . mapM (FileList.item xs) . flip take [0..] . fromIntegral =<< FileList.getLength xs
705+ liftIO . triggerFileChange =<< maybe (return []) getMyFiles mfiles
706+
707+ return ()
704708
705709 checked' <- holdDyn (_inputElementConfig_initialChecked cfg) $ leftmost
706710 [ checkedChangedBySetChecked
@@ -716,6 +720,8 @@ instance (SupportsHydrationDomBuilder t m) => DomBuilder t (HydrationDomBuilderT
716720 , valueChangedByUI
717721 ]
718722
723+ files <- holdDyn mempty fileChange
724+
719725 return $ InputElement
720726 { _inputElement_value = v
721727 , _inputElement_checked = checked
@@ -723,8 +729,8 @@ instance (SupportsHydrationDomBuilder t m) => DomBuilder t (HydrationDomBuilderT
723729 , _inputElement_input = valueChangedByUI
724730 , _inputElement_hasFocus = hasFocus
725731 , _inputElement_element = e
726− , _inputElement_raw = undefined -- domInputElement
727− , _inputElement_files = undefined -- files
732+ , _inputElement_raw = undefined -- TODO domInputElement
733+ , _inputElement_files = files
728734 }
729735
730736 {-# INLINABLE textAreaElement #-}