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 (