feat(web/panettone): Display issue history

Display the history of an issue (which currently is just opening and
closing) inline with the issue's comments on the issue show page

Change-Id: Id167bceef765cb4c24e86983d1dcd6624d0e5956
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1497
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
Griffin Smith 2020-07-28 18:29:30 -04:00 committed by glittershark
parent 8e7ba41a34
commit 94796399e2
6 changed files with 94 additions and 35 deletions

View file

@ -189,6 +189,36 @@
(:input :type "submit"
:value "Comment"))))
(defgeneric render/issue-history-item (item))
(defmethod render/issue-history-item ((comment model:issue-comment))
(who:with-html-output (*standard-output*)
(who:htm
(:li
:class "comment"
(:p (who:esc (body comment)))
(:p
:class "comment-info"
(:span :class "username"
(who:esc (displayname (author comment)))
" at "
(who:esc (format-dottime (created-at comment)))))))))
(defmethod render/issue-history-item ((event model:issue-event))
(when (string= (field event) "STATUS")
(who:with-html-output (*standard-output*)
(let ((user (find-user-by-dn (acting-user-dn event))))
(who:htm
(:li
:class "event"
(who:esc (displayname user))
(who:esc
(switch ((new-value event) :test #'string=)
("OPEN" " reopened ")
("CLOSED" " closed ")))
" this issue at "
(who:esc (format-dottime (created-at event)))))))))
(defun render/issue (issue)
(check-type issue model:issue)
(let ((issue-id (id issue))
@ -220,22 +250,18 @@
(:open "Close")
(:closed "Reopen")))))))
(:p (who:esc (body issue)))
(let ((comments (issue-comments issue)))
(let* ((comments (issue-comments issue))
(events (issue-events issue))
(history (merge 'list
comments
events
#'local-time:timestamp<
:key #'created-at)))
(who:htm
(:div
:class "issue-comments"
(dolist (comment comments)
(let ((author (author comment)))
(who:htm
(:div
:class "comment"
(:p (who:esc (body comment)))
(:p
:class "comment-info"
(:span :class "username"
(who:esc (displayname author))
" at "
(who:esc (format-dottime (created-at comment)))))))))
(:ol
:class "issue-history"
(dolist (item history)
(render/issue-history-item item))
(when *user*
(render/new-comment (id issue))))))))))
@ -321,14 +347,10 @@
(defroute show-issue
("/issues/:id" :decorators (@auth-optional @handle-issue-not-found))
(&path (id 'integer))
(handler-case
(let* ((issue (model:get-issue id))
(*title* (format nil "~A | Panettone"
(subject issue))))
(render/issue issue))
(issue-not-found (_)
(declare (ignore _))
(render/not-found "Issue"))))
(let* ((issue (model:get-issue id))
(*title* (format nil "~A | Panettone"
(subject issue))))
(render/issue issue)))
(defroute handle-create-comment
("/issues/:id/comments"
@ -356,7 +378,7 @@
(defroute open-issue
("/issues/:id/open" :decorators (@auth)
:method :put)
:method :post)
(&path (id 'integer))
(model:set-issue-status id :open)
(hunchentoot:redirect (format nil "/issues/~A" id)))