diff --git a/components/dateSelect.js b/components/dateSelect.js index 810d064..40bde0f 100644 --- a/components/dateSelect.js +++ b/components/dateSelect.js @@ -1,4 +1,6 @@ import { useContext } from 'react' +import useSWR, { SWRConfig } from 'swr' + import { WizardContext, ACTIONS } from '../context/wizardStore' import Form from 'react-bootstrap/Form' @@ -7,8 +9,14 @@ import moment from 'moment' import 'react-dates/initialize' import { DateRangePicker, SingleDatePicker } from 'react-dates' +const fetcher = (path) => fetch(path).then((r) => r.json()) + export default function DateSelect() { const { state, dispatch } = useContext(WizardContext) + const { data: bookedOn, error: fetchBookedOnError } = useSWR( + '/api/booked', + fetcher + ) const { multipleDays, @@ -17,11 +25,24 @@ export default function DateSelect() { focusedInput, pickupTime, dropoffTime, - bookedOn, } = state function isDayBlocked(momentDay) { - return bookedOn.some((rawDay) => momentDay.isSame(rawDay)) + return ( + bookedOn && bookedOn.some((rawDay) => momentDay.isSame(rawDay, 'day')) + ) + } + + if (!bookedOn) { + return
Lade Buchungen...
+ } + + if (fetchBookedOnError) { + return ( +
+ Entschuldige, aber die Buchungszeiten konnten nicht geladen werden +
+ ) } return ( @@ -60,6 +81,8 @@ export default function DateSelect() { dispatch({ type: ACTIONS.SET_DATE, @@ -74,16 +97,19 @@ export default function DateSelect() { }) } isDayBlocked={isDayBlocked} - id="your_unique_id" + id="startDate" /> )} {state.multipleDays === true && ( { dispatch({ type: ACTIONS.SET_DATE, diff --git a/package-lock.json b/package-lock.json index 25b7ef2..5b129b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7055,6 +7055,21 @@ "util.promisify": "~1.0.0" } }, + "swr": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/swr/-/swr-0.2.3.tgz", + "integrity": "sha512-JhuuD5ojqgjAQpZAhoPBd8Di0Mr1+ykByVKuRJdtKaxkUX/y8kMACWKkLgLQc8pcDOKEAnbIreNjU7HfqI9nHQ==", + "requires": { + "fast-deep-equal": "2.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + } + } + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", diff --git a/package.json b/package.json index 7bc4690..e56b32b 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "react-bootstrap": "^1.0.1", "react-dates": "^21.8.0", "react-dom": "16.13.1", - "rebass": "^4.0.7" + "rebass": "^4.0.7", + "swr": "^0.2.3" } } diff --git a/pages/api/booked.js b/pages/api/booked.js index a20b7a8..ce6293b 100644 --- a/pages/api/booked.js +++ b/pages/api/booked.js @@ -2,13 +2,5 @@ export default (req, res) => { res.statusCode = 200 - res.json({ - bookedOn: [ - '2020-07-10', - '2020-07-11', - '2020-07-12', - '2020-07-23', - '2020-08-01', - ], - }) + res.json(['2020-07-23', '2020-07-24', '2020-07-25', '2020-08-01']) }