@wordpress/block-editor
Version:
137 lines (111 loc) • 3.54 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.__experimentalGetGradientClass = __experimentalGetGradientClass;
exports.getGradientValueBySlug = getGradientValueBySlug;
exports.__experimentalGetGradientObjectByGradientValue = __experimentalGetGradientObjectByGradientValue;
exports.getGradientSlugByValue = getGradientSlugByValue;
exports.__experimentalUseGradient = __experimentalUseGradient;
var _lodash = require("lodash");
var _element = require("@wordpress/element");
var _data = require("@wordpress/data");
var _blockEdit = require("../block-edit");
var _useEditorFeature = _interopRequireDefault(require("../use-editor-feature"));
var _store = require("../../store");
/**
* External dependencies
*/
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
const EMPTY_ARRAY = [];
function __experimentalGetGradientClass(gradientSlug) {
if (!gradientSlug) {
return undefined;
}
return `has-${gradientSlug}-gradient-background`;
}
/**
* Retrieves the gradient value per slug.
*
* @param {Array} gradients Gradient Palette
* @param {string} slug Gradient slug
*
* @return {string} Gradient value.
*/
function getGradientValueBySlug(gradients, slug) {
const gradient = (0, _lodash.find)(gradients, ['slug', slug]);
return gradient && gradient.gradient;
}
function __experimentalGetGradientObjectByGradientValue(gradients, value) {
const gradient = (0, _lodash.find)(gradients, ['gradient', value]);
return gradient;
}
/**
* Retrieves the gradient slug per slug.
*
* @param {Array} gradients Gradient Palette
* @param {string} value Gradient value
* @return {string} Gradient slug.
*/
function getGradientSlugByValue(gradients, value) {
const gradient = __experimentalGetGradientObjectByGradientValue(gradients, value);
return gradient && gradient.slug;
}
function __experimentalUseGradient({
gradientAttribute = 'gradient',
customGradientAttribute = 'customGradient'
} = {}) {
const {
clientId
} = (0, _blockEdit.useBlockEditContext)();
const gradients = (0, _useEditorFeature.default)('color.gradients') || EMPTY_ARRAY;
const {
gradient,
customGradient
} = (0, _data.useSelect)(select => {
const {
getBlockAttributes
} = select(_store.store);
const attributes = getBlockAttributes(clientId) || {};
return {
customGradient: attributes[customGradientAttribute],
gradient: attributes[gradientAttribute]
};
}, [clientId, gradientAttribute, customGradientAttribute]);
const {
updateBlockAttributes
} = (0, _data.useDispatch)(_store.store);
const setGradient = (0, _element.useCallback)(newGradientValue => {
const slug = getGradientSlugByValue(gradients, newGradientValue);
if (slug) {
updateBlockAttributes(clientId, {
[gradientAttribute]: slug,
[customGradientAttribute]: undefined
});
return;
}
updateBlockAttributes(clientId, {
[gradientAttribute]: undefined,
[customGradientAttribute]: newGradientValue
});
}, [gradients, clientId, updateBlockAttributes]);
const gradientClass = __experimentalGetGradientClass(gradient);
let gradientValue;
if (gradient) {
gradientValue = getGradientValueBySlug(gradients, gradient);
} else {
gradientValue = customGradient;
}
return {
gradientClass,
gradientValue,
setGradient
};
}
//# sourceMappingURL=use-gradient.js.map