Admin: remove Redux from ServerStats (#38581)

* Admin: remove Redux from ServerStats

* Admin: Fix import
pull/38442/head
Alex Khomenko 4 years ago committed by GitHub
parent c08d5eeda0
commit a15e33e693
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      public/app/features/admin/ServerStats.test.tsx
  2. 19
      public/app/features/admin/ServerStats.tsx
  3. 2
      public/app/features/admin/UpgradePage.tsx

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { render, screen } from '@testing-library/react'; import { render, screen } from '@testing-library/react';
import { ServerStats, Props } from './ServerStats'; import { ServerStats } from './ServerStats';
import { ServerStat } from './state/apis'; import { ServerStat } from './state/apis';
const stats: ServerStat = { const stats: ServerStat = {
@ -23,21 +23,13 @@ const stats: ServerStat = {
viewers: 2, viewers: 2,
}; };
const getServerStats = () => { jest.mock('./state/apis', () => ({
return Promise.resolve(stats); getServerStats: async () => stats,
}; }));
const setup = (propOverrides?: Partial<Props>) => {
const props: Props = {
getServerStats,
};
Object.assign(props, propOverrides);
render(<ServerStats {...props} />);
};
describe('ServerStats', () => { describe('ServerStats', () => {
it('Should render page with stats', async () => { it('Should render page with stats', async () => {
setup(); render(<ServerStats />);
expect(await screen.findByRole('heading', { name: /instance statistics/i })).toBeInTheDocument(); expect(await screen.findByRole('heading', { name: /instance statistics/i })).toBeInTheDocument();
expect(screen.getByText('Dashboards (starred)')).toBeInTheDocument(); expect(screen.getByText('Dashboards (starred)')).toBeInTheDocument();
expect(screen.getByText('Tags')).toBeInTheDocument(); expect(screen.getByText('Tags')).toBeInTheDocument();

@ -1,20 +1,13 @@
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import { hot } from 'react-hot-loader';
import { connect } from 'react-redux';
import { css } from '@emotion/css'; import { css } from '@emotion/css';
import { CardContainer, LinkButton, useStyles2 } from '@grafana/ui'; import { CardContainer, LinkButton, useStyles2 } from '@grafana/ui';
import { GrafanaTheme2 } from '@grafana/data'; import { GrafanaTheme2 } from '@grafana/data';
import { AccessControlAction, StoreState } from 'app/types'; import { AccessControlAction } from 'app/types';
import { getNavModel } from 'app/core/selectors/navModel';
import { getServerStats, ServerStat } from './state/apis'; import { getServerStats, ServerStat } from './state/apis';
import { contextSrv } from '../../core/services/context_srv'; import { contextSrv } from '../../core/services/context_srv';
import { Loader } from '../plugins/admin/components/Loader'; import { Loader } from '../plugins/admin/components/Loader';
export interface Props { export const ServerStats = () => {
getServerStats: () => Promise<ServerStat | null>;
}
export const ServerStats = ({ getServerStats }: Props) => {
const [stats, setStats] = useState<ServerStat | null>(null); const [stats, setStats] = useState<ServerStat | null>(null);
const [isLoading, setIsLoading] = useState(true); const [isLoading, setIsLoading] = useState(true);
const styles = useStyles2(getStyles); const styles = useStyles2(getStyles);
@ -24,7 +17,7 @@ export const ServerStats = ({ getServerStats }: Props) => {
setStats(stats); setStats(stats);
setIsLoading(false); setIsLoading(false);
}); });
}, [getServerStats]); }, []);
if (!contextSrv.hasPermission(AccessControlAction.ActionServerStatsRead)) { if (!contextSrv.hasPermission(AccessControlAction.ActionServerStatsRead)) {
return null; return null;
@ -131,11 +124,6 @@ const getStyles = (theme: GrafanaTheme2) => {
}; };
}; };
const mapStateToProps = (state: StoreState) => ({
navModel: getNavModel(state.navIndex, 'server-stats'),
getServerStats,
});
type StatCardProps = { type StatCardProps = {
content: Array<Record<string, number | string>>; content: Array<Record<string, number | string>>;
footer?: JSX.Element; footer?: JSX.Element;
@ -184,4 +172,3 @@ const getCardStyles = (theme: GrafanaTheme2) => {
`, `,
}; };
}; };
export default hot(module)(connect(mapStateToProps)(ServerStats));

@ -8,7 +8,7 @@ import Page from '../../core/components/Page/Page';
import { getNavModel } from '../../core/selectors/navModel'; import { getNavModel } from '../../core/selectors/navModel';
import { LicenseChrome } from './LicenseChrome'; import { LicenseChrome } from './LicenseChrome';
import { StoreState } from '../../types'; import { StoreState } from '../../types';
import ServerStats from './ServerStats'; import { ServerStats } from './ServerStats';
interface Props { interface Props {
navModel: NavModel; navModel: NavModel;

Loading…
Cancel
Save