Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Play]: Savings Calculator #748

Merged
merged 29 commits into from
Oct 30, 2022
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
92c93d6
Initial file setup with images
kd100100 Oct 21, 2022
789fa3f
Add total component
kd100100 Oct 21, 2022
37b61a2
Add saving options form
kd100100 Oct 21, 2022
fd2dbf9
Add saving options form funtionality
kd100100 Oct 21, 2022
eb540f1
Add total dynamic rendering functionality
kd100100 Oct 21, 2022
4216152
Fix currency change automatically in form feilds
kd100100 Oct 21, 2022
1179994
Refactor savings calculation
kd100100 Oct 21, 2022
a09856c
Add responsive styling
kd100100 Oct 21, 2022
9526081
Add cover image
kd100100 Oct 21, 2022
8e45004
Add readme
kd100100 Oct 21, 2022
ac31e60
Merge branch 'main' into savings-calculator
kd100100 Oct 26, 2022
b048cda
Merge branch 'main' into savings-calculator
kd100100 Oct 27, 2022
bcfe3c8
Add play's header to play
kd100100 Oct 27, 2022
b7e0b36
Refactor SavingsCalculator to SavingCalculator
kd100100 Oct 27, 2022
4fec251
Refactor calculatSaving to getCalculatedSaving
kd100100 Oct 27, 2022
e440281
Refactor currencies to select tag
kd100100 Oct 27, 2022
ab24449
Merge branch 'main' into savings-calculator
kd100100 Oct 27, 2022
70aedaf
Merge branch 'main' into savings-calculator
kd100100 Oct 28, 2022
9e1d4c6
Merge branch 'main' into savings-calculator
Sachin-chaurasiya Oct 29, 2022
3419c26
Add play body wrapper
kd100100 Oct 29, 2022
befb860
Add value attribute to dropdown options
kd100100 Oct 29, 2022
89ab821
Refactor currency symbol into util function
kd100100 Oct 29, 2022
29f7af8
Refactor period options
kd100100 Oct 29, 2022
3404caf
Refactor wrap fireevent with act
kd100100 Oct 29, 2022
2a7ee7c
Refactor appropriate variable type usage
kd100100 Oct 29, 2022
b44524c
Add prefix to parent classes to avoid conflicts
kd100100 Oct 29, 2022
85682f7
Add implementation details to readme
kd100100 Oct 29, 2022
5fce1fb
Refactor image import name
kd100100 Oct 29, 2022
82f5ea8
Merge branch 'main' into savings-calculator
Sachin-chaurasiya Oct 30, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
"@mui/material": "^5.9.1",
"@mui/styles": "^5.9.3",
"@nhost/react": "^0.9.0",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@types/lodash": "^4.14.182",
"@types/react": "^18.0.6",
"@types/react-dom": "^18.0.2",
Expand Down
30 changes: 30 additions & 0 deletions src/plays/savings-calculator/SavingsCalculator.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import React, { useState } from "react";
import PlayHeader from "common/playlists/PlayHeader";
import Total from "./components/Total";
import SavingOptions from "./components/SavingOptions";
import "./styles/savingsCalculator.scss";

function SavingCalculator(props) {
const [total, setTotal] = useState(2327);
const [currency, setCurrency] = useState("INR");

return (
<>
<div className="play-details">
<PlayHeader play={props} />
<div className="savingsCalculator__container">
<div className="savingsCalculator">
<Total total={total} currency={currency} />
<SavingOptions
currency={currency}
setCurrency={setCurrency}
setTotal={setTotal}
/>
</div>
</div>
kd100100 marked this conversation as resolved.
Show resolved Hide resolved
</div>
</>
);
}

export default SavingCalculator;
150 changes: 150 additions & 0 deletions src/plays/savings-calculator/components/SavingOptions/index.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
import React, { useState } from "react";
import { getCalculatedSaving } from "../../utils/getCalculatedSaving";
import "./savingOptions.scss";

