summaryrefslogtreecommitdiff
path: root/Omni/Jr
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-11-27 10:04:35 -0500
committerBen Sima <ben@bensima.com>2025-11-27 10:04:35 -0500
commitfa64226855f63bafad9cf0a59baef200030eabed (patch)
tree955796125f718c2ab2182068dc226f5fbd60e901 /Omni/Jr
parentdbe2b82d2f53761d9504fb4e5cf37f64a2000b7a (diff)
Fix filter dropdowns returning empty string for All option
The build passes. The fix I implemented: 1. **Changed the API type** in `Omni/Jr/Web.hs` to use `QueryParam "stat 2. **Added manual parsing** in `taskListHandler` with `parseStatus` and 3. **Applied `emptyToNothing`** to both status and priority params befor This ensures that when "All" is selected (empty string), it's treated as I also fixed two pre-existing issues that were blocking the build: - Type annotation for `show stage` in `Omni/Task/Core.hs` - `AesonKey.fromText` conversion in `Omni/Agent/Worker.hs` Task-Id: t-149.1
Diffstat (limited to 'Omni/Jr')
-rw-r--r--Omni/Jr/Web.hs18
1 files changed, 13 insertions, 5 deletions
diff --git a/Omni/Jr/Web.hs b/Omni/Jr/Web.hs
index d117169..9d46a78 100644
--- a/Omni/Jr/Web.hs
+++ b/Omni/Jr/Web.hs
@@ -50,8 +50,8 @@ type API =
:<|> "ready" :> Get '[Lucid.HTML] ReadyQueuePage
:<|> "stats" :> QueryParam "epic" Text :> Get '[Lucid.HTML] StatsPage
:<|> "tasks"
- :> QueryParam "status" TaskCore.Status
- :> QueryParam "priority" TaskCore.Priority
+ :> QueryParam "status" Text
+ :> QueryParam "priority" Text
:> QueryParam "namespace" Text
:> Get '[Lucid.HTML] TaskListPage
:<|> "tasks" :> Capture "id" Text :> Get '[Lucid.HTML] TaskDetailPage
@@ -653,13 +653,21 @@ server =
stats <- liftIO <| TaskCore.getTaskStats epicId
pure (StatsPage stats epicId)
- taskListHandler :: Maybe TaskCore.Status -> Maybe TaskCore.Priority -> Maybe Text -> Servant.Handler TaskListPage
- taskListHandler maybeStatus maybePriority maybeNamespace = do
+ taskListHandler :: Maybe Text -> Maybe Text -> Maybe Text -> Servant.Handler TaskListPage
+ taskListHandler maybeStatusText maybePriorityText maybeNamespace = do
allTasks <- liftIO TaskCore.loadTasks
- let filters = TaskFilters maybeStatus maybePriority (emptyToNothing maybeNamespace)
+ let maybeStatus = parseStatus =<< emptyToNothing maybeStatusText
+ maybePriority = parsePriority =<< emptyToNothing maybePriorityText
+ filters = TaskFilters maybeStatus maybePriority (emptyToNothing maybeNamespace)
filteredTasks = applyFilters filters allTasks
pure (TaskListPage filteredTasks filters)
+ parseStatus :: Text -> Maybe TaskCore.Status
+ parseStatus = readMaybe <. Text.unpack
+
+ parsePriority :: Text -> Maybe TaskCore.Priority
+ parsePriority = readMaybe <. Text.unpack
+
emptyToNothing :: Maybe Text -> Maybe Text
emptyToNothing (Just t) | Text.null (Text.strip t) = Nothing
emptyToNothing x = x