"inWarningGroup", "disabled", ]; return triggeringUpdateProps.some( prop => this.props[prop] !== nextProps[prop] ); } render() { const message = this.props.getMessage(); const MessageComponent = getMessageComponent(message); return MessageComponent(Object.assign({ message }, this.props)); } } function getMessageComponent(message) { if (!message) { return DefaultRenderer; } switch (message.source) { case MESSAGE_SOURCE.CONSOLE_API: return ConsoleApiCall; case MESSAGE_SOURCE.JSTRACER: return JSTracerTrace; case MESSAGE_SOURCE.NETWORK: return NetworkEventMessage; case MESSAGE_SOURCE.CSS: return CSSWarning; case MESSAGE_SOURCE.JAVASCRIPT: switch (message.type) { case MESSAGE_TYPE.COMMAND: return ConsoleCommand; case MESSAGE_TYPE.RESULT: return EvaluationResult; // @TODO this is probably not the right behavior, but works for now. // Chrome doesn't distinguish between page errors and log messages. We // may want to remove the PageError component and just handle errors // with ConsoleApiCall. case MESSAGE_TYPE.LOG: return PageError; default: return DefaultRenderer; } case MESSAGE_SOURCE.CONSOLE_FRONTEND: if (isWarningGroup(message)) { return WarningGroup; } if (message.type === MESSAGE_TYPE.SIMPLE_TABLE) { return SimpleTable; } if (message.type === MESSAGE_TYPE.NAVIGATION_MARKER) { return NavigationMarker; } break; } return DefaultRenderer; } module.exports.MessageContainer = MessageContainer; // Exported so we can test it with unit tests. module.exports.getMessageComponent = getMessageComponent; PK