summaryrefslogtreecommitdiff
path: root/Omni/Jr/Web/Types.hs
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-12-01 21:38:17 -0500
committerBen Sima <ben@bensima.com>2025-12-01 21:38:17 -0500
commit7da1c7e717af3cadf927b5f6efb253f0d10423a8 (patch)
treee6d52326215026a5cc1002a06f68cbd6281b1b6f /Omni/Jr/Web/Types.hs
parent437a204017c7b357c3fc4dcc8c23151a288d1a8e (diff)
Make complexity badge editable on task detail page
- Add ComplexityForm and ComplexityBadgePartial types - Add /tasks/:id/complexity POST endpoint - Add complexityBadgeWithForm component with dropdown - Add complexity dropdown JS for keyboard navigation - Add CSS styles for complexity dropdown - Always show complexity badge (Set Complexity if none) Task-Id: t-219
Diffstat (limited to 'Omni/Jr/Web/Types.hs')
-rw-r--r--Omni/Jr/Web/Types.hs15
1 files changed, 15 insertions, 0 deletions
diff --git a/Omni/Jr/Web/Types.hs b/Omni/Jr/Web/Types.hs
index 85ea0f0..93c8d85 100644
--- a/Omni/Jr/Web/Types.hs
+++ b/Omni/Jr/Web/Types.hs
@@ -43,6 +43,7 @@ module Omni.Jr.Web.Types
ReadyCountPartial (..),
StatusBadgePartial (..),
PriorityBadgePartial (..),
+ ComplexityBadgePartial (..),
TaskListPartial (..),
TaskMetricsPartial (..),
AgentEventsPartial (..),
@@ -53,6 +54,7 @@ module Omni.Jr.Web.Types
RejectForm (..),
StatusForm (..),
PriorityForm (..),
+ ComplexityForm (..),
DescriptionForm (..),
NotesForm (..),
CommentForm (..),
@@ -288,6 +290,8 @@ data StatusBadgePartial = StatusBadgePartial TaskCore.Status Text
data PriorityBadgePartial = PriorityBadgePartial TaskCore.Priority Text
+data ComplexityBadgePartial = ComplexityBadgePartial (Maybe Int) Text
+
newtype TaskListPartial = TaskListPartial [TaskCore.Task]
data TaskMetricsPartial = TaskMetricsPartial Text [TaskCore.TaskActivity] (Maybe TaskCore.RetryContext) UTCTime
@@ -321,6 +325,17 @@ instance FromForm PriorityForm where
Just p -> Right (PriorityForm p)
Nothing -> Left "Invalid priority"
+newtype ComplexityForm = ComplexityForm (Maybe Int)
+
+instance FromForm ComplexityForm where
+ fromForm form = do
+ complexityText <- parseUnique "complexity" form
+ if complexityText == "none"
+ then Right (ComplexityForm Nothing)
+ else case readMaybe (Text.unpack complexityText) of
+ Just c | c >= 1 && c <= 5 -> Right (ComplexityForm (Just c))
+ _ -> Left "Invalid complexity"
+
newtype DescriptionForm = DescriptionForm Text
instance FromForm DescriptionForm where