UNPKG

shinkansen-sprockets

Version:
78 lines (65 loc) 2.05 kB
import React from 'react' import PropTypes from 'prop-types' import debug from 'debug' import { Link } from 'react-router' import TextContent from '#sprockets/components/common/text-content' import VisuallyHiddenText from '#sprockets/components/common/visually-hidden-text' const log = debug('shinkansen-sprockets/sprockets/check-answers/group/change-answer') /** * @param {{ textContent?: string, visuallyHiddenText: string }} props * @returns {React.JSX.Element | null} */ function TextContentWithVisuallyHiddenText ({ textContent, visuallyHiddenText }) { return ( <> <TextContent textContent={textContent} /> {String.fromCharCode(32)} <VisuallyHiddenText visuallyHiddenText={visuallyHiddenText.toLowerCase()} /> </> ) } TextContentWithVisuallyHiddenText.propTypes = { textContent: PropTypes.string, visuallyHiddenText: PropTypes.string } /** * @param {{ textContent?: string, visuallyHiddenText?: string }} props * @returns {React.JSX.Element | null} */ function LinkText ({ textContent, visuallyHiddenText }) { if (textContent) { return ( visuallyHiddenText ? <TextContentWithVisuallyHiddenText textContent={textContent} visuallyHiddenText={visuallyHiddenText} /> : <TextContent textContent={textContent} /> ) } return null } LinkText.propTypes = { textContent: PropTypes.string, visuallyHiddenText: PropTypes.string } /** * @param {{ changeAnswer: { href: string, text: string, visuallyHiddenText?: string } }} props * @returns {React.JSX.Element} */ export default function ChangeAnswer ({ changeAnswer: { href, text, visuallyHiddenText } }) { log('ChangeAnswer') return ( <dd className='change-answer'> <Link to={href}> <LinkText textContent={text} visuallyHiddenText={visuallyHiddenText} /> </Link> </dd> ) } ChangeAnswer.propTypes = { changeAnswer: PropTypes.shape({ href: PropTypes.string.isRequired, text: PropTypes.string.isRequired, visuallyHiddenText: PropTypes.string }).isRequired }