mirror of
https://github.com/penpot/penpot.git
synced 2025-05-10 17:46:39 +02:00
✨ Adapt to rumext api changes.
This commit is contained in:
parent
9aac5e91ab
commit
205d09a5cd
20 changed files with 68 additions and 75 deletions
|
@ -2,7 +2,7 @@
|
||||||
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
;;
|
;;
|
||||||
;; Copyright (c) 2015-2016 Andrey Antukh <niwi@niwi.nz>
|
;; Copyright (c) 2015-2019 Andrey Antukh <niwi@niwi.nz>
|
||||||
|
|
||||||
(ns uxbox.main.data.workspace
|
(ns uxbox.main.data.workspace
|
||||||
(:require
|
(:require
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
|
|
||||||
(mf/defc login-page
|
(mf/defc login-page
|
||||||
[]
|
[]
|
||||||
(mf/use-effect {:end #(st/emit! (fm/clear-form :login))})
|
(mf/use-effect (constantly #(st/emit! (fm/clear-form :login))))
|
||||||
[:div.login
|
[:div.login
|
||||||
[:div.login-body
|
[:div.login-body
|
||||||
(messages-widget)
|
(messages-widget)
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
(mf/defc color-modal
|
(mf/defc color-modal
|
||||||
[{:keys [on-submit value] :as props}]
|
[{:keys [on-submit value] :as props}]
|
||||||
(let [local (mf/use-ref value)]
|
(let [local (mf/use-var value)]
|
||||||
[:div.lightbox-body
|
[:div.lightbox-body
|
||||||
[:h3 (tr "ds.color-lightbox.title")]
|
[:h3 (tr "ds.color-lightbox.title")]
|
||||||
[:form
|
[:form
|
||||||
|
@ -282,8 +282,8 @@
|
||||||
(first colls))
|
(first colls))
|
||||||
id (:id selected-coll)]
|
id (:id selected-coll)]
|
||||||
|
|
||||||
(mf/use-effect {:init #(st/emit! (dc/initialize)) :deps #js [id type]})
|
(mf/use-effect #(st/emit! (dc/initialize)) #js [id type])
|
||||||
(mf/use-effect {:init #(st/emit! (dc/fetch-collections))})
|
(mf/use-effect #(st/emit! (dc/fetch-collections)))
|
||||||
|
|
||||||
[:section.dashboard-content
|
[:section.dashboard-content
|
||||||
[:& nav {:type type
|
[:& nav {:type type
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
(mf/defc grid-header
|
(mf/defc grid-header
|
||||||
[{:keys [on-change on-delete value read-only?] :as props}]
|
[{:keys [on-change on-delete value read-only?] :as props}]
|
||||||
(let [edit? (mf/use-state false)
|
(let [edit? (mf/use-state false)
|
||||||
input (mf/use-ref* nil)]
|
input (mf/use-ref nil)]
|
||||||
(letfn [(save []
|
(letfn [(save []
|
||||||
(let [new-value (-> (mf/ref-node input)
|
(let [new-value (-> (mf/ref-node input)
|
||||||
(dom/get-inner-text)
|
(dom/get-inner-text)
|
||||||
|
|
|
@ -96,7 +96,7 @@
|
||||||
;; TODO: recalculate the num-icons on crud operations for
|
;; TODO: recalculate the num-icons on crud operations for
|
||||||
;; avod doing this on UI.
|
;; avod doing this on UI.
|
||||||
;; num-icons-iref (mf/use-memo {:deps #js [id]
|
;; num-icons-iref (mf/use-memo {:deps #js [id]
|
||||||
;; :init #(make-num-icons-iref (:id coll))})
|
;; :fn #(make-num-icons-iref (:id coll))})
|
||||||
;; num-icons (mf/deref num-icons-iref)
|
;; num-icons (mf/deref num-icons-iref)
|
||||||
editable? (= type :own)]
|
editable? (= type :own)]
|
||||||
(letfn [(on-click [event]
|
(letfn [(on-click [event]
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
|
|
||||||
(mf/defc grid-form
|
(mf/defc grid-form
|
||||||
[{:keys [id type uploading?] :as props}]
|
[{:keys [id type uploading?] :as props}]
|
||||||
(let [input (mf/use-ref* nil)
|
(let [input (mf/use-ref nil)
|
||||||
on-click #(dom/click (mf/ref-node input))
|
on-click #(dom/click (mf/ref-node input))
|
||||||
on-select #(st/emit! (->> (dom/get-event-files %)
|
on-select #(st/emit! (->> (dom/get-event-files %)
|
||||||
(jscoll->vec)
|
(jscoll->vec)
|
||||||
|
@ -331,7 +331,7 @@
|
||||||
(mf/defc grid
|
(mf/defc grid
|
||||||
[{:keys [id type coll opts] :as props}]
|
[{:keys [id type coll opts] :as props}]
|
||||||
(let [editable? (or (= type :own) (nil? id))
|
(let [editable? (or (= type :own) (nil? id))
|
||||||
icons-iref (mf/use-memo {:deps #js [id] :init #(make-icons-iref id)})
|
icons-iref (mf/use-memo #(make-icons-iref id) #js [id])
|
||||||
icons (->> (mf/deref icons-iref)
|
icons (->> (mf/deref icons-iref)
|
||||||
(filter-icons-by (:filter opts ""))
|
(filter-icons-by (:filter opts ""))
|
||||||
(sort-icons-by (:order opts :name)))]
|
(sort-icons-by (:order opts :name)))]
|
||||||
|
@ -425,9 +425,9 @@
|
||||||
:else (first colls))
|
:else (first colls))
|
||||||
id (:id selected-coll)]
|
id (:id selected-coll)]
|
||||||
|
|
||||||
(mf/use-effect {:init #(st/emit! (di/fetch-collections))})
|
(mf/use-effect #(st/emit! (di/fetch-collections)))
|
||||||
(mf/use-effect {:init #(st/emit! (di/initialize)
|
(mf/use-effect {:fn #(st/emit! (di/initialize)
|
||||||
(di/fetch-icons id))
|
(di/fetch-icons id))
|
||||||
:deps #js [id type]})
|
:deps #js [id type]})
|
||||||
|
|
||||||
[:section.dashboard-content
|
[:section.dashboard-content
|
||||||
|
|
|
@ -96,8 +96,7 @@
|
||||||
{:keys [id type name num-images]} coll
|
{:keys [id type name num-images]} coll
|
||||||
;; TODO: recalculate the num-images on crud operations for
|
;; TODO: recalculate the num-images on crud operations for
|
||||||
;; avod doing this on UI.
|
;; avod doing this on UI.
|
||||||
num-images-iref (mf/use-memo {:deps #js [id]
|
num-images-iref (mf/use-memo #(make-num-images-iref (:id coll)) #js [id])
|
||||||
:init #(make-num-images-iref (:id coll))})
|
|
||||||
num-images (mf/deref num-images-iref)
|
num-images (mf/deref num-images-iref)
|
||||||
editable? (= type :own)]
|
editable? (= type :own)]
|
||||||
(letfn [(on-click [event]
|
(letfn [(on-click [event]
|
||||||
|
@ -286,7 +285,7 @@
|
||||||
|
|
||||||
(mf/defc grid-form
|
(mf/defc grid-form
|
||||||
[{:keys [id type uploading?] :as props}]
|
[{:keys [id type uploading?] :as props}]
|
||||||
(let [input (mf/use-ref* nil)
|
(let [input (mf/use-ref nil)
|
||||||
on-click #(dom/click (mf/ref-node input))
|
on-click #(dom/click (mf/ref-node input))
|
||||||
on-select #(st/emit! (->> (dom/get-event-files %)
|
on-select #(st/emit! (->> (dom/get-event-files %)
|
||||||
(jscoll->vec)
|
(jscoll->vec)
|
||||||
|
@ -317,7 +316,7 @@
|
||||||
(mf/defc grid
|
(mf/defc grid
|
||||||
[{:keys [id type coll opts] :as props}]
|
[{:keys [id type coll opts] :as props}]
|
||||||
(let [editable? (or (= type :own) (nil? id))
|
(let [editable? (or (= type :own) (nil? id))
|
||||||
images-iref (mf/use-memo {:deps #js [id] :init #(make-images-iref id)})
|
images-iref (mf/use-memo #(make-images-iref id) #js [id])
|
||||||
images (->> (mf/deref images-iref)
|
images (->> (mf/deref images-iref)
|
||||||
(filter-images-by (:filter opts ""))
|
(filter-images-by (:filter opts ""))
|
||||||
(sort-images-by (:order opts :name)))]
|
(sort-images-by (:order opts :name)))]
|
||||||
|
@ -403,9 +402,9 @@
|
||||||
:else (first colls))
|
:else (first colls))
|
||||||
id (:id selected-coll)]
|
id (:id selected-coll)]
|
||||||
|
|
||||||
(mf/use-effect {:init #(st/emit! (di/fetch-collections))})
|
(mf/use-effect #(st/emit! (di/fetch-collections)))
|
||||||
(mf/use-effect {:init #(st/emit! (di/initialize)
|
(mf/use-effect {:fn #(st/emit! (di/initialize)
|
||||||
(di/fetch-images id))
|
(di/fetch-images id))
|
||||||
:deps #js [id type]})
|
:deps #js [id type]})
|
||||||
|
|
||||||
[:section.dashboard-content
|
[:section.dashboard-content
|
||||||
|
|
|
@ -213,8 +213,7 @@
|
||||||
|
|
||||||
(mf/defc projects-page
|
(mf/defc projects-page
|
||||||
[_]
|
[_]
|
||||||
(mf/use-effect
|
(mf/use-effect #(st/emit! (udp/initialize)))
|
||||||
{:init #(st/emit! (udp/initialize))})
|
|
||||||
(let [opts (mf/deref opts-ref)]
|
(let [opts (mf/deref opts-ref)]
|
||||||
[:section.dashboard-content
|
[:section.dashboard-content
|
||||||
[:& menu {:opts opts}]
|
[:& menu {:opts opts}]
|
||||||
|
|
|
@ -36,10 +36,12 @@
|
||||||
(mf/defc modal-wrapper
|
(mf/defc modal-wrapper
|
||||||
[{:keys [component props]}]
|
[{:keys [component props]}]
|
||||||
(mf/use-effect
|
(mf/use-effect
|
||||||
{:init #(events/listen js/document EventType.KEYDOWN on-esc-clicked)
|
(fn []
|
||||||
:end #(events/unlistenByKey %)})
|
(let [key (events/listen js/document EventType.KEYDOWN on-esc-clicked)]
|
||||||
|
#(events/unlistenByKey %))))
|
||||||
|
|
||||||
(let [classes (classnames :transparent (:transparent? props))
|
(let [classes (classnames :transparent (:transparent? props))
|
||||||
parent-ref (mf/use-ref* nil)]
|
parent-ref (mf/use-ref nil)]
|
||||||
[:div.lightbox {:class classes
|
[:div.lightbox {:class classes
|
||||||
:ref parent-ref
|
:ref parent-ref
|
||||||
:on-click #(on-parent-clicked % parent-ref)}
|
:on-click #(on-parent-clicked % parent-ref)}
|
||||||
|
|
|
@ -31,8 +31,8 @@
|
||||||
{:wrap [mf/wrap-memo]}
|
{:wrap [mf/wrap-memo]}
|
||||||
[{:keys [id] :as props}]
|
[{:keys [id] :as props}]
|
||||||
(let [shape-iref (mf/use-memo {:deps #js [id]
|
(let [shape-iref (mf/use-memo {:deps #js [id]
|
||||||
:init #(-> (l/in [:shapes id])
|
:fn #(-> (l/in [:shapes id])
|
||||||
(l/derive st/state))})]
|
(l/derive st/state))})]
|
||||||
(when-let [shape (mf/deref shape-iref)]
|
(when-let [shape (mf/deref shape-iref)]
|
||||||
(when-not (:hidden shape)
|
(when-not (:hidden shape)
|
||||||
(render-shape shape)))))
|
(render-shape shape)))))
|
||||||
|
|
|
@ -36,8 +36,7 @@
|
||||||
selected? (contains? selected (:id shape))
|
selected? (contains? selected (:id shape))
|
||||||
on-mouse-down #(common/on-mouse-down % shape selected)]
|
on-mouse-down #(common/on-mouse-down % shape selected)]
|
||||||
|
|
||||||
(mf/use-effect
|
(mf/use-effect #(st/emit! (udi/fetch-image (:image shape))))
|
||||||
{:init #(st/emit! (udi/fetch-image (:image shape)))})
|
|
||||||
|
|
||||||
(when image
|
(when image
|
||||||
[:g.shape {:class (when selected? "selected")
|
[:g.shape {:class (when selected? "selected")
|
||||||
|
|
|
@ -60,25 +60,19 @@
|
||||||
(st/emit! (dw/increase-zoom)))
|
(st/emit! (dw/increase-zoom)))
|
||||||
(scroll/scroll-to-point dom mouse-point scroll-position))))
|
(scroll/scroll-to-point dom mouse-point scroll-position))))
|
||||||
|
|
||||||
(defn- subscibe
|
(defn- subscribe
|
||||||
[canvas page]
|
[canvas page]
|
||||||
(let [canvas-dom (mf/ref-node canvas)]
|
(scroll/scroll-to-page-center (mf/ref-node canvas) page)
|
||||||
;; TODO: scroll stuff need to be refactored
|
(st/emit! (udp/watch-page-changes (:id page))
|
||||||
(scroll/scroll-to-page-center canvas-dom page)
|
(udu/watch-page-changes (:id page)))
|
||||||
(st/emit! (udp/watch-page-changes (:id page))
|
(let [sub (shortcuts/init)]
|
||||||
(udu/watch-page-changes (:id page)))
|
#(do (st/emit! ::udp/stop-page-watcher)
|
||||||
|
(rx/cancel! sub))))
|
||||||
(shortcuts/init)))
|
|
||||||
|
|
||||||
(defn- unsubscribe
|
|
||||||
[shortcuts-subscription]
|
|
||||||
(st/emit! ::udp/stop-page-watcher)
|
|
||||||
(rx/cancel! shortcuts-subscription))
|
|
||||||
|
|
||||||
(mf/defc workspace
|
(mf/defc workspace
|
||||||
[{:keys [page] :as props}]
|
[{:keys [page] :as props}]
|
||||||
(let [flags (or (mf/deref refs/flags) #{})
|
(let [flags (or (mf/deref refs/flags) #{})
|
||||||
canvas (mf/use-ref* nil)
|
canvas (mf/use-ref nil)
|
||||||
|
|
||||||
left-sidebar? (not (empty? (keep flags [:layers :sitemap
|
left-sidebar? (not (empty? (keep flags [:layers :sitemap
|
||||||
:document-history])))
|
:document-history])))
|
||||||
|
@ -89,9 +83,8 @@
|
||||||
:no-tool-bar-left (not left-sidebar?)
|
:no-tool-bar-left (not left-sidebar?)
|
||||||
:scrolling (:viewport-positionig workspace))]
|
:scrolling (:viewport-positionig workspace))]
|
||||||
|
|
||||||
(mf/use-effect {:deps (:id page)
|
(mf/use-effect {:deps #js [canvas page]
|
||||||
:init #(subscibe canvas page)
|
:fn #(subscribe canvas page)})
|
||||||
:end unsubscribe})
|
|
||||||
[:*
|
[:*
|
||||||
(messages-widget)
|
(messages-widget)
|
||||||
[:& header {:page page
|
[:& header {:page page
|
||||||
|
@ -128,13 +121,13 @@
|
||||||
(mf/defc workspace-page
|
(mf/defc workspace-page
|
||||||
[{:keys [project-id page-id] :as props}]
|
[{:keys [project-id page-id] :as props}]
|
||||||
(let [page-iref (mf/use-memo {:deps #js [project-id page-id]
|
(let [page-iref (mf/use-memo {:deps #js [project-id page-id]
|
||||||
:init #(-> (l/in [:pages page-id])
|
:fn #(-> (l/in [:pages page-id])
|
||||||
(l/derive st/state))})
|
(l/derive st/state))})
|
||||||
page (mf/deref page-iref)]
|
page (mf/deref page-iref)]
|
||||||
|
|
||||||
(mf/use-effect
|
(mf/use-effect
|
||||||
{:deps #js [project-id page-id]
|
{:deps #js [project-id page-id]
|
||||||
:init #(st/emit! (dw/initialize project-id page-id))})
|
:fn #(st/emit! (dw/initialize project-id page-id))})
|
||||||
|
|
||||||
;; (prn "workspace-page.render" (:id page) props)
|
;; (prn "workspace-page.render" (:id page) props)
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,8 @@
|
||||||
invisible (- (count (:colors coll)) visible)
|
invisible (- (count (:colors coll)) visible)
|
||||||
close #(st/emit! (udw/toggle-flag :colorpalette))
|
close #(st/emit! (udw/toggle-flag :colorpalette))
|
||||||
|
|
||||||
container (mf/use-ref* nil)
|
container (mf/use-ref nil)
|
||||||
container-child (mf/use-ref* nil)]
|
container-child (mf/use-ref nil)]
|
||||||
|
|
||||||
(letfn [(select-coll [event]
|
(letfn [(select-coll [event]
|
||||||
(let [id (read-string (dom/event->value event))
|
(let [id (read-string (dom/event->value event))
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
(when (not= (:width @local) width)
|
(when (not= (:width @local) width)
|
||||||
(swap! local assoc :width width))))]
|
(swap! local assoc :width width))))]
|
||||||
|
|
||||||
(mf/use-effect {:deps true :init after-render})
|
(mf/use-effect {:deps true :fn after-render})
|
||||||
|
|
||||||
[:div.color-palette
|
[:div.color-palette
|
||||||
[:div.color-palette-actions
|
[:div.color-palette-actions
|
||||||
|
@ -116,5 +116,5 @@
|
||||||
(mf/defc colorpalette
|
(mf/defc colorpalette
|
||||||
[props]
|
[props]
|
||||||
(let [colls (mf/deref collections-iref)]
|
(let [colls (mf/deref collections-iref)]
|
||||||
(mf/use-effect {:init #(st/emit! (udc/fetch-collections))})
|
(mf/use-effect #(st/emit! (udc/fetch-collections)))
|
||||||
[:& palette {:colls (vals colls)}]))
|
[:& palette {:colls (vals colls)}]))
|
||||||
|
|
|
@ -37,6 +37,6 @@
|
||||||
(let [metadata (:metadata page)
|
(let [metadata (:metadata page)
|
||||||
color (:grid-color metadata "#cccccc")
|
color (:grid-color metadata "#cccccc")
|
||||||
path (mf/use-memo {:deps #js [metadata]
|
path (mf/use-memo {:deps #js [metadata]
|
||||||
:init #(make-grid-path metadata)})]
|
:fn #(make-grid-path metadata)})]
|
||||||
[:g.grid {:style {:pointer-events "none"}}
|
[:g.grid {:style {:pointer-events "none"}}
|
||||||
[:path {:d path :stroke color :opacity "0.3"}]]))
|
[:path {:d path :stroke color :opacity "0.3"}]]))
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
|
|
||||||
(mf/defc import-image-modal
|
(mf/defc import-image-modal
|
||||||
[props]
|
[props]
|
||||||
(let [input (mf/use-ref* nil)
|
(let [input (mf/use-ref nil)
|
||||||
uploading? (mf/deref uploading-iref)]
|
uploading? (mf/deref uploading-iref)]
|
||||||
(letfn [(on-upload-click [event]
|
(letfn [(on-upload-click [event]
|
||||||
(let [input-el (mf/ref-node input)]
|
(let [input-el (mf/ref-node input)]
|
||||||
|
@ -134,12 +134,12 @@
|
||||||
(swap! local assoc :id))]
|
(swap! local assoc :id))]
|
||||||
|
|
||||||
(mf/use-effect
|
(mf/use-effect
|
||||||
{:init #(do (st/emit! (udi/fetch-collections))
|
{:fn #(do (st/emit! (udi/fetch-collections))
|
||||||
(st/emit! (udi/fetch-images nil)))})
|
(st/emit! (udi/fetch-images nil)))})
|
||||||
|
|
||||||
(mf/use-effect
|
(mf/use-effect
|
||||||
{:deps #js [type id]
|
{:deps #js [type id]
|
||||||
:init #(st/emit! (udi/fetch-images id))})
|
:fn #(st/emit! (udi/fetch-images id))})
|
||||||
|
|
||||||
[:div.lightbox-body.big-lightbox
|
[:div.lightbox-body.big-lightbox
|
||||||
[:h3 "Import image from library"]
|
[:h3 "Import image from library"]
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
(on-unmount []
|
(on-unmount []
|
||||||
(st/emit! :interrupt
|
(st/emit! :interrupt
|
||||||
(udw/clear-ruler)))]
|
(udw/clear-ruler)))]
|
||||||
(mf/use-effect {:end on-unmount})
|
(mf/use-effect (constantly on-unmount))
|
||||||
[:svg {:on-mouse-down on-mouse-down
|
[:svg {:on-mouse-down on-mouse-down
|
||||||
:on-mouse-up on-mouse-up}
|
:on-mouse-up on-mouse-up}
|
||||||
[:rect {:style {:fill "transparent"
|
[:rect {:style {:fill "transparent"
|
||||||
|
|
|
@ -90,9 +90,9 @@
|
||||||
|
|
||||||
(mf/defc shape-options
|
(mf/defc shape-options
|
||||||
[{:keys [sid] :as props}]
|
[{:keys [sid] :as props}]
|
||||||
(let [shape-iref (mf/use-memo {:deps sid
|
(let [shape-iref (mf/use-memo {:deps #js [sid]
|
||||||
:init #(-> (l/in [:shapes sid])
|
:fn #(-> (l/in [:shapes sid])
|
||||||
(l/derive st/state))})
|
(l/derive st/state))})
|
||||||
shape (mf/deref shape-iref)
|
shape (mf/deref shape-iref)
|
||||||
menus (get +menus-map+ (:type shape))]
|
menus (get +menus-map+ (:type shape))]
|
||||||
[:div
|
[:div
|
||||||
|
|
|
@ -98,8 +98,8 @@
|
||||||
(mf/defc sitemap-toolbox
|
(mf/defc sitemap-toolbox
|
||||||
[{:keys [project-id current-page-id] :as props}]
|
[{:keys [project-id current-page-id] :as props}]
|
||||||
(let [project-iref (mf/use-memo {:deps #js [project-id]
|
(let [project-iref (mf/use-memo {:deps #js [project-id]
|
||||||
:init #(-> (l/in [:projects project-id])
|
:fn #(-> (l/in [:projects project-id])
|
||||||
(l/derive st/state))})
|
(l/derive st/state))})
|
||||||
project (mf/deref project-iref)
|
project (mf/deref project-iref)
|
||||||
create #(udl/open! :page-form {:page {:project project-id}})
|
create #(udl/open! :page-form {:page {:project project-id}})
|
||||||
close #(st/emit! (dw/toggle-flag :sitemap))]
|
close #(st/emit! (dw/toggle-flag :sitemap))]
|
||||||
|
|
|
@ -20,14 +20,14 @@
|
||||||
:or {on-hover (constantly nil)
|
:or {on-hover (constantly nil)
|
||||||
on-drop (constantly nil)}
|
on-drop (constantly nil)}
|
||||||
:as options}]
|
:as options}]
|
||||||
(let [ref (mf/use-ref* nil)
|
(let [ref (mf/use-ref nil)
|
||||||
[_, drop] (rdnd/useDrop
|
[_, drop] (rdnd/useDrop
|
||||||
#js {:accept type
|
#js {:accept type
|
||||||
:hover (fn [item monitor]
|
:hover (fn [item monitor]
|
||||||
(when (unchecked-get ref "current")
|
(when (mf/rev-val ref)
|
||||||
(on-hover (unchecked-get item "data") monitor)))
|
(on-hover (unchecked-get item "data") monitor)))
|
||||||
:drop (fn [item monitor]
|
:drop (fn [item monitor]
|
||||||
(when (unchecked-get ref "current")
|
(when (mf/ref-val ref)
|
||||||
(on-drop (unchecked-get item "data") monitor)))})
|
(on-drop (unchecked-get item "data") monitor)))})
|
||||||
[props, drag] (rdnd/useDrag
|
[props, drag] (rdnd/useDrag
|
||||||
#js {:item #js {:type type :data data}
|
#js {:item #js {:type type :data data}
|
||||||
|
|
|
@ -28,21 +28,22 @@
|
||||||
(let [chunk-size (if (> pending-num chunk-size) chunk-size pending-num)]
|
(let [chunk-size (if (> pending-num chunk-size) chunk-size pending-num)]
|
||||||
{:current (into current (take chunk-size pending))
|
{:current (into current (take chunk-size pending))
|
||||||
:pending (drop chunk-size pending)
|
:pending (drop chunk-size pending)
|
||||||
:pending-num (- pending-num chunk-size)}))]
|
:pending-num (- pending-num chunk-size)}))
|
||||||
|
(after-render [state]
|
||||||
|
(when (pos? (:pending-num @state))
|
||||||
|
(let [sem (schedule-on-idle (fn [] (swap! state update-state)))]
|
||||||
|
#(rx/cancel! sem))))]
|
||||||
|
|
||||||
(let [initial (mf/use-memo {:init initial-state})
|
(let [initial (mf/use-memo initial-state)
|
||||||
state (mf/use-state initial)]
|
state (mf/use-state initial)]
|
||||||
(mf/use-effect {:deps true
|
(mf/use-effect {:deps true :fn #(after-render state)})
|
||||||
:init #(when (pos? (:pending-num @state))
|
|
||||||
(schedule-on-idle (fn [] (swap! state update-state))))
|
|
||||||
:end #(when % (rx/cancel! %))})
|
|
||||||
(for [item (:current @state)]
|
(for [item (:current @state)]
|
||||||
(children item)))))
|
(children item)))))
|
||||||
|
|
||||||
(defn use-rxsub
|
(defn use-rxsub
|
||||||
[ob]
|
[ob]
|
||||||
(let [[state reset-state!] (mf/use-state* @ob)]
|
(let [[state reset-state!] (mf/useState @ob)]
|
||||||
(mf/use-effect*
|
(mf/useEffect
|
||||||
(fn []
|
(fn []
|
||||||
(let [sub (rx/subscribe ob #(reset-state! %))]
|
(let [sub (rx/subscribe ob #(reset-state! %))]
|
||||||
#(rx/cancel! sub)))
|
#(rx/cancel! sub)))
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
[{:keys [token id]}]
|
[{:keys [token id]}]
|
||||||
(let [{:keys [project pages flags]} (mf/react state-ref)]
|
(let [{:keys [project pages flags]} (mf/react state-ref)]
|
||||||
(mf/use-effect
|
(mf/use-effect
|
||||||
{:init #(st/emit! (dv/initialize token))})
|
{:fn #(st/emit! (dv/initialize token))})
|
||||||
(when (seq pages)
|
(when (seq pages)
|
||||||
[:section.view-content
|
[:section.view-content
|
||||||
(when (contains? flags :sitemap)
|
(when (contains? flags :sitemap)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue