Skip to content

Commit 2f8fe7e

Browse files
authored
Merge pull request #281 from linesbetween/i267-more-scroll
Add scroll-down-when-finished feature feature to all applicable pages
2 parents 8ca5ce5 + d923dc8 commit 2f8fe7e

File tree

3 files changed

+71
-18
lines changed

3 files changed

+71
-18
lines changed

src/pages/prescreen-1b.tsx

+12-8
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,25 @@ interface Prescreen1bProps {
5757
}
5858

5959
class Prescreen1b extends React.Component<Prescreen1bProps> {
60+
private earningsSelectRef = React.createRef<HTMLDivElement>();
61+
private howToRef = React.createRef<HTMLDivElement>();
62+
private earningsRecordRef= React.createRef<HTMLDivElement>();
63+
6064
constructor(props: Prescreen1bProps) {
61-
super(props);
62-
this.earningsSelectRef = React.createRef();
63-
this.howToRef = React.createRef();
64-
this.earningsRecordRef = React.createRef();
65+
super(props);
6566
this.showFileUpload = this.showFileUpload.bind(this);
6667
this.showManualTable = this.showManualTable.bind(this);
6768
this.scrollToElement = this.scrollToElement.bind(this);
6869
}
6970

70-
scrollToElement(ref) {
71+
scrollToElement(ref: React.RefObject<HTMLDivElement>){
7172
if (gatsbyScrollWhenFinish) {
72-
setTimeout(() => {
73-
ref.current.scrollIntoView({ behavior: 'smooth', block: 'start' });
74-
}, 100)
73+
const node = ref.current;
74+
setTimeout(() => {
75+
if(node) {
76+
node.scrollIntoView({ behavior: 'smooth', block: 'start'});
77+
}
78+
}, 100);
7579
}
7680
}
7781

src/pages/prescreen-1c.tsx

+33-5
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,25 @@ interface Prescreen1cProps {
4646
}
4747

4848
class Prescreen1c extends React.Component<Prescreen1cProps> {
49+
50+
private pensionTypeRef = React.createRef<HTMLDivElement>();
51+
private pensionAmountRef = React.createRef<HTMLDivElement>();
52+
53+
constructor(props: Prescreen1cProps) {
54+
super(props);
55+
}
56+
57+
scrollToElement(ref: React.RefObject<HTMLDivElement>) {
58+
setTimeout(() => {
59+
if(ref && ref.current) {
60+
ref.current.scrollIntoView({
61+
behavior: 'smooth',
62+
block: 'start'});
63+
}
64+
},100);
65+
66+
}
67+
4968
handleDateAwardedChange = (value: Date) => {
5069
const {userStateActions: {setPensionDateAwarded}} = this.props
5170
setPensionDateAwarded(value)
@@ -106,6 +125,7 @@ class Prescreen1c extends React.Component<Prescreen1cProps> {
106125
value="true"
107126
checked={isEmploymentCovered === true}
108127
onChange={this.handleSelection}
128+
onClick={() => this.scrollToElement(this.pensionTypeRef)}
109129
/>
110130
<LabelText>Yes</LabelText>
111131
</AnswerBox>
@@ -134,22 +154,30 @@ class Prescreen1c extends React.Component<Prescreen1cProps> {
134154
</CardGlossaryContainer>
135155
{isEmploymentCovered && (
136156
<CardGlossaryContainer>
137-
<Card>
157+
<Card ref={this.pensionTypeRef}>
138158
<QuestionText>
139159
Do you have a pension or retirement account from
140160
the work you did that does not show up on your
141161
Social Security record?
142162
</QuestionText>
143163
<AnswerBox>
144-
<RadioButton type="radio" name="pensionOrRetirementAccount" value={PensionEnum.PENSION} onChange={this.handleSelection} checked={pensionOrRetirementAccount === PensionEnum.PENSION} />
164+
<RadioButton type="radio" name="pensionOrRetirementAccount" value={PensionEnum.PENSION}
165+
onChange={this.handleSelection}
166+
onClick={() => this.scrollToElement(this.pensionAmountRef)}
167+
checked={pensionOrRetirementAccount === PensionEnum.PENSION} />
145168
<LabelText>Monthly pension</LabelText>
146169
</AnswerBox>
147170
<AnswerBox>
148-
<RadioButton type="radio" name="pensionOrRetirementAccount" value={PensionEnum.LUMPSUM} onChange={this.handleSelection} checked={pensionOrRetirementAccount === PensionEnum.LUMPSUM} />
171+
<RadioButton type="radio" name="pensionOrRetirementAccount" value={PensionEnum.LUMPSUM}
172+
onChange={this.handleSelection}
173+
onClick={() => this.scrollToElement(this.pensionAmountRef)}
174+
checked={pensionOrRetirementAccount === PensionEnum.LUMPSUM} />
149175
<LabelText>Retirement account</LabelText>
150176
</AnswerBox>
151177
<AnswerBox>
152-
<RadioButton type="radio" name="pensionOrRetirementAccount" value={PensionEnum.NONEOFABOVE} onChange={this.handleSelection} checked={pensionOrRetirementAccount === PensionEnum.NONEOFABOVE} />
178+
<RadioButton type="radio" name="pensionOrRetirementAccount" value={PensionEnum.NONEOFABOVE}
179+
onChange={this.handleSelection}
180+
checked={pensionOrRetirementAccount === PensionEnum.NONEOFABOVE} />
153181
<LabelText>None of the above</LabelText>
154182
</AnswerBox>
155183
</Card>
@@ -166,7 +194,7 @@ Social Security record?
166194
<>
167195
<Card>
168196
<label>
169-
<QuestionText>
197+
<QuestionText ref={this.pensionAmountRef}>
170198
Please enter the amount of your monthly pension or lump sum retirement account.
171199
</QuestionText>
172200
<AnswerInputDiscouragePlaceholder

src/pages/prescreen-1d.tsx

+26-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from "react";
1+
import React, {useRef} from "react";
22
import styled from "@emotion/styled";
33
import DatePicker from "react-datepicker";
44
import { colors } from "../constants";
@@ -107,6 +107,11 @@ const Prescreen1d = ({}) => {
107107
birthDate,
108108
} = useUserState();
109109

110+
const estimateTypeRef = useRef<HTMLDivElement>(null);
111+
const wageIncreaseRef = useRef<HTMLDivElement>(null);
112+
const trendRef = useRef<HTMLDivElement>(null);
113+
const futureEarningRef = useRef<HTMLDivElement>(null);
114+
110115
const handleSelection = (e: React.ChangeEvent<HTMLInputElement>) => {
111116
const selectValueString = e.target.value;
112117
switch (e.target.name) {
@@ -127,6 +132,18 @@ const Prescreen1d = ({}) => {
127132
setExpectedPercentageWageIncrease(parseFloat(selectValueString));
128133
}
129134
};
135+
136+
const scrollToElement = (ref: React.RefObject<HTMLDivElement>) => {
137+
const node = ref.current;
138+
if(node){
139+
setTimeout(() => {
140+
node.scrollIntoView({
141+
behavior: 'smooth',
142+
block: 'start'});
143+
}, 100);
144+
}
145+
}
146+
130147
return (
131148
<React.Fragment>
132149
<SEO title="Prescreen 1D" keywords={[`gatsby`, `application`, `react`]} />
@@ -152,7 +169,7 @@ const Prescreen1d = ({}) => {
152169
/>
153170
</Card>
154171
<Card>
155-
<QuestionText>
172+
<QuestionText ref={estimateTypeRef}>
156173
How would you like to estimate your future earnings?
157174
</QuestionText>
158175
<AnswerBox>
@@ -165,6 +182,7 @@ const Prescreen1d = ({}) => {
165182
awiTrendOrManualPrediction ===
166183
FutureAwiPredictionEnum.PERCENTAGE
167184
}
185+
onClick={() => scrollToElement(wageIncreaseRef)}
168186
/>
169187
<LabelText>Use Percentage Only</LabelText>
170188
</AnswerBox>
@@ -177,6 +195,7 @@ const Prescreen1d = ({}) => {
177195
checked={
178196
awiTrendOrManualPrediction === FutureAwiPredictionEnum.TREND
179197
}
198+
onClick={() => scrollToElement(wageIncreaseRef)}
180199
/>
181200
<LabelText>
182201
Use Percentage plus
@@ -193,6 +212,7 @@ const Prescreen1d = ({}) => {
193212
awiTrendOrManualPrediction ===
194213
FutureAwiPredictionEnum.MANUAL
195214
}
215+
onClick={() => scrollToElement(futureEarningRef)}
196216
/>
197217
<LabelText>Predict it myself</LabelText>
198218
</AnswerBox>
@@ -212,13 +232,14 @@ const Prescreen1d = ({}) => {
212232
{(awiTrendOrManualPrediction === FutureAwiPredictionEnum.PERCENTAGE ||
213233
awiTrendOrManualPrediction === FutureAwiPredictionEnum.TREND) && (
214234
<CardGlossaryContainer>
215-
<Card>
235+
<Card ref={wageIncreaseRef}>
216236
<QuestionText>Percent wage increase</QuestionText>
217237
<AnswerInputDiscouragePlaceholder
218238
name="expectedPercentageWageIncrease"
219239
defaultValue={expectedPercentageWageIncrease ?? undefined}
220240
placeholder={"0.01"}
221241
onChange={handleSelection}
242+
// TODO: onFinish, scroll
222243
></AnswerInputDiscouragePlaceholder>
223244
{isNaN(expectedPercentageWageIncrease) && <WarningBox>Please enter a number.</WarningBox>}
224245
</Card>
@@ -227,7 +248,7 @@ const Prescreen1d = ({}) => {
227248
{awiTrendOrManualPrediction &&
228249
awiTrendOrManualPrediction === FutureAwiPredictionEnum.TREND && (
229250
<CardGlossaryContainer>
230-
<Card>
251+
<Card ref={trendRef}>
231252
<QuestionText>
232253
Which trend would you like to use to predict your future
233254
earnings?
@@ -303,7 +324,7 @@ const Prescreen1d = ({}) => {
303324
}
304325
{awiTrendOrManualPrediction === FutureAwiPredictionEnum.MANUAL && (
305326
<>
306-
<Card>
327+
<Card ref={futureEarningRef}>
307328
<label>
308329
<QuestionText>Future Earnings</QuestionText>
309330
</label>

0 commit comments

Comments
 (0)