Log In
+ + ${error + ? html` ++ Oops. ${error.message} +
+ ` + : ''} + +- Dat Desktop is a peer to peer sharing app built for humans by humans. -
-- Report Bug -
+ ` : ''} @@ -127,6 +223,7 @@ function HeaderElement () { function update (props) { return props.isReady !== this.props.isReady || - typeof this.state.willShowMenu === 'boolean' + typeof this.state.willShowMenu === 'boolean' || + props.session !== this.props.session } } diff --git a/elements/input.js b/elements/input.js new file mode 100644 index 00000000..08f6c007 --- /dev/null +++ b/elements/input.js @@ -0,0 +1,82 @@ +'use strict' + +const microcomponent = require('microcomponent') +const html = require('choo/html') +const css = require('sheetify') +const icon = require('./icon') + +var baseStyles = css` + :host { + --input-height: 2.75rem; + --icon-height: 1.2rem; + height: var(--input-height); + border: 0; + svg { + position: absolute; + top: 0; + bottom: 0; + left: 0; + padding-top: calc(var(--icon-height) - .35rem); + padding-left: .75rem; + pointer-events: none; + display: block; + width: var(--icon-height); + height: var(--icon-height); + transition: color .025s ease-out; + color: var(--color-neutral-30); + } + input { + width: 100%; + height: var(--input-height); + position: relative; + padding-top: 0; + padding-right: .5rem; + padding-bottom: 0; + padding-left: 2.5rem; + font-size: 1rem; + font-weight: 600; + border: 1px solid var(--color-neutral-20); + background-color: var(--color-white); + color: var(--color-green-hover); + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + &:hover, + &:focus { + outline: none; + } + } + } +` + +module.exports = inputElement + +function inputElement (name) { + var component = microcomponent(`input-${name}`) + component.on('render', render) + component.on('update', update) + return component + + function render () { + var { name, type, placeholder, value, icon: inputIcon } = this.props + var classNames = baseStyles + if (this.props.class) classNames += ' ' + this.props.class + + return html` + + ` + } + + function update () { + return false + } +} diff --git a/elements/login.js b/elements/login.js new file mode 100644 index 00000000..9daf27e2 --- /dev/null +++ b/elements/login.js @@ -0,0 +1,93 @@ +var microcomponent = require('microcomponent') +var html = require('choo/html') +var input = require('./input') +var button = require('./button') +var FormData = window.FormData + +module.exports = function () { + var component = microcomponent({ + name: 'login', + state: { + email: '', + password: '', + inputs: { + email: input('email'), + password: input('password') + } + } + }) + component.on('render', render) + component.on('update', update) + return component + + function render () { + var { onlogin, onregister, onresetpassword, onexit, error } = this.props + var { email, password, inputs } = this.state + + function onsubmit (ev) { + ev.preventDefault() + var data = new FormData(ev.target) + var email = data.get('email') + var password = data.get('password') + onlogin({ email, password }) + Object.assign(component.state, { email, password }) + } + + function onclickresetpassword (ev) { + ev.preventDefault() + onresetpassword() + } + + function onclickregister (ev) { + ev.preventDefault() + onregister() + } + + return html` ++ Oops. ${error.message} +
+ ` + : ''} + ++ Oops. ${error.message} +
+ ` + : ''} +