0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-13 10:38:13 -05:00

Properly implement copy and move operations on images page.

This commit is contained in:
Andrey Antukh 2016-11-07 22:54:53 +01:00
parent ec9495a2fc
commit e4c020f78f
No known key found for this signature in database
GPG key ID: 4DFEBCB8316A8B95
4 changed files with 52 additions and 41 deletions

View file

@ -377,14 +377,14 @@
(defrecord CopySelected [id] (defrecord CopySelected [id]
rs/WatchEvent rs/WatchEvent
(-apply-watch [_ state stream] (-apply-watch [_ state stream]
(let [selected (get-in state [:dashboard :images :selected]) (let [selected (get-in state [:dashboard :images :selected])]
selected (map #(get-in state [:images %]) selected)] (rx/merge
(->> (rx/from-coll selected) (->> (rx/from-coll selected)
(rx/map #(dissoc % :id)) (rx/flat-map #(rp/req :copy/image {:id % :collection id}))
(rx/map #(assoc % :collection id)) (rx/map :payload)
(rx/flat-map #(rp/req :create/image %)) (rx/map image-created))
(rx/map :payload) (->> (rx/from-coll selected)
(rx/map image-created))))) (rx/map deselect-image))))))
(defn copy-selected (defn copy-selected
[id] [id]

View file

@ -77,3 +77,10 @@
:method :put :method :put
:body body}] :body body}]
(send! params))) (send! params)))
(defmethod request :copy/image
[_ {:keys [id collection] :as body}]
(let [params {:url (str url "/library/images/copy")
:method :put
:body body}]
(send! params)))

View file

@ -234,7 +234,7 @@
(if editable? (if editable?
[:div.multiselect-nav [:div.multiselect-nav
[:span.move-item.tooltip.tooltip-top [:span.move-item.tooltip.tooltip-top
{:on-click on-toggle-copy} {:on-click on-toggle-copy :alt "Copy"}
(when (:show-copy-tooltip @local) (when (:show-copy-tooltip @local)
(grid-options-tooltip :selected id (grid-options-tooltip :selected id
:title "Copy to library" :title "Copy to library"
@ -242,7 +242,7 @@
i/organize] i/organize]
[:span.move-item.tooltip.tooltip-top [:span.move-item.tooltip.tooltip-top
{:on-click on-toggle-move} {:on-click on-toggle-move :alt "Move"}
(when (:show-move-tooltip @local) (when (:show-move-tooltip @local)
(grid-options-tooltip :selected id (grid-options-tooltip :selected id
:title "Move to library" :title "Move to library"

View file

@ -210,42 +210,24 @@
:type "file" :type "file"
:on-change on-file-selected}]]))) :on-change on-file-selected}]])))
(mx/defc grid-options-copy
{:mixins [mx/reactive mx/static]}
[current-coll]
{:pre [(uuid? current-coll)]}
(let [colls (mx/react collections-ref)
colls (->> (vals colls)
(filter #(= :own (:type %)))
(remove #(= current-coll (:id %)))
(sort-by :name colls))
on-select (fn [event id]
(dom/prevent-default event)
(rs/emit! (di/copy-selected id)))]
[:ul.move-list
[:li.title "Copy to library"]
[:li [:a {:href "#" :on-click #(on-select % nil)} "Storage"]]
(for [coll colls
:let [id (:id coll)
name (:name coll)]]
[:li {:key (str id)}
[:a {:on-click #(on-select % id)} name]])]))
(mx/defc grid-options-move (mx/defc grid-options-tooltip
{:mixins [mx/reactive mx/static]} {:mixins [mx/reactive mx/static]}
[current-coll] [& {:keys [selected on-select title]}]
{:pre [(uuid? current-coll)]} {:pre [(uuid? selected)
(fn? on-select)
(string? title)]}
(let [colls (mx/react collections-ref) (let [colls (mx/react collections-ref)
colls (->> (vals colls) colls (->> (vals colls)
(filter #(= :own (:type %))) (filter #(= :own (:type %)))
(remove #(= current-coll (:id %))) (remove #(= selected (:id %)))
(sort-by :name colls)) (sort-by :name colls))
on-select (fn [event id] on-select (fn [event id]
(println "on-select" event id)
(dom/prevent-default event) (dom/prevent-default event)
(rs/emit! (di/move-selected id)))] (dom/stop-propagation event)
(on-select id))]
[:ul.move-list [:ul.move-list
[:li.title "Move to library"] [:li.title title]
[:li [:a {:href "#" :on-click #(on-select % nil)} "Storage"]] [:li [:a {:href "#" :on-click #(on-select % nil)} "Storage"]]
(for [coll colls (for [coll colls
:let [id (:id coll) :let [id (:id coll)
@ -265,15 +247,35 @@
(on-toggle-copy [event] (on-toggle-copy [event]
(swap! local update :show-copy-tooltip not)) (swap! local update :show-copy-tooltip not))
(on-toggle-move [event] (on-toggle-move [event]
(swap! local update :show-move-tooltip not))] (swap! local update :show-move-tooltip not))
(on-copy [selected]
(println "copy from" id "to" selected)
(swap! local assoc
:show-move-tooltip false
:show-copy-tooltip false)
(rs/emit! (di/copy-selected selected)))
(on-move [selected]
(swap! local assoc
:show-move-tooltip false
:show-copy-tooltip false)
(rs/emit! (di/move-selected selected)))]
;; MULTISELECT OPTIONS BAR ;; MULTISELECT OPTIONS BAR
[:div.multiselect-bar [:div.multiselect-bar
(if editable? (if editable?
[:div.multiselect-nav [:div.multiselect-nav
[:span.move-item.tooltip.tooltip-top [:span.move-item.tooltip.tooltip-top
{:alt "Move items":on-click on-toggle-move} {:on-click on-toggle-copy :alt "Copy"}
(when (:show-copy-tooltip @local)
(grid-options-tooltip :selected id
:title "Copy to library"
:on-select on-copy))
i/organize]
[:span.move-item.tooltip.tooltip-top
{:on-click on-toggle-move :alt "Move"}
(when (:show-move-tooltip @local) (when (:show-move-tooltip @local)
(grid-options-move id)) (grid-options-tooltip :selected id
:title "Move to library"
:on-select on-move))
i/organize] i/organize]
[:span.move-item.tooltip.tooltip-top [:span.move-item.tooltip.tooltip-top
{:alt "Rename"} {:alt "Rename"}
@ -286,7 +288,9 @@
[:span.move-item.tooltip.tooltip-top [:span.move-item.tooltip.tooltip-top
{:on-click on-toggle-copy} {:on-click on-toggle-copy}
(when (:show-copy-tooltip @local) (when (:show-copy-tooltip @local)
(grid-options-copy id)) (grid-options-tooltip :selected id
:title "Copy to library"
:on-select on-copy))
i/organize]])]))) i/organize]])])))
(mx/defc grid-item (mx/defc grid-item