Skip to content

Commit 5b8618f

Browse files
committed
✨ Calc history
1 parent bd5d91b commit 5b8618f

File tree

3 files changed

+71
-9
lines changed

3 files changed

+71
-9
lines changed

src/pages/History/index.tsx

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,31 @@
1-
import React from 'react';
2-
import { Link } from 'react-router-dom';
1+
import React, { useEffect, useState } from 'react';
2+
import { Link, useHistory } from 'react-router-dom';
33
import { MdArrowBack } from 'react-icons/md';
44

55
import './styles.scss';
66

7+
export interface FactorialResults {
8+
factorial: number,
9+
result: string
10+
}
11+
712
const History: React.FC = () => {
13+
const history = useHistory();
14+
15+
const [resultsHistory, setResultsHistory] = useState<Array<FactorialResults>>([]);
16+
17+
useEffect(() => {
18+
const storageFactorialResults = localStorage.getItem('factorialResults');
19+
20+
if (storageFactorialResults) {
21+
setResultsHistory(JSON.parse(storageFactorialResults));
22+
}
23+
}, []);
24+
25+
function handleClickHistoryItem(factorial: number) {
26+
history.push(`/calc?factorial=${factorial}`);
27+
}
28+
829
return (
930
<div id="history-page" className="container">
1031
<Link to="/" className="back-button">
@@ -16,21 +37,21 @@ const History: React.FC = () => {
1637
<h2 className="title">Seus últimos cálculos fatorais.</h2>
1738

1839
{
19-
false &&
40+
resultsHistory.length > 0 &&
2041
<ul className="history">
2142
{
22-
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19].map((item) => (
23-
<li key={String(item)} className="history-item">
24-
<span className="factorial">14</span>
25-
<span className="result">9823823</span>
43+
resultsHistory.map((history) => (
44+
<li key={String(history.factorial)} className="history-item" onClick={() => handleClickHistoryItem(history.factorial)}>
45+
<span className="factorial">{history.factorial}</span>
46+
<span className="result">{history.result}</span>
2647
</li>
2748
))
2849
}
2950
</ul>
3051
}
3152

3253
{
33-
true &&
54+
resultsHistory.length === 0 &&
3455
<p>
3556
Você ainda não realizou nenhum cálculo.
3657
</p>

src/pages/History/styles.scss

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ ul.history {
1313
margin: 0px;
1414

1515
li.history-item {
16+
cursor: pointer;
1617
color: var(--grey3);
1718
background-color: var(--grey6);
1819
width: 100%;
@@ -33,7 +34,11 @@ ul.history {
3334

3435
span.result {
3536
font-size: 30px;
36-
37+
max-width: 200px;
38+
white-space: nowrap;
39+
text-overflow: ellipsis;
40+
overflow: hidden;
41+
3742
&:before {
3843
content: "= ";
3944
}

src/pages/Result/index.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { useEffect, useMemo, useState } from 'react';
22
import { MdRefresh } from 'react-icons/md';
33
import { Link, useLocation } from 'react-router-dom';
44
import api from '../../config/api';
5+
import { FactorialResults } from '../History';
56

67
import './styles.scss';
78

@@ -29,6 +30,8 @@ const Result: React.FC = () => {
2930
const { result } = await response.json();
3031
setFactorialResult(result);
3132
setLoading(false);
33+
34+
saveCalculatedNumberInHistory(result)
3235
} else {
3336
const { errors } = await response.json();
3437
setErrors(errors[0].msg);
@@ -56,6 +59,39 @@ const Result: React.FC = () => {
5659
}
5760
}, [factorialNumber]);
5861

62+
function saveCalculatedNumberInHistory(result: string) {
63+
const storageCalculatedNumbers = localStorage.getItem('calculatedNumbers');
64+
const storageFactorialResults = localStorage.getItem('factorialResults');
65+
let calculatedNumbers: Array<number> = [];
66+
let factorialResults: Array<FactorialResults> = [];
67+
68+
if (storageCalculatedNumbers) {
69+
calculatedNumbers = JSON.parse(storageCalculatedNumbers);
70+
}
71+
72+
if (storageFactorialResults) {
73+
factorialResults = JSON.parse(storageFactorialResults);
74+
}
75+
76+
// Verifica se o número já está salvo no histórico
77+
if (calculatedNumbers.includes(factorialNumber)) {
78+
// Já está salvo no histórico, deleta
79+
calculatedNumbers = calculatedNumbers.filter(number => number !== factorialNumber);
80+
factorialResults = factorialResults.filter(fResult => fResult.factorial !== factorialNumber);
81+
}
82+
83+
// Salva no histórico
84+
calculatedNumbers.unshift(factorialNumber);
85+
factorialResults.unshift({
86+
factorial: factorialNumber,
87+
result: result
88+
})
89+
90+
localStorage.setItem('calculatedNumbers', JSON.stringify(calculatedNumbers));
91+
localStorage.setItem('factorialResults', JSON.stringify(factorialResults));
92+
}
93+
94+
5995
if (!factorialNumber) {
6096
return null;
6197
}

0 commit comments

Comments
 (0)