shinkansen-sprockets
Version:
Shinkansen Sprockets
78 lines (65 loc) • 2.05 kB
JSX
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
}