diff options
author | Colin Okay <colin@cicadas.surf> | 2022-10-27 16:00:26 -0500 |
---|---|---|
committer | Colin Okay <colin@cicadas.surf> | 2022-10-27 16:00:26 -0500 |
commit | 4384b353d9df4d9ab7b958b8081fccf3d9f5aacb (patch) | |
tree | 0818a9e5270dce92086c4e66d93ed045d4e9b92c /home.lisp | |
parent | f94d232ffbbb40c67925313dbb8025286035ee06 (diff) |
Add: user invite features
Diffstat (limited to 'home.lisp')
-rw-r--r-- | home.lisp | 55 |
1 files changed, 44 insertions, 11 deletions
@@ -2,14 +2,6 @@ (in-package :vampire) -;;; CLIENT STATE - -(defclass/std user-ctl () - ()) - - -;;; CLIENT CONTROL - ;;; CLIENT UI (defun create-new-playlist-form (parent &rest args) @@ -30,8 +22,7 @@ (format nil "/playlist/~a" (key pl))) -(defun create-playlist-listing (parent &rest args) - (declare (ignorable args)) +(defun create-playlist-listing (parent) (dolist (pl (user-playlists (session-user parent))) (let ((url (url-to-playlist pl))) @@ -45,12 +36,54 @@ (setf (url (location (connection-body parent))) url))))))) +(defun create-invite-list-item (invite-list invite) + (with-clog-create invite-list + (list-item (:bind item) + (button (:bind delbtn :content "delete")) + (p () + (span (:content "Code: ")) + (span (:content (key invite)))) + (p () + (span (:content "Uses Remaining: ")) + (span (:content + (format nil "~a" + (or (uses-remaining invite) "unlimited")))))) + (set-on-click delbtn (thunk* + (destroy-invite invite) + (destroy item)))) ) + +(defun create-invite-control (parent) + (let* ((user (session-user parent)) + (container (create-div parent)) + (invite-list (create-unordered-list parent))) + (place-after (create-section container :h3 :content "Your Invites") + invite-list) + ;; list invites + (dolist (invite (invites-by-maker user)) + (create-invite-list-item invite-list invite)) + + (with-clog-create container + (form () + (button (:bind createbtn :content "Create Invite")) + (form-element (:number :bind count)) + (p (:content "Uses are optional. Blank or Zero means unlimited use."))) + (setf (minimum count) 0 + (place-holder count) "Uses" + (width count) 70) + (set-on-click + createbtn + (thunk* + (let ((invite (make-invite user (parse-integer (value count) :junk-allowed t)))) + (create-invite-list-item invite-list invite))))))) + + (defun user-home-page (body) (with-clog-create body (div () (navigation-header ()) (p (:content (format nil "Welcome ~a" (user-name (session-user body))))) (new-playlist-form ()) - (playlist-listing ())))) + (playlist-listing ()) + (invite-control ())))) |