summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRosyid Haryadi <rosyid_haryadi@protonmail.com>2023-10-02 23:05:59 +0700
committerRosyid Haryadi <rosyid_haryadi@protonmail.com>2023-10-02 23:05:59 +0700
commitb2b49909936dc9c5ef77e843d98a87f3e3894861 (patch)
treecd51e1a9d1a04fa0087d18e6bdc2f1de52256baf
parentd14296859574e7bf644e7d50acff85a2ec7f687b (diff)
simplifying fetch but cursed useeffect always fired twice in dev environment and doesn't respect state, i hate this.
-rw-r--r--src/Result.jsx30
-rw-r--r--src/main.jsx4
2 files changed, 20 insertions, 14 deletions
diff --git a/src/Result.jsx b/src/Result.jsx
index 374298d..f014c78 100644
--- a/src/Result.jsx
+++ b/src/Result.jsx
@@ -5,16 +5,30 @@ import dayjs from "dayjs";
function Result({listEntry, baseSalary}) {
const [totalOvertimePay, setTotalOvertimePay] = useState(0);
- const [holidayData, setHolidayData] = useState(null);
+ const [holidayData, setHolidayData] = useState([[]]);
+ const [fetched, setFetched] = useState([]);
+
useEffect(() => {
setTotalOvertimePay(getOvertimePayTotal(listEntry, baseSalary, holidayData));
}, [listEntry, baseSalary, holidayData]);
+ const fetchApi = (year) => {
+ const baseUrl = 'https://dayoffapi.vercel.app/api';
+ if (fetched.includes(year)) {
+ return Promise.resolve();
+ }
+ return fetch(`${baseUrl}/?year=${year}`)
+ .then((response) => response.json())
+ .then((data) => {
+ setHolidayData((currentData) => [...currentData, ...data]);
+ setFetched((current) => [...current, year]);
+ });
+ }
+
useEffect(() => {
- fetchApi(dayjs().year()).then((result) => {
- setHolidayData(result);
- })
+ fetchApi(dayjs().year()).then(() => {});
+ fetchApi(dayjs().year() - 1).then(() => {});
}, []);
if (totalOvertimePay < 0) {
@@ -48,14 +62,6 @@ function Result({listEntry, baseSalary}) {
)
}
-function fetchApi(year) {
- // kemungkinan nanti ada pengecekan taun udah pernah difetch / belum
- const baseUrl = 'https://dayoffapi.vercel.app/api';
- return fetch(`${baseUrl}/?year=${year}`)
- .then((response) => response.json())
- .then((data) => data);
-}
-
function segmentTime(duration, segments) {
const segmentedHours = [];
diff --git a/src/main.jsx b/src/main.jsx
index f923230..6552764 100644
--- a/src/main.jsx
+++ b/src/main.jsx
@@ -7,7 +7,7 @@ import '@fontsource/roboto/500.css';
import '@fontsource/roboto/700.css';
ReactDOM.createRoot(document.getElementById('root')).render(
- // <React.StrictMode>
+ <React.StrictMode>
<App />
- // </React.StrictMode>,
+ </React.StrictMode>,
)