UNPKG

@modernpoacher/sprockets

Version:
95 lines (79 loc) 1.9 kB
/** * @typedef {SprocketsTypes.ErrorDefinitionType} ErrorDefinitionType * @typedef {SprocketsTypes.Sprockets.SprocketProps} SprocketProps * @typedef {SprocketsTypes.Sprockets.ErrorSummary.ErrorSummaryProps} ErrorSummaryProps */ /** * ErrorSummarySprocket component */ import React from 'react' import PropTypes from 'prop-types' import classnames from 'classnames' import Sprocket from '#sprockets/sprockets' import Title from '#sprockets/sprockets/error-summary/title' import Group from '#sprockets/sprockets/error-summary/group' /** * @type {ErrorDefinitionType[]} */ const DEFAULT_ERROR_SUMMARY = [] /** * @extends {Sprocket<SprocketProps & ErrorSummaryProps>} */ export default class ErrorSummarySprocket extends Sprocket { getClassName () { return classnames(super.getClassName(), 'error-summary') } /** * @param {ErrorSummaryProps} props * @returns {boolean} */ shouldComponentUpdate (props) { const { errorSummary, ...superProps } = props return ( super.shouldComponentUpdate(superProps) || (errorSummary !== this.props.errorSummary) ) } renderTitle () { const { title } = this.props return ( <Title title={title} /> ) } renderGroup () { const { errorSummary = DEFAULT_ERROR_SUMMARY } = this.props return ( <Group errorSummary={errorSummary} /> ) } render () { const { errorSummary = DEFAULT_ERROR_SUMMARY } = this.props if (errorSummary.length) { const className = this.getClassName() return ( <div tabIndex={-1} className={className}> {this.renderTitle()} {this.renderGroup()} </div> ) } return null } } ErrorSummarySprocket.propTypes = { ...Sprocket.propTypes, errorSummary: PropTypes.arrayOf(PropTypes.shape({})) }