reorganize files

This commit is contained in:
2018-08-25 18:54:18 +03:00
parent 68d9d979b1
commit 296b186321
28 changed files with 111 additions and 135 deletions

View File

@@ -6,7 +6,7 @@ import CssBaseline from '@material-ui/core/CssBaseline';
import './Container.css';
import './App.css';
import MainViewContainer from '../containers/MainViewContainer';
import TodosView from './todolist/TodosView';
import LoginForm from './user/LoginForm';
import SignupForm from './user/SignupForm';
@@ -22,7 +22,7 @@ export default class App extends React.PureComponent {
<CssBaseline />
<Router>
<div id="container">
<Route exact path="/" component={MainViewContainer} />
<Route exact path="/" component={TodosView} />
<Route path="/login" component={LoginForm} />
<Route path="/signup" component={SignupForm} />
</div>

View File

@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import App from '../components/App';
import App from './App';
import { loadUser } from '../actions/user';

View File

@@ -1,12 +1,12 @@
import React from 'react';
import UserHeader from './UserHeader';
import ListsContainer from '../containers/ListsContainer';
import UserHeader from './user/UserHeader';
import Lists from './lists/Lists';
export default function Header() {
return (
<div id="header">
<UserHeader />
<ListsContainer />
<Lists />
</div>
);
}

View File

@@ -1,21 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import TodosContainer from '../containers/TodosContainer';
export default class MainView extends React.PureComponent {
componentDidUpdate() {
const { user, history } = this.props;
if (!user.user && !user.dirty) {
history.replace('/login');
}
}
render() {
return <TodosContainer />;
}
}
MainView.propTypes = {
user: PropTypes.any.isRequired,
history: PropTypes.any.isRequired,
};

View File

@@ -1,35 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Transition } from 'react-spring';
import InputContainer from '../containers/InputContainer';
import TodoListContainer from '../containers/TodoListContainer';
import Header from './Header';
import Filters from './Filters';
export default function Todos({ list }) {
return (
<div id="todos">
<Header />
<Transition
from={{ opacity: 0, maxHeight: 0 }}
enter={{ opacity: 1, maxHeight: 38 }}
leave={{ opacity: 0, maxHeight: 0 }}
>
{list && (styles => <InputContainer styles={styles} />)}
</Transition>
<TodoListContainer />
<Transition
from={{ opacity: 0, maxHeight: 0 }}
enter={{ opacity: 1, maxHeight: 32 }}
leave={{ opacity: 0, maxHeight: 0 }}
>
{list && Filters}
</Transition>
</div>
);
}
Todos.propTypes = {
list: PropTypes.bool.isRequired,
};

View File

