From fa64226855f63bafad9cf0a59baef200030eabed Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Thu, 27 Nov 2025 10:04:35 -0500 Subject: 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 --- Omni/Jr/Web.hs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'Omni/Jr') 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 -- cgit v1.2.3