This commit is contained in:
2018-07-09 22:49:36 +03:00
parent 26aebd7e92
commit 2399eb674b
12 changed files with 55 additions and 40 deletions

View File

@@ -7,8 +7,9 @@
#lists { #lists {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
flex-grow: 0; flex-grow: 1;
max-width: 40%; width: 80%;
margin-right: 1rem;
} }
.loading { .loading {
@@ -39,11 +40,12 @@
#filters { #filters {
display: flex; display: flex;
justify-content: center; justify-content: center;
margin: 0.2rem 0.1rem; margin: 0;
margin-left: 0.5rem;
margin-right: 0.75rem;
align-self: center; align-self: center;
flex-shrink: 0; flex-shrink: 0;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
position: sticky;
z-index: 5;
} }
#filters button { #filters button {
@@ -56,7 +58,7 @@
display: flex; display: flex;
height: 2.5rem; height: 2.5rem;
position: relative; position: relative;
z-index: 5; z-index: 10;
} }
#input { #input {
@@ -74,15 +76,21 @@
border: none; border: none;
} }
#input::placeholder {
opacity: 0.35;
}
#input:focus::placeholder {
opacity: 0;
}
#add { #add {
color: black; color: black;
font-size: 1rem; flex-grow: 0;
font-weight: 500;
flex-grow: 1;
margin: 0; margin: 0;
padding: 0; padding: 0;
height: 100%; height: 100%;
max-width: 5rem; max-width: 2rem;
background-color: white; background-color: white;
border: none; border: none;
} }
@@ -186,7 +194,6 @@ textarea.todo--input {
.filter { .filter {
margin: 0.1rem; margin: 0.1rem;
padding: 0.5rem;
color: #555555; color: #555555;
border: none; border: none;
background: none; background: none;

View File

@@ -10,7 +10,7 @@ import TodosContainer from '../containers/TodosContainer';
import LoginForm from '../components/user/LoginForm'; import LoginForm from '../components/user/LoginForm';
import SignupForm from '../components/user/SignupForm'; import SignupForm from '../components/user/SignupForm';
export default class App extends React.Component { export default class App extends React.PureComponent {
componentDidMount() { componentDidMount() {
this.props.loadUser(); this.props.loadUser();
} }

View File

@@ -0,0 +1,17 @@
import React from 'react';
import FilterLink from '../containers/FilterLink';
import { VisibilityFilters } from '../actions/todos';
function Filters() {
return (
<div id="filters">
<FilterLink filter={VisibilityFilters.SHOW_ALL}>all</FilterLink>
<FilterLink filter={VisibilityFilters.SHOW_ACTIVE}>active</FilterLink>
<FilterLink filter={VisibilityFilters.SHOW_COMPLETED}>
completed
</FilterLink>
</div>
);
}
export default Filters;

View File

@@ -1,23 +1,12 @@
import React from 'react'; import React from 'react';
import FilterLink from '../containers/FilterLink';
import UserHeader from '../components/UserHeader'; import UserHeader from '../components/UserHeader';
import { VisibilityFilters } from '../actions/todos';
import ListsContainer from '../containers/ListsContainer'; import ListsContainer from '../containers/ListsContainer';
export default function Header() { export default function Header() {
return ( return (
<div id="header"> <div id="header">
<UserHeader /> <UserHeader />
<div id="lists-header"> <ListsContainer />
<ListsContainer />
<div id="filters">
<FilterLink filter={VisibilityFilters.SHOW_ALL}>all</FilterLink>
<FilterLink filter={VisibilityFilters.SHOW_ACTIVE}>active</FilterLink>
<FilterLink filter={VisibilityFilters.SHOW_COMPLETED}>
completed
</FilterLink>
</div>
</div>
</div> </div>
); );
} }

View File

@@ -1,6 +1,7 @@
import * as React from 'react'; import * as React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button } from '@material-ui/core'; import { Button } from '@material-ui/core';
import AddIcon from '@material-ui/icons/Add';
function Input(props) { function Input(props) {
let input; let input;
@@ -20,14 +21,15 @@ function Input(props) {
}} }}
id="input" id="input"
type="text" type="text"
placeholder="Add something!"
onKeyPress={e => { onKeyPress={e => {
if (e.key === 'Enter') { if (e.key === 'Enter') {
submit(); submit();
} }
}} }}
/> />
<Button id="add" onClick={() => submit()}> <Button style={{ borderRadius: 0 }} id="add" onClick={() => submit()}>
add <AddIcon />
</Button> </Button>
</div> </div>
); );

View File

@@ -6,7 +6,7 @@ import SelectorContainer from '../containers/SelectorContainer';
export default function Lists({ userLoaded, listsLoaded }) { export default function Lists({ userLoaded, listsLoaded }) {
return ( return (
<React.Fragment> <div id="lists-header">
{userLoaded && {userLoaded &&
listsLoaded && ( listsLoaded && (
<div id="lists"> <div id="lists">
@@ -16,7 +16,7 @@ export default function Lists({ userLoaded, listsLoaded }) {
)} )}
{!userLoaded && <span className="loading">loading.</span>} {!userLoaded && <span className="loading">loading.</span>}
{userLoaded && !listsLoaded && <span className="loading">loading..</span>} {userLoaded && !listsLoaded && <span className="loading">loading..</span>}
</React.Fragment> </div>
); );
} }

View File

@@ -15,7 +15,7 @@ const disabledAction = {
color: '#dddddd', color: '#dddddd',
}; };
class Todo extends React.Component { class Todo extends React.PureComponent {
constructor(props) { constructor(props) {
super(props); super(props);
this.state = { this.state = {

View File

@@ -4,8 +4,9 @@ import PropTypes from 'prop-types';
import InputContainer from '../containers/InputContainer'; import InputContainer from '../containers/InputContainer';
import TodoListContainer from '../containers/TodoListContainer'; import TodoListContainer from '../containers/TodoListContainer';
import Header from './Header'; import Header from './Header';
import Filters from './Filters';
export default class Todos extends React.Component { export default class Todos extends React.PureComponent {
componentDidUpdate() { componentDidUpdate() {
if (!this.props.user.user && !this.props.user.dirty) { if (!this.props.user.user && !this.props.user.dirty) {
this.props.history.replace('/login'); this.props.history.replace('/login');
@@ -17,6 +18,7 @@ export default class Todos extends React.Component {
<Header /> <Header />
<InputContainer /> <InputContainer />
<TodoListContainer /> <TodoListContainer />
<Filters />
</div> </div>
); );
} }

View File

@@ -12,7 +12,7 @@ import '../Form.css';
import { login, reset, loginJWT } from '../../actions/user'; import { login, reset, loginJWT } from '../../actions/user';
class LoginForm extends React.Component { class LoginForm extends React.PureComponent {
componentDidMount() { componentDidMount() {
const params = new URLSearchParams(new URL(window.location).search); const params = new URLSearchParams(new URL(window.location).search);
if (params.has('jwt')) { if (params.has('jwt')) {

View File

@@ -9,10 +9,9 @@ function FetchButton({ onClick, children }) {
return ( return (
<ButtonBase <ButtonBase
style={{ style={{
marginLeft: 0,
marginRight: 'auto', marginRight: 'auto',
padding: '0 0.5rem', padding: '0 1rem',
borderRadius: '7px',
marginLeft: '1rem',
}} }}
onClick={e => { onClick={e => {
e.preventDefault(); e.preventDefault();

View File

@@ -12,10 +12,9 @@ function Link({ active, onClick, children }) {
return ( return (
<ButtonBase <ButtonBase
style={{ style={{
margin: '0 0.2rem', padding: '0 1rem',
padding: '1rem 0.3rem',
color: active ? 'black' : '#444444', color: active ? 'black' : '#444444',
borderRadius: '7px', height: '2rem',
}} }}
className={classes.join(' ')} className={classes.join(' ')}
onClick={e => { onClick={e => {

View File

@@ -9,9 +9,9 @@ function Link({ onClick, children }) {
return ( return (
<ButtonBase <ButtonBase
style={{ style={{
marginRight: '1rem', marginLeft: 'auto',
padding: '0 0.5rem', marginRight: 0,
borderRadius: '7px', padding: '0 1rem',
}} }}
onClick={e => { onClick={e => {
e.preventDefault(); e.preventDefault();