PluginActionBar.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import React, { PureComponent } from 'react';
  2. import { connect } from 'react-redux';
  3. import LayoutSelector, { LayoutMode } from '../../core/components/LayoutSelector/LayoutSelector';
  4. import { setLayoutMode, setPluginsSearchQuery } from './state/actions';
  5. import { getPluginsSearchQuery, getLayoutMode } from './state/selectors';
  6. export interface Props {
  7. searchQuery: string;
  8. layoutMode: LayoutMode;
  9. setLayoutMode: typeof setLayoutMode;
  10. setPluginsSearchQuery: typeof setPluginsSearchQuery;
  11. }
  12. export class PluginActionBar extends PureComponent<Props> {
  13. onSearchQueryChange = event => {
  14. this.props.setPluginsSearchQuery(event.target.value);
  15. };
  16. render() {
  17. const { searchQuery, layoutMode, setLayoutMode } = this.props;
  18. return (
  19. <div className="page-action-bar">
  20. <div className="gf-form gf-form--grow">
  21. <label className="gf-form--has-input-icon">
  22. <input
  23. type="text"
  24. className="gf-form-input width-20"
  25. value={searchQuery}
  26. onChange={this.onSearchQueryChange}
  27. placeholder="Filter by name or type"
  28. />
  29. <i className="gf-form-input-icon fa fa-search" />
  30. </label>
  31. <LayoutSelector mode={layoutMode} onLayoutModeChanged={(mode: LayoutMode) => setLayoutMode(mode)} />
  32. </div>
  33. <div className="page-action-bar__spacer" />
  34. <a
  35. className="btn btn-success"
  36. href="https://grafana.com/plugins?utm_source=grafana_plugin_list"
  37. target="_blank"
  38. >
  39. Find more plugins on Grafana.com
  40. </a>
  41. </div>
  42. );
  43. }
  44. }
  45. function mapStateToProps(state) {
  46. return {
  47. searchQuery: getPluginsSearchQuery(state.plugins),
  48. layoutMode: getLayoutMode(state.plugins),
  49. };
  50. }
  51. const mapDispatchToProps = {
  52. setPluginsSearchQuery,
  53. setLayoutMode,
  54. };
  55. export default connect(mapStateToProps, mapDispatchToProps)(PluginActionBar);