import React, {PureComponent, PropTypes} from 'react'; import autobind from 'autobind-decorator'; import KeyValueEditor from '../key-value-editor/editor'; import CodeEditor from '../codemirror/code-editor'; import {trackEvent} from '../../../analytics/index'; import allHeaderNames from '../../../datasets/header-names'; import allCharsets from '../../../datasets/charsets'; import allMimeTypes from '../../../datasets/content-types'; import allEncodings from '../../../datasets/encodings'; @autobind class RequestHeadersEditor extends PureComponent { _handleBulkUpdate (headersString) { this.props.onChange(this._getHeadersFromString(headersString)); } _handleTrackToggle (pair) { trackEvent('Headers Editor', 'Toggle', pair.disabled ? 'Disable' : 'Enable'); } _handleTrackCreate () { trackEvent('Headers Editor', 'Create'); } _handleTrackDelete () { trackEvent('Headers Editor', 'Delete'); } _getHeadersFromString (headersString) { const headers = []; const rows = headersString.split(/[\n,]+/); for (const row of rows) { const [rawName, ...items] = row.split(':'); const name = (rawName || '').trim(); const value = (items.join(':')).trim(); headers.push({name, value}); } return headers; } _getHeadersString () { const {headers} = this.props; let headersString = ''; for (const header of headers) { // Make sure it's not disabled if (header.disabled) { continue; } // Make sure it's a valid header (key + value) if (!header.name || !header.value) { continue; } headersString += `${header.name}: ${header.value}\n`; } return headersString; } _getCommonHeaderValues (pair) { switch (pair.name.toLowerCase()) { case 'content-type': case 'accept': return allMimeTypes; case 'accept-charset': return allCharsets; case 'accept-encoding': return allEncodings; default: return []; } } _getCommonHeaderNames (pair) { return allHeaderNames; } render () { const { bulk, headers, editorFontSize, editorIndentSize, editorLineWrapping, onChange, handleRender, handleGetRenderContext } = this.props; return bulk ? (