diff options
| author | Ben Sima <ben@bensima.com> | 2025-11-27 10:04:35 -0500 |
|---|---|---|
| committer | Ben Sima <ben@bensima.com> | 2025-11-27 10:04:35 -0500 |
| commit | fa64226855f63bafad9cf0a59baef200030eabed (patch) | |
| tree | 955796125f718c2ab2182068dc226f5fbd60e901 /Omni/Jr | |
| parent | dbe2b82d2f53761d9504fb4e5cf37f64a2000b7a (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.hs | 18 |
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 |
