Skip to content

Commit 727225f

Browse files
author
Ihor Melnychenko
committed
MAGETWO-38867: Create mixin for declarative widget description
1 parent 6b5e713 commit 727225f

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

lib/web/mage/apply/main.js

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,29 @@ define([
3232
}
3333
});
3434
}
35+
/**
36+
* Initializes mixins assigned to a specfied component.
37+
*
38+
* @param {Object} mixins - object contains mixins list.
39+
* @param {Object} itemContainer - object with component config and DOM element link.
40+
*/
41+
function initMixins(mixins, itemContainer){
42+
var configStack = {},
43+
element = itemContainer.el;
3544

45+
_.each(mixins, function (mixin, componentName) {
46+
configStack = itemContainer.data[componentName];
47+
_.each(mixin, function (item) {
48+
require([item], function (fn) {
49+
configStack = fn(configStack, element);
50+
});
51+
});
52+
itemContainer.data[componentName] = configStack;
53+
});
54+
delete itemContainer.data.mixins;
55+
56+
return itemContainer;
57+
}
3658
/**
3759
* Parses elements 'data-mage-init' attribute as a valid JSON data.
3860
* Note: data-mage-init attribute will be removed.
@@ -65,11 +87,16 @@ define([
6587
_.toArray(nodes)
6688
.map(getData)
6789
.concat(virtuals)
68-
.forEach(function (item) {
69-
_.each(item.data, init.bind(null, item.el));
90+
.forEach(function (itemContainer) {
91+
var mixins = itemContainer.data.mixins;
92+
93+
if(mixins) {
94+
$.when(itemContainer = initMixins(mixins, itemContainer)).then(_.each(itemContainer.data, init.bind(null, itemContainer.el)));
95+
} else {
96+
_.each(itemContainer.data, init.bind(null, itemContainer.el));
97+
}
7098
});
7199
},
72-
73100
applyFor: init
74101
};
75102
});

0 commit comments

Comments
 (0)