Просмотр исходного кода

feat: list all whiteboard in the simple dashboard

Peng Xiao 3 лет назад
Родитель
Сommit
5c8d6e8c46
2 измененных файлов с 36 добавлено и 17 удалено
  1. 27 16
      src/main/frontend/components/whiteboard.cljs
  2. 9 1
      src/main/frontend/db/model.cljs

+ 27 - 16
src/main/frontend/components/whiteboard.cljs

@@ -1,6 +1,9 @@
 (ns frontend.components.whiteboard
 (ns frontend.components.whiteboard
   (:require [frontend.components.page :as page]
   (:require [frontend.components.page :as page]
+            [frontend.db.model :as model]
             [frontend.handler.route :as route-handler]
             [frontend.handler.route :as route-handler]
+            [frontend.state :as state]
+            [frontend.ui :as ui]
             [frontend.util :as util]
             [frontend.util :as util]
             [promesa.core :as p]
             [promesa.core :as p]
             [rum.core :as rum]
             [rum.core :as rum]
@@ -19,41 +22,49 @@
     (when draw-component
     (when draw-component
       (draw-component name))))
       (draw-component name))))
 
 
-(defn- get-whiteboard-name
+(defn- get-whiteboard-name-from-route
   [state]
   [state]
   (let [route-match (first (:rum/args state))]
   (let [route-match (first (:rum/args state))]
     (get-in route-match [:parameters :path :name])))
     (get-in route-match [:parameters :path :name])))
 
 
 (rum/defc dashboard-card
 (rum/defc dashboard-card
   [page-name]
   [page-name]
-  [:a {:on-mouse-down
-       (fn [e]
-         (util/stop e)
-         (route-handler/redirect-to-whiteboard! page-name))} page-name])
-
-;; (rum/defc dashboard-grid
-;;           )
+  [:a.border.p-4.rounded.text-xl
+   {:key page-name
+    :on-mouse-down
+    (fn [e]
+      (util/stop e)
+      (route-handler/redirect-to-whiteboard! page-name))} page-name])
 
 
 (rum/defc whiteboard-dashboard
 (rum/defc whiteboard-dashboard
   []
   []
-  ;; Placeholder
-  [:a {:on-mouse-down
-       (fn [e]
-         (util/stop e)
-         (route-handler/redirect-to-whiteboard! "test"))} "test"])
+  (let [whiteboard-names (model/get-all-whiteboard-names (state/get-current-repo))]
+    [:div.p-4
+     (ui/button "Create new whiteboard"
+                :small? true
+                :on-click (fn [e]
+                            (util/stop e)
+                            (route-handler/redirect-to-whiteboard! "new whiteboard")))
+     [:div.flex.flex-col.gap-4.py-2
+      (for [whiteboard-name whiteboard-names]
+        (dashboard-card whiteboard-name))]]))
 
 
 (rum/defcs whiteboard < rum/reactive
 (rum/defcs whiteboard < rum/reactive
   [state]
   [state]
-  (let [name (get-whiteboard-name state)]
+  (let [name (get-whiteboard-name-from-route state)]
     [:div.absolute.w-full.h-full
     [:div.absolute.w-full.h-full
 
 
      ;; makes sure the whiteboard will not cover the borders
      ;; makes sure the whiteboard will not cover the borders
      {:key name
      {:key name
       :style {:padding "0.5px" :z-index 0}}
       :style {:padding "0.5px" :z-index 0}}
 
 
-     [:span.inline-flex.absolute
+     [:span.inline-flex.absolute.color-level.m-2.px-2
       {:key name
       {:key name
        :style {:z-index 2000}}
        :style {:z-index 2000}}
-      (page/page-title name nil name nil false)]
+      
+      (page/page-title name
+                       [:span.text-gray-500.ti.ti-artboard
+                        {:style {:vertical-align "middle" :font-size "0.9em"}}]
+                       name nil false)]
 
 
      (tldraw-app name)]))
      (tldraw-app name)]))

+ 9 - 1
src/main/frontend/db/model.cljs

@@ -1712,4 +1712,12 @@
                                 (whiteboard-clj->tldr page blocks))) result)]
                                 (whiteboard-clj->tldr page blocks))) result)]
     tldrs))
     tldrs))
 
 
-(get-all-whiteboard-tldrs (state/get-current-repo))
+(defn get-all-whiteboard-names
+  [repo]
+  (->> (d/q
+       '[:find [(pull ?page [:block/name]) ...]
+         :where
+         [?page :block/name]
+         [?page :block/whiteboard? true]]
+       (conn/get-db repo))
+      (map :block/name)))