penpot/frontend/src/uxbox/main/ui/dashboard.cljs
2019-09-02 20:49:48 +02:00

41 lines
1.3 KiB
Clojure

(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]
[uxbox.main.ui.dashboard.icons :as icons]
[uxbox.main.ui.dashboard.images :as images]
[uxbox.main.ui.dashboard.colors :as colors]
[uxbox.main.ui.messages :refer [messages-widget]]))
(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))]
[(:name data) type id]))
(mf/defc dashboard
[{:keys [route] :as props}]
(let [[section type id] (parse-route route)]
[:main.dashboard-main
[:& messages-widget]
[:& header {:section section}]
(case section
:dashboard/icons
[:& icons/icons-page {:type type :id id}]
:dashboard/images
[:& images/images-page {:type type :id id}]
:dashboard/projects
[:& projects/projects-page]
:dashboard/colors
[:& colors/colors-page {:type type :id id}])]))