@awsui/components-react
Version:
AWS UI is a collection of [React](https://reactjs.org/) components that help create intuitive, responsive, and accessible user experiences for web applications. It is developed by Amazon Web Services (AWS). This work is available under the terms of the [A
32 lines (31 loc) • 2.58 kB
JavaScript
import { __assign, __rest } from "tslib";
import React, { useImperativeHandle, useRef } from 'react';
import clsx from 'clsx';
import { getBaseProps } from '../internal/base-component';
import Button from '../button';
import { AdditionalInfo, Row } from './internal';
import styles from './styles.css.js';
import { useContainerBreakpoints } from '../internal/hooks/container-queries';
import { useTelemetry } from '../internal/hooks/use-telemetry';
import Box from '../box';
var AttributeEditor = React.forwardRef(function (_a, ref) {
var additionalInfo = _a.additionalInfo, disableAddButton = _a.disableAddButton, definition = _a.definition, _b = _a.items, items = _b === void 0 ? [] : _b, _c = _a.isItemRemovable, isItemRemovable = _c === void 0 ? function () { return true; } : _c, empty = _a.empty, addButtonText = _a.addButtonText, removeButtonText = _a.removeButtonText, onAddButtonClick = _a.onAddButtonClick, onRemoveButtonClick = _a.onRemoveButtonClick, props = __rest(_a, ["additionalInfo", "disableAddButton", "definition", "items", "isItemRemovable", "empty", "addButtonText", "removeButtonText", "onAddButtonClick", "onRemoveButtonClick"]);
useTelemetry('AttributeEditor');
var _d = useContainerBreakpoints(['default', 'xxs', 'xs']), breakpoint = _d[0], breakpointRef = _d[1];
var removeButtonRefs = useRef([]);
var baseProps = getBaseProps(props);
var isEmpty = items && items.length === 0;
useImperativeHandle(ref, function () { return ({
focusRemoveButton: function (rowIndex) {
var _a;
(_a = removeButtonRefs.current[rowIndex]) === null || _a === void 0 ? void 0 : _a.focus();
}
}); });
return (React.createElement("div", __assign({}, baseProps, { ref: breakpointRef, className: clsx(baseProps.className, styles.root) }),
React.createElement(Box, { margin: { bottom: 'l' } },
isEmpty && React.createElement("div", { className: styles.empty }, empty),
items.map(function (item, index) { return (React.createElement(Row, { key: index, index: index, breakpoint: breakpoint, item: item, definition: definition, removable: isItemRemovable(item), removeButtonText: removeButtonText, removeButtonRefs: removeButtonRefs.current, onRemoveButtonClick: onRemoveButtonClick })); })),
React.createElement(Button, { className: styles['add-button'], disabled: disableAddButton, onClick: onAddButtonClick, formAction: "none" }, addButtonText),
additionalInfo && React.createElement(AdditionalInfo, null, additionalInfo)));
});
export default AttributeEditor;