فهرست منبع

Cleaning up that super terrible code a little

Kirk Trombley 5 سال پیش
والد
کامیت
4746c35945
1فایلهای تغییر یافته به همراه24 افزوده شده و 13 حذف شده
  1. 24 13
      client/src/App.js

+ 24 - 13
client/src/App.js

@@ -80,20 +80,31 @@ const chunk = (arr, len) => {
   return chunks;
 }
 
-const advanceDay = (availability, name, month, day) => availability
-  .map(item => {
-    if (item.month === month && item.day === day) {
-      const ind = item.availability.findIndex(item => item.name === name)
-      if (ind === -1) {
-        return { ...item, availability: [...item.availability, { name, status: nextState.unknown }]}
-      }
-      const status = nextState[item.availability[ind].status];
-      return { ...item, availability: [...item.availability.slice(0, ind), { name, status }, ...item.availability.slice(ind + 1)]};
-    }
-    return item;
-  });
+const advanceDay = (dates, name, month, day) => {
+  const dateInd = dates.findIndex(item => item.month === month && item.day === day);
+  if (dateInd === -1) {
+    return dates;
+  }
+  const leftDates = dates.slice(0, dateInd);
+  const date = dates[dateInd];
+  const rightDates = dates.slice(dateInd + 1);
+  const avInd = date.availability.findIndex(item => item.name === name);
+
+  let otherAvail;
+  let status;
+  if (avInd === -1) {
+    otherAvail = date.availability;
+    status = nextState.unknown;
+  } else {
+    const leftAvail = date.availability.slice(0, avInd);
+    const rightAvail = date.availability.slice(avInd + 1);
+    otherAvail = [...leftAvail, ...rightAvail];
+    status = nextState[date.availability[avInd].status];
+  }
+  return [...leftDates, {...date, availability: [{ name, status }, ...otherAvail]}, ...rightDates];
+}
 
-const advanceWeek = (availability, name, dates) => dates.reduce((acc, { month, day }) => advanceDay(acc, name, month, day), availability)
+const advanceWeek = (dates, name, dateRange) => dateRange.reduce((acc, { month, day }) => advanceDay(acc, name, month, day), dates)
 
 function App() {
   const [name, setName] = useState(null);