{"version":3,"file":"serviceTripCalculator.js","sources":["../FrontendResources/js/components/react/serviceTripCalculator/CalculationForm.tsx","../FrontendResources/js/components/react/serviceTripCalculator/ServiceTripCalculatorApp.tsx"],"sourcesContent":["import React from 'react';\nimport PositionAutosuggest from '../travelplanner/PositionAutosuggest';\nimport DatePicker, { registerLocale } from \"react-datepicker\";\nimport { sv } from \"date-fns/locale/sv\"; // the locale you want\nimport \"react-datepicker/dist/react-datepicker.css\";\n\nregisterLocale(\"sv\", sv);\n\ntype Props = {\n data: any;\n formData: any;\n errors: string[];\n handleAutosuggestChange: (suggestion: string, id: string) => void;\n handleTimeChange: (time: any) => void;\n handleSearch: (e: React.FormEvent) => void;\n expandForm: () => void;\n toggleDestinations: () => void;\n};\n\nconst roundToNext15Minutes = (date) => {\n const ms = 1000 * 60 * 15; // 15 minutes in milliseconds\n return new Date(Math.ceil(date.getTime() / ms) * ms);\n};\n\n\nexport const CalculationForm = ({toggleDestinations, handleSearch, formData, handleAutosuggestChange, expandForm, errors, handleTimeChange, data}: Props) => {\n\n return (\n
\n
\n
\n \n
\n \n
\n \n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n
\n )\n}","import React, { useState, useEffect } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { TravelPlannerData } from './Travelplanner';\nimport { CalculationForm } from './CalculationForm';\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport Checkbox from '../travelplanner/Checkbox';\n\nconst ServiceTripCalculatorApp = () => {\n const data: TravelPlannerData = 'data' in window ? window['data'] as TravelPlannerData : {} as TravelPlannerData;\n const zonesAndTimes = window['zonesAndTimes'] || {};\n //fix number\n const phoneNumber = window['phoneNumber'] || \"\"; \n const includePercentagesInThirtyDayPrice = window['includePercentagesInThirtyDayPrice'] || false;\n\n data.texts = data[\"Texts\"] || {};\n const [formData, setFormData] = useState(data[\"FormData\"] || {});\n const [errors, setErrors] = useState([]);\n const [views, setViews] = useState(data.views || { activeformelements: [] });\n const [journey, setJourney] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [price, setPrice] = useState(0);\n const [groundPrice, setGroundPrice] = useState(0);\n const [isWorkOrStudy, setIsWorkOrStudy] = useState(false);\n const [isServiceExtra, setIsServiceExtra] = useState(false);\n const [isRedDay, setIsRedDay] = useState(false);\n const getJourneyUrl = \"/api/TravelPlannerApi/GetJourney\";\n\n const convertToLocalTime = (dateString) => {\n const date = new Date(dateString);\n const today = new Date();\n today.setHours(date.getUTCHours());\n today.setMinutes(date.getUTCMinutes());\n today.setSeconds(0);\n today.setMilliseconds(0);\n return today;\n };\n \n // Convert times in zonesAndTimes to local time only once\n const localTimes = {\n start: convertToLocalTime(zonesAndTimes[\"times\"][\"start\"]),\n end: convertToLocalTime(zonesAndTimes[\"times\"][\"end\"]),\n secondStart: convertToLocalTime(zonesAndTimes[\"times\"][\"secondStart\"]),\n secondEnd: convertToLocalTime(zonesAndTimes[\"times\"][\"secondEnd\"])\n };\n\n useEffect(() => {\n if (journey) {\n calculatePrice(journey[\"NumberOfZones\"]);\n }\n }, [journey, isWorkOrStudy, isServiceExtra, isRedDay]);\n\n const handleAutosuggestChange = (suggestion, id) => {\n setFormData({\n ...formData, \n [id]: suggestion\n });\n };\n\n const getThirtyDayPrice = (price: number, zone: number, modifier: number) => {\n let basePrice = calculatePriceWithoutPercentage(zone >= 5 ? 5 : zone) * 36 * modifier;\n let ticketPrice = 0;\n if (includePercentagesInThirtyDayPrice === true) {\n\n basePrice = getPriceOfZone(zone >= 5 ? 5 : zone) * 36 * modifier;\n }\n let serviceExtraCost = 0;\n //fix price\n if (isServiceExtra) {\n serviceExtraCost = calculatePriceWithoutPercentage(zone >= 10 ? 10 : zone) * 0.5 * 36;\n }\n let newPrice = basePrice;\n if (zone === 1) ticketPrice = Math.round((newPrice * 0.55));\n else if (zone === 2) ticketPrice = Math.round((newPrice * 0.6));\n else if (zone === 3) ticketPrice = Math.round((newPrice * 0.6));\n else if (zone === 4) ticketPrice = Math.round((newPrice * 0.58));\n else ticketPrice = Math.round((newPrice * 0.57));\n return Math.round(ticketPrice + serviceExtraCost);\n }\n \n const calculatePriceWithoutPercentage = (zones: number) => {\n let ticketPrice = 0;\n if (zones >= 10) ticketPrice = parseInt(zonesAndTimes[\"prices\"][9][\"ZonePrice\"])|| 0;\n else ticketPrice = parseInt(zonesAndTimes[\"prices\"][zones - 1][\"ZonePrice\"])|| 0;\n if (groundPrice === 0) setGroundPrice(ticketPrice); \n return ticketPrice;\n }\n\n const getPriceOfZone = (zones: number) => {\n let isWithinStartingCommune = journey ? journey[\"IsWithinStartingCommune\"] : false;\n let ticketPrice = calculatePriceWithoutPercentage(zones);\n if (isWorkOrStudy && !isRedDay) {\n if (isDuringRushHour()) {\n ticketPrice = ticketPrice * 1.2;\n } \n } else if (isRedDay && !isWorkOrStudy) {\n if (!isWithinStartingCommune) {\n ticketPrice = ticketPrice * 1.5;\n }\n } else if (!isWorkOrStudy && !isRedDay) {\n if (isDuringRushHour()) {\n ticketPrice = isWithinStartingCommune === false ? ticketPrice * 1.7 : ticketPrice * 1.2;\n } else if (isWithinStartingCommune === false) {\n ticketPrice = ticketPrice * 1.5;\n }\n } \n return ticketPrice;\n }\n\n const calculatePrice = (zones: number) => {\n let ticketPrice = getPriceOfZone(zones);\n if (isServiceExtra) {\n ticketPrice += groundPrice * 0.5;\n }\n setPrice(ticketPrice);\n }\n\n const isDuringRushHour = () => {\n return new Date(formData[\"traveltime\"]) >= localTimes.start && new Date(formData[\"traveltime\"]) <= localTimes.end || new Date(formData[\"traveltime\"]) >= localTimes.secondStart && new Date(formData[\"traveltime\"]) <= localTimes.secondEnd;\n }\n\n\n const setTravelDate = (time) => {\n const today = new Date();\n const selectedTime = new Date(time);\n today.setHours(selectedTime.getHours());\n today.setMinutes(selectedTime.getMinutes());\n today.setSeconds(0);\n today.setMilliseconds(0);\n\n let copyFormData = { ...formData };\n copyFormData[\"traveltime\"] = today;\n\n setFormData(copyFormData);\n };\n\n const handleTimeChange = (time) => {\n setTravelDate(time);\n };\n\n const handleSearch = (e) => {\n e.preventDefault();\n if (!formData.travelfrom || !formData.travelto) {\n setErrors([\"Vänligen fyll i både resa från och till\"]);\n return;\n }\n if (formData.travelfrom[\"Id\"] === formData.travelto[\"Id\"]) {\n setErrors([\"Resa från och till kan inte vara samma\"]);\n return;\n }\n setIsLoading(true);\n fetch(getJourneyUrl, {\n body: JSON.stringify({\n ...formData,\n traveltime: formData.traveltime instanceof Date ? formData.traveltime.toISOString() : formData.traveltime // Convert to ISO string for the API\n }),\n headers: {\n 'Content-Type': 'application/json'\n },\n method: 'POST'\n })\n .then(response => response.json())\n .then(data => {\n setJourney(data[0])\n setIsLoading(false);\n })\n .catch(error => {\n console.error('Error:', error);\n setErrors([\"Det gick inte att hitta någon resa, vänligen försök igen\"]);\n setIsLoading(false);\n })\n\n // Perform search logic here\n };\n\n \n const toggleDestinations = () => {\n const newFormData = { ...formData };\n const from = newFormData[\"travelfrom\"];\n const to = newFormData[\"travelto\"];\n newFormData[\"travelfrom\"] = to;\n newFormData[\"travelto\"] = from;\n setFormData(newFormData);\n };\n\n const expandForm = () => {\n const formViewIndex = views.activeformelements.indexOf(\"form\");\n if (formViewIndex !== -1) {\n return;\n }\n\n if (formViewIndex === -1) {\n views.activeformelements.push(\"form\");\n }\n\n setViews({\n ...views,\n activeformelements: views.activeformelements\n });\n\n setErrors([]);\n };\n\n const handleWorkOrStudyChange = () => {\n setIsWorkOrStudy(!isWorkOrStudy);\n };\n\n const handleServiceExtraChange = () => {\n setIsServiceExtra(!isServiceExtra);\n };\n\n const handleRedDaysChange = () => {\n setIsRedDay(!isRedDay);\n }\n\n return (\n
\n
\n

Prisräknare färdtjänst

\n {(journey !== null || errors.length > 0) && }\n
\n {isLoading &&
}\n {errors.length > 0 && \n
\n {errors.map((error, index) =>

{error}, vänligen kontakta oss för att boka resa:

)}\n {phoneNumber !== \"0\" &&{phoneNumber}}\n
\n }\n {journey === null && errors.length === 0 && !isLoading && }\n {journey !== null && errors.length === 0 &&
\n {journey[\"IsWithinRegionKalmar\"] === true &&\n <>\n
\n \n \n {isDuringRushHour() &&\n }\n
\n
\n

Vuxen (20 år):

Enkelbiljett: {Math.round(price)} kr

{isWorkOrStudy &&

30-dagarsbiljett: {getThirtyDayPrice(price, journey[\"NumberOfZones\"], 1)} kr

}
\n

Ungdom och barn (7-19 år):

Enkelbiljett: {Math.round(price * 0.6)} kr

{isWorkOrStudy &&

30-dagarsbiljett: {getThirtyDayPrice(price, journey[\"NumberOfZones\"], 0.6)} kr

}
\n {/*

Student:

Enkelbiljett: {Math.round(price * 0.75)} kr

30-dagarsbiljett: {getThirtyDayPrice(price, journey[\"NumberOfZones\"],0.75)} kr

*/}\n
\n

Resa till {journey[\"To\"][\"Name\"]} från {journey[\"From\"][\"Name\"]}.

\n

Resor bokas via telefon och du får exakt pris för resan när du bokar din resa.

\n {phoneNumber !== \"0\" &&{phoneNumber}}\n \n \n }\n {journey[\"IsWithinRegionKalmar\"] === false && errors.length === 0 &&
\n

Din sökning går utanför Region Kalmar, vänligen kontakta oss för att boka resa:

\n {phoneNumber !== \"0\" &&{phoneNumber}}\n
}\n
}\n
\n );\n};\n\nexport default ServiceTripCalculatorApp;\n\nconst container = document.getElementById('service-trip-calculator--wrapper');\nif (container) {\n const root = createRoot(container);\n root.render();\n}"],"names":["registerLocale","sv","roundToNext15Minutes","date","CalculationForm","toggleDestinations","handleSearch","formData","handleAutosuggestChange","expandForm","errors","handleTimeChange","data","jsx","jsxs","PositionAutosuggest","DatePicker","ServiceTripCalculatorApp","zonesAndTimes","phoneNumber","includePercentagesInThirtyDayPrice","setFormData","useState","setErrors","views","setViews","journey","setJourney","isLoading","setIsLoading","price","setPrice","groundPrice","setGroundPrice","isWorkOrStudy","setIsWorkOrStudy","isServiceExtra","setIsServiceExtra","isRedDay","setIsRedDay","getJourneyUrl","convertToLocalTime","dateString","today","localTimes","useEffect","calculatePrice","suggestion","id","getThirtyDayPrice","zone","modifier","basePrice","calculatePriceWithoutPercentage","ticketPrice","getPriceOfZone","serviceExtraCost","newPrice","zones","isWithinStartingCommune","isDuringRushHour","setTravelDate","time","selectedTime","copyFormData","e","response","error","newFormData","from","to","formViewIndex","handleWorkOrStudyChange","handleServiceExtraChange","handleRedDaysChange","index","Fragment","Checkbox","container","createRoot"],"mappings":"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"}