diff --git a/ui/src/organizations/components/Collectors.tsx b/ui/src/organizations/components/Collectors.tsx index 15da9b1d30..c0bd322b51 100644 --- a/ui/src/organizations/components/Collectors.tsx +++ b/ui/src/organizations/components/Collectors.tsx @@ -1,5 +1,6 @@ // Libraries -import React, {PureComponent} from 'react' +import _ from 'lodash' +import React, {PureComponent, ChangeEvent} from 'react' // Utils import {downloadTextFile} from 'src/shared/utils/download' @@ -16,8 +17,11 @@ import { EmptyState, Grid, Columns, + Input, + InputType, } from 'src/clockface' import DataLoadersWizard from 'src/dataLoaders/components/DataLoadersWizard' +import FilterList from 'src/shared/components/Filter' // APIS import { @@ -50,6 +54,7 @@ interface Props { interface State { overlayState: OverlayState + searchTerm: string } @ErrorHandling @@ -57,26 +62,47 @@ export default class Collectors extends PureComponent { constructor(props: Props) { super(props) - this.state = {overlayState: OverlayState.Closed} + this.state = { + overlayState: OverlayState.Closed, + searchTerm: '', + } } public render() { const {collectors, buckets} = this.props + const {searchTerm} = this.state + return ( <> -

Telegraf Configurations

+ {this.createButton}
- + + searchTerm={searchTerm} + searchKeys={['plugins.0.config.bucket']} + list={collectors} + > + {cs => ( + + )} + { private get emptyState(): JSX.Element { const {orgName} = this.props + const {searchTerm} = this.state + + if (_.isEmpty(searchTerm)) { + return ( + + + {this.createButton} + + ) + } return ( - - {this.createButton} + ) } @@ -150,4 +185,12 @@ export default class Collectors extends PureComponent { await deleteTelegrafConfig(telegrafID) this.props.onChange() } + + private handleFilterChange = (e: ChangeEvent): void => { + this.setState({searchTerm: e.target.value}) + } + + private handleFilterBlur = (e: ChangeEvent): void => { + this.setState({searchTerm: e.target.value}) + } } diff --git a/ui/src/organizations/components/Scrapers.tsx b/ui/src/organizations/components/Scrapers.tsx index 5ebfdf3436..bf8262d2d6 100644 --- a/ui/src/organizations/components/Scrapers.tsx +++ b/ui/src/organizations/components/Scrapers.tsx @@ -1,5 +1,6 @@ // Libraries -import React, {PureComponent} from 'react' +import _ from 'lodash' +import React, {PureComponent, ChangeEvent} from 'react' // APIs import {deleteScraper} from 'src/organizations/apis/index' @@ -13,8 +14,11 @@ import { IconFont, ComponentSize, EmptyState, + Input, + InputType, } from 'src/clockface' import DataLoadersWizard from 'src/dataLoaders/components/DataLoadersWizard' +import FilterList from 'src/shared/components/Filter' // Decorators import {ErrorHandling} from 'src/shared/decorators/errors' @@ -33,6 +37,7 @@ interface Props { interface State { overlayState: OverlayState + searchTerm: string } @ErrorHandling @@ -40,22 +45,43 @@ export default class Scrapers extends PureComponent { constructor(props: Props) { super(props) - this.state = {overlayState: OverlayState.Closed} + this.state = { + overlayState: OverlayState.Closed, + searchTerm: '', + } } public render() { const {scrapers, buckets} = this.props + const {searchTerm} = this.state + return ( <> -

Scrapers

+ {this.createScraperButton}
- + + searchTerm={searchTerm} + searchKeys={['bucket']} + list={scrapers.configurations || []} + > + {configurations => ( + + )} + { private get emptyState(): JSX.Element { const {orgName} = this.props + const {searchTerm} = this.state + + if (_.isEmpty(searchTerm)) { + return ( + + + {this.createScraperButton} + + ) + } + return ( - - {this.createScraperButton} + ) } @@ -108,4 +144,12 @@ export default class Scrapers extends PureComponent { await deleteScraper(scraper.id) this.props.onChange() } + + private handleFilterChange = (e: ChangeEvent): void => { + this.setState({searchTerm: e.target.value}) + } + + private handleFilterBlur = (e: ChangeEvent): void => { + this.setState({searchTerm: e.target.value}) + } }