diff --git a/src/App.js b/src/App.js
index 455940f1..aca6da06 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,39 +1,30 @@
-import Expenses from "./components/Expenses/Expenses";
-import NewExpense from "./components/NewExpense/NewExpense";
+import Expenses from './components/Expenses/Expenses';
+import NewExpense from './components/NewExpense/NewExpense';
+import { initialExpenses } from './data';
+import { useState } from 'react';
const App = () => {
- const expense = [
- {
- id: 'e1',
- title: 'Toilet Paper',
- amount: 94.12,
- date: new Date(2020, 7, 14),
- },
- { id: 'e2', title: 'New TV', amount: 799.49, date: new Date(2021, 2, 12) },
- {
- id: 'e3',
- title: 'Car Insurance',
- amount: 294.67,
- date: new Date(2021, 2, 28),
- },
- {
- id: 'e4',
- title: 'New Desk (Wooden)',
- amount: 450,
- date: new Date(2021, 5, 12),
- },
- ];
+ const [expenses, setExpenses] = useState(initialExpenses);
const addExpenseHandler = expense => {
- console.log('In App.js');
- console.log(expense);
- }
+ setExpenses(expenses.concat(expense));
+ };
+
+ const deleteExpenseHandler = id => {
+ setExpenses(expenses.filter(expense => expense.id !== id));
+ };
+
return (
-
-
+
+
);
-}
+};
export default App;
diff --git a/src/components/Expenses/ExpenseDate.js b/src/components/Expenses/ExpenseDate.js
index cd3d2576..b4fc6171 100644
--- a/src/components/Expenses/ExpenseDate.js
+++ b/src/components/Expenses/ExpenseDate.js
@@ -1,10 +1,11 @@
-import './ExpenseDate.css';
-
-const ExpenseDate = (props) => {
- const day = props.date.toLocaleString('en-GB', {day: '2-digit'});
- const month = props.date.toLocaleString('en-GB', {month: 'long'});
- const year =props.date.getFullYear();
+import './ExpenseDate.scss';
+const ExpenseDate = ({
+ date
+}) => {
+ const day = date.toLocaleDateString('en-GB', { day: '2-digit' });
+ const month = date.toLocaleDateString('en-GB', { month: 'long' });
+ const year = date.getFullYear();
return (
{day}
@@ -12,6 +13,6 @@ const ExpenseDate = (props) => {
{year}
);
-}
+};
export default ExpenseDate;
\ No newline at end of file
diff --git a/src/components/Expenses/ExpenseDate.scss b/src/components/Expenses/ExpenseDate.scss
index c3aa67d8..ebb61d6c 100644
--- a/src/components/Expenses/ExpenseDate.scss
+++ b/src/components/Expenses/ExpenseDate.scss
@@ -9,18 +9,18 @@
border-radius: 12px;
align-items: center;
justify-content: center;
-}
-.expense-date__month {
- font-size: 0.75rem;
- font-weight: bold;
-}
+ &__month {
+ font-size: 0.75rem;
+ font-weight: bold;
+ }
-.expense-date__year {
- font-size: 0.75rem;
-}
+ &__year {
+ font-size: 0.75rem;
+ }
-.expense-date__day {
- font-size: 1.5rem;
- font-weight: bold;
+ &__day {
+ font-size: 1.5rem;
+ font-weight: bold;
+ }
}
\ No newline at end of file
diff --git a/src/components/Expenses/ExpenseItem.css b/src/components/Expenses/ExpenseItem.css
index aba29132..b4112406 100644
--- a/src/components/Expenses/ExpenseItem.css
+++ b/src/components/Expenses/ExpenseItem.css
@@ -17,7 +17,7 @@
flex: 1;
}
-.expense-item h2 {
+.expense-item__info {
color: #3a3a3a;
font-size: 1rem;
flex: 1;
@@ -25,6 +25,10 @@
color: white;
}
+.expense-item__info p {
+ color: #111;
+}
+
.expense-item__price {
font-size: 1rem;
font-weight: bold;
@@ -35,6 +39,15 @@
border-radius: 12px;
}
+.expense-item__delete button {
+ border-radius: 50%;
+ border: none;
+ width: 3em;
+ height: 3em;
+ background-color: #2a2a2a;
+ color: #fff;
+}
+
@media (min-width: 580px) {
.expense-item__description {
flex-direction: row;
diff --git a/src/components/Expenses/ExpenseItem.js b/src/components/Expenses/ExpenseItem.js
index 6810549e..d7f9bbc2 100644
--- a/src/components/Expenses/ExpenseItem.js
+++ b/src/components/Expenses/ExpenseItem.js
@@ -1,19 +1,33 @@
import React from 'react';
+import Card from '../UI/Card';
import ExpenseDate from './ExpenseDate';
import './ExpenseItem.css';
-import Card from '../UI/Card';
-const ExpenseItem = (props) => {
-
- return (
-
-
+const ExpenseItem = ({
+ id,
+ title,
+ amount,
+ location,
+ date,
+ onDelete
+}) => (
+
+
-
{props.title}
-
£{props.amount}
+
+
+ £{parseFloat(amount).toFixed(2)}
+
+
+
+
- );
-}
+
+);
+
export default ExpenseItem;
\ No newline at end of file
diff --git a/src/components/Expenses/Expenses.js b/src/components/Expenses/Expenses.js
index 4366f226..f079c5f0 100644
--- a/src/components/Expenses/Expenses.js
+++ b/src/components/Expenses/Expenses.js
@@ -1,41 +1,29 @@
-import React, {useState} from 'react';
+import React, { useState } from 'react';
import Card from '../UI/Card';
import ExpenseItem from './ExpenseItem';
import ExpensesFilter from './ExpensesFilter';
import './Expenses.css';
-const Expenses = (props) => {
+const Expenses = ({
+ items,
+ onDeleteExpense
+}) => {
const [filteredYear, setFilteredYear] = useState('2021');
- const filterChangeHandler = selectedYear => {
- setFilteredYear(selectedYear);
+ const expenseDeleteHandler = (id) => {
+ onDeleteExpense(id)
}
+
return (
-
-
-
-
-
+
+ {items
+ .filter(item => item.date.getFullYear() === parseInt(filteredYear))
+ .map(({ id, title, amount, date, location }, key) => )
+ }
);
-}
+};
export default Expenses;
\ No newline at end of file
diff --git a/src/components/Expenses/ExpensesFilter.js b/src/components/Expenses/ExpensesFilter.js
index 809b6322..8c492963 100644
--- a/src/components/Expenses/ExpensesFilter.js
+++ b/src/components/Expenses/ExpensesFilter.js
@@ -2,23 +2,22 @@ import React from 'react';
import './ExpensesFilter.css';
-const ExpensesFilter = (props) => {
- const dropdownChangeHandler = (event) => {
- props.onChangeFilter(event.target.value);
- };
+const ExpensesFilter = ({
+ selected,
+ onChangeFilter
+}) => {
+ const currentYear = new Date().getFullYear();
+ const years = [1, 0, -1, -2, -3].map(offset => currentYear + offset)
return (
-
-
-
-
-
+
+
+
+
+
);
};
diff --git a/src/components/NewExpense/ExpenseForm.js b/src/components/NewExpense/ExpenseForm.js
index d4b7eb86..3d564a28 100644
--- a/src/components/NewExpense/ExpenseForm.js
+++ b/src/components/NewExpense/ExpenseForm.js
@@ -1,9 +1,10 @@
-import React, { useState } from "react";
-import "./ExpenseForm.css"
+import React, { useState } from 'react';
+import './ExpenseForm.css';
const ExpenseForm = (props) => {
const [enteredTitle, setEnteredTitle] = useState('');
const [enteredAmount, setEnteredAmount] = useState('');
+ const [enteredLocation, setEnteredLocation] = useState('');
const [enteredDate, setEnteredDate] = useState('');
// const [userInput, setUserInput] = useState({
@@ -11,7 +12,7 @@ const ExpenseForm = (props) => {
// enteredAmount: '',
// enteredDate: ''
// });
-
+
const titleChangeHandler = (event) => {
setEnteredTitle(event.target.value);
@@ -32,6 +33,10 @@ const ExpenseForm = (props) => {
// });
};
+ const locationChangeHandler = (event) => {
+ setEnteredLocation(event.target.value);
+ };
+
const dateChangeHandler = (event) => {
setEnteredDate(event.target.value);
// setUserInput({
@@ -46,7 +51,8 @@ const ExpenseForm = (props) => {
const expenseData = {
title: enteredTitle,
amount: enteredAmount,
- date: new Date(enteredDate)
+ date: new Date(enteredDate),
+ location: enteredLocation
};
// console.log(expenseData);
@@ -54,45 +60,54 @@ const ExpenseForm = (props) => {
setEnteredTitle('');
setEnteredAmount('');
setEnteredDate('');
+ setEnteredLocation('');
};
return (
-