@wordpress/block-editor
Version:
111 lines (106 loc) • 3.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.__experimentalGetGradientClass = __experimentalGetGradientClass;
exports.__experimentalGetGradientObjectByGradientValue = __experimentalGetGradientObjectByGradientValue;
exports.__experimentalUseGradient = __experimentalUseGradient;
exports.getGradientSlugByValue = getGradientSlugByValue;
exports.getGradientValueBySlug = getGradientValueBySlug;
var _element = require("@wordpress/element");
var _data = require("@wordpress/data");
var _blockEdit = require("../block-edit");
var _useSettings = require("../use-settings");
var _store = require("../../store");
/**
* WordPress dependencies
*/
/**
* Internal dependencies
*/
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 = gradients?.find(g => g.slug === slug);
return gradient && gradient.gradient;
}
function __experimentalGetGradientObjectByGradientValue(gradients, value) {
const gradient = gradients?.find(g => g.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 [userGradientPalette, themeGradientPalette, defaultGradientPalette] = (0, _useSettings.useSettings)('color.gradients.custom', 'color.gradients.theme', 'color.gradients.default');
const allGradients = (0, _element.useMemo)(() => [...(userGradientPalette || []), ...(themeGradientPalette || []), ...(defaultGradientPalette || [])], [userGradientPalette, themeGradientPalette, defaultGradientPalette]);
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(allGradients, newGradientValue);
if (slug) {
updateBlockAttributes(clientId, {
[gradientAttribute]: slug,
[customGradientAttribute]: undefined
});
return;
}
updateBlockAttributes(clientId, {
[gradientAttribute]: undefined,
[customGradientAttribute]: newGradientValue
});
}, [allGradients, clientId, updateBlockAttributes]);
const gradientClass = __experimentalGetGradientClass(gradient);
let gradientValue;
if (gradient) {
gradientValue = getGradientValueBySlug(allGradients, gradient);
} else {
gradientValue = customGradient;
}
return {
gradientClass,
gradientValue,
setGradient
};
}
//# sourceMappingURL=use-gradient.js.map