| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import React, { PureComponent } from 'react';
- import { hot } from 'react-hot-loader';
- import { connect } from 'react-redux';
- import Page from 'app/core/components/Page/Page';
- import OrgActionBar from 'app/core/components/OrgActionBar/OrgActionBar';
- import PluginList from './PluginList';
- import { NavModel, Plugin } from 'app/types';
- import { loadPlugins, setPluginsLayoutMode, setPluginsSearchQuery } from './state/actions';
- import { getNavModel } from 'app/core/selectors/navModel';
- import { getLayoutMode, getPlugins, getPluginsSearchQuery } from './state/selectors';
- import { LayoutMode } from 'app/core/components/LayoutSelector/LayoutSelector';
- export interface Props {
- navModel: NavModel;
- plugins: Plugin[];
- layoutMode: LayoutMode;
- searchQuery: string;
- hasFetched: boolean;
- loadPlugins: typeof loadPlugins;
- setPluginsLayoutMode: typeof setPluginsLayoutMode;
- setPluginsSearchQuery: typeof setPluginsSearchQuery;
- }
- export class PluginListPage extends PureComponent<Props> {
- componentDidMount() {
- this.fetchPlugins();
- }
- async fetchPlugins() {
- await this.props.loadPlugins();
- }
- render() {
- const {
- hasFetched,
- navModel,
- plugins,
- layoutMode,
- setPluginsLayoutMode,
- setPluginsSearchQuery,
- searchQuery,
- } = this.props;
- const linkButton = {
- href: 'https://grafana.com/plugins?utm_source=grafana_plugin_list',
- title: 'Find more plugins on Grafana.com',
- };
- return (
- <Page navModel={navModel}>
- <Page.Contents isLoading={!hasFetched}>
- <>
- <OrgActionBar
- searchQuery={searchQuery}
- layoutMode={layoutMode}
- onSetLayoutMode={mode => setPluginsLayoutMode(mode)}
- setSearchQuery={query => setPluginsSearchQuery(query)}
- linkButton={linkButton}
- />
- {hasFetched && plugins && (plugins && <PluginList plugins={plugins} layoutMode={layoutMode} />)}
- </>
- </Page.Contents>
- </Page>
- );
- }
- }
- function mapStateToProps(state) {
- return {
- navModel: getNavModel(state.navIndex, 'plugins'),
- plugins: getPlugins(state.plugins),
- layoutMode: getLayoutMode(state.plugins),
- searchQuery: getPluginsSearchQuery(state.plugins),
- hasFetched: state.plugins.hasFetched,
- };
- }
- const mapDispatchToProps = {
- loadPlugins,
- setPluginsLayoutMode,
- setPluginsSearchQuery,
- };
- export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(PluginListPage));
|