{"version":3,"sources":["components/heading.js","helpers/markup.helper.js","components/address.js","components/card/card.js","components/card/card-body.js","components/card/card-footer.js","components/card/card-heading.js","components/rotatable.js","helpers/api.helper.js","components/job.js","components/jobs.jsx","components/Select.jsx","components/listFilters/placesFilter.js","components/listFilters/filterableList.js","components/loadingSpinner/loadingSpinner.js","hubContextProvider.js","pages/home.js","components/form/form.js","components/toc.js","pages/reserve.js","pages/404.js","components/dynamicContent.js","pages/page.js","App.js","reportWebVitals.js","index.js"],"names":["Heading","children","className","renderClassNames","base","classes","Array","isArray","join","capFirst","val","charAt","toUpperCase","slice","labels","norsk","heading","subHeading","and","noCars","pickup","deliver","date","home","email","name","message","phone","resultStart","resultEnd","pickupDate","deliveryDate","anyDestination","pickupBefore","deliverBefore","pickupIcon","xmlns","data-name","viewBox","height","fill","strokeWidth","d","cx","cy","r","stroke","strokeLinecap","strokeLinejoin","strokeDasharray","deliverIcon","Address","line1","city","zip","country","iconLeft","iconRight","Card","classNames","CardBody","CardFooter","CardHeading","Rotatable","open","useState","setHeight","container","useRef","useEffect","current","childNodes","reduce","result","element","Math","max","getBoundingClientRect","style","ref","dayjs","extend","utc","baseurl","companyCache","Api","deleteRequest","collection","a","fetch","request","json","pageTree","console","log","map","job","availableForPickup","temporarilyReserveUntil","id","then","status","method","headers","body","JSON","stringify","error","data","localStorage","setItem","temporaryReservationId","getItem","removeItem","response","getJob","getJobs","getTempReservation","deleteReservation","getArticles","bookTrip","reserveTrip","getPageTree","getCompany","gearTypes","carTypes","drivingLicences","boolToJaNei","value","Job","carType","deposit","extraInfo","feeForNoShow","freeAdditionalCosts","freeFuel","gearType","requiredDrivingLicence","seats","adminFee","location","bookingOpenDays","useLocation","isAfter","isReserved","setReserved","setBooking","push","isOpen","setOpen","subtract","daysAllowedBeforeBooking","isBefore","title","onClick","icon","faTimes","faInfo","pickupFrom","size","Intl","DateTimeFormat","dateStyle","timeStyle","format","deliverTo","dangerouslySetInnerHTML","__html","pathname","to","reserve","Jobs","items","length","key","Select","options","placeholder","onChange","searchable","placeholderValue","returnPlaceholderValueAtLoad","setIsTouch","window","matchMedia","matches","setVal","setLabel","visibleOptions","setVisibleOptions","optionsBackup","setOptionsBackup","dropdownOpen","setDropdownOpen","innerRef","callback","callbackRef","document","addEventListener","handleClick","removeEventListener","e","contains","target","useOuterClick","ev","arr","forEach","opt","label","search","searching","setSearching","searchQuery","setSearchQuery","doSearch","query","q","toLowerCase","filtered","filter","includes","type","onFocus","onBlur","getElementById","focus","blur","width","points","strokeMiterlimit","option","index","PlacesFilter","listItems","showPickup","showDelivery","places","item","sort","FilterableList","listComponent","setPickup","setDelivery","setPickupDate","weekLabel","timeframe","require","locale","add","toDate","deliverDate","setDeliverDate","customDateLabel","startOf","endOf","monthLabel","visiblePickup","setVisiblePickup","visibleDelivery","setVisibleDelivery","resetKey","setResetKey","random","LoadingSpinner","containerColor","baseStyle","position","display","borderRadius","background","dotColor","margin","divStyle","animation","transformOrigin","loadingStyle","alignItems","justifyContent","fontSize","baseDelay","animationDelay","top","left","interval","$","HubContext","createContext","HubProvider","proxy","setProxy","connection","setConnection","hubConnection","jobHubProxy","createHubProxy","start","done","stop","Provider","Home","jobs","setJobs","fetchJobs","useContext","setInterval","clearInterval","updateFunction","useCallback","on","off","validateEmail","test","validateEmpty","undefined","validatePhone","Form","form","updateForm","hiddenFields","url","onSuccess","loading","setLoading","setResponse","formError","setError","submitForm","preventDefault","Object","entries","field","validator","formData","exclude","setTimeout","state","submitClass","disabled","onSubmit","delay","rows","paddingRight","min","flex","maxWidth","toc","faCheckCircle","faExclamation","faPaperPlane","Toc","html","Reserve","useParams","setJob","setCompany","booked","setBooked","bookingForm","company","faUser","required","faEnvelope","faMobileAlt","hour","inFive","faEdit","betingelse","catch","jobId","NotFound","DynamicContent","content","Page","props","dynamicContent","App","setPageTree","pagesResponse","getPages","mobile","page","exact","path","component","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode"],"mappings":"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","file":"static/js/main.5382ff4f.chunk.js","sourcesContent":["import React from \"react\";\nexport default function Heading({ children, className }) {\n return (\n
\n

{children}

\n
\n );\n}\n","//Pass an array of strings or a string\n//Returns the base classname plus the additional classes\n//Default returns only the base\n\nimport { useRef, useEffect } from \"react\";\nexport function renderClassNames(base, classes) {\n if (typeof classes === \"string\") {\n return `${base} ${classes}`;\n }\n if (Array.isArray(classes)) {\n return `${base} ${classes.join(\" \")}`;\n }\n return base;\n}\n\nexport function secondify(time) {\n if (time < 0) {\n return \"00\";\n }\n if (time < 10) {\n return \"0\" + time;\n }\n return time;\n}\nexport function useOuterClick(callback) {\n const callbackRef = useRef(); // initialize mutable callback ref\n const innerRef = useRef(); // returned to client, who sets the \"border\" element\n\n // update callback on each render, so second useEffect has most recent callback\n useEffect(() => {\n callbackRef.current = callback;\n });\n useEffect(() => {\n document.addEventListener(\"click\", handleClick);\n return () => document.removeEventListener(\"click\", handleClick);\n function handleClick(e) {\n if (\n innerRef.current &&\n callbackRef.current &&\n !innerRef.current.contains(e.target)\n )\n callbackRef.current(e);\n }\n }, []); // no dependencies -> stable click listener\n\n return innerRef; // convenience for client (doesn't need to init ref himself)\n}\nexport function capFirst(val) {\n if (val) {\n return val.charAt(0).toUpperCase() + val.slice(1);\n } else {\n return \"\";\n }\n}\nexport const language = \"norsk\";\nexport const labels = {\n norsk: {\n heading: \"Leiebil retur\",\n subHeading: \"Finn din bil\",\n and: \" og \",\n noCars: `Beklager! Det er\n ingen biler tilgjengelig innenfor valgte kriterier.`,\n pickup: `Velg hentested`,\n deliver: `Velg drop-off`,\n date: \"Velg dato\",\n home: \"Hjem\",\n email: \"E-post\",\n name: \"Navn\",\n message: \"Melding\",\n phone: \"Telefonnummer\",\n resultStart: \"som kan hentes i: \",\n resultEnd: \"leveres til: \",\n pickupDate: \"Tilgjengelig for henting:\",\n deliveryDate: \"og leveres innen: \",\n anyDestination: \"ubestemt\",\n pickupBefore: \"Hentes fra:\",\n deliverBefore: \"Leveres innom:\",\n pickup: \"Henting\",\n deliver: \"Levering\",\n reserve: \"Reserver\",\n reservedUntil: \"Reservert tid:\",\n weekLabel: \"Denne uken\",\n monthLabel: \"Denne måneden\",\n customDateLabel: \"egendefindert tidsrom\",\n datePickerStart: \"Fra dato\",\n datePickerEnd: \"til dato\",\n },\n};\nexport const pickupIcon = () => (\n \n \n \n \n \n \n \n);\n\nexport const deliverIcon = () => (\n \n \n \n \n \n \n \n);\n","import React from \"react\";\nexport default function Address({\n line1,\n city,\n country,\n zip,\n iconLeft,\n iconRight,\n}) {\n return (\n
\n {iconLeft && {iconLeft}}\n
\n {line1}\n {city}\n {zip}\n
\n {iconRight && {iconRight}}\n
\n );\n}\n","import React from 'react';\nimport { renderClassNames } from '../../helpers/markup.helper';\nexport default function Card({ children, classNames }) {\n\n return (\n
\n {children}\n
\n )\n}","import React from 'react';\nimport { renderClassNames } from '../../helpers/markup.helper';\nexport default function CardBody({ children, classNames }) {\n\n return (\n
\n {children}\n
\n )\n}","import React from 'react';\nimport { renderClassNames } from '../../helpers/markup.helper';\nexport default function CardFooter({ children, classNames }) {\n\n return (\n
\n {children}\n
\n )\n}","import React from 'react';\nimport { renderClassNames } from '../../helpers/markup.helper';\nexport default function CardHeading({ children, classNames }) {\n\n return (\n
\n {children}\n
\n )\n}","import React, { useEffect, useRef, useState } from \"react\";\n\n// Pass 2 containers as children and an open/closed variable switch between open and close\nexport default function Rotatable({ children, open }) {\n const [height, setHeight] = useState(100);\n const container = useRef();\n useEffect(() => {\n // console.log(container.current)\n let height = [...container?.current?.childNodes]?.reduce(\n (result, element) =>\n Math.max(element.getBoundingClientRect().height, result),\n 0\n );\n setHeight(height);\n }, []);\n let className = \"rotatable\";\n if (open) {\n className += \" open\";\n }\n\n return (\n \n {children}\n \n );\n}\n","import dayjs from \"dayjs\";\nimport utc from 'dayjs/plugin/utc';\ndayjs.extend(utc)\n\nconst baseurl = '/headless'\nlet companyCache = {};\n\nconst Api = (function () {\n // Use this in the get jobs request, we can wait and see if there is a delete request that needs to finish before we get the updated job\n let deleteRequest;\n\n async function getArticles(collection) {\n const request = await fetch(baseurl + '/collections/' + collection);\n return await request.json();\n }\n async function getPageTree() {\n const request = await fetch(baseurl + '/pages');\n const pageTree = await request.json();\n console.log(pageTree)\n return pageTree;\n }\n\n async function getJobs() {\n if (deleteRequest) {\n await deleteRequest;\n }\n const request = await fetch(baseurl + '/jobs/');\n return (await request.json())?.map(job => {\n job.availableForPickup = dayjs(job.availableForPickup);\n // job.deliverBefore = job.availableForPickup.add(job.deliverBefore, 'days');\n job.temporarilyReserveUntil = dayjs(job.temporarilyReserveUntil)\n\n return job;\n });\n\n }\n\n async function getCompany(id) {\n\n // Simple cache function combining async and Promise.then to make things harder for Lasse... And to avoid sending hundreds of requests a the same time.\n if (companyCache[id]) {\n return await companyCache[id]\n }\n companyCache[id] = fetch(baseurl + '/company?id=' + id).then(async request => {\n const result = await request.json();\n if (request.status !== 200) {\n companyCache[id] = false;\n throw (\"Error fetching company \" + id)\n }\n return result;\n })\n\n return companyCache[id];\n }\n\n async function getJob(id) {\n const request = await fetch(baseurl + '/jobs/' + id);\n let job = await request.json();\n job.availableForPickup = dayjs(job.availableForPickup);\n job.temporarilyReserveUntil = dayjs(job.temporarilyReserveUntil)\n\n return job;\n }\n\n async function reserveTrip(id) {\n const request = await fetch(baseurl + '/jobs/reserve', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ id })\n });\n\n let result = await request.json();\n if (result.error) {\n throw (result.error);\n }\n let job = result.data;\n job.availableForPickup = dayjs(job.availableForPickup);\n job.deliverBefore = dayjs(job.deliverBefore);\n job.temporarilyReserveUntil = dayjs(job.temporarilyReserveUntil)\n localStorage.setItem('reservationId', job.temporaryReservationId);\n return job;\n }\n\n async function bookTrip(id) {\n const temporaryReservationId = localStorage.getItem('reservationId');\n\n const request = await fetch(baseurl + '/jobs/book', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ id, temporaryReservationId })\n });\n\n let result = await request.json();\n if (result.error) {\n throw (result.error);\n }\n\n localStorage.removeItem('reservationId');\n\n return true;\n }\n\n async function getTempReservation(id) {\n\n const temporaryReservationId = localStorage.getItem('reservationId');\n if (!temporaryReservationId) {\n throw (\"no temp reservation\")\n }\n const request = await fetch(baseurl + '/jobs/reservation/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ id, temporaryReservationId })\n });\n\n let response = await request.json();\n if (response.error) {\n localStorage.removeItem('reservationId');\n throw (response.error)\n }\n let job = response;\n\n job.availableForPickup = dayjs(job.availableForPickup);\n job.deliverBefore = dayjs(job.deliverBefore);\n return job;\n }\n\n\n async function deleteReservation(id) {\n\n const temporaryReservationId = localStorage.getItem('reservationId');\n localStorage.removeItem('reservationId');\n\n deleteRequest = fetch(baseurl + '/jobs/deletereservation/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({ id, temporaryReservationId })\n });\n\n let request = await deleteRequest;\n let response = await request.json();\n if (response.error) {\n localStorage.removeItem('reservationId');\n throw (response.error)\n }\n\n return true;\n }\n\n return {\n getJob, getJobs, getTempReservation, deleteReservation, getArticles, bookTrip, reserveTrip, getPageTree, getCompany\n }\n})();\n\nexport default Api;\n","import dayjs from \"dayjs\";\nimport React from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useEffect, useState } from \"react\";\nimport {\n renderClassNames,\n labels,\n language,\n capFirst,\n pickupIcon,\n deliverIcon,\n} from \"../helpers/markup.helper\";\nimport Address from \"./address\";\nimport Card from \"./card/card\";\nimport CardBody from \"./card/card-body\";\nimport CardFooter from \"./card/card-footer\";\nimport CardHeading from \"./card/card-heading\";\nimport Countdown from \"./countdown/countdown\";\nimport Heading from \"./heading\";\n\nimport { FcCalendar } from \"react-icons/fc\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faInfo, faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport Rotatable from \"./rotatable\";\nimport Api from \"../helpers/api.helper\";\n\nexport const gearTypes = [\"Manuelt\", \"Automatisk\"];\nexport const carTypes = [\"Personbil\", \"Varebil\", \"Lastebil\", \"Buss\"];\nexport const drivingLicences = [\"A\", \"B\", \"C\", \"D\"];\nexport function hasBooking(job) {\n return !job.bookingName && !job.bookingDate && !job.bookingEmail;\n}\n\nexport function boolToJaNei(value) {\n return value ? \"Ja\" : \"Nei\";\n}\n\nexport default function Job(job) {\n const {\n carType,\n deposit,\n extraInfo,\n feeForNoShow,\n freeAdditionalCosts,\n freeFuel,\n gearType,\n requiredDrivingLicence,\n seats,\n adminFee,\n bookingOpenDays,\n } = job;\n const location = useLocation();\n const [isReserved, setReserved] = useState(\n job.temporarilyReserveUntil &&\n job.temporarilyReserveUntil.isAfter(dayjs())\n );\n const [myBooking, setBooking] = useState(\n job.temporaryReservationId &&\n job.temporaryReservationId === localStorage.getItem(\"reservationId\")\n );\n let classNames = [\"job\"];\n if (isReserved) {\n classNames.push(\"reserved\");\n }\n // const [company, setCompany] = useState();\n\n const counterComplete = () => {\n setReserved(\n job.temporarilyReserveUntil &&\n job.temporarilyReserveUntil.isAfter(dayjs.utc())\n );\n };\n\n useEffect(() => {\n setReserved(\n job.temporarilyReserveUntil &&\n job.temporarilyReserveUntil.isAfter(dayjs.utc())\n );\n setBooking(\n job.temporaryReservationId &&\n job.temporaryReservationId ===\n localStorage.getItem(\"reservationId\")\n );\n // Api.getCompany(job.company).then((company) => setCompany(company));\n }, [job]);\n const [isOpen, setOpen] = useState(false);\n\n let isAvailable = job.availableForPickup\n .subtract(job.daysAllowedBeforeBooking || 5, \"days\")\n .isBefore(dayjs());\n\n return (\n \n \n {job.title || carType || \"Returbil\"}\n setOpen(!isOpen)}\n >\n {isOpen ? (\n \n ) : (\n \n )}\n {isOpen ? \"Mindre info\" : \"Mer info\"}\n \n \n \n \n
\n
\n {labels[language]?.pickup}\n \n

