{"version":3,"file":"static/js/783.3726ff29.chunk.js","mappings":"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","sources":["services/translations.ts","services/api/reservation.ts"],"sourcesContent":["import { AppLocale } from '../models/modules';\r\nimport huTrans from '../translations/hu.json';\r\nimport huTransFormal from '../translations/hu-formal.json';\r\nimport enTrans from '../translations/en.json';\r\nimport skTrans from '../translations/sk.json';\r\nimport deTrans from '../translations/de.json';\r\nimport deTransFormal from '../translations/de-formal.json';\r\n\r\nexport const translations = {\r\n [AppLocale.Hu]: huTrans,\r\n [AppLocale.HuFormal]: huTransFormal,\r\n [AppLocale.En]: enTrans,\r\n [AppLocale.Sk]: skTrans,\r\n [AppLocale.De]: deTrans,\r\n [AppLocale.DeFormal]: deTransFormal,\r\n};\r\n\r\nexport const apiLanguages = {\r\n [AppLocale.Hu]: 'hu',\r\n [AppLocale.HuFormal]: 'yo-NG',\r\n [AppLocale.En]: 'en-US',\r\n [AppLocale.Sk]: 'sk-SK',\r\n [AppLocale.De]: 'de-AT',\r\n [AppLocale.DeFormal]: 'de-DE',\r\n};","import { ICalendar } from 'src/entities/calendar';\r\nimport { IDTO, IResponseDto } from 'src/entities/common';\r\nimport { AppLocale } from 'src/models/modules';\r\nimport { IFilterType, IReservationDetails, IReservationDetailsList, IReservationModifyRequest } from 'src/entities/reservation';\r\nimport { IReservationDto } from '../../entities/reservation';\r\nimport { setTimeOnDate } from '../dateTime';\r\nimport fetcher, { ContentType } from '../fetcher';\r\nimport { StepType } from '../getStepOrder';\r\nimport { apiLanguages } from '../translations';\r\nimport { IPaidTransactionResponse, IPendingReservation, IReservation, IReservationModel, IReservationQueryOptions, IReservationRequest, IReservationResponse, IReservationSaveRequest, isSignUpUser, isWithinModificationPeriod, populateReservations } from './../../entities/reservation';\r\nimport { ISignupUser, IUser, IUserBase } from './../../entities/user';\r\nimport { getQueryParam } from './../queryString';\r\nimport { accessToken } from './authorization';\r\nimport { handleError, handleModifyReservationError } from './errorHandler';\r\nimport { login, signUp } from './user';\r\n\r\nexport interface IPostReservationParams {\r\n reservations: IReservation[];\r\n user: IUserBase | ISignupUser;\r\n calendars?: ICalendar[];\r\n shouldSignUp?: boolean;\r\n termsAccepted?: boolean;\r\n language?: string;\r\n setUser?: (userData: IUser | null) => void;\r\n}\r\n\r\nexport const postReservation = async (\r\n { \r\n reservations,\r\n user,\r\n calendars,\r\n shouldSignUp,\r\n termsAccepted,\r\n language,\r\n setUser\r\n }: IPostReservationParams): Promise => {\r\n\r\n if (shouldSignUp && isSignUpUser(user)) {\r\n await signUp(user).then(\r\n async () => {\r\n if (setUser) {\r\n await login({\r\n username: user.Email,\r\n password: user.Password,\r\n keepLoggedIn: false\r\n }).then(result => setUser(result));\r\n }\r\n },\r\n (reason) => {\r\n return Promise.reject(reason);\r\n }\r\n );\r\n }\r\n const userWithoutPassword = Object.keys(user).reduce((previous, current) => current === 'Password' ? previous : {...previous, [current]: user[current as keyof (IUserBase | ISignupUser)]}, {}) as (IUserBase | ISignupUser);\r\n\r\n const body: IReservationSaveRequest = {\r\n User: userWithoutPassword,\r\n Reservations: reservations,\r\n TermsAccepted: termsAccepted ?? false\r\n }\r\n\r\n const token = await accessToken();\r\n let url = `/Reservations`;\r\n\r\n if (language) {\r\n const isIframe = getQueryParam('Mode') === 'iframe';\r\n const fallbackLanguage = AppLocale.En;\r\n const currentLanguage = Object.keys(apiLanguages).includes(language) ? language : fallbackLanguage;\r\n\r\n if (isIframe) {\r\n url += `?culture=${apiLanguages[currentLanguage as keyof typeof apiLanguages]}`;\r\n }\r\n }\r\n\r\n return fetcher.post>(url, body, ContentType.Json, token)\r\n .then(response => {\r\n if (calendars) {\r\n populateReservations(response.Data, calendars)\r\n }\r\n return response.Data;\r\n }, (errorDto: IResponseDto) => {\r\n return Promise.reject(handleError(errorDto));\r\n });\r\n}\r\n\r\nexport const modifyReservation = async (request: IReservationModifyRequest): Promise => {\r\n let token;\r\n let url;\r\n\r\n if (request.ClientKey) {\r\n url = '/Reservations/' + request.Reservation.Id + '/ByClientKey';\r\n } else {\r\n url = '/Reservations/' + request.Reservation.Id;\r\n token = await accessToken();\r\n if (!token) {\r\n return;\r\n }\r\n }\r\n\r\n if (!isWithinModificationPeriod(request.Reservation)) {\r\n return;\r\n }\r\n\r\n return fetcher.put>(url, request, ContentType.Json, token)\r\n .then(() => undefined, (errorDto: IResponseDto) => Promise.reject(handleModifyReservationError(errorDto)))\r\n}\r\n\r\nexport const getReservationById = (id: number): Promise => {\r\n return fetcher.get(`/Reservations/${id}`)\r\n .then((respJson) => respJson.Data);\r\n}\r\n\r\nexport const getPreReservation = async (clientKey: string): Promise => {\r\n return fetcher.get>(`/PreReservations/ByClientKey/${clientKey}`)\r\n .then((restpJson) => restpJson.Data);\r\n}\r\n\r\nexport const getPaidTransaction = async (request: IReservationRequest): Promise => {\r\n \r\n let token;\r\n let url = `/Reservations/${request.Id}/PaidTransaction`;\r\n\r\n if (request.ClientKey) {\r\n url = `${url}/ByClientKey?clientKey=${request.ClientKey}`;\r\n } else {\r\n token = await accessToken();\r\n if (!token) {\r\n return null;\r\n }\r\n }\r\n\r\n return fetcher.get>(url, token)\r\n .then((restpJson) => restpJson.Data);\r\n}\r\n\r\nexport const deleteReservation = async (request: IReservationRequest): Promise => {\r\n\r\n let args: [string, string?];\r\n\r\n if (request.ClientKey) {\r\n args = [`/Reservations/${request.Id}/ByClientKey?clientKey=${request.ClientKey}`];\r\n } else {\r\n const token = await accessToken();\r\n if (!token) {\r\n return null;\r\n }\r\n args = [`/Reservations/${request.Id}`, token];\r\n }\r\n\r\n return fetcher.delete(...args).catch(() => null)\r\n}\r\n\r\nconst getFilterInterval = (now: string, type: IFilterType): { startTime?: string; endTime?: string} => (\r\n {\r\n 'all': {},\r\n 'future': { startTime: now },\r\n 'past': { endTime: now }\r\n }[type]\r\n)\r\n\r\nexport const getReservations = async (options: IReservationQueryOptions): Promise => {\r\n\r\n const params = generateParamsFromQuery(options);\r\n let token;\r\n let url;\r\n\r\n if (options.clientKey) {\r\n url = `/Users/Reservations/ByClientKey/${options.clientKey}?`;\r\n } else {\r\n url = '/Users/Reservations?';\r\n token = await accessToken();\r\n if (!token) {\r\n return null;\r\n }\r\n }\r\n\r\n return fetcher.get>(`${url}${params}`, token)\r\n .then(respJson => respJson.Data)\r\n}\r\n\r\nexport const reservationModelToRequest = (model: IReservationModel): IReservationDetails => {\r\n const calendar = model[StepType.Calendar];\r\n const appointment = model[StepType.Date];\r\n const questions = model[StepType.CustomerData];\r\n const event = model[StepType.Timetable];\r\n const service = model[StepType.Service] || model[StepType.Timetable]!.service;\r\n\r\n const getArriveTime = (date: string) =>\r\n questions && questions.arriveTime && setTimeOnDate(date, questions.arriveTime)\r\n || date;\r\n\r\n return {\r\n Id: 0,\r\n StartTime: appointment ? appointment.startTime : event!.schedule.Start,\r\n EndTime: appointment ? appointment.endTime : event!.schedule.End,\r\n ArriveTime: getArriveTime(appointment ? appointment.startTime : event!.schedule.Start),\r\n CalendarId: calendar?.Id,\r\n Calendar: calendar,\r\n Service: service,\r\n Title: service.Name,\r\n ServiceId: service.Id,\r\n ScheduleId: event && event.schedule.Id,\r\n PersonCount: appointment ? appointment.personCount : event!.personCount,\r\n ...(questions && { Questions: questions.answers })\r\n };\r\n}\r\n\r\nexport const reservationModelToPendingRequest = (model: IReservationModel): IPendingReservation => {\r\n const calendar = model[StepType.Calendar];\r\n const appointment = model[StepType.Date];\r\n const event = model[StepType.Timetable];\r\n return appointment ? {\r\n StartTime: appointment.startTime,\r\n PersonCount: appointment.personCount,\r\n CalendarId: calendar?.Id,\r\n ServiceId: model.service!.Id\r\n } : {\r\n StartTime: event!.schedule.Start,\r\n PersonCount: event!.personCount,\r\n CalendarId: calendar && calendar.Id,\r\n ServiceId: model.service!.Id\r\n }\r\n}\r\n\r\nconst generateParamsFromQuery = ({ pagination, filter, clientKey }: IReservationQueryOptions): string => {\r\n const params = new URLSearchParams();\r\n const interval = getFilterInterval(new Date().toISOString(), filter.type);\r\n\r\n for (const key in interval) {\r\n if (Object.hasOwn(interval, key)) {\r\n const value = interval[key as keyof typeof interval];\r\n if (typeof value === 'string') {\r\n params.append(key, value)\r\n }\r\n }\r\n }\r\n\r\n params.append('isAscending', String(filter.isAscending));\r\n\r\n for (const key in pagination) {\r\n if (Object.hasOwn(pagination, key)) {\r\n const value = pagination[key as keyof typeof pagination]\r\n if (value) {\r\n params.append(key, value.toString())\r\n }\r\n }\r\n }\r\n\r\n if (clientKey) {\r\n params.append('clientKey', clientKey)\r\n }\r\n\r\n return params.toString();\r\n}"],"names":["apiLanguages","Hu","hu","HuFormal","En","en","Sk","sk","De","de","DeFormal","postReservation","reservations","user","calendars","shouldSignUp","termsAccepted","language","setUser","Promise","then","username","Email","password","Password","keepLoggedIn","result","reason","reject","userWithoutPassword","Object","keys","reduce","previous","current","body","User","Reservations","TermsAccepted","token","url","isIframe","fallbackLanguage","currentLanguage","includes","post","Json","response","Data","errorDto","modifyReservation","request","ClientKey","Reservation","Id","put","getPreReservation","clientKey","get","restpJson","getPaidTransaction","deleteReservation","args","delete","catch","getReservations","options","params","generateParamsFromQuery","respJson","reservationModelToRequest","model","date","calendar","Calendar","appointment","Date","questions","CustomerData","event","Timetable","service","Service","StartTime","startTime","schedule","Start","EndTime","endTime","End","ArriveTime","arriveTime","CalendarId","Title","Name","ServiceId","ScheduleId","PersonCount","personCount","Questions","answers","reservationModelToPendingRequest","now","pagination","filter","URLSearchParams","interval","toISOString","type","key","hasOwn","value","append","String","isAscending","toString"],"sourceRoot":""}