Skip to content
Snippets Groups Projects
Commit 0c2ecf9e authored by Brady James Garvin's avatar Brady James Garvin
Browse files

Implemented a basic to-do list app.

parent 058d6c74
Branches
Tags
No related merge requests found
// import { useSelector, useDispatch } from 'react-redux'; import { useSelector, useDispatch } from 'react-redux';
// import PropTypes from 'prop-types'; // import PropTypes from 'prop-types';
// import classNames from 'classnames'; import classNames from 'classnames';
// import styles from './toDo.module.css'; import styles from './toDo.module.css';
import { import {
selectDraft,
selectItems,
setDraft,
addItem,
setDone,
} from './toDoSlice.js'; } from './toDoSlice.js';
function Item(props) { function Item(props) {
return null; const dispatch = useDispatch();
const classes = classNames({
[styles.done]: props.done,
});
const onClick = () => dispatch(setDone({
index: props.index,
done: !props.done,
}));
return (
<div className={styles.item}>
<span className={classes}>#{props.index} {props.text}</span>
<button onClick={onClick}>Done</button>
</div>
);
} }
Item.propTypes = { // Item.propTypes = {
}; // };
export function List() { export function List() {
return null; const draft = useSelector(selectDraft);
const items = useSelector(selectItems);
const dispatch = useDispatch();
const onChange = (event) => dispatch(setDraft({
draft: event.target.value,
}));
const onClick = () => dispatch(addItem());
return (
<>
{items.map((item, index) =>
<Item key={index} index={index} text={item.text} done={item.done} />,
)}
<div className={styles.draft}>
<input type={'text'} className={styles.wide} value={draft} onChange={onChange} />
<button onClick={onClick}>+</button>
</div>
</>
);
} }
...@@ -3,11 +3,44 @@ import { createSlice } from '@reduxjs/toolkit'; ...@@ -3,11 +3,44 @@ import { createSlice } from '@reduxjs/toolkit';
const toDoSlice = createSlice({ const toDoSlice = createSlice({
name: 'toDo', name: 'toDo',
initialState: { initialState: {
draft: '',
items: [],
}, },
reducers: { reducers: {
setDraft: (toDo, action) => {
const {
draft,
} = action.payload;
toDo.draft = draft;
},
addItem: (toDo) => {
toDo.items.push({
text: toDo.draft,
done: false,
});
toDo.draft = '';
},
setDone: (toDo, action) => {
const {
index,
done,
} = action.payload;
toDo.items[index].done = done;
},
}, },
}); });
export default toDoSlice; export default toDoSlice;
// export const { export const {
// } = toDoSlice.actions; setDraft,
addItem,
setDone,
} = toDoSlice.actions;
export function selectDraft(state) {
return state.toDo.draft;
}
export function selectItems(state) {
return state.toDo.items;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment