Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 04e1cf8

Browse files
committed
Make it possible to not specify milestone or assignee
1 parent d47f316 commit 04e1cf8

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

src/GitHub/Data/Options.hs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

492497
defaultIssueRepoOptions :: IssueRepoOptions
493498
defaultIssueRepoOptions = 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

521526
issueRepoOptionsToQueryString :: IssueRepoOptions -> QueryString
522527
issueRepoOptionsToQueryString 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+
565580
optionsAnyMilestone :: IssueRepoMod
566581
optionsAnyMilestone = IssueRepoMod $ \opts ->
567582
opts { issueRepoOptionsMilestone = FilterAny }
@@ -570,6 +585,10 @@ optionsNoMilestone :: IssueRepoMod
570585
optionsNoMilestone = IssueRepoMod $ \opts ->
571586
opts { issueRepoOptionsMilestone = FilterNone }
572587

588+
optionsIrrelevantAssignee :: IssueRepoMod
589+
optionsIrrelevantAssignee = IssueRepoMod $ \opts ->
590+
opts { issueRepoOptionsAssignee = FilterNotSpecified }
591+
573592
optionsAnyAssignee :: IssueRepoMod
574593
optionsAnyAssignee = IssueRepoMod $ \opts ->
575594
opts { issueRepoOptionsAssignee = FilterAny }

0 commit comments

Comments
 (0)