diff of 8be00fbec7e04eaf04cad595cfdad8a584ddd5c0

8be00fbec7e04eaf04cad595cfdad8a584ddd5c0
diff --git a/src/models/tab.lisp b/src/models/tab.lisp
index 03335fd..2d08f7c 100644
--- a/src/models/tab.lisp
+++ b/src/models/tab.lisp
@@ -1,6 +1,6 @@
 (defpackage murja.models.tab
   (:use :cl)
-  (:export :tab :tab-route :tab-component :title :require-login :abilities))
+  (:export :subtab :tab :tab-route :tab-component :title :require-login :abilities))
 
 (in-package :murja.models.tab)
 
@@ -9,4 +9,5 @@
    (component :initarg :component :initform (error "Component needed") :accessor tab-component)
    (title :initarg :title :initform (error "Title needed") :accessor title)
    (require-login :initarg :require-login :initform nil :accessor require-login)
-   (needed-abilities :initarg :abilities :initform nil :accessor abilities)))
+   (needed-abilities :initarg :abilities :initform nil :accessor abilities)
+   (subtab :initarg :subtab :initform nil :accessor subtab)))
diff --git a/src/views/components/tab.lisp b/src/views/components/tab.lisp
index 6683522..77eed66 100644
--- a/src/views/components/tab.lisp
+++ b/src/views/components/tab.lisp
@@ -8,7 +8,7 @@
 
 (defvar *selected-tab* nil)
 
-(defun tabs (firstly-selected-title tablist ;; &key onleave ;; how did I plan to call js callbacks here again? 
+(defun tabs (firstly-selected-title tablist tab-params ;; &key onleave ;; how did I plan to call js callbacks here again? 
 	     )
   "Takes in a Title -> (Component | State mapping, returns a component that's supposed to look like the tab component used by the old Elm app"
 
@@ -34,4 +34,4 @@
 	 (progn
 	   (format t "selected-tab: ~a~%" selected-tab)
 	   (setf *selected-tab* selected-tab)
-	   (funcall (tabmodel:tab-component selected-tab)))))))
+	   (apply (tabmodel:tab-component selected-tab) tab-params))))))
diff --git a/src/views/middleware/newui-dispatcher.lisp b/src/views/middleware/newui-dispatcher.lisp
index bcb4b8d..03128bc 100644
--- a/src/views/middleware/newui-dispatcher.lisp
+++ b/src/views/middleware/newui-dispatcher.lisp
@@ -16,16 +16,19 @@
 (defmacro deftab (sym (&key
 			 route
 			 title
+			 subtab 
 			 require-login
-			 needed-abilities)
+			 needed-abilities
+			 captured-route-params)
 		  &body rst)
   `(progn
      (setf (gethash (quote ,sym) *tabs*)
 	   (make-instance 'tab :route ,route
 			       :abilities ,needed-abilities
 			       :require-login ,require-login
+			       :subtab ,subtab
 			       :title ,title
-			       :component (lambda ()
+			       :component (lambda ,captured-route-params
 					    (murja.middleware.db:with-db
 						(let ((murja.middleware.db:*settings* (murja.settings:get-settings)))
 						(c :div ()
@@ -38,24 +41,26 @@
 						(@ssr-authenticated :require-authentication ,require-login )
 						@check-if-initial
 						@dispatcher)) ()
-       (quote ,sym))))
+       (values (quote ,sym) (list ,@captured-route-params)))))
      
 (defun @dispatcher (next)
-  (let* ((sym (funcall next))
-	 (tab (gethash sym *tabs*))
-	 (usr-abilities (when *user*
-			  (coerce (murja.models.user:abilities *user*) 'list))))
-    (assert tab)
+  (multiple-value-bind (sym route-params) (funcall next)
+    (let* ((tab (gethash sym *tabs*))
+	   (usr-abilities (when *user*
+			    (coerce (murja.models.user:abilities *user*) 'list))))
+      (assert tab)
 
-    (when (or (not (abilities tab))
-	      (intersection usr-abilities (abilities tab))
-	      (or (not (require-login tab))
-		  *user*))
-      
-      (root-component
-       (tabs (title tab)
-	     (remove-if-not (lambda (tab)
-			      (or (not (require-login tab))
-				  *user*))
-			    (alexandria:hash-table-values 
-			     *tabs*)))))))
+      (when (or (not (abilities tab))
+		(intersection usr-abilities (abilities tab))
+		(or (not (require-login tab))
+		    *user*))
+	
+	(root-component
+	 (tabs (title tab)
+	       (remove-if-not (lambda (tab)
+				(or (not (require-login tab))
+				    (subtab tab)
+				    *user*))
+			      (alexandria:hash-table-values 
+			       *tabs*))
+	       route-params))))))