Events.purs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. module PureTabs.Model.Events (
  2. BackgroundEvent(..)
  3. , SidebarEvent(..)
  4. , TabWithGroup(..)
  5. , GroupMapping(..)
  6. , groupMapping
  7. ) where
  8. import Browser.Tabs (Tab, TabId, WindowId)
  9. import Browser.Tabs.OnUpdated (ChangeInfo)
  10. import Data.Generic.Rep (class Generic)
  11. import Data.Generic.Rep.Show (genericShow)
  12. import Data.Newtype (class Newtype)
  13. import Data.Maybe (Maybe)
  14. import Data.Show (class Show)
  15. import PureTabs.Model.Group (GroupId)
  16. import Foreign.Class (class Decode, class Encode)
  17. import Foreign.Generic (defaultOptions, genericDecode, genericEncode)
  18. data TabWithGroup
  19. = TabWithGroup Tab (Maybe GroupId)
  20. derive instance genTabWithGroup :: Generic TabWithGroup _
  21. instance showTabWithGroup :: Show TabWithGroup where
  22. show = genericShow
  23. instance encodeTabWithGroup :: Encode TabWithGroup where
  24. encode x = genericEncode (defaultOptions { unwrapSingleConstructors = true }) x
  25. instance decodeTabWithGroup :: Decode TabWithGroup where
  26. decode x = genericDecode (defaultOptions { unwrapSingleConstructors = true }) x
  27. newtype GroupMapping
  28. = GroupMapping { groupId :: GroupId
  29. , name :: String
  30. }
  31. groupMapping :: GroupId -> String -> GroupMapping
  32. groupMapping gid name = GroupMapping { groupId: gid, name: name }
  33. derive instance genGroupMapping :: Generic GroupMapping _
  34. derive instance newtypeGroupMapping :: Newtype GroupMapping _
  35. instance showGroupMapping :: Show GroupMapping where
  36. show = genericShow
  37. instance encodeGroupMapping :: Encode GroupMapping where
  38. encode x = genericEncode (defaultOptions { unwrapSingleConstructors = true }) x
  39. instance decodeGroupMapping :: Decode GroupMapping where
  40. decode x = genericDecode (defaultOptions { unwrapSingleConstructors = true }) x
  41. data BackgroundEvent
  42. = BgInitialTabList (Array GroupMapping) (Array TabWithGroup)
  43. | BgTabCreated Tab
  44. | BgTabDeleted TabId
  45. | BgTabUpdated TabId ChangeInfo Tab
  46. | BgTabMoved TabId Int Int
  47. | BgTabActivated (Maybe TabId) TabId
  48. | BgTabAttached Tab
  49. | BgTabDetached TabId
  50. | BgGroupDeleted GroupId (Maybe TabId)
  51. derive instance genBackgroundEvent :: Generic BackgroundEvent _
  52. instance showBackgroundEvent :: Show BackgroundEvent where
  53. show = genericShow
  54. data SidebarEvent
  55. = SbDeleteTab TabId
  56. | SbActivateTab TabId
  57. | SbCreateTab (Maybe TabId)
  58. | SbMoveTab TabId Int
  59. | SbDetacheTab
  60. | SbHasWindowId WindowId
  61. | SbSelectedGroup (Array TabId)
  62. | SbDeletedGroup GroupId (Array TabId)
  63. | SbChangeTabGroup TabId (Maybe GroupId)
  64. | SbCreatedGroup GroupId String
  65. | SbRenamedGroup GroupId String
  66. | SbMovedGroup GroupId Int
  67. derive instance genSidebarEvent :: Generic SidebarEvent _
  68. instance showSidebarEvent :: Show SidebarEvent where
  69. show = genericShow