UNPKG

@wordpress/block-editor

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