@@ -34,6 +34,8 @@ import { RectangleStackIcon } from "@heroicons/react/20/solid";
3434import { Badge } from "~/components/primitives/Badge" ;
3535import { RunTagInput } from "./RunTagInput" ;
3636import { MachinePresetName } from "@trigger.dev/core/v3" ;
37+ import { InfoIconTooltip } from "~/components/primitives/Tooltip" ;
38+ import { divide } from "effect/Duration" ;
3739
3840type ReplayRunDialogProps = {
3941 runFriendlyId : string ;
@@ -165,7 +167,7 @@ function ReplayForm({
165167 replayData . payloadType === "application/json" ||
166168 replayData . payloadType === "application/super+json" ;
167169
168- const [ tab , setTab ] = useState < "payload" | "metadata" > ( "payload" ) ;
170+ const [ tab , setTab ] = useState < "payload" | "metadata" > ( editablePayload ? "payload" : "metadata ") ;
169171
170172 const { defaultTaskQueue } = replayData ;
171173
@@ -257,15 +259,30 @@ function ReplayForm({
257259 additionalActions = {
258260 < TabContainer className = "flex grow items-baseline justify-between self-end border-none" >
259261 < div className = "flex gap-5" >
260- < TabButton
261- isActive = { tab === "payload" }
262- layoutId = "replay-editor"
263- onClick = { ( ) => {
264- setTab ( "payload" ) ;
265- } }
266- >
267- Payload
268- </ TabButton >
262+ < div className = "flex items-center gap-1.5" >
263+ < TabButton
264+ disabled = { ! editablePayload }
265+ isActive = { tab === "payload" }
266+ layoutId = "replay-editor"
267+ onClick = { ( ) => {
268+ setTab ( "payload" ) ;
269+ } }
270+ >
271+ Payload
272+ </ TabButton >
273+ { ! editablePayload && (
274+ < InfoIconTooltip
275+ content = {
276+ < span className = "text-sm" >
277+ Payload is not editable for runs with{ " " }
278+ < TextLink to = { docsPath ( "triggering#large-payloads" ) } >
279+ large payloads.
280+ </ TextLink >
281+ </ span >
282+ }
283+ />
284+ ) }
285+ </ div >
269286 < TabButton
270287 isActive = { tab === "metadata" }
271288 layoutId = "replay-editor"
0 commit comments