Skip to content

Commit 85dbded

Browse files
feature: use file-pickers instead of text inputs (#168)
1 parent 0b94a06 commit 85dbded

File tree

3 files changed

+38
-11
lines changed

3 files changed

+38
-11
lines changed

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ please refer to the [**official documentation**](https://www.jetbrains.com/help/
5353
## Setting environment variables
5454
If your dbt project requires environment variables (e.g. `DBT_SOME_ENV_VAR`), please set them via the plugin settings.
5555
`File` > `Settings` > `dbtToolkit` > `Environment Variables`
56+
57+
There is also support for `.env` files, the plugin automatically checks for a `.env` file in the root of your project.
58+
Via the plugin settings, you can also specify a custom path to the `.env` file.
59+
> _Note: The global plugin environment variables will overwrite any environment variable with the same key in your
60+
> `.env` files_
5661
<!-- Plugin description end -->
5762
5863
## Feedback and Contributions

src/main/kotlin/com/github/ramonvermeulen/dbtToolkit/ui/settings/DbtToolkitSettingsConfigurable.kt

+28-6
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ package com.github.ramonvermeulen.dbtToolkit.ui.settings
22

33
import com.github.ramonvermeulen.dbtToolkit.services.DbtToolkitSettingsService
44
import com.intellij.openapi.components.service
5+
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
56
import com.intellij.openapi.options.Configurable
67
import com.intellij.openapi.project.Project
8+
import com.intellij.openapi.ui.TextFieldWithBrowseButton
79
import com.intellij.ui.JBIntSpinner
8-
import com.intellij.ui.components.JBTextField
910
import com.intellij.ui.table.JBTable
1011
import com.intellij.util.ui.JBUI
1112
import java.awt.BorderLayout
@@ -23,13 +24,34 @@ import javax.swing.table.DefaultTableModel
2324

2425
class DbtToolkitSettingsConfigurable(project: Project) : Configurable {
2526
private var dbtToolkitSettingsService = project.service<DbtToolkitSettingsService>()
26-
private var dbtProjectDirField = JBTextField()
27-
private var dbtTargetDirField = JBTextField()
28-
private var dotEnvFilePathField = JBTextField()
27+
private var dbtProjectDirField = TextFieldWithBrowseButton()
28+
private var dbtTargetDirField = TextFieldWithBrowseButton()
29+
private var dotEnvFilePathField = TextFieldWithBrowseButton()
2930
private var dbtCommandTimeoutField = JBIntSpinner(0, 0, 3600)
3031
private var envVarsTable = JBTable()
3132
private var settingsPanel = JPanel()
3233

34+
init {
35+
dbtProjectDirField.addBrowseFolderListener(
36+
"Select dbt Project Directory",
37+
null,
38+
project,
39+
FileChooserDescriptorFactory.createSingleFolderDescriptor(),
40+
)
41+
dbtTargetDirField.addBrowseFolderListener(
42+
"Select dbt Target Directory",
43+
null,
44+
project,
45+
FileChooserDescriptorFactory.createSingleFolderDescriptor(),
46+
)
47+
dotEnvFilePathField.addBrowseFolderListener(
48+
"Select .env File",
49+
null,
50+
project,
51+
FileChooserDescriptorFactory.createSingleFileDescriptor(),
52+
)
53+
}
54+
3355
override fun getDisplayName(): String {
3456
return "dbtToolkit Settings"
3557
}
@@ -113,8 +135,8 @@ class DbtToolkitSettingsConfigurable(project: Project) : Configurable {
113135
}
114136

115137
override fun reset() {
116-
dbtProjectDirField.text = dbtToolkitSettingsService.state.dbtProjectsDir
117-
dbtTargetDirField.text = dbtToolkitSettingsService.state.dbtTargetDir
138+
dbtProjectDirField.text = dbtToolkitSettingsService.state.settingsDbtProjectDir
139+
dbtTargetDirField.text = dbtToolkitSettingsService.state.settingsDbtTargetDir
118140
dbtCommandTimeoutField.value = dbtToolkitSettingsService.state.settingsDbtCommandTimeout
119141
dotEnvFilePathField.text = dbtToolkitSettingsService.state.settingsDotEnvFilePath
120142

src/test/kotlin/com/github/ramonvermeulen/dbtToolkit/ui/settings/DbtToolkitSettingsConfigurableTest.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package com.github.ramonvermeulen.dbtToolkit.ui.settings
22

33
import com.github.ramonvermeulen.dbtToolkit.services.DbtToolkitSettingsService
44
import com.intellij.openapi.components.service
5+
import com.intellij.openapi.ui.TextFieldWithBrowseButton
56
import com.intellij.testFramework.LightPlatformTestCase
67
import junit.framework.TestCase
78
import javax.swing.JComponent
89
import javax.swing.JPanel
9-
import javax.swing.JTextField
1010

1111
// TODO(ramon) for UI tests, take a lookt at https://github.com/JetBrains/intellij-ui-test-robot
1212
class DbtToolkitSettingsConfigurableTest : LightPlatformTestCase() {
@@ -29,17 +29,17 @@ class DbtToolkitSettingsConfigurableTest : LightPlatformTestCase() {
2929
}
3030

3131
fun `test isModified with some modifications`() {
32-
val dbtProjectsDirField = (mainSwingComponent.getComponent(0) as JPanel).getComponent(1) as JTextField
32+
val dbtProjectsDirField = (mainSwingComponent.getComponent(0) as JPanel).getComponent(1) as TextFieldWithBrowseButton
3333
dbtProjectsDirField.text = "some text"
34-
val dbtDotEnvDirField = (mainSwingComponent.getComponent(0) as JPanel).getComponent(5) as JTextField
34+
val dbtDotEnvDirField = (mainSwingComponent.getComponent(0) as JPanel).getComponent(5) as TextFieldWithBrowseButton
3535
dbtDotEnvDirField.text = "/foo/bar"
3636
TestCase.assertTrue(configurable.isModified())
3737
}
3838

3939
fun `test apply`() {
40-
val dbtProjectsDirField = (mainSwingComponent.getComponent(0) as JPanel).getComponent(1) as JTextField
40+
val dbtProjectsDirField = (mainSwingComponent.getComponent(0) as JPanel).getComponent(1) as TextFieldWithBrowseButton
4141
dbtProjectsDirField.text = "some text"
42-
val dbtDotEnvDirField = (mainSwingComponent.getComponent(0) as JPanel).getComponent(5) as JTextField
42+
val dbtDotEnvDirField = (mainSwingComponent.getComponent(0) as JPanel).getComponent(5) as TextFieldWithBrowseButton
4343
dbtDotEnvDirField.text = "/foo/bar"
4444
configurable.apply()
4545
TestCase.assertEquals("some text", settingsService.state.settingsDbtProjectDir)

0 commit comments

Comments
 (0)