Browse Source

Ignore mutations triggered by nested components

Caleb Porzio 5 years ago
parent
commit
a7a7fa4019
4 changed files with 14 additions and 8 deletions
  1. 6 3
      dist/alpine.js
  2. 0 0
      dist/alpine.min.js
  3. 2 2
      dist/mix-manifest.json
  4. 6 3
      src/component.js

+ 6 - 3
dist/alpine.js

@@ -1012,14 +1012,17 @@ function () {
         subtree: true
       };
       var observer = new MutationObserver(function (mutations) {
-        window.latestMutations = mutations;
-
         for (var i = 0; i < mutations.length; i++) {
+          // Filter out mutations triggered from child components.
+          if (!mutations[i].target.closest('[x-data]').isSameNode(_this3.el)) return;
+
           if (mutations[i].type === 'attributes' && mutations[i].attributeName === 'x-data') {
             (function () {
               var rawData = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["saferEval"])(mutations[i].target.getAttribute('x-data'), {});
               Object.keys(rawData).forEach(function (key) {
-                _this3.data[key] = rawData[key];
+                if (_this3.data[key] !== rawData[key]) {
+                  _this3.data[key] = rawData[key];
+                }
               });
             })();
           }

File diff suppressed because it is too large
+ 0 - 0
dist/alpine.min.js


+ 2 - 2
dist/mix-manifest.json

@@ -1,4 +1,4 @@
 {
-    "/alpine.min.js": "/alpine.min.js?id=bb2c712dc9a14e6ee215",
-    "/alpine.js": "/alpine.js?id=25d9d188630c8c63753f"
+    "/alpine.min.js": "/alpine.min.js?id=6596bbe10c6e799d6058",
+    "/alpine.js": "/alpine.js?id=7e232940b8cde263a3a7"
 }

+ 6 - 3
src/component.js

@@ -118,14 +118,17 @@ export default class Component {
         }
 
         const observer = new MutationObserver((mutations) => {
-            window.latestMutations = mutations
-
             for (let i=0; i < mutations.length; i++){
+                // Filter out mutations triggered from child components.
+                if (! mutations[i].target.closest('[x-data]').isSameNode(this.el)) return
+
                 if (mutations[i].type === 'attributes' && mutations[i].attributeName === 'x-data') {
                     const rawData = saferEval(mutations[i].target.getAttribute('x-data'), {})
 
                     Object.keys(rawData).forEach(key => {
-                        this.data[key] = rawData[key]
+                        if (this.data[key] !== rawData[key]) {
+                            this.data[key] = rawData[key]
+                        }
                     })
                 }
 

Some files were not shown because too many files changed in this diff