Skip to content

Commit 0cb381b

Browse files
committed
Add usage hints next to the run option fields
1 parent edcc246 commit 0cb381b

File tree

1 file changed

+45
-34
lines changed
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test.tasks.$taskParam

1 file changed

+45
-34
lines changed

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.test.tasks.$taskParam/route.tsx

Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,8 @@ function StandardTaskForm({
469469
</ResizablePanel>
470470
<ResizableHandle id="test-task-handle" />
471471
<ResizablePanel id="test-task-options" min="285px" default="285px" max="360px">
472-
<div className="h-full">
473-
<Fieldset className="grow overflow-y-scroll px-3 py-3">
472+
<div className="h-full overflow-y-scroll">
473+
<Fieldset className="px-3 py-3">
474474
<InputGroup>
475475
<Label>Delay</Label>
476476
<DurationPicker name={delaySeconds.name} id={delaySeconds.id} />
@@ -484,23 +484,9 @@ function StandardTaskForm({
484484
value={ttlValue}
485485
onChange={setTtlValue}
486486
/>
487+
<Hint>The run will expire if it hasn't started within the TTL (time to live).</Hint>
487488
<FormError id={ttlSeconds.errorId}>{ttlSeconds.error}</FormError>
488489
</InputGroup>
489-
<InputGroup>
490-
<Label htmlFor={idempotencyKey.id}>Idempotency key</Label>
491-
<Input {...conform.input(idempotencyKey, { type: "text" })} variant="small" />
492-
<FormError id={idempotencyKey.errorId}>{idempotencyKey.error}</FormError>
493-
</InputGroup>
494-
<InputGroup>
495-
<Label>Idempotency key TTL</Label>
496-
<DurationPicker
497-
name={idempotencyKeyTTLSeconds.name}
498-
id={idempotencyKeyTTLSeconds.id}
499-
/>
500-
<FormError id={idempotencyKeyTTLSeconds.errorId}>
501-
{idempotencyKeyTTLSeconds.error}
502-
</FormError>
503-
</InputGroup>
504490
<InputGroup>
505491
<Label htmlFor={queue.id}>Queue</Label>
506492
<Select
@@ -543,14 +529,16 @@ function StandardTaskForm({
543529
<FormError id={queue.errorId}>{queue.error}</FormError>
544530
</InputGroup>
545531
<InputGroup>
546-
<Label htmlFor={concurrencyKey.id}>Concurrency key</Label>
547-
<Input
548-
{...conform.input(concurrencyKey, { type: "text" })}
532+
<Label htmlFor={tags.id}>Tags</Label>
533+
<RunTagInput
534+
name={tags.name}
535+
id={tags.id}
549536
variant="small"
550-
value={concurrencyKeyValue ?? ""}
551-
onChange={(e) => setConcurrencyKeyValue(e.target.value)}
537+
tags={tagsValue}
538+
onTagsChange={setTagsValue}
552539
/>
553-
<FormError id={concurrencyKey.errorId}>{concurrencyKey.error}</FormError>
540+
<Hint>Tags enable you to easily filter runs.</Hint>
541+
<FormError id={tags.errorId}>{tags.error}</FormError>
554542
</InputGroup>
555543
<InputGroup>
556544
<Label htmlFor={maxAttempts.id}>Max attempts</Label>
@@ -588,17 +576,6 @@ function StandardTaskForm({
588576
/>
589577
<FormError id={maxDurationSeconds.errorId}>{maxDurationSeconds.error}</FormError>
590578
</InputGroup>
591-
<InputGroup>
592-
<Label htmlFor={tags.id}>Tags</Label>
593-
<RunTagInput
594-
name={tags.name}
595-
id={tags.id}
596-
variant="small"
597-
tags={tagsValue}
598-
onTagsChange={setTagsValue}
599-
/>
600-
<FormError id={tags.errorId}>{tags.error}</FormError>
601-
</InputGroup>
602579
<InputGroup>
603580
<Label htmlFor={version.id}>Version</Label>
604581
<Select
@@ -620,6 +597,40 @@ function StandardTaskForm({
620597
)}
621598
<FormError id={version.errorId}>{version.error}</FormError>
622599
</InputGroup>
600+
<InputGroup>
601+
<Label htmlFor={idempotencyKey.id}>Idempotency key</Label>
602+
<Input {...conform.input(idempotencyKey, { type: "text" })} variant="small" />
603+
<FormError id={idempotencyKey.errorId}>{idempotencyKey.error}</FormError>
604+
<Hint>
605+
Specify an idempotency key to ensure that a task is only triggered once with the
606+
same key.
607+
</Hint>
608+
</InputGroup>
609+
<InputGroup>
610+
<Label>Idempotency key TTL</Label>
611+
<DurationPicker
612+
name={idempotencyKeyTTLSeconds.name}
613+
id={idempotencyKeyTTLSeconds.id}
614+
/>
615+
<Hint>By default, idempotency keys expire after 30 days.</Hint>
616+
<FormError id={idempotencyKeyTTLSeconds.errorId}>
617+
{idempotencyKeyTTLSeconds.error}
618+
</FormError>
619+
</InputGroup>
620+
<InputGroup>
621+
<Label htmlFor={concurrencyKey.id}>Concurrency key</Label>
622+
<Input
623+
{...conform.input(concurrencyKey, { type: "text" })}
624+
variant="small"
625+
value={concurrencyKeyValue ?? ""}
626+
onChange={(e) => setConcurrencyKeyValue(e.target.value)}
627+
/>
628+
<Hint>
629+
Concurrency keys enable you limit concurrency by creating a separate queue for
630+
each value of the key.
631+
</Hint>
632+
<FormError id={concurrencyKey.errorId}>{concurrencyKey.error}</FormError>
633+
</InputGroup>
623634
<FormError>{form.error}</FormError>
624635
</Fieldset>
625636
</div>

0 commit comments

Comments
 (0)