Adapt to rumext api changes.

This commit is contained in:
Andrey Antukh 2019-08-13 09:02:05 +00:00
parent 9aac5e91ab
commit 205d09a5cd
20 changed files with 68 additions and 75 deletions

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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}]

View file

@ -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)}

View file

@ -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)))))

View file

@ -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")

View file

@ -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)

View file

@ -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)}]))

View file

@ -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"}]]))

View file

@ -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"]

View file

@ -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"

View file

@ -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

View file

@ -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))]

View file

@ -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}

View file

@ -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)))

View file

@ -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)