Skip to content

Commit

Permalink
fix: preview form data payload in a table (#92)
Browse files Browse the repository at this point in the history
  • Loading branch information
e-fisher authored Aug 9, 2024
1 parent 69ba84d commit d0dd57a
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 4 deletions.
31 changes: 31 additions & 0 deletions src/components/WebLogView/RequestDetails/FormPayloadPreview.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { safeJsonParse } from '@/utils/json'
import { Table } from '@radix-ui/themes'

export function FormPayloadPreview({
payloadJsonString,
}: {
payloadJsonString: string
}) {
const contentObject = safeJsonParse<Record<string, string>>(payloadJsonString)

return (
<Table.Root size="1" variant="surface">
<Table.Header>
<Table.Row>
<Table.ColumnHeaderCell>Name</Table.ColumnHeaderCell>
<Table.ColumnHeaderCell>Value</Table.ColumnHeaderCell>
</Table.Row>
</Table.Header>

<Table.Body>
{contentObject &&
Object.entries(contentObject).map(([key, value]) => (
<Table.Row key={key}>
<Table.Cell>{key}</Table.Cell>
<Table.Cell>{value}</Table.Cell>
</Table.Row>
))}
</Table.Body>
</Table.Root>
)
}
7 changes: 7 additions & 0 deletions src/components/WebLogView/RequestDetails/Payload.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import { ProxyData } from '@/types'

import { ReadOnlyEditor } from '../../Monaco/ReadOnlyEditor'
import { parseParams } from './utils'
import { getContentType } from '@/utils/headers'
import { FormPayloadPreview } from './FormPayloadPreview'

export function Payload({ data }: { data: ProxyData }) {
const content = parseParams(data)
const contentType = getContentType(data.request?.headers ?? [])

if (!content) {
return (
Expand All @@ -16,5 +19,9 @@ export function Payload({ data }: { data: ProxyData }) {
)
}

if (contentType === 'application/x-www-form-urlencoded') {
return <FormPayloadPreview payloadJsonString={content} />
}

return <ReadOnlyEditor language="javascript" value={content} />
}
2 changes: 1 addition & 1 deletion src/proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export const launchProxy = (
return
}

const proxyData: ProxyData = safeJsonParse(data)
const proxyData = safeJsonParse<ProxyData>(data)
if (proxyData) {
browserWindow.webContents.send('proxy:data', proxyData)
}
Expand Down
2 changes: 1 addition & 1 deletion src/rules/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export const setJsonObjectFromPath = (
value: string
) => {
const jsonObject = safeJsonParse(json)
set(jsonObject, path, value)
set(jsonObject ?? {}, path, value)
return JSON.stringify(jsonObject)
}

Expand Down
4 changes: 2 additions & 2 deletions src/utils/json.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export function safeJsonParse(value: string) {
export function safeJsonParse<T extends object>(value: string) {
try {
return JSON.parse(value)
return JSON.parse(value) as T
} catch (error) {
console.error('Failed to parse JSON', error)
return undefined
Expand Down

0 comments on commit d0dd57a

Please sign in to comment.