\n {labels[language]?.pickupBefore}
\n \n \n {capFirst(\n new Intl.DateTimeFormat(\"nb-NO\", {\n dateStyle: \"full\",\n timeStyle: \"short\",\n }).format(job.availableForPickup)\n )}\n {/* {capFirst(\n job.availableForPickup.format(\n \"dddd DD. MMMM YYYY - hh:mm\"\n )\n )} */}\n \n

\n
\n
\n {labels[language]?.deliver}\n \n {/*

\n {labels[language]?.deliverBefore}
\n \n \n {job.deliverBefore > 1 ? `${job.deliverBefore} dager` : '1 døgn'}\n \n

*/}\n
\n
\n
\n
    \n
  • \n Gratis drivsstoff:\n \n {boolToJaNei(freeFuel)}\n \n
  • \n
  • \n Gratis tilleggskostnader:\n \n {boolToJaNei(freeAdditionalCosts)}\n \n
  • \n {adminFee && (\n
  • \n Admin gebyr:\n \n NOK{adminFee}\n \n
  • \n )}\n
  • \n Depositum:\n \n {boolToJaNei(deposit)}\n \n
  • \n
  • \n Gebyr for seint avbooking:\n \n NOK{feeForNoShow || 0}\n \n
  • \n
  • \n Bil type:\n \n {carTypes[carType]}\n \n
  • \n
  • \n Gir type:\n \n {gearTypes[gearType]}\n \n
  • \n
  • \n Seter:\n \n {seats}\n \n
  • \n
  • \n Førerkort:\n \n {drivingLicences[requiredDrivingLicence] ||\n \"alle\"}\n \n
  • \n {/*
  • \n Bedrift:\n {company?.title}\n
  • */}\n
\n\n {extraInfo && (\n \n )}\n
\n
\n
\n \n {!isReserved && location.pathname !== \"/reserve/\" + job.id && (\n \n \n {labels[language]?.reserve}\n \n \n )}\n \n\n {/* {!isAvailable && (\n \n Bestilling åpene om {job.availableForPickup.subtract(job.daysAllowedBeforeBooking || 5, 'days').diff(dayjs(), 'days')} dager\n {/*
\n }\n
\n )\n} */}\n
\n );\n}\n","import React, { useContext } from \"react\";\nimport Job from \"./job\";\nimport { FcCancel } from \"react-icons/fc\";\nimport FadeIn from \"react-fade-in\";\n\n// Helpers\nimport { labels, language } from \"../helpers/markup.helper\";\n\nexport default function Jobs({ items }) {\n return (\n \n {items?.length === 0 && (\n

