From 6a2974e55e75c5e923f2f8bca80e2de2db5b237a Mon Sep 17 00:00:00 2001 From: Oliver Eyton-Williams Date: Thu, 20 Jun 2019 10:49:53 +0200 Subject: [PATCH] fix: Refactor challenge mounting and updating componentDidMount and componentDidUpdate share a lot of code. This just DRYs them out. --- .../src/templates/Challenges/backend/Show.js | 40 +++++------- .../src/templates/Challenges/classic/Show.js | 61 ++++++++----------- 2 files changed, 41 insertions(+), 60 deletions(-) diff --git a/client/src/templates/Challenges/backend/Show.js b/client/src/templates/Challenges/backend/Show.js index 97be8fa4ed..1b574341bd 100644 --- a/client/src/templates/Challenges/backend/Show.js +++ b/client/src/templates/Challenges/backend/Show.js @@ -97,23 +97,7 @@ export class BackEnd extends Component { } componentDidMount() { - const { - challengeMounted, - initConsole, - initTests, - updateChallengeMeta, - data: { - challengeNode: { - fields: { tests }, - challengeType - } - }, - pageContext: { challengeMeta } - } = this.props; - initConsole(''); - initTests(tests); - updateChallengeMeta({ ...challengeMeta, challengeType }); - challengeMounted(challengeMeta.id); + this.initializeComponent(); window.addEventListener('resize', this.updateDimensions); } @@ -131,6 +115,17 @@ export class BackEnd extends Component { challengeNode: { title: prevTitle } } } = prevProps; + const { + data: { + challengeNode: { title: currentTitle } + } + } = this.props; + if (prevTitle !== currentTitle) { + this.initializeComponent(); + } + } + + initializeComponent() { const { challengeMounted, initConsole, @@ -138,19 +133,16 @@ export class BackEnd extends Component { updateChallengeMeta, data: { challengeNode: { - title: currentTitle, fields: { tests }, challengeType } }, pageContext: { challengeMeta } } = this.props; - if (prevTitle !== currentTitle) { - initConsole(''); - initTests(tests); - updateChallengeMeta({ ...challengeMeta, challengeType }); - challengeMounted(challengeMeta.id); - } + initConsole(''); + initTests(tests); + updateChallengeMeta({ ...challengeMeta, challengeType }); + challengeMounted(challengeMeta.id); } handleSubmit(values) { diff --git a/client/src/templates/Challenges/classic/Show.js b/client/src/templates/Challenges/classic/Show.js index 868e4d420d..be344e7d64 100644 --- a/client/src/templates/Challenges/classic/Show.js +++ b/client/src/templates/Challenges/classic/Show.js @@ -104,6 +104,31 @@ class ShowClassic extends Component { } componentDidMount() { + const { + data: { + challengeNode: { title } + } + } = this.props; + this.initializeComponent(title); + } + + componentDidUpdate(prevProps) { + const { + data: { + challengeNode: { title: prevTitle } + } + } = prevProps; + const { + data: { + challengeNode: { title: currentTitle } + } + } = this.props; + if (prevTitle !== currentTitle) { + this.initializeComponent(currentTitle); + } + } + + initializeComponent(title) { const { challengeMounted, createFiles, @@ -113,7 +138,6 @@ class ShowClassic extends Component { data: { challengeNode: { files, - title, fields: { tests }, challengeType } @@ -127,41 +151,6 @@ class ShowClassic extends Component { challengeMounted(challengeMeta.id); } - componentDidUpdate(prevProps) { - const { - data: { - challengeNode: { title: prevTitle } - } - } = prevProps; - const { - challengeMounted, - createFiles, - initConsole, - initTests, - updateChallengeMeta, - data: { - challengeNode: { - files, - title: currentTitle, - fields: { tests }, - challengeType - } - }, - pageContext: { challengeMeta } - } = this.props; - if (prevTitle !== currentTitle) { - initConsole(''); - createFiles(files); - initTests(tests); - updateChallengeMeta({ - ...challengeMeta, - title: currentTitle, - challengeType - }); - challengeMounted(challengeMeta.id); - } - } - componentWillUnmount() { const { createFiles } = this.props; createFiles({});