mirror of
https://github.com/kremalicious/umami.git
synced 2025-02-14 21:10:34 +01:00
Added active user count to realtime page.
This commit is contained in:
parent
ddb549258b
commit
fa0ec301d0
@ -7,15 +7,15 @@ import { TOKEN_HEADER } from 'lib/constants';
|
|||||||
import useShareToken from 'hooks/useShareToken';
|
import useShareToken from 'hooks/useShareToken';
|
||||||
import styles from './ActiveUsers.module.css';
|
import styles from './ActiveUsers.module.css';
|
||||||
|
|
||||||
export default function ActiveUsers({ websiteId, className }) {
|
export default function ActiveUsers({ websiteId, className, value, interval = 60000 }) {
|
||||||
const shareToken = useShareToken();
|
const shareToken = useShareToken();
|
||||||
const { data } = useFetch(`/api/website/${websiteId}/active`, {
|
const { data } = useFetch(!value && `/api/website/${websiteId}/active`, {
|
||||||
interval: 60000,
|
interval,
|
||||||
headers: { [TOKEN_HEADER]: shareToken?.token },
|
headers: { [TOKEN_HEADER]: shareToken?.token },
|
||||||
});
|
});
|
||||||
const count = useMemo(() => {
|
const count = useMemo(() => {
|
||||||
return data?.[0]?.x || 0;
|
return value || data?.[0]?.x || 0;
|
||||||
}, [data]);
|
}, [data, value]);
|
||||||
|
|
||||||
if (count === 0) {
|
if (count === 0) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import { FormattedMessage } from 'react-intl';
|
import { FormattedMessage } from 'react-intl';
|
||||||
|
import { differenceInMinutes } from 'date-fns';
|
||||||
import PageHeader from '../layout/PageHeader';
|
import PageHeader from '../layout/PageHeader';
|
||||||
import DropDown from '../common/DropDown';
|
import DropDown from '../common/DropDown';
|
||||||
import ActiveUsers from './ActiveUsers';
|
import ActiveUsers from './ActiveUsers';
|
||||||
@ -19,6 +20,12 @@ export default function RealtimeHeader({ websites, data, websiteId, onSelect })
|
|||||||
|
|
||||||
const { pageviews, sessions, events, countries } = data;
|
const { pageviews, sessions, events, countries } = data;
|
||||||
|
|
||||||
|
const count = useMemo(() => {
|
||||||
|
return sessions.filter(
|
||||||
|
({ created_at }) => differenceInMinutes(new Date(), new Date(created_at)) < 5,
|
||||||
|
).length;
|
||||||
|
}, [sessions]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<PageHeader>
|
<PageHeader>
|
||||||
@ -26,7 +33,7 @@ export default function RealtimeHeader({ websites, data, websiteId, onSelect })
|
|||||||
<FormattedMessage id="label.realtime" defaultMessage="Realtime" />
|
<FormattedMessage id="label.realtime" defaultMessage="Realtime" />
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<ActiveUsers className={styles.active} websiteId={websiteId} />
|
<ActiveUsers className={styles.active} value={count} />
|
||||||
</div>
|
</div>
|
||||||
<DropDown value={websiteId} options={options} onChange={onSelect} />
|
<DropDown value={websiteId} options={options} onChange={onSelect} />
|
||||||
</PageHeader>
|
</PageHeader>
|
||||||
|
@ -2,3 +2,9 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 576px) {
|
||||||
|
.active {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user