浏览代码

enhance(api): support page name routes to be compatible with the legacy plugin APIs

charlie 1 年之前
父节点
当前提交
c644ee674c
共有 1 个文件被更改,包括 15 次插入10 次删除
  1. 15 10
      src/main/frontend/components/page.cljs

+ 15 - 10
src/main/frontend/components/page.cljs

@@ -596,14 +596,19 @@
   {:init (fn [state]
   {:init (fn [state]
            (let [page-name (:page-name (first (:rum/args state)))
            (let [page-name (:page-name (first (:rum/args state)))
                  page-name' (get-sanity-page-name state page-name)
                  page-name' (get-sanity-page-name state page-name)
+                 page-uuid? (util/uuid-string? page-name')
                  *loading? (atom true)]
                  *loading? (atom true)]
-             (p/do!
-              (db-async/<get-block (state/get-current-repo) page-name')
-              (reset! *loading? false)
-              (route-handler/update-page-title-and-label! (state/get-route-match)))
+             (p/let
+               [page-block (db-async/<get-block (state/get-current-repo) page-name')]
+               (reset! *loading? false)
+               (if (not page-block)
+                 (page-handler/<create! page-name' {:redirect? true})
+                 (if-let [page-uuid (and (not page-uuid?) (:block/uuid page-block))]
+                   (route-handler/redirect-to-page! (str page-uuid) {:push false})
+                   (route-handler/update-page-title-and-label! (state/get-route-match)))))
              (assoc state
              (assoc state
-                    ::page-name page-name'
-                    ::loading? *loading?)))}
+               ::page-name page-name'
+               ::loading? *loading?)))}
   [state option]
   [state option]
   (page-inner (assoc option :*loading? (::loading? state))))
   (page-inner (assoc option :*loading? (::loading? state))))
 
 
@@ -612,12 +617,12 @@
   (rum/with-key
   (rum/with-key
     (page-aux option)
     (page-aux option)
     (or (:page-name option)
     (or (:page-name option)
-        (get-page-name state))))
+      (get-page-name state))))
 
 
 (rum/defc contents-page < rum/reactive
 (rum/defc contents-page < rum/reactive
-  {:init (fn [state]
-           (db-async/<get-block (state/get-current-repo) "contents")
-           state)}
+                          {:init (fn [state]
+                                   (db-async/<get-block (state/get-current-repo) "contents")
+                                   state)}
   [page]
   [page]
   (when-let [repo (state/get-current-repo)]
   (when-let [repo (state/get-current-repo)]
     (when-not (state/sub-async-query-loading "contents")
     (when-not (state/sub-async-query-loading "contents")