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/views/admin/info/UsagePieGraph.tsx

101 lines
2.1 KiB

[NEW] Seats Cap (#23017) * Base commit * [NEW] licenses.maxActiveUsers endpoint (#23011) * [IMPROVE] Banner Service (#22989) * WIP * Fix type import Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] canAddNewUser function * [NEW] Seats usage bar (#23018) * usage bar component * Seats limit in admin users page * Remove dangling console.log * Add some details on StatisticsEndpoint type * Move to EE and use new endpoint * Rename some components and hooks * Refactor UsersPage Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> * Fix edit and info page * [NEW] Seats Card (#23077) * Seats Card * Fix review, make ts * Fix review * Add type guard for CardIcon props Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] Seats Cap: Request seats link (#23151) * create endpoint and consume it in the ui * Fix review * Remove unused param type Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] Remove license downgrade if exceeding seats cap (#23220) * [IMPROVE] Ensure Seats-cap design and UI are the same (#23222) * Fix labels and buttons * Reload seats cap data on user changes * Use Fuselage on development version Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] Prevent users from accidentally deactivating an enterprise license by adding more users than the license allows. (#23050) Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] stats on seats request (#23225) Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> * [NEW] Seats cap banners (#23211) * [NEW] Prevent users from accidentally deactivating an enterprise license by adding more users than the license allows. * Seats cap banners * Deprecate preserveDismiss * use request seats link * Fix banner not closing and request seats link Co-authored-by: Pierre Lehnen <pierre.lehnen@rocket.chat> * [FIX] Banner not parsing markdown (#23036) * Parse markdown * Use markdownText * Fix translations * Move startup * Always create seats limit banners * Remove uneffective conditional * [FIX] Seats Cap QA reports (#23272) * Fix create banner and link * Remove call from startup * QA * Improve readability * Avoid using an outdated absolute URL * Embedded counters into translation strings Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * Patch object-path so Snyk stop complaining Co-authored-by: pierre-lehnen-rc <55164754+pierre-lehnen-rc@users.noreply.github.com> Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com> Co-authored-by: Pierre Lehnen <pierre.lehnen@rocket.chat> Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Co-authored-by: Gabriel Thomé <38537062+g-thome@users.noreply.github.com>
4 years ago
import { Pie, DatumId } from '@nivo/pie';
import { Box } from '@rocket.chat/fuselage';
import colors from '@rocket.chat/fuselage-tokens/colors';
import React, { useMemo, useCallback, ReactElement, CSSProperties, ReactNode } from 'react';
import { useLocalePercentage } from '../../../hooks/useLocalePercentage';
type GraphColorsReturn = { [key: string]: string };
const graphColors = (color: CSSProperties['color']): GraphColorsReturn => ({
used: color || colors.b500,
free: colors.n300,
});
type UsageGraphProps = {
used: number;
total: number;
label: ReactNode;
color?: string;
size: number;
};
type GraphData = Array<{
id: string;
label: string;
value: number;
}>;
const UsageGraph = ({ used = 0, total = 0, label, color, size }: UsageGraphProps): ReactElement => {
const parsedData = useMemo(
(): GraphData => [
{
id: 'used',
label: 'used',
value: used,
},
{
id: 'free',
label: 'free',
value: total - used,
},
],
[total, used],
);
const getColor = useCallback(
(datum: { id: DatumId } | undefined) => {
if (!datum || typeof datum.id !== 'string') {
return '';
}
return graphColors(color)[datum.id];
},
[color],
);
const unlimited = total === 0;
const localePercentage = useLocalePercentage(total, used, 0);
return (
<Box display='flex' flexDirection='column' alignItems='center'>
<Box size={size}>
<Box position='relative'>
<Pie
data={parsedData}
margin={{ top: 10, right: 10, bottom: 10, left: 10 }}
innerRadius={0.8}
colors={getColor}
width={size}
height={size}
enableArcLabels={false}
enableArcLinkLabels={false}
/>
<Box
display='flex'
alignItems='center'
justifyContent='center'
position='absolute'
color={color}
fontScale='p2m'
[NEW] Seats Cap (#23017) * Base commit * [NEW] licenses.maxActiveUsers endpoint (#23011) * [IMPROVE] Banner Service (#22989) * WIP * Fix type import Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] canAddNewUser function * [NEW] Seats usage bar (#23018) * usage bar component * Seats limit in admin users page * Remove dangling console.log * Add some details on StatisticsEndpoint type * Move to EE and use new endpoint * Rename some components and hooks * Refactor UsersPage Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> * Fix edit and info page * [NEW] Seats Card (#23077) * Seats Card * Fix review, make ts * Fix review * Add type guard for CardIcon props Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] Seats Cap: Request seats link (#23151) * create endpoint and consume it in the ui * Fix review * Remove unused param type Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] Remove license downgrade if exceeding seats cap (#23220) * [IMPROVE] Ensure Seats-cap design and UI are the same (#23222) * Fix labels and buttons * Reload seats cap data on user changes * Use Fuselage on development version Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] Prevent users from accidentally deactivating an enterprise license by adding more users than the license allows. (#23050) Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * [NEW] stats on seats request (#23225) Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> * [NEW] Seats cap banners (#23211) * [NEW] Prevent users from accidentally deactivating an enterprise license by adding more users than the license allows. * Seats cap banners * Deprecate preserveDismiss * use request seats link * Fix banner not closing and request seats link Co-authored-by: Pierre Lehnen <pierre.lehnen@rocket.chat> * [FIX] Banner not parsing markdown (#23036) * Parse markdown * Use markdownText * Fix translations * Move startup * Always create seats limit banners * Remove uneffective conditional * [FIX] Seats Cap QA reports (#23272) * Fix create banner and link * Remove call from startup * QA * Improve readability * Avoid using an outdated absolute URL * Embedded counters into translation strings Co-authored-by: Tasso Evangelista <tasso.evangelista@rocket.chat> * Patch object-path so Snyk stop complaining Co-authored-by: pierre-lehnen-rc <55164754+pierre-lehnen-rc@users.noreply.github.com> Co-authored-by: Guilherme Gazzo <guilhermegazzo@gmail.com> Co-authored-by: Pierre Lehnen <pierre.lehnen@rocket.chat> Co-authored-by: Gabriel Henriques <gabriel.henriques@rocket.chat> Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com> Co-authored-by: Gabriel Thomé <38537062+g-thome@users.noreply.github.com>
4 years ago
style={{ left: 0, right: 0, top: 0, bottom: 0 }}
>
{unlimited ? '∞' : localePercentage}
</Box>
</Box>
</Box>
<span>
<Box is='span' color='default'>
{used}
</Box>{' '}
/ {unlimited ? '' : total}
</span>
<Box is='span' mbs='x4'>
{label}
</Box>
</Box>
);
};
export default UsageGraph;