diff --git a/ui/src/dataLoaders/components/BucketsDropdown.test.tsx b/ui/src/dataLoaders/components/BucketsDropdown.test.tsx new file mode 100644 index 0000000000..80a856e5b5 --- /dev/null +++ b/ui/src/dataLoaders/components/BucketsDropdown.test.tsx @@ -0,0 +1,50 @@ +// Libraries +import React from 'react' +import {shallow} from 'enzyme' + +// Components +import BucketsDropdown from 'src/dataLoaders/components/BucketsDropdown' +import {Dropdown, ComponentStatus} from 'src/clockface' +import {bucket} from 'mocks/dummyData' + +// Mocks + +const setup = (override = {}) => { + const props = { + selected: '', + buckets: [], + onSelectBucket: jest.fn(), + ...override, + } + + const wrapper = shallow() + + return {wrapper} +} + +describe('DataLoading.Components.BucketsDropdown', () => { + describe('when no buckets', () => { + it('renders disabled dropdown', () => { + const {wrapper} = setup() + + const dropdown = wrapper.find(Dropdown) + + expect(wrapper.exists()).toBe(true) + expect(dropdown.exists()).toBe(true) + expect(dropdown.prop('status')).toBe(ComponentStatus.Disabled) + }) + }) + + describe('if buckets', () => { + it('renders dropdown', () => { + const buckets = [bucket] + const {wrapper} = setup({buckets}) + + const dropdown = wrapper.find(Dropdown) + + expect(wrapper.exists()).toBe(true) + expect(dropdown.exists()).toBe(true) + expect(dropdown.prop('status')).toBe(ComponentStatus.Default) + }) + }) +}) diff --git a/ui/src/dataLoaders/components/BucketsDropdown.tsx b/ui/src/dataLoaders/components/BucketsDropdown.tsx new file mode 100644 index 0000000000..2bdf40b1d3 --- /dev/null +++ b/ui/src/dataLoaders/components/BucketsDropdown.tsx @@ -0,0 +1,75 @@ +// Libraries +import React, {PureComponent} from 'react' + +// Components +import {Dropdown, ComponentStatus} from 'src/clockface' + +// Types +import {Bucket} from 'src/api' + +interface Props { + selected: string + buckets: Bucket[] + onSelectBucket: (bucket: Bucket) => void +} + +class BucketsDropdown extends PureComponent { + public render() { + return ( + + {this.dropdownBuckets} + + ) + } + + private get title(): string { + if (this.isBucketsEmpty) { + return 'No buckets found' + } + + return '' + } + + private get status(): ComponentStatus { + if (this.isBucketsEmpty) { + return ComponentStatus.Disabled + } + + return ComponentStatus.Default + } + + private get selectedID(): string { + return this.props.selected || '' + } + + private get isBucketsEmpty(): boolean { + const {buckets} = this.props + return !buckets || !buckets.length + } + + private get dropdownBuckets(): JSX.Element[] { + const {buckets} = this.props + if (this.isBucketsEmpty) { + return [] + } + + return buckets.map(b => ( + + {b.name} + + )) + } + + private handleSelectBucket = (bucketName: string) => { + const bucket = this.props.buckets.find(b => b.name === bucketName) + + this.props.onSelectBucket(bucket) + } +} + +export default BucketsDropdown diff --git a/ui/src/dataLoaders/components/collectorsWizard/select/StreamingSelector.tsx b/ui/src/dataLoaders/components/collectorsWizard/select/StreamingSelector.tsx index 517dd30a79..05b11e4066 100644 --- a/ui/src/dataLoaders/components/collectorsWizard/select/StreamingSelector.tsx +++ b/ui/src/dataLoaders/components/collectorsWizard/select/StreamingSelector.tsx @@ -11,7 +11,6 @@ import { Input, IconFont, ComponentSize, - Dropdown, FormElement, Grid, Columns, @@ -22,6 +21,7 @@ import { PLUGIN_BUNDLE_OPTIONS, BUNDLE_LOGOS, } from 'src/dataLoaders/constants/pluginConfigs' +import BucketDropdown from 'src/dataLoaders/components/BucketsDropdown' // Types import {TelegrafPlugin, BundleName} from 'src/types/v2/dataLoaders' @@ -69,6 +69,7 @@ class StreamingSelector extends PureComponent { } public render() { + const {bucket, buckets} = this.props const {gridSizerUpdateFlag, searchTerm} = this.state return ( @@ -76,12 +77,11 @@ class StreamingSelector extends PureComponent { - - {this.dropdownBuckets} - + @@ -120,33 +120,10 @@ class StreamingSelector extends PureComponent { ) } - private handleSelectBucket = (bucketName: string) => { - const bucket = this.props.buckets.find(b => b.name === bucketName) - + private handleSelectBucket = (bucket: Bucket) => { this.props.onSelectBucket(bucket) } - private get selectedBucketID(): string { - return this.props.bucket || 'empty' - } - - private get dropdownBuckets(): JSX.Element[] { - const {buckets} = this.props - if (!buckets || !buckets.length) { - return [ - - {'No buckets found'} - , - ] - } - - return buckets.map(b => ( - - {b.name} - - )) - } - private get filteredBundles(): BundleName[] { const {searchTerm} = this.state diff --git a/ui/src/dataLoaders/components/configureStep/ScraperTarget.tsx b/ui/src/dataLoaders/components/configureStep/ScraperTarget.tsx index 41d55bae13..aed7fcd007 100644 --- a/ui/src/dataLoaders/components/configureStep/ScraperTarget.tsx +++ b/ui/src/dataLoaders/components/configureStep/ScraperTarget.tsx @@ -8,15 +8,16 @@ import { Columns, Grid, ComponentSize, - Dropdown, InputType, ComponentStatus, } from 'src/clockface' +import BucketDropdown from 'src/dataLoaders/components/BucketsDropdown' +import {Bucket} from 'src/api' interface Props { bucket: string - buckets: string[] - onSelectBucket: (value: string) => void + buckets: Bucket[] + onSelectBucket: (bucket: Bucket) => void onChangeURL: (value: string) => void url: string } @@ -27,18 +28,17 @@ export class ScraperTarget extends PureComponent { } public render() { - const {onSelectBucket, url} = this.props + const {onSelectBucket, url, bucket, buckets} = this.props return ( - - {this.dropdownBuckets} - + @@ -69,32 +69,6 @@ export class ScraperTarget extends PureComponent { return ComponentStatus.Default } - private get selectedBucket(): string { - const {buckets, bucket} = this.props - - if (!buckets || !buckets.length) { - return 'empty' - } - return bucket - } - - private get dropdownBuckets(): JSX.Element[] { - const {buckets} = this.props - if (!buckets || !buckets.length) { - return [ - - {'No buckets found'} - , - ] - } - - return buckets.map(b => ( - - {b} - - )) - } - private get urlEmpty(): boolean { return !this.props.url } diff --git a/ui/src/dataLoaders/components/configureStep/Scraping.tsx b/ui/src/dataLoaders/components/configureStep/Scraping.tsx index 7473b9958d..96380cf40e 100644 --- a/ui/src/dataLoaders/components/configureStep/Scraping.tsx +++ b/ui/src/dataLoaders/components/configureStep/Scraping.tsx @@ -56,7 +56,7 @@ export class Scraping extends PureComponent { } public render() { - const {scraperBucket, onSetScraperTargetURL, url} = this.props + const {scraperBucket, onSetScraperTargetURL, url, buckets} = this.props return (
@@ -70,7 +70,7 @@ export class Scraping extends PureComponent { { ) } - private get buckets(): string[] { - const {buckets} = this.props + private handleSelectBucket = (bucket: Bucket) => { + const {onSetBucketInfo, onSetScraperTargetBucket} = this.props + const {organization, organizationID, id, name} = bucket - return buckets.map(b => b.name) - } - - private handleSelectBucket = (bucket: string) => { - const {buckets, onSetScraperTargetBucket, onSetBucketInfo} = this.props - if (!buckets || !buckets.length) { - return - } - - const findBucket = buckets.find(b => b.name === bucket) - const bucketID = findBucket.id - const org = findBucket.organization - const orgID = findBucket.organizationID - - onSetBucketInfo(org, orgID, bucket, bucketID) - onSetScraperTargetBucket(bucket) + onSetBucketInfo(organization, organizationID, name, id) + onSetScraperTargetBucket(bucket.name) } private get nextButtonStatus(): ComponentStatus { diff --git a/ui/src/dataLoaders/components/configureStep/__snapshots__/Scraper.test.tsx.snap b/ui/src/dataLoaders/components/configureStep/__snapshots__/Scraper.test.tsx.snap index 9e04e16489..d6d6bc84ec 100644 --- a/ui/src/dataLoaders/components/configureStep/__snapshots__/Scraper.test.tsx.snap +++ b/ui/src/dataLoaders/components/configureStep/__snapshots__/Scraper.test.tsx.snap @@ -10,28 +10,11 @@ exports[`ScraperTarget rendering renders! 1`] = ` - - - No buckets found - - +