diff --git a/src/components/ListItem.tsx b/src/components/ListItem.tsx index 0320a8c5..17130eb7 100644 --- a/src/components/ListItem.tsx +++ b/src/components/ListItem.tsx @@ -46,12 +46,25 @@ function formatDistance (time: number) { } } +const RESERVED_KEYS = new Set(['body', 'timestamp', 'query', 'x-github-event', 'x-github-delivery']) + +function getHeaders (item: Record): Record { + const headers: Record = {} + for (const [key, value] of Object.entries(item)) { + if (!RESERVED_KEYS.has(key) && typeof value === 'string') { + headers[key] = value + } + } + return headers +} + export default class ListItem extends Component< { item: { 'x-github-event': string, body: { action: string, [key: string]: unknown }, - timestamp: number + timestamp: number, + [key: string]: unknown }, now: number, last: boolean, @@ -61,6 +74,7 @@ export default class ListItem extends Component< expanded: boolean copied: boolean redelivered: boolean + headersExpanded: boolean }> { handleToggleExpanded: () => void constructor (props) { @@ -68,7 +82,7 @@ export default class ListItem extends Component< this.handleToggleExpanded = () => this.setState({ expanded: !this.state.expanded }) this.handleCopy = this.handleCopy.bind(this) this.handleRedeliver = this.handleRedeliver.bind(this) - this.state = { expanded: false, copied: false, redelivered: false } + this.state = { expanded: false, copied: false, redelivered: false, headersExpanded: false } } handleCopy () { @@ -91,18 +105,19 @@ export default class ListItem extends Component< } render () { - const { expanded, copied, redelivered } = this.state + const { expanded, copied, redelivered, headersExpanded } = this.state const { now, item, last, pinned, togglePinned } = this.props const event = item['x-github-event'] const payload = item.body const id = item['x-github-delivery'] || item.timestamp + const headers = getHeaders(item) return (
  • - +
    {event} @@ -140,6 +155,34 @@ export default class ListItem extends Component<
    + {Object.keys(headers).length > 0 && ( + <> +
    +
    +
    this.setState({ headersExpanded: !headersExpanded })} + > + {headersExpanded ? '▾' : '▸'} Headers ({Object.keys(headers).length}) +
    + {headersExpanded && ( +
    + + + {Object.entries(headers).map(([key, value]) => ( + + + + + ))} + +
    {key}{value}
    +
    + )} +
    + + )}
    Payload