UNPKG

gui-one-nutui-react-taro

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

140 lines (139 loc) 6.32 kB
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; var _excluded = ["children", "className", "style", "columns", "data", "bordered", "summary", "striped", "noData", "onSorter", "iconClassPrefix", "iconFontClassName"]; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); 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 = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } import React__default, { useState, useEffect } from 'react'; import classNames from 'classnames'; import { c as cn } from './bem-893ad28d.js'; import { I as Icon } from './icon.taro-1d0d4fb7.js'; import { u as useConfig } from './configprovider.taro-6c7b3056.js'; import { C as ComponentDefaults } from './typings-1c5f2628.js'; var defaultProps = _objectSpread(_objectSpread({}, ComponentDefaults), {}, { className: '', style: {}, columns: [], data: [], bordered: true, striped: false, noData: '无数据' }); var Table = function Table(props) { var _useConfig = useConfig(), locale = _useConfig.locale; defaultProps.noData = locale.noData; var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props), children = _defaultProps$props.children, className = _defaultProps$props.className, style = _defaultProps$props.style, columns = _defaultProps$props.columns, data = _defaultProps$props.data, bordered = _defaultProps$props.bordered, summary = _defaultProps$props.summary, striped = _defaultProps$props.striped, noData = _defaultProps$props.noData, onSorter = _defaultProps$props.onSorter, iconClassPrefix = _defaultProps$props.iconClassPrefix, iconFontClassName = _defaultProps$props.iconFontClassName, rest = _objectWithoutProperties(_defaultProps$props, _excluded); var _useState = useState(data), _useState2 = _slicedToArray(_useState, 2), curData = _useState2[0], setCurData = _useState2[1]; useEffect(function () { if (data && String(data) !== String(curData)) { setCurData(data); } }, [data]); var b = cn('table'); var classes = classNames({}); var cls = classNames(b(), classes, className); var handleSorterClick = function handleSorterClick(item) { if (item.sorter) { onSorter && onSorter(item, curData); if (typeof item.sorter === 'function') { setCurData(curData.sort(item.sorter)); } else { setCurData(item.sorter === 'default' ? curData.sort() : curData); } } }; var cellClasses = function cellClasses(item) { return _defineProperty({ 'nut-table__main__head__tr--border': props.bordered }, "nut-table__main__head__tr--align".concat(item.align ? item.align : ''), true); }; var getColumnItem = function getColumnItem(value) { return columns.filter(function (item) { return item.key === value; })[0]; }; var renderHeadCells = function renderHeadCells() { return columns.map(function (item, index) { return React__default.createElement("span", { className: classNames('nut-table__main__head__tr__th', cellClasses(item)), key: item.key, onClick: function onClick() { return handleSorterClick(item); } }, item.title, item.sorter && React__default.createElement(Icon, { classPrefix: iconClassPrefix, fontClassName: iconFontClassName, name: "down-arrow", size: "12px" })); }); }; var sortDataItem = function sortDataItem() { return columns.map(function (columns) { return [columns.key, columns.render]; }); }; var renderBodyTds = function renderBodyTds(item) { return sortDataItem().map(function (_ref2, index) { var _ref3 = _slicedToArray(_ref2, 2), value = _ref3[0], render = _ref3[1]; return React__default.createElement("span", { className: classNames('nut-table__main__body__tr__td', cellClasses(getColumnItem(value))), key: value }, typeof item[value] === 'function' || typeof render === 'function' ? React__default.createElement("div", null, render ? render(item) : item[value](item)) : item[value]); }); }; var renderBoyTrs = function renderBoyTrs() { return curData.map(function (item, index) { return React__default.createElement("div", { className: "nut-table__main__body__tr", key: index }, renderBodyTds(item)); }); }; return React__default.createElement("div", _objectSpread({ className: cls, style: style }, rest), React__default.createElement("div", { className: classNames('nut-table__main', { 'nut-table__main--striped': striped }) }, React__default.createElement("div", { className: "nut-table__main__head" }, React__default.createElement("div", { className: "nut-table__main__head__tr" }, renderHeadCells())), React__default.createElement("div", { className: "nut-table__main__body" }, renderBoyTrs())), summary && React__default.createElement("div", { className: "nut-table__summary" }, React__default.createElement("span", { className: "nut-table__summary__text" }, summary)), curData.length === 0 && React__default.createElement("div", { className: "nut-table__nodata" }, React__default.createElement("div", { className: "nut-table__nodata" }, React__default.createElement("div", { className: "nut-table__nodata__text" }, noData)))); }; Table.defaultProps = defaultProps; Table.displayName = 'NutTable'; export { Table as T };