@@ -38,8 +38,10 @@ module GitHub.Data.Options (
3838 -- * Repo issues
3939 IssueRepoMod ,
4040 issueRepoModToQueryString ,
41+ optionsIrrelevantMilestone ,
4142 optionsAnyMilestone ,
4243 optionsNoMilestone ,
44+ optionsIrrelevantAssignee ,
4345 optionsAnyAssignee ,
4446 optionsNoAssignee ,
4547 -- * Data
@@ -161,6 +163,9 @@ data FilterBy a
161163 = FilterAny
162164 | FilterNone
163165 | FilterBy a
166+ | FilterNotSpecified
167+ -- ^ e.g. for milestones "any" means "any milestone".
168+ -- I.e. won't show issues without mileston specified
164169 deriving
165170 (Eq , Ord , Show , Generic , Typeable , Data )
166171
@@ -491,9 +496,9 @@ data IssueRepoOptions = IssueRepoOptions
491496
492497defaultIssueRepoOptions :: IssueRepoOptions
493498defaultIssueRepoOptions = IssueRepoOptions
494- { issueRepoOptionsMilestone = FilterAny
499+ { issueRepoOptionsMilestone = FilterNotSpecified
495500 , issueRepoOptionsState = (Just StateOpen )
496- , issueRepoOptionsAssignee = FilterAny
501+ , issueRepoOptionsAssignee = FilterNotSpecified
497502 , issueRepoOptionsCreator = Nothing
498503 , issueRepoOptionsMentioned = Nothing
499504 , issueRepoOptionsLabels = []
@@ -520,23 +525,24 @@ issueRepoModToQueryString = issueRepoOptionsToQueryString . toIssueRepoOptions
520525
521526issueRepoOptionsToQueryString :: IssueRepoOptions -> QueryString
522527issueRepoOptionsToQueryString IssueRepoOptions {.. } =
523- [ mk " milestone" milestone'
524- , mk " assignee" assignee'
525- , mk " state" state'
528+ [ mk " state" state'
526529 , mk " sort" sort'
527530 , mk " direction" direction'
528531 ] ++ catMaybes
529- [ mk " labels" <$> labels'
532+ [ mk " milestone" <$> milestone'
533+ , mk " assignee" <$> assignee'
534+ , mk " labels" <$> labels'
530535 , mk " since" <$> since'
531536 , mk " creator" <$> creator'
532537 , mk " mentioned" <$> mentioned'
533538 ]
534539 where
535540 mk k v = (k, Just v)
536541 filt f x = case x of
537- FilterAny -> " *"
538- FilterNone -> " none"
539- FilterBy x' -> TE. encodeUtf8 (f x')
542+ FilterAny -> Just " *"
543+ FilterNone -> Just " none"
544+ FilterBy x' -> Just $ TE. encodeUtf8 $ f x'
545+ FilterNotSpecified -> Nothing
540546
541547 milestone' = filt (T. pack . show . untagId) issueRepoOptionsMilestone
542548 assignee' = filt untagName issueRepoOptionsAssignee
@@ -562,6 +568,15 @@ issueRepoOptionsToQueryString IssueRepoOptions {..} =
562568-- Issues repo modifiers
563569-------------------------------------------------------------------------------
564570
571+ -- | Don't care about milestones.
572+ --
573+ -- 'optionsAnyMilestone' means there should be some milestone, but it can be any.
574+ --
575+ -- See <https://developer.github.com/v3/issues/#list-issues-for-a-repository>
576+ optionsIrrelevantMilestone :: IssueRepoMod
577+ optionsIrrelevantMilestone = IssueRepoMod $ \ opts ->
578+ opts { issueRepoOptionsMilestone = FilterNotSpecified }
579+
565580optionsAnyMilestone :: IssueRepoMod
566581optionsAnyMilestone = IssueRepoMod $ \ opts ->
567582 opts { issueRepoOptionsMilestone = FilterAny }
@@ -570,6 +585,10 @@ optionsNoMilestone :: IssueRepoMod
570585optionsNoMilestone = IssueRepoMod $ \ opts ->
571586 opts { issueRepoOptionsMilestone = FilterNone }
572587
588+ optionsIrrelevantAssignee :: IssueRepoMod
589+ optionsIrrelevantAssignee = IssueRepoMod $ \ opts ->
590+ opts { issueRepoOptionsAssignee = FilterNotSpecified }
591+
573592optionsAnyAssignee :: IssueRepoMod
574593optionsAnyAssignee = IssueRepoMod $ \ opts ->
575594 opts { issueRepoOptionsAssignee = FilterAny }
0 commit comments