82 lines
2.4 KiB
JavaScript
82 lines
2.4 KiB
JavaScript
|
import { getLocalizedDateFormatter, getLocalizedDurationFormatter }
|
||
|
from '../base/i18n/index';
|
||
|
import { parseURIString } from '../base/util/index';
|
||
|
|
||
|
/**
|
||
|
* Creates a displayable list item of a recent list entry.
|
||
|
*
|
||
|
* @private
|
||
|
* @param {Object} item - The recent list entry.
|
||
|
* @param {string} defaultServerURL - The default server URL.
|
||
|
* @param {Function} t - The translate function.
|
||
|
* @returns {Object}
|
||
|
*/
|
||
|
export function toDisplayableItem(item, defaultServerURL, t) {
|
||
|
// const { _defaultServerURL } = this.props;
|
||
|
const location = parseURIString(item.conference);
|
||
|
const baseURL = `${location.protocol}//${location.host}`;
|
||
|
const serverName = baseURL === defaultServerURL ? null : location.host;
|
||
|
|
||
|
return {
|
||
|
colorBase: serverName,
|
||
|
key: `key-${item.conference}-${item.date}`,
|
||
|
lines: [
|
||
|
_toDateString(item.date, t),
|
||
|
_toDurationString(item.duration),
|
||
|
serverName
|
||
|
],
|
||
|
title: location.room,
|
||
|
url: item.conference
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generates a duration string for the item.
|
||
|
*
|
||
|
* @private
|
||
|
* @param {number} duration - The item's duration.
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
export function _toDurationString(duration) {
|
||
|
if (duration) {
|
||
|
return getLocalizedDurationFormatter(duration);
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generates a date string for the item.
|
||
|
*
|
||
|
* @private
|
||
|
* @param {number} itemDate - The item's timestamp.
|
||
|
* @param {Function} t - The translate function.
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
export function _toDateString(itemDate, t) {
|
||
|
const date = new Date(itemDate);
|
||
|
const dateString = date.toDateString();
|
||
|
const m = getLocalizedDateFormatter(itemDate);
|
||
|
const yesterday = new Date();
|
||
|
|
||
|
yesterday.setDate(yesterday.getDate() - 1);
|
||
|
const yesterdayString = yesterday.toDateString();
|
||
|
const today = new Date();
|
||
|
const todayString = today.toDateString();
|
||
|
const currentYear = today.getFullYear();
|
||
|
const year = date.getFullYear();
|
||
|
|
||
|
if (dateString === todayString) {
|
||
|
// The date is today, we use fromNow format.
|
||
|
return m.fromNow();
|
||
|
} else if (dateString === yesterdayString) {
|
||
|
return t('dateUtils.yesterday');
|
||
|
} else if (year !== currentYear) {
|
||
|
// we only want to include the year in the date if its not the current
|
||
|
// year
|
||
|
return m.format('ddd, MMMM DD h:mm A, gggg');
|
||
|
}
|
||
|
|
||
|
return m.format('ddd, MMMM DD h:mm A');
|
||
|
}
|