Loop over results and show results other than sus as lists

This commit is contained in:
Marcus Kammer 2024-07-04 17:49:44 +02:00
parent 780eca088b
commit a56948b36c
3 changed files with 27 additions and 21 deletions

View file

@ -1,6 +1,6 @@
(defsystem "dev.metalisp.survey" (defsystem "dev.metalisp.survey"
:description "A simple survey" :description "A simple survey"
:version "0.1.3" :version "0.1.4"
:author "Marcus Kammer <marcus.kammer@metalisp.dev" :author "Marcus Kammer <marcus.kammer@metalisp.dev"
:source-control "git@git.sr.ht:~marcuskammer/dev.metalisp.survey" :source-control "git@git.sr.ht:~marcuskammer/dev.metalisp.survey"
:licence "MIT" :licence "MIT"

View file

@ -3,20 +3,20 @@
(defun list-of-categorized-results (result-objs) (defun list-of-categorized-results (result-objs)
"Categorize results into different lists based on their type. "Categorize results into different lists based on their type.
Apply special calculation for results of type 'sus'." Apply special calculation for results of type 'sus'."
(let ((categorized-results (list :sus nil :other nil))) (let ((categorized-results (list :sus nil)))
(dolist (result result-objs categorized-results) (dolist (result result-objs categorized-results)
(let ((type (ml-survey::questionnaire-result-type result)) (let ((type (intern (string-upcase (ml-survey::questionnaire-result-type result)) :keyword))
(data (ml-survey::questionnaire-result-post-data result)) (data (ml-survey::questionnaire-result-post-data result))
(timestamp (ml-survey::questionnaire-result-timestamp result))) (timestamp (ml-survey::questionnaire-result-timestamp result)))
(cond (cond
((string= type "sus") ((eq type :sus)
(setf (getf categorized-results :sus) (setf (getf categorized-results :sus)
(cons (ml-survey:sus-calc (cons timestamp data)) (cons (ml-survey:sus-calc (cons timestamp data))
(getf categorized-results :sus)))) (getf categorized-results :sus))))
(t (t
(setf (getf categorized-results :other) (setf (getf categorized-results type)
(cons (cons timestamp (mapcar #'cdr data)) (cons (cons timestamp (mapcar #'cdr data))
(getf categorized-results :other))))))))) (getf categorized-results type)))))))))
(defun survey-uri-p (uri) (defun survey-uri-p (uri)
(let ((parts (split-uri uri))) (let ((parts (split-uri uri)))

View file

@ -6,9 +6,9 @@
(defun survey (survey &optional results) (defun survey (survey &optional results)
"Generates the view to show the survey created." "Generates the view to show the survey created."
(check-type survey ml-survey:survey) (check-type survey ml-survey:survey)
(print results)
(let ((results-not-null (results-not-null results)) (let ((results-not-null (results-not-null results))
(sus-results (getf results :sus)) (sus-results (getf results :sus)))
(other-results (getf results :other)))
(with-page (:title "Survey Details") (with-page (:title "Survey Details")
(body-header "Survey Details" (navbar-en)) (body-header "Survey Details" (navbar-en))
(:main :id "main-content" (:main :id "main-content"
@ -16,23 +16,29 @@
(:p (format nil "ID: ~a" (ml-survey:survey-id survey))) (:p (format nil "ID: ~a" (ml-survey:survey-id survey)))
(:h2 "Properties") (:h2 "Properties")
(ml-survey:survey-html survey) (ml-survey:survey-html survey)
(when results-not-null (when results-not-null
(:h2 "Questionnaire Results") (:h2 "Questionnaire Results")
(if sus-results (if sus-results
(let ((count-answers (length (cdr (car sus-results))))) (let ((count-answers (length (cdr (car sus-results)))))
(:h3 "SUS")
(:table :class "table table-hover" (:table :class "table table-hover"
(:caption "Questionnaire results table") (:caption "Questionnaire results table")
(:thead (:thead
(:tr (:tr
(:th :scope "col" "Time") (:th :scope "col" "Time")
(loop for i from 1 below count-answers (loop for i from 1 below count-answers
do (:th :scope "col" (format nil "Q ~a" i))) do (:th :scope "col" (format nil "Q ~a" i)))
(:th :scope "col" "SUS Score"))) (:th :scope "col" "SUS Score")))
(:tbody (:tbody
(loop for result in sus-results (loop for result in sus-results
do (:tr (mapcar (lambda (x) (:td x)) result)))))) do (:tr (mapcar (lambda (x) (:td x)) result)))))))
(loop for el in other-results (loop for (type data) on results by #'cddr unless (eq type :sus)
do (:ul (loop for x in el do (progn (:h3 (format nil "~a" type))
do (:li x)))))))))) (loop for row in data
do (:ul :class "list-group py-3"
(loop for item in row
do (:li :class "list-group-item"
item)))))))))))