make wantsDateSeparator generic and throw into DateUtils

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski 2018-01-10 12:06:24 +00:00
parent e45fcf10c7
commit 1a7dc22a8d
No known key found for this signature in database
GPG key ID: 3F879DA5AD802A5E
3 changed files with 21 additions and 31 deletions

View file

@ -100,3 +100,17 @@ export function formatTime(date, showTwelveHour=false) {
} }
return pad(date.getHours()) + ':' + pad(date.getMinutes()); return pad(date.getHours()) + ':' + pad(date.getMinutes());
} }
const MILLIS_IN_DAY = 86400000;
export function wantsDateSeparator(prevEventDate, nextEventDate) {
if (!nextEventDate || !prevEventDate) {
return false;
}
// Return early for events that are > 24h apart
if (Math.abs(prevEventDate.getTime() - nextEventDate.getTime()) > MILLIS_IN_DAY) {
return true;
}
// Compare weekdays
return prevEventDate.getDay() !== nextEventDate.getDay();
}

View file

@ -19,13 +19,12 @@ import ReactDOM from 'react-dom';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import classNames from 'classnames'; import classNames from 'classnames';
import shouldHideEvent from '../../shouldHideEvent'; import shouldHideEvent from '../../shouldHideEvent';
import {wantsDateSeparator} from '../../DateUtils';
import dis from "../../dispatcher"; import dis from "../../dispatcher";
import sdk from '../../index'; import sdk from '../../index';
import MatrixClientPeg from '../../MatrixClientPeg'; import MatrixClientPeg from '../../MatrixClientPeg';
const MILLIS_IN_DAY = 86400000;
/* (almost) stateless UI component which builds the event tiles in the room timeline. /* (almost) stateless UI component which builds the event tiles in the room timeline.
*/ */
module.exports = React.createClass({ module.exports = React.createClass({
@ -523,17 +522,7 @@ module.exports = React.createClass({
// here. // here.
return !this.props.suppressFirstDateSeparator; return !this.props.suppressFirstDateSeparator;
} }
const prevEventDate = prevEvent.getDate(); return wantsDateSeparator(prevEvent.getDate(), nextEventDate);
if (!nextEventDate || !prevEventDate) {
return false;
}
// Return early for events that are > 24h apart
if (Math.abs(prevEvent.getTs() - nextEventDate.getTime()) > MILLIS_IN_DAY) {
return true;
}
// Compare weekdays
return prevEventDate.getDay() !== nextEventDate.getDay();
}, },
// get a list of read receipts that should be shown next to this event // get a list of read receipts that should be shown next to this event

View file

@ -18,28 +18,13 @@ import sdk from '../../../index';
import {_t} from '../../../languageHandler'; import {_t} from '../../../languageHandler';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import MatrixClientPeg from '../../../MatrixClientPeg'; import MatrixClientPeg from '../../../MatrixClientPeg';
import {wantsDateSeparator} from '../../../DateUtils';
import {MatrixEvent} from 'matrix-js-sdk'; import {MatrixEvent} from 'matrix-js-sdk';
// For URLs of matrix.to links in the timeline which have been reformatted by // For URLs of matrix.to links in the timeline which have been reformatted by
// HttpUtils transformTags to relative links. This excludes event URLs (with `[^\/]*`) // HttpUtils transformTags to relative links. This excludes event URLs (with `[^\/]*`)
const REGEX_LOCAL_MATRIXTO = /^#\/room\/(([\#\!])[^\/]*)\/(\$[^\/]*)$/; const REGEX_LOCAL_MATRIXTO = /^#\/room\/(([\#\!])[^\/]*)\/(\$[^\/]*)$/;
const MILLIS_IN_DAY = 86400000;
function wantsDateSeparator(parentEvent, event) {
const parentEventDate = parentEvent.getDate();
const eventDate = event.getDate();
if (!eventDate || !parentEventDate) {
return false;
}
// Return early for events that are > 24h apart
if (Math.abs(parentEvent.getTs() - eventDate.getTime()) > MILLIS_IN_DAY) {
return true;
}
// Compare weekdays
return parentEventDate.getDay() !== eventDate.getDay();
}
export default class Quote extends React.Component { export default class Quote extends React.Component {
static isMessageUrl(url) { static isMessageUrl(url) {
return !!REGEX_LOCAL_MATRIXTO.exec(url); return !!REGEX_LOCAL_MATRIXTO.exec(url);
@ -129,9 +114,11 @@ export default class Quote extends React.Component {
if (this.state.show) { if (this.state.show) {
const EventTile = sdk.getComponent('views.rooms.EventTile'); const EventTile = sdk.getComponent('views.rooms.EventTile');
let dateSep = null; let dateSep = null;
if (wantsDateSeparator(this.props.parentEv, this.state.event)) {
const evDate = ev.getDate();
if (wantsDateSeparator(this.props.parentEv.getDate(), evDate)) {
const DateSeparator = sdk.getComponent('messages.DateSeparator'); const DateSeparator = sdk.getComponent('messages.DateSeparator');
dateSep = <a href={this.props.url}><DateSeparator ts={this.state.event.getDate()} /></a>; dateSep = <a href={this.props.url}><DateSeparator ts={evDate} /></a>;
} }
return <blockquote className="mx_Quote"> return <blockquote className="mx_Quote">