UNPKG

@qite/tide-booking-component

Version:

React Booking wizard & Booking product component for Tide

117 lines (91 loc) 2.85 kB
import JsonURL from "@jsonurl/jsonurl"; import { isArray, isNil } from "lodash"; import { FlightInfo, Room } from "../../booking-wizard/types"; export const getDateFromParams = ( params: URLSearchParams, name: string ): string | null => { const dateString = params.get(name); if (dateString === null) { return null; } const year = parseInt(dateString.slice(0, 5)); const month = parseInt(dateString.slice(5, 7)); const date = parseInt(dateString.slice(8, 10)); return new Date(Date.UTC(year, month - 1, date)).toISOString(); }; export const getDateAsDateFromParams = ( params: URLSearchParams, name: string ): Date | null => { const dateString = params.get(name); if (dateString === null) { return null; } const year = parseInt(dateString.slice(0, 5)); const month = parseInt(dateString.slice(5, 7)); const date = parseInt(dateString.slice(8, 10)); return new Date(Date.UTC(year, month - 1, date)); }; export const getNumberFromParams = ( params: URLSearchParams, name: string ): number | null => { const numberString = params.get(name); if (numberString === null) { return null; } return parseInt(numberString); }; export const getRoomsFromParams = ( params: URLSearchParams, name: string ): Room[] | null => { const roomString = params.get(name); if (roomString === null) { return null; } // Encode the accommodation code in the room string because (external) acco codes can contain special characters like '='. eg: 'ACNYNEgUzMDc4NBoKMTAzODcwMjk4NQ==' const safeRoomsString = roomString.replace(/accommodationCode:([^,]*)/, (match, code) => { return `accommodationCode:${encodeURIComponent(code)}`; }); const rooms = JsonURL.parse(safeRoomsString) as Room[] | undefined; if (isNil(rooms)) { return null; } return rooms.map((room) => { if (!isArray(room.childAges)) room.childAges = []; room.children = room.childAges.length ?? 0; return room; }); }; export const getFlightsFromParams = ( params: URLSearchParams, name: string ): FlightInfo | null => { let flightString = params.get(name); if (flightString === null) { return null; } flightString = flightString.replace(/ /g, "%20"); const flightInfo = JsonURL.parse(flightString, { AQF: true }) as | FlightInfo | undefined; if (isNil(flightInfo)) { return null; } return flightInfo; }; export const getStringFromParams = ( params: URLSearchParams, name: string ): string | null => { return params.get(name); }; export const getNumbersFromParams = ( params: URLSearchParams, name: string ): number[] => { const numberStrings = params.getAll(name); return numberStrings.map((x) => parseInt(x)); };