🔧 Simplify dashboard related route handlers.

This commit is contained in:
Andrey Antukh 2019-07-22 14:00:48 +02:00
parent 5c4f88221c
commit d34fc2512f
3 changed files with 32 additions and 34 deletions

View file

@ -1,6 +1,8 @@
(ns uxbox.main.ui.dashboard
(:require
[cuerdas.core :as str]
[rumext.alpha :as mf]
[uxbox.util.data :refer [parse-int uuid-str?]]
[uxbox.main.ui.dashboard.header :refer [header]]
[uxbox.main.ui.dashboard.projects :as projects]
;; [uxbox.main.ui.dashboard.elements :as elements]
@ -15,13 +17,27 @@
(def images-page images/images-page)
(def colors-page colors/colors-page)
(defn- parse-route
[{:keys [params data] :as route}]
(let [{:keys [id type]} (:query params)
id (cond
(str/digits? id) (parse-int id)
(uuid-str? id) (uuid id)
:else nil)
type (when (str/alpha? type) (keyword type))]
{:section (:name data)
:type type
:id id}))
(mf/defc dashboard
[props]
[:main.dashboard-main
(messages-widget)
(header)
(case (:section props)
:icons (icons/icons-page props)
:images (images/images-page props)
:projects (projects/projects-page props)
:colors (colors/colors-page props))])
{:wrap [mf/memo*]}
[{:keys [route] :as props}]
(let [{:keys [section] :as props} (parse-route route)]
[:main.dashboard-main
(messages-widget)
(header) ;; TODO: pass section to header
(case section
:dashboard/icons (icons/icons-page props)
:dashboard/images (images/images-page props)
:dashboard/projects (projects/projects-page props)
:dashboard/colors (colors/colors-page props))]))