Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid qui ipsum eius laborum, adipisci earum velit possimus magnam doloribus atque eaque aperiam inventore. Nobis laudantium rerum excepturi error dignissimos in amet autem veniam, eos aperiam modi nostrum sapiente? Quisquam illo atque accusantium sapiente temporibus, vero, porro sunt hic ratione, quasi magni nobis recusandae assumenda expedita cupiditate blanditiis cumque veritatis iusto optio nemo minus! Maiores corporis illo reiciendis quis assumenda doloremque.
6 |
Lorem ipsum dolor, sit amet consectetur adipisicing elit. Ratione placeat laudantium molestiae suscipit alias exercitationem quia saepe et sed aliquid quasi ipsa ab quae rerum molestias deleniti aspernatur ipsum, minima aliquam soluta nisi quis doloribus consectetur sunt! Nisi nesciunt, assumenda mollitia iste eveniet asperiores et quia debitis illum consequatur amet? Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolor, pariatur? Nesciunt, aperiam accusamus dignissimos repudiandae officiis obcaecati minus voluptatum, eveniet doloribus illo animi fuga ipsa! Suscipit repudiandae magni aliquam quidem? Lorem ipsum dolor sit amet consectetur adipisicing elit. Id impedit cum quos iusto a sequi iure doloribus veritatis, corrupti dolorum. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tenetur deleniti a quis quos eligendi nostrum incidunt aliquid laudantium, quibusdam voluptate. Voluptatem voluptates iure sapiente quod quisquam! Magni eos ex reiciendis.
11 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid qui ipsum eius laborum, adipisci earum velit possimus magnam doloribus atque eaque aperiam inventore. Nobis laudantium rerum excepturi error dignissimos in amet autem veniam, eos aperiam modi nostrum sapiente? Quisquam illo atque accusantium sapiente temporibus, vero, porro sunt hic ratione, quasi magni nobis recusandae assumenda expedita cupiditate blanditiis cumque veritatis iusto optio nemo minus! Maiores corporis illo reiciendis quis assumenda doloremque.
12 |
13 |
14 | Lorem ipsum dolor, sit amet consectetur adipisicing elit. Ratione placeat laudantium molestiae suscipit alias exercitationem quia saepe et sed aliquid quasi ipsa ab quae rerum molestias deleniti aspernatur ipsum, minima aliquam soluta nisi quis doloribus consectetur sunt! Nisi nesciunt, assumenda mollitia iste eveniet asperiores et quia debitis illum consequatur amet? Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolor, pariatur? Nesciunt, aperiam accusamus dignissimos repudiandae officiis obcaecati minus voluptatum, eveniet doloribus illo animi fuga ipsa! Suscipit repudiandae magni aliquam quidem? Lorem ipsum dolor sit amet consectetur adipisicing elit. Id impedit cum quos iusto a sequi iure doloribus veritatis, corrupti dolorum. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tenetur deleniti a quis quos eligendi nostrum incidunt aliquid laudantium, quibusdam voluptate. Voluptatem voluptates iure sapiente quod quisquam! Magni eos ex reiciendis.
15 |
Using a calculator can be extremely helpful but only if you know its particular conventions. While there are different types out there many of the features are the same. Look for the number pad and the four basic operations, multiplication × addition + subtraction - and division ÷. To perform a calculation, make the necessary keystrokes and then hit =. For example, key 4 ÷ 2 =. The calculator should show the answer we expect, 2. Try some small calculations, like 2 + 3 and 4 × 5.
51 | );
52 | };
53 |
54 | export default Calculator;
55 |
--------------------------------------------------------------------------------
/src/logic/calculate.js:
--------------------------------------------------------------------------------
1 | import operate from './operate';
2 |
3 | function isNumber(item) {
4 | return !!item.match(/[0-9]+/);
5 | }
6 |
7 | /**
8 | * Given a button name and a calculator data object, return an updated
9 | * calculator data object.
10 | *
11 | * Calculator data object contains:
12 | * total:s the running total
13 | * next:String the next number to be operated on with the total
14 | * operation:String +, -, etc.
15 | */
16 | export default function calculate(obj, buttonName) {
17 | if (buttonName === 'AC') {
18 | return {
19 | total: 0,
20 | next: null,
21 | operation: null,
22 | };
23 | }
24 |
25 | if (isNumber(buttonName)) {
26 | if (buttonName === '0' && obj.next === '0') {
27 | return {};
28 | }
29 | // If there is an operation, update next
30 | if (obj.operation) {
31 | if (obj.next) {
32 | return { ...obj, next: obj.next + buttonName };
33 | }
34 | return { ...obj, next: buttonName };
35 | }
36 | // If there is no operation, update next and clear the value
37 | if (obj.next) {
38 | return {
39 | next: obj.next + buttonName,
40 | total: null,
41 | };
42 | }
43 | return {
44 | next: buttonName,
45 | total: null,
46 | };
47 | }
48 |
49 | if (buttonName === '.') {
50 | if (obj.next) {
51 | if (obj.next.includes('.')) {
52 | return { ...obj };
53 | }
54 | return { ...obj, next: `${obj.next}.` };
55 | }
56 | if (obj.operation) {
57 | return { next: '0.' };
58 | }
59 | if (obj.total) {
60 | if (obj.total.includes('.')) {
61 | return {};
62 | }
63 | return { total: `${obj.total}.` };
64 | }
65 | return { total: '0.' };
66 | }
67 |
68 | if (buttonName === '=') {
69 | if (obj.next && obj.operation) {
70 | return {
71 | total: operate(obj.total, obj.next, obj.operation),
72 | next: null,
73 | operation: null,
74 | };
75 | }
76 | // '=' with no operation, nothing to do
77 | return {};
78 | }
79 |
80 | if (buttonName === '+/-') {
81 | if (obj.next) {
82 | return { ...obj, next: (-1 * parseFloat(obj.next)).toString() };
83 | }
84 | if (obj.total) {
85 | return { ...obj, total: (-1 * parseFloat(obj.total)).toString() };
86 | }
87 | return {};
88 | }
89 |
90 | // Button must be an operation
91 |
92 | // When the user presses an operation button without having entered
93 | // a number first, do nothing.
94 | // if (!obj.next && !obj.total) {
95 | // return {};
96 | // }
97 |
98 | // User pressed an operation after pressing '='
99 | if (!obj.next && obj.total && !obj.operation) {
100 | return { ...obj, operation: buttonName };
101 | }
102 |
103 | // User pressed an operation button and there is an existing operation
104 | if (obj.operation) {
105 | if (obj.total && !obj.next) {
106 | return { ...obj, operation: buttonName };
107 | }
108 |
109 | return {
110 | total: operate(obj.total, obj.next, obj.operation),
111 | next: null,
112 | operation: buttonName,
113 | };
114 | }
115 |
116 | // no operation yet, but the user typed one
117 |
118 | // The user hasn't typed a number yet, just save the operation
119 | if (!obj.next) {
120 | return { operation: buttonName };
121 | }
122 |
123 | // save the operation and shift 'next' into 'total'
124 | return {
125 | total: obj.next,
126 | next: null,
127 | operation: buttonName,
128 | };
129 | }
130 |
--------------------------------------------------------------------------------
/src/components/__test__/__snapshots__/Calculator.test.js.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Render Calculator component 1`] = `
4 |
7 |
10 |
11 | Let's do some math!
12 |
13 |
14 | Using a calculator can be extremely helpful but only if you know its particular conventions. While there are different types out there many of the features are the same. Look for the number pad and the four basic operations, multiplication × addition + subtraction - and division ÷. To perform a calculation, make the necessary keystrokes and then hit =. For example, key 4 ÷ 2 =. The calculator should show the answer we expect, 2. Try some small calculations, like 2 + 3 and 4 × 5.
15 |
11 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid qui ipsum eius laborum, adipisci earum velit possimus magnam doloribus atque eaque aperiam inventore. Nobis laudantium rerum excepturi error dignissimos in amet autem veniam, eos aperiam modi nostrum sapiente? Quisquam illo atque accusantium sapiente temporibus, vero, porro sunt hic ratione, quasi magni nobis recusandae assumenda expedita cupiditate blanditiis cumque veritatis iusto optio nemo minus! Maiores corporis illo reiciendis quis assumenda doloremque.
12 |
13 |
14 | Lorem ipsum dolor, sit amet consectetur adipisicing elit. Ratione placeat laudantium molestiae suscipit alias exercitationem quia saepe et sed aliquid quasi ipsa ab quae rerum molestias deleniti aspernatur ipsum, minima aliquam soluta nisi quis doloribus consectetur sunt! Nisi nesciunt, assumenda mollitia iste eveniet asperiores et quia debitis illum consequatur amet? Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolor, pariatur? Nesciunt, aperiam accusamus dignissimos repudiandae officiis obcaecati minus voluptatum, eveniet doloribus illo animi fuga ipsa! Suscipit repudiandae magni aliquam quidem? Lorem ipsum dolor sit amet consectetur adipisicing elit. Id impedit cum quos iusto a sequi iure doloribus veritatis, corrupti dolorum. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tenetur deleniti a quis quos eligendi nostrum incidunt aliquid laudantium, quibusdam voluptate. Voluptatem voluptates iure sapiente quod quisquam! Magni eos ex reiciendis.
15 |
27 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid qui ipsum eius laborum, adipisci earum velit possimus magnam doloribus atque eaque aperiam inventore. Nobis laudantium rerum excepturi error dignissimos in amet autem veniam, eos aperiam modi nostrum sapiente? Quisquam illo atque accusantium sapiente temporibus, vero, porro sunt hic ratione, quasi magni nobis recusandae assumenda expedita cupiditate blanditiis cumque veritatis iusto optio nemo minus! Maiores corporis illo reiciendis quis assumenda doloremque.
28 |
29 |
30 | Lorem ipsum dolor, sit amet consectetur adipisicing elit. Ratione placeat laudantium molestiae suscipit alias exercitationem quia saepe et sed aliquid quasi ipsa ab quae rerum molestias deleniti aspernatur ipsum, minima aliquam soluta nisi quis doloribus consectetur sunt! Nisi nesciunt, assumenda mollitia iste eveniet asperiores et quia debitis illum consequatur amet? Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolor, pariatur? Nesciunt, aperiam accusamus dignissimos repudiandae officiis obcaecati minus voluptatum, eveniet doloribus illo animi fuga ipsa! Suscipit repudiandae magni aliquam quidem? Lorem ipsum dolor sit amet consectetur adipisicing elit. Id impedit cum quos iusto a sequi iure doloribus veritatis, corrupti dolorum. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tenetur deleniti a quis quos eligendi nostrum incidunt aliquid laudantium, quibusdam voluptate. Voluptatem voluptates iure sapiente quod quisquam! Magni eos ex reiciendis.
31 |
43 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Aliquid qui ipsum eius laborum, adipisci earum velit possimus magnam doloribus atque eaque aperiam inventore. Nobis laudantium rerum excepturi error dignissimos in amet autem veniam, eos aperiam modi nostrum sapiente? Quisquam illo atque accusantium sapiente temporibus, vero, porro sunt hic ratione, quasi magni nobis recusandae assumenda expedita cupiditate blanditiis cumque veritatis iusto optio nemo minus! Maiores corporis illo reiciendis quis assumenda doloremque.
44 |
45 |
46 | Lorem ipsum dolor, sit amet consectetur adipisicing elit. Ratione placeat laudantium molestiae suscipit alias exercitationem quia saepe et sed aliquid quasi ipsa ab quae rerum molestias deleniti aspernatur ipsum, minima aliquam soluta nisi quis doloribus consectetur sunt! Nisi nesciunt, assumenda mollitia iste eveniet asperiores et quia debitis illum consequatur amet? Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolor, pariatur? Nesciunt, aperiam accusamus dignissimos repudiandae officiis obcaecati minus voluptatum, eveniet doloribus illo animi fuga ipsa! Suscipit repudiandae magni aliquam quidem? Lorem ipsum dolor sit amet consectetur adipisicing elit. Id impedit cum quos iusto a sequi iure doloribus veritatis, corrupti dolorum. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tenetur deleniti a quis quos eligendi nostrum incidunt aliquid laudantium, quibusdam voluptate. Voluptatem voluptates iure sapiente quod quisquam! Magni eos ex reiciendis.
47 |