Skip to content

Commit 5da4556

Browse files
committed
Filter not required variables for requests #663
1 parent 2818c16 commit 5da4556

File tree

5 files changed

+22
-12
lines changed

5 files changed

+22
-12
lines changed

src/main/com/intellij/lang/jsgraphql/ide/config/env/GraphQLConfigEnvironment.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,12 +296,17 @@ data class GraphQLEnvironmentSnapshot(val variables: Map<String, String?>) {
296296
val EMPTY = GraphQLEnvironmentSnapshot(emptyMap())
297297
}
298298

299-
val hasMissingValues = variables.values.any { it.isNullOrBlank() }
299+
fun hasMissingValues(nameFilter: Collection<String>? = null): Boolean {
300+
return variables.any { (nameFilter == null || it.key in nameFilter) && it.value.isNullOrBlank() }
301+
}
300302

301303
val hasVariables = variables.isNotEmpty()
302304

305+
fun update(project: Project, dir: VirtualFile): GraphQLEnvironmentSnapshot =
306+
GraphQLConfigEnvironment.getInstance(project).createSnapshot(variables.keys, dir)
307+
303308
override fun toString(): String {
304309
// don't write env values to log
305-
return "GraphQLEnvironmentSnapshot(variables=${variables.keys.joinToString()}, hasMissingValues=$hasMissingValues)"
310+
return "GraphQLEnvironmentSnapshot(variables=${variables.keys.joinToString()}, hasMissingValues=${hasMissingValues()})"
306311
}
307312
}

src/main/com/intellij/lang/jsgraphql/ide/config/env/GraphQLEnvironmentVariablesDialog.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class GraphQLEnvironmentVariablesDialog(
2525
private val environment: GraphQLEnvironmentSnapshot,
2626
private val fileOrDir: VirtualFile,
2727
private val onlyEmpty: Boolean,
28+
private val nameFilter: Collection<String>? = null,
2829
) : DialogWrapper(project) {
2930

3031
private val env = GraphQLConfigEnvironment.getInstance(project)
@@ -57,6 +58,10 @@ class GraphQLEnvironmentVariablesDialog(
5758

5859
private fun createVariablesTable(): EnvVariablesTable {
5960
return environment.variables
61+
.asSequence()
62+
.filter {
63+
nameFilter == null || it.key in nameFilter
64+
}
6065
.filter {
6166
if (onlyEmpty) {
6267
it.value.isNullOrBlank()
@@ -67,6 +72,7 @@ class GraphQLEnvironmentVariablesDialog(
6772
.map {
6873
EnvironmentVariable(it.key, env.getExplicitVariable(it.key, fileOrDir), false)
6974
}
75+
.toList()
7076
.let { MyEnvVariablesTable(it) }
7177
}
7278

src/main/com/intellij/lang/jsgraphql/ide/config/env/GraphQLExpandVariableContext.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ private fun expandVariable(value: Any, context: GraphQLExpandVariableContext) =
4343
internal fun extractEnvironmentVariables(
4444
project: Project,
4545
isLegacy: Boolean,
46-
vararg items: Any,
46+
vararg items: Any?,
4747
): Collection<String> {
4848
val variables = mutableSetOf<String>()
4949
val parser = GraphQLConfigEnvironmentParser.getInstance(project)

src/main/com/intellij/lang/jsgraphql/ide/config/model/GraphQLConfigEndpoint.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
*/
88
package com.intellij.lang.jsgraphql.ide.config.model
99

10-
import com.intellij.lang.jsgraphql.ide.config.env.GraphQLConfigEnvironment
11-
import com.intellij.lang.jsgraphql.ide.config.env.GraphQLEnvironmentSnapshot
10+
import com.intellij.lang.jsgraphql.ide.config.env.*
1211
import com.intellij.lang.jsgraphql.ide.config.env.GraphQLExpandVariableContext
1312
import com.intellij.lang.jsgraphql.ide.config.env.expandVariables
13+
import com.intellij.lang.jsgraphql.ide.config.env.extractEnvironmentVariables
1414
import com.intellij.lang.jsgraphql.ide.config.loader.GraphQLRawEndpoint
1515
import com.intellij.lang.jsgraphql.ide.config.loader.GraphQLRawSchemaPointer
1616
import com.intellij.lang.jsgraphql.ide.config.parseMap
@@ -49,11 +49,10 @@ class GraphQLConfigEndpoint(
4949

5050
val schemaPointer: GraphQLSchemaPointer? = rawSchemaPointer?.let { GraphQLSchemaPointer(project, dir, it, isLegacy, environment) }
5151

52-
fun withUpdatedEnvironment(): GraphQLConfigEndpoint {
53-
val updatedEnvironment =
54-
GraphQLConfigEnvironment.getInstance(project).createSnapshot(environment.variables.keys, dir)
55-
return GraphQLConfigEndpoint(project, rawData, dir, isLegacy, updatedEnvironment, rawSchemaPointer, config)
56-
}
52+
val usedVariables: Collection<String> = extractEnvironmentVariables(project, isLegacy, rawData.url, rawData.headers)
53+
54+
fun withUpdatedEnvironment(): GraphQLConfigEndpoint =
55+
GraphQLConfigEndpoint(project, rawData, dir, isLegacy, environment.update(project, dir), rawSchemaPointer, config)
5756

5857
private fun createExpandContext() = GraphQLExpandVariableContext(project, dir, isLegacy, environment)
5958

src/main/com/intellij/lang/jsgraphql/ide/introspection/GraphQLIntrospectionUtil.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ fun promptForEnvVariables(project: Project, endpoint: GraphQLConfigEndpoint?): G
5252
if (endpoint == null) return null
5353

5454
val environment = endpoint.environment
55-
val hasMissingVariableValues = environment.hasMissingValues
55+
val hasMissingVariableValues = environment.hasMissingValues(endpoint.usedVariables)
5656
if (hasMissingVariableValues) {
57-
val variableDialog = GraphQLEnvironmentVariablesDialog(project, environment, endpoint.dir, true)
57+
val variableDialog = GraphQLEnvironmentVariablesDialog(project, environment, endpoint.dir, true, endpoint.usedVariables)
5858
if (!variableDialog.showAndGet()) {
5959
return null
6060
}

0 commit comments

Comments
 (0)