@@ -48,4 +48,139 @@ export const defaultCode = `terraform {
4848 version = "2.5.3"
4949 }
5050 }
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
51186}` ;
0 commit comments