diff --git a/components/Graph/Graph.jsx b/components/Graph/Graph.jsx new file mode 100644 index 0000000..7380a9d --- /dev/null +++ b/components/Graph/Graph.jsx @@ -0,0 +1,58 @@ +import React from "react"; +import { Line } from "react-chartjs-2"; +import { + Chart, + CategoryScale, + LinearScale, + PointElement, + LineElement, + Title, + Tooltip, + Legend, +} from "chart.js"; +import styles from "./Graph.module.sass"; + +export default function Graph(props) { + Chart.register( + CategoryScale, + LinearScale, + PointElement, + LineElement, + Title, + Tooltip, + Legend + ); + + const accounts = [ + ...new Set( + props.transactions + .map((txn) => { + return txn.parts.map((part) => { + return part.account; + }); + }) + .flat() + ), + ]; + + return ( +
+ { + return { + label: account, + data: [1, 2, 4], + // backgroundColor: getComputedStyle( + // document.documentElement + // ).getPropertyValue("--color-blue"), + // borderColor: document.documentElement.style.getPropertyValue("--color-blue"), + }; + }), + }} + /> +
+ ); +} diff --git a/components/Graph/Graph.module.sass b/components/Graph/Graph.module.sass new file mode 100644 index 0000000..8746e67 --- /dev/null +++ b/components/Graph/Graph.module.sass @@ -0,0 +1,9 @@ +.graph + border-radius: var(--card-radius) + background-color: var(--color-white) + margin: 10px + padding: 20px + width: 60% + height: 20vh + font-family: "Montserrat" + font-weight: 300 \ No newline at end of file diff --git a/components/Overview/Overview.jsx b/components/Overview/Overview.jsx new file mode 100644 index 0000000..8fcb384 --- /dev/null +++ b/components/Overview/Overview.jsx @@ -0,0 +1,16 @@ +import React from "react"; +import styles from "./Overview.module.sass"; + +export default function Overview(props) { + const accounts = [...new Set(props.transactions.map((txn) => { + return txn.parts.map((part) => { + return part.account; + }); + }).flat())]; +console.log(accounts) + return
+
+        {JSON.stringify(props.stats, null, 2)}
+    
+
; +} diff --git a/components/Overview/Overview.module.sass b/components/Overview/Overview.module.sass new file mode 100644 index 0000000..28d6120 --- /dev/null +++ b/components/Overview/Overview.module.sass @@ -0,0 +1,9 @@ +.overview_card + border-radius: var(--card-radius) + background-color: var(--color-white) + margin: 10px + padding: 20px + width: 36% + height: 20vh + font-family: "Montserrat" + font-weight: 300 \ No newline at end of file diff --git a/components/Transaction/Transaction.jsx b/components/Transaction/Transaction.jsx new file mode 100644 index 0000000..4d2d293 --- /dev/null +++ b/components/Transaction/Transaction.jsx @@ -0,0 +1,27 @@ +import React from "react"; +import styles from "./Transaction.module.sass" + +export default function Transaction(props) { + // console.log(props); + return ( +
+ {props.date} + {props.type} + {props.payee} + {props.descr} + {props.parts && + props.parts.map((part, index) => { + return ( + <> + + {part.extract ? : } + + {part.account || " "} + {part.amount || " "} + {part.currency || " "} + + ); + })} +
+ ); +} diff --git a/components/Transaction/Transaction.module.sass b/components/Transaction/Transaction.module.sass new file mode 100644 index 0000000..ecd6f81 --- /dev/null +++ b/components/Transaction/Transaction.module.sass @@ -0,0 +1,46 @@ +.transaction_card + border-radius: var(--card-radius) + background-color: var(--color-white) + margin: 10px + padding: 20px + width: 100% + font-family: "Montserrat" + font-weight: 300 + display: grid + grid-template-columns: .5fr 2fr 1fr 3fr 3fr 3fr + + p + margin: 0 + margin-left: 30px + display: flex + justify-content: space-around + justify-items: flex-begin + width: calc(100% - 30px) + +.transaction_date, +.transaction_payee, +.transaction_type, +.transaction_descr + margin-bottom: 10px + padding-bottom: 10px + font-size: 1.2rem + border-bottom: 1px solid var(--color-blue) + +.transaction_date + grid-column: 1 / span 2 +.transaction_payee + grid-column: 4 / span 1 +.transaction_type + grid-column: 3 / span 1 +.transaction_descr + grid-column: 5 / span 2 + +.transaction_amount + grid-column: 5 / span 1 + text-align: right + padding-right: 10px +.transaction_account + grid-column: 2 / span 3 +.transaction_extract + grid_column: 1 / span 1 + color: var(--color-blue) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d48237f..35fc654 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,10 @@ "name": "bc-next", "version": "0.1.0", "dependencies": { + "chart.js": "^3.7.1", "next": "12.1.0", "react": "17.0.2", + "react-chartjs-2": "^4.0.1", "react-dom": "17.0.2" }, "devDependencies": { @@ -647,6 +649,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chart.js": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.1.tgz", + "integrity": "sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==" + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2321,6 +2328,15 @@ "node": ">=0.10.0" } }, + "node_modules/react-chartjs-2": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-4.0.1.tgz", + "integrity": "sha512-q8bgWzKoFvBvD7YcjT/hXG8jt55TaMAuJ1dmI3tKFJ7CijUWYz4pIfOhkTI6PBTwqu/pmeWsClBRd/7HiWzN1g==", + "peerDependencies": { + "chart.js": "^3.5.0", + "react": "^16.8.0 || ^17.0.0" + } + }, "node_modules/react-dom": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", @@ -3224,6 +3240,11 @@ "supports-color": "^7.1.0" } }, + "chart.js": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.7.1.tgz", + "integrity": "sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4456,6 +4477,12 @@ "object-assign": "^4.1.1" } }, + "react-chartjs-2": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-4.0.1.tgz", + "integrity": "sha512-q8bgWzKoFvBvD7YcjT/hXG8jt55TaMAuJ1dmI3tKFJ7CijUWYz4pIfOhkTI6PBTwqu/pmeWsClBRd/7HiWzN1g==", + "requires": {} + }, "react-dom": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", diff --git a/package.json b/package.json index 7b92c5e..ada748f 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,10 @@ "lint": "next lint" }, "dependencies": { + "chart.js": "^3.7.1", "next": "12.1.0", "react": "17.0.2", + "react-chartjs-2": "^4.0.1", "react-dom": "17.0.2" }, "devDependencies": { diff --git a/pages/_app.js b/pages/_app.js index 1e1cec9..7aac241 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -1,7 +1,14 @@ -import '../styles/globals.css' +import '../styles/globals.scss' +import Script from 'next/script' +import Head from 'next/head' function MyApp({ Component, pageProps }) { - return + return ( + <> +