UNPKG

5.24 kBSource Map (JSON)View Raw
1{"version":3,"file":"providers.js","sources":["../src/providers/RedrawFromDate/RedrawFromDate.js"],"sourcesContent":["import React from 'react'\nimport PropTypes from 'prop-types'\nimport getDisplayName from 'react-display-name'\nimport dayjs from 'dayjs'\nimport { difference } from '../../utils/date'\n\n// Render prop component for re-rendering based on a given date. Automatically\n// adjusts the re-render timer to be one second, minute, or hour based on the\n// fromDate prop.\n// For a discussion on pitfalls, see\n// https://gist.github.com/staltz/08bf613199092eeb41ac8137d51eb5e6\n\nconst EVERY_SECOND = 1000\nconst EVERY_MINUTE = EVERY_SECOND * 60\nconst EVERY_HOUR = EVERY_MINUTE * 60\n\nconst getRedrawTime = fromDate => {\n const { days, hours, minutes } = difference(new Date(), fromDate)\n return hours || days ? EVERY_HOUR : minutes > 1 ? EVERY_MINUTE : EVERY_SECOND\n}\n\nclass RedrawFromDate extends React.Component {\n static propTypes = {\n children: PropTypes.func.isRequired,\n fromDate: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number,\n PropTypes.instanceOf(Date),\n ]).isRequired,\n }\n state = {\n redrawTime: EVERY_HOUR,\n lastDraw: -1,\n }\n componentDidMount() {\n const { fromDate } = this.props\n if (fromDate) {\n this.restartDrawInterval(getRedrawTime(fromDate))\n }\n }\n componentWillReceiveProps({ fromDate }) {\n if (!fromDate && this.props.fromDate) {\n this.clearInterval()\n } else if (!dayjs(fromDate).isSame(this.props.fromDate)) {\n this.restartDrawInterval(getRedrawTime(this.props.fromDate))\n }\n }\n componentWillUnmount() {\n this.clearInterval()\n }\n clearInterval = () => {\n this.interval && clearInterval(this.interval)\n }\n restartDrawInterval = redrawTime => {\n this.clearInterval()\n\n this.interval = setInterval(() => {\n this.setState({ lastDraw: Date.now() })\n\n const newRedrawTime = getRedrawTime(this.props.fromDate)\n if (newRedrawTime !== redrawTime) {\n this.restartDrawInterval(newRedrawTime)\n }\n }, redrawTime)\n }\n render() {\n return this.props.children()\n }\n}\n\nconst hocWrap = Component => {\n const HOC = props => (\n <RedrawFromDate fromDate={props.fromDate}>\n {() => <Component {...props} />}\n </RedrawFromDate>\n )\n HOC.propTypes = {\n fromDate: RedrawFromDate.propTypes.fromDate,\n }\n HOC.displayName = `RedrawFromDate(${getDisplayName(Component)})`\n return HOC\n}\n\nRedrawFromDate.hocWrap = hocWrap\n\nexport { RedrawFromDate, hocWrap }\nexport default RedrawFromDate\n"],"names":["EVERY_SECOND","EVERY_MINUTE","EVERY_HOUR","getRedrawTime","fromDate","difference","Date","days","hours","minutes","RedrawFromDate","redrawTime","lastDraw","interval","clearInterval","setInterval","setState","now","newRedrawTime","props","restartDrawInterval","dayjs","isSame","children","React","Component","PropTypes","func","isRequired","oneOfType","string","number","instanceOf","hocWrap","HOC","propTypes","displayName","getDisplayName"],"mappings":"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"}
\No newline at end of file