From 8130e76ab18369883f32ff43eca8b141a5bff169 Mon Sep 17 00:00:00 2001 From: Adam Akbar Date: Wed, 9 Oct 2024 01:59:03 +0800 Subject: [PATCH] Refactor file imports, fix prettier lint errors, and add prettier and tseslint rules (#9) --- .prettierrc | 8 + bun.lockb | Bin 129166 -> 167082 bytes eslint.config.js | 47 +- package-lock.json | 113 +++++ package.json | 2 + src/app.tsx | 328 +++++++------- src/classes/category.ts | 41 +- src/classes/item.ts | 61 +-- src/classes/rule.ts | 37 +- src/components/disclaimer-dialog.tsx | 112 ++--- .../components/qris-dialog.tsx | 85 ++-- .../components/saweria-dialog.tsx | 123 +++--- .../donation-dialog/donation-dialog.tsx | 108 ++--- src/components/donation-dialog/index.ts | 2 +- src/components/footer.tsx | 65 ++- src/components/form.tsx | 61 +-- src/components/header.tsx | 44 +- .../result-box/components/detail-dialog.tsx | 97 ++--- .../detail-dialog/components/detail-table.tsx | 237 +++++----- .../result-box/components/summary-table.tsx | 108 ++--- .../components/value-table-cell.tsx | 104 ++--- src/components/result-box/index.ts | 2 +- src/components/result-box/result-box.tsx | 407 +++++++++--------- src/components/saved-calculation.tsx | 307 +++++++------ src/components/stepper.tsx | 84 ++-- src/components/text-field.tsx | 180 ++++---- src/data/categories.ts | 352 +++++++-------- src/helpers/calculate-palm-grade.ts | 250 +++++------ src/helpers/index.ts | 58 +-- src/helpers/vars.ts | 16 +- src/main.tsx | 48 ++- tsconfig.node.json | 38 +- vite.config.ts | 21 +- 33 files changed, 1890 insertions(+), 1656 deletions(-) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..4370a5a --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "arrowParens": "avoid", + "bracketSameLine": true, + "semi": false, + "singleQuote": true, + "tabWidth": 4, + "trailingComma": "all" + } \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 789c31ee4027231397158eab3b06be33ad39cf78..2a890bb8b8b7d294502483be7aef190cc3a3392c 100644 GIT binary patch delta 49317 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°5U^IRUw;bSr-OKEl^qrRzEovrOe%0AF|V$sWPyqOugHQ>pPJ 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 J{VWD|_z#Iggq8pR delta 24221 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℞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 8" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -3534,6 +3549,50 @@ } } }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/eslint-plugin-react-hooks": { "version": "5.1.0-rc-fb9a90fa48-20240614", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz", @@ -3734,6 +3793,13 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -4699,6 +4765,36 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -5106,6 +5202,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", diff --git a/package.json b/package.json index 3dd6026..bcee038 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,8 @@ "@types/react-dom": "^18.3.0", "@vitejs/plugin-react-swc": "^3.7.1", "eslint": "^9.12.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react-hooks": "^5.1.0-rc-fb9a90fa48-20240614", "eslint-plugin-react-refresh": "^0.4.12", "globals": "^15.10.0", diff --git a/src/app.tsx b/src/app.tsx index 7ad454c..66a8e95 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,173 +1,169 @@ -import { useState } from "react"; - -import Box from "@mui/material/Box"; -import Container from "@mui/material/Container"; - -import DisclaimerDialog from "./components/disclaimer-dialog"; -import Header from "./components/header"; -import Footer from "./components/footer"; -import Stepper from "./components/stepper"; +// vendors +import { useState } from 'react' +import { Box, Container, Fade } from '@mui/material' +// components +import DonationDialog from './components/donation-dialog' +import DisclaimerDialog from './components/disclaimer-dialog' +import Footer from './components/footer' +import Form from './components/form' +import Header from './components/header' +import ResultBox from './components/result-box' +import Stepper from './components/stepper' +import SavedCalculation from './components/saved-calculation' // import Notification from './components/Notification'; -import DonationDialog from "./components/donation-dialog"; -import SavedCalculation from "./components/saved-calculation"; -import Form from "./components/form"; -import ResultBox from "./components/result-box"; -import vars from "./helpers/vars.ts"; -import { Fade } from "@mui/material"; +import vars from './helpers/vars' const INPUT_CODES = [ - [ - "BM", - "BLM", - // 'TBK', // skipped because 100% cut - "BMTG", - ], - [ - "BGP", - // 'JK', // skipped because 100% cut - "BR", - // 'BP', // skipped because 100% cut - "BK", - "PBB", - "totalWeight", - ], -]; + [ + 'BM', + 'BLM', + // 'TBK', // skipped because 100% cut + 'BMTG', + ], + [ + 'BGP', + // 'JK', // skipped because 100% cut + 'BR', + // 'BP', // skipped because 100% cut + 'BK', + 'PBB', + 'totalWeight', + ], +] export default function App() { - vars.formValues = useState({}); - vars.activeStep = useState(0); - - // const [notifications, setNotifications] = useState([]) - - // window.onmessage = (event) => { - // if (event.data.notification) { - // const notification = { - // id: event.data.messageId || Date.now(), - // text: event.data.notification.body || 'terjadi kesalahan', - // isShow: true, - // buttonText: event.data.data.buttonText, - // buttonUrl: event.data.data.buttonUrl - // } - - // notifications.push() - // setNotifications([...notifications]) - // } - // }; - - const [isTextFieldErrors, setIsTextFieldErrors] = useState({}); - - const getInvalidTextFieldIds = () => { - return INPUT_CODES[vars.activeStep[0]].filter( - (inputId) => - vars.formValues[0][inputId] === "" || isNaN(vars.formValues[0][inputId]) - ); - }; - - const hasErrors = () => { - const invalidTextFieldIds = getInvalidTextFieldIds(); - return invalidTextFieldIds.length !== 0; - }; - - const isFormValuesValid = () => { - const invalidTextFieldIds = getInvalidTextFieldIds(); - - setIsTextFieldErrors( - Object.fromEntries( - invalidTextFieldIds.map((elementId) => [elementId, true]) - ) - ); - - if (!hasErrors()) { - return true; - } - - return false; - }; - - const handleNext = () => { - if (isFormValuesValid()) { - return vars.activeStep[1](vars.activeStep[0] + 1); - } - }; - - const handlePrev = () => vars.activeStep[1]((prev: number) => prev - 1); - - return ( - -
- - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - -