Route.hs
module Frontend.Route where
import Prelude hiding ((/))
import Data.Generic.Rep (class Generic)
import Data.Generic.Rep.Show (genericShow)
import Effect.Class (class MonadEffect, liftEffect)
import Routing.Duplex (RouteDuplex', print, root)
import Routing.Duplex.Generic (noArgs, sum)
import Routing.Duplex.Generic.Syntax ((/))
import Routing.Hash (setHash)
-- All possible routes in the application
data Route
= Dashboard
| Tracking
| Filtering
| Statistics
| Zones
| Cameras
derive instance genericRoute :: Generic Route _
derive instance eqRoute :: Eq Route
derive instance ordRoute :: Ord Route
instance showRoute :: Show Route where
show = genericShow
routeCodec :: RouteDuplex' Route
routeCodec = root $ sum
{ "Dashboard": noArgs
, "Tracking": "tracking" / noArgs
, "Filtering": "filtering" / noArgs
, "Statistics": "statistics" / noArgs
, "Zones": "zones" / noArgs
, "Cameras": "cameras" / noArgs
}
navigate :: forall m. MonadEffect m => Route -> m Unit
navigate = liftEffect <<< setHash <<< print routeCodec