OnActivated.purs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. module Browser.Tabs.OnActivated (addListener, removeListener, ActiveInfo(..)) where
  2. import Browser.Tabs (TabId, WindowId)
  3. import Browser.Utils (Listener, UnregisteredListener, unwrapForeign, mkListenerOne)
  4. import Control.Bind ((>=>))
  5. import Data.Function (($))
  6. import Data.Generic.Rep (class Generic)
  7. import Data.Generic.Rep.Show (genericShow)
  8. import Data.Maybe (Maybe)
  9. import Data.Newtype (class Newtype)
  10. import Data.Show (class Show)
  11. import Data.Unit (Unit)
  12. import Effect (Effect)
  13. import Foreign (Foreign)
  14. import Foreign.Class (class Decode, class Encode)
  15. import Foreign.Generic (defaultOptions, genericDecode, genericEncode)
  16. import Prelude (bind)
  17. newtype ActiveInfo
  18. = ActiveInfo
  19. { previousTabId :: Maybe TabId
  20. , tabId :: TabId
  21. , windowId :: WindowId
  22. }
  23. derive instance newtypeActiveInfo :: Newtype ActiveInfo _
  24. derive instance genActiveInfo :: Generic ActiveInfo _
  25. instance showActiveInfo :: Show ActiveInfo where
  26. show = genericShow
  27. instance encodeActiveInfo :: Encode ActiveInfo where
  28. encode x = genericEncode (defaultOptions { unwrapSingleConstructors = true }) x
  29. instance decodeActiveInfo :: Decode ActiveInfo where
  30. decode x = genericDecode (defaultOptions { unwrapSingleConstructors = true }) x
  31. foreign import addListener' :: (Listener Foreign) -> Effect Unit
  32. addListener :: (UnregisteredListener ActiveInfo) -> Effect Unit
  33. addListener listener = do
  34. lst <- mkListenerOne $ unwrapForeign >=> listener
  35. addListener' lst
  36. foreign import removeListener :: (Listener ActiveInfo) -> Effect Unit