module Ribosome.Menu.Data.Menu where

import Data.DeepLenses (DeepLenses(..))

import Ribosome.Menu.Data.FilteredMenuItem (FilteredMenuItem)
import Ribosome.Menu.Data.MenuItem (MenuItem)

newtype MenuFilter =
  MenuFilter Text
  deriving (MenuFilter -> MenuFilter -> Bool
(MenuFilter -> MenuFilter -> Bool)
-> (MenuFilter -> MenuFilter -> Bool) -> Eq MenuFilter
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MenuFilter -> MenuFilter -> Bool
$c/= :: MenuFilter -> MenuFilter -> Bool
== :: MenuFilter -> MenuFilter -> Bool
$c== :: MenuFilter -> MenuFilter -> Bool
Eq, Int -> MenuFilter -> ShowS
[MenuFilter] -> ShowS
MenuFilter -> String
(Int -> MenuFilter -> ShowS)
-> (MenuFilter -> String)
-> ([MenuFilter] -> ShowS)
-> Show MenuFilter
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MenuFilter] -> ShowS
$cshowList :: [MenuFilter] -> ShowS
show :: MenuFilter -> String
$cshow :: MenuFilter -> String
showsPrec :: Int -> MenuFilter -> ShowS
$cshowsPrec :: Int -> MenuFilter -> ShowS
Show)

instance Default MenuFilter where
  def :: MenuFilter
def = Text -> MenuFilter
MenuFilter Text
""

data Menu a =
  Menu {
    Menu a -> [MenuItem a]
_items :: [MenuItem a],
    Menu a -> [FilteredMenuItem a]
_filtered :: [FilteredMenuItem a],
    Menu a -> Int
_selected :: Int,
    Menu a -> [Int]
_marked :: [Int],
    Menu a -> MenuFilter
_currentFilter :: MenuFilter,
    Menu a -> Maybe Int
_maxItems :: Maybe Int
  }
  deriving (Menu a -> Menu a -> Bool
(Menu a -> Menu a -> Bool)
-> (Menu a -> Menu a -> Bool) -> Eq (Menu a)
forall a. Eq a => Menu a -> Menu a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Menu a -> Menu a -> Bool
$c/= :: forall a. Eq a => Menu a -> Menu a -> Bool
== :: Menu a -> Menu a -> Bool
$c== :: forall a. Eq a => Menu a -> Menu a -> Bool
Eq, Int -> Menu a -> ShowS
[Menu a] -> ShowS
Menu a -> String
(Int -> Menu a -> ShowS)
-> (Menu a -> String) -> ([Menu a] -> ShowS) -> Show (Menu a)
forall a. Show a => Int -> Menu a -> ShowS
forall a. Show a => [Menu a] -> ShowS
forall a. Show a => Menu a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Menu a] -> ShowS
$cshowList :: forall a. Show a => [Menu a] -> ShowS
show :: Menu a -> String
$cshow :: forall a. Show a => Menu a -> String
showsPrec :: Int -> Menu a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Menu a -> ShowS
Show, (forall x. Menu a -> Rep (Menu a) x)
-> (forall x. Rep (Menu a) x -> Menu a) -> Generic (Menu a)
forall x. Rep (Menu a) x -> Menu a
forall x. Menu a -> Rep (Menu a) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Menu a) x -> Menu a
forall a x. Menu a -> Rep (Menu a) x
$cto :: forall a x. Rep (Menu a) x -> Menu a
$cfrom :: forall a x. Menu a -> Rep (Menu a) x
Generic, Menu a
Menu a -> Default (Menu a)
forall a. Menu a
forall a. a -> Default a
def :: Menu a
$cdef :: forall a. Menu a
Default)

makeClassy ''Menu

instance DeepLenses (Menu a) (Menu a) where
  deepLens :: (Menu a -> f (Menu a)) -> Menu a -> f (Menu a)
deepLens = (Menu a -> f (Menu a)) -> Menu a -> f (Menu a)
forall a. a -> a
id