diff options
| author | Ben Sima <ben@bensima.com> | 2025-12-01 21:38:17 -0500 |
|---|---|---|
| committer | Ben Sima <ben@bensima.com> | 2025-12-01 21:38:17 -0500 |
| commit | 7da1c7e717af3cadf927b5f6efb253f0d10423a8 (patch) | |
| tree | e6d52326215026a5cc1002a06f68cbd6281b1b6f /Omni/Jr/Web/Types.hs | |
| parent | 437a204017c7b357c3fc4dcc8c23151a288d1a8e (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.hs | 15 |
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 |
