@qite/tide-booking-component
Version:
React Booking wizard & Booking product component for Tide
92 lines (70 loc) • 2.69 kB
text/typescript
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));
};