\n {\" \"}\n {labels[language]?.noCars}\n

\n )}\n \n {items?.map((job) => (\n \n \n \n ))}\n \n \n );\n}\n","import React, { useState, useEffect, useRef } from \"react\";\n\n// External components\nimport { IoMdClose } from \"react-icons/io\";\n// import Lottie from \"react-lottie-segments\";\n\nimport { useOuterClick, capFirst } from \"../helpers/markup.helper\";\n\nconst Select = ({\n options,\n placeholder,\n iconLeft,\n onChange,\n searchable = false,\n placeholderValue,\n returnPlaceholderValueAtLoad = false,\n}) => {\n // const [screenWidth, setScreenWidth] = useState(window.innerWidth);\n // const updateSize = () => {\n // setScreenWidth(window.innerWidth);\n // };\n // useEffect(() => {\n // window.addEventListener(\"resize\", updateSize);\n // }, []);\n const [isTouch, setIsTouch] = useState(false);\n useEffect(() => {\n if (window.matchMedia(\"(pointer: coarse)\").matches) {\n // touchscreen\n setIsTouch(true);\n } else {\n setIsTouch(false);\n }\n }, []);\n const [val, setVal] = useState(\"\");\n const [label, setLabel] = useState(\"\");\n const [visibleOptions, setVisibleOptions] = useState([]);\n const [optionsBackup, setOptionsBackup] = useState([]);\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const innerRef = useOuterClick((ev) => {\n setDropdownOpen(false);\n });\n useEffect(() => {\n if (options) {\n if (typeof options[0] === \"string\") {\n let arr = [];\n options.forEach((opt) =>\n arr.push({ value: opt, label: opt, key: opt })\n );\n setVisibleOptions(arr);\n setOptionsBackup(arr);\n } else {\n setVisibleOptions(options);\n setOptionsBackup(options);\n }\n }\n }, [options]);\n const search = useRef(null);\n const [searching, setSearching] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n useEffect(() => {\n if (returnPlaceholderValueAtLoad) {\n onChange(placeholderValue);\n }\n }, [placeholderValue, returnPlaceholderValueAtLoad]);\n const doSearch = (query) => {\n let q = query.toLowerCase();\n if (visibleOptions) {\n if (query.length > 0) {\n let filtered = visibleOptions.filter((opt) =>\n JSON.stringify(opt).toLowerCase().includes(q)\n );\n setVisibleOptions(filtered);\n } else {\n setVisibleOptions(optionsBackup);\n }\n }\n };\n // useEffect(() => {\n // if (placeholder.toLowerCase() === \"henting\" && screenWidth > 1200) {\n // document.getElementById(placeholder).click();\n // }\n // }, [placeholder, screenWidth]);\n return (\n setDropdownOpen(!dropdownOpen)}\n >\n \n
\n {iconLeft && (\n \n {\" \"}\n {iconLeft}\n \n )}\n {searchable && (\n {\n doSearch(e.target.value);\n setSearchQuery(e.target.value);\n }}\n onFocus={() => setSearching(true)}\n onBlur={(e) =>\n e.target.value ? null : setSearching(false)\n }\n />\n )}\n \n {capFirst(val || placeholder)}\n \n
\n {\n document.getElementById(placeholder).focus();\n }}\n >\n {val && (\n {\n setVal(\"\");\n setLabel(placeholder);\n onChange(\"all\");\n document.getElementById(placeholder).focus();\n if (searchable && search.current) {\n search.current.value = \"\";\n search.current.blur();\n setSearching(false);\n setSearchQuery(\"\");\n doSearch(\"\");\n }\n }}\n >\n \n \n )}\n \n \n \n {/* */}\n \n\n {/* {!val || val === placeholder ? (\n \n ) : (\n \n )} */}\n \n {dropdownOpen && (\n
\n {placeholder && !searchQuery && (\n {\n setVal(placeholder);\n if (placeholderValue) {\n onChange(placeholderValue);\n }\n if (searchable && search.current) {\n search.current.value = \"\";\n search.current.blur();\n setSearching(false);\n setSearchQuery(\"\");\n doSearch(\"\");\n }\n }}\n key={placeholder.toLowerCase()}\n value={placeholder}\n >\n {capFirst(placeholder)}\n
\n )}\n {visibleOptions?.map((option, index) => (\n {\n setVal(option.value);\n setLabel(option.label);\n onChange(option.value);\n if (searchable && search.current) {\n search.current.value = \"\";\n search.current.blur();\n setSearching(false);\n setSearchQuery(\"\");\n doSearch(\"\");\n }\n }}\n key={option.value ? option.value.toLowerCase() : \"\"}\n value={option.value}\n >\n {capFirst(option.label)}\n \n ))}\n \n )}\n \n //
\n // {\n // onChange(e);\n // if (\n // JSON.stringify(options)\n // .toLowerCase()\n // .includes(e.target.value.toLowerCase())\n // ) {\n // setSelected(true);\n // } else {\n // setSelected(false);\n // }\n // }}\n // style={{\n // minWidth: placeholderLabel\n // ? placeholderLabel.length + \"ch\"\n // : visibleOptions[0]?.label?.length + \"ch\",\n // }}\n // className={`select ${selected ? \"select--selected\" : \"\"}`}\n // >\n // {placeholderLabel && (\n // \n // )}\n // {visibleOptions?.map((option) => (\n // \n // {option.label.charAt(0).toUpperCase() +\n // option.label.slice(1)}\n // \n // ))}\n // \n // {iconLeft && (\n //
{iconLeft}
\n // )}\n // {iconRight && (\n //
{iconRight}
\n // )}\n //
\n );\n};\n\nexport default Select;\n","import React, { useState } from \"react\";\n\n// Internal components\nimport Dropdown from \"../Select\";\n\nimport { BiMap } from \"react-icons/bi\";\n\nexport default function PlacesFilter({\n listItems,\n onChange,\n placeholder,\n placeholderValue,\n searchable,\n iconLeft,\n returnPlaceholderValueAtLoad,\n showPickup,\n showDelivery,\n}) {\n const getPlaces = () => {\n return listItems?.reduce((result, item) => {\n if (\n showPickup &&\n item.pickupFrom &&\n !result.includes(item.pickupFrom.city) &&\n item?.pickupFrom?.city\n ) {\n result.push(item.pickupFrom.city);\n }\n if (\n showDelivery &&\n item.deliverTo &&\n !result.includes(item.deliverTo.city) &&\n item?.deliverTo?.city\n ) {\n result.push(item.deliverTo.city);\n }\n return result.sort();\n }, []);\n };\n const customStyles = {};\n\n const places = getPlaces();\n const [selected, setSelected] = useState(false);\n return (\n <>\n {/* ({\n value: place,\n label: place,\n }))}\n /> */}\n \n {/*
\n {\n onChange(e);\n if (places.includes(e.target.value)) {\n setSelected(true);\n } else {\n setSelected(false);\n }\n }}\n className={`select ${selected ? \"select--selected\" : \"\"}`}\n >\n \n {places?.map((place) => (\n \n ))}\n \n
*/}\n \n );\n}\n","import React, { useContext, useEffect, useState } from \"react\";\n\n// Internal components\nimport Heading from \"../heading\";\nimport PlacesFilter from \"./placesFilter\";\nimport Dropdown from \"../Select\";\nimport DatePicker from \"../DatePicker\";\nimport moment from \"moment\";\nimport {\n capFirst,\n labels,\n language,\n pickupIcon,\n deliverIcon,\n} from \"../../helpers/markup.helper\";\n\n// External components\n// import DatePicker from \"react-datepicker\";\nimport dayjs from \"dayjs\";\nimport { FcCalendar } from \"react-icons/fc\";\nimport { BsArrowRight } from \"react-icons/bs\";\nimport { FaTimes } from \"react-icons/fa\";\nimport FadeIn from \"react-fade-in\";\nimport {\n DateRangePicker,\n SingleDatePicker,\n DayPickerRangeController,\n} from \"react-dates\";\n\nexport default function FilterableList({ heading, listItems, listComponent }) {\n const [pickup, setPickup] = useState();\n const [deliver, setDelivery] = useState();\n const [pickupDate, setPickupDate] = useState();\n const [timeframe, setTimeframe] = useState(labels[language]?.weekLabel);\n const [focusPickup, setFocusPickup] = useState(false);\n require(`dayjs/locale/nb`);\n dayjs.locale(\"nb\");\n const [deliverDate, setDeliverDate] = useState(\n dayjs().add(1, timeframe).toDate()\n );\n\n useEffect(() => {\n if (timeframe !== labels[language]?.customDateLabel) {\n if (timeframe === labels[language]?.weekLabel) {\n setPickupDate(dayjs().startOf(\"week\").toDate());\n setDeliverDate(dayjs().endOf(\"week\").toDate());\n } else if (timeframe === labels[language]?.monthLabel) {\n setPickupDate(dayjs().startOf(\"month\").toDate());\n setDeliverDate(dayjs().endOf(\"month\").toDate());\n }\n }\n }, [timeframe]);\n // Effect to change the delivery date if the pickup date changes to after delivery, deliver should always be same day of after pickup\n useEffect(() => {\n if (dayjs(deliverDate).isBefore(dayjs(pickupDate))) {\n console.log(\"updatingDelivery\");\n setDeliverDate(dayjs(pickupDate).toDate());\n }\n }, [pickupDate, deliverDate]);\n\n const filtered = listItems?.filter(\n (item) => {\n return (\n (!pickup ||\n pickup === \"all\" ||\n item.pickupFrom?.city === pickup) &&\n (!deliver ||\n deliver === \"all\" ||\n item.deliverTo?.city === deliver)\n );\n // &&\n // (!pickupDate || item.availableForPickup.isBefore(dayjs(pickupDate)))\n }\n // && dayjs(deliverDate).isBefore(item.deliverBefore)\n );\n const [visiblePickup, setVisiblePickup] = useState(listItems);\n const [visibleDelivery, setVisibleDelivery] = useState(listItems);\n useEffect(() => {\n if (pickup === \"\" || pickup === \"all\") {\n setVisibleDelivery(listItems);\n } else {\n let filtered = visibleDelivery.filter(\n (item) => item?.pickupFrom?.city === pickup\n );\n setVisibleDelivery(filtered);\n }\n }, [pickup]);\n useEffect(() => {\n if (deliver === \"\" || deliver === \"all\") {\n setVisiblePickup(listItems);\n } else {\n let filtered = visiblePickup.filter(\n (item) => item?.deliverTo?.city === deliver\n );\n setVisiblePickup(filtered);\n }\n }, [deliver]);\n const [resetKey, setResetKey] = useState(0);\n return (\n <>\n
\n {heading}\n
\n setPickup(val)}\n placeholderValue=\"all\"\n searchable={true}\n returnPlaceholderValueAtLoad={true}\n iconLeft={pickupIcon()}\n showPickup\n key={\"pickup\" + resetKey}\n />\n {/*
\n \n
*/}\n setDelivery(val)}\n placeholderValue=\"all\"\n searchable={true}\n showDelivery\n returnPlaceholderValueAtLoad={true}\n iconLeft={deliverIcon()}\n key={\"delivery\" + resetKey}\n />\n {(deliver !== \"all\" || pickup !== \"all\") && (\n \n {\n setDelivery(\"all\");\n setPickup(\"all\");\n setResetKey(Math.random());\n }}\n >\n \n Fjern valg\n \n \n )}\n\n {/*
\n \n }\n onChange={(val) => setTimeframe(val)}\n placeholder={labels[language]?.date}\n /> */}\n {/* */}\n\n {/* {timeframe === labels[language]?.customDateLabel && (\n setPickupDate(date)}\n />\n )} */}\n {/* \n {\n setPickupDate(moment(date))\n console.log(date)\n }}\n inputIconPosition=\"after\"\n onFocusChange={({ focused }) => setFocusPickup(focused)}\n focused={focusPickup}\n showCaret={!focusPickup}\n /> */}\n
\n
\n \n {(pickup || deliver) && (\n <>\n

\n Viser biler{\" \"}\n {pickup && (\n <>\n {labels[language]?.resultStart}{\" \"}\n \n {pickup.toLowerCase() !== \"all\"\n ? capFirst(pickup)\n : labels[language]?.anyDestination}\n \n \n )}\n {pickup && deliver && labels[language]?.and}\n {deliver && (\n <>\n {labels[language]?.resultEnd}{\" \"}\n \n {deliver.toLowerCase() !== \"all\"\n ? capFirst(deliver)\n : labels[language]?.anyDestination}\n \n \n )}\n

\n \n )}\n {/*

*/}\n {/* <>\n {labels[language]?.pickupDate}\n \n {dayjs(pickupDate).format(\"DD MMMM YYYY\")}\n {\" \"}\n {labels[language]?.deliveryDate}\n \n {dayjs(deliverDate).format(\"DD MMMM YYYY\")}\n \n */}\n {/* {labels[language]?.pickupDate}{\" \"}\n {timeframe === \"week\" || timeframe === \"month\"\n ? labels[language]?.deliveryDate\n : \"\"}\n {timeframe === \"week\" && (\n <>\n denne uken\n
(\n {capFirst(\n dayjs(pickupDate).format(\"DD MMMM\")\n )} - {dayjs(deliverDate).format(\"DD MMMM\")})\n \n )}\n {timeframe === \"month\" && (\n <>\n denne måneden\n
(\n {capFirst(\n dayjs(pickupDate).format(\"DD MMMM\")\n )} - {dayjs(deliverDate).format(\"DD MMMM\")})\n \n )}\n {timeframe === \"custom\" && (\n <>\n \n {dayjs(pickupDate).format(\"DD MMMM YYYY\")}\n {\" \"}\n {labels[language]?.deliveryDate}\n \n {dayjs(deliverDate).format(\"DD MMMM YYYY\")}\n \n \n )} */}\n {/*

*/}\n
\n
{listComponent({ items: filtered })}
\n \n );\n}\n","import React from \"react\";\nimport \"./loadingSpinner.scss\";\nexport default function LoadingSpinner({ containerColor, dotColor, size }) {\n const baseStyle = {\n position: \"absolute\",\n display: \"block\",\n width: \"0.7em\",\n height: \"0.7em\",\n borderRadius: \"50%\",\n background: dotColor || \"white\",\n margin: \"-0.4em 0 0 - 0.4em\",\n };\n const divStyle = {\n animation: \"lds-roller 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite\",\n transformOrigin: \"4em 4em\",\n };\n const rollerStyle = {\n display: \"inline-block\",\n position: \"relative\",\n width: \"8em\",\n height: \"8em\",\n };\n const loadingStyle = {\n position: \"absolute\",\n height: \"100%\",\n width: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: containerColor || \"black\",\n fontSize: (size || 30) + \"px\",\n };\n const baseDelay = 0.036;\n\n return (\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n );\n}\n","import React from 'react'\nimport { createContext, useEffect, useState } from 'react';\nconst $ = window.$;\n\nexport const HubContext = createContext();\nexport const HubProvider = ({ children }) => {\n const [proxy, setProxy] = useState(null);\n const [connection, setConnection] = useState(null);\n\n useEffect(() => {\n const hubConnection = $.hubConnection();\n const jobHubProxy = hubConnection.createHubProxy('JobHub');\n\n setConnection(hubConnection);\n setProxy(jobHubProxy);\n hubConnection.start().done(function () {\n console.log(\"Connected\");\n });\n\n return () => hubConnection.stop();\n }, []);\n\n\n return (\n \n {children}\n \n );\n};\n","import React from \"react\";\nimport Heading from \"../components/heading\";\nimport Jobs from \"../components/jobs\";\nimport { useEffect, useState } from \"react\";\nimport Api from \"../helpers/api.helper\";\nimport { labels, language } from \"../helpers/markup.helper\";\nimport FilterableList from \"../components/listFilters/filterableList\";\nimport { useLocation } from \"react-router\";\nimport LoadingSpinner from \"../components/loadingSpinner/loadingSpinner\";\nimport { useCallback, useContext } from \"react\";\nimport { HubContext } from \"../hubContextProvider\";\nlet interval;\nexport default function Home() {\n const [jobs, setJobs] = useState();\n const location = useLocation();\n const fetchJobs = async () => {\n setJobs(await Api.getJobs());\n console.log(jobs)\n };\n const { connection, proxy } = useContext(HubContext);\n\n useEffect(() => {\n interval = setInterval(() => fetchJobs(), 60000);\n\n return () => clearInterval(interval);\n }, [interval]);\n\n const updateFunction = useCallback(() => {\n console.log(\"updating\");\n fetchJobs();\n });\n\n useEffect(() => {\n console.log(\"connecting to job hub\", connection, proxy);\n proxy?.on(\"update\", updateFunction);\n\n return () => {\n console.log(\"unsubscribing updates\");\n proxy?.off(\"update\", updateFunction);\n };\n }, [connection]);\n\n useEffect(() => {\n fetchJobs();\n }, [location]);\n\n return (\n
\n {/* {labels[language]?.heading} */}\n\n {!jobs && (\n
\n \n
\n )}\n {jobs && (\n
\n \n
\n )}\n
\n );\n}\n","import React, { useState } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faCheckCircle,\n faExclamation,\n faPaperPlane,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { renderClassNames } from \"../../helpers/markup.helper\";\nimport LoadingSpinner from \"../loadingSpinner/loadingSpinner\";\nimport DatePicker from \"../DatePicker\";\nimport PickupDropoffPicker from \"../PickupDropoffPicker\";\nimport { SingleDatePicker } from \"react-dates\";\nimport dayjs from \"dayjs\";\nimport FadeIn from \"react-fade-in\";\n\nexport function validateEmail(value) {\n var re =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1, 3}\\.[0-9]{1, 3}\\.[0-9]{1, 3}\\.[0-9]{1, 3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n return re.test(value);\n // 'Email is invalid';\n}\n\nexport function validateEmpty(value) {\n return value !== \"\" && value !== undefined && value !== null;\n // 'Field is empty';\n}\nexport function validatePhone(value) {\n let phoneFormat = /^[0-9]{0,}$/;\n return phoneFormat.test(value);\n // 'Mobile is invalid';\n}\n\nexport function validatePersonNumber(value) {\n let pnFormat = /^\\d{11}$/;\n return pnFormat.test(value);\n // 'Mobile is invalid';\n}\nexport default function Form({\n form,\n updateForm,\n hiddenFields,\n url,\n classNames,\n onSuccess,\n}) {\n const [loading, setLoading] = useState(false);\n const [response, setResponse] = useState();\n const [formError, setError] = useState();\n const validateForm = () => {\n Object.entries(form).forEach(([key, field]) => {\n if (!field.validator(field.value)) {\n return false;\n }\n });\n return true;\n };\n const submitForm = async (e) => {\n e.preventDefault();\n setLoading(true);\n if (!validateForm()) {\n return setLoading(false);\n }\n try {\n let formData = {};\n Object.entries(form).forEach(([key, field]) => {\n if (!field.validator(field.value)) {\n throw key + \" is invalid\";\n }\n if (field.exclude) {\n return;\n }\n if (field.type === \"datepicker\") {\n formData[key] = dayjs(field.value).format();\n } else {\n formData[key] = field.value;\n }\n });\n Object.entries(hiddenFields).forEach(([key, value]) => {\n formData[key] = value;\n });\n\n console.log(formData);\n let request = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n // 'Content-Type': 'application/x-www-form-urlencoded',\n },\n body: JSON.stringify(formData),\n });\n\n let response = await request.json();\n\n console.log(response);\n if (request.status !== 200) {\n throw \"Could not send the form, please try again\";\n }\n setLoading(true);\n setResponse(response);\n if (typeof onSuccess === \"function\") {\n onSuccess(response);\n }\n } catch (error) {\n console.log(error);\n setTimeout(() => {\n setLoading(false);\n setError(error);\n }, 2000);\n }\n };\n\n const onChange = (e, callback) => {\n let state = {\n ...form,\n };\n\n console.log(e.target.name);\n if (state[e.target.name] === undefined) {\n return;\n }\n state[e.target.name].value = e.target.value;\n state[e.target.name].error = form[e.target.name].validator(\n e.target.value\n );\n setError();\n if (typeof callback === \"function\") {\n callback(e);\n }\n updateForm(state);\n };\n\n let submitClass = loading ? \"sending\" : \"ready\";\n let disabled = loading || formError;\n\n if (!url) {\n return null;\n }\n return (\n
\n
\n
\n \n {Object.entries(form).map(([key, field]) => (\n \n {key === \"message\" ? (\n \n ) : field.type === \"datepicker\" ? (\n <>\n \n \n onChange(e, field.onChange)\n }\n min={field.min(form)}\n max={field.max(form)}\n />\n \n ) : field.type === \"checkbox\" ? (\n
\n \n {field.placeholder}\n \n \n {field.toc}\n
\n ) : field.type === \"free-text\" ? (\n
{field.value}
\n ) : (\n \n )}\n {field.icon && (\n \n )}\n

{field.error}

\n
\n ))}\n\n {loading && (\n \n )}\n {formError && (\n
\n

{formError}

\n
\n )}\n \n \n Reserver nå\n \n {response ? (\n \n ) : formError ? (\n \n ) : (\n \n )}\n \n \n \n
\n \n );\n}\n","import React, { useState } from \"react\";\nimport { AiOutlineCloseCircle } from \"react-icons/ai\";\nimport { IoIosArrowDropdown } from \"react-icons/io\";\nimport FadeIn from \"react-fade-in\";\nexport default function Toc({ html }) {\n const [open, setOpen] = useState(false);\n if (!html) {\n return null;\n }\n\n return (\n
\n setOpen(!open)}\n >\n {open ? \"Lukk\" : \"Les\"} betingelsene{\" \"}\n {open ? : }\n \n
\n {open && (\n \n
\n setOpen(!open)}\n >\n {open ? \"Lukk\" : \"Les\"} betingelsene{\" \"}\n {open ? (\n \n ) : (\n \n )}\n \n \n )}\n
\n
\n );\n}\n","import React from \"react\";\nimport { useState } from \"react\";\nimport { useParams } from \"react-router\";\nimport { useEffect } from \"react\";\nimport Company from \"../components/company/company\";\nimport Countdown from \"../components/countdown/countdown\";\nimport FadeIn from \"react-fade-in\";\n\n// Helpers\nimport { labels, language } from \"../helpers/markup.helper\";\nimport Form, {\n validateEmail,\n validateEmpty,\n validatePhone,\n validatePersonNumber,\n} from \"../components/form/form\";\nimport Heading from \"../components/heading\";\nimport Job from \"../components/job\";\nimport LoadingSpinner from \"../components/loadingSpinner/loadingSpinner.js\";\nimport Api from \"../helpers/api.helper\";\nimport {\n faClock,\n faEdit,\n faEnvelope,\n faIdBadge,\n faList,\n faLock,\n faMobileAlt,\n faSortNumericDownAlt,\n faUser,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport CardHeading from \"../components/card/card-heading\";\nimport CardBody from \"../components/card/card-body\";\nimport Card from \"../components/card/card\";\nimport moment from \"moment\";\nimport dayjs from \"dayjs\";\nimport Toc from \"../components/toc\";\nexport default function Reserve() {\n let { id } = useParams();\n const [job, setJob] = useState();\n const [error, setError] = useState();\n const [loading, setLoading] = useState(true);\n const [company, setCompany] = useState();\n const temporaryReservationId = localStorage.getItem(\"reservationId\");\n const [booked, setBooked] = useState(\n temporaryReservationId === job?.temporaryReservationId\n );\n const [bookingForm, updateForm] = useState();\n\n useEffect(() => {\n if (id) {\n Api.getJob(id)\n .then((job) => {\n setJob(job);\n setLoading(false);\n Api.getCompany(job.company).then((company) => {\n setCompany(company);\n console.log(company);\n updateForm({\n name: {\n value: \"\",\n type: \"text\",\n validator: validateEmpty,\n placeholder: labels[language]?.name,\n icon: faUser,\n required: true,\n },\n email: {\n value: \"\",\n type: \"email\",\n validator: validateEmail,\n placeholder: labels[language]?.email,\n icon: faEnvelope,\n required: true,\n },\n // personNumber: {\n // value: \"\",\n // type: 'text',\n // validator: validatePersonNumber,\n // placeholder: 'Personnummer',\n // icon: faIdBadge,\n // required: true\n\n // },\n phone: {\n value: \"\",\n type: \"text\",\n validator: validatePhone,\n placeholder: labels[language]?.phone,\n icon: faMobileAlt,\n required: true,\n },\n pickupDate: {\n value: job.availableForPickup.isAfter(dayjs())\n ? job.availableForPickup\n .hour(9)\n .startOf(\"hour\")\n .format(\"YYYY-MM-DDTHH:mm\")\n : dayjs()\n .add(0, \"day\")\n .hour(9)\n .startOf(\"hour\")\n .format(\"YYYY-MM-DDTHH:mm\"),\n type: \"datepicker\",\n validator: validateEmpty,\n placeholder: \"Ønsket hentedato\",\n min: (form) => {\n if (\n job.availableForPickup.isAfter(dayjs())\n ) {\n return job.availableForPickup\n .hour(9)\n .startOf(\"hour\")\n .format(\"YYYY-MM-DDTHH:mm\");\n }\n\n return dayjs()\n .add(0, \"day\")\n .hour(9)\n .startOf(\"hour\")\n .format(\"YYYY-MM-DDTHH:mm\");\n },\n max: () => {\n let inFive = job.availableForPickup\n .add(job.bookingOpenDays || 5, \"day\")\n .hour(9)\n .startOf(\"hour\");\n\n if (\n job.availableForPickup.isAfter(dayjs())\n ) {\n return inFive.format(\n \"YYYY-MM-DDTHH:mm\"\n );\n }\n\n return dayjs()\n .add(job.bookingOpenDays || 5, \"day\")\n .hour(9)\n .startOf(\"hour\")\n .format(\"YYYY-MM-DDTHH:mm\");\n if (\n job.availableForPickup.isAfter(dayjs())\n ) {\n if (\n job.availableForPickup\n .add(\n job.daysAllowedBeforeBooking ||\n 5,\n \"days\"\n )\n .isAfter(dayjs())\n ) {\n return job.availableForPickup\n .add(\n job.daysAllowedBeforeBooking ||\n 5,\n \"days\"\n )\n .endOf(\"day\")\n .format(\"YYYY-MM-DDTHH:mm\");\n }\n }\n return dayjs()\n .add(\n job.daysAllowedBeforeBooking || 5,\n \"days\"\n )\n .endOf(\"day\")\n .format(\"YYYY-MM-DDTHH:mm\");\n },\n required: true,\n },\n // deliverDate: {\n // value: job.deliverBefore > 1 ?

Obs! du må levere dette bilen innom {job.deliverBefore} dager.

:

Obs! du må levere dette bilen innom 1 døgn.

,\n // type: 'free-text',\n // validator: () => true,\n // exclude: true\n\n // },\n message: {\n value: \"\",\n type: \"textarea\",\n validator: () => true,\n placeholder: labels[language]?.message,\n icon: faEdit,\n },\n toc: {\n type: \"checkbox\",\n toc: ,\n placeholder: `Jeg godtar betingelsene`,\n validator: () => validateEmpty,\n required: true,\n },\n });\n });\n })\n .catch(console.log);\n // Api.getTempReservation(id).then(response => {\n // setLoading(false)\n\n // setJob(response)\n // }).catch(error => {\n // // Api.reserveTrip(id).then(response => {\n // // setLoading(false)\n\n // // setJob(response);\n\n // // }).catch(error => {\n // // setLoading(false)\n\n // // setError(
\n // //

{error}

\n // //
)\n // // });\n // });\n }\n }, [id]);\n\n const onTick = (timeLeft) => {};\n\n const onComplete = () => {\n console.log(\"completed: \");\n setLoading(true);\n\n Api.deleteReservation(id)\n .then(() => {\n setLoading(false);\n setError(\n
\n Error\n

