UNPKG

ultra-design

Version:
109 lines (97 loc) 4.43 kB
import _defineProperty from '@babel/runtime/helpers/defineProperty'; import _slicedToArray from '@babel/runtime/helpers/slicedToArray'; import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties'; import _pt from 'prop-types'; import clsx from 'clsx'; import React, { useState, useEffect, useMemo } from 'react'; import { CSSTransition } from 'react-transition-group'; import { useMergeProps } from '../utils/mergeProps.js'; import withStyle from '../utils/withStyle.js'; import { tabsStyles } from './tabs-styles.js'; import { jsxs, jsx } from '@emotion/react/jsx-runtime'; var _excluded = ["value", "defaultValue", "onChange", "children", "className"]; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var defaultProps = {}; var Tabs = function Tabs(p) { var props = useMergeProps(defaultProps, p); var value = props.value, defaultValue = props.defaultValue, onChange = props.onChange, children = props.children, className = props.className, rest = _objectWithoutProperties(props, _excluded); var _useState = useState(defaultValue), _useState2 = _slicedToArray(_useState, 2), selfValue = _useState2[0], setSelfValue = _useState2[1]; useEffect(function () { if (typeof value === 'undefined') return; setSelfValue(value); }, [value]); var clickHandler = function clickHandler(value) { setSelfValue(value); onChange && onChange(value); }; var tabList = useMemo(function () { return React.Children.toArray(children).filter(function (c) { return c.type.displayName === 'UltraTabsItem'; }).map(function (child) { var _child$props = child.props, label = _child$props.label, value = _child$props.value, icon = _child$props.icon, disabled = _child$props.disabled; return { label: label, value: value, icon: icon, disabled: disabled }; }); }, [children]); return jsxs("div", _objectSpread(_objectSpread({ className: clsx('ultra-tabs', className) }, rest), {}, { css: tabsStyles(props), children: [jsx("div", { className: "ultra-tabs-header", children: tabList.map(function (tab) { return jsxs("div", { className: clsx('ultra-tabs-header-item', tab.disabled && 'ultra-tabs-header-item__disabled', selfValue === tab.value && 'ultra-tabs-header-item__active'), onClick: function onClick() { return !tab.disabled && clickHandler(tab.value); }, children: [tab.icon && jsx("div", { className: "ultra-tabs-header-item__icon", children: tab.icon }), tab.label] }, tab.value); }) }), jsx("div", { className: "ultra-tabs-content", children: React.Children.toArray(children).filter(function (c) { return c.type.displayName === 'UltraTabsItem'; }).map(function (child) { return jsx(CSSTransition, { classNames: "ultra-tabs-item-transition", "in": selfValue === child.props.value, timeout: 300, unmountOnExit: true, children: /*#__PURE__*/React.cloneElement(child, { className: "ultra-tabs-item__".concat(selfValue === child.props.value ? 'active' : 'inactive') }) }, child.props.value); }) })] })); }; Tabs.propTypes = { defaultValue: _pt.string, value: _pt.string, onChange: _pt.func, className: _pt.string }; Tabs.displayName = 'UltraTabs'; var TabsComponent = withStyle(Tabs); export { TabsComponent as default };