import React from 'react'; import type { IPipelineTemplatePlanError } from './PipelineTemplateReader'; export interface ITemplatePlanErrorsProps { errors: IPipelineTemplatePlanError[]; } export class TemplatePlanErrors extends React.Component { public render() { if (this.props.errors && this.props.errors.length) { return (
Error {this.props.errors.length > 1 ? 's' : ''}: {this.props.errors.map((e) => this.buildErrorMessage(e))}
); } else { return (
Error: No message provided
); } } private buildErrorMessage(e: IPipelineTemplatePlanError, paddingLeft = 15): JSX.Element { return (
{e.message &&
Message: {e.message}
} {e.severity &&
Severity: {e.severity}
} {e.location &&
Location: {e.location}
} {e.cause &&
Cause: {e.cause}
} {e.suggestion &&
Suggestion: {e.suggestion}
} {e.details && (
{' '} Details:
    {Object.keys(e.details).map((key) => (
  • {key}: {e.details[key]}
  • ))}
)} {e.nestedErrors && (
{' '} Nested Errors: {e.nestedErrors.map((nestedError) => this.buildErrorMessage(nestedError, paddingLeft + 15))}
)}
); } private buildErrorKey(e: IPipelineTemplatePlanError): string { return `${e.message}:${e.severity}:${e.location}:${e.cause}`; } }