|
@@ -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);
|