diff --git a/backend/src/app/srepl/main.clj b/backend/src/app/srepl/main.clj index be90bec850..fac42d0b0d 100644 --- a/backend/src/app/srepl/main.clj +++ b/backend/src/app/srepl/main.clj @@ -67,6 +67,38 @@ (db/insert! conn :file params) (:id file)))))) +(defn repair-orphaned-components + "We have detected some cases of component instances that are not nested, but + however they have not the :component-root? attribute (so the system considers + them nested). This script fixes this adding them the attribute. + + Use it with the update-file function above." + [data] + (let [update-page + (fn [page] + (prn "================= Page:" (:name page)) + (letfn [(is-nested? [object] + (and (some? (:component-id object)) + (nil? (:component-root? object)))) + + (is-instance? [object] + (some? (:shape-ref object))) + + (get-parent [object] + (get (:objects page) (:parent-id object))) + + (update-object [object] + (if (and (is-nested? object) + (not (is-instance? (get-parent object)))) + (do + (prn "Orphan:" (:name object)) + (assoc object :component-root? true)) + object))] + + (update page :objects d/update-vals update-object)))] + + (update data :pages-index d/update-vals update-page))) + ;; (defn check-image-shapes ;; [{:keys [data] :as file} stats] ;; (println "=> analizing file:" (:name file) (:id file)) diff --git a/frontend/src/app/main/data/workspace/libraries_helpers.cljs b/frontend/src/app/main/data/workspace/libraries_helpers.cljs index 700e87c0eb..5172481ca5 100644 --- a/frontend/src/app/main/data/workspace/libraries_helpers.cljs +++ b/frontend/src/app/main/data/workspace/libraries_helpers.cljs @@ -549,18 +549,19 @@ (:shapes shape-main)) only-inst (fn [changes child-inst] - (when-not (and omit-touched? - (contains? (:touched shape-inst) - :shapes-group)) + (if-not (and omit-touched? + (contains? (:touched shape-inst) + :shapes-group)) (remove-shape changes child-inst container - omit-touched?))) + omit-touched?) + changes)) only-main (fn [changes child-main] - (when-not (and omit-touched? - (contains? (:touched shape-inst) - :shapes-group)) + (if-not (and omit-touched? + (contains? (:touched shape-inst) + :shapes-group)) (add-shape-to-instance changes child-main (d/index-of children-main @@ -570,7 +571,8 @@ root-inst root-main omit-touched? - set-remote-synced?))) + set-remote-synced?) + changes)) both (fn [changes child-inst child-main] (generate-sync-shape-direct-recursive changes