mirror of
https://github.com/usatiuk/ustk-todolist.git
synced 2025-10-28 23:57:49 +01:00
redesign
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
17
react/src/components/Filters.js
Normal file
17
react/src/components/Filters.js
Normal 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;
|
||||||
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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')) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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 => {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user