import React, { FC, ReactType, useEffect, useState } from 'react'; import Layout from '../../components/Layout'; import css from './index.module.css'; import bookingCSS from '../BookingFunnel/index.module.css'; import { Button, Link, LinkProps } from '../../index'; import LogoRawSVG from '../../assets/icons/logo-raw.svg'; import ServiceStep1 from '../../assets/icons/service-step1.svg'; import ServiceStep2 from '../../assets/icons/service-step2.svg'; import ServiceStep3 from '../../assets/icons/service-step3.svg'; import ServiceStep4 from '../../assets/icons/service-step4.svg'; import Textarea from '../../blocks/Textarea'; import format from 'date-fns/format'; import { createEvent } from 'ics'; import { RegisterModal } from '../../helpers/bookingFunnelHelper'; import ReactModal from 'react-modal'; export interface ConfirmationPageProps { logoLink?: LinkProps; translations: { title: string; subtitle: string; bookingSuccessful: string; touch?: { title: string; text: string; }; servicePerformance?: { title: string; text: string; }; payment?: { title: string; text: string; }; appointment: string; calendar: string; feedback?: { title: string; text: string; rating: string; specific: string; send: string; success: string; }; account?: { title: string; text: string; signUp: string; }; home: string; register: string; registerSuccessful: string; close: string; }; isLoggedIn: boolean; servicePackage: { name: string; description: string; duration: string; }; locale: string; bookingData: { serviceDetailsData: { date: Date; isFlexibleCheckbox: boolean; }; serviceLocationData: { street: string; streetNr: string; zip: string; city: string; firstName: string; lastName: string; }; }; createBookingFeedback: (rating: number, feedback: string) => Promise; FormRegister: ReactType; passwordToken: string; } const ConfirmationPage: FC = ({ logoLink, translations, isLoggedIn, servicePackage, locale, bookingData, createBookingFeedback, FormRegister, passwordToken, }) => { const isUk = locale.slice(3, 5).toLowerCase() === 'gb'; const [rating, setRating] = useState(0); const [feedback, setFeedback] = useState(null); const [isSubmitted, setIsSubmitted] = useState(false); const bookingDate = bookingData.serviceDetailsData.date; const locationData = bookingData.serviceLocationData; const [registerModalIsOpen, setRegisterModalIsOpen] = useState(false); const openRegisterModal = (): void => { setRegisterModalIsOpen(true); }; const closeRegisterModal = (): void => { setRegisterModalIsOpen(false); }; //Declare var as tuple because number[] is not assignable to [number,number] -> ics DateArray const dateArray: [number, number, number, number, number] = [0, 0, 0, 0, 0]; format(bookingDate, 'yyyy-M-d-H-m') .split('-') .map((x, i) => (dateArray[i] = +x)); const calendarEvent = createEvent({ title: `Mila - ${servicePackage.name}`, description: servicePackage.description, location: `${locationData.street} ${locationData.streetNr}, ${locationData.zip} ${locationData.city}`, duration: { minutes: parseInt(servicePackage.duration) }, start: dateArray, }); const saveCalendar = (): void => { const url = window.URL.createObjectURL(new Blob([calendarEvent.value])); const link = document.createElement('a'); link.href = url; link.setAttribute('download', 'Mila-Service.ics'); document.body.appendChild(link); link.click(); document.body.removeChild(link); }; useEffect(() => { window.scrollTo(0, 0); }, []); const createRatingButton = (value): JSX.Element => { value += 1; return (
  • ); }; return (
    Technologie ganz einfach

    {translations.title}

    {translations.subtitle}

    {servicePackage.name}

    {translations.bookingSuccessful}

    {translations.touch.title}

    {translations.touch.text}

    {translations.servicePerformance.title}

    {translations.servicePerformance.text}

    {translations.payment.title}

    {translations.payment.text}

    {!bookingData.serviceDetailsData.isFlexibleCheckbox && (
    {translations.appointment} {new Intl.DateTimeFormat(isUk ? 'en-UK' : locale, { weekday: 'short', month: 'long', day: '2-digit', hour: '2-digit', minute: '2-digit', }).format(bookingData.serviceDetailsData.date)}
    )}
    {isSubmitted ? (

    {translations.feedback.success}

    ) : ( <>

    {translations.feedback.title}

    {translations.feedback.text} {translations.feedback.rating}
      {Array(10) .fill(1) .map((el, i) => createRatingButton(i))}
    {rating > 0 && (