fix(i18n): translate block names in completion modal (#41516)

* fix(i18n): translate block names in completion modal

* fix: update snapshot

* fix: update test and snapshot betterish

* fix: remove dasherize usage

* Update client/src/templates/Challenges/video/Show.js

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>

* Update client/src/templates/Challenges/projects/frontend/Show.js

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>

* fix: add block props to backend Show.js

Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
This commit is contained in:
Tom
2021-03-23 15:29:16 -05:00
committed by GitHub
parent fe0732e357
commit 73e5c4d935
8 changed files with 38 additions and 13 deletions

View File

@ -277,8 +277,10 @@ class ShowClassic extends Component {
render() { render() {
const { const {
block,
fields: { blockName }, fields: { blockName },
forumTopicId, forumTopicId,
superBlock,
title title
} = this.getChallenge(); } = this.getChallenge();
const { const {
@ -331,7 +333,11 @@ class ShowClassic extends Component {
testOutput={this.renderTestOutput()} testOutput={this.renderTestOutput()}
/> />
</Media> </Media>
<CompletionModal blockName={blockName} /> <CompletionModal
block={block}
blockName={blockName}
superBlock={superBlock}
/>
<HelpModal /> <HelpModal />
<VideoModal videoUrl={this.getVideoUrl()} /> <VideoModal videoUrl={this.getVideoUrl()} />
<ResetModal /> <ResetModal />

View File

@ -70,6 +70,7 @@ const mapDispatchToProps = function (dispatch) {
const propTypes = { const propTypes = {
allowBlockDonationRequests: PropTypes.func, allowBlockDonationRequests: PropTypes.func,
block: PropTypes.string,
blockName: PropTypes.string, blockName: PropTypes.string,
close: PropTypes.func.isRequired, close: PropTypes.func.isRequired,
completedChallengesIds: PropTypes.array, completedChallengesIds: PropTypes.array,
@ -81,6 +82,7 @@ const propTypes = {
isSignedIn: PropTypes.bool.isRequired, isSignedIn: PropTypes.bool.isRequired,
message: PropTypes.string, message: PropTypes.string,
submitChallenge: PropTypes.func.isRequired, submitChallenge: PropTypes.func.isRequired,
superBlock: PropTypes.string,
t: PropTypes.func.isRequired, t: PropTypes.func.isRequired,
title: PropTypes.string title: PropTypes.string
}; };
@ -184,13 +186,14 @@ export class CompletionModalInner extends Component {
render() { render() {
const { const {
blockName = '', block,
close, close,
isOpen, isOpen,
message, message,
t, t,
title, title,
isSignedIn isSignedIn,
superBlock = ''
} = this.props; } = this.props;
const { completedPercent } = this.state; const { completedPercent } = this.state;
@ -220,8 +223,9 @@ export class CompletionModalInner extends Component {
</Modal.Header> </Modal.Header>
<Modal.Body className='completion-modal-body'> <Modal.Body className='completion-modal-body'>
<CompletionModalBody <CompletionModalBody
blockName={blockName} block={block}
completedPercent={completedPercent} completedPercent={completedPercent}
superBlock={superBlock}
/> />
</Modal.Body> </Modal.Body>
<Modal.Footer> <Modal.Footer>

View File

@ -5,8 +5,9 @@ import GreenPass from '../../../assets/icons/GreenPass';
import { withTranslation } from 'react-i18next'; import { withTranslation } from 'react-i18next';
const propTypes = { const propTypes = {
blockName: PropTypes.string, block: PropTypes.string,
completedPercent: PropTypes.number, completedPercent: PropTypes.number,
superBlock: PropTypes.string,
t: PropTypes.func.isRequired t: PropTypes.func.isRequired
}; };
@ -58,7 +59,8 @@ export class CompletionModalBody extends PureComponent {
} }
render() { render() {
const { blockName, completedPercent, t } = this.props; const { block, completedPercent, superBlock, t } = this.props;
const blockTitle = t(`intro:${superBlock}.blocks.${block}.title`);
return ( return (
<> <>
@ -73,7 +75,7 @@ export class CompletionModalBody extends PureComponent {
/> />
</div> </div>
<div className='completion-block-details'> <div className='completion-block-details'>
<div className='completion-block-name'>{blockName}</div> <div className='completion-block-name'>{blockTitle}</div>
<div className='progress-bar-wrap'> <div className='progress-bar-wrap'>
<div className='progress-bar-background'> <div className='progress-bar-background'>
{t('learn.percent-complete', { {t('learn.percent-complete', {

View File

@ -6,8 +6,9 @@ import { render, fireEvent } from '@testing-library/react';
import CompletionModalBody from './CompletionModalBody'; import CompletionModalBody from './CompletionModalBody';
const props = { const props = {
blockName: 'Basic HTML and HTML5', block: 'basic-html-and-html5',
completedPercent: Math.floor(Math.random() * 101) completedPercent: Math.floor(Math.random() * 101),
superBlock: 'responsive-web-design'
}; };
describe('<CompletionModalBody />', () => { describe('<CompletionModalBody />', () => {

View File

@ -64,7 +64,7 @@ exports[`<CompletionModalBody /> matches snapshot 1`] = `
<div <div
class="completion-block-name" class="completion-block-name"
> >
Basic HTML and HTML5 intro:responsive-web-design.blocks.basic-html-and-html5.title
</div> </div>
<div <div
class="progress-bar-wrap" class="progress-bar-wrap"

View File

@ -233,7 +233,11 @@ export class BackEnd extends Component {
<TestSuite tests={tests} /> <TestSuite tests={tests} />
<Spacer /> <Spacer />
</Col> </Col>
<CompletionModal blockName={blockName} /> <CompletionModal
block={block}
blockName={blockName}
superBlock={superBlock}
/>
<HelpModal /> <HelpModal />
</Row> </Row>
</Grid> </Grid>

View File

@ -176,7 +176,11 @@ export class Project extends Component {
<br /> <br />
<Spacer /> <Spacer />
</Col> </Col>
<CompletionModal blockName={blockName} /> <CompletionModal
block={block}
blockName={blockName}
superBlock={superBlock}
/>
<HelpModal /> <HelpModal />
</Row> </Row>
</Grid> </Grid>

View File

@ -298,7 +298,11 @@ export class Project extends Component {
</Button> </Button>
<Spacer size={2} /> <Spacer size={2} />
</Col> </Col>
<CompletionModal blockName={blockName} /> <CompletionModal
block={block}
blockName={blockName}
superBlock={superBlock}
/>
</Row> </Row>
</Grid> </Grid>
</LearnLayout> </LearnLayout>