{"version":3,"file":"js/9296-591a5d8375b0c3a62ab0.js","mappings":"6hBACA,QAAgB,MACdA,OADc,IAEXC,EAAK,cACJ,qCAAKC,MAAM,6BAA6BC,QAAQ,aAAgBF,GAAO,wBAAMG,EAAE,mRAAyR,C,scCH9W,QAAgB,MACdJ,OADc,IAEXC,EAAK,cACJ,qCAAKC,MAAM,6BAA6BC,QAAQ,aAAgBF,GAAO,wBAAMG,EAAE,ipCAAupC,C,scCH5uC,QAAgB,MACdJ,OADc,IAEXC,EAAK,cACJ,qCAAKC,MAAM,6BAA6BC,QAAQ,aAAgBF,GAAO,wBAAMG,EAAE,6uFAAmvF,C,wECAx0F,MAAMC,EAAgB,CAACC,EAAMC,KAAeC,EAAAA,EAAAA,GAAOF,EAAMC,EAAY,CAAEE,OAAQC,EAAAA,IAoBlEC,EAAkB,CAC7BN,gBACAO,iBApBuB,CAACN,EAAMO,EAAUN,KAAeC,EAAAA,EAAAA,IACvDM,EAAAA,EAAAA,gBACE,IAAIC,KAAKT,GAAOO,GACfN,EAAY,CAAEE,OAAQC,EAAAA,IAkBzBM,cAfoB,CAACC,EAAgBC,EAAM,eAAiBb,EAAc,IAAIU,KAAKE,GAAiBC,GAgBpGC,oBAd0B,KAC1B,MAAMC,EAAQ,IAAIL,KAClB,OAAOK,EAAMC,SAASD,EAAME,WAAa,GAAG,EAa5CC,qBAV2B,KAC3B,MAAMH,EAAQ,IAAIL,KAClB,OAAOK,EAAMC,SAASD,EAAME,WAAa,EAAE,E,uuCCR7C,MAAME,EAAoBC,EAAAA,GAAOC,IAAG,wEAAVD,CAAU,uFAMhCE,EAAAA,GAAMC,MAAO;;;;KAOXC,EAAYJ,EAAAA,GAAOC,IAAG,gEAAVD,CAAU,kPAEvBxB,GAA+B,SAApBA,EAAM6B,UAAuB,eAAiB,iBAC1DH,EAAAA,GAAMC,MAAO;MACV3B,GAA+B,SAApBA,EAAM6B,UAAuB,WAAa;;KAgBvD7B,GAAUA,EAAM8B,cACb,6BAKFC,EAAQP,EAAAA,GAAOQ,IAAG,4DAAVR,CAAU,6BAKlBS,EAAkBT,EAAAA,GAAOC,IAAG,sEAAVD,CAAU,yCAK5BU,EAASV,EAAAA,GAAOC,IAAG,6DAAVD,CAAU,8FACVxB,GAAUA,EAAMmC,WAG3BT,EAAAA,GAAMC,MAAO;;;;;KAQXS,EAAOZ,EAAAA,GAAOC,IAAG,2DAAVD,CAAU,wMAUXxB,GAAWA,EAAMqC,OAAS,UAAYC,EAAAA,KAC7CtC,GAAUA,EAAMqC,OACd,mDAEiBC,EAAAA,0BACJA,EAAAA,UAEb,wCAEeA,EAAAA,4CAKlBZ,EAAAA,GAAMC,MAAO;;KAKXY,EAAaf,EAAAA,GAAOC,IAAG,iEAAVD,CAAU,qLAOlBgB,EAAAA,IAMP,EAAGC,gBAAkBA,EAAa,qBAAuB,KACzD,EAAGA,gBAAkBA,EAAa,4BAA8B,IAChEf,EAAAA,GAAMC,MAAO;;;;;;;;;;;;KAeXe,EAAsBlB,EAAAA,GAAOC,IAAG,0EAAVD,CAAU,mEAMhCmB,EAAmBnB,EAAAA,GAAOC,IAAG,uEAAVD,CAAU,oDAqB7BoB,EAAiB5C,IACrB,MACE6C,EAYE7C,EAZF6C,eACAC,EAWE9C,EAXF8C,iBACAC,EAUE/C,EAVF+C,gBACAC,EASEhD,EATFgD,kBACAC,EAQEjD,EARFiD,MACAC,EAOElD,EAPFkD,YACAC,EAMEnD,EANFmD,aACAC,EAKEpD,EALFoD,UAAU,EAKRpD,EAJFmC,UAAAA,OAAS,MAAG,EAAC,EACbkB,EAGErD,EAHFqD,aACAC,EAEEtD,EAFFsD,UACAC,EACEvD,EADFuD,cAGoD,KAAdC,EAAAA,EAAAA,UAAS,MAAK,GAA/CC,EAAY,KAAEC,EAAe,KAgB9BC,EAAaC,OAAOC,QAAQZ,GAAOa,MACvCR,EAAYC,GACXD,EAAY,GAAKC,IAGpBQ,EAAAA,EAAAA,YAAU,KACHN,GAAiBO,IAAQL,IAC5BD,EAAgBC,EAAW,GAAG,GAAG,GACnC,GACC,CAACA,IAYJ,OACE,gBAACpC,EAAiB,KACfyC,IAAQL,GACP,gBAACM,EAAA,EAAS,CAACC,KAAMd,IAEjB,gBAACT,EAAgB,KACf,gBAACD,EAAmB,KAClB,gBAACd,EAAS,CACRC,UAAU,OACVsC,QAde,KACzBT,EAAgB,MAChBb,GAAgB,EAaNf,aAAcgB,GAEd,gBAACf,EAAK,CAACqC,IAAKC,EAAAA,QAAYC,IAAI,sBAE7BX,EAAWY,KAAI,EAAElE,EAAMmE,GAASC,IAC/B,uBAAKC,IAAM,iBAAgBD,KAASpE,KACjCsE,IAAMH,IAnDKI,KACxB,MAAMC,EAAgB,IAAI/D,KAAK8D,EAAKE,YAC5B1E,EAAkBM,EAAAA,EAAlBN,cACF2E,EAAuBtB,GACxB,IAAI3C,KAAK2C,EAAaqB,YAAYE,gBAAkBH,EAAcG,cAEvE,OACE,gBAACzC,EAAU,CAACE,WAAYsC,EAAsBZ,QAAS,IAAMT,EAAgBkB,IAC3E,2BAAMxE,EAAcyE,EAAe,SACnC,2BAAMzE,EAAcyE,EAAe,WACxB,EAyCeI,CAAiBN,IAAMH,OAG7C,gBAAC5C,EAAS,CACRC,UAAU,QACVsC,QA/BgB,KAC1BT,EAAgB,MAChBX,GAAiB,EA8BPjB,aAAckB,GAEd,gBAACjB,EAAK,CAACqC,IAAKc,EAAAA,QAAaZ,IAAI,uBAIjC,gCACGX,EAAWY,KAAI,EAAElE,EAAMmE,GAASC,KAC/B,MAAMU,EAAK,IAAIrE,KAAKT,GACd+E,EAAK3B,GAAgB,IAAI3C,KAAK2C,EAAaqB,YAKjD,OAJmBrB,GACd0B,EAAGE,gBAAkBD,EAAGC,eACxBF,EAAG9D,aAAe+D,EAAG/D,YACrB8D,EAAGG,YAAcF,EAAGE,UAGvB,gBAACrD,EAAe,CAACyC,IAAM,iBAAgBD,KACrC,gBAACvC,EAAM,CAACC,UAAWA,GAChBqC,EAAOD,KAAI,CAACK,EAAMW,IACjB,gBAACnD,EAAI,CACHsC,IAAM,eAAca,IACpBpB,QAAS,IAAMjB,EAAY0B,GAC3BvC,OACEgB,GAAcyB,YACX,IAAIhE,KAAKuC,EAAayB,YAAYE,gBAC/B,IAAIlE,KAAK8D,EAAKE,YAAYE,eAGjCtE,EAAAA,EAAgBC,iBACf,IAAIG,KAAK8D,EAAKE,YACd3B,EACA,cAjBY,IAsBJ,MAMV,EC1QlBqC,EAAQhE,EAAAA,GAAOC,IAAG,4DAAVD,CAAU,kHACPiE,EAAAA,GAKNjD,EAAAA,IAILkD,EAAelE,EAAAA,GAAOC,IAAG,mEAAVD,CAAU,kEAOzBmE,EAAYnE,EAAAA,GAAOC,IAAG,gEAAVD,CAAU,kDAEvBxB,GAAWA,EAAM4F,gBAAkB,0BAA4B,wBAElD5F,GAAWA,EAAM6F,MAAQ,IAAM,SAG3CC,GAAYtE,EAAAA,EAAAA,IAAOuE,EAAAA,SAAM,gEAAbvE,CAAa,kFAS/B,MAAMwE,UAAwBC,EAAAA,UAC5BC,oBACEC,KAAK,QAAS,mCAAoC,CAChDC,eAAgB,mBAChBC,YAAa,mBAEjB,CAEAC,SACE,MAAM,EAgBFC,KAAKvG,MAfPiD,EAAK,EAALA,MACAC,EAAW,EAAXA,YACAL,EAAc,EAAdA,eACAE,EAAe,EAAfA,gBACAD,EAAgB,EAAhBA,iBACAE,EAAiB,EAAjBA,kBACAwD,EAAY,EAAZA,aACArD,EAAY,EAAZA,aAAa,EAAD,EACZ0C,MAAAA,OAAK,MAAG,GAAE,EACVY,EAAe,EAAfA,gBAAgB,EAAD,EACfC,cAAAA,OAAa,MAAG,QAAO,EACvBC,EAAoB,EAApBA,qBACAC,EAAO,EAAPA,QACAtD,EAAS,EAATA,UACAC,EAAa,EAAbA,cAGIsD,EAAWC,OAAOC,WAAa,IAErC,OACE,gBAACpB,EAAS,CAACE,MAAOA,EAAOD,gBAAmC,QAAlBc,GACxC,2BACE,gBAAClB,EAAK,KAAEK,GACPc,GAAwB,gBAACb,EAAS,CAACkB,KAAK,UAAU7C,QAASyC,KAE7DH,GAAmBI,EAClB,gBAACjE,EAAa,CACZC,eAAgBA,EAChBC,iBAAkBA,EAClBC,gBAAiBA,EACjBC,mBAAiB,EACjBC,MAAOA,EACPC,YAAaA,EACbC,aAAcA,EACdC,UAAU,iEACVE,UAAWA,EACXC,cAAeA,IAGjB,gBAAC0D,EAAA,EAAK,CACJpE,eAAgBA,EAChBC,iBAAkBA,EAClBC,gBAAiBA,EACjBC,kBAAmBA,EACnBC,MAAOA,EACPC,YAAaA,EACbC,aAAcA,EACdC,UAAU,mEAGboD,GAAgB,gBAACd,EAAY,KAAEc,GAGtC,EAcFR,EAAgBkB,aAAe,CAC7BjE,MAAO,CAAC,EACRC,YAAa,OACbL,eAAgB,OAChBC,kBAAkB,EAClBC,gBAAiB,OACjBC,mBAAmB,EACnBwD,aAAc,GACdrD,aAAcgE,EAAAA,GAGhB,S,qMCrHA,MAAM5F,EAAoBC,EAAAA,GAAOC,IAAG,wEAAVD,CAAU,yDAKhCE,EAAAA,GAAMC,MAAO;;;KAMXC,EAAYJ,EAAAA,GAAOC,IAAG,gEAAVD,CAAU,mQAGvBxB,GAA+B,SAApBA,EAAM6B,UAAuB,eAAiB,iBAC1DH,EAAAA,GAAMC,MAAO;MACV3B,GAA+B,SAApBA,EAAM6B,UAAuB,WAAa;;KAgBvD7B,GAAUA,EAAM8B,cACb,6BAKFC,EAAQP,EAAAA,GAAOQ,IAAG,4DAAVR,CAAU,6BAKlBS,EAAkBT,EAAAA,GAAOC,IAAG,sEAAVD,CAAU,yCAK5BU,EAASV,EAAAA,GAAOC,IAAG,6DAAVD,CAAU,wBACVxB,GAAUA,EAAMmC,WAC3BT,EAAAA,GAAMC,MAAO;;;;;KAQXS,EAAOZ,EAAAA,GAAOC,IAAG,2DAAVD,CAAU,wMAUXxB,GAAWA,EAAMqC,OAAS,UAAYC,EAAAA,KAC7CtC,GAAUA,EAAMqC,OACd,mDAEiBC,EAAAA,0BACJA,EAAAA,UAEb,wCAEeA,EAAAA,4CAKlBZ,EAAAA,GAAMC,MAAO;;KAKXY,EAAaf,EAAAA,GAAOC,IAAG,iEAAVD,CAAU,2GAKlBgB,EAAAA,GAEPd,EAAAA,GAAMC,MAAO;;;;;;;;;;;KAcXsF,EAASjH,IACb,MACE6C,EAUE7C,EAVF6C,eACAC,EASE9C,EATF8C,iBACAC,EAQE/C,EARF+C,gBACAC,EAOEhD,EAPFgD,kBACAC,EAMEjD,EANFiD,MACAC,EAKElD,EALFkD,YACAC,EAIEnD,EAJFmD,aACAC,EAGEpD,EAHFoD,UACAjB,EAEEnC,EAFFmC,UACAkB,EACErD,EADFqD,aAeF,OACE,gBAAC9B,EAAiB,KAChB,gBAACK,EAAS,CAACC,UAAU,OAAOsC,QAAStB,EAAgBf,aAAcgB,GACjE,gBAACf,EAAK,CAACqC,IAAKC,EAAAA,QAAYC,IAAI,sBAE9B,gBAAC1C,EAAS,CAACC,UAAU,QAAQsC,QAASpB,EAAiBjB,aAAckB,GACnE,gBAACjB,EAAK,CAACqC,IAAKc,EAAAA,QAAaZ,IAAI,sBAE9BN,IAAQf,GACP,gBAAC,IAAS,CAACiB,KAAMd,IAEjBmB,IAAItB,GAAO,CAACuB,EAAQC,IAClB,gBAACxC,EAAe,CAACyC,IAAM,iBAAgBD,KACpCE,IAAMH,IAzBSI,KACxB,MAAMC,EAAgB,IAAI/D,KAAK8D,EAAKE,YAC5B1E,EAAkBM,EAAAA,EAAlBN,cAER,OACE,gBAACmC,EAAU,KACT,2BAAMnC,EAAcyE,EAAe,SACnC,2BAAMzE,EAAcyE,EAAe,WACxB,EAiBWI,CAAiBN,IAAMH,IACzC,gBAACtC,EAAM,CAACC,UAAWA,GAChBoC,IAAIC,GAAQ,CAACI,EAAMW,IAClB,gBAACnD,EAAI,CACHsC,IAAM,eAAca,IACpBpB,QAAS,IAAMjB,EAAY0B,GAC3BvC,OACEgB,GAAcyB,YACX,IAAIhE,KAAKuC,EAAayB,YAAYE,gBAC/B,IAAIlE,KAAK8D,EAAKE,YAAYE,eAGjCtE,EAAAA,EAAgBC,iBACf,IAAIG,KAAK8D,EAAKE,YACd3B,EACA,gBAQI,EAiBxB8D,EAAMC,aAAe,CACnBjE,MAAO,CAAC,EACRC,YAAa,OACbL,eAAgB,OAChBC,kBAAkB,EAClBC,gBAAiB,OACjBC,mBAAmB,EACnBG,aAAcgE,EAAAA,EACd/D,UAAW,GACXjB,UAAW,GACXkB,aAAc,CAAC,E,kDChNjB,MAAM+D,E,QAAqB5F,GAAOC,IAAG,wEAAVD,CAAU,qJAYtB,MAAMyC,UAAkBgC,EAAAA,UACrCK,SACE,MAAQpC,EAASqC,KAAKvG,MAAdkE,KAER,OAAO,gBAACkD,EAAkB,KAAElD,EAC9B,EAOFD,EAAUiD,aAAe,CACvBhD,KAAM,CAAC,E,qDC7BF,MAAMmD,EAAe,CAC1BC,IAAK,MACLC,IAAK,OAGMC,EAAqB,CAChC,CAACH,EAAaC,KAAM,CAClBG,KAAMJ,EAAaC,IACnBI,MAAO,iBACPC,SAAU,KAEZ,CAACN,EAAaE,KAAM,CAClBE,KAAMJ,EAAaE,IACnBG,MAAO,cACPC,SAAU,MAIDC,EAA4B,CACvC,CACEC,GAAI,CAACR,EAAaC,KAClBQ,KAAO,iBAAgBT,EAAaC,QAEtC,CACEO,GAAI,CAACR,EAAaE,KAClBO,KAAO,cAAaT,EAAaE,Q,gDCzBrC,QAAe,IAA0B,sC,gDCAzC,QAAe,IAA0B,sC","sources":["webpack:///./app/javascript/espace-pro-app/espace-pro-images/icon-close.inline.svg","webpack:///./app/javascript/main-app/images/icon-car.inline.svg","webpack:///./app/javascript/main-app/images/icon-moto.inline.svg","webpack:///./app/javascript/_shared/services/DateTimeService.js","webpack:///./app/javascript/main-app/components/calendar/SeparateSlots.tsx","webpack:///./app/javascript/main-app/components/calendar/BookingCalendar.jsx","webpack:///./app/javascript/main-app/components/calendar/Slots.jsx","webpack:///./app/javascript/main-app/components/empty/EmptyText.js","webpack:///./app/javascript/main-app/constants/LicenseTypes.js","webpack:///./app/javascript/main-app/images/arrow-left.svg","webpack:///./app/javascript/main-app/images/arrow-right.svg"],"sourcesContent":["import React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => );","import React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => );","import React from \"react\";\nexport default (({\n styles = {},\n ...props\n}) => );","import { format } from 'date-fns';\nimport fr from 'date-fns/locale/fr';\nimport { utcToZonedTime } from 'date-fns-tz';\n\nconst setDateLocale = (date, dateFormat) => format(date, dateFormat, { locale: fr });\n\nconst formatInTimeZone = (date, timeZone, dateFormat) => format(\n utcToZonedTime(\n new Date(date), timeZone,\n ), dateFormat, { locale: fr },\n);\n\nconst formattedDate = (dateWithDashes, fmt = 'd MMM yyyy') => setDateLocale(new Date(dateWithDashes), fmt);\n\nconst generateYearAgoDate = () => {\n const today = new Date();\n return today.setMonth(today.getMonth() - 12);\n};\n\nconst generateMonthAgoDate = () => {\n const today = new Date();\n return today.setMonth(today.getMonth() - 1);\n};\n\nexport const DateTimeService = {\n setDateLocale,\n formatInTimeZone,\n formattedDate,\n generateYearAgoDate,\n generateMonthAgoDate,\n};\n","import React, { useEffect, useState } from 'react';\nimport first from 'lodash/first';\nimport styled from 'styled-components';\n\nimport isEmpty from 'lodash/isEmpty';\nimport { DateTimeService } from '@shared/services/DateTimeService';\nimport { SlotType } from '@shared/types/SlotType';\nimport arrow_left from '../../images/arrow-left.svg';\nimport arrow_right from '../../images/arrow-right.svg';\nimport EmptyText from '../empty/EmptyText';\nimport media from '../../utils/mediaQueries';\nimport { LINKS_COLOR, TEXT_COLOR } from '../../theme';\n\nconst CalendarContainer = styled.div`\n position: relative;\n display: flex;\n align-items: center;\n margin: 0 -4px 5px;\n width: 100%;\n ${media.mobile`\n margin: 0 -9px;\n flex-direction: column;\n width: calc(100% + 18px);\n `}\n`;\n\nconst NavButton = styled.div`\n top: 15px;\n ${(props) => (props.direction === 'left' ? 'left: -24px;' : 'right: -24px;')}\n ${media.mobile`\n ${(props) => (props.direction === 'left' ? 'left: 0;' : 'right: 0;')}\n top: 20px;\n `}\n width: 24px;\n height: 24px;\n border-radius: 50%;\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n background-color: #597cbd;\n display: none;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n transition: all 0.2s;\n &:hover {\n opacity: 0.8;\n }\n ${(props) => props.isNavVisible\n && `\n display: flex;\n `}\n`;\n\nconst Image = styled.img`\n width: 16px;\n height: 16px;\n`;\n\nconst ColumnContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Column = styled.div`\n margin: 0 ${(props) => props.columnGap}px;\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));\n ${media.mobile`\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));\n gap: 3px 6px;\n margin: 8px 0 0;\n `}\n`;\n\nconst Slot = styled.div`\n margin-bottom: 10px;\n padding: 10px 0;\n width: 64px;\n border-radius: 6px;\n border: solid 1px #a6c8f0;\n font-size: 14px;\n text-align: center;\n cursor: pointer;\n letter-spacing: -0.2px;\n color: ${(props) => (props.active ? '#ffffff' : LINKS_COLOR)};\n ${(props) => props.active\n ? `\n font-weight: bold;\n background-color: ${LINKS_COLOR};\n border-color: ${LINKS_COLOR};\n `\n : `\n &:hover {\n border-color: ${LINKS_COLOR};\n font-weight: bold;\n }\n `}\n transition: all .2s;\n ${media.mobile`\n width: auto;\n `}\n`;\n\nconst SlotHeader = styled.div<{\n isSelected?: boolean;\n}>`\n font-size: 14px;\n line-height: 1.29;\n letter-spacing: 0.1px;\n text-align: center;\n color: ${TEXT_COLOR};\n margin-bottom: 8px;\n cursor: pointer;\n padding: 10px 8px;\n border-radius: 12px;\n min-width: 70px;\n ${({ isSelected }) => (isSelected ? 'font-weight: bold;' : '')};\n ${({ isSelected }) => (isSelected ? 'background-color: #f4f7f9' : '')};\n ${media.mobile`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n font-size: 16px;\n flex-direction: column;\n line-height: 1.5;\n letter-spacing: 0.2px;\n > div:first-child {\n margin-right: 4px;\n }\n `}\n`;\n\nconst SlotHeaderContainer = styled.div`\n display: flex;\n justify-content: space-around;\n align-items: center;\n`;\n\nconst ContentContainer = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n`;\n\ntype SeparateSlotsProps = {\n onClickNavLeft: () => void;\n isLeftNavVisible: boolean;\n onClickNavRight: () => void;\n isRightNavVisible: boolean;\n slots: any[];\n onSlotClick: (slot: SlotType) => void;\n timeZoneName: string;\n emptyText: string;\n columnGap: number;\n selectedSlot: any;\n localPage: number;\n maxLocalPages: number;\n};\n\nconst SeparateSlots = (props: SeparateSlotsProps) => {\n const {\n onClickNavLeft,\n isLeftNavVisible,\n onClickNavRight,\n isRightNavVisible,\n slots,\n onSlotClick,\n timeZoneName,\n emptyText,\n columnGap = 8,\n selectedSlot,\n localPage,\n maxLocalPages,\n } = props;\n\n const [selectedDate, setSelectedDate] = useState(null);\n\n const renderSlotHeader = (slot) => {\n const slotStartDate = new Date(slot.start_date);\n const { setDateLocale } = DateTimeService;\n const isSlotHeaderSelected = selectedDate\n && new Date(selectedDate.start_date).toISOString() === slotStartDate.toISOString();\n\n return (\n setSelectedDate(slot)}>\n
{setDateLocale(slotStartDate, 'EEEE')}
\n
{setDateLocale(slotStartDate, 'dd MMM')}
\n
\n );\n };\n\n const slotsArray = Object.entries(slots).slice(\n localPage * maxLocalPages,\n (localPage + 1) * maxLocalPages,\n );\n\n useEffect(() => {\n if (!selectedDate && !isEmpty(slotsArray)) {\n setSelectedDate(slotsArray[0][1][0]); // select first available slot\n }\n }, [slotsArray]);\n\n const handleRightNavClick = () => {\n setSelectedDate(null);\n onClickNavRight();\n };\n\n const handleLeftNavClick = () => {\n setSelectedDate(null);\n onClickNavLeft();\n };\n\n return (\n \n {isEmpty(slotsArray) ? (\n \n ) : (\n \n \n \n \"flèche\n \n {slotsArray.map(([date, column], index) => (\n
\n {first(column) && renderSlotHeader(first(column))}\n
\n ))}\n \n \"flèche\n \n
\n\n <>\n {slotsArray.map(([date, column], index) => {\n const d1 = new Date(date);\n const d2 = selectedDate && new Date(selectedDate.start_date);\n const isSameDate = selectedDate\n && d1.getFullYear() === d2.getFullYear()\n && d1.getMonth() === d2.getMonth()\n && d1.getDate() === d2.getDate();\n if (!isSameDate) return null;\n return (\n \n \n {column.map((slot, yindex) => (\n onSlotClick(slot)}\n active={\n selectedSlot?.start_date\n && new Date(selectedSlot.start_date).toISOString()\n === new Date(slot.start_date).toISOString()\n }\n >\n {DateTimeService.formatInTimeZone(\n new Date(slot.start_date),\n timeZoneName,\n 'HH:mm',\n )}\n \n ))}\n \n \n );\n })}\n \n
\n )}\n
\n );\n};\n\nexport { SeparateSlots };\n","/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { DEFAULT_TIME_ZONE_NAME } from '@shared/constants';\nimport Close from '@espaceProImages/icon-close.inline.svg';\nimport { FONT_FAMILY_MAIN, TEXT_COLOR } from '../../theme';\nimport { Slots } from './Slots';\nimport { SeparateSlots } from './SeparateSlots';\n\nconst Title = styled.div`\n font-family: ${FONT_FAMILY_MAIN};\n font-size: 16px;\n font-weight: bold;\n line-height: 1.5;\n letter-spacing: 0.2px;\n color: ${TEXT_COLOR};\n margin: 16px 0;\n`;\n\nconst ErrorMessage = styled.div`\n font-size: 12px;\n height: 20px;\n margin: 0 40px 10px;\n color: #f74656;\n`;\n\nconst Container = styled.div`\n display: flex;\n ${(props) => (props.isTitleAtTheTop ? 'flex-direction: column;' : 'flex-direction: row')}\n width: 100%;\n padding-top: ${(props) => (props.title ? '0' : '16px')};\n`;\n\nconst CloseIcon = styled(Close)`\n position: absolute;\n top: 16px;\n right: 16px;\n width: 24px;\n height: 24px;\n cursor: pointer;\n`;\n\nclass BookingCalendar extends Component {\n componentDidMount() {\n gtag('event', 'old-booking-form-slots-step-view', {\n event_category: 'Code de la route',\n event_label: 'Form slots step',\n });\n }\n\n render() {\n const {\n slots,\n onSlotClick,\n onClickNavLeft,\n onClickNavRight,\n isLeftNavVisible,\n isRightNavVisible,\n errorMessage,\n timeZoneName,\n title = '',\n isSeparateSlots,\n titlePosition = 'aside',\n isCloseButtonVisible,\n onClose,\n localPage,\n maxLocalPages,\n } = this.props;\n\n const isMobile = window.innerWidth < 576;\n\n return (\n \n
\n {title}\n {isCloseButtonVisible && }\n
\n {isSeparateSlots || isMobile ? (\n \n ) : (\n \n )}\n {errorMessage && {errorMessage}}\n
\n );\n }\n}\n\nBookingCalendar.propTypes = {\n slots: PropTypes.object,\n onSlotClick: PropTypes.func,\n onClickNavLeft: PropTypes.func,\n isLeftNavVisible: PropTypes.bool,\n onClickNavRight: PropTypes.func,\n isRightNavVisible: PropTypes.bool,\n errorMessage: PropTypes.string,\n timeZoneName: PropTypes.string,\n};\n\nBookingCalendar.defaultProps = {\n slots: {},\n onSlotClick: () => {},\n onClickNavLeft: () => {},\n isLeftNavVisible: true,\n onClickNavRight: () => {},\n isRightNavVisible: true,\n errorMessage: '',\n timeZoneName: DEFAULT_TIME_ZONE_NAME,\n};\n\nexport default BookingCalendar;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport map from 'lodash/map';\nimport first from 'lodash/first';\nimport styled from 'styled-components';\n\nimport isEmpty from 'lodash/isEmpty';\nimport { DateTimeService } from '@shared/services/DateTimeService';\nimport { DEFAULT_TIME_ZONE_NAME } from '@shared/constants';\nimport arrow_left from '../../images/arrow-left.svg';\nimport arrow_right from '../../images/arrow-right.svg';\nimport EmptyText from '../empty/EmptyText';\nimport media from '../../utils/mediaQueries';\nimport { LINKS_COLOR, TEXT_COLOR } from '../../theme';\n\nconst CalendarContainer = styled.div`\n position: relative;\n display: flex;\n //To overcome columns margin: 0 16px and made 12px margin\n margin: 0 -4px 5px;\n ${media.mobile`\n margin: 0 -9px;\n flex-direction: column;\n `}\n`;\n\nconst NavButton = styled.div`\n position: absolute;\n top: 6px;\n ${(props) => (props.direction === 'left' ? 'left: -24px;' : 'right: -24px;')}\n ${media.mobile`\n ${(props) => (props.direction === 'left' ? 'left: 0;' : 'right: 0;')}\n top: 0;\n `}\n width: 24px;\n height: 24px;\n border-radius: 50%;\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n background-color: #597cbd;\n display: none;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n transition: all 0.2s;\n &:hover {\n opacity: 0.8;\n }\n ${(props) => props.isNavVisible\n && `\n display: flex;\n `}\n`;\n\nconst Image = styled.img`\n width: 16px;\n height: 16px;\n`;\n\nconst ColumnContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst Column = styled.div`\n margin: 0 ${(props) => props.columnGap}px;\n ${media.mobile`\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(64px, 1fr));\n gap: 3px 6px;\n margin: 8px 0 0;\n `}\n`;\n\nconst Slot = styled.div`\n margin-bottom: 10px;\n padding: 10px 0;\n width: 64px;\n border-radius: 6px;\n border: solid 1px #a6c8f0;\n font-size: 14px;\n text-align: center;\n cursor: pointer;\n letter-spacing: -0.2px;\n color: ${(props) => (props.active ? '#ffffff' : LINKS_COLOR)};\n ${(props) => props.active\n ? `\n font-weight: bold;\n background-color: ${LINKS_COLOR};\n border-color: ${LINKS_COLOR};\n `\n : `\n &:hover {\n border-color: ${LINKS_COLOR};\n font-weight: bold;\n }\n `}\n transition: all .2s;\n ${media.mobile`\n width: auto;\n `}\n`;\n\nconst SlotHeader = styled.div`\n font-size: 14px;\n line-height: 1.29;\n letter-spacing: 0.1px;\n text-align: center;\n color: ${TEXT_COLOR};\n margin-bottom: 8px;\n ${media.mobile`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n font-size: 16px;\n line-height: 1.5;\n letter-spacing: 0.2px;\n > div:first-child {\n margin-right: 4px;\n }\n `}\n`;\n\nconst Slots = (props) => {\n const {\n onClickNavLeft,\n isLeftNavVisible,\n onClickNavRight,\n isRightNavVisible,\n slots,\n onSlotClick,\n timeZoneName,\n emptyText,\n columnGap,\n selectedSlot,\n } = props;\n\n const renderSlotHeader = (slot) => {\n const slotStartDate = new Date(slot.start_date);\n const { setDateLocale } = DateTimeService;\n\n return (\n \n
{setDateLocale(slotStartDate, 'EEEE')}
\n
{setDateLocale(slotStartDate, 'dd MMM')}
\n
\n );\n };\n\n return (\n \n \n \"flèche\n \n \n \"flèche\n \n {isEmpty(slots) ? (\n \n ) : (\n map(slots, (column, index) => (\n \n {first(column) && renderSlotHeader(first(column))}\n \n {map(column, (slot, yindex) => (\n onSlotClick(slot)}\n active={\n selectedSlot?.start_date\n && new Date(selectedSlot.start_date).toISOString()\n === new Date(slot.start_date).toISOString()\n }\n >\n {DateTimeService.formatInTimeZone(\n new Date(slot.start_date),\n timeZoneName,\n 'HH:mm',\n )}\n \n ))}\n \n \n ))\n )}\n \n );\n};\n\nSlots.propTypes = {\n slots: PropTypes.object,\n onSlotClick: PropTypes.func,\n onClickNavLeft: PropTypes.func,\n isLeftNavVisible: PropTypes.bool,\n onClickNavRight: PropTypes.func,\n isRightNavVisible: PropTypes.bool,\n timeZoneName: PropTypes.string,\n emptyText: PropTypes.string,\n columnGap: PropTypes.number,\n selectedSlot: PropTypes.object,\n};\n\nSlots.defaultProps = {\n slots: {},\n onSlotClick: () => {},\n onClickNavLeft: () => {},\n isLeftNavVisible: true,\n onClickNavRight: () => {},\n isRightNavVisible: true,\n timeZoneName: DEFAULT_TIME_ZONE_NAME,\n emptyText: '',\n columnGap: 16,\n selectedSlot: {},\n};\n\nexport { Slots };\n","import React, { Component } from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nconst EmptyTextContainer = styled.div`\n width: 100%;\n height: 296px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 13px;\n text-align: center;\n line-height: 1.22;\n color: #354354;\n`;\n\nexport default class EmptyText extends Component {\n render() {\n const { text } = this.props;\n\n return {text};\n }\n}\n\nEmptyText.propTypes = {\n text: PropTypes.string,\n};\n\nEmptyText.defaultProps = {\n text: {},\n};\n","export const LicenseTypes = {\n ETG: 'ETG',\n ETM: 'ETM',\n};\n\nexport const LICENSE_TYPES_DATA = {\n [LicenseTypes.ETG]: {\n abbr: LicenseTypes.ETG,\n descr: 'Permis voiture',\n category: 'B',\n },\n [LicenseTypes.ETM]: {\n abbr: LicenseTypes.ETM,\n descr: 'Permis moto',\n category: 'A',\n },\n};\n\nexport const LICENSE_TYPES_SELECT_DATA = [\n {\n id: [LicenseTypes.ETG],\n name: `Code voiture (${LicenseTypes.ETG})`,\n },\n {\n id: [LicenseTypes.ETM],\n name: `Code moto (${LicenseTypes.ETM})`,\n },\n];\n","export default __webpack_public_path__ + \"51ac49044a69943cae37653430ed180b.svg\";","export default __webpack_public_path__ + \"e8a16518daef6e13f7f666000759cca6.svg\";"],"names":["styles","props","xmlns","viewBox","d","setDateLocale","date","dateFormat","format","locale","fr","DateTimeService","formatInTimeZone","timeZone","utcToZonedTime","Date","formattedDate","dateWithDashes","fmt","generateYearAgoDate","today","setMonth","getMonth","generateMonthAgoDate","CalendarContainer","styled","div","media","mobile","NavButton","direction","isNavVisible","Image","img","ColumnContainer","Column","columnGap","Slot","active","LINKS_COLOR","SlotHeader","TEXT_COLOR","isSelected","SlotHeaderContainer","ContentContainer","SeparateSlots","onClickNavLeft","isLeftNavVisible","onClickNavRight","isRightNavVisible","slots","onSlotClick","timeZoneName","emptyText","selectedSlot","localPage","maxLocalPages","useState","selectedDate","setSelectedDate","slotsArray","Object","entries","slice","useEffect","isEmpty","EmptyText","text","onClick","src","arrow_left","alt","map","column","index","key","first","slot","slotStartDate","start_date","isSlotHeaderSelected","toISOString","renderSlotHeader","arrow_right","d1","d2","getFullYear","getDate","yindex","Title","FONT_FAMILY_MAIN","ErrorMessage","Container","isTitleAtTheTop","title","CloseIcon","Close","BookingCalendar","Component","componentDidMount","gtag","event_category","event_label","render","this","errorMessage","isSeparateSlots","titlePosition","isCloseButtonVisible","onClose","isMobile","window","innerWidth","fill","Slots","defaultProps","DEFAULT_TIME_ZONE_NAME","EmptyTextContainer","LicenseTypes","ETG","ETM","LICENSE_TYPES_DATA","abbr","descr","category","LICENSE_TYPES_SELECT_DATA","id","name"],"sourceRoot":""}