Disable CTA unless notice is scrolled to bottom

feature/default_network_editable
Jacky Chan 7 years ago committed by Chi Kei Chan
parent 945cc5d18d
commit a4ad88c331
  1. 2
      mascara/src/app/first-time/index.js
  2. 31
      mascara/src/app/first-time/notice-screen.js

@ -52,7 +52,7 @@ class FirstTimeFlow extends Component {
} = this.props; } = this.props;
const {SCREEN_TYPE} = FirstTimeFlow const {SCREEN_TYPE} = FirstTimeFlow
// return SCREEN_TYPE.BACK_UP_PHRASE // return SCREEN_TYPE.NOTICE
if (!isInitialized) { if (!isInitialized) {
return SCREEN_TYPE.CREATE_PASSWORD return SCREEN_TYPE.CREATE_PASSWORD

@ -1,6 +1,7 @@
import React, {Component, PropTypes} from 'react' import React, {Component, PropTypes} from 'react'
import Markdown from 'react-markdown' import Markdown from 'react-markdown'
import {connect} from 'react-redux'; import {connect} from 'react-redux'
import debounce from 'lodash.debounce'
import {markNoticeRead} from '../../../../ui/app/actions' import {markNoticeRead} from '../../../../ui/app/actions'
import Identicon from '../../../../ui/app/components/identicon' import Identicon from '../../../../ui/app/components/identicon'
import Breadcrumbs from './breadcrumbs' import Breadcrumbs from './breadcrumbs'
@ -20,23 +21,46 @@ class NoticeScreen extends Component {
lastUnreadNotice: {} lastUnreadNotice: {}
}; };
state = {
atBottom: false,
}
componentDidMount() {
this.onScroll()
}
acceptTerms = () => { acceptTerms = () => {
const { markNoticeRead, lastUnreadNotice, next } = this.props; const { markNoticeRead, lastUnreadNotice, next } = this.props;
const defer = markNoticeRead(lastUnreadNotice) const defer = markNoticeRead(lastUnreadNotice)
.then(() => this.setState({ atBottom: false }))
if ((/terms/gi).test(lastUnreadNotice.title)) { if ((/terms/gi).test(lastUnreadNotice.title)) {
defer.then(next) defer.then(next)
} }
} }
onScroll = debounce(() => {
if (this.state.atBottom) return
const target = document.querySelector('.tou__body')
const {scrollTop, offsetHeight, scrollHeight} = target;
const atBottom = scrollTop + offsetHeight >= scrollHeight;
this.setState({atBottom: atBottom})
}, 25)
render() { render() {
const { const {
address, address,
lastUnreadNotice: { title, body } lastUnreadNotice: { title, body }
} = this.props; } = this.props;
const { atBottom } = this.state
return ( return (
<div className="tou"> <div
className="tou"
onScroll={this.onScroll}
>
<Identicon address={address} diameter={70} /> <Identicon address={address} diameter={70} />
<div className="tou__title">{title}</div> <div className="tou__title">{title}</div>
<Markdown <Markdown
@ -46,7 +70,8 @@ class NoticeScreen extends Component {
/> />
<button <button
className="first-time-flow__button" className="first-time-flow__button"
onClick={this.acceptTerms} onClick={atBottom && this.acceptTerms}
disabled={!atBottom}
> >
Accept Accept
</button> </button>

Loading…
Cancel
Save