{"version":3,"sources":["api/client.js","components/Header.js","state.js","hooks/notifications.js","api/adapter.js","api/services.js","settings/colors.js","components/Button.js","utils/data.js","components/Input.js","components/Field.js","settings/events.js","settings/reservations.js","settings/ridingschool.js","settings/items.js","containers/ItemEditor.js","components/Pagination.js","containers/ItemTable.js","components/Menu.js","components/Pell/TagSelect.js","components/Pell/index.js","containers/Admin.js","containers/Stub.js","containers/Settings.js","settings/templates.js","containers/Book.js","containers/ErrorBoundary.js","components/Footer.js","api/authentication.js","containers/Login.js","containers/NotFound.js","containers/RidingSchool.js","containers/Start.js","components/Notifications.js","components/ProtectedRoute.js","components/ScrollToTop.js","App.js","index.js"],"names":["socket","io","client","feathers","configure","socketio","timeout","authentication","path","storage","window","localStorage","Header","noborder","className","to","alt","src","style","height","minWidth","state","store","semaphore","session","notifications","addNotification","data","id","nanoid","type","message","notification","payload","name","timerId","includes","undefined","setTimeout","removeNotification","console","error","globalState","cancelAutoremove","_id","index","findIndex","clearTimeout","filter","method","endpoint","args","a","async","service","create","find","get","patch","remove","update","events","adapter","reservations","ridingschool","templates","danger","bg","border","fg","focus","hover","default","neutral","primary","success","warning","Button","color","component","props","label","Component","colors","getValue","el","checked","Date","value","toISOString","isNaN","TypeError","getTypeError","Number","getFormData","form","Array","from","reduce","acc","hashString","str","hash","length","i","charCodeAt","Input","adminOnly","hideTable","isInvalid","options","showAsDiv","map","option","key","defaultChecked","defaultValue","join","disabled","toString","toLocaleString","Field","El","htmlFor","dangerouslySetInnerHTML","__html","required","defaults","fields","title","dateFrom","dateTo","allocation","_numReservations","noQuery","price","active","getLabel","subject","plural","singular","getAge","birthday","birthdate","now","Math","floor","eventId","status","createdAt","updatedAt","legend","fieldset","parse","tableHeader","phone","street","city","name_parent","email","max","phone_parent","street_parent","city_parent","experience","insurance","tetanus_vaccination","special_instructions","accident_insurance","accident_treatment","correctness","toc","privacy","notes","items","ItemEditor","history","pathname","location","match","params","useState","dbOptions","setDbOptions","useNotifications","item","setItem","isNew","itemType","split","settings","getSettings","hideEditor","getField","wrap","onChange","target","prevState","isArray","readOnly","startsWith","useEffect","p","PCancelable","resolve","reject","api","then","catch","cancel","query","$limit","$sort","Helmet","document","head","dataset","titlePrefix","onSubmit","e","preventDefault","action","res","goBack","field","backgroundColor","onClick","confirm","Pagination","loading","limit","setSkip","skip","total","page","ceil","pages","role","aria-label","defaultQueries","saveQuery","JSON","stringify","ItemTable","format","Intl","DateTimeFormat","day","month","year","reverse","sort","b","printItems","useRef","setItems","getItem","loadQuery","setQuery","fetchItems","useCallback","setFilter","newState","on","off","current","print","Link","event","$search","search","autoFocus","navigator","maxTouchPoints","placeholder","replace","setSort","content","maxWidth","textOverflow","arrow","tagName","useDefaultStyles","$skip","prompt","Set","d","removeItem","reload","removeQuery","Menu","endsWith","reducer","TagSelect","extraFields","handleChange","log","localeCompare","Pell","initialContent","element","editor","init","actions","classes","button","selected","innerHTML","exec","ref","routes","statusOpts","getReservationSettings","f","getRidingSchoolSettings","getTemplateSettings","templateBody","setTemplateBody","template","setTemplate","setType","body","Admin","notify","reservation","eventType","exact","Book","push","setEvent","booking","setBooking","sent","setSent","step","setStep","steps","services","toLocaleDateString","bookingRequest","padding","colSpan","Object","keys","getData","ErrorBoundary","info","this","wordBreak","children","view","getFullYear","href","reAuthenticate","user","password","authenticate","strategy","logout","auth","NotFound","RidingSchool","eventTypes","getEventSettings","Td","URLSearchParams","savedData","setEventType","setEvents","eventsOfType","minHeight","opt","every","evt","bookedOut","TransitionGroup","CSSTransition","classNames","onTouchStart","onMouseOver","rest","ScrollToTop","scrollTo","propTypes","PropTypes","object","isRequired","shape","string","withRouter","pointerEvents","transition","Login","Start","ReactDOM","render","getElementById"],"mappings":"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","file":"static/js/main.987bd70b.chunk.js","sourcesContent":["import io from 'socket.io-client'\nimport feathers from '@feathersjs/client'\n\nconst url =\n process.env.NODE_ENV === 'production'\n ? 'https://buchen.ponyhof-maikendiek.de'\n : 'http://localhost:3034'\n\nconst socket = io(url)\nconst client = feathers()\n\nclient.configure(\n feathers.socketio(socket, {\n timeout: 15000\n })\n)\n\nclient.configure(\n feathers.authentication({\n path: 'api/authentication',\n storage: window.localStorage\n })\n)\n\nexport default client\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\n\nconst Header = ({ noborder }) => (\n \n
\n \n \n \n
\n

\n \n Ponyhof Maikendiek Buchungssystem\n \n

\n \n)\n\nHeader.propTypes = {\n noborder: PropTypes.bool\n}\n\nexport default Header\n","import { store } from 'react-easy-state'\n\nexport const state = store({\n semaphore: 0,\n session: null,\n notifications: []\n})\n\nexport default state\n","import nanoid from 'nanoid'\nimport globalState from '../state'\n\nconst addNotification = data => {\n const id = nanoid()\n const type = data.message ? 'danger' : data.type || 'default'\n const notification = {\n id,\n payload: `${\n data.message ? `${data.name || 'Fehler'}: ${data.message}` : data.payload\n }`,\n timerId: !['danger', 'warning'].includes(type)\n ? setTimeout(() => removeNotification(id), 5000)\n : undefined,\n type\n }\n\n if (data.message) console.error(data)\n\n globalState.notifications = [...globalState.notifications, notification]\n\n return notification\n}\n\nconst cancelAutoremove = _id => {\n const index = globalState.notifications.findIndex(({ id }) => id === _id)\n if (index < 0) return\n const { timerId } = globalState.notifications[index]\n if (timerId >= 0) {\n globalState.notifications[index].timerId = undefined\n clearTimeout(timerId)\n }\n}\n\nconst removeNotification = _id => {\n globalState.notifications = globalState.notifications.filter(\n ({ id }) => id !== _id\n )\n}\n\nexport default () => ({ addNotification, cancelAutoremove, removeNotification })\n","import client from '../api/client'\nimport state from '../state'\n\nconst method = async (endpoint, method, args) => {\n try {\n state.semaphore++\n const service = client.service(endpoint)\n return await service[method](...args)\n } catch (error) {\n throw error\n } finally {\n state.semaphore--\n }\n}\n\nexport default endpoint => ({\n create: (...args) => method(endpoint, 'create', args),\n find: (...args) => method(endpoint, 'find', args),\n get: (...args) => method(endpoint, 'get', args),\n patch: (...args) => method(endpoint, 'patch', args),\n remove: (...args) => method(endpoint, 'remove', args),\n update: (...args) => method(endpoint, 'update', args)\n})\n","import adapter from './adapter'\n\nexport default {\n events: adapter('api/events'),\n reservations: adapter('api/reservations'),\n ridingschool: adapter('api/ridingschool'),\n templates: adapter('api/templates')\n}\n","export default {\n danger: {\n bg: 'bg-red-600',\n border: 'border-red-300',\n fg: 'text-white',\n focus: 'focus:border-red-700',\n hover: 'hover:bg-red-700'\n },\n default: {\n bg: 'bg-white',\n border: 'border-gray-400',\n fg: 'text-blue-600',\n focus: 'focus:border-blue-700',\n hover: 'hover:bg-gray-100'\n },\n neutral: {\n bg: '',\n border: '',\n fg: 'text-blue-700',\n focus: '',\n hover: ''\n },\n primary: {\n bg: 'bg-blue-600',\n border: 'border-blue-300',\n fg: 'text-white',\n focus: 'focus:border-blue-700',\n hover: 'hover:bg-blue-700'\n },\n success: {\n bg: 'bg-green-600',\n border: 'border-green-300',\n fg: 'text-white',\n focus: 'focus:border-green-700',\n hover: 'hover:bg-green-700'\n },\n warning: {\n bg: 'bg-yellow-600',\n border: 'border-yellow-300',\n fg: 'text-white',\n focus: 'focus:border-yellow-700',\n hover: 'hover:bg-yellow-700'\n }\n}\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport colors from '../settings/colors'\n\nconst Button = ({\n color = 'default',\n component = 'button',\n label,\n ...props\n}) => {\n const Component = component\n return (\n \n )\n}\n\nButton.propTypes = {\n bgcolor: PropTypes.string,\n color: PropTypes.string,\n component: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n label: PropTypes.string\n}\n\nexport default Button\n","const getTypeError = el =>\n new TypeError(\n `Input \"${el.name}\" with type \"${\n el.type\n }\" was submitted with invalid value: \"${el.value}\" (${typeof el.value})`\n )\n\nconst getValue = el => {\n switch (el.type) {\n case 'checkbox':\n return el.checked\n case 'datetime-local':\n return new Date(el.value).toISOString()\n case 'number':\n if (isNaN(el.value)) throw getTypeError(el)\n return Number(el.value)\n default:\n return el.value\n }\n}\n\nexport const getFormData = form =>\n Array.from(form)\n .filter(el => el.name)\n .filter(el => (el.type === 'radio' ? el.checked : true))\n .reduce(\n (acc, el) => ({\n ...acc,\n [el.name]: getValue(el)\n }),\n {}\n )\n\nexport const hashString = str => {\n let hash = 0\n\n if (typeof str !== 'string' || str.length === 0) {\n return hash\n }\n\n for (var i = 0; i < str.length; i++) {\n let char = str.charCodeAt(i)\n hash = (hash << 5) - hash + char\n hash = hash & hash\n }\n return hash\n}\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport colors from '../settings/colors'\nimport { hashString } from '../utils/data'\n\nconst Input = ({\n adminOnly,\n hideTable,\n isInvalid,\n neutral,\n options,\n showAsDiv,\n ...props\n}) =>\n props.type === 'radio' ? (\n
\n {options.map(option => (\n \n ))}\n
\n ) : props.type === 'select' ? (\n option.value || option)\n .join('')}`}\n >\n {options.map(option => (\n \n {option.label || option}\n \n ))}\n \n ) : props.type === 'textarea' ? (\n \n ) : showAsDiv ? (\n
\n {(props.type === 'datetime-local' || props.type === 'date') &&\n props.defaultValue\n ? new Date(props.defaultValue).toLocaleString()\n : props.defaultValue || '–'}\n
\n ) : (\n \n )\n\nInput.propTypes = {\n adminOnly: PropTypes.bool,\n hideTable: PropTypes.bool,\n isInvalid: PropTypes.bool,\n options: PropTypes.array,\n neutral: PropTypes.bool,\n type: PropTypes.string.isRequired\n}\n\nexport default Input\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport Input from './Input'\n\nconst Field = ({ label, ...props }) => {\n const El = props.type === 'radio' ? 'span' : 'label'\n return (\n <>\n \n \n {props.required && *}\n \n \n \n )\n}\n\nField.propTypes = {\n label: PropTypes.string\n}\n\nexport default Field\n","export default (defaults = {}) => ({\n fields: [\n {\n defaultValue: defaults.title,\n label: 'Titel',\n name: 'title',\n required: true,\n type: 'text'\n },\n {\n defaultValue: defaults.type,\n label: 'Art des Termins',\n name: 'type',\n options: [\n 'Tagesferien',\n 'Reiterferien',\n { disabled: true, label: 'Reitschule', value: 'Reitschule' }\n ],\n required: true,\n type: 'select'\n },\n {\n defaultValue: defaults.dateFrom,\n label: 'Datum von',\n name: 'dateFrom',\n required: true,\n type: 'date'\n },\n {\n defaultValue: defaults.dateTo,\n label: 'Datum bis',\n name: 'dateTo',\n required: true,\n type: 'date'\n },\n {\n defaultValue: defaults.allocation,\n label: 'Kontingent',\n name: 'allocation',\n required: true,\n type: 'number'\n },\n {\n defaultValue: defaults._numReservations,\n label: 'Reservierungen',\n name: '_numReservations',\n noQuery: true,\n showAsDiv: true,\n type: 'number'\n },\n {\n defaultValue: defaults.price,\n hideTable: true,\n label: 'Preis',\n name: 'price',\n required: true,\n type: 'number'\n },\n {\n defaultChecked: defaults.active,\n label: 'Aktiv',\n name: 'active',\n type: 'checkbox'\n }\n ],\n getLabel: ({ title, type }) => `Termin \"${title} (${type})\"`,\n subject: {\n plural: 'Termine',\n singular: 'Termin'\n }\n})\n","const getAge = ({ birthday }) => {\n const birthdate = new Date(birthday)\n const now = new Date()\n return Math.floor((now - birthdate) / (1000 * 60 * 60 * 24 * 365.25))\n}\n\nexport default (defaults = {}) => ({\n fields: [\n {\n adminOnly: true,\n defaultValue: defaults.eventId,\n label: 'Termin',\n name: 'eventId',\n options: 'events',\n required: true,\n type: 'select'\n },\n {\n adminOnly: true,\n defaultValue: defaults.status,\n label: 'Status',\n name: 'status',\n options: [\n 'Neu',\n 'Eingang bestätigt',\n 'Teilnahme bestätigt',\n 'Bezahlt',\n 'Storniert'\n ],\n required: true,\n type: 'select'\n },\n {\n adminOnly: true,\n defaultValue: defaults.createdAt,\n label: 'Eingegangen',\n name: 'createdAt',\n showAsDiv: true,\n type: 'datetime-local'\n },\n {\n adminOnly: true,\n defaultValue: defaults.updatedAt,\n hideTable: true,\n label: 'Zuletzt geändert',\n name: 'updatedAt',\n showAsDiv: true,\n type: 'datetime-local'\n },\n {\n legend: 'Kind',\n fieldset: [\n {\n defaultValue: defaults.name,\n label: 'Vorname, Name',\n name: 'name',\n required: true,\n type: 'text'\n },\n {\n defaultValue: defaults.birthday,\n label: 'Geburtsdatum',\n name: 'birthday',\n parse: getAge,\n required: true,\n tableHeader: 'Alter',\n type: 'date'\n },\n {\n defaultValue: defaults.phone,\n label: 'Telefonnummer',\n name: 'phone',\n type: 'tel'\n },\n {\n defaultValue: defaults.street,\n hideTable: true,\n label: 'Straße, Hausnummer',\n name: 'street',\n required: true,\n type: 'text'\n },\n {\n defaultValue: defaults.city,\n label: 'Postleitzahl, Ort',\n name: 'city',\n required: true,\n type: 'text'\n }\n ]\n },\n {\n legend: 'Erziehungsberechtigte(r)',\n fieldset: [\n {\n defaultValue: defaults.name_parent,\n hideTable: true,\n label: 'Vorname, Name',\n name: 'name_parent',\n required: true,\n type: 'text'\n },\n {\n defaultValue: defaults.email,\n hideTable: true,\n label: 'E-Mail-Adresse',\n max: 200,\n name: 'email',\n required: true,\n type: 'email'\n },\n {\n defaultValue: defaults.phone_parent,\n hideTable: true,\n label: 'Telefonnummer',\n name: 'phone_parent',\n required: true,\n type: 'tel'\n },\n {\n defaultValue: defaults.street_parent,\n hideTable: true,\n label: 'Straße, Hausnummer',\n name: 'street_parent',\n type: 'text'\n },\n {\n defaultValue: defaults.city_parent,\n hideTable: true,\n label: 'Postleitzahl, Ort',\n name: 'city_parent',\n type: 'text'\n }\n ]\n },\n {\n legend: 'Weitere Angaben',\n fieldset: [\n {\n defaultValue: defaults.experience,\n hideTable: true,\n label: 'Reitkenntnisse des Kindes',\n name: 'experience',\n options: [\n 'keine',\n 'wenige',\n 'regelmäßiger Unterricht seit mind. 2 Jahren',\n 'regelmäßiger Unterricht seit mind. 4 Jahren',\n 'regelmäßiger Unterricht seit mind. 6 Jahren'\n ],\n required: true,\n type: 'select'\n },\n {\n defaultValue: defaults.insurance,\n hideTable: true,\n label: 'Krankenkasse des Kindes',\n name: 'insurance',\n required: true,\n type: 'text'\n },\n {\n defaultValue: defaults.tetanus_vaccination,\n hideTable: true,\n label: 'Letzte Tetanusimpfung des Kindes',\n name: 'tetanus_vaccination',\n //required: true,\n type: 'date'\n },\n {\n defaultValue: defaults.special_instructions,\n label: 'Allergien, Besonderheiten oder Berücksichtigungen beim Essen',\n name: 'special_instructions',\n tableHeader: 'Allergien etc.',\n type: 'text'\n },\n {\n defaultValue: defaults.accident_insurance,\n hideTable: true,\n label:\n 'Besteht für Ihr Kind eine Unfallversicherung, die das Reiten mit einschließt?',\n name: 'accident_insurance',\n options: ['ja', 'nein'],\n required: true,\n type: 'radio'\n },\n {\n defaultValue: defaults.accident_treatment,\n hideTable: true,\n label:\n 'Falls erforderlich, darf Ihr Kind mit Kühlpacks, Pflaster und Jodsalbe behandelt werden?',\n name: 'accident_treatment',\n options: ['ja', 'nein'],\n required: true,\n type: 'radio'\n }\n ]\n },\n {\n legend: 'Bestätigungen',\n fieldset: [\n {\n defaultChecked: defaults.correctness,\n hideTable: true,\n label:\n 'Ich versichere, dass ich alle Angaben korrekt und nach bestem Wissen und Gewissen gemacht habe',\n name: 'correctness',\n required: true,\n type: 'checkbox'\n },\n {\n defaultChecked: defaults.toc,\n hideTable: true,\n label:\n 'Ich habe die Allgemeinen Geschäftsbedingungen gelesen und zur Kenntnis genommen',\n name: 'toc',\n required: true,\n type: 'checkbox'\n },\n {\n defaultChecked: defaults.privacy,\n hideTable: true,\n label:\n 'Ich habe die Datenschutzerklärung gelesen und zur Kenntnis genommen. Im Falle einer Reitschulbuchung außerdem: Ich habe die Hofordnung gelesen und akzeptiere sie',\n name: 'privacy',\n required: true,\n type: 'checkbox'\n },\n {\n defaultValue: defaults.notes,\n label: 'Hinweise, Wünsche und sonstige Informationen',\n name: 'notes',\n tableHeader: 'Notizen',\n type: 'textarea'\n }\n ]\n }\n ],\n getLabel: ({ name }) => `Buchung von \"${name}\"`,\n subject: {\n plural: 'Buchungen',\n singular: 'Buchung'\n }\n})\n","const getAge = ({ birthday }) => {\n const birthdate = new Date(birthday)\n const now = new Date()\n return Math.floor((now - birthdate) / (1000 * 60 * 60 * 24 * 365.25))\n}\n\nexport default (defaults = {}) => ({\n fields: [\n {\n adminOnly: true,\n defaultValue: defaults.status,\n label: 'Status',\n name: 'status',\n options: [\n 'Neu (Reitschule)',\n 'Eingang bestätigt (Reitschule)',\n 'Teilnahme bestätigt (Reitschule)',\n 'Storniert (Reitschule)'\n ],\n required: true,\n type: 'select'\n },\n {\n adminOnly: true,\n defaultValue: defaults.createdAt,\n label: 'Eingegangen',\n name: 'createdAt',\n showAsDiv: true,\n type: 'datetime-local'\n },\n {\n adminOnly: true,\n defaultValue: defaults.updatedAt,\n hideTable: true,\n label: 'Zuletzt geändert',\n name: 'updatedAt',\n showAsDiv: true,\n type: 'datetime-local'\n },\n {\n legend: 'Kind',\n fieldset: [\n {\n defaultValue: defaults.name,\n label: 'Vorname, Name',\n name: 'name',\n required: true,\n type: 'text'\n },\n {\n defaultValue: defaults.birthday,\n label: 'Geburtsdatum',\n name: 'birthday',\n parse: getAge,\n required: true,\n tableHeader: 'Alter',\n type: 'date'\n },\n {\n defaultValue: defaults.phone,\n label: 'Telefonnummer',\n name: 'phone',\n type: 'tel'\n },\n {\n defaultValue: defaults.street,\n hideTable: true,\n label: 'Straße, Hausnummer',\n name: 'street',\n required: true,\n type: 'text'\n },\n {\n defaultValue: defaults.city,\n label: 'Postleitzahl, Ort',\n name: 'city',\n required: true,\n type: 'text'\n }\n ]\n },\n {\n legend: 'Erziehungsberechtigte(r)',\n fieldset: [\n {\n defaultValue: defaults.name_parent,\n hideTable: true,\n label: 'Vorname, Name',\n name: 'name_parent',\n required: true,\n type: 'text'\n },\n {\n defaultValue: defaults.email,\n hideTable: true,\n label: 'E-Mail-Adresse',\n max: 200,\n name: 'email',\n required: true,\n type: 'email'\n },\n {\n defaultValue: defaults.phone_parent,\n hideTable: true,\n label: 'Telefonnummer',\n name: 'phone_parent',\n required: true,\n type: 'tel'\n },\n {\n defaultValue: defaults.street_parent,\n hideTable: true,\n label: 'Straße, Hausnummer',\n name: 'street_parent',\n type: 'text'\n },\n {\n defaultValue: defaults.city_parent,\n hideTable: true,\n label: 'Postleitzahl, Ort',\n name: 'city_parent',\n type: 'text'\n }\n ]\n },\n {\n legend: 'Weitere Angaben',\n fieldset: [\n {\n defaultValue: defaults.experience,\n hideTable: true,\n label: 'Reitkenntnisse des Kindes',\n name: 'experience',\n options: [\n 'keine',\n 'wenige',\n 'regelmäßiger Unterricht seit mind. 2 Jahren',\n 'regelmäßiger Unterricht seit mind. 4 Jahren',\n 'regelmäßiger Unterricht seit mind. 6 Jahren'\n ],\n required: true,\n type: 'select'\n },\n {\n defaultValue: defaults.accident_treatment,\n hideTable: true,\n label:\n 'Falls erforderlich, darf Ihr Kind mit Kühlpacks, Pflaster und Jodsalbe behandelt werden?',\n name: 'accident_treatment',\n options: ['ja', 'nein'],\n required: true,\n type: 'radio'\n }\n ]\n },\n {\n legend: 'Bestätigungen',\n fieldset: [\n {\n defaultChecked: defaults.correctness,\n hideTable: true,\n label:\n 'Ich versichere, dass ich alle Angaben korrekt und nach bestem Wissen und Gewissen gemacht habe',\n name: 'correctness',\n required: true,\n type: 'checkbox'\n },\n {\n defaultChecked: defaults.toc,\n hideTable: true,\n label:\n 'Ich habe die Allgemeinen Geschäftsbedingungen gelesen und zur Kenntnis genommen',\n name: 'toc',\n required: true,\n type: 'checkbox'\n },\n {\n defaultChecked: defaults.privacy,\n hideTable: true,\n label:\n 'Ich habe die Datenschutzerklärung gelesen und zur Kenntnis genommen. Im Falle einer Reitschulbuchung außerdem: Ich habe die Hofordnung gelesen und akzeptiere sie',\n name: 'privacy',\n required: true,\n type: 'checkbox'\n },\n {\n defaultValue: defaults.notes,\n label: 'Hinweise, Wünsche und sonstige Informationen',\n name: 'notes',\n tableHeader: 'Notizen',\n type: 'textarea'\n }\n ]\n }\n ],\n getLabel: ({ name }) => `Anfrage von \"${name}\"`,\n subject: {\n plural: 'Anfragen',\n singular: 'Anfrage'\n }\n})\n","import events from './events'\nimport reservations from './reservations'\nimport ridingschool from './ridingschool'\n\nconst items = { events, reservations, ridingschool }\n\nexport default (type, defaults) => items[type](defaults)\n","import PCancelable from 'cancelable-promise'\nimport PropTypes from 'prop-types'\nimport React, { useEffect, useState } from 'react'\nimport { Helmet } from 'react-helmet'\nimport api from '../api/services'\nimport Button from '../components/Button'\nimport Field from '../components/Field'\nimport useNotifications from '../hooks/notifications'\nimport getSettings from '../settings/items'\nimport state from '../state'\nimport { getFormData } from '../utils/data'\n\nconst ItemEditor = ({\n history,\n location: { pathname },\n match: {\n params: { id }\n }\n}) => {\n const [dbOptions, setDbOptions] = useState({\n events: [{ label: 'Lade…', value: '' }]\n })\n const { addNotification } = useNotifications()\n const [item, setItem] = useState({})\n\n const isNew = id === 'new'\n const itemType = pathname.split('/')[2]\n const settings = getSettings(itemType, item)\n const title = isNew\n ? `${settings.subject.singular} anlegen`\n : `${settings.subject.singular} bearbeiten`\n\n const fields = settings.fields.filter(({ hideEditor }) => !hideEditor)\n\n const getField = ({ name, options, parse, tableHeader, wrap, ...props }) => (\n
\n \n setItem(prevState => ({ ...prevState, [name]: value }))\n : undefined\n }\n options={\n Array.isArray(options)\n ? options\n : options\n ? dbOptions[options]\n : undefined\n }\n readOnly={\n itemType === 'events' &&\n item.type === 'Reitschule' &&\n name.startsWith('date')\n }\n {...props}\n />\n
\n )\n\n const handleDelete = () => {\n if (window.confirm(`${settings.subject.singular} wirklich löschen?`))\n api[itemType].remove(id).then(data => {\n addNotification({\n payload: settings.getLabel(data) + ' wurde erfolgreich gelöscht',\n type: 'primary'\n })\n history.goBack()\n })\n }\n\n const handleSubmit = async e => {\n e.preventDefault()\n try {\n const data = getFormData(e.target)\n const action = isNew\n ? api[itemType].create(data)\n : api[itemType].patch(id, data)\n const res = await action\n\n addNotification({\n payload: settings.getLabel(res) + ' wurde erfolgreich gespeichert',\n type: 'success'\n })\n history.goBack()\n } catch (error) {\n addNotification(error)\n }\n }\n\n useEffect(() => {\n if (!isNew) {\n const p = new PCancelable((resolve, reject) => {\n api[itemType].get(id).then(resolve, reject)\n })\n p.then(setItem).catch(addNotification)\n return () => p.cancel()\n }\n }, [addNotification, id, isNew, itemType])\n\n useEffect(() => {\n if (itemType === 'reservations') {\n const p = new PCancelable((resolve, reject) => {\n api.events\n .find({\n query: { active: true, $limit: 999, $sort: { dateFrom: 1 } }\n })\n .then(resolve, reject)\n })\n p.then(({ data }) =>\n setDbOptions(prevState => ({\n ...prevState,\n events: data.map(({ _id, title, type }) => ({\n label: `${title} (${type})`,\n value: _id\n }))\n }))\n ).catch(addNotification)\n return () => p.cancel()\n }\n }, [addNotification, itemType])\n\n useEffect(() => {\n if (itemType === 'events' && item.type === 'Reitschule') {\n setItem(prevState => ({\n ...prevState,\n dateFrom: '2000-01-01',\n dateTo: '2099-12-31'\n }))\n }\n }, [itemType, item.type])\n\n return (\n
\n \n \n {window.document.head.dataset.titlePrefix} | {title}\n \n \n\n

{title}

\n\n
\n
\n {fields.map(({ fieldset, legend, ...field }) =>\n Array.isArray(fieldset) ? (\n \n \n {legend}\n \n
\n {fieldset\n .filter(({ hideEditor }) => !hideEditor)\n .map(getField)}\n
\n \n ) : (\n getField(field)\n )\n )}\n
\n\n \n
\n 0 || item.type === 'Reitschule'}\n onClick={handleDelete}\n type='button'\n >\n Löschen\n \n
\n\n
\n {' '}\n 0}\n type='submit'\n >\n Speichern\n \n
\n
\n \n \n )\n}\n\nItemEditor.propTypes = {\n history: PropTypes.object.isRequired,\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired\n }),\n match: PropTypes.shape({\n params: PropTypes.shape({\n id: PropTypes.string.isRequired\n })\n })\n}\n\nexport default ItemEditor\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport Button from './Button'\n\nconst Pagination = ({ loading, limit, setSkip, skip, total }) => {\n const page = Math.ceil(skip / limit) + 1 || 1\n const pages = Math.ceil(total / limit) || 1\n\n return (\n
\n
\n setSkip(0)}\n >\n \n ⏮\n \n \n
\n\n
\n setSkip(skip - limit)}\n >\n \n ⏪\n \n \n
\n\n
\n {page} / {pages}\n
\n\n
\n = pages || pages <= 1}\n onClick={() => setSkip(skip + limit)}\n >\n \n ⏩\n \n \n
\n
\n = pages || pages <= 1}\n onClick={() => setSkip(Math.ceil(total / limit) * limit - limit)}\n >\n \n ⏭\n \n \n
\n
\n )\n}\n\nPagination.propTypes = {\n loading: PropTypes.bool.isRequired,\n limit: PropTypes.number.isRequired,\n setSkip: PropTypes.func.isRequired,\n skip: PropTypes.number.isRequired,\n total: PropTypes.number.isRequired\n}\n\nexport default Pagination\n","import PCancelable from 'cancelable-promise'\nimport PropTypes from 'prop-types'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { Helmet } from 'react-helmet'\nimport { Link } from 'react-router-dom'\nimport Tooltip from 'react-tooltip-lite'\nimport Button from '../components/Button'\nimport Input from '../components/Input'\nimport Pagination from '../components/Pagination'\nimport useNotifications from '../hooks/notifications'\nimport colors from '../settings/colors'\nimport getSettings from '../settings/items'\nimport state from '../state'\nimport client from '../api/client'\nimport api from '../api/services'\n\nconst defaultQueries = {\n events: {\n active: true,\n $sort: { dateFrom: 1 }\n },\n reservations: {\n $sort: { createdAt: -1 }\n },\n ridingschool: {\n $sort: { createdAt: -1 }\n }\n}\n\nconst loadQuery = itemType => {\n const data = window.localStorage.getItem(`${itemType}.query`)\n return data ? JSON.parse(data) : defaultQueries[itemType]\n}\n\nconst removeQuery = itemType => {\n window.localStorage.removeItem(`${itemType}.query`)\n window.location.reload()\n}\n\nconst saveQuery = (itemType, query) => {\n const data = JSON.stringify(query)\n window.localStorage.setItem(`${itemType}.query`, data)\n return query\n}\n\nconst ItemTable = ({ location: { pathname } }) => {\n const { format } = new Intl.DateTimeFormat('de', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric'\n })\n const itemType = pathname.split('/')[2]\n const settings = getSettings(itemType, {})\n const fields = settings.fields\n .reduce(\n (acc, field) =>\n field.legend ? [...acc, ...field.fieldset] : [...acc, field],\n []\n )\n .filter(({ hideTable }) => !hideTable)\n .reverse()\n .sort((a, b) => (a.type === 'select' ? 0 : -1))\n\n const title = settings.subject.plural\n\n const { addNotification } = useNotifications()\n const printItems = useRef(false)\n const [dbOptions, setDbOptions] = useState({\n events: [{ label: 'Lade…', value: 'loading' }]\n })\n const [items, setItems] = useState({ data: [] })\n const [query, setQuery] = useState(loadQuery(itemType))\n\n const fetchItems = useCallback(() => {\n const p = new PCancelable((resolve, reject) => {\n api[itemType].find({ query }).then(resolve, reject)\n })\n p.then(setItems).catch(addNotification)\n return () => p.cancel()\n }, [addNotification, itemType, query])\n\n const setFilter = ({ target: { name, value } }) => {\n setQuery(prevState => {\n const newState = {\n ...prevState,\n [name]: value === '' ? undefined : value,\n $skip: undefined\n }\n return saveQuery(itemType, newState)\n })\n }\n\n const printAll = () => {\n printItems.current = true\n setQuery(prevState => ({\n ...prevState,\n $skip: 0,\n $limit: 999\n }))\n }\n\n const setSearch = event => {\n event.preventDefault()\n const $search = event.target.search.value || undefined\n setQuery(prevState => {\n const newState = {\n ...prevState,\n $search\n }\n return saveQuery(itemType, newState)\n })\n }\n\n const setSkip = $skip => {\n setQuery(prevState => {\n const newState = {\n ...prevState,\n $skip\n }\n return saveQuery(itemType, newState)\n })\n }\n\n const setSort = (type, field) => {\n setQuery(prevState => {\n const newState = { ...prevState }\n if (type === 'checkbox') {\n newState[field] = prevState[field] ? undefined : true\n } else {\n newState.$sort = {\n [field]: prevState.$sort[field] === 1 ? -1 : 1\n }\n }\n return saveQuery(itemType, newState)\n })\n }\n\n const showEmails = () => {\n api[itemType]\n .find({ query: { ...query, $limit: 9999 } })\n .then(\n ({ data }) =>\n window.prompt(\n 'E-Mail-Adresse der aktuellen Selektion:',\n [...new Set(data.map(d => d.email))].join(', ')\n ),\n addNotification\n )\n }\n\n useEffect(fetchItems, [itemType, query])\n\n useEffect(() => {\n if (itemType === 'reservations') {\n const p = new PCancelable((resolve, reject) => {\n api.events\n .find({\n query: { active: true, $limit: 999, $sort: { dateFrom: 1 } }\n })\n .then(resolve, reject)\n })\n p.then(({ data }) =>\n setDbOptions(prevState => ({\n ...prevState,\n events: data.map(({ _id, title, type }) => ({\n label: `${title} (${type})`,\n value: _id\n }))\n }))\n ).catch(addNotification)\n return () => p.cancel()\n }\n }, [addNotification, itemType])\n\n useEffect(() => {\n client.io.on('api/reservations created', fetchItems)\n return () => client.io.off('api/reservations created', fetchItems)\n }, [fetchItems])\n\n useEffect(() => {\n if (printItems.current === true) {\n window.print()\n printItems.current = false\n }\n }, [items.data])\n\n return (\n
\n \n \n {window.document.head.dataset.titlePrefix} | {title}\n \n \n\n
\n
\n

{title}

\n
\n \n
\n
\n
\n
\n \n \n
\n
\n\n
\n \n \n \n {fields.map(\n ({\n hideTable,\n label,\n name,\n noQuery,\n options,\n tableHeader,\n type\n }) => (\n \n {options ? (\n \n \n \n ) : noQuery ? (\n \n {tableHeader || label}\n \n ) : (\n setSort(type, name)}\n >\n {tableHeader || label}{' '}\n {type === 'checkbox' && query[name] ? '✔︎' : ''}\n {!query.$sort[name]\n ? ''\n : query.$sort[name] === 1\n ? '↓'\n : '↑'}\n \n )}\n \n )\n )}\n \n \n \n {items.data.map(item => (\n \n {fields.map(({ name, parse, type }) => {\n const content = parse\n ? parse(item)\n : type.match(/^date/)\n ? format(new Date(item[name]))\n : item[name] === true\n ? '✔︎'\n : item[name.replace(/^(.*)Id$/, '_$1Label')]\n\n return (\n \n {name === 'notes' ? (\n \n \n {content}\n \n \n ) : (\n \n {content}\n \n )}\n \n )\n })}\n \n ))}\n \n
\n
\n\n {items.data.length > 0 && (\n
\n 0}\n limit={items.limit}\n setSkip={setSkip}\n skip={items.skip}\n total={items.total}\n />\n
\n )}\n\n
\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n
\n
\n )\n}\n\nItemTable.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired\n })\n}\n\nexport default ItemTable\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport Button from '../components/Button'\n\nconst items = [\n {\n label: 'Buchungen',\n to: '/admin/reservations'\n },\n {\n label: 'Termine',\n to: '/admin/events'\n },\n {\n label: 'Reitschule',\n to: '/admin/ridingschool'\n },\n {\n label: 'Einstellungen',\n to: '/admin/einstellungen'\n },\n {\n label: 'Abmelden',\n onClick: event =>\n !window.confirm('Wirklich abmelden?') && event.preventDefault(),\n to: '/login'\n }\n]\n\nconst Menu = ({ path }) => (\n \n)\n\nMenu.propTypes = {\n path: PropTypes.string.isRequired\n}\n\nexport default Menu\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport Input from '../Input'\nimport items from '../../settings/items'\n\nconst reducer = (acc, item) => {\n if (item.fieldset) {\n return item.fieldset.reduce(reducer, acc)\n }\n return [...acc, item.name]\n}\n\nconst TagSelect = ({\n extraFields = [],\n handleChange = console.log,\n type,\n ...props\n}) => {\n const item = items(type)\n\n return (\n a.localeCompare(b))\n .map(label => ({ label, value: `${type}:${label}` }))\n ]}\n type='select'\n {...props}\n />\n )\n}\n\nTagSelect.propTypes = {\n extraFields: PropTypes.array,\n handleChange: PropTypes.func,\n type: PropTypes.string.isRequired\n}\n\nexport default TagSelect\n","import { exec, init } from 'pell'\nimport PropTypes from 'prop-types'\nimport React, { useEffect, useRef } from 'react'\nimport TagSelect from './TagSelect'\nimport './index.css'\n\nconst Pell = ({ handleChange = console.log, initialContent = '' }) => {\n const element = useRef(null)\n const editor = useRef(null)\n\n useEffect(() => {\n if (element.current && !editor.current) {\n editor.current = init({\n actions: [\n 'bold',\n 'italic',\n 'underline',\n 'strikethrough',\n 'heading1',\n 'heading2',\n 'paragraph',\n 'quote',\n 'olist',\n 'ulist',\n 'link'\n ],\n classes: {\n button:\n 'pell-button whitespace-no-wrap bg-white hover:bg-gray-100 text-blue-600 text-sm border py-2 px-3 rounded shadow hover:shadow-none focus:outline-none focus:border-blue-700',\n content:\n 'pell-content shadow border rounded w-full py-2 px-3 hover:shadow-none focus:shadow-none focus:outline-none focus:border-blue-700',\n selected: 'pell-button-selected'\n },\n element: element.current,\n onChange: handleChange\n })\n }\n editor.current.content.innerHTML = initialContent\n }, [handleChange, initialContent])\n\n return (\n <>\n
\n
\n \n exec('insertText', `{{${value}}}`)\n }\n type='events'\n />\n
\n
\n \n exec('insertText', `{{${value}}}`)\n }\n type='reservations'\n />\n
\n
\n
\n \n )\n}\n\nPell.propTypes = {\n handleChange: PropTypes.func,\n initialContent: PropTypes.string\n}\n\nexport default Pell\n","import PropTypes from 'prop-types'\nimport React, { useCallback, useEffect } from 'react'\nimport { Redirect, Route, Switch } from 'react-router-dom'\nimport client from '../api/client'\nimport Header from '../components/Header'\nimport useNotifications from '../hooks/notifications'\nimport ItemEditor from './ItemEditor'\nimport ItemTable from './ItemTable'\nimport Menu from '../components/Menu'\nimport Settings from './Settings'\nimport Stub from './Stub'\n\nexport const routes = [\n {\n component: Stub,\n path: '/admin'\n },\n {\n component: ItemTable,\n path: '/admin/reservations'\n },\n {\n component: ItemEditor,\n path: '/admin/reservations/edit/:id'\n },\n {\n component: ItemTable,\n path: '/admin/ridingschool'\n },\n {\n component: ItemEditor,\n path: '/admin/ridingschool/edit/:id'\n },\n {\n component: ItemTable,\n path: '/admin/events'\n },\n {\n component: ItemEditor,\n path: '/admin/events/edit/:id'\n },\n {\n component: Settings,\n path: '/admin/einstellungen'\n }\n]\n\nconst Admin = ({ path }) => {\n const { addNotification } = useNotifications()\n\n const notify = useCallback(\n reservation => {\n addNotification({\n payload: `Neue Anfrage für \"${reservation.name}\" eingetroffen!${\n reservation.eventType ? ` (${reservation.eventType})` : ''\n }`,\n type: 'success'\n })\n },\n [addNotification]\n )\n\n useEffect(() => {\n client.io.on('api/reservations created', notify)\n client.io.on('api/ridingschool created', notify)\n\n return () => {\n client.io.off('api/reservations created', notify)\n client.io.off('api/ridingschool created', notify)\n }\n }, [notify])\n\n return (\n
\n
\n
\n \n\n \n \n {routes.map(({ component, path }) => (\n \n ))}\n \n
\n
\n )\n}\n\nAdmin.propTypes = {\n path: PropTypes.string.isRequired\n}\n\nexport default Admin\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\n\nconst Stub = ({ location }) => (\n
\n \n \n {window.document.head.dataset.titlePrefix} | {location.pathname}\n \n \n\n

{location.pathname}

\n
\n)\n\nStub.propTypes = {\n location: PropTypes.object.isRequired\n}\n\nexport default Stub\n","import PCancelable from 'cancelable-promise'\nimport React, { useEffect, useState } from 'react'\nimport { Helmet } from 'react-helmet'\nimport api from '../api/services'\nimport Button from '../components/Button'\nimport Field from '../components/Field'\nimport Pell from '../components/Pell'\nimport useNotifications from '../hooks/notifications'\nimport getReservationSettings from '../settings/reservations'\nimport getRidingSchoolSettings from '../settings/ridingschool'\nimport getTemplateSettings from '../settings/templates'\nimport state from '../state'\nimport { getFormData } from '../utils/data'\n\nconst Settings = () => {\n const statusOpts = getReservationSettings().fields.find(\n f => f.name === 'status'\n )\n\n statusOpts.options = [\n ...statusOpts.options,\n ...getRidingSchoolSettings().fields.find(f => f.name === 'status').options\n ]\n\n const { getLabel } = getTemplateSettings()\n\n const { addNotification } = useNotifications()\n\n const [templateBody, setTemplateBody] = useState('')\n const [template, setTemplate] = useState({})\n const [type, setType] = useState(statusOpts.options[1])\n\n const handleSubmit = e => {\n e.preventDefault()\n\n const data = {\n ...getFormData(e.target),\n body: templateBody\n }\n\n api.templates.patch(template._id, data).then(\n ({ status }) =>\n addNotification({\n payload: getLabel(status) + ' wurde erfolgreich gespeichert',\n type: 'success'\n }),\n addNotification\n )\n }\n\n useEffect(() => {\n state.semaphore++\n\n const p = new PCancelable((resolve, reject) => {\n api.templates\n .find({ query: { status: type, $limit: 1 } })\n .then(resolve, reject)\n })\n\n p.then(([template]) => {\n setTemplate(template)\n state.semaphore--\n }).catch(addNotification)\n\n return () => p.cancel()\n }, [addNotification, type])\n\n return (\n
\n \n \n {window.document.head.dataset.titlePrefix} | Einstellungen\n \n \n\n

Einstellungen

\n\n
\n
\n \n E-Mail-Bestätigungen\n \n\n
\n
\n setType(value)}\n required={undefined}\n value={type}\n />\n
\n\n
\n \n
\n\n
\n \n
\n\n
\n \n \n
\n\n
\n \n
\n
\n
\n
\n
\n )\n}\n\nexport default Settings\n","export default (defaults = {}) => ({\n getLabel: status => `E-Mail-Template für den Status \"${status}\"`,\n subject: {\n plural: 'E-Mail-Templates',\n singular: 'E-Mail-Template'\n }\n})\n","import PCancelable from 'cancelable-promise'\nimport PropTypes from 'prop-types'\nimport React, { Fragment, useEffect, useState } from 'react'\nimport { Helmet } from 'react-helmet'\nimport { Redirect } from 'react-router-dom'\nimport services from '../api/services'\nimport Button from '../components/Button'\nimport Field from '../components/Field'\nimport Header from '../components/Header'\nimport useNotifications from '../hooks/notifications'\nimport getReservationSettings from '../settings/reservations'\nimport { getFormData } from '../utils/data'\nimport 'date-input-polyfill-react'\n\nconst Book = ({\n history: {\n location: { search },\n push\n },\n match: {\n params: { id: eventId }\n }\n}) => {\n const { addNotification } = useNotifications()\n\n const [event, setEvent] = useState()\n const [booking, setBooking] = useState(\n JSON.parse(localStorage.getItem('data')) || []\n )\n const [sent, setSent] = useState(false)\n const [step, setStep] = useState(0)\n\n const { format } = new Intl.DateTimeFormat('de-DE', {\n month: 'long',\n year: 'numeric'\n })\n const steps = getReservationSettings().fields.filter(\n ({ adminOnly }) => !adminOnly\n )\n\n const getData = (data, type) => {\n switch (type) {\n case 'checkbox':\n return '✅'\n case 'date':\n return data ? new Date(data).toLocaleDateString() : ''\n case 'month':\n return format(new Date(data))\n default:\n return data\n }\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n if (step < steps.length) {\n const data = getFormData(e.target)\n setBooking(prevState => {\n prevState[step] = data\n localStorage.setItem('data', JSON.stringify(prevState))\n return prevState\n })\n setStep(prevState => prevState + 1)\n } else {\n const bookingRequest = booking.reduce((acc, step) => ({\n ...acc,\n ...step,\n eventId,\n eventType: event.type,\n status: 'Eingang bestätigt'\n }))\n services.reservations.create(bookingRequest).then(({ _id }) => {\n setSent(true)\n addNotification({\n payload: `Buchungsanfrage erfolgreich versendet! (Buchungs-Nummer ${_id})`,\n type: 'success'\n })\n }, addNotification)\n }\n }\n\n useEffect(() => {\n const p = new PCancelable((resolve, reject) => {\n services.events.get(eventId).then(resolve, reject)\n })\n p.then(setEvent, addNotification)\n return () => p.cancel()\n }, [addNotification, eventId, setEvent])\n\n if (event && event._numReservations >= event.allocation) {\n addNotification({\n payload: 'Diese Veranstaltung ist leider schon ausgebucht!',\n type: 'warning'\n })\n return \n }\n\n if (event?.type === 'Reitschule') {\n return \n }\n\n return (\n
\n
\n
\n\n \n {window.document.head.dataset.titlePrefix} | Start\n \n\n

Veranstaltung buchen

\n\n {event ? (\n <>\n

\n {event.title} ({event.type})\n

\n\n

\n \n {new Date(event.dateFrom).toLocaleDateString()} -{' '}\n {new Date(event.dateTo).toLocaleDateString()}\n \n {/*\n \n Noch {event.allocation - event._numReservations} Plätze frei\n \n */}\n

\n\n
\n
\n \n \n {(steps[step] && steps[step].legend) ||\n 'Buchungsanfrage absenden'}{' '}\n ({step + 1} / {steps.length + 1})\n \n
\n {steps[step] ? (\n steps[step].fieldset\n .filter(({ hideEditor }) => !hideEditor)\n .map(\n ({\n name,\n options,\n parse,\n tableHeader,\n wrap,\n ...props\n }) => (\n \n \n
\n )\n )\n ) : (\n
\n

Bitte prüfen Sie Ihre Daten:

\n
\n \n {booking.map((data, step) => (\n \n \n \n \n {steps[step].legend}\n \n \n \n \n {Object.keys(data).map((key, i) => (\n \n \n \n \n ))}\n \n \n ))}\n
\n {getData(\n data[key],\n steps[step].fieldset[i].type\n )}\n
\n
\n
\n )}\n
\n \n
\n\n \n
\n \n step > 0\n ? setStep(prevState =>\n prevState > 1 ? prevState - 1 : 0\n )\n : push('/')\n }\n type='button'\n >\n Zurück\n {' '}\n
\n
\n \n {sent\n ? 'Buchungsanfrage versendet'\n : step === steps.length\n ? 'Buchungsanfrage absenden'\n : 'Weiter'}\n \n
\n
\n \n \n ) : (\n

Lade…

\n )}\n
\n \n )\n}\n\nBook.propTypes = {\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n location: PropTypes.shape({\n search: PropTypes.string.isRequired\n }).isRequired\n }).isRequired,\n match: PropTypes.shape({\n params: PropTypes.shape({\n id: PropTypes.string.isRequired\n }).isRequired\n }).isRequired\n}\n\nexport default Book\n","import React, { Component } from 'react'\nimport { Helmet } from 'react-helmet'\nimport Button from '../components/Button'\n\nexport default class ErrorBoundary extends Component {\n state = { error: null }\n\n static getDerivedStateFromError (error) {\n return { error }\n }\n\n componentDidCatch (error, info) {\n console.error(error, info)\n }\n\n render () {\n const { error } = this.state\n return error ? (\n
\n \n {window.document.head.dataset.titlePrefix} | Fehler!\n \n
\n

\n \n 😧\n \n

\n\n

Es ist ein Fehler aufgetreten:

\n\n

\n \n \"{this.state.error.message}\"\n \n

\n\n

\n \n

\n
\n
\n ) : (\n this.props.children\n )\n }\n}\n","import React from 'react'\nimport { view } from 'react-easy-state'\nimport { Link } from 'react-router-dom'\nimport state from '../state'\n\nconst Footer = () => (\n \n)\n\nexport default view(Footer)\n","import client from '../api/client'\nimport state from '../state'\n\nexport const authenticate = async () => {\n try {\n state.semaphore++\n const { user } = await client.reAuthenticate()\n return (state.session = user)\n } catch (error) {\n throw error\n } finally {\n state.semaphore--\n }\n}\n\nexport const login = async ({ email, password }) => {\n try {\n state.semaphore++\n const { user } = await client.authenticate({\n strategy: 'local',\n email,\n password\n })\n return (state.session = user)\n } catch (error) {\n throw error\n } finally {\n state.semaphore--\n }\n}\n\nexport const logout = async () => {\n try {\n state.semaphore++\n await client.logout()\n return (state.session = null)\n } catch (error) {\n throw error\n } finally {\n state.semaphore--\n }\n}\n\nexport default { authenticate, login, logout }\n","import PropTypes from 'prop-types'\nimport React, { useEffect } from 'react'\nimport { view } from 'react-easy-state'\nimport { Helmet } from 'react-helmet'\nimport { Redirect } from 'react-router-dom'\nimport auth from '../api/authentication'\nimport Button from '../components/Button'\nimport Field from '../components/Field'\nimport Header from '../components/Header'\nimport useNotifications from '../hooks/notifications'\nimport state from '../state'\nimport { getFormData } from '../utils/data'\n\nconst Login = ({ location }) => {\n const { from } = location.state || { from: { pathname: '/' } }\n\n const { addNotification } = useNotifications()\n\n const handleSubmit = async e => {\n e.preventDefault()\n\n try {\n const data = getFormData(e.target)\n await auth.login(data)\n } catch (error) {\n addNotification(error)\n }\n }\n\n useEffect(() => {\n auth.logout()\n }, [])\n\n return state.session ? (\n \n ) : (\n
\n \n {window.document.head.dataset.titlePrefix} | Anmelden\n \n\n \n
\n\n

Bitte anmelden:

\n\n
\n \n
\n\n
\n \n
\n\n
\n \n
\n \n
\n )\n}\n\nLogin.propTypes = {\n location: PropTypes.object.isRequired\n}\n\nexport default view(Login)\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport { Helmet } from 'react-helmet'\nimport { Link } from 'react-router-dom'\nimport Button from '../components/Button'\n\nconst NotFound = ({ location }) => (\n
\n \n \n {window.document.head.dataset.titlePrefix} | Nicht gefunden (404)\n \n \n\n
\n

\n \n 😧\n \n

\n

\n Unter der Adresse{' '}\n \"{location.pathname}\" konnte\n kein Inhalt gefunden werden.\n

\n\n

\n \n

\n
\n
\n)\n\nNotFound.propTypes = {\n location: PropTypes.object.isRequired\n}\n\nexport default NotFound\n","import PropTypes from 'prop-types'\nimport React, { Fragment, useState } from 'react'\nimport { Helmet } from 'react-helmet'\nimport services from '../api/services'\nimport Button from '../components/Button'\nimport Field from '../components/Field'\nimport Header from '../components/Header'\nimport useNotifications from '../hooks/notifications'\nimport getRidingSchoolSettings from '../settings/ridingschool'\nimport { getFormData } from '../utils/data'\nimport 'date-input-polyfill-react'\n\nconst RidingSchool = ({ history: { push } }) => {\n const { addNotification } = useNotifications()\n\n const [booking, setBooking] = useState(\n JSON.parse(localStorage.getItem('ridingschool')) || []\n )\n const [sent, setSent] = useState(false)\n const [step, setStep] = useState(0)\n\n const { format } = new Intl.DateTimeFormat('de-DE', {\n month: 'long',\n year: 'numeric'\n })\n const steps = getRidingSchoolSettings().fields.filter(\n ({ adminOnly }) => !adminOnly\n )\n\n const getData = (data, type) => {\n switch (type) {\n case 'checkbox':\n return '✅'\n case 'date':\n return data ? new Date(data).toLocaleDateString() : ''\n case 'month':\n return format(new Date(data))\n default:\n return data\n }\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n if (step < steps.length) {\n const data = getFormData(e.target)\n setBooking(prevState => {\n prevState[step] = data\n localStorage.setItem('ridingschool', JSON.stringify(prevState))\n return prevState\n })\n setStep(prevState => prevState + 1)\n } else {\n const bookingRequest = booking.reduce((acc, step) => ({\n ...acc,\n ...step,\n status: 'Eingang bestätigt (Reitschule)'\n }))\n services.ridingschool.create(bookingRequest).then(({ _id }) => {\n setSent(true)\n addNotification({\n payload: `Anfrage erfolgreich versendet! (Nummer ${_id})`,\n type: 'success'\n })\n }, addNotification)\n }\n }\n\n return (\n
\n
\n
\n\n \n {window.document.head.dataset.titlePrefix} | Start\n \n\n

Veranstaltung buchen

\n\n

\n Anmeldung zur Reitschule\n

\n\n
\n
\n \n \n {(steps[step] && steps[step].legend) || 'Anfrage absenden'} (\n {step + 1} / {steps.length + 1})\n \n
\n {steps[step] ? (\n steps[step].fieldset\n .filter(({ hideEditor }) => !hideEditor)\n .map(\n ({\n name,\n options,\n parse,\n tableHeader,\n wrap,\n ...props\n }) => (\n
\n \n
\n )\n )\n ) : (\n
\n

Bitte prüfen Sie Ihre Daten:

\n
\n \n {booking.map((data, step) => (\n \n \n \n \n {steps[step].legend}\n \n \n \n \n {Object.keys(data).map((key, i) => (\n \n \n \n \n ))}\n \n \n ))}\n
\n {getData(\n data[key],\n steps[step].fieldset[i].type\n )}\n
\n
\n
\n )}\n
\n \n
\n\n \n
\n \n step > 0\n ? setStep(prevState => (prevState > 1 ? prevState - 1 : 0))\n : push('/')\n }\n type='button'\n >\n Zurück\n {' '}\n
\n
\n \n {sent\n ? 'Anfrage versendet'\n : step === steps.length\n ? 'Anfrage absenden'\n : 'Weiter'}\n \n
\n
\n \n
\n \n )\n}\n\nRidingSchool.propTypes = {\n history: PropTypes.shape({\n push: PropTypes.func.isRequired\n }).isRequired\n}\n\nexport default RidingSchool\n","import PCancelable from 'cancelable-promise'\nimport PropTypes from 'prop-types'\nimport React, { useEffect, useState } from 'react'\nimport { view } from 'react-easy-state'\nimport { Helmet } from 'react-helmet'\nimport { Link } from 'react-router-dom'\nimport services from '../api/services'\nimport Header from '../components/Header'\nimport useNotifications from '../hooks/notifications'\nimport colors from '../settings/colors'\nimport getEventSettings from '../settings/events'\n\nconst eventTypes = getEventSettings()\n .fields.find(({ label }) => label === 'Art des Termins')\n .options.map(option => option.label || option)\n\nconst Td = ({ children, ...props }) => (\n \n {children}\n \n)\n\nconst Start = ({ history, location }) => {\n const params = new URLSearchParams(location.search)\n const savedData = JSON.parse(localStorage.getItem('event')) || {}\n const { addNotification } = useNotifications()\n const [eventType, setEventType] = useState(\n eventTypes.includes(params.get('type'))\n ? params.get('type')\n : savedData.type || 'Tagesferien'\n )\n const [events, setEvents] = useState([])\n\n useEffect(() => {\n const p = new PCancelable((resolve, reject) => {\n services.events\n .find({ query: { $limit: 999, $sort: { dateFrom: 1 } } })\n .then(resolve, reject)\n })\n p.then(({ data }) => setEvents(data), addNotification)\n return () => p.cancel()\n }, [addNotification])\n\n const eventsOfType = events.filter(({ type }) => type === eventType)\n\n return (\n
\n
\n \n {window.document.head.dataset.titlePrefix} | Start\n \n\n
\n
\n\n

Bitte auswählen:

\n\n
    \n {eventTypes.map(opt => {\n const color = opt === eventType ? colors.primary : colors.default\n return (\n
  • \n setEventType(opt)}\n type='button'\n >\n {opt}\n \n
  • \n )\n })}\n
\n\n \n \n \n \n \n {eventsOfType.every(({ type }) => type !== 'Reitschule') && (\n <>\n \n \n \n )}\n \n \n\n \n {eventsOfType.length > 0 ? (\n eventsOfType.map(evt => {\n const bookedOut = evt._numReservations >= evt.allocation\n return (\n \n \n {evt.type !== 'Reitschule' && (\n <>\n \n \n \n )}\n \n \n )\n })\n ) : (\n \n \n \n )}\n \n
VeranstaltungVonBis\n
{evt.title}\n {new Date(evt.dateFrom).toLocaleDateString()}\n {new Date(evt.dateTo).toLocaleDateString()}\n {bookedOut ? (\n '(Ausgebucht)'\n ) : eventType === 'Reitschule' ? (\n \n localStorage.setItem(\n 'event',\n JSON.stringify(evt)\n )\n }\n to='/reitschule'\n >\n Jetzt anmelden!\n \n ) : (\n \n localStorage.setItem(\n 'event',\n JSON.stringify(evt)\n )\n }\n to={`/book/${evt._id}`}\n >\n {bookedOut ? 'Ausgebucht' : 'Jetzt buchen!'}\n \n )}\n
\n Zur Zeit sind keine {eventType}-Termine buchbar.\n
\n
\n
\n
\n \n )\n}\n\nStart.propTypes = {\n history: PropTypes.shape({\n push: PropTypes.func.isRequired\n }).isRequired,\n location: PropTypes.object.isRequired\n}\n\nexport default view(Start)\n","import React from 'react'\nimport { CSSTransition, TransitionGroup } from 'react-transition-group'\nimport { view } from 'react-easy-state'\nimport colors from '../settings/colors'\nimport globalState from '../state'\nimport useNotifications from '../hooks/notifications'\n\nconst Notifications = () => {\n const { cancelAutoremove, removeNotification } = useNotifications()\n\n return (\n \n {globalState.notifications.map(({ id, payload, type }) => (\n \n cancelAutoremove(id)}\n onMouseOver={() => cancelAutoremove(id)}\n >\n removeNotification(id)}\n >\n \n ❌\n \n \n

{payload}

\n \n
\n ))}\n
\n )\n}\n\nexport default view(Notifications)\n","import PropTypes from 'prop-types'\nimport React from 'react'\nimport { view } from 'react-easy-state'\nimport { Redirect } from 'react-router-dom'\nimport state from '../state'\n\nconst ProtectedRoute = ({ component: Component, ...rest }) =>\n state.session ? (\n \n ) : (\n \n )\n\nProtectedRoute.propTypes = {\n component: PropTypes.func.isRequired\n}\n\nexport default view(ProtectedRoute)\n","import PropTypes from 'prop-types'\nimport { useEffect } from 'react'\nimport { withRouter } from 'react-router-dom'\n\nconst ScrollToTop = ({ children, location: { pathname } }) => {\n useEffect(() => window.scrollTo(0, 0), [pathname])\n return children\n}\n\nScrollToTop.propTypes = {\n children: PropTypes.object.isRequired,\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired\n })\n}\n\nexport default withRouter(ScrollToTop)\n","import React from 'react'\nimport { view } from 'react-easy-state'\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom'\nimport Admin, { routes } from './containers/Admin'\nimport Book from './containers/Book'\nimport ErrorBoundary from './containers/ErrorBoundary'\nimport Footer from './components/Footer'\nimport Login from './containers/Login'\nimport NotFound from './containers/NotFound'\nimport RidingSchool from './containers/RidingSchool'\nimport Start from './containers/Start'\nimport Notifications from './components/Notifications'\nimport ProtectedRoute from './components/ProtectedRoute'\nimport ScrollToTop from './components/ScrollToTop'\nimport state from './state'\n\nconst App = () => (\n \n 0 ? 'grayscale(1) brightness(0.9)' : 'none',\n pointerEvents: state.semaphore > 0 ? 'none' : 'auto',\n transition: 'filter 0.2s ease-in 0.5s'\n }}\n >\n \n \n \n {routes.map(({ path }) => (\n \n ))}\n \n \n \n \n \n \n \n