awv3
Version:
⚡ AWV3 embedded CAD
128 lines (118 loc) • 3.21 kB
JavaScript
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _extends from "@babel/runtime/helpers/extends";
import { mixin } from '../lifecycle';
var scope = 'plugins';
export var base = mixin(scope, plugin);
export var types = _extends({}, base.types, {
enable: scope + "/enable",
toggle: scope + "/toggle",
collapse: scope + "/collapse",
toggleCollapse: scope + "/toggleCollapse",
addElement: scope + "/addElement",
removeElement: scope + "/removeElement",
removeAllElements: scope + "/removeAllElements",
closeAllFeatures: scope + "/closeAllFeatures"
});
export var actions = _extends({}, base.actions, {
enable: function enable(id, enabled) {
return {
type: types.enable,
id: id,
enabled: enabled
};
},
toggle: function toggle(id) {
return {
type: types.toggle,
id: id
};
},
collapse: function collapse(id, collapsed) {
return function (dispatch) {
return requestAnimationFrame(function () {
return dispatch({
type: types.collapse,
id: id
});
});
};
},
toggleCollapse: function toggleCollapse(id) {
return function (dispatch) {
return requestAnimationFrame(function () {
return dispatch({
type: types.toggleCollapse,
id: id
});
});
};
},
addElement: function addElement(id, element) {
return {
type: types.addElement,
id: id,
element: element
};
},
removeElement: function removeElement(id, element) {
return {
type: types.removeElement,
id: id,
element: element
};
},
removeAllElements: function removeAllElements(id) {
return {
type: types.removeAllElements,
id: id
};
},
closeAllFeatures: function closeAllFeatures() {
return function (dispatch) {
return Object.values(base.references).forEach(function (plugin) {
return plugin.feature && dispatch(actions.unregister(plugin.id));
});
};
}
});
function plugin(state, _ref) {
var type = _ref.type,
payload = _objectWithoutProperties(_ref, ["type"]);
switch (type) {
case types.enable:
return _extends({}, state, {
enabled: payload.enabled,
collapsed: !payload.enabled ? true : state.collapsed
});
case types.toggle:
return _extends({}, state, {
enabled: !state.enabled,
collapsed: state.enabled ? true : state.collapsed
});
case types.collapse:
return _extends({}, state, {
collapsed: payload.collapsed
});
case types.toggleCollapse:
return _extends({}, state, {
collapsed: !state.collapsed
});
case types.addElement:
return _extends({}, state, {
elements: state.elements.concat([payload.element])
});
case types.removeElement:
return _extends({}, state, {
elements: state.elements.filter(function (item) {
return item !== payload.element;
})
});
case types.removeAllElements:
return _extends({}, state, {
elements: []
});
default:
return state;
}
}
export var reducer = base.reducer;