\n Your reservation has expired, please refresh the\n page and try again\n

\n
\n );\n })\n .catch(() => {\n window.location.reload();\n });\n };\n // useEffect(() => () => {\n // if (!booked) {\n\n // Api.deleteReservation(id);\n\n // }\n // }, [booked, id]);\n\n if (error) {\n return error;\n }\n\n return (\n
\n
\n \n
\n Din bil\n {job && }\n
\n
\n {!booked && (\n \n
\n Reserver her\n\n {job && !booked && (\n \n {/* \n

Din bil er midlertidlig reservert i 5 minutter

\n \n \n
*/}\n \n {/* {job?.temporarilyReserveUntil && !booked &&
\n Tid igjen: \n
} */}\n {bookingForm && (\n \n setBooked(response || true)\n }\n form={bookingForm}\n url={\"/headless/jobs/book/\"}\n updateForm={updateForm}\n />\n )}\n
\n
\n )}\n
\n
\n )}\n {booked && (\n
\n Order fullført\n {(booked && (\n
\n )) || (\n

\n Tusen takk, din bestilling er fullført. Venligst\n sjekk inboxen din.\n

\n )}\n
\n )}\n
\n\n {/* {company &&
\n Om avdeling\n \n
} */}\n\n {loading && (\n \n )}\n
\n );\n}\n","import React from \"react\";\nimport Heading from \"../components/heading\";\nexport default function NotFound() {\n return (\n
\n Siden finnes ikke\n

