Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 40 additions & 2 deletions src/components/Navigation/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,36 @@ const styles = () => ({
},
});

const PRIME_AD_RESPONSE_KEY = 'primeAdResponse';

function getPrimeAdResponses() {
try {
return JSON.parse(window.localStorage.getItem(PRIME_AD_RESPONSE_KEY)) || {};
} catch {
return {};
}
}

function getPrimeAdResponse(dongleId) {
if (!dongleId) {
return null;
}
return getPrimeAdResponses()[dongleId] || null;
}

function setPrimeAdResponse(dongleId, response) {
if (!dongleId) {
return;
}
try {
const responses = getPrimeAdResponses();
responses[dongleId] = response;
window.localStorage.setItem(PRIME_AD_RESPONSE_KEY, JSON.stringify(responses));
} catch {
// localStorage may be unavailable (e.g. private browsing); ignore
}
}

const initialState = {
hasFocus: false,
carLastLocation: null,
Expand All @@ -149,6 +179,7 @@ class Navigation extends Component {
this.mounted = null;
this.state = {
...initialState,
showPrimeAd: !getPrimeAdResponse(props.dongleId),
viewport: {
...DEFAULT_LOCATION,
zoom: 5,
Expand Down Expand Up @@ -201,6 +232,7 @@ class Navigation extends Component {
if (prevProps.dongleId !== dongleId) {
this.setState({
...initialState,
showPrimeAd: !getPrimeAdResponse(dongleId),
windowWidth: window.innerWidth,
});
}
Expand Down Expand Up @@ -660,15 +692,21 @@ class Navigation extends Component {
<div className={`${classes.searchSelectBox} ${classes.primeAdContainer}`} ref={this.primeAdBoxRef}>
<Clear
className={classes.clearSearchSelect}
onClick={() => this.setState({ showPrimeAd: false }, this.flyToMarkers)}
onClick={() => {
setPrimeAdResponse(this.props.dongleId, 'no');
this.setState({ showPrimeAd: false }, this.flyToMarkers);
}}
/>
<div className={classes.searchSelectBoxHeader}>
<div className={classes.searchSelectBoxTitle}>
<Typography className={classes.primeAdTitle}>comma prime</Typography>
</div>
<div className={classes.searchSelectBoxButtons}>
<Button
onClick={() => this.props.dispatch(primeNav(true))}
onClick={() => {
setPrimeAdResponse(this.props.dongleId, 'yes');
this.props.dispatch(primeNav(true));
}}
className={`${classes.searchSelectButton} ${classes.primeAdButton} primeSignUp`}
>
sign up
Expand Down
Loading