Merge pull request #1093 from penpot/niwinz-hotfixes

Hotfixes
This commit is contained in:
Andrés Moya 2021-07-15 14:13:42 +02:00 committed by GitHub
commit 185e06ed79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 47 additions and 32 deletions

View File

@ -64,16 +64,21 @@
(comp (comp
(map :objects) (map :objects)
(mapcat vals) (mapcat vals)
(filter #(= :image (:type %))) (map (fn [{:keys [type] :as obj}]
(map :metadata) (case type
(map :id))) :path (get-in obj [:fill-image :id])
:image (get-in obj [:metadata :id])
nil)))
(filter uuid?)))
(defn- collect-used-media (defn- collect-used-media
[data] [data]
(let [pages (concat
(vals (:pages-index data))
(vals (:components data)))]
(-> #{} (-> #{}
(into collect-media-xf (vals (:pages-index data))) (into collect-media-xf pages)
(into collect-media-xf (vals (:components data))) (into (keys (:media data))))))
(into (keys (:media data)))))
(defn- process-file (defn- process-file
[{:keys [conn] :as cfg} {:keys [id data age] :as file}] [{:keys [conn] :as cfg} {:keys [id data age] :as file}]

View File

@ -293,23 +293,24 @@
(defmethod process-change :add-page (defmethod process-change :add-page
[data {:keys [id name page]}] [data {:keys [id name page]}]
(cond (when (and id name page)
(and (string? name) (uuid? id))
(let [page (assoc init/empty-page-data
:id id
:name name)]
(-> data
(update :pages conj id)
(update :pages-index assoc id page)))
(map? page)
(-> data
(update :pages conj (:id page))
(update :pages-index assoc (:id page) page))
:else
(ex/raise :type :conflict (ex/raise :type :conflict
:hint "name or page should be provided, never both"))) :hint "name or page should be provided, never both"))
(letfn [(conj-if-not-exists [pages id]
(cond-> pages
(not (d/seek #(= % id) pages))
(conj id)))]
(if (and (string? name) (uuid? id))
(let [page (assoc init/empty-page-data
:id id
:name name)]
(-> data
(update :pages conj-if-not-exists id)
(update :pages-index assoc id page)))
(-> data
(update :pages conj-if-not-exists (:id page))
(update :pages-index assoc (:id page) page)))))
(defmethod process-change :mod-page (defmethod process-change :mod-page
[data {:keys [id name]}] [data {:keys [id name]}]

View File

@ -99,7 +99,8 @@
;; Implemented with transient for performance ;; Implemented with transient for performance
(defn get-children (defn get-children
"Retrieve all children ids recursively for a given object" "Retrieve all children ids recursively for a given object. The
children's order will be breadth first."
[id objects] [id objects]
(loop [result (transient []) (loop [result (transient [])

View File

@ -141,6 +141,11 @@
(try (try
(us/assert ::spec/changes redo-changes) (us/assert ::spec/changes redo-changes)
(us/assert ::spec/changes undo-changes) (us/assert ::spec/changes undo-changes)
;; (prn "====== commit-changes ======" path)
;; (cljs.pprint/pprint redo-changes)
;; (cljs.pprint/pprint undo-changes)
(update-in state path cp/process-changes redo-changes false) (update-in state path cp/process-changes redo-changes false)
(catch :default e (catch :default e

View File

@ -350,6 +350,8 @@
(let [page-id (:current-page-id state) (let [page-id (:current-page-id state)
objects (wsh/lookup-page-objects state page-id) objects (wsh/lookup-page-objects state page-id)
ids (cp/clean-loops objects ids)
groups-to-unmask groups-to-unmask
(reduce (fn [group-ids id] (reduce (fn [group-ids id]
;; When the shape to delete is the mask of a masked group, ;; When the shape to delete is the mask of a masked group,
@ -387,10 +389,12 @@
ids) ids)
all-children all-children
(reduce (fn [res id] (->> ids
(into res (cp/get-children id objects))) (reduce (fn [res id]
(d/ordered-set) (into res (cp/get-children id objects)))
ids) [])
(reverse)
(into (d/ordered-set)))
empty-parents empty-parents
(into (d/ordered-set) empty-parents-xform all-parents) (into (d/ordered-set) empty-parents-xform all-parents)

View File

@ -6,7 +6,6 @@
(ns app.main.data.workspace.undo (ns app.main.data.workspace.undo
(:require (:require
[app.common.pages :as cp]
[app.common.pages.spec :as spec] [app.common.pages.spec :as spec]
[app.common.spec :as us] [app.common.spec :as us]
[cljs.spec.alpha :as s] [cljs.spec.alpha :as s]
@ -31,13 +30,13 @@
(subvec undo (- cnt MAX-UNDO-SIZE)) (subvec undo (- cnt MAX-UNDO-SIZE))
undo))) undo)))
;; TODO: Review the necessity of this method
(defn materialize-undo (defn materialize-undo
[changes index] [_changes index]
(ptk/reify ::materialize-undo (ptk/reify ::materialize-undo
ptk/UpdateEvent ptk/UpdateEvent
(update [_ state] (update [_ state]
(-> state (-> state
(update :workspace-data cp/process-changes changes)
(assoc-in [:workspace-undo :index] index))))) (assoc-in [:workspace-undo :index] index)))))
(defn- add-undo-entry (defn- add-undo-entry

View File

@ -139,8 +139,8 @@
(d/without-keys dissoc-attrs) (d/without-keys dissoc-attrs)
(assoc :type :path) (assoc :type :path)
(assoc :content new-content) (assoc :content new-content)
(cond-> (= :image type) (cond-> (= :image type) (-> (assoc :fill-image metadata)
(assoc :fill-image metadata)))) (dissoc :metadata)))))
;; Do nothing if the shape is not of a correct type ;; Do nothing if the shape is not of a correct type
shape)) shape))