|
|
@@ -1,24 +1,62 @@
|
|
|
-import React from 'react';
|
|
|
+import React, { PureComponent } from 'react';
|
|
|
+import { connect } from 'react-redux';
|
|
|
+import LayoutSelector from '../../core/components/LayoutSelector/LayoutSelector';
|
|
|
+import { setLayoutMode, setPluginsSearchQuery } from './state/actions';
|
|
|
+import { getPluginsSearchQuery, getLayoutMode } from './state/selectors';
|
|
|
|
|
|
-export default function({ searchQuery, onQueryChange }) {
|
|
|
- return (
|
|
|
- <div className="page-action-bar">
|
|
|
- <div className="gf-form gf-form--grow">
|
|
|
- <label className="gf-form--has-input-icon">
|
|
|
- <input
|
|
|
- type="text"
|
|
|
- className="gf-form-input width-20"
|
|
|
- value={searchQuery}
|
|
|
- onChange={onQueryChange}
|
|
|
- placeholder="Filter by name or type"
|
|
|
- />
|
|
|
- <i className="gf-form-input-icon fa fa-search" />
|
|
|
- </label>
|
|
|
+export interface Props {
|
|
|
+ searchQuery: string;
|
|
|
+ layoutMode: string;
|
|
|
+ setLayoutMode: typeof setLayoutMode;
|
|
|
+ setPluginsSearchQuery: typeof setPluginsSearchQuery;
|
|
|
+}
|
|
|
+
|
|
|
+export class PluginActionBar extends PureComponent<Props> {
|
|
|
+ onSearchQueryChange = event => {
|
|
|
+ this.props.setPluginsSearchQuery(event.target.value);
|
|
|
+ };
|
|
|
+
|
|
|
+ render() {
|
|
|
+ const { searchQuery, layoutMode, setLayoutMode } = this.props;
|
|
|
+
|
|
|
+ return (
|
|
|
+ <div className="page-action-bar">
|
|
|
+ <div className="gf-form gf-form--grow">
|
|
|
+ <label className="gf-form--has-input-icon">
|
|
|
+ <input
|
|
|
+ type="text"
|
|
|
+ className="gf-form-input width-20"
|
|
|
+ value={searchQuery}
|
|
|
+ onChange={this.onSearchQueryChange}
|
|
|
+ placeholder="Filter by name or type"
|
|
|
+ />
|
|
|
+ <i className="gf-form-input-icon fa fa-search" />
|
|
|
+ </label>
|
|
|
+ <LayoutSelector mode={layoutMode} onLayoutModeChanged={mode => setLayoutMode(mode)} />
|
|
|
+ </div>
|
|
|
+ <div className="page-action-bar__spacer" />
|
|
|
+ <a
|
|
|
+ className="btn btn-success"
|
|
|
+ href="https://grafana.com/plugins?utm_source=grafana_plugin_list"
|
|
|
+ target="_blank"
|
|
|
+ >
|
|
|
+ Find more plugins on Grafana.com
|
|
|
+ </a>
|
|
|
</div>
|
|
|
- <div className="page-action-bar__spacer" />
|
|
|
- <a className="btn btn-success" href="https://grafana.com/plugins?utm_source=grafana_plugin_list" target="_blank">
|
|
|
- Find more plugins on Grafana.com
|
|
|
- </a>
|
|
|
- </div>
|
|
|
- );
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+function mapStateToProps(state) {
|
|
|
+ return {
|
|
|
+ searchQuery: getPluginsSearchQuery(state.plugins),
|
|
|
+ layoutMode: getLayoutMode(state.plugins),
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+const mapDispatchToProps = {
|
|
|
+ setPluginsSearchQuery,
|
|
|
+ setLayoutMode,
|
|
|
+};
|
|
|
+
|
|
|
+export default connect(mapStateToProps, mapDispatchToProps)(PluginActionBar);
|