mirror of
https://github.com/umami-software/umami.git
synced 2026-02-19 20:15:41 +01:00
i18n datetime format
This commit is contained in:
parent
97795b5367
commit
739f8b40a0
5 changed files with 24 additions and 7 deletions
|
|
@ -4,8 +4,10 @@ import Empty from 'components/common/Empty';
|
|||
import Avatar from 'components/common/Avatar';
|
||||
import Link from 'next/link';
|
||||
import Icons from 'components/icons';
|
||||
import { useIntl } from 'react-intl';
|
||||
|
||||
export function EventsTable({ data = [] }) {
|
||||
const intl = useIntl();
|
||||
const { formatTimezoneDate } = useTimezone();
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { renderTeamUrl } = useTeamUrl();
|
||||
|
|
@ -35,7 +37,7 @@ export function EventsTable({ data = [] }) {
|
|||
}}
|
||||
</GridColumn>
|
||||
<GridColumn name="created" label={formatMessage(labels.created)} width={'300px'}>
|
||||
{row => formatTimezoneDate(row.createdAt, 'PPPpp')}
|
||||
{row => formatTimezoneDate(intl, row.createdAt, { dateStyle: 'long', timeStyle: 'medium' })}
|
||||
</GridColumn>
|
||||
</GridTable>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import { Icon, SearchField, StatusLight, Text } from 'react-basics';
|
|||
import { FixedSizeList } from 'react-window';
|
||||
import { WebsiteContext } from '../WebsiteProvider';
|
||||
import styles from './RealtimeLog.module.css';
|
||||
import { useIntl } from 'react-intl';
|
||||
|
||||
const TYPE_ALL = 'all';
|
||||
const TYPE_PAGEVIEW = 'pageview';
|
||||
|
|
@ -25,6 +26,7 @@ const icons = {
|
|||
};
|
||||
|
||||
export function RealtimeLog({ data }: { data: RealtimeData }) {
|
||||
const intl = useIntl();
|
||||
const website = useContext(WebsiteContext);
|
||||
const [search, setSearch] = useState('');
|
||||
const { formatMessage, labels, messages, FormattedMessage } = useMessages();
|
||||
|
|
@ -53,7 +55,8 @@ export function RealtimeLog({ data }: { data: RealtimeData }) {
|
|||
},
|
||||
];
|
||||
|
||||
const getTime = ({ createdAt, firstAt }) => formatTimezoneDate(firstAt || createdAt, 'h:mm:ss');
|
||||
const getTime = ({ createdAt, firstAt }) =>
|
||||
formatTimezoneDate(intl, firstAt || createdAt, { timeStyle: 'medium' });
|
||||
|
||||
const getColor = ({ id, sessionId }) => stringToColor(sessionId || id);
|
||||
|
||||
|
|
|
|||
|
|
@ -4,8 +4,10 @@ import { useFormat, useMessages, useTimezone } from 'components/hooks';
|
|||
import Avatar from 'components/common/Avatar';
|
||||
import styles from './SessionsTable.module.css';
|
||||
import TypeIcon from 'components/common/TypeIcon';
|
||||
import { useIntl } from 'react-intl';
|
||||
|
||||
export function SessionsTable({ data = [] }: { data: any[]; showDomain?: boolean }) {
|
||||
const intl = useIntl();
|
||||
const { formatTimezoneDate } = useTimezone();
|
||||
const { formatMessage, labels } = useMessages();
|
||||
const { formatValue } = useFormat();
|
||||
|
|
@ -51,7 +53,7 @@ export function SessionsTable({ data = [] }: { data: any[]; showDomain?: boolean
|
|||
)}
|
||||
</GridColumn>
|
||||
<GridColumn name="lastAt" label={formatMessage(labels.lastSeen)}>
|
||||
{row => formatTimezoneDate(row.createdAt, 'PPPpp')}
|
||||
{row => formatTimezoneDate(intl, row.createdAt, { dateStyle: 'long', timeStyle: 'medium' })}
|
||||
</GridColumn>
|
||||
</GridTable>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { Loading, Icon, StatusLight } from 'react-basics';
|
|||
import Icons from 'components/icons';
|
||||
import { useSessionActivity, useTimezone } from 'components/hooks';
|
||||
import styles from './SessionActivity.module.css';
|
||||
import { useIntl } from 'react-intl';
|
||||
|
||||
export function SessionActivity({
|
||||
websiteId,
|
||||
|
|
@ -15,6 +16,7 @@ export function SessionActivity({
|
|||
startDate: Date;
|
||||
endDate: Date;
|
||||
}) {
|
||||
const intl = useIntl();
|
||||
const { formatTimezoneDate } = useTimezone();
|
||||
const { data, isLoading } = useSessionActivity(websiteId, sessionId, startDate, endDate);
|
||||
|
||||
|
|
@ -33,12 +35,14 @@ export function SessionActivity({
|
|||
return (
|
||||
<>
|
||||
{showHeader && (
|
||||
<div className={styles.header}>{formatTimezoneDate(createdAt, 'EEEE, PPP')}</div>
|
||||
<div className={styles.header}>
|
||||
{formatTimezoneDate(intl, createdAt, { dateStyle: 'full' })}
|
||||
</div>
|
||||
)}
|
||||
<div key={eventId} className={styles.row}>
|
||||
<div className={styles.time}>
|
||||
<StatusLight color={`#${visitId?.substring(0, 6)}`}>
|
||||
{formatTimezoneDate(createdAt, 'h:mm:ss aaa')}
|
||||
{formatTimezoneDate(intl, createdAt, { timeStyle: 'medium' })}
|
||||
</StatusLight>
|
||||
</div>
|
||||
<Icon>{eventName ? <Icons.Bolt /> : <Icons.Eye />}</Icon>
|
||||
|
|
|
|||
|
|
@ -3,8 +3,10 @@ import TypeIcon from 'components/common/TypeIcon';
|
|||
import { Icon, CopyIcon } from 'react-basics';
|
||||
import Icons from 'components/icons';
|
||||
import styles from './SessionInfo.module.css';
|
||||
import { useIntl } from 'react-intl';
|
||||
|
||||
export default function SessionInfo({ data }) {
|
||||
const intl = useIntl();
|
||||
const { locale } = useLocale();
|
||||
const { formatTimezoneDate } = useTimezone();
|
||||
const { formatMessage, labels } = useMessages();
|
||||
|
|
@ -20,10 +22,14 @@ export default function SessionInfo({ data }) {
|
|||
</dd>
|
||||
|
||||
<dt>{formatMessage(labels.lastSeen)}</dt>
|
||||
<dd>{formatTimezoneDate(data?.lastAt, 'EEEE, PPPpp')}</dd>
|
||||
<dd>
|
||||
{formatTimezoneDate(intl, data?.lastAt, { dateStyle: 'full', timeStyle: 'medium' })}
|
||||
</dd>
|
||||
|
||||
<dt>{formatMessage(labels.firstSeen)}</dt>
|
||||
<dd>{formatTimezoneDate(data?.firstAt, 'EEEE, PPPpp')}</dd>
|
||||
<dd>
|
||||
{formatTimezoneDate(intl, data?.firstAt, { dateStyle: 'full', timeStyle: 'medium' })}
|
||||
</dd>
|
||||
|
||||
<dt>{formatMessage(labels.country)}</dt>
|
||||
<dd>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue