@@ -48,4 +48,139 @@ export const defaultCode = `terraform {
48
48
version = "2.5.3"
49
49
}
50
50
}
51
+ }
52
+
53
+ # This example shows new form types and conditionality using dynamic parameters.
54
+ # When starting from scratch, retain the providers block above.
55
+ #
56
+ # In the playground, you can get started with:
57
+ # - snippets for parameter types
58
+ # - example forms for advanced use
59
+ # - documentation for how and when to enable Dynamic Parameters.
60
+ #
61
+ # You can edit user data in the "users" tab, and share your form via URL.
62
+ # Enjoy Dynamic Parameters!
63
+
64
+ locals {
65
+ ides = [
66
+ {
67
+ name = "VSCode",
68
+ value = "vscode",
69
+ icon = "/icon/code.svg"
70
+ },
71
+ {
72
+ name = "Jetbrains IntelliJ",
73
+ value = "intellij",
74
+ icon = "/icon/intellij.svg"
75
+ },
76
+ {
77
+ name = "Cursor",
78
+ value = "cursor",
79
+ icon = "/icon/cursor.svg"
80
+ },
81
+ ]
82
+
83
+ username = data.coder_workspace_owner.me.name
84
+ is_admin = contains(data.coder_workspace_owner.me.groups, "admin")
85
+ }
86
+
87
+ data "coder_workspace_owner" "me" {}
88
+
89
+ data "coder_parameter" "dropdown_picker" {
90
+ name = "dropdown_picker"
91
+ display_name = "Pick your next parameter!"
92
+ description = "Hello \${username}, pick your next parameter using this \`dropdown\` parameter."
93
+ form_type = "dropdown"
94
+ mutable = true
95
+
96
+ option {
97
+ value = "ide_picker"
98
+ name = "IDE multi-select"
99
+ }
100
+
101
+ option {
102
+ value = "text_area"
103
+ name = "Large text entry"
104
+ }
105
+
106
+ option {
107
+ value = "cpu_slider"
108
+ name = "CPU slider"
109
+ }
110
+ }
111
+
112
+ data "coder_parameter" "ide_picker" {
113
+ count = try(data.coder_parameter.dropdown_picker.value, "") == "ide_picker" ? 1 : 0
114
+
115
+ name = "ide_picker"
116
+ display_name = "Pick your IDEs!"
117
+ description = "This is created using the \`form_type = 'multi-select'\` option."
118
+
119
+ type = "list(string)"
120
+ form_type = "multi-select"
121
+ order = 2
122
+ mutable = true
123
+
124
+ dynamic "option" {
125
+ for_each = local.ides
126
+ content {
127
+ name = option.value.name
128
+ value = option.value.value
129
+ description = option.value.description
130
+ icon = option.value.icon
131
+ }
132
+ }
133
+ }
134
+
135
+ data "coder_parameter" "text_area" {
136
+ count = try(data.coder_parameter.dropdown_picker.value, "") == "text_area" ? 1 : 0
137
+
138
+ name = "text_area"
139
+ display_name = "Enter a large AI prompt or script!"
140
+ description = "This is created using the \`form_type = 'textarea'\` option."
141
+
142
+ type = "string"
143
+ form_type = "textarea"
144
+ order = 2
145
+ mutable = true
146
+
147
+ styling = jsonencode({
148
+ placeholder = <<-EOT
149
+ This is a large text entry, try it out!
150
+
151
+ Including support for multi-line text entry.
152
+ EOT
153
+ })
154
+ }
155
+
156
+ data "coder_parameter" "cpu_slider" {
157
+ count = try(data.coder_parameter.dropdown_picker.value, "") == "cpu_slider" ? 1 : 0
158
+ name = "cpu_slider"
159
+ display_name = "CPU Cores Slider"
160
+ description = "This is created using the \`form_type = 'slider'\` option."
161
+
162
+ type = "number"
163
+ form_type = "slider"
164
+ order = 2
165
+ default = 4
166
+ mutable = true
167
+
168
+ validation {
169
+ min = 2
170
+ max = 8
171
+ }
172
+ }
173
+
174
+ data "coder_parameter" "admin_only" {
175
+ count = local.is_admin ? 1 : 0
176
+
177
+ name = "admin_only"
178
+ display_name = "Use imaginary experimental features?"
179
+ description = "This option is only available to those in the 'admin' group. You can hide it by changing your user data. \\n\\n _This does not actually enable experimental features._"
180
+
181
+ type = "bool"
182
+ form_type = "checkbox"
183
+ default = false
184
+
185
+ order = 5
51
186
}` ;
0 commit comments