UNPKG

@wordpress/block-editor

Version:
111 lines (106 loc) 3.63 kB
"use strict"; 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