Skip to content

Commit fbf9b86

Browse files
committed
Use consistent distanceInWordsToNow across app
1 parent ace0afd commit fbf9b86

File tree

5 files changed

+48
-28
lines changed

5 files changed

+48
-28
lines changed

client/modules/IDE/components/Timer.jsx

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import classNames from 'classnames';
2-
import differenceInMilliseconds from 'date-fns/difference_in_milliseconds';
3-
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
42
import PropTypes from 'prop-types';
53
import React from 'react';
64
import { withTranslation } from 'react-i18next';
75

6+
import dates from '../../../utils/formatDate';
7+
88
class Timer extends React.Component {
99
constructor(props) {
1010
super(props);
@@ -22,20 +22,7 @@ class Timer extends React.Component {
2222
}
2323

2424
showSavedTime() {
25-
const now = new Date();
26-
if (Math.abs(differenceInMilliseconds(now, this.props.projectSavedTime) < 10000)) {
27-
return this.props.t('Timer.SavedJustNow');
28-
} else if (differenceInMilliseconds(now, this.props.projectSavedTime) < 20000) {
29-
return this.props.t('Timer.Saved15Seconds');
30-
} else if (differenceInMilliseconds(now, this.props.projectSavedTime) < 30000) {
31-
return this.props.t('Timer.Saved25Seconds');
32-
} else if (differenceInMilliseconds(now, this.props.projectSavedTime) < 46000) {
33-
return this.props.t('Timer.Saved35Seconds');
34-
}
35-
36-
const timeAgo = distanceInWordsToNow(this.props.projectSavedTime, {
37-
includeSeconds: true
38-
});
25+
const timeAgo = dates.distanceInWordsToNow(this.props.projectSavedTime);
3926
return this.props.t('Timer.SavedAgo', { timeAgo });
4027
}
4128

client/modules/User/components/APIKeyList.jsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import PropTypes from 'prop-types';
22
import React from 'react';
3-
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
43
import orderBy from 'lodash/orderBy';
54

65
import { APIKeyPropType } from './APIKeyForm';
@@ -22,7 +21,7 @@ function APIKeyList({ apiKeys, onRemove, t }) {
2221
<tbody>
2322
{orderBy(apiKeys, ['createdAt'], ['desc']).map((key) => {
2423
const lastUsed = key.lastUsedAt ?
25-
distanceInWordsToNow(new Date(key.lastUsedAt), { addSuffix: true }) :
24+
dates.distanceInWordsToNow(new Date(key.lastUsedAt)) :
2625
t('APIKeyList.Never');
2726

2827
return (

client/utils/formatDate.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
2+
import differenceInMilliseconds from 'date-fns/difference_in_milliseconds';
13
import format from 'date-fns/format';
24
import isValid from 'date-fns/is_valid';
35
import parseISO from 'date-fns/parse';
6+
import i18next from 'i18next';
47

58
function parse(maybeDate) {
69
const date = maybeDate instanceof Date ? maybeDate : parseISO(maybeDate);
@@ -13,6 +16,31 @@ function parse(maybeDate) {
1316
}
1417

1518
export default {
19+
distanceInWordsToNow(date) {
20+
const parsed = parse(date);
21+
22+
if (parsed) {
23+
const now = new Date();
24+
const diffInMs = differenceInMilliseconds(now, parsed);
25+
26+
if (Math.abs(diffInMs < 10000)) {
27+
return i18next.t('formatDate.JustNow');
28+
} else if (diffInMs < 20000) {
29+
return i18next.t('formatDate.15Seconds');
30+
} else if (diffInMs < 30000) {
31+
return i18next.t('formatDate.25Seconds');
32+
} else if (diffInMs < 46000) {
33+
return i18next.t('formatDate.35Seconds');
34+
}
35+
36+
const timeAgo = distanceInWordsToNow(parsed, {
37+
includeSeconds: true
38+
});
39+
return i18next.t('formatDate.Ago', { timeAgo });
40+
}
41+
42+
return '';
43+
},
1644
format(date, { showTime = true } = {}) {
1745
const parsed = parse(date);
1846
const formatType = showTime ? 'MMM D, YYYY h:mm A' : 'MMM D, YYYY';

translations/locales/en-US/translations.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,14 @@
510510
"CurrentLine": " Current line"
511511
},
512512
"Timer": {
513-
"SavedJustNow": "Saved: just now",
514-
"Saved15Seconds": "Saved: 15 seconds ago",
515-
"Saved25Seconds": "Saved: 25 seconds ago",
516-
"Saved35Seconds": "Saved: 35 seconds ago",
517-
"SavedAgo": "Saved: {{timeAgo}} ago"
513+
"SavedAgo": "Saved: {{timeAgo}}"
514+
},
515+
"formatDate": {
516+
"JustNow": "just now",
517+
"15Seconds": "15 seconds ago",
518+
"25Seconds": "25 seconds ago",
519+
"35Seconds": "35 seconds ago",
520+
"Ago": "{{timeAgo}} ago"
518521
},
519522
"AddRemoveButton": {
520523
"AltAddARIA": "Add to collection",

translations/locales/es-419/translations.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,14 @@
510510
"CurrentLine": " Línea actual"
511511
},
512512
"Timer": {
513-
"SavedJustNow": "Guardado: justo ahora",
514-
"Saved15Seconds": "Guardado: hace 15 segundos",
515-
"Saved25Seconds": "Guardado: hace 25 segundos",
516-
"Saved35Seconds": "Guardado: hace 35 segundos",
517-
"SavedAgo": "Guardado: hace {{timeAgo}}"
513+
"SavedAgo": "Guardado: {{timeAgo}}"
514+
},
515+
"formatDate": {
516+
"JustNow": "justo ahora",
517+
"15Seconds": "hace 15 segundos",
518+
"25Seconds": "hace 25 segundos",
519+
"35Seconds": "hace 35 segundos",
520+
"Ago": "hace {{timeAgo}}"
518521
},
519522
"AddRemoveButton": {
520523
"AltAddARIA": "Agregar a colección",

0 commit comments

Comments
 (0)