UNPKG

@wordpress/components

Version:
102 lines (82 loc) 2.92 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = AlignmentMatrixControl; var _element = require("@wordpress/element"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _lodash = require("lodash"); var _classnames = _interopRequireDefault(require("classnames")); var _i18n = require("@wordpress/i18n"); var _compose = require("@wordpress/compose"); var _cell = _interopRequireDefault(require("./cell")); var _composite = require("../composite"); var _alignmentMatrixControlStyles = require("./styles/alignment-matrix-control-styles"); var _icon = _interopRequireDefault(require("./icon")); var _utils = require("./utils"); /** * External dependencies */ /** * WordPress dependencies */ /** * Internal dependencies */ function useBaseId(id) { const instanceId = (0, _compose.useInstanceId)(AlignmentMatrixControl, 'alignment-matrix-control'); return id || instanceId; } function AlignmentMatrixControl({ className, id, label = (0, _i18n.__)('Alignment Matrix Control'), defaultValue = 'center center', value, onChange = _lodash.noop, width = 92, ...props }) { const [immutableDefaultValue] = (0, _element.useState)(value !== null && value !== void 0 ? value : defaultValue); const baseId = useBaseId(id); const initialCurrentId = (0, _utils.getItemId)(baseId, immutableDefaultValue); const composite = (0, _composite.useCompositeState)({ baseId, currentId: initialCurrentId, rtl: (0, _i18n.isRTL)() }); const handleOnChange = nextValue => { onChange(nextValue); }; (0, _element.useEffect)(() => { if (typeof value !== 'undefined') { composite.setCurrentId((0, _utils.getItemId)(baseId, value)); } }, [value, composite.setCurrentId]); const classes = (0, _classnames.default)('component-alignment-matrix-control', className); return (0, _element.createElement)(_composite.Composite, (0, _extends2.default)({}, props, composite, { "aria-label": label, as: _alignmentMatrixControlStyles.Root, className: classes, role: "grid", width: width }), _utils.GRID.map((cells, index) => (0, _element.createElement)(_composite.CompositeGroup, (0, _extends2.default)({}, composite, { as: _alignmentMatrixControlStyles.Row, role: "row", key: index }), cells.map(cell => { const cellId = (0, _utils.getItemId)(baseId, cell); const isActive = composite.currentId === cellId; return (0, _element.createElement)(_cell.default, (0, _extends2.default)({}, composite, { id: cellId, isActive: isActive, key: cell, value: cell, onFocus: () => handleOnChange(cell), tabIndex: isActive ? 0 : -1 })); })))); } AlignmentMatrixControl.Icon = _icon.default; //# sourceMappingURL=index.js.map