UNPKG

@douyinfe/semi-ui

Version:

A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.

171 lines (169 loc) 5.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _propTypes = _interopRequireDefault(require("prop-types")); var _foundation = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/calendar/foundation")); var _constants = require("@douyinfe/semi-foundation/lib/cjs/calendar/constants"); var _baseComponent = _interopRequireDefault(require("../_base/baseComponent")); var _context = _interopRequireDefault(require("../locale/context")); require("@douyinfe/semi-foundation/lib/cjs/calendar/calendar.css"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */ const prefixCls = `${_constants.cssClasses.PREFIX}-grid`; function pad(d) { return d < 10 ? `0${d.toString()}` : d.toString(); } class DayCol extends _baseComponent.default { constructor(props) { super(props); this.renderEvents = () => { const { events, scrollHeight, minEventHeight } = this.props; const list = events.map((event, ind) => { const { startPos, endPos, children, key, left = 0 } = event; const top = startPos * scrollHeight; const height = (endPos - startPos) * scrollHeight; const style = { top: `${top}px`, height: `${Math.max(minEventHeight, height)}px`, left: left }; return /*#__PURE__*/_react.default.createElement("li", { className: `${_constants.cssClasses.PREFIX}-event-item ${_constants.cssClasses.PREFIX}-event-day`, style: style, key: key || `${top}-${ind}` }, children); }); return list; }; this.renderCurrTime = () => { const { currPos } = this.state; const { scrollHeight } = this.props; const key = currPos; const top = currPos * scrollHeight; const style = { top }; const circle = /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-curr-circle`, style: style }); const line = /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}-curr-line`, style: style }); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, { key: key }, circle, line); }; this.handleClick = (e, val) => { this.props.handleClick(e, val); }; this.renderGrid = () => { const showCurrTime = this.props.showCurrTime ? this.state.showCurrTime : false; const { displayValue, isWeekend, dateGridRender } = this.props; const skCls = (0, _classnames.default)(`${prefixCls}-skeleton`, { [`${_constants.cssClasses.PREFIX}-weekend`]: isWeekend }); return /*#__PURE__*/_react.default.createElement("div", { className: `${prefixCls}`, role: "presentation" }, /*#__PURE__*/_react.default.createElement("div", { role: "gridcell", className: `${prefixCls}-content` }, showCurrTime ? this.renderCurrTime() : null, /*#__PURE__*/_react.default.createElement("ul", { role: "row", className: skCls }, [...Array(25).keys()].map(item => { const line = (0, _classnames.default)({ [`${prefixCls}-skeleton-row-line`]: true }); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, { key: `${item}-daycol` }, /*#__PURE__*/_react.default.createElement("li", { "data-time": `${pad(item)}:00:00`, className: line, onClick: e => this.handleClick(e, [displayValue, item, 0, 0]) }), /*#__PURE__*/_react.default.createElement("li", { "data-time": `${pad(item)}:30:00`, onClick: e => this.handleClick(e, [displayValue, item, 30, 0]) })); })), dateGridRender && dateGridRender(displayValue.toString(), displayValue), /*#__PURE__*/_react.default.createElement("ul", { className: `${_constants.cssClasses.PREFIX}-event-items` }, this.renderEvents()))); }; this.state = { currPos: 0, showCurrTime: false }; this.foundation = new _foundation.default(this.adapter); } componentDidMount() { this.foundation.init(); this.foundation.initCurrTime(); } componentWillUnmount() { this.foundation.destroy(); } get adapter() { return Object.assign(Object.assign({}, super.adapter), { updateCurrPos: currPos => { this.setState({ currPos }); }, updateShowCurrTime: () => { this.setState({ showCurrTime: true }); } }); } render() { const grid = this.renderGrid(); return grid; } } exports.default = DayCol; DayCol.propTypes = { events: _propTypes.default.array, displayValue: _propTypes.default.instanceOf(Date), showCurrTime: _propTypes.default.bool, scrollHeight: _propTypes.default.number, currPos: _propTypes.default.number, handleClick: _propTypes.default.func, mode: _propTypes.default.string, minEventHeight: _propTypes.default.number, isWeekend: _propTypes.default.bool, dateGridRender: _propTypes.default.func }; DayCol.defaultProps = { events: [], showCurrTime: true, scrollHeight: 0, currPos: 0, mode: 'dayCol', minEventHeight: Number.MIN_SAFE_INTEGER }; DayCol.contextType = _context.default;