\n Oi sann!
\n Her har du kommet til en side som ikke eksisterer.\n

\n
\n );\n}\n","import React, { useState } from \"react\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nfunction DynamicContent({ content }) {\n console.log(content);\n switch (content.type) {\n case \"richText\":\n return
\n\n
\n }\n\n return null\n}\n\nexport default DynamicContent;\n","import React, { useState } from \"react\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport DynamicContent from \"../components/dynamicContent\";\nimport Heading from \"../components/heading\";\nfunction Page(props) {\n console.log(props);\n\n const { title, dynamicContent } = props;\n return (
\n {title}\n \n
\n );\n}\n\nexport default Page;\n","import \"./App.scss\";\nimport { BrowserRouter as Router, Switch, Route, Link } from \"react-router-dom\";\nimport Home from \"./pages/home\";\nimport React, { useState } from \"react\";\nimport { useEffect } from \"react\";\nimport Api from \"./helpers/api.helper\";\nimport Reserve from \"./pages/reserve\";\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport NotFound from \"./pages/404\";\nimport Heading from \"./components/heading\";\nimport \"signalr/jquery.signalR.min\";\nimport Form, {\n validateEmail,\n validateEmpty,\n validatePhone,\n} from \"./components/form/form\";\nimport {\n faEdit,\n faEnvelope,\n faMobileAlt,\n faUser,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport Page from \"./pages/page\";\n\n// Helpers\nimport { labels, language } from \"./helpers/markup.helper\";\n\nfunction App() {\n const [pageTree, setPageTree] = useState();\n useEffect(() => {\n const getPages = async () => {\n const pagesResponse = await Api.getPageTree();\n setPageTree(pagesResponse);\n };\n\n getPages();\n }, []);\n\n const [contactForm, updateForm] = useState({\n name: {\n value: \"\",\n type: \"text\",\n validator: validateEmpty,\n placeholder: labels[language]?.name,\n icon: faUser,\n },\n email: {\n value: \"\",\n type: \"email\",\n validator: validateEmail,\n placeholder: labels[language]?.email,\n icon: faEnvelope,\n },\n mobile: {\n value: \"\",\n type: \"text\",\n validator: validatePhone,\n placeholder: labels[language]?.phone,\n icon: faMobileAlt,\n },\n message: {\n value: \"\",\n rows: 20,\n validator: () => true,\n placeholder: labels[language]?.message,\n icon: faEdit,\n },\n });\n\n return (\n
\n \n
\n {labels[language]?.home}\n {pageTree?.children.map((page) => (\n \n {page.title}\n \n ))}\n
\n \n \n\n \n\n {pageTree?.children.map((page) => (\n }\n />\n ))}\n\n \n \n
\n
\n );\n}\n\nexport default App;\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport { HubProvider } from './hubContextProvider';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}