|
1 | 1 | import { useState } from "react";
|
2 |
| -import { TextInput, Button, Text, Card } from "@tremor/react"; |
3 |
| -import { TrashIcon } from "@heroicons/react/24/outline"; |
| 2 | +import { TextInput, Button, Text } from "@tremor/react"; |
| 3 | +import { PlusIcon, TrashIcon } from "@heroicons/react/24/outline"; |
4 | 4 | import Modal from "@/components/ui/Modal";
|
5 | 5 |
|
6 | 6 | interface StaticField {
|
@@ -85,8 +85,8 @@ export default function AlertTriggerModal({
|
85 | 85 | };
|
86 | 86 |
|
87 | 87 | const handleAddField = (e: React.FormEvent) => {
|
88 |
| - setDynamicFields([...dynamicFields, { key: "", value: "" }]); |
89 | 88 | e.preventDefault();
|
| 89 | + setDynamicFields([...dynamicFields, { key: "", value: "" }]); |
90 | 90 | };
|
91 | 91 |
|
92 | 92 | const handleSubmit = (e: React.FormEvent) => {
|
@@ -167,89 +167,88 @@ export default function AlertTriggerModal({
|
167 | 167 | <Modal isOpen={isOpen} onClose={onClose} title="Build Alert Payload">
|
168 | 168 | <form onSubmit={handleSubmit}>
|
169 | 169 | {Array.isArray(staticFields) && staticFields.length > 0 && (
|
170 |
| - <Card className="mb-4"> |
| 170 | + <> |
171 | 171 | <Text className="mb-2">Fields Defined As Workflow Filters</Text>
|
172 | 172 | {staticFields.map((field, index) => (
|
173 | 173 | <div key={field.key} className="flex gap-2 mb-2">
|
174 | 174 | <TextInput placeholder="Key" value={field.key} disabled />
|
175 | 175 | <TextInput placeholder="Value" value={field.value} disabled />
|
176 | 176 | </div>
|
177 | 177 | ))}
|
178 |
| - </Card> |
| 178 | + </> |
179 | 179 | )}
|
180 | 180 |
|
181 |
| - <Card className="mb-4"> |
182 |
| - <Text className="mb-2"> |
183 |
| - Fields Needed for Workflow (used in the workflow) |
184 |
| - </Text> |
185 |
| - {Array.isArray(dependencies) && |
186 |
| - dependencies.map((dependencyName, index) => ( |
187 |
| - <div key={dependencyName} className="flex gap-2 mb-2"> |
188 |
| - <TextInput |
189 |
| - placeholder={dependencyName} |
190 |
| - value={dependencyName} |
191 |
| - disabled |
192 |
| - /> |
193 |
| - <TextInput |
194 |
| - className={dependenciesErrors[index] ? "border-red-500" : ""} |
195 |
| - placeholder="value" |
196 |
| - value={dependencyValues[dependencyName] || ""} |
197 |
| - onChange={(e) => |
198 |
| - handleDependencyChange(dependencyName, e.target.value) |
199 |
| - } |
200 |
| - /> |
201 |
| - </div> |
202 |
| - ))} |
203 |
| - </Card> |
204 |
| - |
205 |
| - <Card> |
206 |
| - {dynamicFields.map((field, index) => ( |
207 |
| - <div |
208 |
| - key={index} |
209 |
| - className={`flex items-center gap-2 mb-2 ${ |
210 |
| - fieldErrors[index] ? "border-2 border-red-500 p-2" : "" |
211 |
| - }`} |
212 |
| - > |
| 181 | + <Text className="mb-2"> |
| 182 | + These fields are needed for the workflow to run |
| 183 | + </Text> |
| 184 | + {Array.isArray(dependencies) && |
| 185 | + dependencies.map((dependencyName, index) => ( |
| 186 | + <div key={dependencyName} className="flex gap-2 mb-2"> |
213 | 187 | <TextInput
|
214 |
| - placeholder="Key" |
215 |
| - value={field.key} |
216 |
| - onChange={(e) => |
217 |
| - handleFieldChange(index, "key", e.target.value) |
218 |
| - } |
| 188 | + placeholder={dependencyName} |
| 189 | + value={dependencyName} |
| 190 | + disabled |
219 | 191 | />
|
220 | 192 | <TextInput
|
221 |
| - placeholder="Value" |
222 |
| - value={field.value} |
| 193 | + placeholder="value" |
| 194 | + value={dependencyValues[dependencyName] || ""} |
223 | 195 | onChange={(e) =>
|
224 |
| - handleFieldChange(index, "value", e.target.value) |
| 196 | + handleDependencyChange(dependencyName, e.target.value) |
225 | 197 | }
|
| 198 | + error={dependenciesErrors[index]} |
226 | 199 | />
|
227 |
| - <button |
228 |
| - onClick={() => handleDeleteField(index)} |
229 |
| - className="flex items-center text-gray-500 hover:text-gray-700" |
230 |
| - > |
231 |
| - <TrashIcon className="h-5 w-5" aria-hidden="true" /> |
232 |
| - </button> |
233 | 200 | </div>
|
234 | 201 | ))}
|
235 |
| - <div className="flex justify-center"> |
236 |
| - <Button color="orange" onClick={handleAddField}> |
237 |
| - Add another field |
238 |
| - </Button> |
239 |
| - </div> |
240 |
| - </Card> |
241 | 202 |
|
242 |
| - <div className="mt-4 flex gap-2"> |
243 |
| - <Button color="orange" type="submit"> |
244 |
| - Run workflow |
| 203 | + {dynamicFields.map((field, index) => ( |
| 204 | + <div |
| 205 | + key={index} |
| 206 | + className={`flex items-center gap-2 mb-2 ${ |
| 207 | + fieldErrors[index] ? "border-2 border-red-500 p-2" : "" |
| 208 | + }`} |
| 209 | + > |
| 210 | + <TextInput |
| 211 | + placeholder="Key" |
| 212 | + value={field.key} |
| 213 | + onChange={(e) => handleFieldChange(index, "key", e.target.value)} |
| 214 | + /> |
| 215 | + <TextInput |
| 216 | + placeholder="Value" |
| 217 | + value={field.value} |
| 218 | + onChange={(e) => |
| 219 | + handleFieldChange(index, "value", e.target.value) |
| 220 | + } |
| 221 | + /> |
| 222 | + <button |
| 223 | + onClick={() => handleDeleteField(index)} |
| 224 | + className="flex items-center text-gray-500 hover:text-gray-700" |
| 225 | + > |
| 226 | + <TrashIcon className="h-5 w-5" aria-hidden="true" /> |
| 227 | + </button> |
| 228 | + </div> |
| 229 | + ))} |
| 230 | + <div className="flex justify-end"> |
| 231 | + <Button |
| 232 | + variant="light" |
| 233 | + icon={PlusIcon} |
| 234 | + color="orange" |
| 235 | + onClick={handleAddField} |
| 236 | + > |
| 237 | + Add another field |
245 | 238 | </Button>
|
| 239 | + </div> |
| 240 | + |
| 241 | + <div className="mt-8 flex justify-end gap-2"> |
246 | 242 | <Button
|
247 | 243 | onClick={onClose}
|
248 | 244 | variant="secondary"
|
249 | 245 | className="border border-orange-500 text-orange-500"
|
250 | 246 | >
|
251 | 247 | Cancel
|
252 | 248 | </Button>
|
| 249 | + <Button color="orange" type="submit"> |
| 250 | + Run workflow |
| 251 | + </Button> |
253 | 252 | </div>
|
254 | 253 | </form>
|
255 | 254 | </Modal>
|
|
0 commit comments