module Asana.Api.Task.Search
( SearchWorkspace (..),
TaskTypeFilter (..),
searchWorkspace,
)
where
import Asana.Api.Gid
import Asana.Api.Named
import Asana.Api.Prelude
import Asana.Api.Request
import Asana.Api.Task
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as HashMap
import Data.List (intercalate)
import qualified Data.Text as T
data TaskTypeFilter = TasksOnly | SubtasksOnly | AllTaskTypes
data SearchWorkspace = SearchWorkspace
{ SearchWorkspace -> Gid
swWorkspaceId :: Gid,
SearchWorkspace -> [Gid]
swProjectIds :: [Gid],
SearchWorkspace -> TaskStatusFilter
swTaskStatusFilter :: TaskStatusFilter,
SearchWorkspace -> HashMap Gid Text
swCustomFields :: HashMap Gid Text,
SearchWorkspace -> TaskTypeFilter
swTaskTypeFilter :: TaskTypeFilter
}
searchWorkspace ::
(MonadUnliftIO m, MonadLogger m, MonadReader env m, HasAsanaAccessKey env) =>
SearchWorkspace ->
m [Named]
searchWorkspace :: forall (m :: * -> *) env.
(MonadUnliftIO m, MonadLogger m, MonadReader env m,
HasAsanaAccessKey env) =>
SearchWorkspace -> m [Named]
searchWorkspace SearchWorkspace {[Gid]
HashMap Gid Text
Gid
TaskStatusFilter
TaskTypeFilter
swWorkspaceId :: SearchWorkspace -> Gid
swProjectIds :: SearchWorkspace -> [Gid]
swTaskStatusFilter :: SearchWorkspace -> TaskStatusFilter
swCustomFields :: SearchWorkspace -> HashMap Gid Text
swTaskTypeFilter :: SearchWorkspace -> TaskTypeFilter
swWorkspaceId :: Gid
swProjectIds :: [Gid]
swTaskStatusFilter :: TaskStatusFilter
swCustomFields :: HashMap Gid Text
swTaskTypeFilter :: TaskTypeFilter
..} =
String -> [(String, String)] -> m [Named]
forall (m :: * -> *) env a.
(MonadUnliftIO m, MonadLogger m, MonadReader env m,
HasAsanaAccessKey env, FromJSON a) =>
String -> [(String, String)] -> m [a]
getAllParams
(Text -> String
T.unpack (Text -> String) -> Text -> String
forall a b. (a -> b) -> a -> b
$ Text
"/workspaces/" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Gid -> Text
gidToText Gid
swWorkspaceId Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/tasks/search")
([(String, String)] -> m [Named])
-> [(String, String)] -> m [Named]
forall a b. (a -> b) -> a -> b
$ ( String
"projects.all",
String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
"," ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (Gid -> String) -> [Gid] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (Text -> String
T.unpack (Text -> String) -> (Gid -> Text) -> Gid -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Gid -> Text
gidToText) [Gid]
swProjectIds
)
(String, String) -> [(String, String)] -> [(String, String)]
forall a. a -> [a] -> [a]
: [(String, String)]
customFieldParams
[(String, String)] -> [(String, String)] -> [(String, String)]
forall a. Semigroup a => a -> a -> a
<> [(String, String)]
completed
[(String, String)] -> [(String, String)] -> [(String, String)]
forall a. Semigroup a => a -> a -> a
<> [(String, String)]
isSubtask
where
customFieldParams :: [(String, String)]
customFieldParams =
((Gid, Text) -> (String, String))
-> [(Gid, Text)] -> [(String, String)]
forall a b. (a -> b) -> [a] -> [b]
map
( \(Gid
a, Text
b) ->
(String
"custom_fields." String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Text -> String
T.unpack (Gid -> Text
gidToText Gid
a) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
".value", Text -> String
T.unpack Text
b)
)
([(Gid, Text)] -> [(String, String)])
-> [(Gid, Text)] -> [(String, String)]
forall a b. (a -> b) -> a -> b
$ HashMap Gid Text -> [(Gid, Text)]
forall k v. HashMap k v -> [(k, v)]
HashMap.toList HashMap Gid Text
swCustomFields
completed :: [(String, String)]
completed = case TaskStatusFilter
swTaskStatusFilter of
TaskStatusFilter
AllTasks -> []
TaskStatusFilter
IncompletedTasks -> [(String
"completed", String
"false")]
isSubtask :: [(String, String)]
isSubtask = case TaskTypeFilter
swTaskTypeFilter of
TaskTypeFilter
AllTaskTypes -> []
TaskTypeFilter
TasksOnly -> [(String
"is_subtask", String
"false")]
TaskTypeFilter
SubtasksOnly -> [(String
"is_subtask", String
"true")]