{"version":3,"file":"static/js/access-page.6b9108ad.chunk.js","mappings":"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","sources":["components/access-booking/access-booking-container.tsx","components/access-booking/service.ts","pages/access/access.tsx","lib/src/common/content-service.ts","templates/one-col-grid.tsx","lib/src/common/initial-data-service.ts","lib/src/common/content-parser.ts","lib/src/common/sailing-notification-service.ts","common/cookies.ts","common/ccl-cookies.ts","common/profile.ts"],"sourcesContent":["import * as React from 'react';\nimport { addBookings } from './service';\nimport {\n    AccessBookingModalTrigger,\n    AccessBookingContentProps,\n    AddBookingRequest,\n    AddBookingsResponse,\n    Modal,\n    AccessBooking\n} from 'cclr-huge-ui';\nimport { getContent } from '../../lib/src/common/content-service';\nimport * as profile from '../../common/profile';\nimport { localRoutes } from '../../lib/src/common/constants';\n\nexport interface AccessBookingContainerProps {\n    onOpening?(): void;\n    onClosed?(): void;\n    mode?: 'autoOpen' | 'link';\n}\n\nexport type AccessBookingContainerState = {\n    content: AccessBookingContentProps | null;\n};\n\nexport class AccessBookingContainer extends React.Component<AccessBookingContainerProps, AccessBookingContainerState> {\n\n    state: AccessBookingContainerState = {\n        content: null\n    };\n\n    render() {\n        if (!this.state.content) {\n            return null;\n        }\n\n        const guestName = profile.getAuthenticatedUserFullName();\n\n        if (this.props.mode === 'autoOpen') {\n            return (\n                <Modal\n                    shell={false}\n                    isOpen={true}\n                    fullScreen={true}\n                    dialogDescription={this.state.content.heading}\n                >\n                    <AccessBooking\n                        mode=\"modal\"\n                        onRequestClose={this.autoOpenModeCloseModal}\n                        content={this.state.content}\n                        onSubmit={this.submitSearch}\n                        onComplete={this.onSailingToSelect}\n                        anonymousUser={!guestName}\n                    />\n                </Modal>\n            );\n        }\n\n        return (\n            <AccessBookingModalTrigger\n                onSubmit={this.submitSearch}\n                content={this.state.content!}\n                onOpening={this.props.onOpening}\n                onClosed={this.props.onClosed}\n                onComplete={this.onSailingToSelect}\n            />\n        );\n    }\n\n    componentDidMount() {\n        getContent<AccessBookingContentProps>('23FF20BD-DF4E-42A8-ABD1-1F5F53F21FB2')\n            .then(content => this.setState({ content }));\n    }\n\n    private autoOpenModeCloseModal() {\n        window.location.href = '/';\n    }\n\n    private onSailingToSelect = (fromBookingNumber: string): void => {\n        if (fromBookingNumber) {\n            this.redirectToBooking(encodeURIComponent(fromBookingNumber));\n        }\n    }\n\n    private submitSearch = (bookings: AddBookingRequest[]): Promise<AddBookingsResponse> => {\n        return addBookings(bookings).then(n => {\n            setTimeout(() => {\n                const isOrganizerAccess = window.location.pathname.toLowerCase().indexOf(localRoutes.access) >= 0;\n                const bookingNumber = encodeURIComponent(bookings[0].bookingNumber);\n                if (isOrganizerAccess) {\n                    window.location.href = `${localRoutes.home}?bookingNumber=${bookingNumber}&source=oa`;\n                } else {\n                    this.redirectToBooking(bookingNumber);\n                }\n            }, 4000);\n            return n;\n        });\n    }\n\n    private redirectToBooking(bookingNumber: string) {\n        const path = window.location.pathname.toLowerCase();\n        if (path.indexOf(localRoutes.details) >= 0 || path.indexOf(localRoutes.home) >= 0 || path.indexOf(localRoutes.planner) >= 0) {\n            window.location.href = `${path}?bookingNumber=${bookingNumber}`;\n        } else {\n            window.location.href = `${localRoutes.home}?bookingNumber=${bookingNumber}`;\n        }\n    }\n}\n","import { AddBookingRequest, AddBookingsResponse, Advisory } from 'cclr-huge-ui';\nimport { ApiError, cclFetch } from 'ccl-utilities';\n\nexport type AddBookingsApiResponse = {\n    responses: AddBookingApiResponse[];\n};\n\nexport type AddBookingApiResponse = {\n    bookingNumber: string;\n    lastName: string;\n    success: boolean;\n    details: Advisory[];\n};\n\nexport function addBookings(bookings: AddBookingRequest[]): Promise<AddBookingsResponse> {\n    const opts: RequestInit = {\n        method: 'POST',\n        headers: new Headers({\n            'Accept': 'application/json',\n            'Content-Type': 'application/json'\n        }),\n        body: JSON.stringify({\n            bookings: bookings\n        }),\n    };\n\n    return cclFetch<AddBookingsApiResponse>('/booked/api/v1.0/bookings', opts)\n        .catch((error: ApiError) => {\n            if (error.code === 'RequestsFailed' && error.innerError && error.innerError.data) {\n                // eslint-disable-next-line no-throw-literal\n                throw error.innerError.data as AddBookingsResponse;\n            }\n            throw error;\n        });\n}\n","import * as React from 'react';\nimport { RouteComponentProps } from '@reach/router';\n\nimport { OneColumnGrid } from '../../templates/one-col-grid';\nimport { AccessBookingContainer } from '../../components/access-booking/access-booking-container';\n\nexport default class Access extends React.Component<RouteComponentProps> {\n\n    public render() {\n        return (\n            <main className=\"h-main-container\">\n                <OneColumnGrid>\n                    <AccessBookingContainer mode=\"autoOpen\" />\n                </OneColumnGrid>\n            </main>\n        );\n    }\n}\n","import { cclFetch } from 'ccl-utilities';\nimport { parseContent } from './content-parser';\nimport { Item } from 'cclr-huge-ui/dist/src/models/sitecore';\nimport { getInitialData } from './initial-data-service';\nimport { sailingNotificationService } from './sailing-notification-service';\n\ninterface Store {\n    // tslint:disable-next-line:no-any\n    [key: string]: Promise<any>;\n}\n\nconst store: Store = {};\n\nexport function getContent<TContent>(id: string): Promise<TContent> {\n    // some modules don't have a sailing dependency (Funmail and travel companions).\n    // Access does not either, but our version is not used, hybris's is.\n    const lang = sailingNotificationService.currentSailing?.contentLanguageCode || 'en';\n    const storageKey = `${id.toLowerCase()}_${lang}`;\n\n    if (!store[storageKey]) {\n        const content = getInitialData<Item>(storageKey);\n        if (content) {\n            store[storageKey] = Promise.resolve(parseContent<TContent>(content));\n        } else {\n            const contentVersionParam = getContentVersionParam();\n            const url = `/booked/api/v1.0/Content?${contentVersionParam}id=${id}&lang=${lang}`;\n            store[storageKey] = cclFetch<Item>(url)\n                .then(rawContent => parseContent<TContent>(rawContent));\n        }\n    }\n    return store[storageKey];\n}\n\ninterface RawStore {\n    [key: string]: Promise<Item>;\n}\n\nconst rawStore: RawStore = {};\n\nexport function getRawContent(id: string): Promise<Item> {\n\n    const lang = sailingNotificationService.currentSailing?.contentLanguageCode || 'en';\n    const storageKey = `${id.toLowerCase()}_${lang}`;\n\n    if (!rawStore[storageKey]) {\n        const content = getInitialData<Item>(storageKey);\n        if (content) {\n            rawStore[storageKey] = Promise.resolve(content);\n        } else {\n            const contentVersionParam = getContentVersionParam();\n            const url = `/booked/api/v1.0/Content?${contentVersionParam}id=${id}&lang=${lang}`;\n            rawStore[storageKey] = cclFetch<Item>(url);\n        }\n    }\n    return rawStore[storageKey];\n}\n\nfunction getContentVersionParam(): string {\n    const hstElement = document.getElementById('hst');\n    if (hstElement) {\n        const contentVersion = hstElement.getAttribute('ver');\n        if (contentVersion) {\n            const hash = getContentHash();\n            return `version=${contentVersion}.${hash}&`;\n        }\n    }\n    return '';\n}\n\nfunction getContentHash(): string {\n    const hashElement = document.getElementById('content-hash') as HTMLInputElement;\n    return hashElement ? hashElement.value : '';\n}\n","import * as React from 'react';\n\nexport const OneColumnGrid: React.FunctionComponent = ({children}) => (\n    <div className=\"container\">\n        <div className=\"row\">\n            <div className=\"col-md\">{children}</div>\n        </div>\n    </div>\n);","export function getInitialData<T>(key: string): T | undefined {\n    if ('initialData' in window) {\n        // tslint:disable-next-line:no-string-literal no-any\n        const initialData = (window as any)['initialData'];\n        if (initialData) {\n            const data = initialData[key];\n            if (data) {\n                return data as T;\n            }\n        }\n    }\n    return undefined;\n}\n\nexport function populateInitialData(data: { [key: string]: {} }) {\n    for (const propName in data) {\n        if (data.hasOwnProperty(propName)) {\n            setInitialData(propName, data[propName]);\n        }\n    }\n}\n\nfunction setInitialData(key: string, value: {}) {\n    // tslint:disable:no-string-literal\n    // tslint:disable-next-line:no-any\n    let initialData = (window as any)['initialData'];\n    if (!initialData) {\n        // tslint:disable-next-line:no-any\n        initialData = (window as any)['initialData'] = {};\n    }\n    initialData[key] = value;\n}","import { Field, Item, Image, Fields } from 'cclr-huge-ui/dist/src/models/sitecore';\n\n // tslint:disable-next-line\n export interface IContentValue {\n    [key: string]: string | number | boolean | Image | IContentValue | IContentValue[] | null | undefined;\n}\n\nexport class ContentParser {\n\n    public mapContent(item: Item): IContentValue {\n        const target = {\n            children: this.mapItems(item.children),\n            ...this.mapFields(item.fields)\n        };\n        return target;\n    }\n\n    private parseField(field: Field): IContentValue | string | number | boolean | Image | IContentValue[] | null | undefined {\n\n        if (!field) {\n            return null;\n        }\n        let target: IContentValue | string | number | boolean | Image | IContentValue[] | null = {};\n\n        if (!field.value) {\n            target = null;\n        } else if (field.value.hasOwnProperty('templateId')) {\n            target = this.mapItem(field.value as Item);\n        } else if (Array.isArray(field.value)) {\n            const values: IContentValue[] = [];\n            field.value.forEach(value => {\n                const mappedSubItem = this.mapItem(value);\n                if (mappedSubItem) {\n                    values.push(mappedSubItem);\n                }\n            });\n            target = values;\n        } else {\n            target = field.value;\n        }\n        return target;\n    }\n\n    private mapFields(fields: Fields) {\n        const targetFields: IContentValue = {};\n        if (fields) {\n            Object.keys(fields).forEach((key) => {\n                const fieldValue = fields[key];\n                targetFields[key] = this.parseField(fieldValue);\n            });\n        }\n        return targetFields;\n    }\n\n    private mapItems(items: Item[] | undefined): IContentValue[] {\n        if (!items) {\n            return [];\n        }\n        const contentItems: IContentValue[] = [];\n        items.forEach(subItem => {\n            const mappedSubItem = this.mapItem(subItem);\n            if (mappedSubItem) {\n                contentItems.push(mappedSubItem);\n            }\n        });\n        return contentItems;\n    }\n\n    private mapItem(item: Item): IContentValue | null {\n        if (!item) {\n            return null;\n        }\n        const target = this.mapFields(item.fields);\n\n        if (item!.children! && target.hasOwnProperty('children') !== undefined ) {\n            target.children = this.mapItems(item!.children!);\n        }\n        return target;\n    }\n}\n\nexport function parseContent<T>(item: Item): T {\n    let converter = new ContentParser();\n    let content = converter.mapContent(item);\n    // tslint:disable-next-line:no-any\n    return (content as any) as T;\n}\n","\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { SailingApiResponse } from './api-models';\n\nclass SailingNotificationService {\n\n    constructor() {\n        this.sailingApiSubject.subscribe(value => this.currentSailing = value);\n        this.sailingObservable = this.sailingApiSubject.asObservable();\n    }\n\n    private sailingApiSubject = new BehaviorSubject<SailingApiResponse | null>(null);\n    public currentSailing: SailingApiResponse | null = null;\n    public sailingObservable: Observable<SailingApiResponse | null>;\n\n    public notify(sailing: SailingApiResponse) {\n        this.sailingApiSubject.next(sailing);\n    }\n}\n\nexport const sailingNotificationService = new SailingNotificationService();\n","// Brought from https://github.com/js-cookie/js-cookie\n// and modified to play nice with typescript and webpack\n\nfunction decode (s: string) {\n    return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n}\n\nexport interface CookieAttributes {\n    path?: string;\n    expires?: number | Date | string;\n    domain?: string;\n    secure?: boolean;\n}\n\nexport function set (key: string, value: string, attributes: CookieAttributes) {\n    if (typeof document === 'undefined') {\n        return;\n    }\n\n    attributes =  { path: '/', ...attributes };\n\n    if (typeof attributes.expires === 'number') {\n        attributes.expires = new Date(new Date().getTime() + attributes.expires * 864e+5);\n    }\n\n    // We're using \"expires\" because \"max-age\" is not supported by IE\n    attributes.expires = attributes.expires ? (attributes.expires as Date).toUTCString() : '';\n\n    try {\n        const result = JSON.stringify(value);\n        // eslint-disable-next-line no-useless-escape\n        if (/^[\\{\\[]/.test(result)) {\n            value = result;\n        }\n    // tslint:disable-next-line:no-empty\n    } catch (e) {}\n\n    value =\n        encodeURIComponent(String(value))\n            .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n    // eslint-disable-next-line no-useless-escape\n    key = encodeURIComponent(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\\(\\)]/g, escape);\n\n    let stringifiedAttributes = '';\n    for (const attributeName in attributes) {\n        if (!attributes[attributeName]) {\n            continue;\n        }\n        stringifiedAttributes += '; ' + attributeName;\n        if (attributes[attributeName] === true) {\n            continue;\n        }\n\n        // Considers RFC 6265 section 5.2:\n        // ...\n        // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n        //     character:\n        // Consume the characters of the unparsed-attributes up to,\n        // not including, the first %x3B (\";\") character.\n        // ...\n        stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n    }\n\n    return (document.cookie = key + '=' + value + stringifiedAttributes);\n}\n\nfunction getHelper (key: string, json: boolean) {\n    if (typeof document === 'undefined') {\n        return;\n    }\n\n    const jar = {};\n    // To prevent the for loop in the first place assign an empty array\n    // in case there are no cookies at all.\n    const cookies = document.cookie ? document.cookie.split('; ') : [];\n    let i = 0;\n\n    for (; i < cookies.length; i++) {\n        const parts = cookies[i].split('=');\n        let cookie = parts.slice(1).join('=');\n\n        if (!json && cookie.charAt(0) === '\"') {\n            cookie = cookie.slice(1, -1);\n        }\n\n        try {\n            const name = decode(parts[0]);\n            cookie = decode(cookie);\n\n            if (json) {\n                try {\n                    cookie = JSON.parse(cookie);\n                // tslint:disable-next-line:no-empty\n                } catch (e) {}\n            }\n\n            jar[name] = cookie;\n\n            if (key === name) {\n                break;\n            }\n        // tslint:disable-next-line:no-empty\n        } catch (e) {}\n    }\n\n    return key ? jar[key] : jar;\n}\n\nexport function get(key: string): string {\n    return getHelper(key, false /* read as raw */);\n}\nexport function getJSON<T>(key: string): T | undefined {\n    return getHelper(key, true /* read as json */) as T;\n}\nexport function remove(key: string, attributes: CookieAttributes) {\n    set(key, '', {...attributes, expires: -1 });\n}\n","import * as cookies from './cookies';\n\nexport interface CclUser {\n    FirstName: string;\n    LastName: string;\n    Email: string;\n    PastGuestNumber: string;\n    TierCode: string;\n    CarnivalUser: string;\n}\n\nexport interface CclSession {\n    BookingNumber: string;\n    SailDate: string;\n    VifpNumberOfDays: string;\n    TierCode: string;\n    IsAuthenticated: boolean;\n}\n\nexport function getCclSessionCookieData() {\n    return cookies.getJSON<CclSession>('cclSession');\n}\n\nexport function getCclUserCookieData() {\n    return cookies.getJSON<CclUser>('cclUser');\n}\n","import { Guest } from 'cclr-huge-ui';\nimport { getCclUserCookieData, getCclSessionCookieData } from './ccl-cookies';\n\nexport function getAuthenticatedUserFullName(): string | undefined {\n    const cclSession = getCclSessionCookieData();\n    if (cclSession && cclSession.IsAuthenticated) {\n        const cclUser = getCclUserCookieData();\n        if (cclUser) {\n            const fullName = `${cclUser.FirstName} ${cclUser.LastName}`;\n            return fullName;\n        }\n    }\n    return undefined;\n}\n\nexport function getAuthenticatedUserFirstName(): string | undefined {\n    const cclSession = getCclSessionCookieData();\n    if (cclSession && cclSession.IsAuthenticated) {\n        const cclUser = getCclUserCookieData();\n        if (cclUser) {\n            return cclUser.FirstName;\n        }\n    }\n    return undefined;\n}\n\nexport function getAuthenticatedGuest(): Guest | null {\n    const cclSession = getCclSessionCookieData();\n    if (cclSession && cclSession.IsAuthenticated) {\n        const cclUser = getCclUserCookieData();\n        if (cclUser == null)\n            return null;\n        return {\n            firstName: cclUser.FirstName,\n            lastName: cclUser.LastName,\n            bookingNumber: cclSession.BookingNumber,\n        };\n    }\n\n    return null;\n}"],"names":["AccessBookingContainer","React","constructor","arguments","state","content","onSailingToSelect","fromBookingNumber","this","redirectToBooking","encodeURIComponent","submitSearch","bookings","opts","method","headers","Headers","body","JSON","stringify","cclFetch","catch","error","code","innerError","data","addBookings","then","n","setTimeout","isOrganizerAccess","window","location","pathname","toLowerCase","indexOf","localRoutes","access","bookingNumber","href","home","render","guestName","profile","props","mode","Modal","shell","isOpen","fullScreen","dialogDescription","heading","AccessBooking","onRequestClose","autoOpenModeCloseModal","onSubmit","onComplete","anonymousUser","AccessBookingModalTrigger","onOpening","onClosed","componentDidMount","getContent","setState","path","details","planner","Access","className","OneColumnGrid","store","id","_sailingNotificationS","lang","sailingNotificationService","currentSailing","contentLanguageCode","storageKey","getInitialData","Promise","resolve","parseContent","url","getContentVersionParam","rawContent","rawStore","getRawContent","_sailingNotificationS2","hstElement","document","getElementById","contentVersion","getAttribute","hashElement","value","getContentHash","_ref","children","key","initialData","populateInitialData","propName","hasOwnProperty","setInitialData","ContentParser","mapContent","item","mapItems","mapFields","fields","parseField","field","target","mapItem","Array","isArray","values","forEach","mappedSubItem","push","targetFields","Object","keys","fieldValue","items","contentItems","subItem","undefined","sailingApiSubject","BehaviorSubject","sailingObservable","subscribe","asObservable","notify","sailing","next","decode","s","replace","decodeURIComponent","getHelper","json","jar","cookies","cookie","split","i","length","parts","slice","join","charAt","name","parse","e","getJSON","getCclSessionCookieData","getCclUserCookieData","getAuthenticatedUserFullName","cclSession","IsAuthenticated","cclUser","FirstName","LastName","getAuthenticatedUserFirstName","getAuthenticatedGuest","firstName","lastName","BookingNumber"],"sourceRoot":""}