function SavingOptions(props) {
const { currency, setCurrency, setTotal } = props;

const [startingBalance, setStartingBalance] = useState(1000);
const [monthlyContribution, setMonthlyContribution] = useState(100);
const [period, setPeriod] = useState(1);
const [periodChoice, setPeriodChoice] = useState("Years");
const [annualInterest, setAnnualInterest] = useState(8);

const handleSubmit = (event) => {
event.preventDefault();

const total = getCalculatedSaving({
startingBalance,
monthlyContribution,
period,
periodChoice,
annualInterest,
});

setTotal(total);
};

return (
<div className="savingOptions">
<div className="savingOptions__currencyGroup">
<label htmlFor="currency">Currency:</label>
<select
className="savingOptions__currencies"
id="currency"
value={currency}
onChange={(e) => setCurrency(e.target.value)}
>
<option>INR</option>
<option>USD</option>
kd100100 marked this conversation as resolved.
Show resolved Hide resolved
</select>
</div>
<form>
<div className="savingOptions__formGroup">
<label htmlFor="starting-balance">Starting Balance:</label>
<div className="savingOptions__inputGroup">
<div className="savingOptions__inputPrepend">
{currency === "INR" ? "₹" : "$"}
kd100100 marked this conversation as resolved.
Show resolved Hide resolved
</div>
<input
type="number"
className="savingOptions__formControl"
id="starting-balance"
placeholder="Enter initial balance"
value={startingBalance}
onChange={(e) => setStartingBalance(e.target.value)}
/>
</div>
</div>
<div className="savingOptions__formGroup">
<label htmlFor="monthly-contribution">Monthly Contribution:</label>
<div className="savingOptions__inputGroup">
<div className="savingOptions__inputPrepend">
{currency === "INR" ? "₹" : "$"}
kd100100 marked this conversation as resolved.
Show resolved Hide resolved
</div>
<input
type="number"
className="savingOptions__formControl"
id="monthly-contribution"
placeholder="Enter monthly contribution"
value={monthlyContribution}
onChange={(e) => setMonthlyContribution(e.target.value)}
/>
</div>
</div>
<div className="savingOptions__formGroup">
<label htmlFor="period">Period:</label>
<div className="savingOptions__inputGroup">
<input
type="number"
className="savingOptions__formControl"
id="period"
placeholder="Enter period of contribution"
value={period}
onChange={(e) => setPeriod(e.target.value)}
/>
</div>
</div>
<div className="savingOptions__periodChoice">
<div className="savingOptions__formRadio">
<input
className="savingOptions__radioInput"
type="radio"
name="period-choice"
id="period-choice-years"
value="years"
defaultChecked
onChange={() => setPeriodChoice("Years")}
kd100100 marked this conversation as resolved.
Show resolved Hide resolved
/>
<label
className="savingOptions__radioLabel"
htmlFor="period-choice-years"
>
Years
</label>
</div>
<div className="savingOptions__formRadio">
<input
className="savingOptions__radioInput"
type="radio"
name="period-choice"
id="period-choice-months"
value="months"
onChange={() => setPeriodChoice("Months")}
kd100100 marked this conversation as resolved.
Show resolved Hide resolved
/>
<label
className="savingOptions__radioLabel"
htmlFor="period-choice-months"
>
Months
</label>
</div>
</div>
<div className="savingOptions__formGroup">
<label htmlFor="annual-interest-rate">
Annual Interest Rate (%):
</label>
<div className="savingOptions__inputGroup">
<input
type="number"
className="savingOptions__formControl"
id="annual-interest-rate"
placeholder="Enter interest rate per annum"
value={annualInterest}
onChange={(e) => setAnnualInterest(e.target.value)}
/>
</div>
</div>
<button
type="submit"
className="savingOptions__calculate"
onClick={handleSubmit}
>
Calculate Total
</button>
</form>
</div>
);
}

export default SavingOptions;
Loading