@@ -2,7 +2,7 @@ import { connect } from 'react-redux';
import React from 'react';
import PropTypes from 'prop-types';
import { ButtonBase } from '@material-ui/core';
import setVisibilityFilter from '../actions/visibilityFilter';
import setVisibilityFilter from '../../actions/visibilityFilter';
function Link({ active, onClick, children }) {
const classes = ['filter'];

View File

@@ -1,6 +1,6 @@
import React from 'react';
import FilterLink from '../containers/FilterLink';
import { VisibilityFilters } from '../actions/defs';
import FilterLink from './FilterLink';
import { VisibilityFilters } from '../../actions/defs';
function Filters(styles) {
return (

View File

@@ -1,12 +1,12 @@
import { connect } from 'react-redux';
import ListActions from '../components/ListActions';
import ListActions from './ListActions';
import {
startCreateList,
startEditList,
removeList,
stopCreateList,
stopEditList,
} from '../actions/lists';
} from '../../actions/lists';
function mapStateToProps(state) {
return {

View File

@@ -1,10 +1,11 @@
import { connect } from 'react-redux';
import React from 'react';
import PropTypes from 'prop-types';
import ListActionsContainer from '../containers/ListActionsContainer';
import SelectorContainer from '../containers/SelectorContainer';
import ListActionsContainer from './ListActionsContainer';
import SelectorContainer from '../todolist/SelectorContainer';
export default function Lists({ userLoaded, listsLoaded }) {
function Lists({ userLoaded, listsLoaded }) {
return (
<div id="lists-header">
{userLoaded &&
@@ -24,3 +25,12 @@ Lists.propTypes = {
userLoaded: PropTypes.bool.isRequired,
listsLoaded: PropTypes.bool.isRequired,
};
function mapStateToProps(state) {
return {
userLoaded: state.user.loaded,
listsLoaded: state.lists.loaded,
};
}
export default connect(mapStateToProps)(Lists);

View File

@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import Selector from '../components/Selector';
import { changeList, addList, editList } from '../actions/lists';
import Selector from '../lists/Selector';
import { changeList, addList, editList } from '../../actions/lists';
function mapStateToProps(state) {
return {

View File

@@ -1,6 +1,6 @@
import { connect } from 'react-redux';
import TodoList from '../components/TodoList';
import { toggleTodo, removeTodo, editTodo } from '../actions/todos';
import TodoList from './TodoList';
import { toggleTodo, removeTodo, editTodo } from '../../actions/todos';
import getVisibleTodos from './getVisibleTodos';

View File

@@ -0,0 +1,59 @@
import { connect } from 'react-redux';
import React from 'react';
import PropTypes from 'prop-types';
import { Transition } from 'react-spring';
import withRouter from 'react-router-dom/withRouter';
import Input from '../todos/Input';
import TodoListContainer from './TodoListContainer';
import Header from '../Header';
import Filters from '../filters/Filters';
class Todos extends React.PureComponent {
componentDidUpdate() {
const { user, history } = this.props;
if (!user.user && !user.dirty) {
history.replace('/login');
}
}
render() {
const { list } = this.props;
return (
<div id="todos">
<Header />
<Transition
from={{ opacity: 0, maxHeight: 0 }}
enter={{ opacity: 1, maxHeight: 38 }}
leave={{ opacity: 0, maxHeight: 0 }}
>
{list && (styles => <Input styles={styles} />)}
</Transition>
<TodoListContainer />
<Transition
from={{ opacity: 0, maxHeight: 0 }}
enter={{ opacity: 1, maxHeight: 32 }}
leave={{ opacity: 0, maxHeight: 0 }}
>
{list && Filters}
</Transition>
</div>
);
}
}
Todos.propTypes = {
list: PropTypes.bool.isRequired,
user: PropTypes.any.isRequired,
history: PropTypes.any.isRequired,
};
function mapStateToProps(state) {
return {
list: Boolean(state.lists.list),
user: state.user,
};
}
export default withRouter(connect(mapStateToProps)(Todos));

View File

@@ -1,4 +1,4 @@
import { VisibilityFilters } from '../actions/defs';
import { VisibilityFilters } from '../../actions/defs';
export default function getVisibleTodos(todos, filter) {
switch (filter) {

View File

@@ -1,7 +1,10 @@
import { connect } from 'react-redux';
import * as React from 'react';
import PropTypes from 'prop-types';
import { Button } from '@material-ui/core';
import AddIcon from '@material-ui/icons/Add';
import { addTodo } from '../../actions/todos';
function Input({ onClick, styles }) {
let input;
@@ -40,4 +43,17 @@ Input.propTypes = {
onClick: PropTypes.func.isRequired,
};
export default Input;
function mapStateToProps(state, ownProps) {
return { ...ownProps };
}
function mapDispatchToProps(dispatch) {
return {
onClick: text => dispatch(addTodo(text)),
};
}
export default connect(
mapStateToProps,
mapDispatchToProps,
)(Input);

View File

@@ -3,7 +3,7 @@ import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { ButtonBase } from '@material-ui/core';
import { fetchLists } from '../actions/lists';
import { fetchLists } from '../../actions/lists';
function FetchButton({ onClick, children }) {
return (

View File

@@ -3,7 +3,7 @@ import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { ButtonBase } from '@material-ui/core';
import { logout } from '../actions/user';
import { logout } from '../../actions/user';
function Link({ onClick, children }) {
return (

View File

@@ -1,8 +1,8 @@
import React from 'react';
import LogoutLink from '../containers/LogoutLink';
import FetchButton from '../containers/FetchButton';
import Status from '../containers/Status';
import LogoutLink from './LogoutLink';
import FetchButton from './FetchButton';
import Status from './Status';
export default function UserHeader() {
return (

View File

@@ -1,19 +0,0 @@
import { connect } from 'react-redux';
import Input from '../components/Input';
import { addTodo } from '../actions/todos';
function mapStateToProps(state, ownProps) {
return { ...ownProps };
}
function mapDispatchToProps(dispatch) {
return {
onClick: text => dispatch(addTodo(text)),
};
}
export default connect(
mapStateToProps,
mapDispatchToProps,
)(Input);

View File

@@ -1,11 +0,0 @@
import { connect } from 'react-redux';
import Lists from '../components/Lists';
function mapStateToProps(state) {
return {
userLoaded: state.user.loaded,
listsLoaded: state.lists.loaded,
};
}
export default connect(mapStateToProps)(Lists);

View File

@@ -1,12 +0,0 @@
import { connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
import MainView from '../components/MainView';
function mapStateToProps(state) {
return {
user: state.user,
};
}
export default withRouter(connect(mapStateToProps)(MainView));

View File

@@ -1,11 +0,0 @@
import { connect } from 'react-redux';
import Todos from '../components/Todos';
function mapStateToProps(state) {
return {
list: Boolean(state.lists.list),
};
}
export default connect(mapStateToProps)(Todos);

View File

@@ -6,7 +6,7 @@ import { applyMiddleware, createStore, compose } from 'redux';
import { offline } from '@redux-offline/redux-offline';
import offlineConfig from '@redux-offline/redux-offline/lib/defaults';
import AppContainer from './containers/AppContainer';
import AppContainer from './components/AppContainer';
import registerServiceWorker from './registerServiceWorker';
import todoApp from './reducers';
import { setToken } from './actions/util';