ArtDecoTab.purs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. module LinkedIn.UI.Components.ArtDecoTab where
  2. import Prelude
  3. import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
  4. import Data.Generic.Rep (class Generic)
  5. import Data.Lens (Lens', lens', toListOf, view)
  6. import Data.Lens.Record (prop)
  7. import Data.List (List)
  8. import Data.List.Types (NonEmptyList)
  9. import Data.Maybe (Maybe)
  10. import Data.Show.Generic (genericShow)
  11. import Data.Traversable (class Traversable, sequence, traverseDefault)
  12. import Data.Tuple (Tuple(..))
  13. import LinkedIn.CanBeQueried (class CanBeQueried, subQueryOne)
  14. import LinkedIn.Queryable (class Queryable)
  15. import LinkedIn.UI.Components.ArtDeco (ArtDecoPvsEntity, _pvs_to_header_bold, _pvs_to_header_light, _pvs_to_header_normal, _pvs_to_subcomponents)
  16. import Type.Proxy (Proxy(..))
  17. data ArtDecoTabElement a = ArtDecoTabElement {
  18. pvs_entity :: ArtDecoPvsEntity a
  19. }
  20. derive instance Generic (ArtDecoTabElement a) _
  21. derive instance Eq a => Eq (ArtDecoTabElement a)
  22. instance Show a => Show (ArtDecoTabElement a) where
  23. show = genericShow
  24. derive instance Functor ArtDecoTabElement
  25. instance Foldable ArtDecoTabElement where
  26. foldMap f (ArtDecoTabElement {pvs_entity}) = foldMap f pvs_entity
  27. foldl = \x -> foldlDefault x
  28. foldr = \x -> foldrDefault x
  29. instance Traversable ArtDecoTabElement where
  30. sequence (ArtDecoTabElement {pvs_entity}) = ado
  31. p <- sequence pvs_entity
  32. in ArtDecoTabElement {pvs_entity: p}
  33. traverse = \x -> traverseDefault x
  34. instance Queryable q => CanBeQueried q ArtDecoTabElement where
  35. query n = do
  36. pvs_entity <- subQueryOne ":scope div.pvs-entity--padded" n
  37. pure $ ArtDecoTabElement {pvs_entity}
  38. toHeaderBold ∷ ∀ a. ArtDecoTabElement a → a
  39. toHeaderBold = view $ _tab_to_pvs_entity <<< _pvs_to_header_bold
  40. toHeaderNormal ∷ ∀ a. ArtDecoTabElement a → Maybe a
  41. toHeaderNormal = view $ _tab_to_pvs_entity <<< _pvs_to_header_normal
  42. toHeaderLight ∷ ∀ a. ArtDecoTabElement a → Maybe (NonEmptyList a)
  43. toHeaderLight = view $ _tab_to_pvs_entity <<< _pvs_to_header_light
  44. toCenterContent ∷ ∀ a. ArtDecoTabElement a → List a
  45. toCenterContent c = toContent c
  46. where
  47. toContent = toListOf $ _tab_to_pvs_entity <<< _pvs_to_subcomponents
  48. _tab :: forall a. Lens' (ArtDecoTabElement a) { pvs_entity ∷ ArtDecoPvsEntity a }
  49. _tab = lens' \(ArtDecoTabElement t) -> Tuple t \t' -> ArtDecoTabElement t'
  50. _tab_to_pvs_entity :: forall a. Lens' (ArtDecoTabElement a) (ArtDecoPvsEntity a)
  51. _tab_to_pvs_entity = _tab <<< prop (Proxy :: Proxy "pvs_entity")