JobOffer.purs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. module LinkedIn.Page.JobOffer where
  2. import Prelude
  3. import Data.Either (Either)
  4. import Data.Foldable (class Foldable, foldMap, foldlDefault, foldrDefault)
  5. import Data.Generic.Rep (class Generic)
  6. import Data.Show.Generic (genericShow)
  7. import Data.Traversable (class Traversable, sequence, traverseDefault)
  8. import LinkedIn.Jobs.JobOffer (JobOffer)
  9. import LinkedIn.Jobs.JobOffer as JJO
  10. import LinkedIn.UI.Components.JobsUnifiedTopCard (JobsUnifiedTopCardElement, queryJobsUnifiedTopCardElement)
  11. import LinkedIn.QueryRunner (QueryRunner', subQueryOne)
  12. import LinkedIn.UI.Elements.Types (UIElement)
  13. import Web.DOM (Document, Node)
  14. data JobOfferPage a = JobOfferPage (JobsUnifiedTopCardElement a)
  15. derive instance Generic (JobOfferPage a) _
  16. derive instance Eq a => Eq (JobOfferPage a)
  17. instance Show a => Show (JobOfferPage a) where
  18. show = genericShow
  19. derive instance Functor JobOfferPage
  20. instance Foldable JobOfferPage where
  21. foldMap f (JobOfferPage topCard) = foldMap f topCard
  22. foldl = \x -> foldlDefault x
  23. foldr = \x -> foldrDefault x
  24. instance Traversable JobOfferPage where
  25. sequence (JobOfferPage topCard) = ado
  26. tc <- sequence topCard
  27. in JobOfferPage tc
  28. traverse = \x -> traverseDefault x
  29. query :: QueryRunner' Document (JobOfferPage Node)
  30. query n = do
  31. card <- subQueryOne queryJobsUnifiedTopCardElement "div.jobs-unified-top-card" n
  32. pure $ JobOfferPage card
  33. extract ∷ JobOfferPage UIElement → Either String JobOffer
  34. extract (JobOfferPage tabs) = JJO.fromUI tabs