UNPKG

@formant/ava-react

Version:

React components of AVA.

130 lines 8.78 kB
var _excluded = ["spec", "size", "theme", "palette", "pluginManager", "showCollapse"], _excluded2 = ["onClickParagraph", "onMouseEnterParagraph", "onMouseLeaveParagraph"]; function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } import React, { useState } from 'react'; import { v4 } from 'uuid'; import { Ol, Ul, Li, P as StyledP } from "../styled"; import { Phrases } from "../phrases"; import { NTV_PREFIX_CLS } from "../constants"; import { getCollapseProps } from "../utils"; import { classnames as cx } from "../../utils"; import { presetPluginManager } from "../chore/plugin"; // TODO 嵌套列表支持 render 自定义元素? export function Bullets(_ref) { var spec = _ref.spec, _ref$size = _ref.size, size = _ref$size === void 0 ? 'normal' : _ref$size, _ref$theme = _ref.theme, theme = _ref$theme === void 0 ? 'dark' : _ref$theme, palette = _ref.palette, _ref$pluginManager = _ref.pluginManager, pluginManager = _ref$pluginManager === void 0 ? presetPluginManager : _ref$pluginManager, _ref$showCollapse = _ref.showCollapse, showCollapse = _ref$showCollapse === void 0 ? false : _ref$showCollapse, events = _objectWithoutProperties(_ref, _excluded); var themeStyles = { theme: theme, size: size, palette: palette }; var _ref2 = events || {}, onClickParagraph = _ref2.onClickParagraph, onMouseEnterParagraph = _ref2.onMouseEnterParagraph, onMouseLeaveParagraph = _ref2.onMouseLeaveParagraph, phraseEvents = _objectWithoutProperties(_ref2, _excluded2); var collapseProps = getCollapseProps(showCollapse); if (!spec.bullets) return null; // 配置折叠属性 && 有孙子节点的才可折叠,只有儿子的不用显示折叠属性 var collapsible = !!collapseProps && spec.bullets.some(function (bullet) { return bullet.subBullet; }); // 儿子节点均含有 key 的时候表示可以受控 var collapseControlled = !!collapseProps && spec.bullets.every(function (bullet) { return bullet.key; }); var _useState = useState(collapseControlled && collapseProps && (collapseProps === null || collapseProps === void 0 ? void 0 : collapseProps.collapsedKeys) || []), _useState2 = _slicedToArray(_useState, 2), collapsedKeys = _useState2[0], setCollapsedKeys = _useState2[1]; var children = spec.bullets.map(function (bullet, index) { var collapseKey = bullet.key || "".concat(index); var collapsed = collapsedKeys.includes(collapseKey); var onClickLi = function onClickLi() { onClickParagraph === null || onClickParagraph === void 0 || onClickParagraph(bullet); }; var onMouseEnterLi = function onMouseEnterLi() { onMouseEnterParagraph === null || onMouseEnterParagraph === void 0 || onMouseEnterParagraph(bullet); }; var onMouseLeaveLi = function onMouseLeaveLi() { onMouseLeaveParagraph === null || onMouseLeaveParagraph === void 0 || onMouseLeaveParagraph(bullet); }; var toggleCollapse = function toggleCollapse() { var newCollapsedKeys = _toConsumableArray(collapsedKeys); if (collapsed) { newCollapsedKeys = newCollapsedKeys.filter(function (i) { return i !== collapseKey; }); } else { newCollapsedKeys.push(collapseKey); } // 只有当用户指定 key 的时候折叠受控才生效 if (bullet.key && collapseProps && collapseProps.onCollapsed) { collapseProps.onCollapsed(newCollapsedKeys); } setCollapsedKeys(newCollapsedKeys); }; return /*#__PURE__*/React.createElement(Li, _extends({ key: bullet.key || v4(), className: cx("".concat(NTV_PREFIX_CLS, "-li"), bullet.className), style: bullet.styles }, themeStyles, { collapsible: collapsible, showBulletsLine: collapseProps && collapseProps.showBulletsLine, onClick: onClickLi, onMouseEnter: onMouseEnterLi, onMouseLeave: onMouseLeaveLi }), (bullet === null || bullet === void 0 ? void 0 : bullet.subBullet) && collapseProps && /*#__PURE__*/React.createElement("span", { className: cx("".concat(NTV_PREFIX_CLS, "-switcher-icon")), onClick: toggleCollapse }, collapseProps.switcherIcon(collapsed)), /*#__PURE__*/React.createElement(StyledP, themeStyles, /*#__PURE__*/React.createElement(Phrases, _extends({ spec: bullet.phrases, pluginManager: pluginManager }, themeStyles, phraseEvents))), !collapsed && bullet !== null && bullet !== void 0 && bullet.subBullet ? /*#__PURE__*/React.createElement(Bullets, _extends({ spec: bullet === null || bullet === void 0 ? void 0 : bullet.subBullet, pluginManager: pluginManager, showCollapse: showCollapse }, themeStyles, events)) : null); }); var tag = spec.isOrder ? 'ol' : 'ul'; var Comp = spec.isOrder ? Ol : Ul; var onClick = function onClick() { onClickParagraph === null || onClickParagraph === void 0 || onClickParagraph(spec); }; var onMouseEnter = function onMouseEnter() { onMouseEnterParagraph === null || onMouseEnterParagraph === void 0 || onMouseEnterParagraph(spec); }; var onMouseLeave = function onMouseLeave() { onMouseLeaveParagraph === null || onMouseLeaveParagraph === void 0 || onMouseLeaveParagraph(spec); }; return /*#__PURE__*/React.createElement(Comp, _extends({ as: tag }, themeStyles, { onClick: onClick, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, className: cx("".concat(NTV_PREFIX_CLS, "-").concat(tag), spec.className), style: spec.styles }), children); }