{"version":3,"sources":["images/azul-logo-color@2x.png","images/logo-tudoazul-white@2x.png","styles/colors.js","components/Icon/index.js","components/Header/index.js","components/Layout.js","styles/breakpoints.js","components/Title.js","components/Button.js","components/AirportNameAndFlightTime.js","components/FlightNameAndType.js","components/FlightCheckbox.js","components/LoadMask.js","utils/obj-to-params.js","utils/extract-json.js","services/index.js","flows/flight-change/FlightChangeForm.js","components/Backdrop.js","components/Modal.js","utils/use-outside-click.js","flows/flight-change/index.js","components/Alert.js","consts/FLIGHT_STATUS.js","components/FlightSummary/FlightSchedule.js","components/MediaQuery.js","components/FlightSummary/index.js","flows/flight-confirmation/index.js","flows/flight-introduction/index.js","flows/logged/index.js","components/Label.js","components/ValidationError.js","components/InputField.js","consts/MOCK_DATA.js","flows/search-reservation/SearchReservationForm.js","components/Flex.js","flows/search-reservation/index.js","App.js","serviceWorker.js","index.js","images/canceled-flight.svg"],"names":["module","exports","colors","BRAND_PRIMARY","BRAND_SECONDARY","BRAND_SECONDARY_40","BRAND_LIGHT","BRAND_LIGHTER","BRAND_LIGHTER_20","BRAND_LIGHTEST","WARNING","SUCCESS","DANGER","INFO","GRAY_DARKEST","GRAY_DARKER","GRAY_DARK","GRAY","GRAY_LIGHT","GRAY_LIGHTER","GRAY_LIGHTEST","WHITE_SMOKE","WHITE_SMOKE_LIGHT","IconContainer","styled","i","Icon","name","className","props","HeaderWrapper","header","LogoContainer","div","UserContainer","UserIcon","Header","src","logo","alt","logoTudoAzul","height","Component","LayoutContainer","Layout","children","this","breakpoints","devices","mobile","tablet","desktop","TitleWrapper","p","Title","Button","button","shadow","shadowMixin","bold","boldMixin","lighter","lighterMixin","primary","primaryMixin","secondary","secondaryMixin","gray","grayMixin","outlineLighter","outlineLighterMixin","outlinePrimary","outlinePrimaryMixin","grayText","grayTextMixin","success","successMixin","css","darken","lighten","dashed","Container","AirportName","FlightTime","AirportNameAndFlightTime","airportName","flightTime","FlightName","FlightType","FlightNameAndType","flightName","flightType","ButtonCheckBoxContainer","value","ToggleFieldContainer","DateLabel","span","CheckIcon","CheckboxContainer","FlightInfoContainer","AirportNameAndFLightTimesContainer","AirplaneIcon","rotate","keyframes","StyledBackdrop","Loading","LoadMask","objToParams","obj","Object","keys","filter","key","Array","isArray","map","encodeURIComponent","join","extractJson","response","a","async","contentType","headers","get","includes","json","BASE_URL","process","azulGet","endpoint","params","url","config","method","Headers","fetch","responseJson","azulPost","requestBody","isFormData","body","JSON","stringify","FieldContainer","ActionContainer","fadeIn","fadeInMixin","itemOrder","StyledCheckbox","enableLabelMultiline","containered","option","tabIndex","disabled","setLabelMinHeight","field","form","validationMinHeight","onChange","format","useState","isFocused","setIsFocused","toggleField","checkValue","undefined","clearForm","setFieldValue","resetForm","onClick","e","type","onKeyPress","toLowerCase","onFocus","onBlur","setFieldTouched","values","std","departureStation","arrivalStation","sta","carrierCode","flightNumber","flightInformation","Form","FlightChangeForm","_getValidations","Yup","shape","selectedFlight","required","_setIsShowingOtherFlights","setState","isShowingOtherFlights","setTimeout","showOtherFlights","_renderCheckboxList","flights","flight","index","label","placeholder","component","errorMessage","isRequired","parse","_onSubmit","onLoading","pnr","reqBody","recordLocator","selectedNewJourneySellKey","journeySellKey","data","notifications","_handlePostSuccess","_handlePostError","console","log","message","error","history","push","state","isLoading","initialValues","validationSchema","onSubmit","validateOnMount","handleSubmit","isValid","stopPropagation","preventDefault","fadeOut","isOpen","Backdrop","Wrapper","fullScreenMixin","StyledModal","dialog","open","modalSize","blueModal","SECONDARY_LIGHT_BLUE","fullScreen","Modal","dispatch","onDismiss","blueHeader","isActive","setIsActive","setTimeoutRef","useRef","elName","enableHandler","onOutsideClick","_handleBodyClick","useCallback","target","closest","useEffect","window","addEventListener","removeEventListener","useOutsideClick","clearTimeout","current","requestAnimationFrame","data-name","GrayText","Bold","AttentionIcon","ModalTextAndIconContainer","ModalActionsContainer","FlightChange","_refreshModalTimer","_refreshFlightsAndTimer","_fethFlightsSuggestionFlights","location","_handleFetchSuccess","_handleFetchError","flightSuggestion","hasNoAction","_handleLoading","status","MessageWrapper","Message","StyledIcon","Alert","CANCELLED","SUGGESTED","CONFIRMED","suggested","FlightDate","FlightSchedule","flightDate","MediaQuery","device","typeMixin","isFlightStatus","FLIGHT_STATUS","ColumnTitle","center","Information","Departure","Arrival","ArrowIconContainer","Status","AirplaneName","Content","ArrowIcon","GhostTitle","GhostWrapper","StatusHeader","StatusLabel","FlightSummary","_getFlightLabel","airplaneName","staFinalDestination","arrivalStationFinalDestination","style","flex","ReservationCodeContainer","ReservationCode","BlueText","ActionsContainer","WrapperFlex","RightColumn","LeftColumn","FlightConfirmation","_checkIn","focus","FlightChangeContainer","IllustrationContainer","Illustration","img","TextForUser","hasSuggestion","BoldText","BigBlueText","Username","FlightIntroduction","_toggleIsShowingOtherFlights","prevState","_selectFlight","user","ILUSTRACAO_VOO_CANCELADO","length","Logged","match","exact","path","render","routerProps","LabelText","meta","touched","Label","weight","ValidationErrorContainer","isVisible","ValidationErrorText","ValidationError","errorInputMixin","InputContainer","Input","input","alignCenter","InputField","fieldProps","classname","errors","inputProps","onInputRef","onPressEnter","inputRef","selectionStart","selectionEnd","ref","onKeyDown","currentSelection","event","origValue","maskedPrevValue","diffCaretPosistion","surname","SearchReservationForm","reservationCode","lastName","Box","attrs","justifyContent","alignItems","column","Text","FormWrapper","SearchReservation","canceledIllustration","App","_getPNR","href","toUpperCase","urlObj","URL","pnrParam","searchParams","isEmail","email","isLogged","_redirectHandler","pathname","isReady","basename","routeProps","to","Boolean","hostname","ReactDOM","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.94763668.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPAAAABACAYAAAAkn/rnAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQwIDc5LjE2MDQ1MSwgMjAxNy8wNS8wNi0wMTowODoyMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUM5MTNFNzYxMTQ5MTFFOUJDRDZFNEU2QThBQkExQkYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUM5MTNFNzUxMTQ5MTFFOUJDRDZFNEU2QThBQkExQkYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3MDlCQTREMkJDNUExMUU1Qjc2ODkxNjFBMjhENTJCMyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3MDlCQTREM0JDNUExMUU1Qjc2ODkxNjFBMjhENTJCMyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PrdY1WYAAAyLSURBVHja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\"","module.exports = \"data:image/png;base64,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\"","export const colors = {\r\n BRAND_PRIMARY: '#026cb6',\r\n BRAND_SECONDARY: '#041e42',\r\n BRAND_SECONDARY_40: 'rgba(4, 30, 66, 0.4)',\r\n BRAND_LIGHT: '#0093d0',\r\n BRAND_LIGHTER: '#13b5ea',\r\n BRAND_LIGHTER_20: 'rgba(19, 181, 234, 0.2)',\r\n BRAND_LIGHTEST: '#89d4e3',\r\n WARNING: '#e7b720',\r\n SUCCESS: '#398602',\r\n DANGER: '#f06172',\r\n INFO: '#6ba9da',\r\n GRAY_DARKEST: '#606060',\r\n GRAY_DARKER: '#909090',\r\n GRAY_DARK: '#808080',\r\n GRAY: '#c0c0c0',\r\n GRAY_LIGHT: '#e0e0e0',\r\n GRAY_LIGHTER: '#e6e6e6',\r\n GRAY_LIGHTEST: '#ebebeb',\r\n WHITE_SMOKE: '#f5f5f5',\r\n WHITE_SMOKE_LIGHT: '#f9f9f9'\r\n};","import React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport './styles.css';\r\n\r\nconst IconContainer = styled.i`\r\n /* use !important to prevent issues with browser extensions that change fonts */\r\n font-family: 'AzulIcons' !important;\r\n speak: none;\r\n font-style: normal;\r\n font-weight: normal;\r\n font-variant: normal;\r\n text-transform: none;\r\n line-height: 1;\r\n\r\n /* Better Font Rendering =========== */\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n`;\r\n\r\nfunction Icon({ name, className, ...props }) {\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default Icon;\r\n","import React, { Component } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { colors } from '../../styles/colors';\r\nimport Icon from '../Icon';\r\n\r\nimport logo from '../../images/azul-logo-color@2x.png';\r\nimport logoTudoAzul from '../../images/logo-tudoazul-white@2x.png';\r\n\r\nconst HeaderWrapper = styled.header`\r\n display: flex;\r\n padding: 0 8px;\r\n color: white;\r\n height: 60px;\r\n background-color: ${colors.BRAND_SECONDARY};\r\n justify-content: space-between;\r\n align-items: center;\r\n`;\r\n\r\nconst LogoContainer = styled.div`\r\n display: flex;\r\n align-items: center;\r\n\r\n & img {\r\n max-width: 105px;\r\n }\r\n`;\r\n\r\nconst UserContainer = styled.div`\r\n display: flex;\r\n width: 124px;\r\n align-items: center;\r\n justify-content: space-between;\r\n border: 1px solid ${colors.BRAND_LIGHTER};\r\n border-radius: 2px;\r\n height: 48px;\r\n padding: 6px;\r\n\r\n & img {\r\n max-width: 75px;\r\n height: auto;\r\n }\r\n`;\r\n\r\nconst UserIcon = styled(Icon)`\r\n color: ${colors.BRAND_LIGHTER};\r\n font-size: 32px;\r\n width: 30px;\r\n`;\r\n\r\nclass Header extends Component {\r\n render() {\r\n return (\r\n \r\n \r\n \"Azul\r\n \r\n \r\n \"TudoAzul\"\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Header;\r\n","import React, { Component } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport Header from './Header';\r\n\r\nconst LayoutContainer = styled.div`\r\n display: block;\r\n margin: 0 auto;\r\n width: 100%;\r\n background-color: white;\r\n`;\r\n\r\nclass Layout extends Component {\r\n render() {\r\n const { children } = this.props;\r\n return (\r\n \r\n
\r\n {children}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Layout;\r\n","export const breakpoints = {\r\n sm: 576,\r\n md: 768,\r\n lg: 992,\r\n xl: 1200\r\n};\r\n\r\nexport const devices = {\r\n mobile: `(max-width: ${breakpoints.sm - 1}px)`,\r\n tablet: `(min-width: ${breakpoints.sm}) and (max-width: ${breakpoints.xl -\r\n 1}px)`,\r\n desktop: `(min-width: ${breakpoints.xl}px)`\r\n};\r\n","import React, { Component } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { colors } from '../styles/colors';\r\nimport { devices } from '../styles/breakpoints';\r\n\r\nconst TitleWrapper = styled.p`\r\n display: flex;\r\n width: 100%;\r\n font-size: 20px;\r\n line-height: 20px;\r\n max-height: 28px;\r\n color: ${colors.BRAND_PRIMARY};\r\n margin: 0;\r\n padding-bottom: 8px;\r\n border-bottom: 1px solid ${colors.GRAY};\r\n\r\n @media ${devices.desktop} {\r\n margin-top: 32px;\r\n font-size: 32px;\r\n font-weight: 300;\r\n }\r\n`;\r\n\r\nclass Title extends Component {\r\n render() {\r\n const { children } = this.props;\r\n return {children};\r\n }\r\n}\r\n\r\nexport default Title;\r\n","import styled, { css } from 'styled-components';\r\nimport { lighten, darken } from 'polished';\r\nimport { colors } from '../styles/colors';\r\n\r\nconst Button = styled.button`\r\n display: block;\r\n padding: 8px 16px;\r\n\r\n font-family: AzulHelveticaNeue;\r\n font-size: 20px;\r\n font-weight: 400;\r\n line-height: normal;\r\n height: 56px;\r\n width: 100%;\r\n margin-bottom: 16px;\r\n\r\n border: 0 none;\r\n border-radius: 3px;\r\n background: transparent;\r\n\r\n cursor: pointer;\r\n transition: background-color .15s ease, color .15s ease;\r\n\r\n text-align: center;\r\n &:focus,\r\n &:active { outline: none; }\r\n\r\n &:disabled {\r\n opacity: 0.4;\r\n cursor: not-allowed;\r\n }\r\n\r\n ${props => (props.shadow ? shadowMixin : '')}\r\n ${props => (props.bold ? boldMixin : '')}\r\n\r\n ${props => (props.lighter ? lighterMixin : '')};\r\n ${props => (props.primary ? primaryMixin : '')};\r\n ${props => (props.secondary ? secondaryMixin : '')};\r\n ${props => (props.gray ? grayMixin : '')};\r\n ${props => (props.outlineLighter ? outlineLighterMixin : '')};\r\n ${props => (props.outlinePrimary ? outlinePrimaryMixin : '')};\r\n ${props => (props.grayText ? grayTextMixin : '')};\r\n ${props => (props.success ? successMixin: '')};\r\n`;\r\n\r\nconst shadowMixin = css`\r\n box-shadow: 0px 2px 16px rgba(0, 0, 0, 0.25);\r\n`;\r\n\r\nconst boldMixin = css`\r\n font-weight: bold;\r\n padding-top: 12px;\r\n`;\r\n\r\nconst lighterMixin = css`\r\n color: white;\r\n background-color: ${colors.BRAND_LIGHTER};\r\n\r\n &:hover:not(:disabled),\r\n &:focus:not(:disabled) { background-color: ${darken(0.1, colors.BRAND_LIGHTER)} }\r\n &:active:not(:disabled) { background-color: ${colors.BRAND_LIGHTER} }\r\n`;\r\n\r\nconst primaryMixin = css`\r\n color: white;\r\n background-color: ${colors.BRAND_PRIMARY};\r\n box-shadow: 0px 2px 16px rgba(0, 0, 0, 0.25);\r\n\r\n &:hover:not(:disabled),\r\n &:focus:not(:disabled) { background-color: ${darken(0.1, colors.BRAND_PRIMARY)} }\r\n &:active:not(:disabled) { background-color: ${colors.BRAND_PRIMARY} }\r\n`;\r\n\r\nconst secondaryMixin = css`\r\n color: white;\r\n background-color: ${colors.BRAND_SECONDARY};\r\n\r\n &:hover:not(:disabled),\r\n &:focus:not(:disabled) { background-color: ${lighten(0.1, colors.BRAND_SECONDARY)} }\r\n &:active:not(:disabled) { background-color: ${lighten(0.2, colors.BRAND_SECONDARY)} }\r\n`;\r\n\r\nconst successMixin = css`\r\n color: white;\r\n background-color: ${colors.SUCCESS};\r\n\r\n &:hover:not(:disabled),\r\n &:focus:not(:disabled) { background-color: ${darken(0.1, colors.SUCCESS)} }\r\n &:active:not(:disabled) { background-color: ${colors.SUCCESS} }\r\n`;\r\n\r\nconst grayMixin = css`\r\n color: white;\r\n background-color: ${colors.GRAY_DARKER};\r\n\r\n &:hover:not(:disabled),\r\n &:focus:not(:disabled) { background-color: ${darken(0.1, '#7F7F7F')} }\r\n &:active:not(:disabled) { background-color: ${colors.GRAY_DARKER} }\r\n`;\r\n\r\nconst outlineLighterMixin = css`\r\n color: ${colors.BRAND_LIGHTER};\r\n border: 1px ${({ dashed }) => dashed ? 'dashed' : 'solid' } ${colors.BRAND_LIGHTER};\r\n\r\n &:hover:not(:disabled),\r\n &:focus:not(:disabled) {\r\n color: white;\r\n border-color: ${colors.BRAND_LIGHTER};\r\n background: ${colors.BRAND_LIGHTER};\r\n }\r\n &:active:not(:disabled) { background-color: ${darken(0.1, colors.BRAND_LIGHTER)} }\r\n`;\r\n\r\nconst outlinePrimaryMixin = css`\r\n color: ${colors.BRAND_PRIMARY};\r\n border: 1px ${({ dashed }) => dashed ? 'dashed' : 'solid' } ${colors.BRAND_PRIMARY};\r\n\r\n &:hover:not(:disabled),\r\n &:focus:not(:disabled) {\r\n color: white;\r\n border-color: ${colors.BRAND_PRIMARY};\r\n background: ${colors.BRAND_PRIMARY};\r\n }\r\n &:active:not(:disabled) { background-color: ${darken(0.1, colors.BRAND_PRIMARY)} }\r\n`;\r\n\r\nconst grayTextMixin = css`\r\n color: ${colors.GRAY_DARKEST};\r\n\r\n &:hover:not(:disabled),\r\n &:focus:not(:disabled) {\r\n background: ${colors.GRAY_LIGHT};\r\n }\r\n &:active:not(:disabled) { background-color: ${colors.GRAY} }\r\n`;\r\n\r\nexport default Button;","import React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n`;\r\nconst AirportName = styled.div`\r\n font-size: 28px;\r\n margin-bottom: 4px;\r\n`;\r\nconst FlightTime = styled.div`\r\n font-size: 14px;\r\n`;\r\n\r\nexport default function AirportNameAndFlightTime({ airportName, flightTime }) {\r\n return (\r\n \r\n {airportName}\r\n {flightTime}\r\n \r\n )\r\n}\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n font-size: 12px;\r\n align-items: flex-end;\r\n justify-content: flex-end;\r\n`;\r\nconst FlightName = styled.div``;\r\nconst FlightType = styled.div``;\r\n\r\nexport default function FlightNameAndType({ flightName, flightType }) {\r\n return (\r\n \r\n {flightName}\r\n {flightType}\r\n \r\n )\r\n}\r\n","import React, { useState } from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport { colors } from '../styles/colors';\r\nimport Icon from './Icon';\r\nimport Button from './Button';\r\nimport AirportNameAndFlightTime from './AirportNameAndFlightTime';\r\nimport FlightNameAndType from './FlightNameAndType';\r\nimport Moment from 'react-moment';\r\nimport 'moment/locale/pt-br';\r\n\r\nconst Container = styled.div`\r\n cursor: pointer;\r\n border: 1px solid ${colors.GRAY};\r\n border-radius: 4px;\r\n box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3);\r\n`;\r\n\r\nconst ButtonCheckBoxContainer = styled(Button)`\r\n box-sizing: border-box;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n text-transform: none;\r\n height: 24px;\r\n width: 24px;\r\n padding: 0;\r\n margin-bottom: 0;\r\n margin-right: 12px;\r\n\r\n ${({ value }) => `\r\n border: 1px solid ${value ? 'white' : colors.GRAY_DARKEST};\r\n background-color: ${value ? colors.SUCCESS : 'white'};\r\n `}\r\n`;\r\n\r\nconst ToggleFieldContainer = styled.div`\r\n color: white;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n display: flex;\r\n flex-direction: row;\r\n cursor: pointer;\r\n user-select: none;\r\n align-items: center;\r\n justify-content: center;\r\n\r\n &:focus {\r\n outline: none;\r\n }\r\n`;\r\n\r\nconst DateLabel = styled.span`\r\n font-size: 14px;\r\n color: ${colors.GRAY_DARKEST};\r\n ${({ value }) =>\r\n value\r\n ? `\r\n margin-top: 4px;\r\n font-weight: bold;\r\n `\r\n : ''}\r\n`;\r\n\r\nconst CheckIcon = styled(Icon)`\r\n color: ${colors.GRAY};\r\n font-size: 24px;\r\n color: white;\r\n`;\r\n\r\nconst CheckboxContainer = styled.div`\r\n display: flex;\r\n padding: 12px;\r\n align-items: center;\r\n border-bottom: 1px solid ${colors.GRAY};\r\n`;\r\n\r\nconst FlightInfoContainer = styled.div`\r\n color: ${colors.GRAY_DARKEST};\r\n padding: 12px;\r\n display: flex;\r\n`;\r\n\r\nconst AirportNameAndFLightTimesContainer = styled.div`\r\n display: flex;\r\n flex: 1;\r\n align-items: center;\r\n`;\r\n\r\nconst AirplaneIcon = styled(Icon)`\r\n font-size: 16px;\r\n margin-right: 10px;\r\n margin-left: 10px;\r\n`;\r\n\r\nexport default function FlightCheckbox({\r\n value,\r\n enableLabelMultiline,\r\n containered,\r\n option,\r\n tabIndex,\r\n setLabelMinHeight,\r\n disabled,\r\n field,\r\n validationMinHeight,\r\n form,\r\n format,\r\n onChange,\r\n ...props\r\n}) {\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const toggleField = () => {\r\n if (!disabled) {\r\n if (option) {\r\n const checkValue = field.value ? undefined : option;\r\n form.clearForm();\r\n form.setFieldValue(field.name, checkValue);\r\n\r\n onChange(checkValue);\r\n } else {\r\n form.resetForm();\r\n form.setFieldValue(field.name, value);\r\n onChange(field.value);\r\n }\r\n }\r\n };\r\n\r\n if (!value) return

Carregando dados do voo

;\r\n\r\n return (\r\n {\r\n toggleField(e);\r\n }}\r\n {...props}\r\n >\r\n \r\n {\r\n if (e.key.toLowerCase() === 'enter') {\r\n toggleField(e);\r\n }\r\n }}\r\n onFocus={() => {\r\n setIsFocused(true);\r\n }}\r\n onBlur={() => {\r\n form.setFieldTouched(field.name, true, true);\r\n setIsFocused(false);\r\n }}\r\n value={form.values[field.name] === value}\r\n >\r\n \r\n {form.values[field.name] === value ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n {value.std}\r\n , \r\n {value.std}\r\n \r\n \r\n \r\n \r\n {value.std}}\r\n />\r\n \r\n {value.sta}}\r\n />\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport styled, { keyframes } from 'styled-components';\r\n\r\nconst rotate = keyframes`\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n`;\r\n\r\nconst StyledBackdrop = styled.div`\r\n position: fixed;\r\n left: 0;\r\n top: 0;\r\n width: 100%;\r\n height: 100%;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n background-color: rgba(0, 0, 0, 0.7);\r\n z-index: 999;\r\n`;\r\n\r\nconst Loading = styled.div`\r\n display: inline-block;\r\n position: relative;\r\n width: 64px;\r\n height: 64px;\r\n & div {\r\n box-sizing: border-box;\r\n display: block;\r\n position: absolute;\r\n width: 51px;\r\n height: 51px;\r\n margin: 6px;\r\n border: 6px solid white;\r\n border-radius: 50%;\r\n animation: ${rotate} 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\r\n border-color: white transparent transparent transparent;\r\n }\r\n & div:nth-child(1) {\r\n animation-delay: -0.45s;\r\n }\r\n\r\n & div:nth-child(2) {\r\n animation-delay: -0.3s;\r\n }\r\n\r\n & div:nth-child(3) {\r\n animation-delay: -0.15s;\r\n }\r\n`;\r\n\r\nconst LoadMask = ({ ...props }) => (\r\n \r\n \r\n
\r\n \r\n \r\n);\r\n\r\nexport default LoadMask;\r\n","export default function objToParams(obj) {\r\n if (!obj) return '';\r\n\r\n return `?${Object\r\n .keys(obj)\r\n .filter(key =>\r\n obj[key] !== '' && (!Array.isArray(obj[key]) || (typeof obj[key][0] !== 'undefined')), // remove empty strings and arrays\r\n )\r\n .map(key => (Array.isArray(obj[key]) ?\r\n `${key}=${encodeURIComponent(obj[key].join(','))}` :\r\n `${key}=${encodeURIComponent(obj[key])}`))\r\n .join('&')}`;\r\n}","export default async function extractJson(response) {\r\n const contentType = response.headers.get('content-type');\r\n return contentType && contentType.includes('application/json') ? response.json() : {};\r\n}","import objToParams from '../utils/obj-to-params';\r\nimport extractJson from '../utils/extract-json';\r\n\r\nconst BASE_URL = process.env.REACT_APP_BASE_URL;\r\n\r\nexport async function azulGet(endpoint, params, useSessionToken = true, authToken) {\r\n // throw earlier if useSessionToken and no session token found\r\n // if (useSessionToken && !getSessionToken()) {\r\n // throw new LuftHttpError(401, UNAUTHORIZED_ERROR_MESSAGE);\r\n // }\r\n\r\n const url = BASE_URL + endpoint + objToParams(params);\r\n\r\n const config = {\r\n method: 'GET',\r\n headers: new Headers({\r\n // ...(useSessionToken || authToken ? { Authorization: `Bearer ${useSessionToken ? getSessionToken() : authToken}` } : {}),\r\n 'Content-Type': 'application/json',\r\n }),\r\n };\r\n\r\n const response = await fetch(url, config);\r\n const responseJson = await extractJson(response);\r\n\r\n return responseJson;\r\n}\r\n\r\n// POST\r\n\r\nexport async function azulPost(endpoint, requestBody, isFormData = false, useSessionToken = true, authToken) {\r\n // throw earlier if useSessionToken and no session token found\r\n // if (useSessionToken && !getSessionToken()) {\r\n // throw new LuftHttpError(401, UNAUTHORIZED_ERROR_MESSAGE);\r\n // }\r\n\r\n const body = isFormData ? requestBody : (requestBody ? JSON.stringify(requestBody) : null);\r\n\r\n const config = {\r\n method: 'POST',\r\n body,\r\n headers: new Headers({\r\n // ...(useSessionToken || authToken ? { Authorization: `Bearer ${useSessionToken ? getSessionToken() : authToken}` } : {}),\r\n ...(isFormData ? {} : { 'Content-Type': 'application/json' }),\r\n }),\r\n };\r\n\r\n const response = await fetch(BASE_URL + endpoint, config);\r\n const responseJson = await extractJson(response);\r\n\r\n return responseJson;\r\n}\r\n","import React, { Component } from 'react';\r\nimport styled, { css, keyframes } from 'styled-components';\r\nimport { Formik, Field } from 'formik';\r\nimport Button from '../../components/Button';\r\nimport * as Yup from 'yup';\r\nimport FlightCheckbox from '../../components/FlightCheckbox';\r\nimport LoadMask from '../../components/LoadMask';\r\nimport { azulPost } from '../../services';\r\nimport { devices } from '../../styles/breakpoints';\r\n// import { mockPost } from '../../consts/MOCK_DATA';\r\n\r\nconst FieldContainer = styled.div`\r\n margin-bottom: 14px;\r\n`;\r\n\r\nconst ActionContainer = styled.div`\r\n position: fixed;\r\n bottom: 0px;\r\n width: 100%;\r\n left: 0px;\r\n padding: 16px 16px 0;\r\n background-color: white;\r\n box-shadow: 0 -1px 2px 1px rgba(0, 0, 0, 0.15);\r\n\r\n @media ${devices.desktop} {\r\n position: relative;\r\n width: 290px;\r\n margin: 0 auto;\r\n background-color: none;\r\n box-shadow: none;\r\n }\r\n`;\r\n\r\nconst fadeIn = keyframes`\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n`;\r\n\r\nconst fadeInMixin = css`\r\n animation: ${fadeIn} ${({ itemOrder }) => (itemOrder + 1) * 0.3}s;\r\n`;\r\n\r\nconst StyledCheckbox = styled(FlightCheckbox)`\r\n ${fadeInMixin};\r\n`;\r\n\r\nconst Form = styled.form`\r\n padding-bottom: 90px;\r\n\r\n @media ${devices.desktop} {\r\n display: flex;\r\n justify-content: space-between;\r\n flex-wrap: wrap;\r\n max-width: 760px;\r\n margin: 0 auto;\r\n padding-bottom: 0;\r\n\r\n ${FieldContainer} {\r\n flex-basis: 48%;\r\n }\r\n }\r\n`;\r\n\r\nexport default class FlightChangeForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isShowingOtherFlights: false,\r\n showOtherFlights: false,\r\n isLoading: false,\r\n error: ''\r\n };\r\n }\r\n\r\n componentDidMount() {}\r\n\r\n _getValidations = () => {\r\n return Yup.object().shape({\r\n selectedFlight: Yup.object().required()\r\n });\r\n };\r\n\r\n _setIsShowingOtherFlights = () => {\r\n this.setState({ isShowingOtherFlights: true });\r\n setTimeout(() => {\r\n this.setState({ showOtherFlights: true });\r\n }, 600);\r\n };\r\n\r\n _renderCheckboxList = () => {\r\n return this.props.flights.map((flight, index) => (\r\n \r\n value}\r\n parse={value => value}\r\n onChange={value => value}\r\n value={flight}\r\n onBlur={value => value}\r\n itemOrder={index}\r\n key={index}\r\n />\r\n \r\n ));\r\n };\r\n\r\n _onSubmit = async ({ selectedFlight }) => {\r\n const { onLoading, pnr } = this.props;\r\n\r\n const reqBody = {\r\n recordLocator: pnr,\r\n selectedNewJourneySellKey: selectedFlight.journeySellKey\r\n };\r\n\r\n onLoading(true);\r\n\r\n try {\r\n const response = await azulPost(\r\n '/SelfService/ConfirmIropSelfService',\r\n reqBody\r\n );\r\n\r\n // const response = await mockPost();\r\n\r\n const { success, data, notifications } = response;\r\n\r\n if (success) {\r\n this._handlePostSuccess(data, pnr);\r\n } else {\r\n this._handlePostError(notifications[0].value);\r\n }\r\n } catch (error) {\r\n console.log(error.message);\r\n this.setState({ error: error.message });\r\n onLoading(false);\r\n }\r\n };\r\n\r\n _handlePostSuccess = (flight, pnr) => {\r\n const { history } = this.props;\r\n\r\n return history.push('flight-confirmation', { pnr, flight });\r\n };\r\n\r\n _handlePostError = error => {\r\n const { onLoading } = this.props;\r\n onLoading(false);\r\n\r\n this.setState({ error });\r\n };\r\n\r\n render() {\r\n const { isLoading } = this.state;\r\n\r\n if (isLoading) return ;\r\n\r\n return (\r\n \r\n {({ resetForm, values, handleSubmit, isValid }) => {\r\n return (\r\n {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleSubmit();\r\n }}\r\n >\r\n {this._renderCheckboxList()}\r\n \r\n \r\n \r\n \r\n );\r\n }}\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport styled, { keyframes } from 'styled-components';\r\n\r\n\r\nconst fadeIn = keyframes`\r\n from {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n opacity: 0.6;\r\n }\r\n`;\r\n\r\nconst fadeOut = keyframes`\r\n from {\r\n opacity: 0.6;\r\n }\r\n\r\n to {\r\n opacity: 0;\r\n }\r\n`;\r\n\r\nconst StyledBackdrop = styled.div`\r\n position: fixed;\r\n width: 100%;\r\n height: 100%;\r\n background: black;\r\n z-index: 100;\r\n top: 0;\r\n left: 0;\r\n opacity: 0.6;\r\n animation: ${({ isOpen }) => isOpen ? fadeIn : fadeOut} 0.4s;\r\n`;\r\n\r\nexport default function Backdrop({ isOpen }) {\r\n return (\r\n \r\n )\r\n}","import React, { useState, useEffect, useRef } from 'react';\r\nimport styled, { keyframes, css } from 'styled-components';\r\n\r\nimport { useOutsideClick } from '../utils/use-outside-click';\r\n\r\nimport Backdrop from './Backdrop';\r\nimport { colors } from '../styles/colors';\r\n\r\nconst fadeIn = keyframes`\r\n from {\r\n opacity: 0;\r\n }\r\n\r\n to {\r\n opacity: 1;\r\n }\r\n`;\r\n\r\nconst fadeOut = keyframes`\r\n from {\r\n opacity: 1;\r\n }\r\n\r\n to {\r\n opacity: 0;\r\n }\r\n`;\r\n\r\nconst Wrapper = styled.div`\r\n position: fixed;\r\n display: flex;\r\n margin-top: 80px;\r\n justify-content: center;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 999;\r\n`;\r\n\r\nconst fullScreenMixin = css`\r\n width: 100%;\r\n height: 100%;\r\n max-height: 100%;\r\n max-width: 100%;\r\n overflow-y: auto;\r\n border-radius: 0;\r\n`;\r\n\r\n\r\nconst StyledModal = styled.dialog`\r\n position: relative;\r\n width: calc(100% - 32px);\r\n text-align: left;\r\n border: 1px solid ${colors.GRAY_LIGHTER}; \r\n z-index: 999;\r\n max-height: 90%;\r\n display: flex;\r\n flex-direction: column;\r\n margin: 0;\r\n padding: 0;\r\n left: auto;\r\n animation: ${({ open }) => open ? fadeIn : fadeOut} 0.4s;\r\n max-width: ${({ modalSize }) => modalSize ? modalSize : '500px'};\r\n background-color: ${({ blueModal }) => blueModal ? colors.SECONDARY_LIGHT_BLUE : 'white'};\r\n\r\n ${({ fullScreen }) => fullScreen ? fullScreenMixin : ''}\r\n`;\r\n\r\nconst MODAL_ELEMENT_NAME = 'azul-modal';\r\n\r\nconst Modal = ({\r\n dispatch,\r\n isOpen,\r\n onDismiss,\r\n children,\r\n blueHeader,\r\n blueModal,\r\n fullScreen,\r\n modalSize,\r\n ...props\r\n}) => {\r\n const [isActive, setIsActive] = useState(isOpen);\r\n const setTimeoutRef = useRef(null);\r\n\r\n useOutsideClick(MODAL_ELEMENT_NAME, isOpen, onDismiss);\r\n\r\n useEffect(() => {\r\n clearTimeout(setTimeoutRef.current);\r\n\r\n if (isOpen) {\r\n setIsActive(true);\r\n } else {\r\n if (!isActive) return;\r\n\r\n requestAnimationFrame(() => {\r\n setTimeoutRef.current = setTimeout(() => {\r\n setIsActive(false);\r\n }, 300);\r\n });\r\n }\r\n }, [isActive, isOpen]);\r\n\r\n return (\r\n isActive ? (\r\n \r\n \r\n {children}\r\n \r\n \r\n \r\n )\r\n : null\r\n );\r\n};\r\n\r\nexport default Modal;","import { useEffect, useCallback } from 'react';\r\n\r\n/**\r\n * Handle clicks outside an element\r\n * @param {String} elName - element custom name\r\n * @param {Boolean} enableHandler - enable or disable this handler\r\n * @param {Function} onOutsideClick - callback to the outside click\r\n */\r\nexport const useOutsideClick = (\r\n elName,\r\n enableHandler,\r\n onOutsideClick = () => {}\r\n) => {\r\n const _handleBodyClick = useCallback(\r\n e => {\r\n const elementExists = e.target.closest('body');\r\n if (!elementExists || e.target.closest(`[data-name=\"${elName}\"]`)) return;\r\n onOutsideClick();\r\n },\r\n [elName, onOutsideClick]\r\n );\r\n\r\n useEffect(() => {\r\n if (enableHandler) {\r\n window.addEventListener('click', _handleBodyClick);\r\n } else {\r\n window.removeEventListener('click', _handleBodyClick);\r\n }\r\n return function cleanup() {\r\n window.removeEventListener('click', _handleBodyClick);\r\n };\r\n }, [_handleBodyClick, enableHandler]);\r\n};\r\n","import React, { Component } from 'react';\r\nimport styled from 'styled-components';\r\nimport Title from '../../components/Title';\r\nimport { colors } from '../../styles/colors';\r\nimport FlightChangeForm from './FlightChangeForm';\r\nimport Modal from '../../components/Modal';\r\nimport Icon from '../../components/Icon';\r\nimport Button from '../../components/Button';\r\nimport LoadMask from '../../components/LoadMask';\r\nimport { azulGet } from '../../services';\r\n// import { SUGGESTED_FLIGHTS_LIST } from '../../consts/MOCK_DATA';\r\nimport { devices } from '../../styles/breakpoints';\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n padding: 16px;\r\n\r\n @media ${devices.desktop} {\r\n max-width: 1170px;\r\n margin: 0 auto;\r\n }\r\n`;\r\n\r\nconst GrayText = styled.p`\r\n font-size: 14px;\r\n color: ${colors.GRAY_DARKEST};\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 20px;\r\n }\r\n`;\r\n\r\nconst Bold = styled.span`\r\n font-weight: bold;\r\n`;\r\n\r\nconst AttentionIcon = styled(Icon)`\r\n font-size: 48px;\r\n margin-bottom: 16px;\r\n color: ${colors.BRAND_PRIMARY};\r\n`;\r\n\r\nconst ModalTextAndIconContainer = styled.div`\r\n margin: 20px;\r\n color: ${colors.BRAND_PRIMARY};\r\n text-align: center;\r\n display: flex;\r\n flex: 1;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n`;\r\n\r\nconst ModalActionsContainer = styled.div`\r\n margin: 0px 20px;\r\n`;\r\n\r\nexport default class FlightChange extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isLoading: false,\r\n error: '',\r\n isOpen: false,\r\n hasNoAction: false,\r\n flights: []\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._fethFlightsSuggestionFlights();\r\n }\r\n\r\n _refreshModalTimer = () => {\r\n setTimeout(() => {\r\n this.setState({\r\n isOpen: true,\r\n error: 'Esse voo não está mais disponível.'\r\n });\r\n }, 300000);\r\n };\r\n\r\n _refreshFlightsAndTimer = () => {\r\n this.setState({ isOpen: false });\r\n this._fethFlightsSuggestionFlights();\r\n };\r\n\r\n _fethFlightsSuggestionFlights = async () => {\r\n const { history } = this.props;\r\n const { pnr } = history.location.state;\r\n const url = `/SelfService/${pnr}/suggestion-flights`;\r\n try {\r\n this.setState({ isLoading: true });\r\n const { success, data, notifications } = await azulGet(url);\r\n\r\n // const { success, data, notifications } = SUGGESTED_FLIGHTS_LIST;\r\n\r\n if (success) {\r\n this._handleFetchSuccess(data);\r\n } else {\r\n this._handleFetchError(notifications[0].value);\r\n }\r\n\r\n console.log('fetchSuggestionFlights', { success, data, notifications });\r\n } catch (error) {\r\n console.log(error.message);\r\n this.setState({ isLoading: false, error: error.message });\r\n }\r\n };\r\n\r\n _handleFetchSuccess = data => {\r\n const { flightSuggestion, success, message } = data;\r\n\r\n if (success) {\r\n this._refreshModalTimer();\r\n\r\n return this.setState({\r\n isLoading: false,\r\n error: '',\r\n flights: flightSuggestion\r\n });\r\n } else {\r\n return this.setState({\r\n isLoading: false,\r\n error: message,\r\n isOpen: true,\r\n hasNoAction: true,\r\n flights: []\r\n });\r\n }\r\n };\r\n\r\n _handleFetchError = error => {\r\n return this.setState({\r\n isLoading: false,\r\n error,\r\n flights: []\r\n });\r\n };\r\n\r\n _handleLoading = status => {\r\n this.setState({ isLoading: status });\r\n };\r\n\r\n render() {\r\n const { history } = this.props;\r\n const { pnr } = history.location.state;\r\n const { isOpen, hasNoAction, flights, isLoading, error } = this.state;\r\n\r\n if (isLoading) return ;\r\n\r\n return (\r\n \r\n Alteração de voo\r\n \r\n Selecione o seu novo voo.\r\n
\r\n
\r\n Ah! E não se preocupe, todos os passageiros que estão na sua reserva\r\n também serão reacomodados.\r\n
\r\n
\r\n Confira abaixo as novas sugestões de voo:\r\n
\r\n \r\n {} : this._refreshFlightsAndTimer}\r\n >\r\n \r\n \r\n {error &&

{error}

}\r\n\r\n {hasNoAction ? (\r\n

Por favor, dirija-se ao balcão para obter mais informações.

\r\n ) : (\r\n

Por favor, selecione outro voo da lista.

\r\n )}\r\n
\r\n {!hasNoAction && (\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { colors } from '../styles/colors';\r\nimport Icon from './Icon';\r\nimport { devices } from '../styles/breakpoints';\r\n\r\nconst successMixin = css`\r\n border: 1px solid ${colors.SUCCESS};\r\n color: ${colors.SUCCESS};\r\n`;\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n align-items: center;\r\n padding: 16px;\r\n\r\n ${({ success }) => (success ? successMixin : '')}\r\n`;\r\n\r\nconst MessageWrapper = styled.div`\r\n display: flex;\r\n flex: 1;\r\n`;\r\n\r\nconst Message = styled.span`\r\n font-size: 16px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 20px;\r\n }\r\n`;\r\n\r\nconst StyledIcon = styled(Icon)`\r\n font-size: 32px;\r\n margin-right: 8px;\r\n`;\r\n\r\nexport default function Alert(props) {\r\n return (\r\n \r\n \r\n \r\n Sua alteração foi realizada com sucesso!\r\n \r\n \r\n );\r\n}\r\n","export default {\r\n CANCELLED: 'cancelled',\r\n SUGGESTED: 'suggested',\r\n CONFIRMED: 'confirmed',\r\n}","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { colors } from '../../styles/colors';\r\nimport { devices } from '../../styles/breakpoints';\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex: 1;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n padding-top: 10px;\r\n padding-bottom: 10px;\r\n color: ${({ suggested }) =>\r\n suggested ? colors.BRAND_SECONDARY : colors.GRAY_DARK};\r\n margin-top: 6px;\r\n margin-bottom: 6px;\r\n`;\r\n\r\nconst FlightDate = styled.div`\r\n font-size: 10px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 14px;\r\n }\r\n`;\r\n\r\nconst FlightTime = styled.div`\r\n font-size: 14px;\r\n padding-top: 2px;\r\n padding-bottom: 2px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 22px;\r\n }\r\n`;\r\n\r\nconst AirportName = styled.div`\r\n font-size: 10px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 16px;\r\n }\r\n`;\r\n\r\nexport default function FlightSchedule({\r\n flightDate,\r\n flightTime,\r\n airportName,\r\n type,\r\n suggested\r\n}) {\r\n return (\r\n \r\n {flightDate}\r\n {flightTime}\r\n {airportName}\r\n \r\n );\r\n}\r\n","import styled from 'styled-components';\r\n\r\nexport const MediaQuery = styled.div`\r\n display: none;\r\n\r\n @media ${props => props.device} {\r\n display: block;\r\n }\r\n`;\r\n","import React from 'react';\r\nimport styled, { css } from 'styled-components';\r\n// import Information from './Information';\r\nimport { colors } from '../../styles/colors';\r\nimport FLIGHT_STATUS from '../../consts/FLIGHT_STATUS';\r\nimport FlightSchedule from './FlightSchedule';\r\nimport Icon from '../Icon';\r\nimport Moment from 'react-moment';\r\nimport 'moment/locale/pt-br';\r\nimport { devices } from '../../styles/breakpoints';\r\nimport { MediaQuery } from '../../components/MediaQuery';\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex: 1;\r\n width: 100%;\r\n border: 1px solid ${colors.GRAY_LIGHT};\r\n border-radius: 3px;\r\n\r\n @media ${devices.desktop} {\r\n max-width: 970px;\r\n }\r\n`;\r\n\r\nconst typeMixin = css`\r\n font-size: 10px;\r\n font-weight: bold;\r\n padding: 4px 8px 12px 8px;\r\n ${({ type, isFlightStatus }) => {\r\n switch (type) {\r\n case FLIGHT_STATUS.CANCELLED:\r\n return `\r\n background-color: ${colors.GRAY_LIGHT};\r\n color: ${isFlightStatus ? colors.DANGER : colors.GRAY_DARKEST};\r\n\r\n @media ${devices.desktop} {\r\n color: ${colors.GRAY_DARKEST};\r\n }\r\n `;\r\n case FLIGHT_STATUS.SUGGESTED:\r\n return `\r\n background-color: ${colors.BRAND_PRIMARY};\r\n color: white;\r\n `;\r\n case FLIGHT_STATUS.CONFIRMED:\r\n default:\r\n return `\r\n background-color: ${colors.SUCCESS};\r\n color: white;\r\n `;\r\n }\r\n }}\r\n\r\n @media ${devices.desktop} {\r\n font-size: 16px;\r\n }\r\n`;\r\n\r\nconst ColumnTitle = styled.span`\r\n ${typeMixin}\r\n ${({ center }) => (center ? `text-align: center;` : '')}\r\n max-height: 16px;\r\n\r\n ${({ isFlightStatus }) => isFlightStatus && `border-top-left-radius: 3px;`}\r\n\r\n @media ${devices.desktop} {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n padding: 0 8px;\r\n height: 41px;\r\n max-height: none;\r\n }\r\n`;\r\n\r\nconst Information = styled.div`\r\n display: flex;\r\n flex: 1;\r\n flex-direction: column;\r\n`;\r\nconst Departure = styled.div`\r\n display: flex;\r\n flex: 1;\r\n flex-direction: column;\r\n`;\r\nconst Arrival = styled.div`\r\n display: flex;\r\n flex: 1;\r\n flex-direction: column;\r\n`;\r\nconst ArrowIconContainer = styled.div`\r\n display: flex;\r\n flex: 0;\r\n flex-direction: column;\r\n`;\r\nconst Status = styled.div`\r\n display: flex;\r\n flex: 1;\r\n flex-direction: column;\r\n height: 100%;\r\n`;\r\n\r\nconst FlightName = styled.div`\r\n font-size: 13px;\r\n ${({ type }) =>\r\n type === FLIGHT_STATUS.SUGGESTED ? 'font-weight: bold;' : ''}\r\n color: ${({ type }) =>\r\n type === FLIGHT_STATUS.SUGGESTED\r\n ? colors.BRAND_SECONDARY\r\n : colors.GRAY_DARKER};\r\n\r\n\r\n @media ${devices.desktop} {\r\n font-size: 17.75px;\r\n text-align: center;\r\n }\r\n`;\r\n\r\nconst AirplaneName = styled.div`\r\n font-size: 12px;\r\n color: ${({ type }) =>\r\n type === FLIGHT_STATUS.SUGGESTED\r\n ? colors.BRAND_SECONDARY\r\n : colors.GRAY_DARKER};\r\n`;\r\n\r\nconst Content = styled.div`\r\n display: flex;\r\n align-items: center;\r\n flex: 1;\r\n padding: 16px 6px;\r\n margin-top: 6px;\r\n margin-bottom: 6px;\r\n border-right: 1px solid ${colors.GRAY};\r\n white-space: nowrap;\r\n\r\n @media ${devices.desktop} {\r\n justify-content: center;\r\n }\r\n`;\r\n\r\nconst ArrowIcon = styled(Icon)`\r\n font-size: 16px;\r\n color: ${({ type }) =>\r\n type === FLIGHT_STATUS.SUGGESTED\r\n ? colors.BRAND_SECONDARY\r\n : colors.GRAY_DARK};\r\n`;\r\n\r\nconst GhostTitle = styled.div`\r\n height: 16px;\r\n ${typeMixin}\r\n\r\n @media ${devices.desktop} {\r\n height: 41px;\r\n }\r\n`;\r\n\r\nconst GhostWrapper = styled.div`\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n`;\r\n\r\nconst StatusHeader = styled.div`\r\n height: 16px;\r\n border-top-right-radius: 3px;\r\n \r\n ${({ center }) => (center ? `text-align: center;` : '')}\r\n ${typeMixin}\r\n\r\n @media ${devices.desktop} {\r\n display: flex;\r\n align-items: center;\r\n height: 41px;\r\n padding: 0 8px;\r\n\r\n ${({ center }) => (center ? `justify-content: center;` : '')}\r\n }\r\n`;\r\n\r\nconst StatusLabel = styled.div`\r\n flex: 1;\r\n display: flex;\r\n align-items: center;\r\n margin: 6px;\r\n padding: 16px 6px;\r\n border-left: 1px solid ${colors.GRAY};\r\n color: ${colors.SUCCESS};\r\n font-size: 10px;\r\n font-weight: bold;\r\n ${({ center }) => (center ? `text-align: center;` : '')}\r\n\r\n ${({ type }) => {\r\n switch (type) {\r\n case FLIGHT_STATUS.CANCELLED:\r\n return `\r\n color: ${colors.DANGER};\r\n `;\r\n case FLIGHT_STATUS.SUGGESTED:\r\n return `\r\n color: ${colors.BRAND_PRIMARY};\r\n `;\r\n case FLIGHT_STATUS.CONFIRMED:\r\n default:\r\n return `\r\n color: ${colors.SUCCESS};\r\n `;\r\n }\r\n }}\r\n\r\n @media ${devices.desktop} {\r\n ${({ center }) => (center ? `justify-content: center;` : '')}\r\n font-size: 16px;\r\n }\r\n \r\n`;\r\n\r\nexport default function FlightSummary({ flight, type }) {\r\n const _getFlightLabel = isFlightStatus => {\r\n switch (type) {\r\n case FLIGHT_STATUS.CANCELLED:\r\n return isFlightStatus ? 'Cancelado' : 'Voo cancelado';\r\n case FLIGHT_STATUS.SUGGESTED:\r\n return isFlightStatus ? 'Sugestão' : 'Novo voo sugerido';\r\n case FLIGHT_STATUS.CONFIRMED:\r\n return isFlightStatus ? 'Confirmado' : 'Voo confirmado';\r\n default:\r\n return 'Novo voo';\r\n }\r\n };\r\n return (\r\n \r\n \r\n \r\n {_getFlightLabel()}\r\n \r\n \r\n \r\n Voo {flight.carrierCode} {flight.flightNumber}\r\n \r\n {flight.airplaneName}\r\n \r\n \r\n \r\n \r\n Saída\r\n \r\n {flight.std}}\r\n airportName={flight.departureStation}\r\n flightDate={{flight.std}}\r\n suggested={type === FLIGHT_STATUS.SUGGESTED}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Chegada\r\n \r\n {flight.staFinalDestination}\r\n }\r\n airportName={flight.arrivalStationFinalDestination}\r\n flightDate={\r\n {flight.staFinalDestination}\r\n }\r\n suggested={type === FLIGHT_STATUS.SUGGESTED}\r\n type={type}\r\n />\r\n \r\n\r\n \r\n \r\n \r\n Status\r\n \r\n\r\n \r\n {_getFlightLabel(true)}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { Component } from 'react';\r\nimport styled from 'styled-components';\r\nimport Alert from '../../components/Alert';\r\nimport { colors } from '../../styles/colors';\r\nimport FlightSummary from '../../components/FlightSummary';\r\nimport FLIGHT_STATUS from '../../consts/FLIGHT_STATUS';\r\nimport Button from '../../components/Button';\r\nimport { devices } from '../../styles/breakpoints';\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n padding: 16px;\r\n\r\n @media ${devices.desktop} {\r\n max-width: 1170px;\r\n margin: 0 auto;\r\n }\r\n`;\r\n\r\nconst ReservationCodeContainer = styled.div`\r\n font-size: 14px;\r\n color: ${colors.GRAY_DARKEST};\r\n margin-top: 18px;\r\n margin-bottom: 4px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 20px;\r\n }\r\n`;\r\n\r\nconst ReservationCode = styled.span`\r\n font-weight: bold;\r\n`;\r\n\r\nconst BlueText = styled.p`\r\n font-size: 16px;\r\n color: ${colors.BRAND_PRIMARY};\r\n\r\n @media ${devices.desktop} {\r\n font-size: 20px;\r\n line-height: 24px;\r\n }\r\n`;\r\n\r\nconst ActionsContainer = styled.div`\r\n position: fixed;\r\n bottom: 0px;\r\n width: 100%;\r\n left: 0px;\r\n padding: 16px 16px 0;\r\n background-color: white;\r\n\r\n @media ${devices.desktop} {\r\n position: relative;\r\n width: 290px;\r\n margin: 0 auto;\r\n background-color: none;\r\n box-shadow: none;\r\n }\r\n`;\r\n\r\nconst WrapperFlex = styled.div`\r\n @media ${devices.desktop} {\r\n display: flex;\r\n }\r\n`;\r\n\r\nconst RightColumn = styled.div`\r\n @media ${devices.desktop} {\r\n flex: 1;\r\n max-width: 500px;\r\n text-align: center;\r\n\r\n p {\r\n max-width: 332px;\r\n margin: 0 auto 24px;\r\n }\r\n }\r\n`;\r\n\r\nconst LeftColumn = styled.div`\r\n @media ${devices.desktop} {\r\n max-width: 670px;\r\n flex: 1;\r\n }\r\n`;\r\n\r\nexport default class FlightConfirmation extends Component {\r\n _checkIn = () => {\r\n const { location } = this.props;\r\n const BASE_URL = process.env.REACT_APP_WEBCHECKIN_URL + location.state.pnr;\r\n const win = window.open(BASE_URL, '_blank');\r\n win.focus();\r\n };\r\n\r\n render() {\r\n const { location } = this.props;\r\n\r\n return (\r\n \r\n \r\n \r\n Código da Reserva:{' '}\r\n {location.state.pnr}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Agora você precisa fazer novamente o Check-in do seu voo e\r\n escolher seus novos assentos.\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport ILUSTRACAO_VOO_CANCELADO from '../../images/canceled-flight.svg';\r\n\r\nimport Title from '../../components/Title';\r\nimport { colors } from '../../styles/colors';\r\nimport FlightSummary from '../../components/FlightSummary';\r\nimport FLIGHT_STATUS from '../../consts/FLIGHT_STATUS';\r\nimport Button from '../../components/Button';\r\nimport { devices } from '../../styles/breakpoints';\r\n// import { flights } from '../../consts/MOCK_DATA';\r\n\r\nconst FlightChangeContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n padding: 16px;\r\n\r\n @media ${devices.desktop} {\r\n max-width: 1170px;\r\n margin: 0 auto;\r\n }\r\n`;\r\n\r\nconst IllustrationContainer = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n margin-top: 8px;\r\n margin-bottom: 12px;\r\n\r\n @media ${devices.desktop} {\r\n display: none;\r\n }\r\n`;\r\n\r\nconst Illustration = styled.img`\r\n width: 134px;\r\n height: 134px;\r\n\r\n @media ${devices.desktop} {\r\n width: 230px;\r\n height: 230px;\r\n }\r\n`;\r\n\r\nconst TextForUser = styled.p`\r\n color: ${colors.GRAY_DARKEST};\r\n font-size: 14px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 20px;\r\n line-height: 24px;\r\n\r\n ${({ hasSuggestion, center }) =>\r\n !hasSuggestion &&\r\n center &&\r\n css`\r\n margin: 0 auto;\r\n max-width: 640px;\r\n text-align: center;\r\n `}\r\n }\r\n`;\r\n\r\nconst BoldText = styled.span`\r\n color: ${colors.GRAY_DARKEST};\r\n font-size: inherit;\r\n font-weight: bold;\r\n`;\r\n\r\nconst ReservationCode = styled(BoldText)`\r\n margin-bottom: 8px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 20px;\r\n }\r\n`;\r\n\r\nconst BigBlueText = styled.p`\r\n margin-top: 26px;\r\n margin-bottom: 12px;\r\n font-size: 14px;\r\n color: ${colors.BRAND_PRIMARY};\r\n\r\n @media ${devices.desktop} {\r\n font-size: 20px;\r\n }\r\n`;\r\n\r\nconst ActionsContainer = styled.div`\r\n ${({ hasSuggestion, center }) =>\r\n hasSuggestion\r\n ? css`\r\n margin-top: 12px;\r\n\r\n @media ${devices.desktop} {\r\n display: flex;\r\n justify-content: space-between;\r\n width: 600px;\r\n\r\n ${Button} {\r\n flex-basis: 48%;\r\n }\r\n }\r\n `\r\n : css`\r\n position: fixed;\r\n bottom: 0px;\r\n width: calc(100% - 32px);\r\n left: 0px;\r\n margin-left: 16px;\r\n\r\n @media ${devices.desktop} {\r\n position: relative;\r\n width: 340px;\r\n margin: 0;\r\n\r\n ${center &&\r\n css`\r\n margin: 0 auto;\r\n `}\r\n }\r\n `}\r\n`;\r\n\r\nconst Username = styled.span`\r\n color: ${colors.BRAND_PRIMARY};\r\n`;\r\n\r\nexport default class FlightIntroduction extends Component {\r\n _toggleIsShowingOtherFlights = () => {\r\n this.setState(prevState => ({\r\n isShowingOtherFlights: !prevState.isShowingOtherFlights,\r\n }));\r\n };\r\n\r\n _selectFlight = () => {\r\n const { history } = this.props;\r\n const { pnr } = history.location.state;\r\n history.push('flight-change', {\r\n pnr,\r\n });\r\n };\r\n\r\n render() {\r\n // TODO: request for suggestion flight\r\n const flight = {};\r\n const { history } = this.props;\r\n const { pnr, hasSuggestion, user } = history.location.state;\r\n\r\n return hasSuggestion ? (\r\n \r\n Alteração de voo\r\n \r\n \r\n \r\n \r\n Olá{user && {user.name}}, tivemos uma mudança em\r\n seu voo, e sabemos que seu tempo é precioso. Fique tranquilo,{' '}\r\n você não terá que pagar nada a mais por isso.\r\n
\r\n
\r\n
\r\n \r\n Código da reserva: {pnr || user.recordLocator}\r\n \r\n \r\n Veja o voo que sugerimos para você:\r\n \r\n \r\n Todos os passageiros da reserva estão no voo sugerido. Abaixo, você\r\n pode confirmar nossa sugestão ou escolher um outro voo de acordo com a\r\n sua preferência:\r\n \r\n \r\n {\r\n history.push('flight-confirmation', {\r\n pnr,\r\n flight: {\r\n //mock\r\n flightNumber: '1234',\r\n carrierCode: 'AD',\r\n recordLocator: 'ABC123',\r\n std: '2019-12-04T18:16:02.1709646-02:00',\r\n staFinalDestination: '2019-12-04T18:16:02.1709722-02:00',\r\n departureStation: 'VCP',\r\n arrivalStationFinalDestination: 'CNF',\r\n },\r\n });\r\n }}\r\n >\r\n Confirmar voo\r\n \r\n {\r\n history.push('flight-change', {\r\n pnr,\r\n });\r\n }}\r\n >\r\n Escolher outro voo\r\n \r\n \r\n
\r\n ) : (\r\n \r\n Alteração de voo\r\n \r\n \r\n \r\n \r\n Olá{user && {user.name}}, tivemos uma mudança em\r\n seu voo, e sabemos que seu tempo é precioso. Fique tranquilo,{' '}\r\n você não terá que pagar nada a mais por isso.\r\n
\r\n
\r\n
\r\n \r\n Código da reserva: {pnr || user.recordLocator}\r\n \r\n {flight.length && (\r\n \r\n )}\r\n\r\n \r\n
\r\n Para minimizar os possíveis impactos, abaixo você poderá escolher o\r\n seu novo voo de acordo com a sua preferência.\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n","// NPM imports\r\nimport React, { Component } from 'react';\r\nimport { Route, Switch } from 'react-router-dom';\r\n\r\n\r\nimport Layout from '../../components/Layout';\r\nimport FlightChange from '../flight-change';\r\nimport FlightConfirmation from '../flight-confirmation';\r\nimport FlightIntroduction from '../flight-introduction';\r\n\r\n// Component\r\n\r\nclass Logged extends Component {\r\n\r\n render() {\r\n const {\r\n match,\r\n user,\r\n flights,\r\n hasSuggestion,\r\n } = this.props;\r\n return (\r\n \r\n \r\n \r\n (\r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default Logged;\r\n","import React from 'react';\r\nimport styled, { css } from 'styled-components';\r\nimport { colors } from '../styles/colors';\r\n\r\nconst LabelText = styled.span`\r\n font-size: 16px;\r\n`;\r\n\r\nconst Container = styled.div`\r\n margin-bottom: 8px;\r\n color: ${colors.GRAY_DARKEST};\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n \r\n ${({ meta }) => meta && meta.touched && meta.error ? css`\r\n color: ${colors.DANGER};\r\n ` : ''}\r\n }\r\n`;\r\n\r\n\r\nconst Label = ({\r\n children,\r\n weight,\r\n isRequired,\r\n ...props\r\n}) => (\r\n \r\n \r\n {children}\r\n \r\n \r\n);\r\n\r\nexport default Label;\r\n","import React from 'react';\r\nimport styled from 'styled-components';\r\nimport { colors } from '../styles/colors';\r\n\r\n\r\nconst ValidationErrorContainer = styled.div`\r\n width: 100%;\r\n opacity: ${({ isVisible }) => isVisible ? '1' : '0'};\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n color: ${colors.DANGER};\r\n`;\r\n\r\nconst ValidationErrorText = styled.span`\r\n font-size: 12px;\r\n white-space: nowrap;\r\n`;\r\n\r\n// create a component\r\nconst ValidationError = ({\r\n meta,\r\n validationMinHeight,\r\n ...props\r\n}) => (\r\n \r\n {meta && meta.touched && meta.error && (\r\n \r\n {meta.error}\r\n \r\n )}\r\n {validationMinHeight}\r\n \r\n);\r\n\r\nexport default ValidationError;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport styled, { css } from 'styled-components';\r\n\r\nimport Label from './Label';\r\nimport ValidationError from './ValidationError';\r\nimport { colors } from '../styles/colors';\r\n\r\n// Mixins\r\n\r\nconst errorInputMixin = css`\r\n border-bottom: 1px solid ${colors.DANGER};\r\n \r\n &:focus {\r\n border-bottom: 1px solid ${colors.DANGER};\r\n }\r\n`;\r\n\r\n// Components\r\n\r\nexport const InputContainer = styled.div`\r\n border-bottom: 1px solid ${colors.GRAY};\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n background: white;\r\n border-color: 2px solid transparent;\r\n \r\n ${({ isFocused }) => isFocused && css`\r\n border-color: ${colors.BRAND_PRIMARY};\r\n `}\r\n \r\n ${({ meta }) => meta && meta.touched && meta.error ? errorInputMixin : ''}\r\n`;\r\n\r\n\r\nexport const Input = styled.input`\r\n min-width: 0;\r\n height: 40px;\r\n border: 0;\r\n background: white;\r\n appearance: none;\r\n font-size: 12px;\r\n width: 100%;\r\n color: ${colors.BRAND_SECONDARY};\r\n outline: none;\r\n box-sizing: border-box;\r\n text-align: ${({ alignCenter }) => alignCenter ? 'center' : 'initial'};\r\n\r\n ::placeholder {\r\n color: ${colors.GRAY};\r\n }\r\n\r\n &[disabled] {\r\n background-color: ${colors.GRAY_LIGHTEST};\r\n color: ${colors.GRAY_DARKER}\r\n }\r\n`;\r\n\r\n\r\nconst InputField = ({\r\n type,\r\n placeholder,\r\n disabled,\r\n label,\r\n field,\r\n format,\r\n parse,\r\n isRequired,\r\n classname,\r\n fieldProps,\r\n form: {\r\n setFieldTouched,\r\n touched,\r\n errors,\r\n },\r\n inputProps,\r\n alignCenter,\r\n onInputRef,\r\n onChange,\r\n onBlur,\r\n onPressEnter,\r\n errorMessage,\r\n ...props\r\n}) => {\r\n const inputRef = useRef(null);\r\n const selectionStart = useRef(null);\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n useEffect(() => {\r\n if (inputRef && inputRef.current && inputRef.current.selectionStart && (selectionStart.current || selectionStart.current === 0)) {\r\n inputRef.current.selectionStart = selectionStart.current;\r\n inputRef.current.selectionEnd = selectionStart.current;\r\n }\r\n }, []);\r\n\r\n const meta = {\r\n touched: touched[field.name],\r\n error: errors[field.name] ? errorMessage : '',\r\n isFocused,\r\n };\r\n\r\n const _onFocus = () => {\r\n setIsFocused(true);\r\n };\r\n\r\n const _onBlur = () => {\r\n setIsFocused(false);\r\n };\r\n\r\n return (\r\n
\r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n \r\n {\r\n inputRef.current = ref;\r\n if (onInputRef) onInputRef(ref);\r\n }}\r\n type={type}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n {...field}\r\n onKeyDown={(e) => {\r\n if (e.key.toLowerCase() === 'enter') {\r\n onPressEnter(field.value);\r\n }\r\n }}\r\n onFocus={() => {\r\n _onFocus();\r\n }}\r\n onBlur={() => {\r\n onBlur(field.value);\r\n _onBlur();\r\n\r\n if (!meta.touched) {\r\n setFieldTouched(field.name, true);\r\n }\r\n }}\r\n value={format(field.value)}\r\n alignCenter={alignCenter}\r\n onChange={(e) => {\r\n let currentSelection = e.target.selectionStart;\r\n const event = { ...e };\r\n const origValue = e.target.value;\r\n const maskedPrevValue = format(field.value) || '';\r\n\r\n // Note - we call format function to clear the input value\r\n // to remove exceeded characters\r\n event.target.value = parse(format(origValue));\r\n const maskedValue = format(event.target.value);\r\n\r\n const diffCaretPosistion = maskedValue.length - maskedPrevValue.length;\r\n currentSelection += (diffCaretPosistion > 1 ? diffCaretPosistion : 0);\r\n\r\n field.onChange(event);\r\n\r\n onChange(event.target.value);\r\n selectionStart.current = currentSelection;\r\n }}\r\n {...fieldProps}\r\n />\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default InputField;\r\n","export const user = {\r\n name: 'Maria',\r\n surname: 'Luiza',\r\n recordLocator: 'LJUDWR'\r\n};\r\n\r\nexport const flights = {\r\n flightNumber: '4488',\r\n journeySellKey:\r\n 'AD~4488~ ~~GRU~12/04/2019 18:40~REC~12/04/2019 20:50~^AD~5373~ ~~REC~12/04/2019 22:05~FOR~12/04/2019 23:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-04T18:40:00',\r\n sta: '2019-12-04T23:35:00',\r\n flightInformation: 'Conexão'\r\n};\r\n\r\nexport const SUGGESTED_FLIGHTS_LIST = {\r\n success: true,\r\n data: {\r\n flightSuggestion: [\r\n {\r\n flightNumber: '4488',\r\n journeySellKey:\r\n 'AD~4488~ ~~GRU~12/04/2019 18:40~REC~12/04/2019 20:50~^AD~5373~ ~~REC~12/04/2019 22:05~FOR~12/04/2019 23:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-04T18:40:00',\r\n sta: '2019-12-04T23:35:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '2438',\r\n journeySellKey:\r\n 'AD~2438~ ~~GRU~12/04/2019 19:25~CNF~12/04/2019 20:45~^AD~2456~ ~~CNF~12/04/2019 23:40~FOR~12/05/2019 01:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-04T19:25:00',\r\n sta: '2019-12-05T01:35:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '5016',\r\n journeySellKey:\r\n 'AD~5016~ ~~GRU~12/04/2019 19:30~SDU~12/04/2019 20:35~^AD~2458~ ~~SDU~12/04/2019 21:40~CNF~12/04/2019 22:45~^AD~2456~ ~~CNF~12/04/2019 23:40~FOR~12/05/2019 01:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-04T19:30:00',\r\n sta: '2019-12-05T01:35:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '2522',\r\n journeySellKey:\r\n 'AD~2522~ ~~GRU~12/04/2019 20:20~CNF~12/04/2019 21:30~^AD~2456~ ~~CNF~12/04/2019 23:40~FOR~12/05/2019 01:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-04T20:20:00',\r\n sta: '2019-12-05T01:35:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '2488',\r\n journeySellKey:\r\n 'AD~2488~ ~~GRU~12/05/2019 05:05~REC~12/05/2019 07:25~^AD~4234~ ~~REC~12/05/2019 08:05~FOR~12/05/2019 09:30~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T05:05:00',\r\n sta: '2019-12-05T09:30:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '2410',\r\n journeySellKey:\r\n 'AD~2410~ ~~GRU~12/05/2019 06:00~CNF~12/05/2019 07:15~^AD~4200~ ~~CNF~12/05/2019 09:45~REC~12/05/2019 11:15~^AD~5346~ ~~REC~12/05/2019 12:25~FOR~12/05/2019 13:50~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T06:00:00',\r\n sta: '2019-12-05T13:50:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '2572',\r\n journeySellKey:\r\n 'AD~2572~ ~~GRU~12/05/2019 09:05~REC~12/05/2019 11:15~^AD~5346~ ~~REC~12/05/2019 12:25~FOR~12/05/2019 13:50~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T09:05:00',\r\n sta: '2019-12-05T13:50:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '6954',\r\n journeySellKey:\r\n 'AD~6954~ ~~GRU~12/05/2019 13:05~REC~12/05/2019 15:30~^AD~2710~ ~~REC~12/05/2019 18:35~FOR~12/05/2019 20:00~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T13:05:00',\r\n sta: '2019-12-05T20:00:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '6954',\r\n journeySellKey:\r\n 'AD~6954~ ~~GRU~12/05/2019 13:05~REC~12/05/2019 15:30~^AD~6901~ ~~REC~12/05/2019 16:45~FOR~12/05/2019 18:15~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T13:05:00',\r\n sta: '2019-12-05T18:15:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '4945',\r\n journeySellKey:\r\n 'AD~4945~ ~~GRU~12/05/2019 15:35~REC~12/05/2019 17:45~^AD~2710~ ~~REC~12/05/2019 18:35~FOR~12/05/2019 20:00~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T15:35:00',\r\n sta: '2019-12-05T20:00:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '4488',\r\n journeySellKey:\r\n 'AD~4488~ ~~GRU~12/05/2019 18:40~REC~12/05/2019 20:50~^AD~5373~ ~~REC~12/05/2019 22:05~FOR~12/05/2019 23:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T18:40:00',\r\n sta: '2019-12-05T23:35:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '2438',\r\n journeySellKey:\r\n 'AD~2438~ ~~GRU~12/05/2019 19:25~CNF~12/05/2019 20:45~^AD~2456~ ~~CNF~12/05/2019 23:40~FOR~12/06/2019 01:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T19:25:00',\r\n sta: '2019-12-06T01:35:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '5016',\r\n journeySellKey:\r\n 'AD~5016~ ~~GRU~12/05/2019 19:30~SDU~12/05/2019 20:35~^AD~2458~ ~~SDU~12/05/2019 21:40~CNF~12/05/2019 22:45~^AD~2456~ ~~CNF~12/05/2019 23:40~FOR~12/06/2019 01:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T19:30:00',\r\n sta: '2019-12-06T01:35:00',\r\n flightInformation: 'Conexão'\r\n },\r\n {\r\n flightNumber: '2522',\r\n journeySellKey:\r\n 'AD~2522~ ~~GRU~12/05/2019 20:20~CNF~12/05/2019 21:30~^AD~2456~ ~~CNF~12/05/2019 23:40~FOR~12/06/2019 01:35~',\r\n departureStation: 'GRU',\r\n arrivalStation: 'FOR',\r\n carrierCode: 'AD',\r\n std: '2019-12-05T20:20:00',\r\n sta: '2019-12-06T01:35:00',\r\n flightInformation: 'Conexão'\r\n }\r\n ],\r\n message: '',\r\n success: true\r\n },\r\n notifications: null\r\n};\r\n\r\nexport const mockPost = () => {\r\n return new Promise((resolve, reject) => {\r\n const mockSuccess = {\r\n success: true,\r\n data: {\r\n flightNumber: '1234',\r\n carrierCode: 'AD',\r\n recordLocator: 'ABC123',\r\n std: '2019-12-04T18:16:02.1709646-02:00',\r\n staFinalDestination: '2019-12-04T18:16:02.1709722-02:00',\r\n departureStation: 'VCP',\r\n arrivalStationFinalDestination: 'CNF'\r\n },\r\n notifications: null\r\n };\r\n\r\n const mockError = {\r\n success: false,\r\n data: null,\r\n notifications: [\r\n {\r\n key: 'ConfirmIropSelfService',\r\n value: 'Reacomodação já realizada para reserva QH67FK.'\r\n }\r\n ]\r\n };\r\n\r\n const withError = false;\r\n\r\n setTimeout(() => {\r\n if (withError) {\r\n resolve(mockError);\r\n } else {\r\n resolve(mockSuccess);\r\n }\r\n }, 2000);\r\n });\r\n};\r\n","import React, { Component } from 'react';\r\nimport styled from 'styled-components';\r\nimport { Formik, Field } from 'formik';\r\nimport InputField from '../../components/InputField';\r\nimport Button from '../../components/Button';\r\nimport * as Yup from 'yup';\r\nimport { user } from '../../consts/MOCK_DATA';\r\nimport { devices } from '../../styles/breakpoints';\r\n\r\nconst FieldContainer = styled.div`\r\n margin-bottom: 28px;\r\n`;\r\n\r\nconst ActionContainer = styled.div`\r\n position: fixed;\r\n bottom: 0px;\r\n width: calc(100% - 32px);\r\n left: 0px;\r\n margin-left: 16px;\r\n\r\n @media ${devices.desktop} {\r\n position: relative;\r\n }\r\n`;\r\n\r\nconst Form = styled.form`\r\n @media ${devices.desktop} {\r\n width: 368px;\r\n margin-top: 32px;\r\n }\r\n`;\r\n\r\nexport default class SearchReservationForm extends Component {\r\n _getValidations = () => {\r\n return Yup.object().shape({\r\n reservationCode: Yup.string().required(),\r\n lastName: Yup.string().required()\r\n });\r\n };\r\n\r\n _onSubmit = values => {\r\n const { history } = this.props;\r\n /*\r\n ~ TODO ~\r\n MAKE REQUEST\r\n PASS USER TO ROUTE\r\n */\r\n history.push('u/flight-introduction', {\r\n user\r\n });\r\n };\r\n render() {\r\n return (\r\n \r\n {({ resetForm, values, handleSubmit, isValid }) => {\r\n return (\r\n {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n handleSubmit();\r\n }}\r\n >\r\n \r\n value}\r\n parse={value => value}\r\n onChange={value => value}\r\n onBlur={value => value}\r\n />\r\n \r\n \r\n value}\r\n parse={value => value}\r\n onChange={value => value}\r\n onBlur={value => value}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }}\r\n \r\n );\r\n }\r\n}\r\n","import styled from 'styled-components';\r\n\r\nexport const Box = styled.div.attrs(props => ({\r\n justifyContent: props.justifyContent || 'flex-start',\r\n alignItems: props.alignItems || 'flex-start',\r\n column: props.column || false\r\n}))`\r\n display: flex;\r\n align-items: ${props => props.alignItems};\r\n justify-content: ${props => props.justifyContent};\r\n flex-direction: ${props => (props.column ? 'column' : 'row')};\r\n`;\r\n","import React, { Component } from 'react';\r\nimport styled from 'styled-components';\r\nimport Title from '../../components/Title';\r\nimport Layout from '../../components/Layout';\r\nimport { colors } from '../../styles/colors';\r\nimport SearchReservationForm from './SearchReservationForm';\r\nimport { devices } from '../../styles/breakpoints';\r\nimport canceledIllustration from '../../images/canceled-flight.svg';\r\nimport { MediaQuery } from '../../components/MediaQuery';\r\nimport { Box } from '../../components/Flex';\r\n\r\nconst Container = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n padding: 16px;\r\n\r\n @media ${devices.desktop} {\r\n max-width: 1170px;\r\n margin: 0 auto;\r\n\r\n ${Box} {\r\n margin-top: 48px;\r\n }\r\n\r\n ${MediaQuery} {\r\n flex: 1;\r\n\r\n img {\r\n margin: 0 auto;\r\n }\r\n }\r\n }\r\n`;\r\n\r\nconst Text = styled.p`\r\n font-size: 16px;\r\n color: ${colors.GRAY_DARKEST};\r\n margin-top: 18px;\r\n\r\n @media ${devices.desktop} {\r\n font-size: 20px;\r\n }\r\n`;\r\n\r\nconst FormWrapper = styled.div`\r\n flex: 1;\r\n`;\r\n\r\nexport default class SearchReservation extends Component {\r\n render() {\r\n const { history } = this.props;\r\n return (\r\n \r\n \r\n Alteração de voo\r\n \r\n \r\n Insira os dados abaixo para buscar sua reserva\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport {\r\n BrowserRouter as Router,\r\n Route,\r\n Redirect,\r\n Switch\r\n} from 'react-router-dom';\r\n\r\nimport Logged from './flows/logged';\r\n\r\nimport './App.css';\r\nimport SearchReservation from './flows/search-reservation';\r\n\r\nclass App extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hasSuggestion: false,\r\n isLogged: true,\r\n pnr: '',\r\n isReady: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._getPNR();\r\n\r\n this.setState({ isReady: true });\r\n }\r\n\r\n _getPNR = () => {\r\n const url = window.location.href.toUpperCase();\r\n\r\n const urlObj = new URL(url);\r\n\r\n const pnrParam = urlObj.searchParams.get('PNR');\r\n const isEmail = urlObj.searchParams.get('EMAIL') === '';\r\n\r\n if (!pnrParam) {\r\n this.setState({ isLogged: false });\r\n } else {\r\n this.setState({ pnr: pnrParam, email: isEmail });\r\n }\r\n };\r\n\r\n _redirectHandler = () => {\r\n const { isLogged, hasSuggestion, pnr, email } = this.state;\r\n if (isLogged && email) {\r\n return {\r\n pathname: 'u/flight-change',\r\n state: {\r\n hasSuggestion,\r\n pnr,\r\n email\r\n }\r\n };\r\n } else if (isLogged) {\r\n return {\r\n pathname: 'u/flight-introduction',\r\n state: {\r\n hasSuggestion,\r\n pnr\r\n }\r\n };\r\n }\r\n return 'search-reservation';\r\n };\r\n\r\n render() {\r\n const { hasSuggestion, isReady } = this.state;\r\n\r\n if (!isReady) return null;\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n (\r\n \r\n )}\r\n />\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","module.exports = __webpack_public_path__ + \"static/media/canceled-flight.159e2dc0.svg\";"],"sourceRoot":""}