The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/client/admin/info/InformationRoute.js

83 lines
2.0 KiB

import React, { useState, useEffect } from 'react';
import { usePermission } from '../../contexts/AuthorizationContext';
import { useMethod, useServerInformation, useEndpoint } from '../../contexts/ServerContext';
import { downloadJsonAsAFile } from '../../helpers/download';
import { InformationPage } from './InformationPage';
export const InformationRoute = React.memo(function InformationRoute() {
const canViewStatistics = usePermission('view-statistics');
const [isLoading, setLoading] = useState(true);
const [statistics, setStatistics] = useState({});
const [instances, setInstances] = useState([]);
const [fetchStatistics, setFetchStatistics] = useState(() => () => ({}));
const getStatistics = useEndpoint('GET', 'statistics');
const getInstances = useMethod('instances/get');
useEffect(() => {
let didCancel = false;
const fetchStatistics = async ({ refresh = false } = {}) => {
if (!canViewStatistics) {
setStatistics(null);
setInstances(null);
return;
}
setLoading(true);
try {
const [statistics, instances] = await Promise.all([
getStatistics({ refresh }),
getInstances(),
]);
if (didCancel) {
return;
}
setStatistics(statistics);
setInstances(instances);
} finally {
setLoading(false);
}
};
setFetchStatistics(() => fetchStatistics);
fetchStatistics();
return () => {
didCancel = true;
};
}, [canViewStatistics, getInstances, getStatistics]);
const info = useServerInformation();
const handleClickRefreshButton = () => {
if (isLoading) {
return;
}
fetchStatistics({ refresh: true });
};
const handleClickDownloadInfo = () => {
if (isLoading) {
return;
}
downloadJsonAsAFile(statistics, 'statistics');
};
return <InformationPage
canViewStatistics={canViewStatistics}
isLoading={isLoading}
info={info}
statistics={statistics}
instances={instances}
onClickRefreshButton={handleClickRefreshButton}
onClickDownloadInfo={handleClickDownloadInfo}
/>;
});
export default InformationRoute;