UNPKG

@yuntijs/ui

Version:

☁️ Yunti UI - an open-source UI component library for building Cloud Native web apps

77 lines (75 loc) 3.61 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; var _excluded = ["time", "format", "relativeTime", "tooltip"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import { Typography as AntdTypography, Tooltip } from 'antd'; import dayjs from 'dayjs'; import dayjsRelativeTime from 'dayjs/plugin/relativeTime'; import { set } from 'lodash-es'; import React, { useCallback, useEffect, useState } from 'react'; import { jsx as _jsx } from "react/jsx-runtime"; dayjs.extend(dayjsRelativeTime); export var Typography = AntdTypography; var getFromNow = function getFromNow(t) { return dayjs(t ? new Date(t) : new Date()).fromNow(); }; var Time = function Time(props) { var _tooltip$title; var time = props.time, format = props.format, _props$relativeTime = props.relativeTime, relativeTime = _props$relativeTime === void 0 ? true : _props$relativeTime, tooltip = props.tooltip, textProps = _objectWithoutProperties(props, _excluded); var _useState = useState(getFromNow(time)), _useState2 = _slicedToArray(_useState, 2), showTime = _useState2[0], setShowTime = _useState2[1]; // The relative time within the last hour is updated automatically var setTimeInterval = useCallback(function (currentTime) { var now = dayjs(); var timeMoment = dayjs(currentTime); var diff = now.diff(timeMoment); if (diff > 0 && diff < 60 * 60 * 1000) { return setInterval(function () { setShowTime(getFromNow(currentTime)); }, 60 * 1000); } }, []); useEffect(function () { var timeout; if (relativeTime) { timeout = setTimeInterval(new Date(time)); } return function () { if (timeout) { clearInterval(timeout); } }; }, [relativeTime, setTimeInterval, time]); useEffect(function () { if (!relativeTime) return; var nextFromNow = getFromNow(time); if (nextFromNow !== showTime) { setShowTime(nextFromNow); setTimeInterval(new Date(time)); } }, [time, relativeTime, showTime, setTimeInterval]); var fmtTime = dayjs(time).format(format || 'YYYY-MM-DD HH:mm:ss'); var currentTime = relativeTime ? showTime : fmtTime; var tooltipTitle = (_tooltip$title = tooltip === null || tooltip === void 0 ? void 0 : tooltip.title) !== null && _tooltip$title !== void 0 ? _tooltip$title : relativeTime ? fmtTime : undefined; // Avoid duplicate tooltips if (tooltipTitle) { set(textProps, 'ellipsis.tooltip.title', undefined); } return /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({}, tooltip || {}), {}, { title: tooltipTitle, children: /*#__PURE__*/_jsx(Typography.Text, _objectSpread(_objectSpread({}, textProps), {}, { children: currentTime })) })); }; Typography.Time = Time; export default Typography;