{"version":3,"sources":["Lib/variables.js","Lib/utils.js","Lib/axios.js","Pages/Home/Section/renew/Popup.js","theme.js","Components/User/Mate/reserve.js","Components/Common/input.js","Components/Common/button.js","Components/modal.js","Pages/Home/Section/reserve.js","Pages/Home/Section/renew/MainNumber.js","Pages/Home/Section/renew/main.js","Pages/Home/Section/renew/video.js","Pages/Home/Section/renew/guide.js","Pages/Home/Section/renew/banner.js","Pages/Home/home.styled.js","Pages/Home/Section/renew/siteBanner.js","Pages/Home/Section/renew/numberCount.js","Pages/Home/Section/partners.js","Pages/Home/home.js","Lib/Api/app.js","Lib/Api/auth.js","Lib/middleware.js","Reducer/Modules/app.js","Reducer/Modules/auth.js","Pages/Home/home.container.js","Pages/NotFound.js","Pages/Auth/AuthPages/Login/login.styled.js","Components/Common/tab.js","Components/Common/text.js","Components/Common/container.js","Lib/regex.js","Components/Reserve/step.js","Components/Reserve/editStep.js","Components/newModal.js","Pages/Auth/AuthPages/Login/KakaoLogin.js","Pages/Auth/AuthPages/Login/login.js","Pages/Auth/AuthPages/Login/login.container.js","Pages/Auth/AuthPages/MainRegister/main.js","Pages/Auth/AuthPages/MainRegister/main.styled.js","Pages/Auth/AuthPages/MainRegister/main.container.js","Pages/Auth/AuthPages/Register/register.styled.js","Pages/Policy/Terms/terms.styled.js","Pages/Policy/Terms/terms.js","Pages/Policy/Terms/terms.container.js","Pages/Policy/Privacy/privacy.styled.js","Pages/Policy/Privacy/privacy.js","Pages/Policy/Privacy/privacy.container.js","Pages/Policy/Marketing/marketing.styled.js","Pages/Policy/Marketing/marketing.js","Pages/Policy/Marketing/marketing.container.js","Pages/Policy/Essential/Normal/normal.styled.js","Pages/Policy/Essential/Normal/normal.js","Pages/Policy/Essential/Normal/normal.container.js","Pages/Policy/Essential/Sensitive/sensitive.styled.js","Pages/Policy/Essential/Sensitive/sensitive.js","Pages/Policy/Essential/Sensitive/sensitive.container.js","Pages/Policy/Selective/Normal/normal.styled.js","Pages/Policy/Selective/Normal/normal.js","Pages/Policy/Selective/Normal/normal.container.js","Pages/Policy/Selective/Sensitive/sensitive.styled.js","Pages/Policy/Selective/Sensitive/sensitive.js","Pages/Policy/Selective/Sensitive/sensitive.container.js","Pages/Policy/Advertisement/advertisement.styled.js","Pages/Policy/Advertisement/advertisement.js","Pages/Policy/Advertisement/advertisement.container.js","Pages/Auth/AuthPages/Register/register.js","Pages/Auth/AuthPages/Register/register.container.js","Pages/Auth/AuthPages/Logout/index.js","Pages/Auth/AuthPages/Find/find.styled.js","Pages/Auth/AuthPages/Find/find.js","Pages/Auth/AuthPages/Find/find.container.js","Pages/Auth/AuthPages/Mate/mate.styled.js","Components/User/Mate/auth.js","Pages/Auth/AuthPages/Mate/mate.js","Pages/Auth/AuthPages/Mate/mate.container.js","Pages/Auth/AuthPages/Normal/normal.styled.js","Components/User/Normal/auth.js","Components/User/Normal/statistics.js","Components/User/Normal/navi.js","Pages/Auth/AuthPages/Profile/profile.styled.js","Pages/Guide/guide.styled.js","Pages/Auth/AuthPages/Profile/profile.js","Pages/Auth/AuthPages/Card/card.styled.js","Pages/Auth/AuthPages/Card/card.js","Pages/Auth/AuthPages/Card/cardInfoCheck.js","Pages/Auth/AuthPages/Profile/profileInfoCheck.js","Components/Columns/normal.js","Pages/Auth/AuthPages/Normal/normal.js","Pages/Auth/AuthPages/Normal/normal.container.js","Pages/Auth/AuthPages/Pending/pending.styled.js","Pages/Auth/AuthPages/Pending/pending.js","Pages/Auth/AuthPages/Pending/pending.container.js","Pages/Auth/auth.js","Pages/Auth/auth.styled.js","Pages/Auth/auth.container.js","Pages/Company/company.styled.js","Pages/Company/Section/fst.js","Pages/Company/Section/snd.js","Pages/Company/Section/trd.js","Pages/Company/Section/fth.js","Pages/Company/Section/fifth.js","Pages/Company/Section/sth.js","Pages/Company/company.js","Pages/Company/company.container.js","Pages/Faq/faq.styled.js","Pages/Faq/faq.js","Pages/Faq/faq.container.js","Pages/Product/ProductPages/Buy/buy.styled.js","Pages/Product/ProductPages/Buy/buy.js","Pages/Product/ProductPages/Buy/buy.container.js","Pages/Product/product.js","Pages/Product/product.container.js","Pages/Reserve/reserve.styled.js","Pages/Apply/Ready/ready.styled.js","Pages/LongtermCare/longTermCare.js","Pages/Success/success.js","Pages/Manual/Service/servicePDF.js","Pages/Manual/Service/service.js","Pages/Manual/Platform/platformPDF.js","Pages/Manual/Platform/platform.js","Pages/Manual/MateEduVideo/VideoList/Video1.js","Pages/Manual/MateEduVideo/VideoList/Video2.js","Pages/Manual/MateEduVideo/VideoList/Video3.js","Pages/Manual/MateEduVideo/VideoList/Video4.js","Pages/Manual/MateEduVideo/eduVideo.js","Pages/NewsEvent/List/list.styled.js","Pages/Review/List/list.styled.js","Components/Columns/user.js","Pages/NewsEvent/List/list.js","Lib/Api/newsEvent.js","Reducer/Modules/newsEvent.js","Pages/NewsEvent/List/list.container.js","Pages/NewsEvent/Info/info.styled.js","Components/Common/block.js","Pages/NewsEvent/Info/info.js","Pages/NewsEvent/Info/info.container.js","Pages/NewsEvent/index.js","Reducer/Modules/review.js","Lib/Api/review.js","Pages/Review/Add/add.styled.js","Components/Templates/Review/header.js","Pages/Review/Add/add.js","Pages/Review/Add/add.container.js","Pages/Review/List/list.js","Pages/Review/List/list.container.js","Pages/Review/MyList/mylist.styled.js","Pages/Review/MyList/mylist.js","Pages/Review/MyList/mylist.container.js","Pages/Apply/Ready/ready.js","Pages/Apply/Form/form.styled.js","Pages/Apply/Form/form.js","Pages/Apply/MateApplyForm/mateApply.styled.js","Pages/Apply/MateApplyForm/mateApply.js","Pages/Guide/Section/nav.js","Pages/Guide/Section/concept.js","Pages/Guide/Section/detail.js","Pages/Guide/Section/usage.js","Pages/Guide/Section/merit.js","Pages/Guide/Section/withmate.js","Pages/Guide/Section/banner.js","Pages/Guide/guide.js","Pages/Guide/guide.container.js","Pages/Nemt/nemt.styled.js","Pages/Nemt/nemt.js","Pages/Nemt/nemt.container.js","Pages/Reserve/patientListModal.js","Pages/Reserve/mateListModal.js","Pages/Reserve/cardListModal.js","Pages/Reserve/reserve.js","Pages/MetLife/MetLifeLanding/Section/reserve.js","Pages/MetLife/MetLifeLanding/Section/renew/main.js","Pages/MetLife/MetLifeLanding/Section/renew/guide.js","Pages/MetLife/MetLifeLanding/home.styled.js","Pages/MetLife/MetLifeLanding/Section/renew/numberCount.js","Pages/MetLife/MetLifeLanding/Section/partners.js","Pages/MetLife/MetLifeLanding/home.js","Pages/MetLife/MetLifeLanding/home.container.js","Pages/MetLife/MetLifeGuide/guide.styled.js","Pages/MetLife/MetLifeGuide/Section/nav.js","Pages/MetLife/MetLifeGuide/Section/concept.js","Pages/MetLife/MetLifeGuide/Section/detail.js","Pages/MetLife/MetLifeGuide/Section/usage.js","Pages/MetLife/MetLifeGuide/Section/merit.js","Pages/MetLife/MetLifeGuide/Section/withmate.js","Pages/MetLife/MetLifeGuide/Section/banner.js","Pages/MetLife/MetLifeGuide/guide.js","Pages/MetLife/MetLifeGuide/guide.container.js","Pages/MetLife/Review/review.styled.js","Pages/MetLife/Review/review.js","Pages/MetLife/Review/review.container.js","Pages/MetLife/NewsEvent/List/list.styled.js","Pages/MetLife/NewsEvent/List/list.js","Pages/MetLife/NewsEvent/List/list.container.js","Pages/MetLife/NewsEvent/Info/info.styled.js","Pages/MetLife/NewsEvent/Info/info.js","Pages/MetLife/NewsEvent/Info/info.container.js","Pages/MetLife/NewsEvent/index.js","Pages/MetLife/Faq/faq.styled.js","Pages/MetLife/Faq/faq.js","Pages/MetLife/Faq/faq.container.js","Pages/MetLife/MetLifePolicy/Privacy/privacy.styled.js","Pages/MetLife/MetLifePolicy/Privacy/privacy.js","Pages/MetLife/MetLifePolicy/Privacy/privacy.container.js","Pages/MetLife/MetLifePolicy/Terms/terms.styled.js","Pages/MetLife/MetLifePolicy/Terms/terms.js","Pages/MetLife/MetLifePolicy/Terms/terms.container.js","Pages/Big5Department/department.js","Components/Templates/Nav/nav.js","Components/Templates/Nav/nav.styled.js","Components/Templates/Nav/nav.container.js","Components/Templates/MetLifeNav/nav.js","Components/Templates/MetLifeNav/nav.styled.js","Components/Templates/MetLifeNav/nav.container.js","Components/Templates/Footer/footer.js","Components/Templates/Footer/footer.styled.js","Components/Templates/Footer/footer.container.js","App.js","serviceWorker.js","Reducer/index.js","index.js","Pages/Home/Section/renew/img/new-gov-care.png","Pages/Auth/AuthPages/Login/o2.png","Pages/Auth/AuthPages/Login/o.png","Pages/Success/login_bg.png","Pages/Success/checkpoint.png","Styles/index.js","Styles sync //.scss$"],"names":["USER","MATE","LOCAL","KAKAO","ASSIST","UNEMER","ScrollTop","prevProps","this","props","location","window","scrollTo","children","React","PureComponent","withRouter","currencyFormatter","currency","reg","n","test","replace","combineDateAndTime","date","time","minute","length","moment","format","toDate","colorParserByStatus","status","axios","defaults","withCredentials","client","create","headers","post","paramsSerializer","params","qs","stringify","indices","baseURL","interceptors","request","use","config","error","Promise","reject","response","localStorage","clear","reload","Popup","useState","popupData","setPopupData","isOpen","setIsOpen","setLoading","setError","VISITED_BEFORE_DATE","Number","getItem","VISITED_NOW_DATE","Date","getDate","useEffect","get","then","now","validPopups","data","filter","popup","startDate","endDate","isPublic","console","log","catch","handleClose","onRequestClose","style","modalStyles","PopupContainer","PopupImage","src","photo","alt","CloseStyle","Close","onClick","setItem","String","styled","div","img","span","overlay","backgroundColor","content","width","height","margin","padding","borderRadius","top","left","transform","fontSize","sizeHandler","size","ColorPallete","blue50","blue100","green100","dark100","dark80","dark70","dark60","dark50","dark30","dark20","dark10","NoCatchedList","list","detailHandler","onRefresh","FullContainer","Inner","NoCatchTitle","RefreshButton","ListConatiner","Array","isArray","map","item","serviceType","productInfo","usePro","useBasic","service","serviceName","name","key","_id","toString","patient","reserveDate","destination","shortStarting","call","onDetail","ReserveItem","usageTime","ItemContainer","TitleSection","ItemColumn","ItemTitle","ItemContents","color","ContentSection","DetailButton","EmptyList","p","hiddenMobile","DivisionLine","big","x_small","small","BorderDivisionLine","Pallete","WithmateLabelText","WithmateLabel","required","rest","WithmateInput","InputTextButton","WithamteInputWithButton","withValue","inputConfig","buttonName","onButton","BorderFlexWrapper","WithmateTextarea","TextArea","middle","WithmateSelect","FlexWrapper","withHalf","StyledHotFix","WithmateDatePicker","WithmateValue","WithmateValueTip","FullWidthButton","a","border","bg","HalfWidthButton","RadiusFullWidthButton","RadiusHalfWidthButton","ButtonWrapper","half","MateReserveInfoModal","visibleHandler","info","onCatch","Container","ModalBlock","ModalTitle","ModalCloseButtons","ModalLabel","ModalInfo","transport","proPrice","basicPrice","WhiteButton","ModalFlexbox","paddingLeft","sex","marginBottom","comment","MateCallStatusModal","onNext","starting","contact","type","getNextStatus","BlueButton","ShareCarRequestModal","inputHandler","onSave","ModalLargeBlock","FlexBox","className","placeholder","value","corp","onChange","ev","target","address","manager","FlexFullBox","message","EmergencyCorpSearchModal","keyword","TableWrapper","TableHeaderWrapper","FlexColumn","addr1","includes","addr2","index","TableRowWrapper","EmptyTable","CardModal","state","modal","componentDidMount","modalValidation","lastTime","JSON","parse","subtract","setState","onClose","onCloseToday","id","Top","Title","Bottom","display","justifyContent","paddingTop","marginTop","MessageRow","history","push","EndBottom","CloseToday","CloseNow","ManagerModal","pathname","EventModal","NoticeModal","onCloseToday2","ContentRow","textAlign","MetlifeModal","MetlifePopup","BottomImage","WarningRow","WarningContentRow","Reserve","reserveModal","reserveInfo","refreshing","fetchList","debounce","mateId","resolve","onCatchCall","auth","warning","put","callId","result","success","SpinWrapper","MainNumber","SwiperCore","Navigation","Pagination","Autoplay","UserMain","UserMainContainer","UserMainInnerContainer","TitleSticker","WithmateSpecRow","GooglePlayButton","open","marginRight","BottomSection","ReserveButton","CallButton","swal","fire","title","text","icon","confirmButtonText","cancelButtonText","showCancelButton","isConfirmed","document","href","HighLight","ButtonCommon","GPButtonCommon","br","UserVideoSection","VideoSectionContainer","VideoSectionInnerContainer","VideoArea","controls","loop","autoplay","muted","playsinline","h4","UserGuideSection","UserGuideContainer","UserGuideInnerContainer","UserGuideTitle","UserGuideStepWrapper","TextStep","ImgStep","MainStepRow","webArrow","mArrow","source","description","num","MainStep","MainStepWrapper","MainStepImageSection","MainStepTextSection","StepIndex","StepTitle","StepDescription","split","word","KeepBr","UserMainBanner","goPage","BannerContainer","Description","LinkButton","HomeStyledContainer","UserMainTitleDeco","PartnerContainer","PartnerInnerContainer","PartnerTitle","PartnerListRow","PartnerItem","IntroduceSection","MobileBr","Withmate","UserNumberCount","RollingContainer","NumberLabel","faHospitalUser","paddingRight","end","suffix","fontWeight","faUsers","faRectangleList","SatisfactionContainer","SatisfactionLabel","ReviewContainer","direction","spaceBetween","slidesPerView","breakpoints","768","pagination","clickable","navigation","modules","allowTouchMove","threshold","delay","speed","ReviewMainContainer","ReviewMainInnerContainer","ImgStyle","alignItems","e","label","WithmatePartners","baseUrl","fstRow","sndRow","trdRow","fthRow","ftfRow","paddingBottom","HomePage","searchModal","emergencyList","emergencyKeyword","requestModal","requestInfo","onShareRequest","userType","prevState","modifyUserInfo","imageUpload","file","formData","FormData","append","register","termsOfUse","privacyPolicy","essentialGeneral","essentialSensitive","selectiveGeneral","selectiveSensitive","selectiveAdvertise","password","code","identify","reason","marketing","connection","recommenderName","longtermCare","birth","email","urlSource","search","addPatient","relate","age","environment","caution","addCard","userName","cardName","cardNum","year","month","getCardInfo","cardId","fetchCard","deleteCard","modifyCard","getMateInfo","fetchMate","getPatientInfo","patientId","fetchPatient","deletePatient","modifyPatient","checkAuth","onAddLongTermCare","userId","createReduxThunk","SUCCESS","FAILURE","dispatch","refreshToken","decoded","jwt","decode","authAPI","accessToken","payload","meta","getUserInfo","appAPI","getServiceInfo","buyTicket","serviceReserve","getReserveList","getReserveInfo","page","reserveId","getContractPartners","acceptCall","cancelCall","completeCall","modifyReserve","cancelReserve","editViewType","createAction","input","editResrveForm","editContractForm","editBuyForm","editUserForm","editReserveDetailView","editReserveLatestView","editCallPage","appReducer","handleActions","action","produce","draft","loading","addTime","payMethod","_","isEmpty","l","count","userInfo","serviceInfo","reserveForm","report","reserve","unemergency","assist","contractForm","buyForm","mateCallPage","mateCallList","reserveList","mateReserveList","mateViewType","mateReserveLatest","mateReserveDetail","payHistory","partners","contractServices","login","logout","checkUserId","findPassword","modifyPassword","newPassword","withdrawlUser","withdrawlKakao","confirmEmailAuth","verificationCode","editAuth","editLoginForm","editRegisterForm","editAddPatientForm","editAddCardForm","editFindPasswordForm","editPasswordForm","initialState","allowed","ticket","loginForm","registerForm","agree","longTermCare","longTermCareInfo","patientList","patientInfo","addPatientForm","cardList","cardInfo","addCardForm","findForm","passwordForm","reNewPassword","infoForm","mateInfo","authReducer","region","gradePresence","gradeLevel","HomeContainer","prevList","fetchPartners","connect","app","editForm","editLatest","editDetail","NotFoundPage","verticalAlign","LoginStyledContainer","TabContainer","Tab","active","H1","h1","bold","h2","h3","h5","h6","isNotNumber","celluarValidate","phone","result2","lang","weekdays","weekdaysShort","EditStep1","inputDeepHandler","setDestination","setStarting","onTab","tab","deepType","onSex","disabled","undefined","Option","reserveHotFix","some","r","parseFloat","nativeEvent","preventDefault","fix","EditStep2","onModify","sick","onCalendar","meetDate","locale","inputReadOnly","disabledDate","current","add","holidayKR","isSolarHoliday","meetTime","numValue","meetMinute","usingPoint","RelativeWrapper","SigleButtonWrapper","SigleButton","AlertMessage","customStyles","zIndex","boxShadow","right","bottom","CustomModal","addEventListener","onCheckSize","visible","body","overflow","componentWillUnmount","removeEventListener","windowWidth","innerWidth","windowHeight","innerHeight","innerContent","getElementById","childrenId","clientHeight","maxWidth","onAfterOpen","CommonWithmateModal","onCancel","onOk","ModalInnerContainer","noClose","CloseButton","CommonModalTitle","CommonModalSubtitle","wordBreak","cancelText","confirmText","NoramlReserveEditModal","step","NewHandleReportModal","WideModalTitle","AlertText","care","medicine","nextSchedule","mateComment","doctorComment","NoReportModal","ReportMoal","timeline","selectedServiceName","ReportInfoBlock","createdAt","ReportDescription","complete","diff","receipt","mode","Item","start","arrived","careStart","careDone","treatmentStart","treatmentDone","careStart_second","careDone_second","treatmentStart_second","treatmentDone_second","careStart_third","careDone_third","treatmentStart_third","treatmentDone_third","backStart","onlyMobile","withSub","Kakao","KakaoLogin","onEdit","checkUser","gender","modalTitle","modalInfo","loginWithKakao","that","Auth","scope","setAccessToken","access_token","API","url","kakao_account","fail","viewToShow","ButtonWrap","ButtonWrap2","Component","Styled","KakaoLoginImg","KakaoLoginImgM","LoginComponent","onPressEnter","LoginPage","goBack","MainComponent","MainRegisterStyledContainer","MainRegisterPage","RegisterStyledContainer","TermsStyledContainer","component","TermsComponent","TermsContainer","isComponent","PrivacyStyledContainer","PrivacyComponent","PrivacyContainer","MarketingStyledContainer","MarketingComponent","class","MarketingContainer","NromalStyledContainer","EssentialComponent","NormalContainer","SensitiveComponent","SensitiveContainer","NormalComponent","SensitiveStyledContainer","AdvertisementStyledContainer","AdvertisementComponent","AdvertisementContainer","RegisterComponent","createdAuthCode","authCodeCheck","vaildated","handleCheckAllChange","checkAll","onSendMailHandler","event","alert","onCheckHandler","notification","pageOneValidator","pageSndValidator","onRegister","repassword","validator","isEmail","setPhoto","originFileObj","formCompleteStatus","valid","Agree","checked","AgreeLinkText","cursor","maxLength","marginLeft","borderColor","outline","Alert","RegisterPage","LogoutPage","StyledFindContainer","Find","editFindForm","onFind","setTimeout","FindPage","StyledMateContainer","UserPhoto","GuideRowWrapper","GuideRowWrapper2","GuideContainer","GuideDescriptionSectionTitle","GuideDescriptionSection","GuideDescriptionSectionContent","StudyButton","InputFilter","keywordHandler","FilterWrapper","CalleList","onRow","reserveCode","Mate","reservedFilter","onRowModal","rowDetail","handleReportModal","callList","syncStep","componentDidUpdate","match","d","reportId","noReportModal","updateBasicInfo","newPhoto","modify","editPassword","withdrawl","temp","tabHandler","onNextProcess","startOf","valueOf","unemergencyService","doReceipt","doStart","doArrive","doCare","doCareDone","doBackStart","doComplete","openReportForm","assistService","err","onAddReport","filteredList","toLowerCase","m","hidden","accept","files","click","URL","createObjectURL","doProducts","link","footer","flex","GuideBlock","GuideBlock2","Filter","MatePage","StyledNormalContainer","PointBoxRow","PointBox","PointBox2","PointBox3","PointContent","PointBoxTitle","PointTotal","PointHistoryRow","PointHistoryNameRow","PointHistoryValueRow","NoHistory","ReserveList","onDetailModal","onMateModal","onReport","onMate","mate","confirm","UserStatistics","pro","basic","UserContainer","UserNavigation","onPatientModal","NaviWrapper","ProfileStyledContainer","StyledContainer","GuideNavContainer","InnerContainer","GuideNavWrapper","NavTab","GuideConceptContainer","GuideConceptTitle","DesktopBr","MeritContainer","MeritHeaderWrapper","MeritCardList","MeritCardWrapper","MeritCardNumber","MeritCardTitleRow","MeritCardDesc","GuideDetailContainer","GuideDetailServiceCardWrapper","GuideDetailServiceCard","GuideCardImage","GuideCardSpecTitle","GuideCardSpecRow","GuideCardName","GuideCardType","GuideCardDescription","GuideDetailSubFlexWrapper","GuideDetailSubFlexbox","GuideUsingContainer","GuideUsingSubFlexWrapper","GuideUsageFlexbox","WithmateContainer","FlexDivWrapper","HiddenType","mHidden","BigSideBox","SmallSideBox","WithmateBg","WithmateTitle","position","background","WebkitOverflowScrolling","NewProfileComponent","onStarting","daum","Postcode","oncomplete","sido","sigungu","bname","roadAddress","buildingName","onProfile","ariaHideApp","trim","CardStyledContainer","onCard","YMWrapper","ModifyProfileComponent","stopPropagation","patientColumn","onDelete","dataIndex","align","render","EditOutlined","DeleteOutlined","cardColumn","slice","NormalUser","paidFilter","kakaoModal","selected","cancelModal","modifyModal","detailModalPage","reserveDetailModal","mateModal","serviceStatus","serviceModal","addHalfTime","totalPro","totalBasic","pointUsingHistory","pointAddHistory","couponAddHistory","patientModal","patientModifyModal","cardModal","cardModifyModal","appointedCode","patientModalOff","patientModifyModalOff","cardModalOff","cardModifyModalOff","fetchUserInfo","reserves","actionType","callStatus","onRematch","warn","confirmReserve","onViewReport","onReportMoal","onPatientModifyModal","onCardModal","onCardModifyModal","row","html","onFetchPatientInfo","onPatientModify","onPatientDelete","onCardModify","onCardDelete","kakaoUnlink","onAddCoupon","couponName","couponValue","handleChange","dataSource","columns","pageSize","Password","point","addedAt","leftValue","usedAt","CouponInput","review","starCount","score","renderStarIcon","onStarClick","NormalPage","StyledPendingContainer","Pending","PendingPage","dsipatch","AuthPage","exact","path","Login","Logout","Register","Main","Normal","NotFound","AuthStyledContainer","AuthPages","StyledCompanyContainer","FstBlock","SndBlock","TrdBlock","FthBlock","data-aos","data-aos-anchor-placement","data-aos-duration","CoCompany","StyledCoCompany","SthSection","Company","CompanyPage","StyledFaqContainer","Panel","FAQ","hash","to","scroll","el","scrollIntoView","behavior","block","expandIconPosition","bordered","expandIcon","isActive","rotate","header","rowIndex","PanelHeader","PanelContent","FAQContainer","StyledBuyContainer","BuyTicket","edit","payment","defaultPrice","totalPrice","IMP","init","request_pay","pg","pay_method","merchant_uid","amount","buyer_email","buyer_name","buyer_tel","m_redirect_url","rsp","productCode","paid_amount","productId","merchantUid","impUid","imp_uid","unit","paidStatus","paid","card_name","bankName","bank_name","cardQuota","card_quota","buyerEmail","discount","min","max","val","formatter","BuyTicketPage","ProductRenderPages","Buy","ProductPages","ReservePageContainer","ResrevePageInnerContainer","smallPadding","mobileBg","mobieBg","ReserveTopCover","isMain","TopBannerSubDescription","TopBannerSection","TopBannerText","TopBannerDescription","StepSectionContainer","StepButtonWrapper","StepButton","button","UnderLineText","StepArrow","NextStepGudieContainer","useBg","NextStepEmoj","NextStepTitle","NextStepArrowDown","ServiceSectionContainer","ServiceSectionTitle","ServiceSectionDescription","ServiceCardList","ServiceCardWrapper","on","ServiceCardButton","ServiceTypeSectionContainer","gap","ServiceTypeWrapper","ServiceTypeCardWrapper","ServiceTypeCardImg","ServiceTypeName","ServiceTypeDescription","NextStepButton","LastStepButton","FormContainer","FormWrapper","FormMainTitle","FormMainAlert","ServiceName","Sexes","LabelDescription","FlexFormWrapper","ResultFormWrapper","LabelAndValueRow","LabelValue","PriceValue","PriceDetailLabel","PriceDetailValue","DashAndText","CongraturateLogo","DoneResultWrapper","MobileStepImage","TopWrapper","BottomWrapper","MediumText","Noti","ApplyButton","FlexTitle","Contact","ContactTime","Link","LongTermCareComponent","onLongTermCare","SuccessComponent","backgroundImage","Background","Checkpoint","textAlgn","ServicePDF","iFrameHeight","frameBorder","ManualComponent","PlatformPDF","EduVideo1","allow","allowFullScreen","EduVideo2","EduVideo3","EduVideo4","StyledListContainer","HeaderButton","CountDisplay","CollapseContainer","CollapseHeader","CollapseTab","CollapseTabOnlyDesktop","PanelField","onlyDesktop","Star","ReviewTextWrapper","ReviewText","MyReview","ReviewMobileInfo","ReviewerName","newsEvent","Event","rowKey","newsEventList","addNewsEvent","url2","urlSource2","getNewsEventInfo","newsEventId","newsEventAPI","fetchNewsEvent","newsEventInfo","InfoContainer","StyledInfoContainer","InfoBlock","borderBottom","fetchInfo","Label","objectFit","whiteSpace","float","ValueBox","NewsEvent","List","Info","addReview","editReview","reviewId","reviewList","reviewPage","StyledAddContainer","WritePaper","FormHeader","FormTitle","FormSubtitle","FormTypeWrapper","FormTypeBlock","FormTypeDesc","FormDescription","StarImg","FormButtonWrapper","FormButton","FormTitleRowWrapper","FormRowTitle","CheckboxGroup","HeaderContainer","HeaderWrapper","HeaderBlock","HeaderTitle","HeaderDescription","MainImageWrapper","MainImage","CommentPageHeader","desc","AddComment","star","useAgain","corpSatisfied","corpSatisfiedReason","doctorSatisfied","doctorSatisfiedReason","hope","checkReserveValidation","reviewStatus","starHandler","nextValue","prevValue","onAddReview","PaddingDiv","AddCommentPageContainer","getReserve","PerPage","CommentList","total","pageCnt","renderStar","fill","getAutoTitle","rate","user","parseInt","reply","CommentListPage","TableContainer","TableHeader","TableTitle","TableSubTitle","TableBody","TableRow","TableField","desktopOnly","TableButton","EmptyWrapper","EmptyImage","EmptyText","MyReviewList","onReserve","done_list","substr","MyCommentListPage","fetchReserveList","ReadyApplyPage","LargeText","InputWrapper","InputLabel","StyledInput","FormImgWrapper","photoFst","photoSnd","fileFst","fileSnd","photoFstValue","photoSndValue","fileFstValue","fileSndValue","onSpin","MateFormPage","fetchForm","form","sendForm","careCareer","question","_info","MateApplyPage","handleTrimChange","onAddress","editApply","onSendApply","connection_etc","activity_area","drive","care_experience","insurance","privacy","license_photo","image","join","si","GuideNav","activeTab","GuideConcept","GuideDetail","spec1","spec2","spec3","spec4","GuideCard","GuideUsage","Merit","number","MeritCard","Block","bigMargin","noMargin","GuideBanner","GuideBannerContainer","GuidePage","reserveType","mobile_menu","onRoute","popoverVisible","NemtTitleWrapper","NemtTitle","NemtServiceWrapper","NemtServiceFlexWrapper","NemtBox","NemtColumnBox","NemtBoxTitle","NemtServiceImageWrapper","NemtInfobox","NemtDescription","NemtPage","NemtContainer","onCheck","PatientProfileListComponent","onChoose","reservedStarting","walk","onChangeCheckbox","onUpdatePatient","hideOnSinglePage","mateListColumn","sorter","b","localeCompare","photoURL","mateList","getList","onUpdateMate","CardListComponent","onUpdateCard","ReservationPage","big5","local","corpBy","zzz","alzhe","chooseMate","fetchItemList","prevParams","usePoint","onPrevSetting","patientProfileListModal","onPrevSetting2","mateListModal","onPrevSetting3","cardListModal","isOption","onSelectService","isZzz","isAlzhe","reservedDestination","reservedShortStarting","shortDestination","reservedShortDestination","goSecondStep","querySelector","getClientRects","scrollY","goNextButton","onDestination","stepHandler","currentStep","recommender","recommenderContact","guardContact","mateGender","reserveTime","reserveMinute","mateName","installment","totalFee","proDiscount","basicDiscount","product","stepHandler2","prevStep","patientProfileListModalOff","mateListModalOff","cardListModalOff","mateContact","emoj","logo","onSelect","CustomButtonWrapper","BannerSection","StepSection","NextGuider","ServiceSection","mBg","Card","ServiceTypeSection","ServiceTypeCard","BasicForm","MainForm","allowClear","readonly","hour","ConfirmForm","_transport","_service","_point","DoneForm","DepartmentComponent","isChecked","setIsChecked","Set","checkedItems","setCheckedItems","checkedItemHandler","box","has","delete","parentNode","checkHandler","NavComponent","menu","onMobileMenuHandler","activeClassName","NavStyledContainer","NavContainer","FooterComponent","darkMode","indexOf","startsWith","rel","FooterStyledContainer","FooterContainer","Modal","setAppElement","App","AOS","Home","Product","Privacy","Terms","Marketing","EssentialNormal","EssentialSensitive","SelectiveNormal","SelectiveSensitive","Advertisement","MateReady","MateApplyForm_v2","MateApplyForm","ReviewList","ReviewMylist","ReviewAdd","LongTermCare","Success","SManual","PManual","EduVideo","MetLife","MetLifeNemt","MetLifeReviewList","MetLifeNewsEvent","MetLifeFAQ","MetLifePrivacy","MetLifeTerms","Department","Nemt","Boolean","hostname","reducers","combineReducers","store","createStore","applyMiddleware","thunk","ReactDOM","navigator","serviceWorker","ready","registration","unregister","module","exports","req","require","keys","forEach","webpackContext","webpackContextResolve","__webpack_require__","o","Error","Object"],"mappings":"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","file":"static/js/main.7c1942a8.chunk.js","sourcesContent":["export const BASE_URL = 'https://server.withmate.kr';\nexport const DEV = false;\n\n// info\nexport const COMPANY_NANE = 'WITHMATE';\nexport const COMPANY_NANE_EN = 'withmate';\nexport const CONTACT_TEL = '010-xxxx-xxxx';\nexport const CONTACT_EMAIL = 'withmate@mail.com';\nexport const CUSTOMER_SERVICE = 'customer@withmate.com';\nexport const USER = 'user';\nexport const MATE = 'mate';\nexport const LOCAL = 'local';\nexport const KAKAO = 'kakao';\nexport const ASSIST = 'assist';\nexport const UNEMER = 'unemergency';\nexport const HAPPYCARE = 'happycare';\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport moment from 'moment';\nimport { UNEMER } from '../Lib/variables';\n\nclass ScrollTop extends React.PureComponent {\n componentDidUpdate(prevProps) {\n if (this.props.location !== prevProps.location) {\n window.scrollTo(0, 0);\n }\n }\n render() {\n return <>{this.props.children}</>;\n }\n}\nexport default withRouter(ScrollTop);\n\nexport const currencyFormatter = currency => {\n if (currency === 0) return 0;\n\n var reg = /(^[+-]?\\d+)(\\d{3})/;\n var n = currency + '';\n\n while (reg.test(n)) n = n.replace(reg, '$1' + ',' + '$2');\n\n return n;\n};\n\nexport const timeFormatter = ({ hour, minute = '00' }) => {\n const year = moment().format('YYYY').toString();\n const month = moment().format('MM').toString();\n const date = moment().format('DD').toString();\n\n if (hour && hour.length <= 1) hour = '0' + hour;\n if (minute && minute.length <= 1) minute = '0' + minute;\n return year + month + date + ' ' + hour + minute + '00';\n};\n\nexport const datetimeFormatter = ({ date, hour, minute = '00' }) => {\n const year = moment(date).format('YYYY').toString();\n const month = moment(date).format('MM').toString();\n const _date = moment(date).format('DD').toString();\n\n if (hour && hour.length <= 1) hour = '0' + hour;\n if (minute && minute.length <= 1) minute = '0' + minute;\n return year + month + _date + ' ' + hour + minute + '00';\n};\n\nexport const combineDateAndTime = ({ date, time, minute }) => {\n if (time && time.length === 1) time = '0' + time;\n if (minute && minute.length === 1) minute = '0' + minute;\n\n return moment(moment(date).format('YYYYMMDD') + ' ' + time + minute + '00').toDate();\n};\n\nexport const serviceParser = service => {\n switch (service) {\n case 'assist':\n return '병원 동행 Basic';\n case 'unemergency':\n return '병원 동행 Pro';\n case 'happycare':\n return '해피케어';\n }\n};\n\nexport const getNextStatus = (type, status) => {\n if (type === 'unemergency') {\n switch (status) {\n case '예약접수':\n return '';\n case '예약완료':\n return '접선';\n case '접선':\n return '병원 출발';\n case '병원 출발':\n return '병원 도착';\n case '병원 도착':\n return '진료 시작';\n case '진료 시작':\n return '진료 종료';\n case '진료 종료':\n return '귀가 시작';\n case '자택 출발':\n return '서비스 종료';\n case '서비스 종료':\n return '종료된 서비스';\n }\n }\n\n if (type === 'assist') {\n switch (status) {\n case '예약접수':\n return '';\n case '예약완료':\n return '접선';\n case '접선':\n return '진료 시작';\n case '진료 시작':\n return '진료 종료';\n case '진료 종료':\n return '서비스 종료';\n case '서비스 종료':\n return '종료된 서비스';\n }\n }\n\n if (type === 'happycare') {\n switch (status) {\n case '예약완료':\n return '접선';\n case '접선':\n return '진료 시작';\n case '진료 시작':\n return '진료 종료';\n case '진료 종료':\n return '서비스 종료';\n case '서비스 종료':\n return '종료된 서비스';\n }\n }\n};\n\nexport const getTotal = (service, addTime, transport) => {\n if (transport === 'withcar' && service === UNEMER) {\n return getWithcarPrice(addTime);\n } else if (service === UNEMER) {\n return 20000 * addTime + (transport === 'own' ? 20000 : 0);\n } else {\n return 15000 * addTime;\n }\n};\n\nexport const colorParserByStatus = status => {\n switch (status) {\n case '접수대기':\n return '#161616';\n case '예약접수':\n return '#43b30c';\n case '예약완료':\n return '#3bc1ff';\n case '서비스 종료':\n return '#ff5500';\n default:\n return '#606060';\n }\n};\n\nexport const getWithcarPrice = time => {\n switch (time) {\n case 1:\n return 93500;\n case 1.5:\n return 93500 + 93500 / 2;\n case 2:\n return 143000;\n case 2.5:\n return 143000 + 93500 / 2;\n case 3:\n return 181500;\n case 3.5:\n return 181500 + 93500 / 2;\n case 4:\n return 220000;\n case 4.5:\n return 220000 + 93500 / 2;\n case 5:\n return 264000;\n case 5.5:\n return 264000 + 93500 / 2;\n case 6:\n return 308000;\n case 6.5:\n return 308000 + 93500 / 2;\n case 7:\n return 352000;\n case 7.5:\n return 352000 + 93500 / 2;\n case 8:\n return 396000;\n }\n};\n","import axios from 'axios';\nimport qs from 'qs';\nimport { BASE_URL, DEV } from './variables';\naxios.defaults.withCredentials = true;\nconst client = axios.create({\n headers: {\n post: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n // withCredentials: true,\n },\n paramsSerializer: function (params) {\n return qs.stringify(params, { indices: false });\n },\n baseURL: DEV === 'beta' ? `https://beta.server.withmate.kr` : DEV ? '/' : BASE_URL,\n});\n\nclient.interceptors.request.use(\n config => {\n // const token = localStorage.getItem('accessToken');\n // config.headers = {\n // Authorization: `Bearer ${token}`,\n // };\n return config;\n },\n error => {\n return Promise.reject(error);\n },\n);\n// 인터셉터 설정\nclient.interceptors.response.use(\n response => {\n return response;\n },\n error => {\n if (error && error.request && error.request.status === 403) {\n localStorage.clear();\n window.location.reload();\n }\n return error;\n },\n);\n\nexport default client;\n","import React, { useEffect, useState } from 'react';\nimport Modal from 'react-modal';\nimport styled from 'styled-components';\nimport axios from '../../../../Lib/axios';\n\nconst Popup = () => {\n const [popupData, setPopupData] = useState(null);\n const [isOpen, setIsOpen] = useState(false);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n // 이전 방문 날짜 (로컬스토리지에서 가져오기, 숫자로 변환)\n const VISITED_BEFORE_DATE = Number(localStorage.getItem('VisitCookie'));\n // 현재 날짜 (일 단위)\n const VISITED_NOW_DATE = new Date().getDate();\n\n useEffect(() => {\n // 팝업 오늘 하루 닫기 체크\n if (VISITED_BEFORE_DATE === VISITED_NOW_DATE) {\n setIsOpen(false);\n setLoading(false);\n return;\n }\n\n setLoading(true);\n axios\n .get('/v1/popup/list')\n .then(response => {\n const now = new Date();\n\n // startDate와 endDate를 비교하여 유효한 팝업 필터링\n const validPopups = response.data.data.filter(popup => {\n const startDate = new Date(popup.startDate);\n const endDate = new Date(popup.endDate);\n\n return popup.isPublic && now >= startDate && now <= endDate;\n });\n\n if (validPopups.length > 0) {\n setPopupData(validPopups[0]);\n setIsOpen(true);\n } else {\n console.log('유효한 팝업이 없습니다.');\n }\n setLoading(false);\n })\n .catch(error => {\n console.error('팝업 데이터를 불러오는 중 오류 발생:', error);\n setError(error);\n setLoading(false);\n });\n }, [VISITED_BEFORE_DATE, VISITED_NOW_DATE]);\n\n // 오늘 하루 닫기\n const handleDayClose = () => {\n localStorage.setItem('VisitCookie', String(VISITED_NOW_DATE)); // 숫자 -> 문자열로 변환하여 저장\n setIsOpen(false);\n };\n\n const handleClose = () => {\n setIsOpen(false);\n };\n\n return (\n <Modal isOpen={isOpen} onRequestClose={handleClose} style={modalStyles}>\n {popupData && (\n <PopupContainer>\n <PopupImage src={popupData.photo} alt='팝업 이미지' />\n <CloseStyle>\n <Close onClick={handleDayClose}>오늘 하루 닫기</Close>\n <Close onClick={handleClose}>닫기</Close>\n </CloseStyle>\n </PopupContainer>\n )}\n </Modal>\n );\n};\n\nexport default Popup;\n\nconst PopupContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 5px;\n background: #282828;\n border-radius: 10px;\n text-align: center;\n\n @media (max-width: 768px) {\n width: auto;\n height: 400px;\n }\n`;\n\nconst PopupImage = styled.img`\n max-width: 100%;\n height: 400px;\n border-radius: 8px;\n\n @media (max-width: 768px) {\n width: auto;\n height: 350px;\n }\n`;\n\nconst CloseStyle = styled.div`\n display: flex;\n justify-content: space-between;\n background-color: #282828;\n width: 100%;\n margin-top: 10px;\n padding: 5px;\n border-radius: 0 0 15px 15px;\n color: #ffffff;\n font-size: 13px;\n`;\n\nconst Close = styled.span`\n cursor: pointer;\n`;\n\nconst modalStyles = {\n overlay: {\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n },\n content: {\n width: '350px',\n height: 'fit-content',\n margin: 'auto',\n padding: '0',\n borderRadius: '10px',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n },\n};\n","export const gray = ['#f8f9fa', '#f1f3f5', '#e9ecef', '#dee2e6', '#ced4da', '#adb5bd', '#868e96', '#495057', '#343a40', '#212529'];\nexport const cyan = ['#e3fafc', '#c5f6fa', '#99e9f2', '#66d9e8', '#3bc9db', '#22b8cf', '#15aabf', '#1098ad', '#0c8599', '#0b7285'];\nexport const red = ['#fff5f5', '#ffe3e3', '#ffc9c9', '#ffa8a8', '#ff8787', '#ff6b6b', '#fa5252', '#f03e3e', '#e03131', '#c92a2a'];\nexport const yellow = ['#fff9db', '#fff3bf', '#ffec99', '#ffe066', '#ffd43b', '#fcc419', '#fab005', '#f59f00', '#f08c00', '#e67700'];\nexport const blue = ['#e7f5ff', '#d0ebff', '#a5d8ff', '#74c0fc', '#4dabf7', '#339af0', '#228be6', '#1c7ed6', '#1971c2', '#1864ab'];\nexport const grape = ['#f8f0fc', '#f3d9fa', '#eebefa', '#e599f7', '#da77f2', '#cc5de8', '#be4bdb', '#ae3ec9', '#9c36b5', '#862e9c'];\nexport const borderColor = '#e8e8e8';\n\nexport const fontSize = {\n b8: '8px',\n b10: '10px',\n b12: '12px',\n b14: '14px',\n b16: '16px',\n b18: '18px',\n b20: '20px',\n b22: '22px',\n b24: '24px',\n b26: '26px',\n b28: '28px',\n b30: '30px',\n b32: '32px',\n b34: '34px',\n};\n\nexport const sizeHandler = size => {\n return size + 'px';\n};\nexport const mainColor = '#3bc1ff';\nexport const mainBoldColor = '#4dabf7';\nexport const bgDarkColor = '#212529';\n\nconst ColorPallete = {\n blue50: '#3bc1ff',\n blue100: '#4dabf7',\n green100: '#49a938',\n dark100: '#161616',\n dark80: 'rgba(0,0,0,0.8)',\n dark70: 'rgba(0,0,0,0.7)',\n dark60: '#a6a6a6',\n dark50: '#e9e9e9',\n dark30: '#ececec',\n dark20: '#dddddd',\n dark10: '#f5f5f5',\n};\n\nexport default ColorPallete;\n","import React from 'react';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport Popup from '../../../Pages/Home/Section/renew/Popup';\n\n// utils\nimport { sizeHandler, mainColor } from '../../../theme';\nimport { UNEMER } from '../../../Lib/variables';\n\nexport const NoCatchedList = ({ list, detailHandler, data, onRefresh }) => {\n return (\n <FullContainer>\n {/* <Popup /> */}\n <Inner>\n <NoCatchTitle>\n 실시간 예약 내역\n <RefreshButton onClick={onRefresh}>새로고침</RefreshButton>\n </NoCatchTitle>\n <ListConatiner>\n {list && Array.isArray(list) && list.length > 0 ? (\n list.map(item => {\n const serviceType =\n !item.productInfo || !item.productInfo.usePro || !item.productInfo.useBasic ? '' : item.service === UNEMER ? 'Pro' : 'Basic';\n const serviceName = (item.productInfo && item.productInfo.name && item.service && item.productInfo.name + serviceType) || '-';\n return (\n <ReserveItem\n key={item._id.toString()}\n serviceType={item.service}\n service={serviceName}\n name={item.patient}\n reserveDate={moment(item.reserveDate).format('MM월 DD일 HH시mm분')}\n destination={item.destination || '-'}\n shortStarting={item.shortStarting || '-'}\n status={item.call.status}\n onDetail={() => {\n detailHandler(item);\n }}\n />\n );\n })\n ) : (\n <EmptyList>현재 예약내역이 없습니다.</EmptyList>\n )}\n </ListConatiner>\n </Inner>\n </FullContainer>\n );\n};\n\nconst ReserveItem = ({ service, name, reserveDate, shortStarting, destination, serviceType, status, onDetail, usageTime }) => (\n <ItemContainer>\n <TitleSection>\n <ItemColumn>\n <ItemTitle>서비스 명</ItemTitle>\n <ItemContents style={{ color: mainColor }}>{service}</ItemContents>\n </ItemColumn>\n </TitleSection>\n\n <ContentSection>\n <ItemColumn>\n <ItemTitle>환자 성함</ItemTitle>\n <ItemContents>{name}</ItemContents>\n </ItemColumn>\n <ItemColumn>\n <ItemTitle>병원 진료 예약 시간</ItemTitle>\n <ItemContents>{reserveDate}</ItemContents>\n </ItemColumn>\n {serviceType === UNEMER && (\n <ItemColumn>\n <ItemTitle>자택 주소</ItemTitle>\n <ItemContents>{shortStarting}</ItemContents>\n </ItemColumn>\n )}\n <ItemColumn>\n <ItemTitle>병원 주소</ItemTitle>\n <ItemContents>{destination}</ItemContents>\n </ItemColumn>\n </ContentSection>\n\n <ItemColumn>\n <DetailButton onClick={onDetail}>\n <span>자세히보기</span>\n </DetailButton>\n </ItemColumn>\n </ItemContainer>\n);\n\nconst TitleSection = styled.div``;\n\nconst ContentSection = styled.div`\n flex: 1;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: flex-start;\n\n width: 300px;\n height: 316px;\n overflow-y: scroll;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none; /* Chrome, Safari, Opera*/\n }\n`;\n\nconst EmptyList = styled.p`\n font-size: 20px;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 16px;\n position: relative;\n`;\n\nconst FullContainer = styled.div`\n width: 100%;\n height: 100vh;\n background: linear-gradient(to top, #3bc1ff, #5b62f5);\n`;\n\nconst Inner = styled.div`\n max-width: 1024px;\n height: 100%;\n max-height: 628px;\n\n margin: 0 auto;\n background-image: url('/assets/images/w_main.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n padding-top: 120px;\n padding-bottom: 120px;\n\n @media (max-width: 1080px) {\n padding-left: 16px;\n padding-right: 16px;\n }\n\n @media (max-width: 768px) {\n padding-top: 40px;\n background: transparent;\n }\n`;\n\nconst NoCatchTitle = styled.p`\n font-size: 28px;\n font-weight: bold;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 24px;\n position: relative;\n\n @media (max-width: 480px) {\n margin-bottom: 16px;\n }\n`;\n\nconst RefreshButton = styled.span`\n position: absolute;\n margin-left: 8px;\n top: 16px;\n\n font-size: 14px;\n color: #161616;\n text-decoration: underline;\n cursor: pointer;\n`;\n\nconst ListConatiner = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n flex-wrap: wrap;\n\n > div:nth-child(3n) {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n > div:nth-child(3n) {\n margin-right: 16px;\n }\n\n > div:nth-child(2n) {\n margin-right: 0px;\n }\n }\n\n @media (max-width: 480px) {\n > div:nth-child(3n) {\n margin-right: 0px;\n }\n\n flex-direction: column;\n justify-content: center;\n }\n`;\n\nconst ItemContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n width: 340px;\n height: 340px;\n overflow: scroll;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none; /* Chrome, Safari, Opera*/\n }\n\n padding: 20px;\n margin-bottom: 16px;\n margin-right: 16px;\n\n border-radius: 4px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n background-color: #ffffff;\n\n @media (max-width: 768px) {\n margin-bottom: 16px;\n }\n\n @media (max-width: 480px) {\n width: 100%;\n max-width: initial;\n margin-right: 0px;\n }\n`;\n\nconst ItemTitle = styled.p`\n color: #a7a7a7;\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n margin: 0px;\n padding: 0px;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(11)};\n }\n`;\n\nconst ItemContents = styled.p`\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: #606060;\n margin: 0px;\n padding: 0px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(12)};\n margin-bottom: 4px;\n }\n`;\n\nconst ItemColumn = styled.div`\n width: 100%;\n margin-bottom: 6px;\n\n @media (max-width: 768px) {\n display: ${props => (props.hiddenMobile ? 'none' : 'block')};\n width: 100%;\n }\n`;\n\nconst DetailButton = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 100%;\n height: 44px;\n\n border-radius: 4px;\n border: 1px solid ${mainColor};\n cursor: pointer;\n transition: all 0.3s;\n text-align: center;\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: ${mainColor};\n text-align: center;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(12)};\n }\n }\n\n &:hover {\n background-color: ${mainColor};\n span {\n color: white;\n }\n }\n\n @media (max-width: 768px) {\n width: 100%;\n height: 34px;\n font-size: ${sizeHandler(12)};\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { Input, Select, DatePicker, TimePicker } from 'antd';\n\nimport Pallete from '../../theme';\n\nconst DivisionLine = styled.div`\n width: 100%;\n height: ${props => (props.big ? '32px' : props.x_small ? '8px' : props.small ? '16px' : '24px')};\n\n @media (max-width: 480px) {\n height: ${props => (props.big ? '24px' : props.x_small ? '4px' : props.small ? '8px' : '16px')};\n }\n`;\n\nconst BorderDivisionLine = styled.div`\n width: 100%;\n height: 1px;\n background-color: ${Pallete.dark50};\n\n margin-top: ${props => (props.x_small ? '4px' : props.small ? '8px' : '12px')};\n margin-bottom: ${props => (props.x_small ? '4px' : props.small ? '8px' : '12px')};\n`;\n\nconst WithmateLabelText = styled.div`\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.54;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n\n > span {\n color: ${Pallete.blue50};\n }\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n`;\n\nconst WithmateLabel = ({ children, required, ...rest }) => {\n return (\n <WithmateLabelText {...rest}>\n {required && <span>* </span>}\n {children}\n </WithmateLabelText>\n );\n};\n\nWithmateLabel.propTypes = {\n required: PropTypes.bool,\n};\n\nconst WithmateInput = styled(Input)`\n width: 100%;\n height: 46px;\n line-height: 44px;\n ${props => props.small && `max-width: 102px; height: 32px; line-height: 29px;`}\n\n margin-bottom: 0px;\n\n color: ${Pallete.dark100};\n font-size: 14px;\n font-weight: normal;\n\n border-radius: 4px;\n border: 1px solid ${Pallete.dark50} !important;\n background-color: #ffffff;\n\n @media (max-width: 480px) {\n font-size: 12px;\n border: 1px solid ${Pallete.dark50} !important;\n }\n\n &.ant-input {\n width: 100%;\n height: 46px;\n line-height: 44px;\n\n margin-bottom: 0px;\n\n color: ${Pallete.dark100};\n font-size: 14px;\n font-weight: normal;\n\n border-radius: 4px;\n border: 1px solid ${Pallete.dark50} !important;\n background-color: #ffffff;\n\n &::placeholder {\n color: ${Pallete.dark60};\n font-size: 14px;\n font-weight: normal;\n }\n\n @media (max-width: 480px) {\n font-size: 12px;\n border: 1px solid ${Pallete.dark50} !important;\n\n &::placeholder {\n font-size: 12px;\n }\n }\n }\n\n &:focus {\n border: 1px solid ${Pallete.blue100} !important;\n transition: all 0.3s;\n box-shadow: none;\n outline: 0;\n }\n\n &:disabled {\n background-color: ${Pallete.dark10};\n }\n\n &.ant-input-affix-wrapper-disabled {\n background-color: #f5f5f5;\n }\n\n &.ant-input-affix-wrapper {\n height: 46px;\n line-height: 43px;\n padding: 0px 11px;\n\n ${props => props.small && `max-width: 102px; height: 32px; line-height: 29px;`}\n\n .ant-input {\n width: 100% !important;\n height: 100%;\n line-height: 43px;\n\n color: ${Pallete.dark100};\n font-size: 14px;\n font-weight: normal;\n\n border: 0px !important;\n &::placeholder {\n color: ${Pallete.dark60};\n font-size: 14px;\n font-weight: normal;\n }\n\n &:focus {\n border: 1px solid ${Pallete.blue100} !important;\n transition: all 0.3s;\n box-shadow: none;\n outline: 0;\n }\n\n @media (max-width: 480px) {\n font-size: 12px;\n line-height: 43px;\n\n &:focus {\n border: 1px solid ${Pallete.dark50} !important;\n }\n\n &::placeholder {\n font-size: 12px;\n }\n }\n &:disabled {\n background-color: ${Pallete.dark10};\n }\n }\n\n .ant-input-suffix {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n text-align: right;\n color: ${Pallete.dark100};\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n }\n }\n`;\n\nconst InputTextButton = styled.span`\n display: inline-block;\n min-width: 50px;\n\n height: 46px;\n line-height: 44px;\n\n padding-left: 6px;\n padding-right: 6px;\n\n font-size: 11px;\n font-weight: normal;\n color: ${Pallete.dark60};\n text-align: center;\n cursor: pointer;\n\n transition: all 0.3s;\n\n &:hover {\n color: ${Pallete.dark100};\n }\n`;\n\nconst InputValue = styled.div`\n flex: 1;\n height: 46px;\n line-height: 44px;\n\n padding-left: 11px;\n padding-right: 11px;\n\n font-size: 14px;\n font-weight: normal;\n color: ${props => (props.withValue ? Pallete.dark100 : Pallete.dark60)};\n`;\n\nconst WithamteInputWithButton = ({ inputConfig, buttonName, onButton }) => {\n return (\n <BorderFlexWrapper>\n <WithmateInput {...inputConfig} />\n {onButton && typeof onButton === 'function' && <InputTextButton onClick={onButton}>{buttonName}</InputTextButton>}\n </BorderFlexWrapper>\n );\n};\n\nWithamteInputWithButton.propTypes = {\n inputConfig: PropTypes.object,\n buttonName: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n onButton: PropTypes.func,\n};\n\nconst HalfWithmateInput = styled(WithmateInput)`\n width: calc(50% - 4px);\n`;\n\nconst WithmateTextarea = styled(Input.TextArea)`\n &.ant-input {\n width: 100%;\n height: 240px;\n ${props => props.middle && `min-height: 110px; max-height: 110px;`}\n ${props => props.small && `min-height: 88px; max-height: 88px;`}\n\n color: ${Pallete.dark100};\n font-size: 14px;\n font-weight: normal;\n\n border-radius: 4px;\n border: 1px solid ${Pallete.dark50} !important;\n background-color: #ffffff;\n\n margin-bottom: 8px;\n padding: 8px;\n\n &::placeholder {\n color: ${Pallete.dark60};\n font-size: 14px;\n font-weight: normal;\n }\n\n @media (max-width: 480px) {\n font-size: 12px;\n &::placeholder {\n font-size: 12px;\n }\n }\n\n &:focus {\n border: 1px solid ${Pallete.blue100} !important;\n transition: all 0.3s;\n box-shadow: none;\n outline: 0;\n }\n\n &:disabled {\n background-color: ${Pallete.dark10};\n }\n\n @media (max-width: 480px) {\n min-height: 140px;\n ${props => props.middle && `min-height: 110px; max-height: 110px;`}\n ${props => props.small && `min-height: 88px; max-height: 88px;`}\n\n padding: 4px 11px;\n border: 1px solid ${Pallete.dark50} !important;\n\n &:focus {\n border: 1px solid ${Pallete.dark50} !important;\n }\n }\n }\n`;\n\nconst WithmateSelect = styled(Select)`\n &.ant-select {\n // margin-bottom: 8px;\n width: 100%;\n height: 46px;\n border-radius: 4px;\n\n .ant-select-selector {\n height: 100%;\n }\n }\n\n &.ant-select .ant-select-selector {\n height: 100% !important;\n line-height: 43px;\n }\n\n &.ant-select-single .ant-select-selector .ant-select-selection-item,\n &.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n line-height: 43px;\n }\n\n &.ant-select-single .ant-select-selector .ant-select-selection-item,\n &.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n line-height: 43px;\n }\n\n &.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n border: 1px solid #e9e9e9;\n border-radius: 4px;\n }\n\n .ant-select-selector .ant-select-selection-search-input {\n height: 100%;\n line-height: 43px;\n }\n\n &.ant-select.ant-select-enabled {\n width: 100%;\n }\n\n .ant-select-selection.ant-select-selection--single {\n border: 1px solid ${Pallete.dark50} !important;\n width: 100%;\n height: 46px;\n border-radius: 4px;\n }\n\n .ant-select-selection__rendered {\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n\n .ant-select-selection__placeholder {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n text-align: left;\n color: ${Pallete.dark60};\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n }\n }\n\n .ant-select-selection-selected-value {\n min-width: 50%;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.46;\n text-align: left;\n color: ${Pallete.dark100};\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n }\n\n &.ant-select-disabled {\n width: 100%;\n }\n`;\n\nconst HalfWithmateSelect = styled(WithmateSelect)`\n width: calc(50% - 4px);\n`;\n\nconst FlexWrapper = styled.div`\n display: flex;\n align-items: center;\n\n ${props =>\n props.withHalf\n ? `\n > div, p {\n width: calc(50% - 4px) !important;\n margin-right: 8px;\n }\n `\n : ''}\n\n > div:last-child {\n margin-right: 0px;\n }\n`;\n\nconst BorderFlexWrapper = styled(FlexWrapper)`\n border: 1px solid ${Pallete.dark50};\n border-radius: 4px;\n overflow: hidden;\n\n input.ant-input {\n margin-bottom: 0px !important;\n border: 0px !important;\n }\n`;\n\nconst FlexDiv = styled.div`\n width: calc(50% - 4px);\n`;\n\nconst StyledHotFix = styled.p`\n font-size: 11px;\n color: ${Pallete.blue100};\n font-weight: normal;\n\n margin-bottom: 4px;\n`;\n\nconst WithmateDatePicker = styled(DatePicker)`\n &.ant-picker {\n width: 100%;\n height: 46px;\n line-height: 43px;\n border: 1px solid #e9e9e9;\n padding: 0px;\n padding-left: 11px;\n padding-right: 11px;\n border-radius: 4px;\n\n > div {\n height: 100%;\n }\n\n > div > input {\n height: 100%;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.46;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n }\n }\n`;\n\nconst WithmateTimepicker = styled(TimePicker)`\n &.ant-picker {\n width: 100%;\n height: 46px;\n line-height: 43px;\n border: 1px solid #e9e9e9;\n padding: 0px;\n padding-left: 11px;\n padding-right: 11px;\n border-radius: 4px;\n\n > div {\n height: 100%;\n }\n\n > div > input {\n height: 100%;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.46;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n }\n }\n`;\n\nconst WithmateValue = styled.p`\n margin-bottom: 4px;\n\n font-size: 13px;\n color: ${Pallete.blue50};\n font-weight: bold;\n`;\n\nconst WithmateValueTip = styled.p`\n margin-bottom: 0px;\n\n font-size: 11px;\n color: ${Pallete.dark60};\n font-weight: normal;\n`;\n\nexport {\n BorderDivisionLine,\n WithamteInputWithButton,\n DivisionLine,\n WithmateLabel,\n WithmateInput,\n HalfWithmateInput,\n WithmateTextarea,\n WithmateSelect,\n FlexWrapper,\n FlexDiv,\n HalfWithmateSelect,\n StyledHotFix,\n WithmateDatePicker,\n WithmateValue,\n WithmateValueTip,\n WithmateTimepicker,\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport Pallete from '../../theme';\n\nconst FullWidthButton = styled.a`\n display: block;\n width: 100%;\n height: 40px;\n line-height: 40px;\n border-radius: 4px;\n\n cursor: pointer;\n\n font-size: 13px;\n font-weight: normal;\n text-align: center;\n font-weight: bold;\n\n ${props =>\n props.border\n ? `\n border: 1px solid ${Pallete.dark50};\n color: ${Pallete.blue50}\n `\n : ''}\n\n background-color: ${props => (props.bg ? props.bg : Pallete.blue50)};\n color: #ffffff;\n`;\n\nconst HalfWidthButton = styled(FullWidthButton)`\n width: calc(50% - 4px);\n`;\n\nconst RadiusFullWidthButton = styled(FullWidthButton)`\n max-width: 280px;\n height: 72px;\n line-height: 72px;\n border-radius: 50vh;\n\n font-size: 22px;\n font-weight: bold;\n letter-spacing: -0.5px;\n`;\n\nconst RadiusHalfWidthButton = styled(RadiusFullWidthButton)`\n max-width: calc(50% - 4px);\n margin-right: 8px;\n\n @media (max-width: 480px) {\n width: 100%;\n max-width: 280px;\n\n height: 55px;\n line-height: 55px;\n font-size: 16px;\n letter-spacing: -0.1px;\n\n margin-right: 0px;\n margin-bottom: 8px;\n }\n`;\n\nconst ButtonWrapper = styled.div`\n width: 100%;\n\n display: flex;\n align-items: center;\n\n ${props =>\n props.half\n ? `\n > a {\n width: calc(50% - 4px);\n }\n > a:nth-child(1) {\n margin-right: 8px;\n }\n `\n : ''}\n`;\n\nexport { FullWidthButton, HalfWidthButton, ButtonWrapper, RadiusFullWidthButton, RadiusHalfWidthButton };\n","import React from 'react';\nimport { withRouter } from 'react-router';\nimport moment from 'moment';\nimport styled from 'styled-components';\nimport { Input } from 'antd';\n\nimport { DivisionLine } from '../Components/Common/input';\nimport { FullWidthButton } from '../Components/Common/button';\n\n// theme\nimport Pallete, { mainColor } from '../theme';\n\n// utils\nimport { serviceParser, getNextStatus, getTotal, currencyFormatter } from '../Lib/utils';\n\nexport default class Modal extends React.PureComponent {\n state = {\n modal: false,\n };\n\n componentDidMount = () => {\n const now = moment().valueOf();\n const begin = moment('20220923 180000').valueOf(); // 02. 24 ~\n const end = moment('20220925 180000').valueOf(); // ~ 03. 31\n\n if (now > begin && now < end) {\n this.modalValidation();\n }\n };\n\n modalValidation = () => {\n const { lastTime } =\n localStorage.getItem('modal') && typeof JSON.parse(localStorage.getItem('modal')) === 'object' && JSON.parse(localStorage.getItem('modal')) !== null\n ? JSON.parse(localStorage.getItem('modal'))\n : {\n lastTime: moment().subtract('day', 1).toDate(),\n };\n\n if (!lastTime || moment(lastTime).format('YYYY-MM-DD') !== moment().format('YYYY-MM-DD')) {\n this.setState({ modal: true });\n }\n };\n\n onClose = () => {\n localStorage.setItem('modal', null);\n this.setState({ modal: false });\n };\n\n onCloseToday = () => {\n localStorage.setItem('modal', JSON.stringify({ lastTime: moment().toDate() }));\n this.setState({ modal: false });\n };\n\n render() {\n if (this.state.modal) {\n return (\n <Container\n id='event-popup'\n onClick={e => {\n if (e.target.id === 'event-popup') {\n this.onClose();\n }\n }}\n >\n <ModalBlock\n onClick={e => {\n e.preventDefault();\n }}\n >\n <Top style={{ marginBottom: '16px' }}>\n <Title>서버 업데이트 대비 서버점검 안내</Title>\n </Top>\n <Bottom>\n <ContentRow>2022. 09. 23 더 편리한 서비스</ContentRow>\n <ContentRow>제공을 위헤 업데이트를 진행할 예정입니다.</ContentRow>\n <ContentRow>아래 명시한 기간동안 정상적인 서비스 이용에 어려움이</ContentRow>\n <ContentRow>있을수 있습니다. 성원에 보답하는 위드메이트가 되겠습니다.</ContentRow>\n\n <WarningRow>※ 서버점검 기간</WarningRow>\n <WarningContentRow>22. 09. 23 18:00 ~ 22. 09. 25 18:00</WarningContentRow>\n\n <div style={{ height: '8px' }} />\n <MessageRow>국민 모두 힘을 합치면 코로나 사태 극복 가능합니다.</MessageRow>\n <MessageRow>코로나19 극복, 위드메이트가 앞장서겠습니다.</MessageRow>\n {/* <BottomImage /> */}\n </Bottom>\n <EndBottom>\n <CloseToday>\n <span onClick={this.onCloseToday}>\n <i className='fas fa-check' />\n </span>\n <span onClick={this.onCloseToday}>오늘은 그만보기</span>\n </CloseToday>\n <CloseNow onClick={this.onClose}>닫기</CloseNow>\n </EndBottom>\n </ModalBlock>\n </Container>\n );\n } else {\n return <></>;\n }\n }\n}\n\nexport class RadiationModal extends React.PureComponent {\n state = {\n modal: false,\n };\n\n componentDidMount = () => {\n // localStorage.clear();\n // const now = moment().valueOf();\n // const begin = moment('20200223 235959').valueOf(); // 02. 24 ~\n // const end = moment('20200331 190000').valueOf(); // ~ 03. 31\n\n // if (now > begin && now < end) {\n // this.modalValidation();\n // }\n this.modalValidation();\n };\n\n modalValidation = () => {\n const { lastTime } =\n localStorage.getItem('radiation-modal') &&\n typeof JSON.parse(localStorage.getItem('radiation-modal')) === 'object' &&\n JSON.parse(localStorage.getItem('radiation-modal')) !== null\n ? JSON.parse(localStorage.getItem('radiation-modal'))\n : {\n lastTime: moment().subtract('day', 1).toDate(),\n };\n\n if (!lastTime || moment(lastTime).format('YYYY-MM-DD') !== moment().format('YYYY-MM-DD')) {\n this.setState({ modal: true });\n }\n };\n\n onClose = () => {\n localStorage.setItem('radiation-modal', null);\n this.setState({ modal: false });\n };\n\n onCloseToday = () => {\n localStorage.setItem('radiation-modal', JSON.stringify({ lastTime: moment().toDate() }));\n this.setState({ modal: false });\n };\n\n render() {\n if (this.state.modal) {\n return (\n <Container id='event-popup'>\n <ModalBlock>\n <Top>\n <Title>투석 & 방사선 치료 동행 서비스 안내</Title>\n </Top>\n <Bottom>\n <BottomImage />\n <ContentRow style={{ textAlign: 'center' }}>투석 & 방사선 치료 병원 동행 서비스가 필요하신 분들은</ContentRow>\n <ContentRow style={{ textAlign: 'center' }}>고객센터 전화를 통해 서비스 상담을 받으실 수 있습니다.</ContentRow>\n <MessageRow style={{ textAlign: 'center', cursor: 'pointer' }}>\n <a href='tel:070-4300-9075'>고객센터 번호 ☞ 070-4300-9075</a>\n </MessageRow>\n </Bottom>\n <EndBottom>\n <CloseToday>\n <span onClick={this.onCloseToday}>\n <i className='fas fa-check' />\n </span>\n <span onClick={this.onCloseToday}>오늘은 그만보기</span>\n </CloseToday>\n <CloseNow onClick={this.onClose}>닫기</CloseNow>\n </EndBottom>\n </ModalBlock>\n </Container>\n );\n } else {\n return <></>;\n }\n }\n}\n\n// class EventModal extends React.PureComponent {\n// state = {\n// modal: false,\n// };\n\n// componentDidMount = () => {\n// this.modalValidation();\n// };\n\n// modalValidation = () => {\n// const { lastTime } =\n// localStorage.getItem('radiation-modal') &&\n// typeof JSON.parse(localStorage.getItem('radiation-modal')) === 'object' &&\n// JSON.parse(localStorage.getItem('radiation-modal')) !== null\n// ? JSON.parse(localStorage.getItem('radiation-modal'))\n// : {\n// lastTime: moment().subtract('day', 1).toDate(),\n// };\n\n// if (!lastTime || moment(lastTime).format('YYYY-MM-DD') !== moment().format('YYYY-MM-DD')) {\n// this.setState({ modal: true });\n// }\n// };\n\n// onClose = () => {\n// localStorage.setItem('radiation-modal', null);\n// this.setState({ modal: false });\n// };\n\n// onCloseToday = () => {\n// localStorage.setItem('radiation-modal', JSON.stringify({ lastTime: moment().toDate() }));\n// this.setState({ modal: false });\n// };\n\n// render() {\n// if (this.state.modal) {\n// return (\n// <Container id='event-popup'>\n// <ModalBlock>\n// <Top>\n// <Title>위드메이트, 이제 포항에서 만나보세요!</Title>\n// </Top>\n// <Bottom>\n// <BottomImage />\n// <ContentRow>\n// 위드메이트가 <span>한동대학교 ICT 창업팀</span>과 협력하여 포항시를 시작으로 경상권 정식 서비스를 시작합니다. 경상권 서비스 시작\n// 전, <span>포항시 대상 시범 서비스</span>와 <span>사전 수요 조사</span>가 진행됩니다. (회원 가입 완료 고객님 대상)\n// </ContentRow>\n// <br />\n// <ContentRow>\n// 서비스 신청 시 '자택 주소' 또는 '병원 주소'가 <span>'포항시'에 해당하는 모든 고객님께 30% 할인 혜택</span>이 적용되며, 설문에\n// 참여해주시는 모든 경상권 거주 고객님께 <span>20% 할인 쿠폰</span>과 추첨을 통한 <span>스타벅스 기프티콘</span>을 드립니다.{' '}\n// </ContentRow>\n\n// <div style={{ marginTop: '16px', marginBottom: '16px' }}>\n// <MessageRow>\n// <a\n// onClick={() => {\n// this.onClose();\n// this.props.history.push('/user/register');\n// }}\n// >\n// 설문 전 회원가입 먼저 하기 {'>'}\n// </a>\n// </MessageRow>\n// <MessageRow>\n// <a\n// href='https://docs.google.com/forms/d/e/1FAIpQLSfX6N8E0-fPVHXDFQN0iKUCjpZNP_cHl4e1kDRwEORk9NmtCw/viewform'\n// target='_blank'\n// >\n// 쿠폰(설문 조사) 링크 {'>'}\n// </a>\n// </MessageRow>\n// </div>\n\n// <ContentRow style={{ textIndent: '0px' }}>여러분의 소중한 지인에게 병원 동행 서비스를 알려주세요!</ContentRow>\n// </Bottom>\n// <EndBottom>\n// <CloseToday>\n// <span onClick={this.onCloseToday}>\n// <i className='fas fa-check' />\n// </span>\n// <span onClick={this.onCloseToday}>오늘은 그만보기</span>\n// </CloseToday>\n// <CloseNow onClick={this.onClose}>닫기</CloseNow>\n// </EndBottom>\n// </ModalBlock>\n// </Container>\n// );\n// } else {\n// return <></>;\n// }\n// }\n// }\n\nexport const MateReserveInfoModal = ({ visibleHandler, info, onCatch }) => {\n const serviceType = !info.productInfo || !info.productInfo.usePro || !info.productInfo.useBasic ? '' : info.service === 'unemergency' ? 'Pro' : 'Basic';\n const serviceName = (info.productInfo && info.productInfo.name && info.service && info.productInfo.name + serviceType) || '-';\n\n return (\n <Container>\n <ModalBlock>\n <ModalTitle>\n 예약 상세내용\n <ModalCloseButtons onClick={visibleHandler} src='/assets/images/close.png' alt='close-button' />\n </ModalTitle>\n <ModalLabel>서비스명</ModalLabel>\n <ModalInfo>{serviceName}</ModalInfo>\n <ModalLabel>병원 진료 예약 시간</ModalLabel>\n <ModalInfo>{moment(info.reserveDate).format('YYYY년 MM월 DD일, HH시 mm분')}</ModalInfo>\n <ModalLabel>총 예상 소요 시간</ModalLabel>\n <ModalInfo>{info.usageTime || 0}시간</ModalInfo>\n {info && info.shortStarting ? (\n <>\n <ModalLabel>자택 주소</ModalLabel>\n <ModalInfo>{info.shortStarting}</ModalInfo>\n </>\n ) : null}\n <ModalLabel>병원 주소</ModalLabel>\n <ModalInfo>{info.destination}</ModalInfo>\n <ModalLabel>이동수단</ModalLabel>\n <ModalInfo>\n {info.transport && info.transport === 'withcar'\n ? '차량 호출'\n : info.transport && info.transport === 'own'\n ? '본인소유 자차 이용'\n : '대중교통(택시 등) 이용'}\n </ModalInfo>\n <ModalLabel>예상 비용</ModalLabel>\n <ModalInfo>\n {(info.transport && info.transport === 'own' ? 20000 : 0) +\n (info.productInfo &&\n info.service &&\n (info.service === 'unemergency' ? info.productInfo.proPrice : info.productInfo.basicPrice ? info.productInfo.basicPrice : 0) *\n info.usageTime)}\n 원\n </ModalInfo>\n\n <WhiteButton onClick={onCatch}>예약 접수하기</WhiteButton>\n <ModalFlexbox>\n <div>\n <ModalLabel>이용자 성함</ModalLabel>\n <ModalInfo>{info.patient}</ModalInfo>\n </div>\n <div>\n <ModalLabel style={{ paddingLeft: '0px' }}>이용자 성별</ModalLabel>\n <ModalInfo style={{ paddingLeft: '0px' }}>{info.sex}</ModalInfo>\n </div>\n </ModalFlexbox>\n <ModalFlexbox>\n <div>\n <ModalLabel>추가 요청 사항</ModalLabel>\n <ModalInfo style={{ marginBottom: '24px' }}>{info.comment || '-'}</ModalInfo>\n </div>\n </ModalFlexbox>\n </ModalBlock>\n </Container>\n );\n};\n\nexport const MateCallStatusModal = ({ visibleHandler, info, onNext }) => {\n const serviceType = !info.productInfo || !info.productInfo.usePro || !info.productInfo.useBasic ? '' : info.service === 'unemergency' ? 'Pro' : 'Basic';\n const serviceName = (info.productInfo && info.productInfo.name && info.service && info.productInfo.name + serviceType) || '-';\n\n return (\n <Container>\n <ModalBlock>\n <ModalTitle>\n 예약 상세내용 및 관리\n <ModalCloseButtons onClick={visibleHandler} src='/assets/images/close.png' alt='close-button' />\n </ModalTitle>\n <ModalLabel>서비스 명</ModalLabel>\n <ModalInfo>{serviceName}</ModalInfo>\n <ModalLabel>병원 진료 예약 시간</ModalLabel>\n <ModalInfo>{moment(info.reserveDate).format('YYYY년 MM월 DD일, HH시 mm분')}</ModalInfo>\n <ModalLabel>총 예상 소요 시간</ModalLabel>\n <ModalInfo>{info.usageTime || 0}시간</ModalInfo>\n <ModalLabel>병원 주소</ModalLabel>\n <ModalInfo>{info.destination}</ModalInfo>\n {info.service === 'unemergency' && (\n <>\n <ModalLabel>이동 수단</ModalLabel>\n <ModalInfo>{info.transport === 'own' ? '자차 이용' : info.transport === 'common' ? '대중교통' : '-'}</ModalInfo>\n </>\n )}\n {info && info.starting && (\n <>\n <ModalLabel>자택 주소</ModalLabel>\n <ModalInfo>{info.starting}</ModalInfo>\n </>\n )}\n {info.call && info.call.status !== '예약접수' && (\n <>\n <ModalFlexbox>\n <div>\n <ModalLabel>이용자 성함</ModalLabel>\n <ModalInfo>{info.patient}</ModalInfo>\n </div>\n <div>\n <ModalLabel style={{ paddingLeft: '0px' }}>이용자 성별</ModalLabel>\n <ModalInfo style={{ paddingLeft: '0px' }}>{info.sex}</ModalInfo>\n </div>\n </ModalFlexbox>\n <ModalLabel>이용자 연락처</ModalLabel>\n <ModalInfo>{info.contact}</ModalInfo>\n\n {/* <ModalLabel>보호자 연락처</ModalLabel>\n <ModalInfo>{(info.buyer && info.buyer.contact) || '-'}</ModalInfo> */}\n </>\n )}\n\n <ModalLabel>추가 요청 사항</ModalLabel>\n <ModalInfo style={{ marginBottom: '24px' }}>{info.comment || '-'}</ModalInfo>\n\n {info.call && info.call.status !== '서비스 종료' && info.call.status !== '예약접수' && (\n <WhiteButton onClick={onNext}>{getNextStatus(info.service, info.call.status)}</WhiteButton>\n )}\n {info.call && info.call.status === '서비스 종료' && <WhiteButton onClick={onNext}>서비스 리포트 작성</WhiteButton>}\n\n <BlueButton style={{ marginBottom: '24px' }} onClick={visibleHandler}>\n 닫기\n </BlueButton>\n </ModalBlock>\n </Container>\n );\n};\n\nexport const UserServiceReportModal = ({ visibleHandler, info, service, onMateInfo }) => {\n const { timeline } = info;\n\n return (\n <Container>\n <ModalBlock>\n <ModalTitle>\n 서비스 리포트\n <ModalCloseButtons onClick={visibleHandler} src='/assets/images/close.png' alt='close-button' />\n </ModalTitle>\n <ModalLabel>타임라인</ModalLabel>\n {service === 'happycare' ? (\n <ModalInfo>\n {timeline.receipt ? <p>{`고객님과 메이트가 ${moment(timeline.receipt.time).format('HH시 mm분')}에 만났습니다.`}</p> : ''}\n {timeline.careStart ? <p>{`${moment(timeline.careStart.time).format('HH시 mm분')}에 진료를 시작하였고,`}</p> : ''}\n {timeline.careDone ? (\n <p>{`${moment(timeline.careDone.time).diff(moment(timeline.careStart.time), 'minute')}분 동안 진료를 봤습니다.`}</p>\n ) : (\n ''\n )}\n {timeline.complete ? <p>{`${moment(timeline.complete.time).format('HH시 mm분')}에 고객님과의 동행 서비스가 종료되었습니다.`}</p> : ''}\n </ModalInfo>\n ) : null}\n {service === 'assist' ? (\n <ModalInfo>\n {timeline.arrived ? <p>{`메이트가 ${moment(timeline.arrived.time).format('MM월 DD일, HH시 mm분')}에 병원에 도착하였습니다.`}</p> : ''}\n {timeline.receipt ? <p>{`고객님과는 ${moment(timeline.receipt.time).format('HH시 mm분')}에 만났습니다.`}</p> : ''}\n {timeline.careStart ? <p>{`${moment(timeline.careStart.time).format('HH시 mm분')}에 진료를 시작하였고,`}</p> : ''}\n {timeline.careDone ? (\n <p>{`${moment(timeline.careDone.time).diff(moment(timeline.careStart.time), 'minute')}분 동안 진료를 봤습니다.`}</p>\n ) : (\n ''\n )}\n {timeline.complete ? <p>{`${moment(timeline.complete.time).format('HH시 mm분')}에 고객님과의 동행 서비스가 종료되었습니다.`}</p> : ''}\n </ModalInfo>\n ) : null}\n {service === 'unemergency' ? (\n <ModalInfo>\n {timeline.receipt ? <p>{`메이트가 고객님과 ${moment(timeline.receipt.time).format('MM월 DD일, HH시 mm분')}에 만났습니다.`}</p> : ''}\n {timeline.start ? <p>{`병원으로 ${moment(timeline.start.time).format('HH시 mm분')}에 출발하였습니다.`}</p> : ''}\n {timeline.arrived ? <p>{`그리고 ${moment(timeline.arrived.time).format('HH시 mm분')}에 병원에 도착하였습니다.`}</p> : ''}\n {timeline.careStart ? <p>{`${moment(timeline.careStart.time).format('HH시 mm분')}에 진료를 시작하였고,`}</p> : ''}\n {timeline.careDone ? (\n <p>{`${moment(timeline.careDone.time).diff(moment(timeline.careStart.time), 'minute')}분 동안 진료를 봤습니다.`}</p>\n ) : (\n ''\n )}\n {timeline.backStart ? <p>{`진료 후 ${moment(timeline.backStart.time).format('HH시 mm분')}에 자택으로 출발했습니다.`}</p> : ''}\n {timeline.complete ? <p>{`${moment(timeline.complete.time).format('HH시 mm분')}에 고객님과의 동행 서비스가 종료되었습니다.`}</p> : ''}\n </ModalInfo>\n ) : null}\n <ModalLabel>{info.mate[0].name} 메이트 리포트</ModalLabel>\n\n <ModalInfo style={{ overflow: 'hidden' }}>{info.report || '담당 메이트가 아직 리포트를 작성중입니다.'}</ModalInfo>\n\n <FullWidthButton bg={Pallete.dark70} onClick={onMateInfo} style={{ marginBottom: '24px', width: '90%', margin: '0 auto' }}>\n 담당 메이트 정보\n </FullWidthButton>\n <DivisionLine small />\n <FullWidthButton bg={Pallete.blue50} onClick={visibleHandler} style={{ marginBottom: '24px', width: '90%', margin: '0 auto' }}>\n 닫기\n </FullWidthButton>\n <DivisionLine small />\n </ModalBlock>\n </Container>\n );\n};\n\nexport const HandleReportModal = ({ visibleHandler, onHandleReport, inputHandler, desc }) => {\n return (\n <Container>\n <ModalBlock>\n <ModalTitle>\n 서비스 리포트 작성\n <ModalCloseButtons onClick={visibleHandler} src='/assets/images/close.png' alt='close-button' />\n </ModalTitle>\n\n <ModalLabel>서비스 수행 및 진료내용 {desc && desc.length > 0 ? `(글자수 - ${desc.length}자)` : ''}</ModalLabel>\n <ModalPaddingBlock>\n <Input.TextArea\n rows={6}\n placleholder='서비스 수행중 있었던 특이사항이나 진료내용 등을 입력해주세요.'\n maxLength={600}\n onChange={ev => {\n inputHandler({ type: 'report', value: ev.target.value });\n }}\n />\n </ModalPaddingBlock>\n <WhiteButton onClick={onHandleReport}>리포트 등록</WhiteButton>\n <BlueButton onClick={visibleHandler} style={{ marginBottom: '24px' }}>\n 닫기\n </BlueButton>\n </ModalBlock>\n </Container>\n );\n};\n\nexport const ShareCarRequestModal = ({ visibleHandler, inputHandler, onSave, data }) => {\n return (\n <Container>\n <ModalLargeBlock>\n <ModalTitle>\n 셔틀 셰어링 신청\n <ModalCloseButtons onClick={visibleHandler} src='/assets/images/close.png' alt='close-button' />\n </ModalTitle>\n\n <FlexWrapper>\n <FlexBox>\n <p className='label'>기관명</p>\n <Input\n type='text'\n placeholder='ex. 한빛 요양원'\n value={data.corp}\n onChange={ev => {\n if (ev.target.value.length >= 20) return null;\n\n inputHandler({ type: 'corp', value: ev.target.value });\n }}\n />\n </FlexBox>\n <FlexBox>\n <p className='label'>지역</p>\n <Input\n type='text'\n placeholder='ex. 경기도 수원시'\n value={data.address}\n onChange={ev => {\n if (ev.target.value.length >= 20) return null;\n\n inputHandler({ type: 'address', value: ev.target.value });\n }}\n />\n </FlexBox>\n </FlexWrapper>\n\n <FlexWrapper>\n <FlexBox>\n <p className='label'>담당자</p>\n <Input\n type='text'\n placeholder='ex. 홍길동'\n value={data.manager}\n onChange={ev => {\n if (ev.target.value.length >= 20) return null;\n\n inputHandler({ type: 'manager', value: ev.target.value });\n }}\n />\n </FlexBox>\n <FlexBox>\n <p className='label'>전화번호</p>\n <Input\n type='number'\n placeholder='ex. 01012349876'\n value={data.contact}\n onChange={ev => {\n if (ev.target.value.length >= 13) return null;\n\n inputHandler({ type: 'contact', value: ev.target.value });\n }}\n />\n </FlexBox>\n </FlexWrapper>\n\n <FlexWrapper>\n <FlexFullBox>\n <p className='label'>기타 문의 및 전달사항</p>\n <Input.TextArea\n type='text'\n placeholder='위드메이트 관리자에게 전달할 메시지를 입력해주세요.'\n value={data.message}\n onChange={ev => {\n if (ev.target.value.length > 150) return null;\n\n inputHandler({ type: 'message', value: ev.target.value });\n }}\n />\n </FlexFullBox>\n </FlexWrapper>\n\n <BlueButton onClick={onSave} style={{ marginBottom: '24px' }}>\n 접수하기\n </BlueButton>\n </ModalLargeBlock>\n </Container>\n );\n};\n\nexport const EmergencyCorpSearchModal = ({ visibleHandler, inputHandler, keyword = '', data = [] }) => {\n return (\n <Container>\n <ModalLargeBlock>\n <ModalTitle>\n 사설 구급업체 검색\n <ModalCloseButtons onClick={visibleHandler} src='/assets/images/close.png' alt='close-button' />\n </ModalTitle>\n\n <FlexWrapper>\n <FlexFullBox>\n <p className='label'>지역 검색</p>\n <Input\n placeholder='ex. 경기, 대구, 부산'\n value={keyword}\n onChange={ev => {\n if (ev.target.value.length > 10) return null;\n\n inputHandler(ev.target.value);\n }}\n />\n </FlexFullBox>\n </FlexWrapper>\n\n <FlexWrapper>\n <FlexFullBox>\n <p className='label'>검색결과</p>\n <TableWrapper>\n <TableHeaderWrapper>\n <FlexColumn>\n <span className='title'>시도 / 시군구</span>\n </FlexColumn>\n <FlexColumn>\n <span className='title'>기관명</span>\n </FlexColumn>\n <FlexColumn>\n <span className='title'>대표번호</span>\n </FlexColumn>\n </TableHeaderWrapper>\n {data && data.length > 0 ? (\n data\n .filter(\n item =>\n (item.addr1 && item.addr1.includes(keyword)) ||\n (item.addr2 && item.addr2.includes(keyword)) ||\n (item.name && item.name.includes(keyword)) ||\n (item.contact && item.contact.includes(keyword)),\n )\n .map((item, index) => (\n <TableRowWrapper key={'emergency-corporation-item-' + index.toString()}>\n <FlexColumn>\n <span className='value'>{item.addr1 + ' ' + item.addr2}</span>\n </FlexColumn>\n <FlexColumn>\n <span className='value'>{item.name}</span>\n </FlexColumn>\n <FlexColumn>\n <span className='value'>{item.contact}</span>\n </FlexColumn>\n </TableRowWrapper>\n ))\n ) : (\n <EmptyTable />\n )}\n </TableWrapper>\n </FlexFullBox>\n </FlexWrapper>\n\n <BlueButton onClick={visibleHandler} style={{ marginBottom: '24px' }}>\n 확인\n </BlueButton>\n </ModalLargeBlock>\n </Container>\n );\n};\n\nclass CardModal extends React.PureComponent {\n state = {\n modal: false,\n };\n\n componentDidMount = () => {\n this.modalValidation();\n };\n\n modalValidation = () => {\n const { lastTime } =\n localStorage.getItem('radiation-modal') &&\n typeof JSON.parse(localStorage.getItem('radiation-modal')) === 'object' &&\n JSON.parse(localStorage.getItem('radiation-modal')) !== null\n ? JSON.parse(localStorage.getItem('radiation-modal'))\n : {\n lastTime: moment().subtract('day', 1).toDate(),\n };\n\n if (!lastTime || moment(lastTime).format('YYYY-MM-DD') !== moment().format('YYYY-MM-DD')) {\n this.setState({ modal: true });\n }\n };\n\n onClose = () => {\n localStorage.setItem('radiation-modal', null);\n this.setState({ modal: false });\n };\n\n onCloseToday = () => {\n localStorage.setItem('radiation-modal', JSON.stringify({ lastTime: moment().toDate() }));\n this.setState({ modal: false });\n };\n\n render() {\n if (this.state.modal) {\n return (\n <Container id='event-popup'>\n <ModalBlock>\n <Top>\n <Title>카드결제 안내</Title>\n </Top>\n <Bottom>\n <div style={{ display: 'flex', justifyContent: 'center', paddingTop: '10px' }}>\n <img src='/assets/images/popup_img/withmate_card.png' style={{ width: '400px', height: 'auto' }} />\n {/* <PopupImage /> */}\n </div>\n <div style={{ marginTop: '15px' }}>\n <MessageRow>\n <a\n onClick={() => {\n this.onClose();\n this.props.history.push('/user/mypage/info');\n }}\n >\n 결제카드 등록하기 {'>'}\n </a>\n </MessageRow>\n {/* <MessageRow>\n <a\n href='https://docs.google.com/forms/d/e/1FAIpQLSfX6N8E0-fPVHXDFQN0iKUCjpZNP_cHl4e1kDRwEORk9NmtCw/viewform'\n target='_blank'\n >\n 쿠폰(설문 조사) 링크 {'>'}\n </a>\n </MessageRow> */}\n </div>\n </Bottom>\n <EndBottom>\n <CloseToday>\n <span onClick={this.onCloseToday}>\n <i className='fas fa-check' />\n </span>\n <span onClick={this.onCloseToday}>오늘은 그만보기</span>\n </CloseToday>\n <CloseNow onClick={this.onClose}>닫기</CloseNow>\n </EndBottom>\n </ModalBlock>\n </Container>\n );\n } else {\n return <></>;\n }\n }\n}\n\nclass ManagerModal extends React.PureComponent {\n state = {\n modal: false,\n };\n\n componentDidMount = () => {\n this.modalValidation();\n };\n\n modalValidation = () => {\n const { lastTime } =\n localStorage.getItem('radiation-modal') &&\n typeof JSON.parse(localStorage.getItem('radiation-modal')) === 'object' &&\n JSON.parse(localStorage.getItem('radiation-modal')) !== null\n ? JSON.parse(localStorage.getItem('radiation-modal'))\n : {\n lastTime: moment().subtract('day', 1).toDate(),\n };\n\n if (!lastTime || moment(lastTime).format('YYYY-MM-DD') !== moment().format('YYYY-MM-DD')) {\n this.setState({ modal: true });\n }\n };\n\n onClose = () => {\n localStorage.setItem('radiation-modal', null);\n this.setState({ modal: false });\n };\n\n onCloseToday = () => {\n localStorage.setItem('radiation-modal', JSON.stringify({ lastTime: moment().toDate() }));\n this.setState({ modal: false });\n };\n\n render() {\n if (this.state.modal) {\n return (\n <Container id='event-popup'>\n <ModalBlock>\n {/* <Top>\n <Title>위드메이트 X 국립암센터 암특화 병원동행 매니저 자격과정 모집</Title>\n </Top> */}\n <Bottom>\n <div style={{ display: 'flex', justifyContent: 'center', paddingTop: '10px' }}>\n <img src='/assets/images/popup_img/withmate_manager.png' style={{ width: '300px', height: 'auto' }} />\n {/* <PopupImage /> */}\n </div>\n <div style={{ marginTop: '10px' }}>\n <MessageRow>\n <a\n onClick={() => {\n this.onClose();\n this.props.history.push({\n pathname: `/newsEvent/info/63d9f951397216d7ff7672a8`,\n state: { id: '63d9f951397216d7ff7672a8' },\n });\n }}\n >\n 자세히 보기 {'>'}\n </a>\n </MessageRow>\n {/* <MessageRow>\n <a\n href='https://docs.google.com/forms/d/e/1FAIpQLSfX6N8E0-fPVHXDFQN0iKUCjpZNP_cHl4e1kDRwEORk9NmtCw/viewform'\n target='_blank'\n >\n 쿠폰(설문 조사) 링크 {'>'}\n </a>\n </MessageRow> */}\n </div>\n </Bottom>\n <EndBottom>\n <CloseToday>\n <span onClick={this.onCloseToday}>\n <i className='fas fa-check' />\n </span>\n <span onClick={this.onCloseToday}>오늘은 그만보기</span>\n </CloseToday>\n <CloseNow onClick={this.onClose}>닫기</CloseNow>\n </EndBottom>\n </ModalBlock>\n </Container>\n );\n } else {\n return <></>;\n }\n }\n}\n\nclass EventModal extends React.PureComponent {\n state = {\n modal: false,\n };\n\n componentDidMount = () => {\n this.modalValidation();\n };\n\n modalValidation = () => {\n const { lastTime } =\n localStorage.getItem('radiation-modal') &&\n typeof JSON.parse(localStorage.getItem('radiation-modal')) === 'object' &&\n JSON.parse(localStorage.getItem('radiation-modal')) !== null\n ? JSON.parse(localStorage.getItem('radiation-modal'))\n : {\n lastTime: moment().subtract('day', 1).toDate(),\n };\n\n if (!lastTime || moment(lastTime).format('YYYY-MM-DD') !== moment().format('YYYY-MM-DD')) {\n this.setState({ modal: true });\n }\n };\n\n onClose = () => {\n localStorage.setItem('radiation-modal', null);\n this.setState({ modal: false });\n };\n\n onCloseToday = () => {\n localStorage.setItem('radiation-modal', JSON.stringify({ lastTime: moment().toDate() }));\n this.setState({ modal: false });\n };\n\n render() {\n if (this.state.modal) {\n return (\n <Container id='event-popup'>\n <ModalBlock>\n {/* <Top>\n <Title>위드메이트 X 국립암센터 암특화 병원동행 매니저 자격과정 모집</Title>\n </Top> */}\n <Bottom>\n <div style={{ display: 'flex', justifyContent: 'center', paddingTop: '20px' }}>\n <img src='/assets/images/popup_img/event_img.png' style={{ width: '400px', height: 'auto' }} />\n {/* <PopupImage /> */}\n </div>\n <div style={{ marginTop: '10px' }}>\n <MessageRow>\n <a\n onClick={() => {\n this.onClose();\n this.props.history.push({\n pathname: `/newsEvent/info/645dc777f0316a44d06a1fdb`,\n state: { id: '645dc777f0316a44d06a1fdb' },\n });\n }}\n >\n 자세히 보기 {'>'}\n </a>\n </MessageRow>\n </div>\n </Bottom>\n <EndBottom>\n <CloseToday>\n <span onClick={this.onCloseToday}>\n <i className='fas fa-check' />\n </span>\n <span onClick={this.onCloseToday}>오늘은 그만보기</span>\n </CloseToday>\n <CloseNow onClick={this.onClose}>닫기</CloseNow>\n </EndBottom>\n </ModalBlock>\n </Container>\n );\n } else {\n return <></>;\n }\n }\n}\n\nclass NoticeModal extends React.PureComponent {\n state = {\n modal: false,\n };\n\n componentDidMount = () => {\n this.modalValidation();\n };\n\n modalValidation = () => {\n const { lastTime } =\n localStorage.getItem('radiation-modal') &&\n typeof JSON.parse(localStorage.getItem('radiation-modal')) === 'object' &&\n JSON.parse(localStorage.getItem('radiation-modal')) !== null\n ? JSON.parse(localStorage.getItem('radiation-modal'))\n : {\n lastTime: moment().subtract('day', 1).toDate(),\n };\n\n if (!lastTime || moment(lastTime).format('YYYY-MM-DD') !== moment().format('YYYY-MM-DD')) {\n this.setState({ modal: true });\n }\n };\n\n onClose = () => {\n localStorage.setItem('radiation-modal', null);\n this.setState({ modal: false });\n };\n\n onCloseToday = () => {\n localStorage.setItem('radiation-modal', JSON.stringify({ lastTime: moment().toDate() }));\n this.setState({ modal: false });\n };\n\n onCloseToday2 = () => {\n localStorage.setItem('radiation-modal', JSON.stringify({ lastTime: moment().toDate() }));\n this.setState({ modal: false });\n };\n\n render() {\n if (this.state.modal) {\n return (\n <Container id='event-popup'>\n <ModalBlock>\n <Top>\n <Title>서버오류로 인한 데이터 복구작업 안내</Title>\n </Top>\n <Bottom>\n <ContentRow>\n <br />\n <div style={{ fontSize: '16px', textAlign: 'center' }}>\n 서버 오류가 발생하여 손실된 데이터 복구작업 진행중입니다.\n <br />\n 이에 관련하여 문의사항은 고객센터로 연락을 주시면 <br />\n 빠르게 해결해드리겠습니다.\n <br />\n 위드메이트를 이용하시는데 불편을 드려 죄송합니다.\n <br />\n <br />\n <br />\n <b>\n ⏰ 운영시간 : 오전 9시 - 오후 6시 (토·일 제외)\n <br />\n 👩🏻💻 문의방법 : 채널톡 및 카카오톡 혹은 전화(070-4300-9075)\n </b>\n </div>\n </ContentRow>\n <div style={{ marginTop: '15px' }}>\n <MessageRow>\n {/* <a\n onClick={() => {\n this.onClose();\n this.props.history.push(\n {\n pathname: `/newsEvent/info/63c0ec49fe7889400f150b97`,\n state: { id: '63c0ec49fe7889400f150b97' },\n });\n }}\n >\n 자세히 보기 {'>'}\n </a> */}\n </MessageRow>\n </div>\n </Bottom>\n <EndBottom>\n <CloseToday>\n <span onClick={this.onCloseToday2}>\n <i className='fas fa-check' />\n </span>\n <span onClick={this.onCloseToday2}>오늘은 그만보기</span>\n </CloseToday>\n <CloseNow onClick={this.onClose}>닫기</CloseNow>\n </EndBottom>\n </ModalBlock>\n </Container>\n );\n } else {\n return <></>;\n }\n }\n}\n\nclass MetlifeModal extends React.PureComponent {\n state = {\n modal: false,\n };\n\n componentDidMount = () => {\n this.modalValidation();\n };\n\n modalValidation = () => {\n const { lastTime } =\n localStorage.getItem('radiation-modal') &&\n typeof JSON.parse(localStorage.getItem('radiation-modal')) === 'object' &&\n JSON.parse(localStorage.getItem('radiation-modal')) !== null\n ? JSON.parse(localStorage.getItem('radiation-modal'))\n : {\n lastTime: moment().subtract('day', 1).toDate(),\n };\n\n if (!lastTime || moment(lastTime).format('YYYY-MM-DD') !== moment().format('YYYY-MM-DD')) {\n this.setState({ modal: true });\n }\n };\n\n onClose = () => {\n localStorage.setItem('radiation-modal', null);\n this.setState({ modal: false });\n };\n\n onCloseToday = () => {\n localStorage.setItem('radiation-modal', JSON.stringify({ lastTime: moment().toDate() }));\n this.setState({ modal: false });\n };\n\n render() {\n if (this.state.modal) {\n return (\n <Container id='event-popup'>\n <ModalBlock>\n {/* <Top>\n <Title>위드메이트 X 국립암센터 암특화 병원동행 매니저 자격과정 모집</Title>\n </Top> */}\n <Bottom>\n <div style={{ display: 'flex', justifyContent: 'center', paddingTop: '20px' }}>\n <img src='/assets/images/popup_img/metlife_popup.png' style={{ width: '400px', height: 'auto' }} />\n {/* <PopupImage /> */}\n </div>\n <div style={{ marginTop: '10px' }}>\n <MessageRow>\n <a\n onClick={() => {\n this.onClose();\n this.props.history.push('/360F/nemt/service/#types');\n }}\n >\n 서비스 종류 보기 {'>'}\n </a>\n </MessageRow>\n </div>\n </Bottom>\n <EndBottom>\n <CloseToday>\n <span onClick={this.onCloseToday}>\n <i className='fas fa-check' />\n </span>\n <span onClick={this.onCloseToday}>오늘은 그만보기</span>\n </CloseToday>\n <CloseNow onClick={this.onClose}>닫기</CloseNow>\n </EndBottom>\n </ModalBlock>\n </Container>\n );\n } else {\n return <></>;\n }\n }\n}\n\nexport const CustomModal = ({ children }) => {\n return <CustomContaienr>{children}</CustomContaienr>;\n};\n\nconst TableWrapper = styled.div`\n border: 1px solid #e6e6e6;\n border-radius: 4px;\n\n overflow-x: hidden;\n overflow-y: scroll;\n\n margin-bottom: 30px;\n`;\n\nconst TableHeaderWrapper = styled.div`\n border-bottom: 1px solid #e6e6e6;\n padding: 6px 22px;\n\n display: flex;\n`;\n\nconst TableRowWrapper = styled.div`\n border-bottom: 1px solid #e6e6e6;\n padding: 9.5px 22px;\n\n display: flex;\n`;\n\nconst EmptyTable = styled.div`\n height: 100px;\n`;\n\nconst FlexColumn = styled.div`\n flex: 1;\n\n text-align: left;\n\n > span.title {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 10px;\n line-height: 18px;\n\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.4);\n }\n\n > span.value {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 28px;\n\n letter-spacing: -0.2625px;\n color: rgba(0, 0, 0, 0.8);\n }\n`;\n\nconst FlexWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n flex-direction: column;\n width: 100%;\n }\n`;\n\nconst FlexBox = styled.div`\n flex: 1;\n\n width: calc(50% - 10px);\n\n &:first-child {\n margin-right: 20px;\n }\n\n > p.label {\n margin-bottom: 4px;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 11px;\n line-height: 18px;\n\n color: #a7a7a7;\n }\n\n > input {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 20px;\n\n height: 40px;\n line-height: 40px;\n\n color: rgba(0, 0, 0, 0.8);\n }\n\n @media (max-width: 768px) {\n width: 100%;\n\n &:first-child {\n margin-right: 0px;\n }\n }\n`;\n\nconst FlexFullBox = styled(FlexBox)`\n width: 100%;\n\n &:first-child {\n margin-right: 0px;\n }\n\n > input {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 20px;\n\n height: 40px;\n line-height: 40px;\n\n color: rgba(0, 0, 0, 0.8);\n }\n\n > textarea.ant-input {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 20px;\n\n height: 100px;\n line-height: 20px;\n\n color: rgba(0, 0, 0, 0.8);\n }\n`;\n\nexport const EventPopup = withRouter(EventModal);\nexport const ManagerPopup = withRouter(ManagerModal);\nexport const CardPopup = withRouter(CardModal);\nexport const NoticePopup = withRouter(NoticeModal);\nexport const MetlifePopup = withRouter(MetlifeModal);\n\nconst Container = styled.div`\n position: fixed;\n left: 0px;\n top: 0px;\n z-index: 100;\n display: flex;\n width: 100vw;\n height: 100vh;\n align-items: center;\n justify-content: center;\n background-color: rgba(0, 0, 0, 0.6);\n\n @media (max-width: 768px) {\n padding-left: 16px;\n padding-right: 16px;\n overflow: hidden;\n }\n`;\n\nconst CustomContaienr = styled(Container)`\n @media (max-width: 768px) {\n padding-left: 0px;\n padding-right: 0px;\n }\n`;\n\nconst ModalBlock = styled.div`\n margin-top: -46px;\n // margin-right: 400px;\n width: 100%;\n min-width: 430px;\n max-width: 450px;\n max-height: 90%;\n overflow-y: scroll;\n ::-webkit-scrollbar {\n display: none;\n }\n\n background-color: #fdfdfd;\n border-radius: 4px;\n\n @media (max-width: 768px) {\n min-width: auto;\n max-width: 380px;\n margin-right: 0px;\n }\n`;\n\nconst ModalBlock2 = styled.div`\n margin-top: -46px;\n margin-left: 600px;\n width: 100%;\n min-width: 430px;\n max-width: 450px;\n max-height: 90%;\n overflow-y: scroll;\n ::-webkit-scrollbar {\n display: none;\n }\n\n background-color: #fdfdfd;\n border-radius: 4px;\n\n @media (max-width: 768px) {\n min-width: auto;\n max-width: 380px;\n margin-left: 0px;\n }\n`;\n\nconst ModalLargeBlock = styled(ModalBlock)`\n max-width: 740px;\n padding: 32px;\n\n @media (max-width: 1120px) {\n max-width: 540px;\n }\n\n @media (max-width: 768px) {\n max-width: 440px;\n }\n\n @media (max-width: 430px) {\n max-width: 380;\n }\n`;\n\nconst ModalTitle = styled.div`\n font-size: 18px;\n font-weight: bold;\n text-align: center;\n letter-spacing: 0.03px;\n color: rgba(0, 0, 0, 0.87);\n\n position: relative;\n\n margin-top: 24px;\n margin-bottom: 24px;\n`;\n\nconst ModalFlexbox = styled.div`\n display: flex;\n align-items: flex-start;\n\n > div {\n flex: 1;\n }\n`;\n\nconst ModalCloseButtons = styled.img`\n position: absolute;\n top: 0px;\n right: 24px;\n\n display: inline-block;\n width: 18px;\n height: 18px;\n\n cursor: pointer;\n`;\n\nconst ModalLabel = styled.p`\n font-size: 12px;\n color: #b6b6b6;\n margin-bottom: 4px;\n font-weight: bold;\n\n padding-left: 32px;\n padding-right: 32px;\n`;\n\nconst ModalPaddingBlock = styled.div`\n padding-left: 32px;\n padding-right: 32px;\n\n margin-bottom: 24px;\n`;\n\nconst ModalInfo = styled.p`\n font-size: 13px;\n color: #565656;\n margin-bottom: 12px;\n font-weight: bold;\n\n padding-left: 32px;\n padding-right: 32px;\n`;\n\nconst WhiteButton = styled.div`\n width: 100%;\n max-width: calc(100% - 64px);\n height: 40px;\n line-height: 40px;\n\n border-radius: 16px;\n\n border: 1px solid ${mainColor};\n color: ${mainColor}\n\n font-size: 13px;\n text-align: center;\n\n margin: 0 auto;\n margin-bottom: 24px;\n\n cursor: pointer;\n &:hover {\n transition: all 0.5s;\n background-color: ${mainColor};\n color: white;\n }\n`;\n\nconst BlueButton = styled.div`\n \n width: calc(100% - 64px);\n max-width: 360px;\n height: 40px;\n line-height: 40px;\n\n border-radius: 16px;\n\n background-color: ${mainColor};\n color: #ffffff\n\n font-size: 13px;\n text-align: center;\n\n margin: 0 auto;\n\n cursor: pointer;\n &:hover {\n transition: all 0.5s;\n opacity: 0.85;\n }\n`;\n\nconst Top = styled.div`\n // border-bottom: 3px solid ${mainColor};\n\n height: 42px;\n line-height: 42px;\n border-bottom: 2px solid #e9e9e9;\n`;\n\nconst Title = styled.p`\n font-size: 18px;\n font-weight: bold;\n text-align: center;\n letter-spacing: 0.03px;\n color: rgba(0, 0, 0, 0.87);\n margin: 0px;\n`;\n\nconst Bottom = styled.div`\n position: relative;\n // padding-top: 20px;\n padding-bottom: 20px;\n`;\n\nconst BottomImage = styled.div`\n // position: absolute;\n // width: 100%;\n // height: 100%;\n // top: 0px;\n // left: 0px;\n\n width: 100%;\n height: 170px;\n opacity: 0.86;\n\n margin-bottom: 10px;\n\n background-image: url('/assets/images/main_logo.png');\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst PopupImage = styled.div`\n // position: absolute;\n // width: 100%;\n // height: 100%;\n // top: 0px;\n // left: 0px;\n\n width: 100%;\n height: 170px;\n opacity: 0.86;\n\n margin-bottom: 10px;\n\n background-image: url('/assets/images/icons/manager.png');\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n`;\n\nconst ContentRow = styled.p`\n // font-weight: 600;\n margin: 0px;\n font-size: 12px;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 2px;\n padding: 0px 16px;\n text-indent: 4px;\n\n word-break: keep-all;\n\n > span {\n color: ${Pallete.blue100};\n font-weight: bold;\n }\n`;\n\nconst WarningRow = styled.p`\n font-size: 13px;\n font-weight: 600;\n color: red;\n padding: 0px 16px;\n margin-top: 8px;\n`;\n\nconst WarningContentRow = styled.p`\n font-size: 13px;\n color: rgba(0, 0, 0, 0.7);\n // font-weight: bold;\n padding: 0px 16px;\n`;\n\nconst EndBottom = styled.div`\n padding: 6px 16px;\n display: flex;\n align-items: center;\n border-top: 1px solid #e6e6e6;\n background-color: #f5f5f5;\n`;\n\nconst CloseToday = styled.p`\n flex: 1;\n\n > span {\n font-size: 13px;\n margin-right: 4px;\n cursor: pointer;\n }\n\n > span:last-child {\n font-size: 13px;\n color: rgba(0, 0, 0, 0.4);\n cursor: pointer;\n }\n`;\n\nconst CloseNow = styled.p`\n font-size: 13px;\n color: rgba(0, 0, 0, 0.4);\n cursor: pointer;\n`;\n\nconst MessageRow = styled.p`\n font-size: 13px;\n font-weight: bold;\n color: #6e82d6;\n padding: 0px 16px;\n\n word-break: keep-all;\n\n a,\n span {\n text-decoration: none;\n font-size: 12px;\n font-weight: bold;\n color: #6e82d6;\n }\n\n // color: ${mainColor};\n`;\n\nconst Info = styled.p`\n font-size: 12px;\n fong-weight: bold;\n // margin-top: 16px;\n color: rgba(0, 0, 0, 0.6);\n padding: 0px 16px;\n`;\n","import React from 'react';\nimport moment from 'moment';\nimport PropTypes from 'prop-types';\nimport { debounce } from 'lodash';\nimport styled from 'styled-components';\nimport { Button, message, Spin } from 'antd';\nimport _ from 'lodash';\n\n// components\nimport { NoCatchedList } from '../../../Components/User/Mate/reserve';\nimport { MateReserveInfoModal } from '../../../Components/modal';\n\n// utils\nimport { UNEMER } from '../../../Lib/variables';\nimport axios from '../../../Lib/axios';\n\nclass Reserve extends React.PureComponent {\n state = {\n reserveModal: false,\n reserveInfo: null,\n refreshing: false,\n list: [],\n };\n\n componentDidMount = () => {\n this.fetchList();\n };\n\n fetchList = debounce(() => {\n const mateId = localStorage.getItem('id');\n\n this.setState(\n {\n refreshing: true,\n },\n () => {\n axios\n .get('/v2/service/mate/reserve/list', {\n params: {\n mateId,\n },\n })\n .then(resolve => {\n const { data: list } = resolve;\n if (list && Array.isArray(list)) {\n this.setState({ list, refreshing: false });\n }\n })\n .catch(error => {\n this.setState({ refreshing: false });\n });\n },\n );\n }, 300);\n\n onCatchCall = () => {\n const { reserveInfo } = this.state;\n const { id } = this.props.auth;\n\n if (!reserveInfo || !reserveInfo.call || !reserveInfo.call._id) {\n this.setState({ reserveInfo: null, reserveModal: false });\n message.warning('유효하지않은 예약내역입니다. 다른 예약내역을 확인해주세요.');\n return null;\n }\n\n axios\n .put('/v2/service/catch/call', {\n callId: reserveInfo.call._id,\n mateId: id,\n })\n .then(resolve => {\n const { data: result } = resolve;\n if (!result) return message.warning('요청에 실패했습니다.');\n if (result === 'invalid call') return message.warning('잘못된 요청입니다.');\n if (result === 'already catched') return message.warning('이미 접수된 요청입니다.');\n if (result === 'denied') return message.warning('예약자에 의해 거절 당하셨거나 혹은 메이트님이 직접 해당 내역을 수신거부 하셨습니다.');\n if (result === 'success') {\n message.success('예약 접수 요청완료');\n this.setState({ reserveModal: false, reserveInfo: null }, () => {\n this.fetchList();\n });\n }\n })\n .catch(error => {\n message.warning('요청에 실패했습니다.');\n });\n };\n\n render() {\n const { list } = this.state;\n\n return (\n <>\n <NoCatchedList\n data={this.state}\n list={list}\n onRefresh={this.fetchList}\n detailHandler={info => {\n this.setState({ reserveModal: true, reserveInfo: info });\n }}\n />\n\n {this.state.reserveModal ? (\n <MateReserveInfoModal\n info={this.state.reserveInfo}\n visibleHandler={() => {\n this.setState({\n reserveModal: false,\n reserveInfo: null,\n });\n }}\n onCatch={this.onCatchCall}\n />\n ) : null}\n\n {this.state.refreshing ? (\n <SpinWrapper>\n <Spin size='large' />\n </SpinWrapper>\n ) : null}\n </>\n );\n }\n}\n\nconst SpinWrapper = styled.div`\n position: fixed;\n top: 0px;\n left: 0px;\n width: 100vw;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n\n\n z-index: 9999\n background-color: rgba(0, 0, 0, 0.6);\n`;\n\nexport default Reserve;\n","import React from \"react\";\nimport AnimatedNumbers from \"react-animated-numbers\";\nimport styled from 'styled-components';\nimport { BsPeopleFill, BsNewspaper, BsClockFill } from \"react-icons/bs\";\n\nfunction MainNumber() {\n const [num, setNum] = React.useState(3021);\n const [num2, setNum2] = React.useState(289);\n const [num3, setNum3] = React.useState(16700);\n\n return (\n <div className=\"container\" style={{ height: '70px', display: 'flex', flexDirection: 'initial' }}>\n <div style={{ textAlign: 'center' }}>\n <label>총 이용자 수</label>\n <HighLight>\n <b>\n <AnimatedNumbers\n includeComma // 숫자에 쉼표 여부\n easing\n animateToNumber={num}\n animationType={\"calm\"}\n fontStyle={{ fontSize: 30 }}\n configs={(number, index) => {\n return { mass: 1, tension: 430 * (index + 1), friction: 140 };\n }} />\n </b>\n </HighLight>\n </div>  \n\n <div style={{ textAlign: 'center' }}>\n <label>메이트 수</label>\n <HighLight>\n <b><AnimatedNumbers\n includeComma\n easing\n animateToNumber={num2}\n animationType={\"calm\"}\n fontStyle={{ fontSize: 30 }}\n configs={(number, index) => {\n return { mass: 1, tension: 430 * (index + 1), friction: 140 };\n }}\n /></b>\n </HighLight>\n </div>  \n\n <div style={{ textAlign: 'center' }}>\n <label>총 이용 건수</label>\n <HighLight>\n <b><AnimatedNumbers\n includeComma\n easing\n animateToNumber={num3}\n animationType={\"calm\"}\n fontStyle={{ fontSize: 30 }}\n configs={(number, index) => {\n return { mass: 1, tension: 430 * (index + 1), friction: 140 };\n }}\n suffix=\"건\"\n /></b>\n </HighLight>\n </div>\n </div>\n );\n}\n\nexport default MainNumber;\n\nconst HighLight = styled.p`\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n\n margin-bottom: 64px;\n\n @media (max-width: 768px) {\n text-align: center;\n }\n`;","import { message } from 'antd';\nimport React from 'react';\nimport styled from 'styled-components';\nimport swal from 'sweetalert2';\nimport MainNumber from './MainNumber';\nimport Popup from './Popup';\nimport { ManagerPopup } from '../../../../Components/modal';\n\nimport { Swiper, SwiperSlide } from 'swiper/react';\nimport SwiperCore, { Pagination, Navigation, Autoplay } from 'swiper';\nimport 'swiper/swiper-bundle.min.css';\nimport 'swiper/swiper.min.css';\nimport 'swiper/components/navigation/navigation.min.css';\nimport 'swiper/components/pagination/pagination.min.css';\nimport { DivisionLine } from '../../../../Components/Common/input';\n\nSwiperCore.use([Navigation, Pagination, Autoplay]);\n\nexport const UserMain = ({ history }) => {\n return (\n // <Swiper\n // direction={'horizontal'} // 슬라이드의 방향을 수직으로 설정합니다.\n // spaceBetween={50}\n // slidesPerView={1}\n // pagination={{ clickable: true }} // 우측의 점을 클릭했을 때, 클릭한 슬라이드로 이동하게 됩니다.\n // navigation\n // modules={[Pagination]} // 페이지네이션, 마우스휠등을 사용하려면 모듈을 import해줘야 합니다.\n // allowTouchMove // 터치 동작을 허용합니다.\n // className=\"main_slider\"\n // threshold={20} // 터치 감도를 조정합니다. 숫자가 클수록 터치에 반응하지 않습니다.\n // autoplay={{ delay: 4000 }}\n // loop={true}\n // speed={1000} // 슬라이드가 넘어가는 속도를 조정합니다. 단위는 ms입니다.\n // >\n // <SwiperSlide>\n <UserMainContainer>\n <UserMainInnerContainer>\n {/* <TitleSticker>위드메이트를 사용하는 것, 일상을 돌려받는 것</TitleSticker> */}\n <TitleSticker>\n 병원동행매니저가 <span>케어</span>부터 <span>이동</span>까지 다 해드립니다\n </TitleSticker>\n <WithmateSpecRow>\n {/* 전국민 통원치료 <span>해결사</span> */}\n 환우 가족들이 <span>직접 추천</span>하는\n </WithmateSpecRow>\n <WithmateSpecRow>\n <span>병원동행서비스</span>\n </WithmateSpecRow>\n <br />\n <WithmateSpecRow>\n <ButtonWrapper>\n <GooglePlayButton\n onClick={() => {\n window.open('https://play.google.com/store/apps/details?id=com.bluecamel.withmate');\n }}\n >\n <img src='/assets/images/icons/google_play_logo.png' alt='구글플레이' style={{ marginRight: '12px' }} />\n Google Play\n </GooglePlayButton>\n </ButtonWrapper>\n </WithmateSpecRow>\n\n <BottomSection>\n <HighLight>\n {/* <MainNumber /> */}\n <Popup />\n </HighLight>\n\n <HighLight>\n 병원동행매니저가 케어부터 이동까지 <br />\n 위드메이트가 함께합니다.\n </HighLight>\n <ButtonWrapper>\n <ReserveButton\n onClick={() => {\n if (!localStorage.getItem('id')) {\n message.warning('병원 동행서비스 예약을 이용하시려면 로그인 후 이용해주세요.');\n return history.push('/user/login');\n }\n\n history.push('/reserve/items');\n }}\n >\n 온라인 예약하기\n <img src='/assets/images/main_right_blue.png' alt='방향표' />\n </ReserveButton>\n <CallButton\n onClick={() => {\n swal.fire({\n title: '위드메이트 고객센터',\n text: '☎ 070-4300-9075',\n icon: 'info',\n confirmButtonText: '전화걸기',\n cancelButtonText: '확인',\n showCancelButton: true,\n }).then(result => {\n if (result.isConfirmed) {\n document.location.href = 'tel:070-4300-9075';\n }\n });\n }}\n >\n 전화 상담하기\n <img src='/assets/images/main_right_white.png' alt='방향표' />\n </CallButton>\n </ButtonWrapper>\n </BottomSection>\n </UserMainInnerContainer>\n </UserMainContainer>\n // </SwiperSlide>\n // </Swiper>\n );\n};\n\nconst UserMainContainer = styled.div`\n width: 100%;\n height: 628px;\n\n background: linear-gradient(to top, #3bc1ff, #5b62f5);\n\n @media (max-width: 768px) {\n // height: 598px;\n height: 650px;\n }\n`;\n\nconst UserMainContainer2 = styled.div`\n width: 100%;\n height: 628px;\n\n background: #f8f8fa;\n\n @media (max-width: 768px) {\n height: 598px;\n }\n`;\n\nconst UserMainInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n height: 100%;\n margin: 0 auto;\n\n background-image: url('/assets/images/w_main.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n padding-top: 72px;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n padding-top: 52px;\n align-items: center;\n background: transparent;\n }\n`;\n\nconst UserMainInnerContainer2 = styled.div`\n width: 100%;\n max-width: 1120px;\n height: 100%;\n margin: 0 auto;\n\n background-image: url('/assets/images/collaboration/withmate_dlive.png');\n background-size: 90%;\n background-repeat: no-repeat;\n background-position: center;\n\n padding-top: 72px;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n padding-top: 52px;\n align-items: center;\n background: transparent;\n }\n`;\n\nconst TitleSticker = styled.span`\n height: 36px;\n\n padding: 8px 24px;\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: normal;\n text-align: left;\n color: #ffffff;\n\n border-radius: 50vh;\n background-color: #3bc1ff;\n\n margin-bottom: 34px;\n\n @media (max-width: 768px) {\n margin-bottom: 34px;\n }\n`;\n\nconst WithmateSpecRow = styled.div`\n display: flex;\n align-items: flex-end;\n\n font-size: 32px;\n font-stretch: normal;\n font-style: normal;\n font-weight: 300;\n line-height: 1.48;\n letter-spacing: -0.7px;\n text-align: left;\n color: #ffffff;\n\n > span {\n font-size: 32px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.7px;\n text-align: left;\n color: #ffffff;\n\n margin-left: 4px;\n }\n\n > span.big {\n font-size: 64px;\n line-height: 1.2;\n position: relative;\n margin-right: 6px;\n\n > d {\n font-size: 28px;\n position: absolute;\n top: -16px;\n left: calc(50% - 12px);\n }\n }\n\n > span.normal {\n font-size: 40px;\n line-height: 1.2;\n position: relative;\n margin-right: 6px;\n\n > d {\n font-size: 18px;\n position: absolute;\n top: -16px;\n left: calc(50% - 12px);\n }\n }\n\n margin-bottom: 4px;\n\n @media (max-width: 768px) {\n margin-bottom: 8px;\n\n font-size: 22px;\n\n > span {\n font-size: 22px;\n }\n\n > span.big {\n font-size: 48px;\n line-height: 1.2;\n position: relative;\n margin-right: 4px;\n\n > d {\n font-size: 20px;\n position: absolute;\n top: -16px;\n left: calc(50% - 8px);\n }\n }\n }\n`;\n\nconst BottomSection = styled.div`\n margin-top: 32px;\n\n @media (max-width: 768px) {\n margin-top: 43px;\n }\n`;\n\nconst HighLight = styled.p`\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.2px;\n text-align: left;\n color: #ffffff;\n\n margin-bottom: 64px;\n\n @media (max-width: 768px) {\n text-align: center;\n }\n`;\n\nconst ButtonWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: center;\n\n > div:first-child {\n margin-bottom: 8px;\n }\n }\n`;\n\nconst ButtonCommon = styled.div`\n display: flex;\n padding: 20px 24px;\n width: 210px;\n align-items: center;\n justify-content: space-between;\n\n border-radius: 4px;\n margin-right: 8px;\n cursor: pointer;\n\n > img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n }\n\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n\n &:hover {\n box-shadow: 4px 10px 24px -4px rgba(0, 0, 0, 0.1);\n transition: all 0.3s;\n }\n\n @media (max-width: 768px) {\n }\n`;\n\nconst GPButtonCommon = styled.div`\n display: flex;\n padding: 20px 24px;\n width: 210px;\n align-items: center;\n // justify-content: space-between;\n\n border-radius: 4px;\n margin-right: 8px;\n cursor: pointer;\n\n > img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n }\n\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n\n &:hover {\n box-shadow: 4px 10px 24px -4px rgba(0, 0, 0, 0.1);\n transition: all 0.3s;\n }\n\n @media (max-width: 768px) {\n }\n`;\n\nconst ReserveButton = styled(ButtonCommon)`\n background-color: #ffffff;\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n }\n`;\n\nconst CallButton = styled(ButtonCommon)`\n border: 1px solid #ffffff;\n\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: #ffffff;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst GooglePlayButton = styled(GPButtonCommon)`\n background-color: #ffffff;\n background-color: rgba(255, 255, 255, 0.1);\n border-color: #ffffff;\n border-style: solid;\n font-size: 20px;\n // font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n // color: rgba(0, 0, 0, 0.7);\n color: #ffffff;\n height: 60px;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const UserVideoSection = () => {\n return (\n <VideoSectionContainer>\n <VideoSectionInnerContainer>\n {/* <VideoSectionTitle>\n 위드메이트를 사용하는 것,\n <MobileBr /> 일상을 돌려받는 것\n </VideoSectionTitle> */}\n <VideoArea>\n {/* <iframe\n width='100%'\n height='100%'\n src='/assets/videos/withmate_video.mp4'\n title='withmate YouTube video player'\n frameborder='0'\n allow='accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture'\n allowFullScreen\n autoplay='autoplay'\n loop='loop'\n ></iframe> */}\n <video controls loop='loop' autoplay='autoplay' muted playsinline width='800px' height='auto'>\n <source src='/assets/videos/withmate_video.mp4' />\n </video>\n </VideoArea>\n </VideoSectionInnerContainer>\n </VideoSectionContainer>\n );\n};\n\nconst VideoSectionContainer = styled.div`\n // padding-top: 105px;\n // padding-bottom: 208px;\n padding-top: 55px;\n padding-bottom: 55px;\n\n width: 100%;\n background-color: #f9f9f9;\n\n @media (max-width: 768px) {\n // padding-top: 62px;\n padding-top: 10px;\n // padding-bottom: 0px;\n padding-bottom: 10px;\n }\n`;\n\nconst VideoSectionInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n`;\n\nconst VideoSectionTitle = styled.h4`\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.6);\n\n margin-top: 0px;\n margin-bottom: 105px;\n\n @media (max-width: 768px) {\n font-size: 14px;\n margin-bottom: 68px;\n }\n`;\n\nconst VideoArea = styled.div`\n width: 100%;\n height: calc(1120px / 16 * 9);\n background-color: #000000;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n\n @media (max-width: 1120px) {\n height: calc(100vw / 16 * 9);\n }\n\n @media (max-width: 768px) {\n width: 100%;\n height: calc(100vw / 16 * 9);\n background-color: #000000;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n }\n`;\n\nconst MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const UserGuideSection = () => {\n return (\n <UserGuideContainer>\n <UserGuideInnerContainer>\n <UserGuideTitle>서비스 이용 방법</UserGuideTitle>\n <UserGuideStepWrapper>\n <TextStep>서비스 신청</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>동행 인력 매칭</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>병원 방문</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>서비스 결과 확인</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>후불 결제</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>혜택 적립</TextStep>\n </UserGuideStepWrapper>\n\n <MainStepRow>\n <MainStep\n webArrow\n mArrow\n source='/assets/images/main_step_1.png'\n description={`위드메이트 플랫폼에 회원 가입 후\\n병원 동행 서비스 종류를 선택하고\\n신청해주세요!`}\n num='01'\n name='신청하세요!'\n />\n <MainStep\n webArrow\n mArrow\n source='/assets/images/main_step_2.png'\n description={`접수하신 서비스는 24시간 내에\\n매칭 가능 여부가 결정됩니다. 동행 인력이\\n매칭을 시도하면 고객님께서 매칭 수락\\n여부를 결정하시면 됩니다!`}\n num='02'\n name='매칭되세요!'\n />\n <MainStep\n className='uniq'\n mArrow\n source='/assets/images/main_step_3.png'\n description={`동행 인력 매칭 성공 후 예정된 진료일에\\n병원에 다녀오세요! 병원에서 하실 일은\\n진료를 받는 것 밖에 없습니다.\\n진료 동행, 보호자 대행, 병원 행정 보조 등\\n 나머지는 위드메이트가 해드립니다.`}\n num='03'\n name='다녀오세요!'\n />\n </MainStepRow>\n\n <MainStepRow>\n <MainStep\n webArrow\n mArrow\n source='/assets/images/main_step_4.png'\n description={`위드메이트는 동행 서비스 진행 과정을\\n실시간 카카오 알림톡으로 알려드리고,\\n서비스 종료 후 진료 결과와 특이사항 등의\\n내용이 정리된 서비스 리포트를 제공합니다`}\n num='04'\n name='확인하세요!'\n />\n <MainStep\n webArrow\n mArrow\n source='/assets/images/main_step_5.png'\n description={`위드메이트는 정확한 시간 계산이 불가능한\\n병원 진료 특성상, 서비스 요금의 투명성을\\n위해 후불 결제를 진행하고 있습니다.\\n서비스 시간은 초 단위로 자동 계산되니,\\n안심하고 서비스를 받으세요!`}\n num='05'\n name='후불이에요!'\n />\n <MainStep\n source='/assets/images/main_step_6.png'\n description={`회원 가입만 해도 2,000 포인트를\\n지급해드리며, 매번 서비스 후기 작성을\\n할 때마다 최대 3,000 포인트를 지급해드려요!\\n적립된 포인트로 더 저렴하게 서비스를\\n이용해보세요!`}\n num='06'\n name='받아가세요!'\n />\n </MainStepRow>\n </UserGuideInnerContainer>\n </UserGuideContainer>\n );\n};\n\nconst MainStep = ({ webArrow, mArrow, source, num, name, description, className }) => {\n return (\n <MainStepWrapper className={className || ''}>\n <MainStepImageSection>\n <img className='bg' src={source} alt='thumbnail' />\n </MainStepImageSection>\n\n <MainStepTextSection>\n <StepIndex>{num}</StepIndex>\n <StepTitle>{name}</StepTitle>\n <StepDescription>\n {description.split('\\n').map((word, index) => (\n <span key={'word-break-down-' + index.toString() + num}>\n {word}\n <KeepBr />\n </span>\n ))}\n </StepDescription>\n </MainStepTextSection>\n <img className={`arrow ${webArrow && 'web'} ${mArrow && 'mobile'}`} src='/assets/images/w_main_stepper.png' />\n </MainStepWrapper>\n );\n};\n\nconst UserGuideContainer = styled.div`\n width: 100%;\n\n background-color: #ffffff;\n\n padding-top: 103px;\n padding-bottom: 162px;\n\n @media (max-width: 768px) {\n padding-top: 90px;\n padding-bottom: 130px;\n }\n`;\n\nconst UserGuideInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n`;\n\nconst UserGuideTitle = styled.h4`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n\n margin-top: 0px;\n margin-bottom: 32px;\n\n @media (max-width: 768px) {\n font-size: 16px;\n line-height: 1.42;\n letter-spacing: -0.1px;\n margin-bottom: 24px;\n }\n`;\n\nconst UserGuideStepWrapper = styled.div`\n width: 100%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n margin-bottom: 90px;\n\n @media (max-width: 768px) {\n flex-direction: column;\n margin-bottom: 77px;\n }\n`;\n\nconst TextStep = styled.span`\n font-size: 15px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: normal;\n text-align: left;\n color: rgba(0, 0, 0, 0.6);\n`;\n\nconst ImgStep = styled.img`\n margin-left: 16px;\n margin-right: 16px;\n\n width: 24px;\n height: 24px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n transform: rotate(90deg);\n\n width: 16px;\n height: 16px;\n\n margin-left: 0px;\n margin-right: 0px;\n\n margin-top: 8px;\n margin-bottom: 8px;\n }\n`;\n\nconst MainStepRow = styled.div`\n display: flex;\n align-items: flex-start;\n\n > div:first-child {\n border-left: 0px;\n }\n\n > div:last-child {\n border-right: 0px;\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: center;\n\n > div:last-child {\n border-bottom: 0px;\n }\n\n > div.uniq {\n border-bottom: 1px solid #f2f2f2;\n }\n }\n`;\n\nconst MainStepWrapper = styled.div`\n padding-left: 47px;\n padding-right: 52px;\n border-right: 1px solid #f2f2f2;\n\n position: relative;\n\n > img.arrow {\n width: 24px;\n height: 24px;\n\n position: absolute;\n top: calc(90px - 12px);\n right: -11.5px;\n\n display: none;\n }\n\n > img.mobile {\n display: none;\n }\n\n > img.web {\n display: block;\n }\n\n @media (max-width: 768px) {\n border-right: 0px;\n border-bottom: 1px solid #f2f2f2;\n\n > img.arrow {\n width: 24px;\n height: 24px;\n\n top: unset;\n right: unset;\n bottom: -10px;\n left: calc(50% - 12px);\n\n transform: rotate(90deg);\n }\n\n > img.web {\n display: none;\n }\n\n > img.mobile {\n display: block;\n }\n }\n\n @media (max-width: 768px) {\n padding-right: 0px;\n padding-left: 0px;\n padding-bottom: 44px;\n }\n`;\n\nconst MainStepImageSection = styled.div`\n width: 288px;\n height: 180px;\n\n margin-bottom: 24px;\n\n > img.bg {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n @media (max-width: 768px) {\n width: 100%;\n text-align: center;\n }\n`;\n\nconst MainStepTextSection = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n`;\n\nconst StepIndex = styled.span`\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.43;\n letter-spacing: normal;\n text-align: center;\n color: #afb0b2;\n margin-bottom: 8px;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst StepTitle = styled.span`\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: left;\n margin-bottom: 24px;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n }\n`;\n\nconst StepDescription = styled.span`\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n }\n word-break: keep-all;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst KeepBr = styled.br`\n display: block;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const UserMainBanner = ({ goPage }) => (\n <BannerContainer>\n <Description>\n 위드메이트에 대해 더 알고 싶으시죠? <br />\n 위드메이트를 소개해드릴게요!\n </Description>\n <LinkButton onClick={goPage}>\n 위드메이트 소개\n <img src='/assets/images/main_right_white.png' />\n </LinkButton>\n </BannerContainer>\n);\n\nconst BannerContainer = styled.div`\n width: 100%;\n background-color: #3bc1ff;\n\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n\n padding: 48px 0px;\n\n @media (max-width: 480px) {\n padding-top: 67px;\n padding-bottom: 51px;\n }\n`;\n\nconst Description = styled.p`\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: center;\n color: #ffffff;\n\n margin-bottom: 24px;\n\n > br {\n display: none;\n @media (max-width: 480px) {\n display: block;\n }\n }\n`;\n\nconst LinkButton = styled.a`\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: 1px solid #ffffff;\n border-radius: 50vh;\n\n padding: 20px 24px;\n\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: #ffffff;\n\n cursor: pointer;\n\n > img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n\n margin-left: 18px;\n }\n &:hover {\n background-color: transparent;\n color: #ffffff;\n }\n`;\n","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../theme';\n\nconst HomeStyledContainer = styled.div`\n padding-top: 55px;\n\n .center-title {\n text-align: center;\n margin-bottom: 28px;\n\n > p {\n height: 52px;\n line-height: 52px;\n margin-bottom: 0px;\n font-size: 28px;\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n\n .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 0px;\n }\n\n .ant-collapse-borderless > .ant-collapse-item {\n border: 0px;\n }\n\n .ant-collapse-content > .ant-collapse-content-box {\n padding: 0px;\n padding-top: 4px;\n padding-bottom: 12px;\n }\n\n .fake-input {\n width: 100%;\n height: 36px;\n border-radius: 4px;\n border: 1px solid #e6e6e6;\n }\n\n .main-section {\n position: relative;\n width: 100%;\n height: 100vh;\n max-height: 628px;\n // min-height: calc(100vh - 55px);\n\n // background-color: #ebf9ff;\n // background-image: url('/assets/images/new_mainbg.png');\n background-color: linear-gradient(to top, #3bc1ff, #5b62f5);\n background-image: url('/assets/images/w_main.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n @media (max-width: 768px) {\n background-image: url('/assets/images/new_mainbg-mobile.png');\n min-height: 86vh;\n\n .inner-container {\n padding: 0px;\n padding-bottom: 30px;\n min-height: 86vh;\n\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n }\n }\n\n .ant-input[disabled] {\n color: rgba(0, 0, 0, 0.7);\n }\n .ant-input {\n font-size: 12px;\n }\n\n .order-menu-wrapper {\n width: 50%;\n position: relative;\n max-width: 440px;\n min-width: 370px;\n background-color: white;\n border-radius: 8px;\n box-shadow: 1px 2px 3.5px #e6e6e6;\n padding: 32px;\n\n .mobile-close-button {\n display: none;\n }\n\n @media (max-width: 768px) {\n display: none;\n\n &.active {\n display: block;\n }\n\n margin: 0px auto;\n position: fixed;\n z-index: 99;\n top: 55px;\n left: 0px;\n width: 100%;\n max-width: 100%;\n height: calc(100vh - 55px);\n overflow: scroll;\n border-radius: 0px;\n\n .mobile-close-button {\n display: block;\n position: absolute;\n top: 16px;\n right: 24px;\n padding: 6px;\n cursor: pointer;\n\n img {\n width: 18px;\n height: 18px;\n }\n }\n\n &.blocked {\n z-index: 0;\n position: relative;\n height: auto;\n overflow: auto;\n }\n }\n\n .order-title {\n margin-bottom: 20px;\n\n p {\n margin: 0px;\n padding: 0px;\n font-size: ${sizeHandler(28)};\n font-weight: bold;\n letter-spacing: -0.7px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .service {\n margin-bottom: 20px;\n\n .time-checker {\n width: calc(50% - 4px);\n }\n\n .time-checker.margin {\n margin-right: 8px;\n }\n\n .search-button {\n position: absolute;\n top: 1px;\n right: 1px;\n background-color: #ececec;\n height: 34px;\n width: 50px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n\n font-size: 12px;\n line-height: 34px;\n text-align: center;\n cursor: pointer;\n color: rgba(0, 0, 0, 0.4);\n }\n\n .service-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #ddd;\n border-radius: 6px;\n\n .tab {\n flex: 1;\n height: 48px;\n border-right: 1px solid #ddd;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:last-child {\n border: 0px;\n }\n\n span {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.2px;\n font-weight: bold;\n color: ${mainColor};\n }\n }\n\n .tab.active {\n background-color: ${mainColor};\n\n span {\n color: white;\n }\n }\n }\n\n .info-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n\n p {\n flex: 1;\n margin: 0px;\n padding: 0px;\n text-align: left;\n\n &:first-child {\n margin-right: 8px;\n }\n }\n }\n\n .info-input-tab {\n display: flex;\n align-items: center;\n\n > div {\n flex: 1;\n\n &:first-child {\n margin-right: 8px;\n }\n }\n\n .name-wrapper {\n position: relative;\n\n .sex-type-wrapper {\n position: absolute;\n top: 1px;\n right: 1px;\n z-index: 3;\n background-color: white;\n\n .sex-type {\n display: inline-block;\n width: 34px;\n height: 34px;\n line-height: 36px;\n text-align: center;\n border-left: 1px solid #e6e6e6;\n\n font-size: ${sizeHandler(14)};\n font-weight: normal;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.2);\n cursor: pointer;\n\n &:hover {\n color: rgba(0, 0, 0, 0.3);\n transition: all 0.3s;\n }\n\n &.active {\n color: ${mainColor};\n }\n }\n }\n }\n\n .input {\n flex-grow: 1;\n display: flex;\n min-width: 0;\n align-items: center;\n\n border-radius: 4px;\n border: solid 1px #e6e6e6;\n min-height: 36px;\n line-height: 36px;\n text-indent: 12px;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n background-color: #f5f5f5;\n cursor: not-allowed;\n\n p {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n // .ant-input {\n // color: rgba(0, 0, 0, 0.8);\n // }\n\n &.phone {\n flex: 0.5;\n\n @media (max-width: 768px) {\n flex: 1;\n }\n }\n\n &.input-with-icon {\n p {\n height: 100%;\n flex: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n div {\n height: 100%;\n width: 36px;\n border-left: 1px solid #e6e6e6;\n display: flex;\n justify-content: center;\n align-items: center;\n\n span {\n text-align: center;\n text-indent: 0px;\n // opacity: 0.3;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n img {\n width: 18px;\n }\n }\n }\n }\n }\n }\n\n .service-fee-wrapper {\n margin-bottom: 32px;\n\n .service {\n display: flex;\n align-items: center;\n padding-top: 12px;\n margin-bottom: 0px;\n\n .name {\n flex: 1;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .fee {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: right;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n input {\n height: 36px;\n display: inline-block;\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ant-input-number-input-wrap {\n height: 100%;\n\n .ant-input-number-input {\n height: 100%;\n }\n\n input {\n height: 100%;\n }\n }\n\n .select {\n display: inline-block;\n height: 36px;\n width: 100%;\n\n .ant-select-selection--single {\n height: 100%;\n }\n\n .ant-select-selection__rendered {\n line-height: 36px;\n }\n }\n\n .info {\n font-size: ${sizeHandler(12)};\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 4px;\n letter-spacing: -0.15px;\n }\n\n .ant-select-selection__rendered {\n margin-right: 34px;\n border-right: 1px solid #e6e6e6;\n }\n\n .ant-select-arrow {\n color: ${mainColor};\n }\n\n .image-with-text {\n display: flex;\n align-items: center;\n img {\n height: 18px;\n border: 0px;\n }\n\n p {\n flex: 1;\n margin: 0px;\n padding: 0px;\n margin-left: 12px;\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: #3bc1ff;\n }\n }\n }\n\n .side-summary-tab {\n position: absolute;\n top: 0px;\n right: -380px;\n width: 360px;\n height: 100%;\n background-color: white;\n border-radius: 8px;\n box-shadow: 1px 2px 3.5px #e6e6e6;\n padding: 32px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n border-radius: 0px;\n box-shadow: none;\n padding: 0px;\n position: relative;\n top: 55px;\n left: 0px;\n background-color: transparent;\n }\n\n .refund-info-wrapper {\n flex: 1;\n display: flex;\n align-items: flex-end;\n\n .info-wrapper {\n width: 100%;\n\n .title {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n color: #a7a7a7;\n margin-bottom: 8px;\n }\n\n .info {\n font-size: ${sizeHandler(10)};\n line-height: ${sizeHandler(16)};\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n margin-top: 36px;\n padding-bottom: 20px;\n\n .info {\n margin-bottom: 60px;\n }\n }\n }\n }\n }\n }\n }\n\n .additional-fee {\n p {\n margin: 0px;\n padding: 0px;\n margin-top: 8px;\n font-size: ${sizeHandler(10)};\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .ant-input-number {\n width: 100%;\n height: 48px;\n\n .ant-input-number-input-wrap {\n height: 100%;\n\n .ant-input-number-input {\n height: 100%;\n }\n\n input {\n height: 100%;\n }\n }\n\n .ant-input-number-handler-wrap {\n opacity: 1;\n width: 48px;\n\n span {\n display: flex;\n align-items: center;\n justify-content: center;\n\n i {\n position: relative;\n margin-top: 0px;\n left: 0px;\n top: 0px;\n bottom: 0px;\n right: 0px;\n font-size: 16px;\n }\n }\n .anticon.anticon-up.ant-input-number-handler-up-inner {\n color: ${mainColor};\n }\n .anticon.anticon-down.ant-input-number-handler-down-inner {\n color: ${mainColor};\n }\n }\n }\n\n .total-fee-wrapper {\n padding: 18px 0px;\n border-top: 1px solid #e6e6e6;\n border-bottom: 1px solid #e6e6e6;\n\n .total-fee {\n display: flex;\n align-items: center;\n\n .total-min {\n flex: 1;\n font-size: ${sizeHandler(14)};\n // font-weight: bold;\n letter-spacing: -0.5px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .fee-min {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.5px;\n text-align: right;\n // font-weight: bold;\n // color: #3bc1ff;\n\n color: rgba(0, 0, 0, 0.7);\n }\n\n span.vat {\n font-size: ${sizeHandler(11)};\n color: #565656;\n }\n }\n\n .total {\n flex: 1;\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n letter-spacing: -0.5px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .fee {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n letter-spacing: -0.5px;\n text-align: right;\n color: #3bc1ff;\n }\n }\n\n // 여기\n .service-section {\n .concept-container {\n margin-bottom: 68px;\n\n .concept-title {\n font-size: 24px;\n font-weight: bold;\n line-height: 2.17;\n letter-spacing: -0.67px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 12px;\n }\n\n .concept-body {\n font-size: 18px;\n font-weight: normal;\n line-height: 1.78;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n @media (max-width: 768px) {\n font-size: 16px;\n }\n }\n }\n\n .service-item:last-child {\n border-top: 1px solid #e6e6e6;\n margin-top: 96px;\n padding-top: 96px;\n }\n\n .service-item {\n .service-name {\n p {\n font-size: ${sizeHandler(36)};\n font-weight: bold;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n position: relative;\n\n .stamp {\n margin-left: 20px;\n padding: 8px 12px;\n border-radius: 4px;\n background-color: #ff0052;\n font-size: 10px;\n font-weight: bold;\n text-align: center;\n color: #ffffff;\n\n position: absolute;\n bottom: 6px;\n }\n }\n\n margin-bottom: 12px;\n }\n\n .mobile {\n display: none;\n }\n\n .desktop {\n display: block;\n }\n\n .service-info {\n display: flex;\n align-items: center;\n\n .service-photo {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-left: 60px;\n\n img {\n // height: 100%;\n width: 100%;\n }\n }\n\n .info-wrapper {\n flex: 2;\n\n .main-description {\n font-size: ${sizeHandler(18)};\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -0.3px;\n margin-bottom: 32px;\n\n @media (max-width: 768px) {\n font-size: 16px;\n }\n }\n\n .service-detail {\n display: flex;\n align-item: center;\n\n .target-price {\n // flex: ;\n min-width: 240px;\n\n .target {\n margin-bottom: 36px;\n }\n }\n\n .scheme {\n flex: 1;\n margin-left: 20px;\n\n .scheme-items {\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n height: 38px;\n line-height: 38px;\n margin: 0px;\n padding: 0px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n border-bottom: 1px solid #e6e6e6;\n }\n\n .ps {\n font-size: ${sizeHandler(14)};\n color: ${mainColor};\n // font-weight: bold;\n height: 28px;\n line-height: 28px;\n\n &:nth-child(2n-1) {\n color: #ff5500;\n }\n }\n }\n }\n\n .detail-button-wrapper {\n min-width: 240px;\n margin-top: 40px;\n background-color: #606060;\n border-radius: 4px;\n height: 48px;\n cursor: pointer;\n\n p {\n width: 100%;\n height: 100%;\n text-align: center;\n line-height: 48px;\n font-size: ${sizeHandler(14)};\n color: white;\n font-weight: bold;\n }\n }\n\n .reserve-button-wrapper {\n flex: 1;\n\n margin-top: 40px;\n background-color: ${mainColor};\n border-radius: 4px;\n height: 48px;\n cursor: pointer;\n\n p {\n width: 100%;\n height: 100%;\n text-align: center;\n line-height: 48px;\n font-size: ${sizeHandler(14)};\n color: white;\n font-weight: bold;\n }\n }\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 36px;\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .price-content {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n color: #606060;\n letter-spacing: -0.3px;\n }\n\n .info-container {\n .spec-title {\n font-size: 18px;\n font-weight: bold;\n line-height: 1.56;\n letter-spacing: normal;\n color: rgba(0, 0, 0, 0.8);\n }\n\n .spec-wrapper {\n padding: 8px 0px;\n border-bottom: 1px solid #e6e6e6;\n\n .spec-row {\n font-size: 14px;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n }\n\n .spec-sub {\n font-size: 12px;\n letter-spacing: -0.26px;\n color: #a7a7a7;\n margin: 0px;\n margin-top: 4px;\n }\n }\n }\n\n .button-container {\n display: flex;\n align-items: center;\n margin-top: 32px;\n\n .button {\n border-radius: 4px;\n height: 48px;\n line-height: 48px;\n text-align: center;\n cursor: pointer;\n\n &.video-button {\n width: 285px;\n background-color: #606060;\n margin-right: 20px;\n\n &:hover {\n transition: all 0.3s;\n background-color: #707070;\n }\n }\n\n &.reserve-button {\n background-color: #3bc1ff;\n flex: 1;\n\n &:hover {\n transition: all 0.3s;\n background-color: #54c9ff;\n }\n }\n\n span {\n font-size: 14px;\n font-weight: bold;\n text-align: center;\n color: #ffffff;\n }\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n\n .button {\n width: 100% !important;\n margin-right: 0px !important;\n height: 40px;\n line-height: 40px;\n\n &:last-child {\n margin-top: 16px;\n }\n }\n }\n }\n }\n }\n }\n\n @media (max-width: 768px) {\n .service-item {\n .service-name {\n p {\n font-size: ${sizeHandler(30)};\n\n .stamp {\n padding: 4px 8px;\n bottom: 8px;\n }\n }\n }\n\n .service-info {\n display: block;\n\n .service-photo {\n margin-top: 40px;\n padding-left: 0px;\n\n img {\n width: 100%;\n }\n }\n\n .info-wrapper {\n width: 100%;\n\n > p {\n font-size: ${sizeHandler(16)};\n }\n\n .service-detail {\n flex-direction: column;\n\n .service-photo {\n display: none;\n }\n\n .scheme {\n margin: 0px;\n }\n }\n\n .detail-button-wrapper {\n display: block;\n width: 100%;\n height: 40px;\n\n p {\n line-height: 40px;\n }\n }\n\n .reserve-button-wrapper {\n display: block;\n width: 100%;\n height: 40px;\n\n p {\n line-height: 40px;\n }\n }\n .mobile {\n display: block;\n }\n\n .desktop {\n display: none;\n }\n }\n }\n }\n }\n }\n\n .reserve-section {\n .menu-top {\n display: flex;\n align-items: flex-end;\n margin-bottom: 16px;\n\n .main-title {\n flex: 1;\n font-size: 28px;\n font-weight: bold;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n }\n\n .sub-button {\n color: ${mainColor};\n font-weight: bold;\n font-size: 14px;\n cursor: pointer;\n }\n }\n\n .menu-bottom {\n .reserve-menu {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n margin-bottom: 12px;\n border-radius: 4px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n background-color: #ffffff;\n\n .title {\n color: #a7a7a7;\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n margin: 0px;\n padding: 0px;\n }\n\n .contents {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: #606060;\n margin: 0px;\n padding: 0px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .service-name {\n flex: 0.7;\n .contents {\n color: ${mainColor};\n }\n }\n\n .user {\n flex: 0.5;\n }\n\n .date {\n flex: 0.7;\n }\n\n .hospital {\n flex: 1;\n }\n\n .status {\n flex: 0.4;\n }\n\n .button {\n flex: 0.5;\n > div {\n display: flex;\n height: 48px;\n border-radius: 4px;\n align-items: center;\n justify-content: center;\n border: 1px solid ${mainColor};\n cursor: pointer;\n transition: all 0.3s;\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: ${mainColor};\n }\n\n &:hover {\n background-color: ${mainColor};\n span {\n color: white;\n }\n }\n }\n }\n\n .content.service {\n color: ${mainColor};\n }\n }\n @media (max-width: 768px) {\n .reserve-menu {\n flex-direction: column;\n align-items: flex-start;\n justify-content: flex-start;\n\n .contents {\n margin-bottom: 20px;\n }\n\n .button {\n width: 100%;\n > div {\n height: 40px;\n }\n }\n }\n }\n }\n }\n\n .section-title {\n padding-bottom: 16px;\n border-bottom: 1px solid #ececec;\n margin-bottom: 48px;\n\n p {\n font-size: ${sizeHandler(18)};\n color: #a7a7a7;\n font-weight: bold;\n margin: 0px;\n padding: 0px;\n opacity: 1;\n }\n }\n\n .order-menu-mobile-wrapper {\n // position: absolute;\n // bottom: 68px;\n // left: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n width: 100%;\n padding: 10px;\n\n p {\n text-align: center;\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: white;\n }\n\n p:nth-child(1) {\n font-size: ${sizeHandler(14)};\n font-weight: normal;\n letter-spacing: -0.3px;\n text-align: center;\n color: white;\n lineheight: ${sizeHandler(20)};\n }\n\n button {\n width: 100%;\n height: 56px;\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n text-align: center;\n color: #ffffff;\n margin-top: 28px;\n }\n\n @media (min-width: 768px) {\n display: none;\n }\n }\n`;\n\nexport default HomeStyledContainer;\n\nexport const UserMainContainer = styled.div`\n width: 100%;\n // min-height: calc(100vh - 55px);\n // background-image: url('/assets/images/');\n\n height: 100vh;\n max-height: 628px;\n\n background-color: linear-gradient(to top, #3bc1ff, #5b62f5);\n background-image: url('/assets/images/w_main.png');\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n padding-top: calc((100vh - 55px) * 0.2);\n\n @media (max-width: 768px) {\n background-size: cover;\n background-image: url('/assets/images/new_mainbg-mobile.png');\n\n min-height: initial;\n height: 600px;\n\n padding-top: 354px;\n }\n`;\n\nexport const InnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n\n @media (max-width: 1120px) {\n padding-left: 32px;\n padding-right: 32px;\n }\n\n @media (max-width: 768px) {\n padding-left: 0px;\n padding-right: 0px;\n }\n`;\n\nexport const UserMainTitle = styled.div`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 50px;\n line-height: 66px;\n\n letter-spacing: -1.44444px;\n\n color: #ffffff;\n\n position: relative;\n margin-bottom: 16px;\n\n @media (max-width: 768px) {\n > br {\n display: block;\n }\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 22px;\n line-height: 30px;\n\n text-align: center;\n color: #ffffff;\n\n margin-bottom: 4px;\n }\n`;\n\nexport const UserMainTitleDeco = styled.img`\n position: absolute;\n\n object-fit: contain;\n\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const DecoRight = styled(UserMainTitleDeco)`\n top: 0px;\n left: 240px;\n\n width: 32px;\n height: 32px;\n`;\n\nexport const DecoLeft = styled(UserMainTitleDeco)`\n top: 36px;\n left: -60px;\n\n width: 22px;\n height: 22px;\n`;\n\nexport const DecoLeftTop = styled(UserMainTitleDeco)`\n top: -52px;\n left: -62px;\n\n width: 62px;\n height: 62px;\n`;\n\nexport const UserMainSubtitle = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 22px;\n line-height: 30px;\n color: rgba(255, 255, 255, 0.8);\n letter-spacing: -0.4px;\n\n margin-bottom: 44px;\n\n @media (max-width: 768px) {\n font-weight: normal;\n font-size: 12px;\n line-height: 22px;\n letter-spacing: -0.3px;\n text-align: center;\n\n margin-bottom: 24px;\n }\n`;\n\nexport const UserMainRoute = styled.div`\n width: 100%;\n\n @media (max-width: 768px) {\n text-align: center;\n }\n`;\n\nexport const UserMainRouteButton = styled.a`\n display: inline-block;\n width: 100%;\n max-width: 360px;\n height: 64px;\n line-height: 64px;\n\n background: #3bc1ff;\n border: 1px solid #3bc1ff;\n box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 19px;\n letter-spacing: 0.2;\n\n text-align: center;\n\n color: #ffffff;\n cursor: pointer;\n\n &:hover {\n transition: 0.5s;\n opacity: 0.85;\n }\n\n @media (max-width: 768px) {\n width: calc(100vw - 20px);\n max-width: 360px;\n\n height: 56px;\n line-height: 56px;\n font-size: 16px;\n\n margin: 0 auto;\n }\n`;\n\nexport const PartnerContainer = styled.div`\n width: 100%;\n\n padding-top: 60px;\n padding-bottom: 60px;\n\n @media (max-width: 768px) {\n margin-top: 40px;\n }\n`;\n\nexport const PartnerInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n\n margin: 0 auto;\n\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n\n position: relative;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-width: 768px) {\n padding-left: 24px;\n padding-right: 24px;\n }\n`;\n\nexport const PartnerTitle = styled.div`\n display: flex;\n flex-direction: column;\n width: auto;\n\n align-items: center;\n margin-top: 10px;\n margin-bottom: 46px;\n\n > img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n\n margin-bottom: 16px;\n }\n\n > span {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: center;\n // color: #3bc1ff;\n }\n\n @media (max-width: 1120px) {\n width: 100%;\n text-align: left;\n }\n`;\n\nexport const PartnerListRow = styled.div`\n display: flex;\n width: 100%;\n\n justify-content: space-between;\n align-items: center;\n text-align: center;\n flex-wrap: wrap;\n\n @media (max-width: 768px) {\n justify-content: flex-start;\n }\n\n @media (max-width: 480px) {\n justify-content: space-between;\n\n > div:nth-child(2n) {\n margin-right: 0px;\n }\n }\n`;\n\nexport const PartnerItem = styled.div`\n margin-bottom: 10px;\n\n width: 215px;\n height: 76px;\n\n border-radius: 4px;\n // box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n // border: 1px solid rgba(0, 0, 0, 0.1);\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n > img {\n height: 100%;\n width: 100%;\n object-fit: cover;\n transform: scale(1.1);\n }\n\n @media (max-width: 768px) {\n margin-right: 8px;\n margin-bottom: 8px;\n }\n\n @media (max-width: 480px) {\n width: calc(50% - 4px);\n height: calc((50vw - 24px) * 0.35);\n }\n`;\n\nexport const SectionHeader = styled.div`\n padding-bottom: 10px;\n margin-bottom: 66px;\n\n border-bottom: 1px solid #e9e9e9;\n\n display: flex;\n align-items: flex-end;\n\n > img {\n width: 58px;\n height: 76px;\n object-fit: contain;\n\n margin-right: 16px;\n }\n\n > span {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 26px;\n line-height: 50px;\n\n text-align: center;\n letter-spacing: -0.777778px;\n\n color: rgba(0, 0, 0, 0.8);\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: center;\n justify-content: center;\n > img {\n width: 48px;\n height: 48px;\n\n margin-bottom: 10px;\n }\n\n > span {\n font-size: 20px;\n line-height: 32px;\n text-align: center;\n letter-spacing: -0.555556px;\n }\n }\n`;\n\nexport const ServiceListContainer = styled.div`\n margin-bottom: 102px;\n\n @media (max-width: 1120px) {\n padding-left: 20px;\n padding-right: 20px;\n }\n`;\n\nexport const ServiceListInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n\n margin: 0 auto;\n`;\n\nexport const ServiceBoxWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const ServiceBoxContainer = styled.div`\n margin-right: 20px;\n\n &:last-child {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n margin-right: 0px;\n }\n\n margin-bottom: 46px;\n`;\n\nexport const ServiceBoxHeader = styled.div`\n > p:first-child {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 12px;\n line-height: 26px;\n\n letter-spacing: -0.3px;\n }\n\n > p:last-child {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 20px;\n line-height: 32px;\n\n letter-spacing: -0.6px;\n }\n`;\n\nexport const ServiceBoxImageWrapper = styled.div`\n border-radius: 6px;\n overflow: hidden;\n`;\n\nexport const ServiceBoxImg = styled.img`\n width: calc((1120px / 3) - (40px / 3));\n max-width: 360px;\n object-fit: contain;\n\n @media (max-width: 1120px) {\n max-width: 280px;\n }\n\n @media (max-width: 900px) {\n max-width: 240px;\n }\n\n @media (max-width: 768px) {\n max-width: 300px;\n }\n`;\n\nexport const ServiceBoxButtons = styled.div`\n width: 100%;\n display: flex;\n\n margin-top: -12px;\n`;\n\nexport const MoreButton = styled.a`\n width: 132px;\n height: 48px;\n\n text-align: center;\n line-height: 48px;\n\n background: #606060;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 13px;\n\n color: #ffffff;\n\n cursor: pointer;\n`;\n\nexport const ActionButton = styled.span`\n flex: 1;\n\n height: 48px;\n line-height: 48px;\n\n text-align: center;\n\n background: #3bc1ff;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 13px;\n\n color: #ffffff;\n\n > img {\n margin-right: 6px;\n\n width: 18px;\n height: 18px;\n object-fit: contain;\n }\n\n cursor: pointer;\n`;\n\nexport const IntroduceSection = styled.div`\n display: flex;\n align-items: center;\n\n margin-bottom: 40px;\n\n > div {\n width: 50%;\n flex: 1;\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const IntroduceSectionFst = styled(IntroduceSection)`\n div.text-block {\n @media (max-width: 768px) {\n order: 2;\n width: 100%;\n\n p {\n text-align: center;\n }\n }\n }\n\n div.img-block {\n position: relative;\n text-align: center;\n\n display: flex;\n align-items: center;\n height: 100px;\n\n img {\n position: absolute;\n bottom: -50px;\n\n left: 5%;\n\n width: 50%;\n object-fit: contain;\n }\n\n @media (max-width: 768px) {\n order: 1;\n width: 100%;\n justify-content: center;\n\n margin-bottom: 14px;\n\n > img {\n position: initial;\n }\n }\n }\n`;\n\nexport const IntroduceSectionSnd = styled(IntroduceSection)`\n div.text-block {\n @media (max-width: 768px) {\n width: 100%;\n }\n }\n\n div.img-block {\n text-align: center;\n width: 100%;\n\n img {\n width: 50%;\n object-fit: cover;\n\n @media (max-width: 768px) {\n object-fit: contain;\n margin-bottom: 14px;\n }\n }\n }\n`;\n\nexport const IntroduceSectionTrd = styled(IntroduceSection)`\n div.text-block {\n @media (max-width: 768px) {\n width: 100%;\n }\n }\n\n div.img-block {\n text-align: center;\n width: 100%;\n\n img {\n width: 50%;\n object-fit: cover;\n\n @media (max-width: 768px) {\n width: 65%;\n object-fit: contain;\n margin-bottom: 14px;\n }\n }\n }\n`;\n\nexport const IntroduceTitle = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 22px;\n line-height: 48px;\n\n letter-spacing: -0.666667px;\n\n color: rgba(0, 0, 0, 0.8);\n\n @media (max-width: 768px) {\n font-size: 18px;\n line-height: 28px;\n letter-spacing: -0.5px;\n }\n`;\n\nexport const IntroduceContent = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: ${props => (props.small ? '13px' : '16px')};\n line-height: ${props => (props.small ? '22px' : '30px')};\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-weight: bold;\n }\n\n @media (max-width: 768px) {\n word-break: keep-all;\n font-size: ${props => (props.small ? '12px' : '14px')};\n line-height: ${props => (props.small ? '20px' : '23px')};\n }\n`;\n\nexport const MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n\nexport const DesktopBr = styled.br`\n display: block;\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const SpecListRow = styled.div`\n display: flex;\n align-items: flex-start;\n\n width: 100%;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const SpecWrapper = styled.div`\n margin-bottom: 28px;\n margin-right: 20px;\n\n &:last-child {\n margin-right: 0px;\n }\n\n width: calc((100% / 3) - (40px / 3));\n\n @media (max-width: 768px) {\n width: 100%;\n margin-right: 0px;\n }\n`;\n\nexport const SpecIndex = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 12px;\n line-height: 16px;\n\n letter-spacing: -0.333333px;\n color: rgba(0, 0, 0, 0.2);\n\n margin-bottom: 4px;\n`;\n\nexport const SpecTitleWrapper = styled.div`\n display: flex;\n align-items: center;\n\n text-align: left;\n\n > img {\n width: 24px;\n height: 24px;\n\n margin-right: 8px;\n object-fit: contain;\n }\n\n > span {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 20px;\n line-height: 44px;\n\n letter-spacing: -0.666667px;\n\n color: rgba(0, 0, 0, 0.8);\n }\n`;\n\nexport const SpecContent = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 13px;\n line-height: 22px;\n\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 0px;\n\n > span {\n font-weight: bold;\n }\n\n @media (max-width: 768px) {\n br {\n display: block;\n }\n }\n`;\n\nexport const ButtonWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n width: 360px;\n\n > div,\n span,\n a {\n width: calc(50% - 4px);\n }\n\n @media (max-width: 768px) {\n margin: 0 auto;\n }\n`;\n","import { message } from 'antd';\nimport React from 'react';\nimport styled from 'styled-components';\nimport swal from 'sweetalert2';\nimport Withmate from '../renew/img/new-gov-care.png';\n\nimport { PartnerListRow } from '../../home.styled';\n\nexport const UserSiteBanner = ({ }) => {\n \n // const baseUrl = '/assets/images/partners/';\n // const fstRow = [\n // baseUrl + 'new-goyang.png',\n // baseUrl + 'ajuuniv.png',\n // baseUrl + 'new-gov-care.png',\n // baseUrl + 'new-goyang-happy.png',\n // baseUrl + 'new-goyang-society.png',\n // ];\n // const sndRow = [\n // baseUrl + 'new-junglang-woman.png',\n // baseUrl + 'new-paju_woman.png',\n // baseUrl + 'new-beatus.png',\n // baseUrl + 'new-cheongdam.png',\n // baseUrl + 'new-hyo-hospital.png',\n // ];\n\n return (\n <UserMainContainer>\n <UserMainInnerContainer>\n <PartnerTitle>\n <span>위드메이트 파트너</span>\n </PartnerTitle>\n\n <PartnerListRow>\n <BannerButton type=\"button\" onClick={() => {\n //window.location.href = \"http://www.naver.com\" // 현재 페이지에서 열기\n window.open(\"http://www.naver.com\") //새로운 창에서 열기\n }}/>\n <BannerButton type=\"button\" onClick={() => {\n window.location.href = \"http://www.daum.net\"\n }}/>\n <BannerButton type=\"button\" onClick={() => {\n window.location.href = \"http://www.google.com\"\n }}/>\n <BannerButton type=\"button\" onClick={() => {\n window.location.href = \"http://www.nate.com\"\n }}/>\n </PartnerListRow>\n <br/><br/>\n <PartnerListRow>\n <BannerButton type=\"button\" onClick={() => {\n window.location.href = \"http://www.naver.com\"\n }}/>\n <BannerButton type=\"button\" onClick={() => {\n window.location.href = \"http://www.naver.com\"\n }}/>\n <BannerButton type=\"button\" onClick={() => {\n window.location.href = \"http://www.naver.com\"\n }}/>\n <BannerButton type=\"button\" onClick={() => {\n window.location.href = \"http://www.naver.com\"\n }}/>\n </PartnerListRow>\n </UserMainInnerContainer>\n </UserMainContainer>\n );\n};\n\nconst UserMainContainer = styled.div`\n width: 100%;\n height: 350px;\n\n background: #fff;\n\n @media (max-width: 768px) {\n height: 598px;\n }\n`;\n\nconst UserMainInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n height: 100%;\n margin: 0 auto;\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n padding-top: 22px;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n padding-top: 52px;\n align-items: center;\n background: transparent;\n }\n`;\n\nconst ButtonCommon = styled.div`\n display: flex;\n padding: 20px 24px;\n width: 210px;\n align-items: center;\n justify-content: space-between;\n\n border-radius: 4px;\n margin-right: 70px;\n cursor: pointer;\n\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n\n &:hover {\n box-shadow: 4px 10px 24px -4px rgba(0, 0, 0, 0.1);\n transition: all 0.3s;\n }\n\n @media (max-width: 768px) {\n }\n`;\n\nconst BannerButton = styled(ButtonCommon)`\n background-image: url(${Withmate});\n width: 210px;\n height: 65px;\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n }\n`;\n\nexport const PartnerTitle = styled.div`\n display: flex;\n flex-direction: column;\n width: auto;\n\n align-items: center;\n margin-top: 10px;\n margin-bottom: 46px;\n\n > span {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: center;\n color: #3bc1ff;\n }\n\n @media (max-width: 1120px) {\n width: 100%;\n text-align: left;\n }\n`;\n\n","import React from 'react';\nimport CountUp from 'react-countup';\nimport styled from 'styled-components';\n\nimport { DivisionLine, WithmateLabel } from '../../../../Components/Common/input';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faUsers, faHospitalUser } from '@fortawesome/free-solid-svg-icons';\nimport { faRectangleList } from '@fortawesome/free-regular-svg-icons';\n\nimport { Swiper, SwiperSlide } from 'swiper/react';\nimport SwiperCore, { Pagination, Navigation, Autoplay } from 'swiper';\nimport 'swiper/swiper-bundle.min.css';\nimport 'swiper/swiper.min.css';\nimport 'swiper/components/navigation/navigation.min.css';\nimport 'swiper/components/pagination/pagination.min.css';\nimport { MobileBr } from '../../home.styled';\nimport { Button } from 'antd';\n\nSwiperCore.use([Navigation, Pagination, Autoplay]);\n\nexport const UserNumberCount = () => {\n function handleClick(e) {\n window.location.href = '/review/list';\n }\n\n return (\n <div className='container' style={{ height: '700px' }}>\n <RollingContainer>\n <div className='numberCount' style={{ textAlign: 'center' }}>\n <NumberLabel>\n <FontAwesomeIcon icon={faHospitalUser} style={{ paddingRight: '6px' }} />총 가입자 수\n </NumberLabel>\n <br />\n <CountUp className='numberCount' end={1557} suffix=' 명' style={{ fontWeight: 'bold' }} />\n </div>\n\n <div className='numberCount' style={{ textAlign: 'center', paddingLeft: '7%' }}>\n <NumberLabel>\n <FontAwesomeIcon icon={faUsers} style={{ paddingRight: '6px' }} />\n 메이트 수\n </NumberLabel>\n <br />\n <CountUp end={612} suffix=' 명' style={{ fontWeight: 'bold' }} />\n </div>\n\n <div className='numberCount' style={{ textAlign: 'center', paddingLeft: '7%' }}>\n <NumberLabel>\n <FontAwesomeIcon icon={faRectangleList} style={{ paddingRight: '6px' }} />총 이용 건수\n </NumberLabel>\n <br />\n <CountUp end={5000} suffix=' 건 <i class=\"fa-solid fa-arrow-up\" style=\"color: #3bc1ff\"></i>' style={{ fontWeight: 'bold' }} />\n </div>\n </RollingContainer>\n <SatisfactionContainer>\n <SatisfactionLabel>\n 만족도 200% 이용 후기와 서비스 만족도 98% <MobileBr />\n \"위드메이트\" 에게 맡겨주세요\n </SatisfactionLabel>\n </SatisfactionContainer>\n\n <DivisionLine />\n\n <ReviewContainer>\n <Swiper\n direction={'horizontal'} // 슬라이드의 방향을 수직으로 설정합니다.\n spaceBetween={10}\n slidesPerView={1}\n breakpoints={{\n 768: {\n slidesPerView: 1,\n spaceBetween: -50,\n },\n }}\n pagination={{ clickable: true }} // 우측의 점을 클릭했을 때, 클릭한 슬라이드로 이동하게 됩니다.\n navigation\n modules={[Pagination]} // 페이지네이션, 마우스휠등을 사용하려면 모듈을 import해줘야 합니다.\n allowTouchMove // 터치 동작을 허용합니다.\n className='main_slider'\n threshold={20} // 터치 감도를 조정합니다. 숫자가 클수록 터치에 반응하지 않습니다.\n autoplay={{ delay: 1500 }}\n loop={true}\n speed={1000} // 슬라이드가 넘어가는 속도를 조정합니다. 단위는 ms입니다.\n >\n <SwiperSlide>\n <ReviewMainContainer>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review1.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </ReviewMainContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review2.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review3.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review4.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review5.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review6.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n </Swiper>\n </ReviewContainer>\n <DivisionLine />\n\n <Button\n type='primary'\n style={{\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n margin: '0 auto',\n width: '200px',\n height: '46px',\n borderRadius: '10px',\n fontSize: '20px',\n }}\n onClick={handleClick}\n >\n 이용후기 더보기\n </Button>\n </div>\n );\n};\n\nconst ReviewContainer = styled.div`\n width: 42%;\n margin-top: 10px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nconst ReviewMainContainer = styled.div`\n width: 100%;\n height: 330px;\n\n @media (max-width: 768px) {\n height: 330px;\n }\n`;\n\nconst ReviewMainInnerContainer = styled.div`\n max-width: 500px;\n height: 100%;\n margin: 0 auto;\n\n padding-top: 10px;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst RollingContainer = styled.div`\n padding-top: 10px;\n padding-bottom: 20px;\n justify-content: center;\n display: flex;\n flex-direction: initial;\n background-color: #f9f9f9;\n\n .numberCount {\n font-size: 35px;\n }\n\n @media (max-width: 768px) {\n justify-content: center;\n\n .numberCount {\n font-size: 20px;\n }\n }\n`;\n\nconst ImgStyle = styled.div`\n width: 330px;\n height: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n width: 280px;\n height: auto;\n }\n`;\n\nconst SatisfactionContainer = styled.label`\n padding-top: 20px;\n justify-content: center;\n display: flex;\n flex-direction: initial;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst SatisfactionLabel = styled.label`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 20px;\n font-weight: bold;\n text-align: center;\n\n @media (max-width: 768px) {\n font-size: 15px;\n }\n`;\n\nconst NumberLabel = styled.label`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 20px;\n\n @media (max-width: 768px) {\n font-size: 12px;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { fontSize } from '../../../theme';\n\n// components\nimport { PartnerContainer, PartnerInnerContainer, PartnerTitle, PartnerListRow, PartnerItem } from '../home.styled';\n\nexport const WithmatePartners = ({}) => {\n const baseUrl = '/assets/images/partners/';\n const fstRow = [\n baseUrl + 'new-gov-care.png',\n baseUrl + 'new-goyang.png',\n baseUrl + 'new-cancel.png',\n baseUrl + 'aju.png',\n baseUrl + 'new-goyang-happy.png',\n ];\n const sndRow = [\n baseUrl + 'new-junglang-woman.png',\n baseUrl + 'new-paju_woman.png',\n baseUrl + 'new-beatus.png',\n baseUrl + 'new-cheongdam.png',\n baseUrl + 'new-hyo-hospital.png',\n ];\n\n const trdRow = [baseUrl + 'ssn.png', baseUrl + 'limo-korea.png', baseUrl + 'help-you.png', baseUrl + 'errichi.png', baseUrl + 'new-imagine-us.png'];\n\n const fthRow = [baseUrl + 'iu-hosp.png', baseUrl + 'new-gpcop.png', baseUrl + 'goyohanM.png', baseUrl + 'carehouse.jpeg', baseUrl + 'bravo.png'];\n\n const ftfRow = [baseUrl + 'dlive.png', baseUrl + 'sungmo.png', baseUrl + 'metlife.png', baseUrl + 'aju_nursing_hospital.png', baseUrl + 'yongin.png'];\n\n return (\n <PartnerContainer id='partners'>\n <PartnerInnerContainer>\n <PartnerTitle>\n <span>\n <img src='/assets/images/partners_map.png' style={{ width: '32px', height: 'auto', paddingBottom: '10px' }} /> 파트너사\n </span>\n <p style={{ color: '#a9a9a9', fontSize: '18px' }}>위드메이트와 함께하는 협력 파트너사입니다.</p>\n </PartnerTitle>\n <PartnerListRow>\n <PartnerItem>\n <img src={fstRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fstRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fstRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fstRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fstRow[4]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[4]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[4]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[4]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[4]} />\n </PartnerItem>\n </PartnerListRow>\n </PartnerInnerContainer>\n </PartnerContainer>\n );\n};\n","import React from 'react';\nimport { message as Message } from 'antd';\n\nimport { MATE } from '../../Lib/variables';\nimport axios from '../../Lib/axios';\nimport Slider from 'react-slick';\nimport \"slick-carousel/slick/slick.css\";\nimport \"slick-carousel/slick/slick-theme.css\";\n\n// section\nimport Reserve from './Section/reserve';\nimport { UserMain as RenewMain } from './Section/renew/main';\nimport { UserVideoSection } from './Section/renew/video';\nimport { UserGuideSection } from './Section/renew/guide';\nimport { UserMainBanner } from './Section/renew/banner';\nimport { UserSiteBanner } from './Section/renew/siteBanner';\nimport { UserNumberCount } from './Section/renew/numberCount';\n\n// import Main from './Section/userMain';\nimport { WithmatePartners } from './Section/partners';\n// import { Services } from './Section/services';\n// import { Introduce } from './Section/introduce';\n// import { WithmateSpecs } from './Section/spec';\n\n// modal\nimport { EmergencyCorpSearchModal, ShareCarRequestModal } from '../../Components/modal';\nimport { ManagerPopup } from '../../Components/modal';\n\n// import MateMain from './Section/mateMain';\n// import Review from './Section/review';\n// import { CoCompany } from '../Company/Section/fifth';\n\nconst settings = {\n dots: true,\n arrows: true,\n infinite: true,\n speed: 800,\n slidesToShow: 1,\n slidesToScroll: 1,\n autoplay: true,\n autoplaySpeed: 5000,\n pauseOnHover: true,\n};\n\nexport default class HomePage extends React.PureComponent {\n state = {\n searchModal: false,\n emergencyList: [],\n emergencyKeyword: '',\n requestModal: false,\n requestInfo: {\n corp: '',\n address: '',\n manager: '',\n contact: '',\n message: '',\n },\n };\n\n componentDidMount = async () => {\n const { data } = await axios.get(`/v1/corp/list`);\n if (!data) return null;\n\n if (data && Array.isArray(data)) {\n this.setState({\n emergencyList: data,\n });\n }\n };\n\n onShareRequest = async () => {\n const {\n requestInfo: { corp, address, manager, contact, message },\n } = this.state;\n if (!corp || !address || !manager || !contact || !message) return Message.info('정보를 기입해주세요.');\n\n const { data } = await axios.post('/v1/share/add', {\n corp,\n address,\n manager,\n contact,\n message,\n });\n\n if (!data) {\n return Message.error('일시적인 서버장애가 발생했습니다. 다시 시도해주세요.');\n }\n\n if (data === 'check parameters') {\n return Message.warning('정보를 모두 기입해주세요.');\n }\n\n if (data === 'success') {\n Message.success('셔틀 셰어링 서비스를 요청하였습니다.');\n\n this.setState({\n requestModal: false,\n requestInfo: {\n corp: '',\n address: '',\n manager: '',\n contact: '',\n message: '',\n },\n });\n }\n };\n\n render() {\n const { requestInfo, emergencyKeyword, emergencyList } = this.state;\n const { userType } = this.props.auth;\n\n return (\n <div id='#main'>\n {/* <Slider {...settings}>\n <div>\n <UserSiteBanner />\n </div>\n <div>\n <RenewMain {...this.props} />\n </div>\n </Slider> */}\n {userType === MATE ? (\n <>\n <Reserve {...this.props} />\n </>\n ) : (\n <>\n {/* <ManagerPopup /> */}\n <RenewMain {...this.props} />\n <UserNumberCount />\n {/* <UserSiteBanner /> */}\n <UserVideoSection />\n <UserGuideSection />\n <WithmatePartners />\n <UserMainBanner\n goPage={() => {\n this.props.history.push('/nemt/service');\n }}\n />\n {/* <Main {...this.props} /> */}\n {/* <Introduce /> */}\n {/* <WithmateSpecs /> */}\n </>\n )}\n\n {this.state.searchModal ? (\n <EmergencyCorpSearchModal\n data={emergencyList}\n keyword={emergencyKeyword}\n inputHandler={value => {\n this.setState({ emergencyKeyword: value });\n }}\n visibleHandler={() => {\n this.setState({ searchModal: false });\n }}\n />\n ) : null}\n\n {this.state.requestModal ? (\n <ShareCarRequestModal\n data={requestInfo}\n visibleHandler={() => {\n this.setState({ requestModal: false });\n }}\n inputHandler={({ type, value }) => {\n this.setState(prevState => ({\n requestInfo: {\n ...prevState.requestInfo,\n [type]: value,\n },\n }));\n }}\n onSave={this.onShareRequest}\n />\n ) : null}\n </div>\n );\n }\n}\n","import axios from '../axios';\n\nexport const getUserInfo = ({ id, userType }) => {\n return axios.get(`/v1/user/${id}/${userType}`);\n};\n\nexport const modifyUserInfo = async ({ id, userType, info }) => {\n if (info.photo) {\n const { data } = await imageUpload(info.photo);\n info.photo = data;\n }\n\n return axios.post('/v1/user/modify/info', { id, userType, info });\n};\n\nexport const serviceInfo = ({ code }) => {\n return axios.get('/v1/service/product/list', { params: { code } });\n};\n\nexport const buyTicket = ({ userId, info }) => {\n return axios.post('/v1/service/buy/ticket', { userId, info });\n};\n\nexport const serviceReserve = ({ userId, info }) => {\n return axios.post('/v1/service/reserve', { userId, info });\n};\n\nexport const reserveList = ({ userId }) => {\n return axios.get('/v1/service/user/reserve/history', { params: { userId } });\n};\n\nexport const getReserve = ({ reserveId, userId }) => {\n return axios.get('/v1/service/user/reserve', { params: { reserveId, userId } });\n};\n\nexport const getReserveList = ({ userId }) => {\n return axios.get('/v1/service/user/reserve/list', { params: { userId } });\n};\n\nexport const serviceRequest = ({ impUid, buyerId, info }) => {\n // return axios.post('/v1/service/request', { impUid, buyerId, info });\n};\n\nexport const payHistory = ({ userId }) => {\n return axios.get('/v1/service/user/pay/history', { params: { userId } });\n};\n\nexport const mateReserveList = ({ mateId }) => {\n return axios.get('/v1/service/mate/call/list', { params: { mateId } });\n};\n\nexport const mateCallReserveList = ({ mateId, page }) => {\n return axios.get('/v1/service/mate/reserve/list', { params: { mateId, page } });\n};\n\nexport const acceptCall = ({ callId, mateId }) => {\n return axios.put('/v1/service/mate/accept/call', { callId, mateId });\n};\n\nexport const completeCall = ({ callId }) => {\n return axios.put('/v1/service/mate/complete/call', { callId });\n};\n\nexport const modifyReserve = ({ reserveId, info }) => {\n return axios.put('/v1/service/user/reserve/modify', { reserveId, info });\n};\n\nexport const cancelReserve = ({ callId }) => {\n return axios.put('/v1/service/user/reserve/cancel', { callId });\n};\n\nexport const cancelCall = ({ callId }) => {\n return axios.put('/v1/service/mate/reserve/cancel', { callId });\n};\n\nexport const imageUpload = file => {\n const formData = new FormData();\n formData.append('photo', file);\n const header = { headers: { 'Content-Type': 'multipart/form-data' } };\n return axios.post('/v1/common/image/upload', formData, header);\n};\n\nexport const getPartnerServices = () => {\n return axios.get('/v1/partner/service/list');\n};\n\nexport const getContractServices = ({ service, mateId }) => {\n return axios.get(`/v1/partner/${service}/reserve/list`, {\n params: {\n mateId,\n },\n });\n};\n","import axios from '../axios';\nimport { MATE } from '../variables';\n\n//type: 로그인방식\nexport const register = async ({\n termsOfUse,\n privacyPolicy,\n essentialGeneral,\n essentialSensitive,\n selectiveGeneral,\n selectiveSensitive,\n selectiveAdvertise,\n id,\n password,\n userType,\n name,\n code,\n identify,\n reason,\n type,\n photo,\n contact,\n marketing,\n connection,\n recommenderName,\n longtermCare,\n birth,\n email,\n}) => {\n const config = {\n termsOfUse,\n privacyPolicy,\n essentialGeneral,\n essentialSensitive,\n selectiveGeneral,\n selectiveSensitive,\n selectiveAdvertise,\n id,\n password,\n userType,\n name,\n type,\n photo,\n contact,\n marketing,\n connection,\n recommenderName,\n longtermCare,\n birth,\n email,\n code,\n identify,\n reason,\n urlSource: window.location.search === '?url_source=dlive' ? 'dlive' : window.location.search === '?url_source=metlife' ? 'metlife' : 'withmate',\n };\n\n if (userType === MATE && photo) {\n const result = await imageUpload(photo);\n config.photo = result.data;\n }\n\n return axios.post('/v1/auth/register', config);\n};\n\nexport const addPatient = async ({ id, relate, name, sex, age, contact, starting, environment, caution }) => {\n const config = {\n id,\n relate,\n name,\n sex,\n age,\n contact,\n starting,\n environment,\n caution,\n };\n\n return axios.post('/v1/auth/patient/profile', config);\n};\n\nexport const addCard = async ({ id, userName, cardName, cardNum, year, month }) => {\n const config = {\n id,\n userName,\n cardName,\n cardNum,\n year,\n month,\n };\n\n return axios.post('/v1/auth/card/add', config);\n};\n\nexport const getCardInfo = async ({ cardId, info }) => {\n return axios.get('/v1/auth/card/list/info', { cardId, info });\n};\n\nexport const fetchCard = async ({ id }) => {\n return axios.get('/v1/auth/card/list', { params: { id } });\n};\n\nexport const deleteCard = async ({ cardId }) => {\n return axios.post('/v1/auth/card/info/delete', { cardId });\n};\n\nexport const modifyCard = async ({ cardId, info }) => {\n return axios.post('/v1/auth/card/info/modify', { cardId, info });\n};\n\nexport const getMateInfo = async ({ mateId, info }) => {\n return axios.get('/v1/auth/mate/list/info', { mateId, info });\n};\n\nexport const fetchMate = async ({ id }) => {\n return axios.get('/v1/auth/mate/list', { params: { id } });\n};\n\nexport const getPatientInfo = async ({ patientId, info }) => {\n return axios.get('/v1/auth/patient/list/info', { patientId, info });\n};\n\nexport const fetchPatient = async ({ id }) => {\n return axios.get('/v1/auth/patient/list', { params: { id } });\n};\n\nexport const deletePatient = async ({ patientId }) => {\n return axios.post('/v1/auth/patient/info/delete', { patientId });\n};\n\nexport const modifyPatient = async ({ patientId, info }) => {\n return axios.post('/v1/auth/patient/info/modify', { patientId, info });\n};\n\nexport const login = ({ id, password, userType, type }) => {\n return axios.post('/v1/auth/login', { id, password, userType, type });\n};\n\nexport const logout = ({ id, userType }) => {\n return axios.get('/v1/auth/logout', { params: { id, userType } });\n};\n\nexport const checkUserId = ({ id, userType, type }) => {\n return axios.get('/v1/auth/validate/user', { params: { id, userType, type } });\n};\n\nexport const checkAuth = ({ id, userType }) => {\n return axios.get('/v1/auth/authorized', { params: { id, userType } });\n};\n\nexport const findPassword = ({ id, userType }) => {\n return axios.post('/v1/auth/find/password', { id, userType });\n};\n\nexport const confirmEmailAuth = ({ verificationCode }) => {\n return axios.post('/v1/auth/register', { verificationCode });\n};\n\nexport const modifyPassword = ({ id, userType, password, newPassword }) => {\n return axios.post('/v1/auth/modify/password', { id, userType, password, newPassword });\n};\n\nexport const withdrawl = ({ id, userType, password }) => {\n return axios.post('/v1/auth/withdrawl', { id, userType, password });\n};\n\nexport const withdrawlKakao = ({ id, userType }) => {\n return axios.post('/v1/auth/withdrawl/kakao', { id, userType });\n};\n\nexport const imageUpload = photo => {\n const formData = new FormData();\n formData.append('photo', photo);\n const header = { headers: { 'Content-Type': 'multipart/form-data' } };\n return axios.post('/v1/common/image/upload', formData, header);\n};\n\nexport const onAddLongTermCare = async ({ userId, info }) => {\n return axios.post('/v1/longTermCare/add', { userId, info });\n};\n","import jwt from 'jsonwebtoken';\nimport * as authAPI from './Api/auth';\n\nexport function createReduxThunk(type, request) {\n const SUCCESS = `${type}_SUCCESS`;\n const FAILURE = `${type}_FAILURE`;\n\n return params => async dispatch => {\n dispatch({ type: 'app/LOADING_ON' });\n if (!request) {\n return dispatch({ type });\n }\n\n try {\n const response = await request(params);\n\n if (response.data === 'expired token' || response.data === 'invalid token') {\n const refreshToken = localStorage.getItem('refreshToken');\n const decoded = jwt.decode(refreshToken);\n if (decoded && decoded.id) {\n try {\n const result = await authAPI.checkAuth({ id: decoded.id, refreshToken });\n if (result.data === 'invalid') {\n localStorage.clear();\n window.location.href = '/';\n return null;\n }\n\n localStorage.setItem('accessToken', result.data.accessToken);\n // 재요청\n try {\n const response = await request(params);\n dispatch({\n type: SUCCESS,\n payload: response.data,\n meta: params,\n });\n dispatch({ type: 'app/LOADING_OFF' });\n return response.data;\n } catch (e) {\n dispatch({\n type: FAILURE,\n payload: e,\n error: true,\n });\n dispatch({ type: 'app/LOADING_OFF' });\n throw e;\n }\n } catch (error) {\n console.log('error: ', error);\n }\n }\n }\n\n dispatch({\n type: SUCCESS,\n payload: response.data,\n meta: params,\n });\n dispatch({ type: 'app/LOADING_OFF' });\n return response.data;\n } catch (e) {\n dispatch({\n type: FAILURE,\n payload: e,\n error: true,\n });\n dispatch({ type: 'app/LOADING_OFF' });\n throw e;\n }\n };\n}\n","import { createAction, handleActions } from 'redux-actions';\nimport produce from 'immer';\nimport * as appAPI from '../../Lib/Api/app';\nimport _ from 'lodash';\n\n// middleware\nimport { createReduxThunk } from '../../Lib/middleware';\n\nconst USER_INFO = 'app/USER_INFO';\nconst USER_INFO_SUCCESS = 'app/USER_INFO_SUCCESS';\n\nconst MODIFY_USER_INFO = 'app/MODIFY_USER_INFO';\nconst MODIFY_USER_INFO_SUCCESS = 'app/MODIFY_USER_INFO_SUCCESS';\n\nconst SERVICE_INFO = 'app/SERVICE_INFO';\nconst SERVICE_INFO_SUCCESS = 'app/SERVICE_INFO_SUCCESS';\n\nconst SERVICE_RESERVE = 'app/SERVICE_RESERVE';\nconst SERVICE_RESERVE_SUCCESS = 'app/SERVICE_RESERVE_SUCCESS';\nconst SERVICE_RESERVE_USAGE = 'app/SERVICE_RESERVE_USAGE';\nconst SERVICE_RESERVE_USAGE_SUCCESS = 'app/SERVICE_RESERVE_USAGE_SUCCESS';\nconst SERVICE_RESERVE_LIST = 'app/SERVICE_RESERVE_LIST';\nconst SERVICE_RESERVE_LIST_SUCCESS = 'app/SERVICE_RESERVE_LIST_SUCCESS';\n\nconst RESERVE_INFO = 'app/RESERVE_INFO';\nconst RESERVE_INFO_SUCCESS = 'app/RESERVE_INFO_SUCCESS';\n\nconst CANCEL_CALL = 'app/CANCEL_CALL';\nconst CANCEL_CALL_SUCCESS = 'app/CANCEL_CALL_SUCCESS';\n\nconst CANCEL_RESERVE = 'app/CANCEL_RESERVE';\nconst CANCEL_RESERVE_SUCCESS = 'app/CANCEL_RESERVE_SUCCESS';\n\nconst MODIFY_RESERVE = 'app/MODIFY_RESERVE';\nconst MODIFY_RESERVE_SUCCESS = 'app/MODIFY_RESERVE_SUCCESS';\n\nconst MATE_CALL_RESERVE_LIST = 'app/MATE_CALL_RESERVE_LIST';\nconst MATE_CALL_RESERVE_LIST_SUCCESS = 'app/MATE_CALL_RESERVE_LIST_SUCCESS';\nconst MATE_SERVICE_RESERVE_LIST = 'app/MATE_SERVICE_RESERVE_LIST';\nconst MATE_SERVICE_RESERVE_LIST_SUCCESS = 'app/MATE_SERVICE_RESERVE_LIST_SUCCESS';\nconst MATE_ACCEPT_CALL = 'app/MATE_ACCEPT_CALL';\nconst MATE_ACCEPT_CALL_SUCCESS = 'app/MATE_ACCEPT_CALL_SUCCESS';\nconst MATE_COMPLETE_CALL = 'app/MATE_COMPLETE_CALL';\nconst MATE_COMPLETE_CALL_SUCCESS = 'app/MATE_COMPLETE_CALL_SUCCESS';\n\nconst PAY_HISTORY = 'app/PAY_HISTORY';\nconst PAY_HISTORY_SUCCESS = 'app/PAY_HISTORY_SUCCESS';\n\nconst BUY_TICKET = 'app/BUY_TICKET';\nconst BUY_TICKET_SUCCESS = 'app/BUY_TICKET_SUCCESS';\n\nconst GET_CONTRACT_PARTNERS = 'app/GET_CONTRACT_PARTNERS';\nconst GET_CONTRACT_PARTNERS_SUCCESS = 'app/GET_CONTRACT_PARTNERS_SUCCESS';\n\nconst GET_CONTRACT_SERVICE_LIST = 'app/GET_CONTRACT_SERVICE_LIST';\nconst GET_CONTRACT_SERVICE_LIST_SUCCESS = 'app/GET_CONTRACT_SERVICE_LIST_SUCCESS';\n\nconst EDIT_USER_FORM = 'app/EDIT_USER_FORM';\nconst EDIT_BUY_FORM = 'app/EDIT_BUY_FORM';\nconst EDIT_RESERVE_FORM = 'app/EDIT_RESERVE_FORM';\nconst EDIT_DETAIL_VIEW = 'app/EDIT_DETAIL_VIEW';\nconst EDIT_LATEST_VIEW = 'app/EDIT_LATEST_VIEW';\nconst EDIT_VIEW_TYPE = 'app/EDIT_VIEW_TYPE';\nconst EDIT_CALL_PAGE = 'app/EDIT_CALL_PAGE';\nconst EDIT_CONTRACT_FORM = 'app/EDIT_CONTRACT_FORM';\n\nconst LOADING_ON = 'app/LOADING_ON';\nconst LOADING_OFF = 'app/LOADING_OFF';\n\n// initalState\nconst initialState = {\n userInfo: {},\n serviceInfo: {},\n reserveForm: {\n page: 1,\n service: 'assist',\n addTime: 1,\n payMethod: 'transfer',\n sex: '남',\n transport: 'common', // common, own\n report: false,\n },\n reserve: {\n unemergency: 0,\n assist: 0,\n },\n contractForm: {\n page: 1,\n service: '',\n addTime: 1,\n payMethod: 'transfer',\n sex: '남',\n transport: 'common', // common, own\n report: false,\n },\n buyForm: {\n service: 'unemergency',\n count: 1,\n },\n mateCallPage: 0,\n mateCallList: [],\n reserveList: [],\n reserveInfo: {},\n mateReserveList: [],\n mateViewType: 'latest',\n mateReserveLatest: {},\n mateReserveDetail: {},\n payHistory: [],\n partners: [],\n loading: false,\n contractServices: [],\n};\n\nexport const getUserInfo = createReduxThunk(USER_INFO, appAPI.getUserInfo);\nexport const modifyUserInfo = createReduxThunk(MODIFY_USER_INFO, appAPI.modifyUserInfo);\n\nexport const getServiceInfo = createReduxThunk(SERVICE_INFO, appAPI.serviceInfo);\n\nexport const buyTicket = createReduxThunk(BUY_TICKET, appAPI.buyTicket);\nexport const getPayHistory = createReduxThunk(PAY_HISTORY, appAPI.payHistory);\n\nexport const serviceReserve = createReduxThunk(SERVICE_RESERVE, appAPI.serviceReserve);\nexport const getReserveUsage = createReduxThunk(SERVICE_RESERVE_USAGE, appAPI.reserveList);\nexport const getReserveList = createReduxThunk(SERVICE_RESERVE_LIST, appAPI.getReserveList);\nexport const getMateReserveList = createReduxThunk(MATE_SERVICE_RESERVE_LIST, appAPI.mateReserveList);\nexport const getMateCallReserveList = createReduxThunk(MATE_CALL_RESERVE_LIST, appAPI.mateCallReserveList);\nexport const getReserveInfo = createReduxThunk(RESERVE_INFO, appAPI.getReserve);\nexport const getContractPartners = createReduxThunk(GET_CONTRACT_PARTNERS, appAPI.getPartnerServices);\nexport const getContractList = createReduxThunk(GET_CONTRACT_SERVICE_LIST, appAPI.getContractServices);\n\nexport const acceptCall = createReduxThunk(MATE_ACCEPT_CALL, appAPI.acceptCall);\nexport const cancelCall = createReduxThunk(CANCEL_CALL, appAPI.cancelCall);\nexport const completeCall = createReduxThunk(MATE_COMPLETE_CALL, appAPI.completeCall);\nexport const modifyReserve = createReduxThunk(MODIFY_RESERVE, appAPI.modifyReserve);\nexport const cancelReserve = createReduxThunk(CANCEL_RESERVE, appAPI.cancelReserve);\n\nexport const editViewType = createAction(EDIT_VIEW_TYPE, input => input);\nexport const editResrveForm = createAction(EDIT_RESERVE_FORM, input => input);\nexport const editContractForm = createAction(EDIT_CONTRACT_FORM, input => input);\nexport const editBuyForm = createAction(EDIT_BUY_FORM, input => input);\nexport const editUserForm = createAction(EDIT_USER_FORM, input => input);\nexport const editReserveDetailView = createAction(EDIT_DETAIL_VIEW, input => input);\nexport const editReserveLatestView = createAction(EDIT_LATEST_VIEW, input => input);\nexport const editCallPage = createAction(EDIT_CALL_PAGE, input => input);\n\n// reducer\nconst appReducer = handleActions(\n {\n [LOADING_ON]: (state, action) =>\n produce(state, draft => {\n draft.loading = true;\n }),\n [LOADING_OFF]: (state, action) =>\n produce(state, draft => {\n draft.loading = false;\n }),\n [USER_INFO_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload._id) {\n draft['userInfo'] = payload;\n }\n }),\n [MODIFY_USER_INFO_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n const { photo, name, contact } = meta.info;\n draft['userInfo']['name'] = name;\n draft['userInfo']['contact'] = contact;\n if (photo) {\n draft['userInfo']['photo'] = photo;\n }\n }\n }),\n [SERVICE_INFO_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && Array.isArray(payload) && payload.length > 0) {\n draft['serviceInfo'] = payload[0];\n }\n }),\n [SERVICE_RESERVE_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n draft['reserveForm'] = {\n page: 1,\n service: 'unemergency',\n addTime: 1,\n payMethod: 'transfer',\n sex: '남',\n };\n }\n }),\n [RESERVE_INFO_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n draft['reserveInfo'] = payload;\n }),\n [SERVICE_RESERVE_USAGE_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && !_.isEmpty(payload)) {\n draft['reserve'] = payload;\n }\n }),\n [SERVICE_RESERVE_LIST_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && !_.isEmpty(payload) && Array.isArray(payload)) {\n draft['reserveList'] = payload;\n }\n }),\n [GET_CONTRACT_PARTNERS_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n draft['partners'] = payload;\n if (payload && Array.isArray(payload)) {\n localStorage.setItem('partners', JSON.stringify(payload));\n }\n }),\n [GET_CONTRACT_SERVICE_LIST_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && !_.isEmpty(payload) && Array.isArray(payload)) {\n draft['contractServices'] = payload;\n }\n }),\n [MATE_SERVICE_RESERVE_LIST_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && !_.isEmpty(payload) && Array.isArray(payload)) {\n draft['mateReserveList'] = payload;\n }\n }),\n [MATE_CALL_RESERVE_LIST_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && !_.isEmpty(payload) && Array.isArray(payload)) {\n draft['mateCallList'] = payload;\n }\n }),\n [MATE_ACCEPT_CALL_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n const list = draft['mateReserveList'];\n draft['mateReserveList'] = list.map(l => {\n if (l._id === meta.callId) {\n l.status = '예약완료';\n }\n\n return l;\n });\n\n draft['mateReserveDetail']['status'] = '예약완료';\n }\n }),\n [MATE_COMPLETE_CALL_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n if (payload && payload === 'success') {\n const list = draft['mateReserveList'];\n draft['mateReserveList'] = list.map(l => {\n if (l._id === meta.callId) {\n l.status = '서비스 종료';\n }\n\n return l;\n });\n }\n }\n }),\n [PAY_HISTORY_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n draft['payHistory'] = payload;\n }),\n [BUY_TICKET_SUCCESS]: (state, { payload }) => produce(state, draft => {}),\n [CANCEL_CALL_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n const list = draft['mateReserveList'];\n draft['mateReserveList'] = list.map(l => {\n if (l._id === meta.callId) {\n l.status = '접수대기';\n }\n\n return l;\n });\n }\n }),\n [CANCEL_RESERVE_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n const list = draft['reserveList'];\n draft['reserveList'] = list.map(l => {\n if (l.callId === meta.callId) l.call[0].status = '접수취소';\n return l;\n });\n }),\n [MODIFY_RESERVE_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n const list = draft['reserveList'];\n draft['reserveList'] = list.map(l => {\n if (l._id === meta.reserveId) {\n const { patient, relate, contact, comment, sex } = meta.info;\n l['patient'] = patient;\n l['relate'] = relate;\n l['contact'] = contact;\n l['comment'] = comment;\n l['sex'] = sex;\n\n if (meta.info && meta.info.starting) {\n const { starting, destination, reserveDate, usageTime } = meta.info;\n l['starting'] = starting;\n l['destination'] = destination;\n l['reserveDate'] = reserveDate;\n l['usageTime'] = usageTime;\n }\n\n return l;\n }\n\n return l;\n });\n }\n }),\n [EDIT_RESERVE_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['reserveForm'] = {};\n } else {\n draft['reserveForm'][payload.type] = payload.value;\n }\n }),\n [EDIT_CONTRACT_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['contractForm'] = {};\n } else {\n draft['contractForm'][payload.type] = payload.value;\n }\n }),\n [EDIT_BUY_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['buyForm'] = {\n service: 'unemergency',\n count: 1,\n };\n } else {\n draft['buyForm'][payload.type] = payload.value;\n }\n }),\n [EDIT_USER_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['userInfo'] = {};\n } else {\n draft['userInfo'][payload.type] = payload.value;\n }\n }),\n [EDIT_DETAIL_VIEW]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['mateReserveDetail'] = {};\n } else {\n draft['mateReserveDetail'] = payload.value;\n }\n }),\n [EDIT_LATEST_VIEW]: (state, { payload }) =>\n produce(state, draft => {\n draft['mateReserveLatest'] = payload.value;\n }),\n [EDIT_VIEW_TYPE]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['mateViewType'] = 'latest';\n } else {\n draft['mateViewType'] = payload.value;\n }\n }),\n [EDIT_CALL_PAGE]: (state, { payload }) =>\n produce(state, draft => {\n if (typeof payload === 'number') {\n draft['mateCallPage'] = payload;\n }\n }),\n },\n initialState,\n);\n\nexport default appReducer;\n","import { createAction, handleActions } from 'redux-actions';\nimport produce from 'immer';\nimport * as authAPI from '../../Lib/Api/auth';\nimport { USER, MATE } from '../../Lib/variables';\n\n// middleware\nimport { createReduxThunk } from '../../Lib/middleware';\n\nconst EDIT_LOGIN_FORM = 'auth/EDIT_LOGIN_FORM';\nconst EDIT_REGISTER_FORM = 'auth/EDIT_REGISTER_FORM';\n\nconst ADD_LONGTERMCARE = 'auth/ADD_LONGTERMCARE';\nconst ADD_LONGTERMCARE_SUCCESS = 'auth/ADD_LONGTERMCARE_SUCCESS';\n\n// 환자 프로필\nconst ADD_PATIENT = 'auth/ADD_PATIENT';\nconst ADD_PATIENT_SUCCESS = 'auth/ADD_PATIENT_SUCCESS';\nconst GET_PATIENT = 'auth/GET_PATIENT';\nconst GET_PATIENT_SUCCESS = 'auth/GET_PATIENT_SUCCESS';\nconst EDIT_ADD_PATIENT_FORM = 'auth/EDIT_ADD_PATIENT_FORM';\nconst DELETE_PATIENT = 'auth/DELETE_PATIENT';\nconst DELETE_PATIENT_SUCCESS = 'auth/DELETE_PATIENT_SUCCESS';\nconst MODIFY_PATIENT = 'auth/MODIFY_PATIENT';\nconst MODIFY_PATIENT_SUCCESS = 'auth/MODIFY_PATIENT_SUCCESS';\nconst PATIENT_INFO = 'auth/PATIENT_INFO';\nconst PATIENT_INFO_SUCCESS = 'auth/PATIENT_INFO_SUCCESS';\n\n// 카드 정보\nconst ADD_CARD = 'auth/ADD_CARD';\nconst ADD_CARD_SUCCESS = 'auth/ADD_CARD_SUCCESS';\nconst GET_CARD = 'auth/GET_CARD';\nconst GET_CARD_SUCCESS = 'auth/GET_CARD_SUCCESS';\nconst EDIT_ADD_CARD_FORM = 'auth/EDIT_ADD_CARD_FORM';\nconst DELETE_CARD = 'auth/DELETE_CARD';\nconst DELETE_CARD_SUCCESS = 'auth/DELETE_CARD_SUCCESS';\nconst MODIFY_CARD = 'auth/MODIFY_CARD';\nconst MODIFY_CARD_SUCCESS = 'auth/MODIFY_CARD_SUCCESS';\nconst CARD_INFO = 'auth/CARD_INFO';\nconst CARD_INFO_SUCCESS = 'auth/CARD_INFO_SUCCESS';\n\nconst MATE_INFO = 'auth/MATE_INFO';\nconst MATE_INFO_SUCCESS = 'auth/MATE_INFO_SUCCESS';\nconst GET_MATE = 'auth/GET_MATE';\nconst GET_MATE_SUCCESS = 'auth/GET_MATE_SUCCESS';\n\nconst EDIT_FINDPASSWORD_FORM = 'auth/EDIT_FINDPASSWORD_FORM';\nconst EDIT_PASSWORD_FORM = 'auth/EDIT_PASSWORD_FORM';\nconst EDIT_INFO = 'auth/EDIT_INFO';\nconst EDIT_AUTH = 'auth/EDIT_AUTH';\n\nconst LOGIN = 'auth/LOGIN';\nconst LOGIN_SUCCESS = 'auth/LOGIN_SUCCESS';\nconst LOGOUT = 'auth/LOGOUT';\nconst LOGOUT_SUCCESS = 'auth/LOGOUT_SUCCESS';\nconst VALIDATE_USER_ID = 'auth/VALIDATE_USER_ID';\nconst VALIDATE_USER_ID_SUCCESS = 'auth/VALIDATE_USER_ID_SUCCESS';\nconst REGISTER = 'auth/REGISTER';\nconst REGISTER_SUCCESS = 'auth/REGISTER_SUCCESS';\nconst CHECK_AUTH = 'auth/CHECK_AUTH';\nconst CHECK_AUTH_SUCCESS = 'auth/CHECK_AUTH_SUCCESS';\nconst FIND_PASSWORD = 'auth/FIND_PASSWORD';\nconst FIND_PASSWORD_SUCCESS = 'auth/FIND_PASSWORD_SUCCESS';\nconst MODIFY_PASSWORD = 'auth/MODIFY_PASSWORD';\nconst MODIFY_PASSWORD_SUCCESS = 'auth/MODIFY_PASSWORD_SUCCESS';\n\nconst USER_WITHDRAWL = 'auth/USER_WITHDRAWL';\nconst USER_WITHDRAWL_SUCCESS = 'auth/USER_WITHDRAWL_SUCCESS';\nconst KAKAO_WITHDRAWL = 'auth/KAKAO_WITHDRAWL';\nconst KAKAO_WITHDRAWL_SUCCESS = 'auth/KAKAO_WITHDRAWL_SUCCESS';\n\nconst CONFIRM_EMAILAUTH = 'auth/CONFIRM_EMAILAUTH';\nconst CONFIRM_EMAILAUTH_SUCCESS = 'auth/CONFIRM_EMAILAUTH_SUCCESS';\n\nexport const login = createReduxThunk(LOGIN, authAPI.login);\nexport const logout = createReduxThunk(LOGOUT, authAPI.logout);\nexport const register = createReduxThunk(REGISTER, authAPI.register);\n\nexport const checkUserId = createReduxThunk(VALIDATE_USER_ID, authAPI.checkUserId);\nexport const checkAuth = createReduxThunk(CHECK_AUTH, authAPI.checkAuth);\nexport const findPassword = createReduxThunk(FIND_PASSWORD, authAPI.findPassword);\nexport const modifyPassword = createReduxThunk(MODIFY_PASSWORD, authAPI.modifyPassword);\n\nexport const withdrawlUser = createReduxThunk(USER_WITHDRAWL, authAPI.withdrawl);\nexport const withdrawlKakao = createReduxThunk(KAKAO_WITHDRAWL, authAPI.withdrawlKakao);\n\nexport const confirmEmailAuth = createReduxThunk(CONFIRM_EMAILAUTH, authAPI.confirmEmailAuth);\n\nexport const editAuth = createAction(EDIT_AUTH, input => input);\nexport const editLoginForm = createAction(EDIT_LOGIN_FORM, input => input);\nexport const editRegisterForm = createAction(EDIT_REGISTER_FORM, input => input);\n\nexport const onEditLongTermCare = createAction(ADD_LONGTERMCARE, authAPI.onAddLongTermCare);\n\nexport const fetchPatient = createReduxThunk(GET_PATIENT, authAPI.fetchPatient);\nexport const addPatient = createReduxThunk(ADD_PATIENT, authAPI.addPatient);\nexport const editAddPatientForm = createAction(EDIT_ADD_PATIENT_FORM, input => input);\nexport const deletePatient = createReduxThunk(DELETE_PATIENT, authAPI.deletePatient);\nexport const modifyPatient = createReduxThunk(MODIFY_PATIENT, authAPI.modifyPatient);\nexport const getPatientInfo = createReduxThunk(PATIENT_INFO, authAPI.getPatientInfo);\n\nexport const fetchCard = createReduxThunk(GET_CARD, authAPI.fetchCard);\nexport const addCard = createReduxThunk(ADD_CARD, authAPI.addCard);\nexport const editAddCardForm = createAction(EDIT_ADD_CARD_FORM, input => input);\nexport const deleteCard = createReduxThunk(DELETE_CARD, authAPI.deleteCard);\nexport const modifyCard = createReduxThunk(MODIFY_CARD, authAPI.modifyCard);\nexport const getCardInfo = createReduxThunk(CARD_INFO, authAPI.getCardInfo);\n\nexport const getMateInfo = createReduxThunk(MATE_INFO, authAPI.getMateInfo);\nexport const fetchMate = createReduxThunk(GET_MATE, authAPI.fetchMate);\n\nexport const editFindPasswordForm = createAction(EDIT_FINDPASSWORD_FORM, input => input);\nexport const editPasswordForm = createAction(EDIT_PASSWORD_FORM, input => input);\nexport const editInfo = createAction(EDIT_INFO, input => input);\n\n// initalState\nconst initialState = {\n id: '',\n name: '',\n photo: '',\n userType: '',\n allowed: null,\n ticket: {\n assist: 0,\n unemergency: 0,\n },\n\n loginForm: {\n userType: '',\n },\n registerForm: {\n userType: USER,\n page: 1,\n sex: '남',\n identify: '본인',\n agree: false,\n },\n\n longTermCare: [],\n longTermCareInfo: {},\n\n patientList: [],\n patientInfo: {},\n addPatientForm: {\n sex: '남'\n },\n\n cardList: [],\n cardInfo: {},\n addCardForm: {\n cardName: '',\n cardNum: '',\n year: '',\n month: ''\n },\n\n findForm: {\n userType: USER,\n },\n passwordForm: {\n password: '',\n newPassword: '',\n reNewPassword: '',\n },\n infoForm: {},\n\n mateInfo: {},\n};\n\n// reducer\nconst authReducer = handleActions(\n {\n [EDIT_LOGIN_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['loginForm'] = {\n userType: USER,\n };\n } else {\n draft['loginForm'][payload.type] = payload.value;\n }\n }),\n [EDIT_REGISTER_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['registerForm'] = {\n userType: USER,\n page: 1,\n sex: '남',\n identify: '본인',\n agree: false,\n };\n } else {\n draft['registerForm'][payload.type] = payload.value;\n }\n }),\n\n [EDIT_ADD_PATIENT_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['addPatientForm'] = {\n sex: '남',\n };\n } else {\n draft['addPatientForm'][payload.type] = payload.value;\n }\n }),\n\n [EDIT_FINDPASSWORD_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['findForm'] = {\n userType: USER,\n };\n } else {\n draft['findForm'][payload.type] = payload.value;\n }\n }),\n [EDIT_PASSWORD_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['passwordForm'] = {};\n } else {\n draft['passwordForm'][payload.type] = payload.value;\n }\n }),\n [EDIT_INFO]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['infoForm'] = {};\n } else {\n draft['infoForm'][payload.type] = payload.value;\n }\n }),\n [EDIT_AUTH]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['id'] = '';\n draft['userType'] = '';\n draft['type'] = '';\n draft['photo'] = '';\n draft['name'] = '';\n } else {\n draft[payload.type] = payload.value;\n }\n }),\n [LOGIN_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload._id) {\n draft['id'] = payload._id;\n draft['photo'] = payload.photo;\n draft['name'] = payload.name;\n draft['type'] = payload.type;\n draft['userType'] = meta.userType;\n // if (payload.ticket) {\n // draft['ticket'] = payload.ticket;\n // }\n\n localStorage.setItem('id', payload._id);\n localStorage.setItem('photo', payload.photo);\n localStorage.setItem('name', payload.name);\n localStorage.setItem('contact', payload.contact);\n localStorage.setItem('userType', meta.userType);\n\n window.location.href = '/';\n }\n }),\n [USER_WITHDRAWL_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n draft['id'] = '';\n draft['userType'] = '';\n draft['photo'] = '';\n draft['name'] = '';\n draft['password'] = '';\n draft['allowed'] = false;\n localStorage.clear();\n window.location.href = '/';\n }\n }),\n [KAKAO_WITHDRAWL_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n draft['id'] = '';\n draft['userType'] = '';\n draft['photo'] = '';\n draft['name'] = '';\n draft['allowed'] = false;\n localStorage.clear();\n window.location.href = '/';\n }\n }),\n [LOGOUT_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n draft['id'] = '';\n draft['userType'] = '';\n draft['photo'] = '';\n draft['name'] = '';\n draft['allowed'] = false;\n localStorage.clear();\n window.location.href = '/';\n }\n }),\n [VALIDATE_USER_ID_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n // console.log('VALIDATE_USER_ID_SUCCESS: ', payload);\n }),\n \n [REGISTER_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload.message === 'success') {\n const { data } = payload;\n draft['id'] = data._id;\n draft['photo'] = data.photo;\n draft['name'] = data.name;\n draft['userType'] = meta.userType;\n draft['allowed'] = data.allowed;\n if (payload.ticket) {\n draft['ticket'] = payload.ticket;\n }\n\n localStorage.setItem('id', data._id);\n localStorage.setItem('photo', data.photo);\n localStorage.setItem('name', data.name);\n localStorage.setItem('allowed', data.allowed);\n localStorage.setItem('userType', meta.userType);\n\n // window.location.href = '/success';\n }\n }),\n\n [ADD_LONGTERMCARE_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n const list = draft['longTermCare'];\n draft['longTermCare'] = list.map(info => {\n const { name, age, contact, sex, region, gradePresence, gradeLevel } = meta.info;\n info['name'] = name;\n info['age'] = age;\n info['contact'] = contact;\n info['sex'] = sex;\n info['region'] = region;\n info['gradePresence'] = gradePresence;\n info['gradeLevel'] = gradeLevel;\n\n return info;\n })\n }\n }),\n\n [CHECK_AUTH_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload._id) {\n draft['id'] = payload._id;\n draft['photo'] = payload.photo;\n draft['name'] = payload.name;\n draft['allowed'] = payload.allowed;\n draft['type'] = payload.type;\n draft['userType'] = meta.userType;\n if (payload.ticket) {\n draft['ticket'] = payload.ticket;\n }\n } else {\n localStorage.clear();\n window.location.href = '/';\n return null;\n }\n }),\n [FIND_PASSWORD_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n // console.log();\n }),\n [MODIFY_PASSWORD_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n // console.log();\n }),\n\n [CONFIRM_EMAILAUTH_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n // console.log();\n }),\n\n [ADD_PATIENT_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.message === 'success') {\n draft['patientList'].push(payload.data);\n }\n }),\n\n [GET_PATIENT_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.message === 'success') {\n draft['patientList'] = payload.data;\n }\n }),\n\n [PATIENT_INFO_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n draft['patientInfo'] = payload.data;\n }),\n\n [MODIFY_PATIENT_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n const list = draft['patientList'];\n draft['patientList'] = list.map(info => {\n if (info._id === meta.patientId) {\n const { name, relate, sex, age, contact, starting, environment, caution } = meta.info;\n info['name'] = name;\n info['relate'] = relate;\n info['sex'] = sex;\n info['age'] = age;\n info['contact'] = contact;\n info['starting'] = starting;\n info['environment'] = environment;\n info['caution'] = caution;\n\n return info;\n }\n })\n }\n }),\n\n [DELETE_PATIENT_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n // draft['patientList'] = '';\n // window.location.href = '/user/mypage/profile';\n }\n }),\n\n // 결제 카드 등록\n [ADD_CARD_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.message === 'success') {\n draft['cardList'].push(payload.data);\n }\n }),\n \n [EDIT_ADD_CARD_FORM]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.type === 'clear') {\n draft['addCardForm'] = {\n cardName: '',\n cardNum: '',\n year: '',\n month: ''\n };\n } else {\n draft['addCardForm'][payload.type] = payload.value;\n }\n }),\n\n [GET_CARD_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.message === 'success') {\n draft['cardList'] = payload.data;\n }\n }),\n\n [CARD_INFO_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n draft['cardInfo'] = payload.data;\n }),\n\n [MODIFY_CARD_SUCCESS]: (state, { payload, meta }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n const list = draft['cardList'];\n draft['cardList'] = list.map(info => {\n if (info._id === meta.cardId) {\n const { cardName, cardNum, year, month } = meta.info;\n info['cardName'] = cardName;\n info['cardNum'] = cardNum;\n info['year'] = year;\n info['month'] = month;\n\n return info;\n }\n })\n }\n }),\n\n [DELETE_CARD_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload === 'success') {\n // draft['patientList'] = '';\n // window.location.href = '/user/mypage/profile';\n }\n }),\n\n [GET_MATE_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.message === 'success') {\n draft['mateList'] = payload.data;\n }\n }),\n\n [MATE_INFO_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n draft['mateInfo'] = payload.data;\n }),\n },\n initialState,\n);\n\nexport default authReducer;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport { message } from 'antd';\n\n// component\nimport Home from './home';\nimport { MATE } from '../../Lib/variables';\n\n// styles\nimport HomeStyledContainer from './home.styled';\n\n// actions\nimport {\n editResrveForm,\n getServiceInfo,\n serviceReserve,\n getUserInfo,\n // getMateReserveList,\n // getMateCallReserveList,\n getContractPartners,\n acceptCall,\n editReserveDetailView,\n editReserveLatestView,\n editViewType,\n editCallPage,\n editContractForm,\n} from '../../Reducer/Modules/app';\nimport { editAuth } from '../../Reducer/Modules/auth';\n\nclass HomeContainer extends React.PureComponent {\n componentDidMount = () => {\n const id = localStorage.getItem('id');\n const userType = localStorage.getItem('userType');\n\n if (id && userType === MATE) {\n } else {\n const prevList = localStorage.getItem('partners');\n if (prevList) {\n const list = JSON.parse(prevList);\n this.props.editContractForm({ type: 'partners', value: list });\n }\n\n this.props.fetchPartners();\n }\n };\n\n render() {\n return (\n <HomeStyledContainer>\n <Home {...this.props} />\n </HomeStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\n\nconst mapStateToDispatch = dispatch => ({\n editAuth: ({ type, value }) => dispatch(editAuth({ type, value })),\n editForm: ({ type, value }) => dispatch(editResrveForm({ type, value })),\n editLatest: ({ value }) => dispatch(editReserveLatestView({ value })),\n editDetail: ({ value }) => dispatch(editReserveDetailView({ value })),\n editViewType: ({ value }) => dispatch(editViewType({ value })),\n editCallPage: value => dispatch(editCallPage(value)),\n editContractForm: ({ type, value }) => dispatch(editContractForm({ type, value })),\n\n getServiceInfo: ({ code }) => dispatch(getServiceInfo({ code })),\n getUserInfo: ({ id, userType }) => dispatch(getUserInfo({ id, userType })),\n fetchPartners: () => dispatch(getContractPartners()),\n serviceReserve: ({ userId, info }) => dispatch(serviceReserve({ userId, info })),\n // mateReserveList: ({ mateId }) => dispatch(getMateReserveList({ mateId })),\n // mateCallList: ({ mateId, page }) => dispatch(getMateCallReserveList({ mateId, page })),\n acceptCall: ({ mateId, callId }) => dispatch(acceptCall({ mateId, callId })),\n});\n\nexport default connect(mapStateToProps, mapStateToDispatch)(HomeContainer);\n","import React from 'react';\n\nconst NotFoundPage = () => (\n <div style={{ height: '100vh', padding: '100px' }}>\n <img src='/assets/images/new_logo_img.png' alt='위드메이트 로고' style={{ width: '55px', height: 'auto' }} />\n <p style={{ display: 'inline-block', verticalAlign: '-10px', paddingLeft: '10px', paddingBottom: '35px', color: 'skyblue', fontSize: '40px' }}>해당 페이지를 찾을 수 없습니다.</p>\n\n <h3 style={{ paddingBottom: '5px' }}>원하시는 결과를 찾을 수 없습니다.</h3>\n <h3>올바른 URL을 입력하였는지 확인하세요. 자세한 내용은 사이트 관리자에게 문의하시기 바랍니다.</h3>\n </div>\n);\nexport default NotFoundPage;\n","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../../../theme';\nconst LoginStyledContainer = styled.div`\n margin-top: 55px;\n min-height: 100vh;\n background-image: url('/assets/images/login_bg.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: 80% 50%;\n\n @media (max-width: 480px) {\n min-height: initial;\n height: 100%;\n }\n\n .inner-container {\n padding: 0px;\n padding-top: 144px;\n padding-bottom: 100px;\n\n @media (max-width: 480px) {\n padding: 0px;\n }\n\n .login-form {\n background-color: white;\n border-radius: 8px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 340px;\n margin: 0 auto;\n padding: 24px;\n\n @media (max-width: 480px) {\n max-width: initial;\n width: 100%;\n border-radius: 0px;\n box-shadow: none;\n }\n\n .login-title {\n margin-bottom: 24px;\n\n p {\n font-size: ${sizeHandler(32)};\n font-weight: bold;\n letter-spacing: -0.7px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .form {\n label {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.15px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n input {\n height: 40px;\n border: solid 1px #e6e6e6;\n // margin-bottom: 20px;\n }\n\n button {\n width: 100%;\n height: 46px;\n margin-top: 4px;\n margin-bottom: 16px;\n\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n }\n\n .link-wrapper {\n display: flex;\n justify-content: center;\n\n .link {\n cursor: pointer;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.5);\n\n &:first-child {\n // border-right: 1px solid #e6e6e6;\n padding-right: 16px;\n }\n\n &:last-child {\n margin-left: 16px;\n color: ${mainColor};\n }\n }\n }\n }\n\n .form-user-type {\n height: 76px;\n margin-bottom: 20px;\n border-radius: 4px;\n border: 1px solid #e6e6e6;\n display: flex;\n align-items: center;\n overflow: hidden;\n\n .type {\n flex: 1;\n height: 100%;\n line-height: 30px;\n background-color: #ffffff;\n cursor: pointer;\n\n &:first-child {\n border-right: 1px solid #e6e6e6;\n }\n\n p {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n line-height: 40px;\n text-align: left;\n padding-left: 10px;\n color: #606060;\n }\n\n h5 {\n font-size: ${sizeHandler(12)};\n text-align: left;\n padding-left: 10px;\n color: #606060;\n }\n\n &.active {\n background-color: #606060;\n\n p {\n color: #ffffff;\n }\n\n h5 {\n color: white;\n }\n }\n }\n }\n }\n }\n`;\nexport default LoginStyledContainer;\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst TabContainer = styled.div`\n width: 100%;\n height: 48px;\n\n border: 1px solid #dddddd;\n border-radius: 6px;\n overflow: hidden;\n\n display: flex;\n align-items: center;\n`;\n\nconst Tab = styled.div`\n flex: 1;\n height: 100%;\n\n cursor: pointer;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n background-color: ${props => (props.active ? '#3bc1ff' : '#ffffff')};\n\n color: ${props => (props.active ? '#ffffff' : '#3bc1ff')};\n font-size: 14px;\n font-weight: bold;\n\n transition: all 0.5s;\n`;\n\nexport { TabContainer, Tab };\n","import styled from 'styled-components';\n\nimport Pallete from '../../theme';\n\nconst H1 = styled.h1`\n margin: 0px;\n margin-bottom: 16px;\n\n font-size: 26px;\n font-weight: ${props => (props.bold ? 'bold' : 'normal')};\n line-height: 1.5;\n\n > span {\n font-size: 26px;\n font-weight: ${props => (props.bold ? 'bold' : 'normal')};\n line-height: 1.5;\n }\n`;\n\nconst H2 = styled.h2`\n margin: 0px;\n margin-bottom: 16px;\n\n font-size: 23px;\n font-weight: ${props => (props.bold ? 'bold' : 'normal')};\n line-height: 1.5;\n`;\n\nconst H3 = styled.h3`\n margin: 0px;\n margin-bottom: 12px;\n\n font-size: 18px;\n font-weight: ${props => (props.bold ? 'bold' : 'normal')};\n line-height: 1.5;\n`;\n\nconst H4 = styled.h4`\n margin: 0px;\n margin-bottom: 8px;\n\n font-size: 16px;\n font-weight: ${props => (props.bold ? 'bold' : 'normal')};\n line-height: 1.4;\n`;\n\nconst H5 = styled.h5`\n margin: 0px;\n margin-bottom: 8px;\n\n font-size: 13px;\n font-weight: ${props => (props.bold ? 'bold' : 'normal')};\n line-height: 1.4;\n`;\n\nconst H6 = styled.h6`\n margin: 0px;\n margin-bottom: 4px;\n\n font-size: 12px;\n font-weight: ${props => (props.bold ? 'bold' : 'normal')};\n line-height: 1.4;\n`;\n\nconst Text = styled.p`\n margin: 0px;\n margin-bottom: 0px;\n\n font-size: 11px;\n font-weight: ${props => (props.bold ? 'bold' : 'normal')};\n line-height: 1.4;\n`;\n\nexport { H1, H2, H3, H4, H5, H6, Text };\n","import styled from 'styled-components';\nimport Pallete from '../../theme';\n\nconst Container = styled.div`\n width: 100%;\n`;\n\nconst InnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n`;\n\nexport { Container, InnerContainer };\n","export const isNotNumber = value => {\n const regExp = /[a-z|ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/g;\n return regExp.test(value);\n};\n\nexport const celluarValidate = phone => {\n const regExp = /^01(?:0|1|[6-9])[0-9]{4}[0-9]{4}$/;\n const regExp2 = /^1(?:0|1|[6-9])[0-9]{4}[0-9]{4}$/;\n\n const result = regExp.test(phone);\n const result2 = regExp2.test(phone);\n\n return result === true || result2 === true ? true : false;\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Select, ConfigProvider, DatePicker, message } from 'antd';\nimport holidayKR from 'holiday-kr';\nimport moment from 'moment';\nimport swal from 'sweetalert2';\nimport 'moment/locale/zh-cn';\nimport locale from 'antd/es/locale/ko_KR';\n\n// components\nimport {\n DivisionLine,\n WithmateLabel,\n WithmateInput,\n WithamteInputWithButton,\n HalfWithmateInput,\n WithmateTextarea,\n WithmateSelect,\n FlexWrapper,\n HalfWithmateSelect,\n WithmateDatePicker,\n BorderDivisionLine,\n StyledHotFix,\n WithmateValue,\n WithmateValueTip,\n} from '../Common/input';\nimport { H1, H2, H3, H4, H5, H6, Text } from '../Common/text';\nimport { Container } from '../Common/container';\nimport { TabContainer, Tab } from '../Common/tab';\nimport { FullWidthButton } from '../Common/button';\n\n// utils\nimport Pallete from '../../theme';\nimport { isNotNumber, celluarValidate } from '../../Lib/regex';\n\n// imgs\n\nmoment.lang('ko', {\n weekdays: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],\n weekdaysShort: ['일', '월', '화', '수', '목', '금', '토'],\n});\n\nexport const Step1 = ({ data, inputDeepHandler, setDestination, setStarting }) => {\n const { service, sex, relate, patient, contact, destination, starting } = data;\n\n const onTab = tab => {\n inputDeepHandler({ type: 'temp', deepType: 'service', value: tab });\n };\n\n const onSex = sex => {\n inputDeepHandler({ type: 'temp', deepType: 'sex', value: sex });\n };\n\n const onRelation = relate => {\n inputDeepHandler({ type: 'temp', deepType: 'relate', value: relate });\n };\n\n const destinationHandler = ev => {\n inputDeepHandler({ type: 'temp', deepType: 'destination', value: ev.target.value });\n };\n\n const startingHandler = ev => {\n inputDeepHandler({ type: 'temp', deepType: 'starting', value: ev.target.value });\n };\n\n const onEditShielder = () => {\n const id = localStorage.getItem('id');\n if (!id) return null;\n\n inputDeepHandler({ type: '_temp', deepType: 'shielder', value: (data && data.shielder) || '' });\n inputDeepHandler({ type: '_temp', deepType: 'onShieldModal', value: true });\n };\n\n const onNextStep = () => {\n if (!localStorage.getItem('id')) {\n return message.warning('로그인 후 이용해주세요');\n }\n\n const fix = [];\n if (!relate) fix.push('relate');\n if (!contact || !celluarValidate(contact)) fix.push('contact');\n if (!patient) fix.push('patient');\n if (!starting) fix.push('starting');\n if (service === 'unemergency' && !destination) fix.push('destination');\n\n inputDeepHandler({ type: 'temp', deepType: 'reserveHotFix', value: fix });\n if (fix.length > 0) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 2 });\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 위드메이트와의\n <br className='mobile-exist' />\n 병원 동행을 예약하세요\n </H1>\n\n <DivisionLine small />\n\n <WithmateLabel required>서비스 선택</WithmateLabel>\n <TabContainer>\n <Tab\n active={data && data.service === 'unemergency'}\n onClick={() => {\n onTab('unemergency');\n }}\n >\n Pro\n </Tab>\n <Tab\n active={data && data.service === 'assist'}\n onClick={() => {\n onTab('assist');\n }}\n >\n Basic\n </Tab>\n </TabContainer>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel required>이용자 성함 / 성별</WithmateLabel>\n <WithmateLabel required>관계</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <RelativeWrapper>\n <WithmateInput\n type='text'\n placeholder='ex) 홍길동'\n value={(data && data.patient) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'patient', value: ev.target.value });\n }}\n />\n\n <SigleButtonWrapper>\n <SigleButton\n active={data && data.sex === '남'}\n onClick={() => {\n onSex('남');\n }}\n >\n 남\n </SigleButton>\n <SigleButton\n active={data && data.sex === '녀'}\n onClick={() => {\n onSex('녀');\n }}\n >\n 녀\n </SigleButton>\n </SigleButtonWrapper>\n </RelativeWrapper>\n <WithmateSelect placeholder='-' value={(data && data.relate) || undefined} onChange={onRelation}>\n <Select.Option value='본인'>본인</Select.Option>\n <Select.Option value='부모'>부모</Select.Option>\n <Select.Option value='자매'>자매</Select.Option>\n <Select.Option value='친구'>친구</Select.Option>\n <Select.Option value='지인'>지인</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n </FlexWrapper>\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'patient') && (\n <StyledHotFix>이용자 성함을 입력해주세요.</StyledHotFix>\n )}\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'relate') && (\n <StyledHotFix>환자와의 관계를 선택해주세요.</StyledHotFix>\n )}\n <DivisionLine small />\n\n <WithmateLabel required>보호자(서비스를 신청한 사람) 연락처</WithmateLabel>\n <WithamteInputWithButton\n inputConfig={{\n type: 'text',\n disabled: true,\n placeholder: 'ex) 01029101234 (\"-\" 없이 입력해주세요)',\n value: data && data.shielder,\n }}\n buttonName='수정'\n onButton={onEditShielder}\n // value={(data && data.contact) || undefined}\n />\n <DivisionLine small />\n\n <WithmateLabel required>환자(서비스를 받는 사람) 연락처</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='ex) 01029101234 (\"-\" 없이 입력해주세요)'\n value={(data && data.contact) || undefined}\n onChange={ev => {\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 11) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'contact', value: ev.target.value });\n }}\n />\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'contact') && (\n <StyledHotFix>올바른 휴대전화번호를 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine small />\n\n <WithmateLabel required>병원 위치</WithmateLabel>\n <WithamteInputWithButton\n buttonName='검색'\n onButton={setStarting}\n inputConfig={{\n type: 'text',\n value: (data && data.starting) || undefined,\n placeholder: 'ex) 서울특별시 강남 을지병원',\n onChange: startingHandler,\n }}\n />\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'starting') && (\n <StyledHotFix>병원 위치를 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine small />\n\n <WithmateLabel required={data && data.service === 'unemergency'}>자택 주소</WithmateLabel>\n <WithamteInputWithButton\n buttonName='검색'\n onButton={setDestination}\n inputConfig={{\n type: 'text',\n value: (data && data.destination) || undefined,\n placeholder: 'ex) 서울특별시 서초대로 30, ABC 아파트',\n onChange: destinationHandler,\n }}\n />\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'destination') && (\n <StyledHotFix>귀가시 자택 주소를 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <FullWidthButton bg={Pallete.blue100} onClick={onNextStep}>\n 신청하기\n </FullWidthButton>\n\n <BorderDivisionLine small />\n\n <FullWidthButton\n bg={Pallete.dark60}\n href='tel:070-4300-9075'\n onClick={e => {\n if (window.innerWidth > 480) {\n e.preventDefault();\n e.stopPropagation();\n\n swal.fire({\n title: '고객 센터 연결 번호',\n text: '☎ 070-4300-9075',\n icon: 'info',\n confirmButtonText: '확인',\n });\n }\n }}\n >\n 전화 예약하기\n </FullWidthButton>\n </Container>\n );\n};\n\nexport const Step2 = ({ data, inputDeepHandler }) => {\n const { date, time, minute, sick, comment } = data;\n const onNextStep = () => {\n const fix = [];\n if (!date) fix.push('date');\n if (!sick) fix.push('sick');\n if (!comment) fix.push('comment');\n if (!time) fix.push('time');\n if (time && time >= 18) fix.push('overtime');\n if (!minute) fix.push('minute');\n\n inputDeepHandler({ type: 'temp', deepType: 'reserveHotFix', value: fix });\n if (fix.length > 0) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 3 });\n };\n\n const onPrevStep = () => {\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 1 });\n };\n\n const onCalendar = value => {\n inputDeepHandler({ type: 'temp', deepType: 'date', value });\n };\n\n const sickHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'sick', value });\n };\n\n const commentHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'comment', value });\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 병원 동행 예약을\n <br className='mobile-exist' />\n 마무리 해주세요\n </H1>\n\n <WithmateLabel required>예약일자</WithmateLabel>\n <ConfigProvider locale={locale}>\n <WithmateDatePicker\n inputReadOnly\n style={{ width: '100%', height: '36px' }}\n value={(data && data.date) || undefined}\n placeholder='예약일자를 설정해주세요.'\n format='YYYY-MM-DD'\n onChange={onCalendar}\n disabledDate={current =>\n current < moment().add(0, 'day') ||\n current.get('day') === 0 ||\n current.get('day') === 6 ||\n holidayKR.isSolarHoliday(moment(current).toDate())\n }\n />\n </ConfigProvider>\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'date') && (\n <StyledHotFix>예약일자를 선택해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>예약 시간</WithmateLabel>\n <FlexWrapper withHalf>\n <WithmateInput\n type='text'\n placeholder='ex) 16'\n value={(data && data.time) || undefined}\n style={{ marginRight: '4px' }}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 23) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'time', value: ev.target.value });\n }}\n suffix='시'\n />\n <WithmateInput\n type='text'\n placeholder='ex) 30'\n value={(data && data.minute) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 60) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'minute', value: ev.target.value });\n }}\n suffix='분'\n />\n </FlexWrapper>\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'time' || r === 'minute') && (\n <StyledHotFix>서비스 이용을 위한 예약 시간을 정확히 입력해주세요.</StyledHotFix>\n )}\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'overtime') && (\n <StyledHotFix>18시 이후의 서비스 예약은 불가능합니다.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>병명</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='ex) 위암, 대장암, 팔 골절 등'\n value={(data && data.sick) || undefined}\n onChange={ev => {\n sickHandler(ev.target.value);\n }}\n />\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'sick') && (\n <StyledHotFix>환자분의 병명을 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>병원 이름 및 상세내용</WithmateLabel>\n <WithmateTextarea\n type='text'\n placeholder='병원 이름 및 상세 내용을 입력해주세요. 특히, 병원 이름을 반드시 기재해주세요 (ex. 서울대학교 병원)'\n value={(data && data.comment) || undefined}\n onChange={ev => {\n commentHandler(ev.target.value);\n }}\n />\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'comment') && (\n <StyledHotFix>병원 이름 및 상세내용을 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <FullWidthButton bg={Pallete.blue100} onClick={onNextStep}>\n 신청하기\n </FullWidthButton>\n\n <BorderDivisionLine small />\n\n <FullWidthButton bg={Pallete.dark80} onClick={onPrevStep}>\n 이전으로\n </FullWidthButton>\n </Container>\n );\n};\n\nexport const Step3 = ({ data, inputDeepHandler, onReserve }) => {\n const addTimeSelector = value => {\n inputDeepHandler({ type: 'temp', deepType: 'addTime', value });\n };\n const transportHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'transport', value });\n };\n\n const getFee = () => {\n const { addTime = '60', service } = data;\n const minute = parseInt(addTime, 10);\n\n const time = minute / 60;\n let total = 0;\n if (service === 'unemergency') {\n total = time * 20000 + time * 20000 * 0.1;\n } else {\n total = time * 15000 + time * 15000 * 0.1;\n }\n\n if (data.transport === 'own' && data.service === 'unemergency') {\n total += 20000;\n }\n\n return total;\n };\n\n const onSaveAndNext = () => {\n const fix = [];\n onReserve();\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 서비스 신청내용 확인\n </H1>\n\n <WithmateLabel>선택된 서비스</WithmateLabel>\n <WithmateValue>{data && data.service === 'unemergency' ? '병원 동행 Pro' : '병원 동행 Basic'}</WithmateValue>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel>이용자 성함</WithmateLabel>\n <WithmateLabel>이용자와의 관계</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateInput disabled value={(data && data.patient) || undefined} />\n <WithmateInput disabled value={(data && data.relate) || undefined} />\n </FlexWrapper>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel>전화번호</WithmateLabel>\n <WithmateLabel>병명</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateInput disabled value={(data && data.contact) || undefined} />\n <WithmateInput disabled value={(data && data.sick) || undefined} />\n </FlexWrapper>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel>병원 위치</WithmateLabel>\n <WithmateLabel>자택 주소</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateInput disabled value={(data && data.destination) || undefined} />\n <WithmateInput disabled value={(data && data.starting) || undefined} />\n </FlexWrapper>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel>예약 일자</WithmateLabel>\n <WithmateLabel>예약 시간</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateInput disabled value={(data && data.date && moment(data.date).format('YY. MM. DD')) || undefined} />\n <WithmateInput disabled value={((data && data.time) || '00') + '시 ' + ((data && data.minute) || '00') + '분'} />\n </FlexWrapper>\n\n <DivisionLine small />\n\n <WithmateLabel>병원 이름 및 상세내용</WithmateLabel>\n <WithmateTextarea disabled value={(data && data.comment) || undefined} />\n\n <DivisionLine small />\n\n <FullWidthButton\n bg={Pallete.dark80}\n onClick={() => {\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 2 });\n }}\n >\n 이전으로\n </FullWidthButton>\n\n <DivisionLine />\n\n <H1 bold style={{ color: Pallete.dark80 }}>\n 예약 접수하기\n </H1>\n\n <WithmateLabel required bg={Pallete.blue50}>\n 예상 소요 시간\n </WithmateLabel>\n <WithmateSelect value={(data && data.addTime) || undefined} placeholder='예상 소요시간을 선택해주세요' onChange={addTimeSelector}>\n <Select.Option value='60'>1시간</Select.Option>\n <Select.Option value='90'>1시간 30분</Select.Option>\n <Select.Option value='120'>2시간</Select.Option>\n <Select.Option value='150'>2시간 30분</Select.Option>\n <Select.Option value='180'>3시간</Select.Option>\n <Select.Option value='210'>3시간 30분</Select.Option>\n <Select.Option value='240'>4시간</Select.Option>\n <Select.Option value='270'>4시간 30분</Select.Option>\n <Select.Option value='300'>5시간</Select.Option>\n <Select.Option value='330'>5시간 30분</Select.Option>\n <Select.Option value='360'>6시간</Select.Option>\n <Select.Option value='390'>6시간 30분</Select.Option>\n <Select.Option value='420'>7시간</Select.Option>\n <Select.Option value='450'>7시간 30분</Select.Option>\n <Select.Option value='480'>8시간</Select.Option>\n </WithmateSelect>\n\n {data && data.service === 'unemergency' && (\n <>\n <DivisionLine small />\n\n <WithmateLabel required>이동 수단 선택</WithmateLabel>\n <WithmateSelect\n value={(data && data.transport) || undefined}\n placeholder='서비스 이용간 이동 수단을 선택해주세요'\n onChange={transportHandler}\n >\n <Select.Option value='common'>대중교통 이용 (택시・버스 등)</Select.Option>\n <Select.Option value='own'>본인소유 자차 이용</Select.Option>\n {/* <Select.Option value='withcar'>위드메이트 차량 호출</Select.Option> */}\n </WithmateSelect>\n {data.transport && data.transport === 'own' && <AlertMessage>* 자차 이용시, 운전자 보험 변경 필수</AlertMessage>}\n </>\n )}\n\n <DivisionLine small />\n\n <WithmateLabel>총 예상비용</WithmateLabel>\n <WithmateValue>₩ {getFee()}</WithmateValue>\n <WithmateValueTip>(VAT 10% 포함된 가격입니다)</WithmateValueTip>\n\n <DivisionLine small />\n\n <WithmateLabel>결제수단</WithmateLabel>\n <WithmateValue>계좌이체</WithmateValue>\n\n <DivisionLine x_small />\n\n <WithmateValueTip>- 입금계좌는 서비스 종료 후 안내됩니다.</WithmateValueTip>\n <WithmateValueTip>- 카드 결제는 예약접수 후, 고객센터에 문의바랍니다.</WithmateValueTip>\n <WithmateValueTip>- 환불 및 접수 취소에 대한 자세한 안내 사항은 FAQ에서 확인 가능합니다.</WithmateValueTip>\n <WithmateValueTip>- 위드메이트는 후불제 서비스입니다.</WithmateValueTip>\n\n <DivisionLine small />\n\n <FullWidthButton bg={Pallete.blue50} onClick={onSaveAndNext}>\n 예약 접수하기\n </FullWidthButton>\n <WithmateValueTip style={{ color: 'red' }}>\n * 위드메이트는 자율형 매칭 플랫폼으로, 예약접수 시 서비스 매칭 인력 배정이 보장되지 않음을 알려드립니다.\n </WithmateValueTip>\n </Container>\n );\n};\n\nexport const ContractdStep_1 = ({ data, inputDeepHandler, setDestination, onDropoReserve }) => {\n const { service, sex, relate, patient, contact, destination, starting } = data;\n\n const onTab = tab => {\n inputDeepHandler({ type: 'temp', deepType: 'service', value: tab });\n };\n\n const onSex = sex => {\n inputDeepHandler({ type: 'temp', deepType: 'sex', value: sex });\n };\n\n const onRelation = relate => {\n inputDeepHandler({ type: 'temp', deepType: 'relate', value: relate });\n };\n\n const destinationHandler = ev => {\n inputDeepHandler({ type: 'temp', deepType: 'destination', value: ev.target.value });\n };\n\n const onNextStep = () => {\n if (!localStorage.getItem('id')) {\n return message.warning('로그인 후 이용해주세요');\n }\n\n const fix = [];\n if (!relate) fix.push('relate');\n if (!contact || !celluarValidate(contact)) fix.push('contact');\n if (!patient) fix.push('patient');\n if (!destination) fix.push('destination');\n\n inputDeepHandler({ type: 'temp', deepType: 'reserveHotFix', value: fix });\n if (fix.length > 0) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 2 });\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n {data.info &&\n data.info.description &&\n data.info.description.split('\\n').map((word, index) => (\n <span key={'title-word-' + index.toString()}>\n {word}\n <br className='mobile-exist' />\n </span>\n ))}\n </H1>\n\n <DivisionLine small />\n\n <WithmateLabel required>서비스 선택</WithmateLabel>\n {data && data.services && data.services.length > 0 && (\n <TabContainer>\n {data.services.map((s, index) => (\n <Tab\n key={'service-item-key' + index.toString()}\n active={data && data.service === s.code}\n onClick={() => {\n onTab(s.code);\n }}\n >\n {s.serviceName}\n </Tab>\n ))}\n </TabContainer>\n )}\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel required>이용자 성함 / 성별</WithmateLabel>\n <WithmateLabel required>관계</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <RelativeWrapper>\n <WithmateInput\n type='text'\n placeholder='ex) 홍길동'\n value={(data && data.patient) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'patient', value: ev.target.value });\n }}\n />\n\n <SigleButtonWrapper>\n <SigleButton\n active={data && data.sex === '남'}\n onClick={() => {\n onSex('남');\n }}\n >\n 남\n </SigleButton>\n <SigleButton\n active={data && data.sex === '녀'}\n onClick={() => {\n onSex('녀');\n }}\n >\n 녀\n </SigleButton>\n </SigleButtonWrapper>\n </RelativeWrapper>\n <WithmateSelect placeholder='-' value={(data && data.relate) || undefined} onChange={onRelation}>\n <Select.Option value='본인'>본인</Select.Option>\n <Select.Option value='부모'>부모</Select.Option>\n <Select.Option value='자매'>자매</Select.Option>\n <Select.Option value='친구'>친구</Select.Option>\n <Select.Option value='지인'>지인</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n </FlexWrapper>\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'patient') && (\n <StyledHotFix>이용자 성함을 입력해주세요.</StyledHotFix>\n )}\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'relate') && (\n <StyledHotFix>환자와의 관계를 선택해주세요.</StyledHotFix>\n )}\n <DivisionLine small />\n\n <WithmateLabel required>연락처(휴대전화번호)</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='ex) 01029101234 (\"-\" 없이 입력해주세요)'\n value={(data && data.contact) || undefined}\n onChange={ev => {\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 11) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'contact', value: ev.target.value });\n }}\n />\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'contact') && (\n <StyledHotFix>올바른 휴대전화번호를 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine small />\n\n <WithmateLabel required>병원 위치</WithmateLabel>\n <WithamteInputWithButton\n buttonName='검색'\n inputConfig={{\n type: 'text',\n disabled: true,\n value: (data && data.starting) || undefined,\n }}\n />\n\n <DivisionLine small />\n\n <WithmateLabel required={data && data.service === 'unemergency'}>자택 주소 (고향시 내 주소지만 서비스 진행 가능)</WithmateLabel>\n <WithamteInputWithButton\n buttonName='검색'\n onButton={setDestination}\n inputConfig={{\n type: 'text',\n value: (data && data.destination) || undefined,\n placeholder: 'ex) 경기 고양시 덕양구 고양시청로',\n onChange: destinationHandler,\n }}\n />\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'starting') && (\n <StyledHotFix>귀가시 자택 주소를 입력해주세요.</StyledHotFix>\n )}\n\n {data && data.service === 'dropcare' && (\n <>\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel required>거주 유형</WithmateLabel>\n <WithmateLabel required>주택 유형</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateSelect placeholder='-'>\n <Select.Option value='아파트'>아파트</Select.Option>\n <Select.Option value='단독'>단독</Select.Option>\n <Select.Option value='다가구'>다가구</Select.Option>\n </WithmateSelect>\n <WithmateSelect placeholder='-'>\n <Select.Option value='자가'>자가</Select.Option>\n <Select.Option value='전.월세'>전.월세</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n </FlexWrapper>\n\n <DivisionLine small />\n <FlexWrapper withHalf>\n <WithmateLabel required>장기 요양 등급</WithmateLabel>\n <WithmateLabel required>확정</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateSelect placeholder='-'>\n <Select.Option value='1등급'>1등급</Select.Option>\n <Select.Option value='2등급'>2등급</Select.Option>\n <Select.Option value='3등급'>3등급</Select.Option>\n <Select.Option value='4등급'>4등급</Select.Option>\n <Select.Option value='5등급'>5등급</Select.Option>\n </WithmateSelect>\n <WithmateSelect placeholder='-'>\n <Select.Option value='해피케어'>해피케어</Select.Option>\n <Select.Option value='장기요양'>장기요양</Select.Option>\n <Select.Option value='렌탈'>렌탈</Select.Option>\n </WithmateSelect>\n </FlexWrapper>\n </>\n )}\n\n <DivisionLine />\n\n <FullWidthButton bg={Pallete.blue100} onClick={onNextStep}>\n 신청하기\n </FullWidthButton>\n </Container>\n );\n};\n\nexport const ContractStep_2 = ({ data, inputDeepHandler }) => {\n const { date, time, minute, sick, comment } = data;\n const onNextStep = () => {\n const fix = [];\n if (!date) fix.push('date');\n if (!sick) fix.push('sick');\n if (!comment) fix.push('comment');\n if (!time) fix.push('time');\n if (time && time >= 18) fix.push('overtime');\n if (!minute) fix.push('minute');\n\n inputDeepHandler({ type: 'temp', deepType: 'reserveHotFix', value: fix });\n if (fix.length > 0) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 3 });\n };\n\n const onPrevStep = () => {\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 1 });\n };\n\n const onCalendar = value => {\n inputDeepHandler({ type: 'temp', deepType: 'date', value });\n };\n\n const sickHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'sick', value });\n };\n\n const commentHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'comment', value });\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 예약 신청을\n <br className='mobile-exist' />\n 마무리 해주세요\n </H1>\n\n <WithmateLabel required>예약일자</WithmateLabel>\n <ConfigProvider locale={locale}>\n <WithmateDatePicker\n inputReadOnly\n style={{ width: '100%', height: '36px' }}\n value={(data && data.date) || undefined}\n placeholder='예약일자를 설정해주세요.'\n format='YYYY-MM-DD'\n onChange={onCalendar}\n disabledDate={current =>\n current < moment().add(0, 'day') ||\n current.get('day') === 0 ||\n current.get('day') === 6 ||\n holidayKR.isSolarHoliday(moment(current).toDate())\n }\n />\n </ConfigProvider>\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'date') && (\n <StyledHotFix>예약일자를 선택해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>예약 시간</WithmateLabel>\n <FlexWrapper withHalf>\n <WithmateInput\n type='text'\n placeholder='ex) 16'\n value={(data && data.time) || undefined}\n style={{ marginRight: '4px' }}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 23) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'time', value: ev.target.value });\n }}\n suffix='시'\n />\n <WithmateInput\n type='text'\n placeholder='ex) 30'\n value={(data && data.minute) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 60) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'minute', value: ev.target.value });\n }}\n suffix='분'\n />\n </FlexWrapper>\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'time' || r === 'minute') && (\n <StyledHotFix>서비스 이용을 위한 예약 시간을 정확히 입력해주세요.</StyledHotFix>\n )}\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'overtime') && (\n <StyledHotFix>18시 이후의 서비스 예약은 불가능합니다.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>병명</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='ex) 위암, 대장암, 팔 골절 등'\n value={(data && data.sick) || undefined}\n onChange={ev => {\n sickHandler(ev.target.value);\n }}\n />\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'sick') && (\n <StyledHotFix>환자분의 병명을 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>추가 요청 사항</WithmateLabel>\n <WithmateTextarea\n type='text'\n placeholder={`서비스 진행자에게 추가적으로 요청할 사항을 적어주세요.\n ex) 이동 간 낙상 방지에 각별히 신경써주세요.`}\n value={(data && data.comment) || undefined}\n onChange={ev => {\n commentHandler(ev.target.value);\n }}\n />\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'comment') && (\n <StyledHotFix>추가 요청 사항을 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <FullWidthButton bg={Pallete.blue100} onClick={onNextStep}>\n 신청하기\n </FullWidthButton>\n\n <BorderDivisionLine small />\n\n <FullWidthButton bg={Pallete.dark80} onClick={onPrevStep}>\n 이전으로\n </FullWidthButton>\n </Container>\n );\n};\n\nexport const ContractStep_3 = ({ data, inputDeepHandler, onReserve }) => {\n const addTimeSelector = value => {\n inputDeepHandler({ type: 'temp', deepType: 'addTime', value });\n };\n\n const onSaveAndNext = () => {\n const fix = [];\n\n onReserve();\n };\n\n let selectedService = '';\n if (data && data.service && data.services && data.services.length > 0 && data.services.some(s => s.code === data.service)) {\n const s = data.services.filter(s => s.code === data.service)[0];\n selectedService = s.serviceName;\n }\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 서비스 신청내용 확인\n </H1>\n\n <WithmateLabel>선택된 서비스</WithmateLabel>\n <WithmateValue>{selectedService}</WithmateValue>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel>이용자 성함</WithmateLabel>\n <WithmateLabel>이용자와의 관계</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateInput disabled value={(data && data.patient) || undefined} />\n <WithmateInput disabled value={(data && data.relate) || undefined} />\n </FlexWrapper>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel>전화번호</WithmateLabel>\n <WithmateLabel>병명</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateInput disabled value={(data && data.contact) || undefined} />\n <WithmateInput disabled value={(data && data.sick) || undefined} />\n </FlexWrapper>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel>병원 위치</WithmateLabel>\n <WithmateLabel>자택 주소</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateInput disabled value={(data && data.destination) || undefined} />\n <WithmateInput disabled value={(data && data.starting) || undefined} />\n </FlexWrapper>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel>예약 일자</WithmateLabel>\n <WithmateLabel>예약 시간</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateInput disabled value={(data && data.date && moment(data.date).format('YY. MM. DD')) || undefined} />\n <WithmateInput disabled value={((data && data.time) || '00') + '시 ' + ((data && data.minute) || '00') + '분'} />\n </FlexWrapper>\n\n <DivisionLine small />\n\n <WithmateLabel>병원 이름 및 상세내용</WithmateLabel>\n <WithmateTextarea disabled value={(data && data.comment) || undefined} />\n\n <DivisionLine small />\n\n <FullWidthButton\n bg={Pallete.dark80}\n onClick={() => {\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 2 });\n }}\n >\n 이전으로\n </FullWidthButton>\n\n <DivisionLine />\n\n <H1 bold style={{ color: Pallete.dark80 }}>\n 예약 접수하기\n </H1>\n\n <WithmateLabel required bg={Pallete.blue50}>\n 예상 소요 시간\n </WithmateLabel>\n <WithmateSelect value={(data && data.addTime) || undefined} placeholder='예상 소요시간을 선택해주세요' onChange={addTimeSelector}>\n <Select.Option value='60'>1시간</Select.Option>\n <Select.Option value='90'>1시간 30분</Select.Option>\n <Select.Option value='120'>2시간</Select.Option>\n <Select.Option value='150'>2시간 30분</Select.Option>\n <Select.Option value='180'>3시간</Select.Option>\n <Select.Option value='210'>3시간 30분</Select.Option>\n <Select.Option value='240'>4시간</Select.Option>\n <Select.Option value='270'>4시간 30분</Select.Option>\n <Select.Option value='300'>5시간</Select.Option>\n <Select.Option value='330'>5시간 30분</Select.Option>\n <Select.Option value='360'>6시간</Select.Option>\n <Select.Option value='390'>6시간 30분</Select.Option>\n <Select.Option value='420'>7시간</Select.Option>\n <Select.Option value='450'>7시간 30분</Select.Option>\n <Select.Option value='480'>8시간</Select.Option>\n </WithmateSelect>\n\n <DivisionLine small />\n\n <FullWidthButton bg={Pallete.blue50} onClick={onSaveAndNext}>\n 예약 접수하기\n </FullWidthButton>\n </Container>\n );\n};\n\nconst RelativeWrapper = styled.div`\n position: relative;\n\n > input {\n width: 100% !important;\n }\n`;\n\nconst SigleButtonWrapper = styled.div`\n position: absolute;\n top: 1px;\n right: 1px;\n`;\n\nconst SigleButton = styled.span`\n display: inline-block;\n width: 43px;\n height: 100%;\n line-height: 43px;\n\n cursor: pointer;\n font-size: 11px;\n color: ${props => (props.active ? '#ffffff' : Pallete.dark60)};\n text-align: center;\n\n background-color: ${props => (props.active ? Pallete.blue50 : '#ffffff')};\n`;\n\nconst AlertMessage = styled.p`\n margin-bottom: 0px;\n margin-top: 4px;\n\n font-size: 11px;\n color: red;\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Select, ConfigProvider, DatePicker } from 'antd';\nimport holidayKR from 'holiday-kr';\nimport moment from 'moment';\n\nimport 'moment/locale/zh-cn';\nimport locale from 'antd/es/locale/ko_KR';\n\n// components\nimport {\n DivisionLine,\n WithmateLabel,\n WithmateInput,\n WithamteInputWithButton,\n HalfWithmateInput,\n WithmateTextarea,\n WithmateSelect,\n FlexWrapper,\n HalfWithmateSelect,\n WithmateDatePicker,\n BorderDivisionLine,\n StyledHotFix,\n WithmateValue,\n WithmateValueTip,\n} from '../Common/input';\nimport { H1, H2, H3, H4, H5, H6, Text } from '../Common/text';\nimport { Container } from '../Common/container';\nimport { TabContainer, Tab } from '../Common/tab';\nimport { FullWidthButton } from '../Common/button';\n\n// utils\nimport Pallete from '../../theme';\nimport { isNotNumber, celluarValidate } from '../../Lib/regex';\nimport { ASSIST } from '../../Lib/variables';\n\nexport const EditStep1 = ({ data, inputDeepHandler, setDestination, setStarting }) => {\n const { service, sex, relate, patient, contact, destination, starting, status } = data;\n\n const onTab = tab => {\n inputDeepHandler({ type: 'temp', deepType: 'service', value: tab });\n };\n\n const onSex = sex => {\n inputDeepHandler({ type: 'temp', deepType: 'sex', value: sex });\n };\n\n const onRelation = relate => {\n inputDeepHandler({ type: 'temp', deepType: 'relate', value: relate });\n };\n\n const destinationHandler = ev => {\n inputDeepHandler({ type: 'temp', deepType: 'destination', value: ev.target.value });\n };\n\n const startingHandler = ev => {\n inputDeepHandler({ type: 'temp', deepType: 'starting', value: ev.target.value });\n };\n\n const onNextStep = () => {\n const fix = [];\n if (!relate) fix.push('relate');\n if (!contact || !celluarValidate(contact)) fix.push('contact');\n if (!patient) fix.push('patient');\n if (!starting) fix.push('starting');\n if (service === 'unemergency' && !destination) fix.push('destination');\n\n if (!data.disabled) {\n inputDeepHandler({ type: 'temp', deepType: 'reserveHotFix', value: fix });\n if (fix.length > 0) return null;\n }\n\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 2 });\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 병원 동행 예약을\n <br className='mobile-exist' />\n 확인해주세요\n </H1>\n\n <DivisionLine small />\n\n <WithmateLabel required>서비스 선택</WithmateLabel>\n <TabContainer>\n <Tab\n active={data && data.service === 'unemergency'}\n onClick={() => {\n if (data && !data.disabled) onTab('unemergency');\n }}\n >\n Pro\n </Tab>\n <Tab\n active={data && data.service === 'assist'}\n onClick={() => {\n if (data && !data.disabled) onTab('assist');\n }}\n >\n Basic\n </Tab>\n </TabContainer>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel required>이용자 성함 / 성별</WithmateLabel>\n <WithmateLabel required>관계</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <RelativeWrapper>\n <WithmateInput\n disabled={data.disabled}\n type='text'\n placeholder='ex) 홍길동'\n value={(data && data.patient) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'patient', value: ev.target.value });\n }}\n />\n\n <SigleButtonWrapper>\n <SigleButton\n active={data && data.sex === '남'}\n onClick={() => {\n if (data && !data.disabled) onSex('남');\n }}\n >\n 남\n </SigleButton>\n <SigleButton\n active={data && data.sex === '녀'}\n onClick={() => {\n if (data && !data.disabled) onSex('녀');\n }}\n >\n 녀\n </SigleButton>\n </SigleButtonWrapper>\n </RelativeWrapper>\n <WithmateSelect placeholder='-' value={(data && data.relate) || undefined} onChange={onRelation}>\n <Select.Option value='본인'>본인</Select.Option>\n <Select.Option value='부모'>부모</Select.Option>\n <Select.Option value='자매'>자매</Select.Option>\n <Select.Option value='친구'>친구</Select.Option>\n <Select.Option value='지인'>지인</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n </FlexWrapper>\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'patient') && (\n <StyledHotFix>이용자 성함을 입력해주세요.</StyledHotFix>\n )}\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'relate') && (\n <StyledHotFix>환자와의 관계를 선택해주세요.</StyledHotFix>\n )}\n <DivisionLine small />\n\n <WithmateLabel required>연락처(휴대전화번호)</WithmateLabel>\n <WithmateInput\n type='text'\n disabled={data.disabled}\n placeholder='ex) 01029101234 (\"-\" 없이 입력해주세요)'\n value={(data && data.contact) || undefined}\n onChange={ev => {\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 11) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'contact', value: ev.target.value });\n }}\n />\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'contact') && (\n <StyledHotFix>올바른 휴대전화번호를 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine small />\n\n <WithmateLabel required>병원 위치</WithmateLabel>\n <WithamteInputWithButton\n buttonName='검색'\n inputConfig={{\n type: 'text',\n value: (data && data.destination) || undefined,\n placeholder: 'ex) 서울특별시 강남 을지병원',\n onChange: () => {},\n disabled: true,\n }}\n />\n\n <DivisionLine small />\n\n <WithmateLabel required={data && data.service === 'unemergency'}>자택 주소</WithmateLabel>\n <WithamteInputWithButton\n buttonName='검색'\n inputConfig={{\n type: 'text',\n value: (data && data.starting) || undefined,\n placeholder: 'ex) 서울특별시 강남 을지병원',\n onChange: () => {},\n disabled: true,\n }}\n />\n\n <DivisionLine />\n\n <FullWidthButton bg={Pallete.blue100} onClick={onNextStep}>\n 다음으로\n </FullWidthButton>\n </Container>\n );\n};\n\nexport const EditStep2 = ({ data, inputDeepHandler, onClose, onModify }) => {\n const { date, time, minute, sick, comment } = data;\n const onNextStep = () => {\n const fix = [];\n if (!date) fix.push('date');\n if (!sick) fix.push('sick');\n if (!comment) fix.push('comment');\n if (!time) fix.push('time');\n if (time && time >= 18) fix.push('overtime');\n if (!minute) fix.push('minute');\n\n if (!data.disabled) {\n inputDeepHandler({ type: 'temp', deepType: 'reserveHotFix', value: fix });\n if (fix.length > 0) return null;\n }\n\n // onModify();\n };\n\n const onCancelReserve = () => {};\n\n const onPrevStep = () => {\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 1 });\n };\n\n const onCalendar = value => {\n inputDeepHandler({ type: 'temp', deepType: 'date', value });\n };\n\n const sickHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'sick', value });\n };\n\n const commentHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'comment', value });\n };\n\n const getFee = () => {\n const _transport = data.transport && data.transport === 'own' ? 20000 : 0;\n const _service =\n data.productInfo &&\n data.service &&\n (data.service === 'unemergency' ? data.productInfo.proPrice : data.productInfo.basicPrice ? data.productInfo.basicPrice : 0) * data.usageTime;\n\n const _point = (data.usingPoint || 0) * -1;\n\n return _transport + _service + _point;\n };\n\n const addTimeSelector = value => {\n inputDeepHandler({ type: 'temp', deepType: 'addTime', value });\n };\n\n const transportHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'transport', value });\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 병원 동행 예약을\n <br className='mobile-exist' />\n 확인해주세요\n </H1>\n\n {data.meetDate && (\n <>\n <WithmateLabel required>{data.service === ASSIST ? '병원 도착 요청 일자' : '자택 도착 희망 일자'}</WithmateLabel>\n <ConfigProvider locale={locale}>\n <WithmateDatePicker\n inputReadOnly\n disabled={data.disabled}\n style={{ width: '100%', height: '36px' }}\n value={(data && data.meetDate) || undefined}\n placeholder='예약일자를 설정해주세요.'\n format='YYYY-MM-DD'\n onChange={onCalendar}\n disabledDate={current =>\n current < moment().add(0, 'day') ||\n current.get('day') === 0 ||\n current.get('day') === 6 ||\n holidayKR.isSolarHoliday(moment(current).toDate())\n }\n />\n </ConfigProvider>\n <DivisionLine />\n <WithmateLabel required>{data.service === ASSIST ? '병원 도착 요청 시간' : '자택 도착 희망 시간'}</WithmateLabel>\n <FlexWrapper withHalf>\n <WithmateInput\n disabled={data.disabled}\n type='text'\n placeholder='ex) 16'\n value={(data && data.meetTime) || undefined}\n style={{ marginRight: '4px' }}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 23) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'meetTime', value: ev.target.value });\n }}\n suffix='시'\n />\n <WithmateInput\n disabled={data.disabled}\n type='text'\n placeholder='ex) 30'\n value={(data && data.meetMinute) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 60) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'meetMinute', value: ev.target.value });\n }}\n suffix='분'\n />\n </FlexWrapper>\n <DivisionLine />\n </>\n )}\n\n <WithmateLabel required>예약일자</WithmateLabel>\n <ConfigProvider locale={locale}>\n <WithmateDatePicker\n inputReadOnly\n disabled={data.disabled}\n style={{ width: '100%', height: '36px' }}\n value={(data && data.date) || undefined}\n placeholder='예약일자를 설정해주세요.'\n format='YYYY-MM-DD'\n onChange={onCalendar}\n disabledDate={current =>\n current < moment().add(0, 'day') ||\n current.get('day') === 0 ||\n current.get('day') === 6 ||\n holidayKR.isSolarHoliday(moment(current).toDate())\n }\n />\n </ConfigProvider>\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'date') && (\n <StyledHotFix>예약일자를 선택해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n <WithmateLabel required>병원 진료 예약 시간</WithmateLabel>\n <FlexWrapper withHalf>\n <WithmateInput\n disabled={data.disabled}\n type='text'\n placeholder='ex) 16'\n value={(data && data.time) || undefined}\n style={{ marginRight: '4px' }}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 23) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'time', value: ev.target.value });\n }}\n suffix='시'\n />\n <WithmateInput\n disabled={data.disabled}\n type='text'\n placeholder='ex) 30'\n value={(data && data.minute) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 60) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'minute', value: ev.target.value });\n }}\n suffix='분'\n />\n </FlexWrapper>\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'time' || r === 'minute') && (\n <StyledHotFix>서비스 이용을 위한 예약 시간을 정확히 입력해주세요.</StyledHotFix>\n )}\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'overtime') && (\n <StyledHotFix>18시 이후의 서비스 예약은 불가능합니다.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>추가 요청 사항</WithmateLabel>\n <WithmateTextarea\n type='text'\n disabled={data.disabled}\n placeholder='병원 이름 및 상세 내용을 입력해주세요. 특히, 병원 이름을 반드시 기재해주세요 (ex. 서울대학교 병원)'\n value={(data && data.comment) || undefined}\n onChange={ev => {\n commentHandler(ev.target.value);\n }}\n />\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'comment') && (\n <StyledHotFix>병원 이름 및 상세내용을 입력해주세요.</StyledHotFix>\n )}\n\n {data && data.service === 'unemergency' && (\n <>\n <DivisionLine small />\n\n <WithmateLabel required>이동 수단 선택</WithmateLabel>\n <WithmateSelect\n disabled={data.disabled}\n value={(data && data.transport) || undefined}\n placeholder='서비스 이용간 이동 수단을 선택해주세요'\n onChange={transportHandler}\n >\n <Select.Option value='common'>대중교통 이용 (택시・버스 등)</Select.Option>\n <Select.Option value='own'>본인소유 자차 이용</Select.Option>\n {data.disabled && <Select.Option value='withcar'>위드메이트 차량 호출</Select.Option>}\n {data.transport && data.transport === 'own' && <AlertMessage>* 자차 이용시, 운전자 보험 변경 필수</AlertMessage>}\n </WithmateSelect>\n </>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required bg={Pallete.blue50}>\n 예상 소요 시간\n </WithmateLabel>\n <WithmateSelect\n disabled={data.disabled}\n value={(data && data.addTime) || undefined}\n placeholder='예상 소요시간을 선택해주세요'\n onChange={addTimeSelector}\n >\n <Select.Option value='60'>1시간</Select.Option>\n <Select.Option value='90'>1시간 30분</Select.Option>\n <Select.Option value='120'>2시간</Select.Option>\n <Select.Option value='150'>2시간 30분</Select.Option>\n <Select.Option value='180'>3시간</Select.Option>\n <Select.Option value='210'>3시간 30분</Select.Option>\n <Select.Option value='240'>4시간</Select.Option>\n <Select.Option value='270'>4시간 30분</Select.Option>\n <Select.Option value='300'>5시간</Select.Option>\n <Select.Option value='330'>5시간 30분</Select.Option>\n <Select.Option value='360'>6시간</Select.Option>\n <Select.Option value='390'>6시간 30분</Select.Option>\n <Select.Option value='420'>7시간</Select.Option>\n <Select.Option value='450'>7시간 30분</Select.Option>\n <Select.Option value='480'>8시간</Select.Option>\n </WithmateSelect>\n\n <DivisionLine />\n\n <WithmateLabel>총 예상 비용 (실제 비용과 다를 수 있습니다)</WithmateLabel>\n <WithmateValue>₩ {getFee()}</WithmateValue>\n <WithmateValueTip>(VAT 10% 포함된 가격입니다)</WithmateValueTip>\n\n <DivisionLine />\n\n {/* {data && !data.disabled && ( */}\n {data && (\n <>\n <FullWidthButton bg={Pallete.blue100} onClick={onNextStep}>\n 예약 변경\n </FullWidthButton>\n <BorderDivisionLine small />\n </>\n )}\n\n <FullWidthButton bg={Pallete.dark80} onClick={onClose}>\n 확인완료\n </FullWidthButton>\n </Container>\n );\n};\n\nexport const ContractEditStep_1 = ({ data, inputDeepHandler, setDestination, onDropoReserve }) => {\n const { service, sex, relate, patient, contact, destination, starting } = data;\n\n const onTab = tab => {\n inputDeepHandler({ type: 'temp', deepType: 'service', value: tab });\n };\n\n const onSex = sex => {\n inputDeepHandler({ type: 'temp', deepType: 'sex', value: sex });\n };\n\n const onRelation = relate => {\n inputDeepHandler({ type: 'temp', deepType: 'relate', value: relate });\n };\n\n const onNextStep = () => {\n const fix = [];\n if (!relate) fix.push('relate');\n if (!contact || !celluarValidate(contact)) fix.push('contact');\n if (!patient) fix.push('patient');\n if (!destination) fix.push('destination');\n\n inputDeepHandler({ type: 'temp', deepType: 'reserveHotFix', value: fix });\n if (fix.length > 0) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'step', value: 2 });\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 예약을\n <br className='mobile-exist' />\n 확인해주세요\n </H1>\n\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel required>이용자 성함 / 성별</WithmateLabel>\n <WithmateLabel required>관계</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <RelativeWrapper>\n <WithmateInput\n type='text'\n disabled\n placeholder='ex) 홍길동'\n value={(data && data.patient) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'patient', value: ev.target.value });\n }}\n />\n\n <SigleButtonWrapper>\n <SigleButton\n disabled\n active={data && data.sex === '남'}\n onClick={() => {\n onSex('남');\n }}\n >\n 남\n </SigleButton>\n <SigleButton\n disabled\n active={data && data.sex === '녀'}\n onClick={() => {\n onSex('녀');\n }}\n >\n 녀\n </SigleButton>\n </SigleButtonWrapper>\n </RelativeWrapper>\n <WithmateSelect disabled placeholder='-' value={(data && data.relate) || undefined} onChange={onRelation}>\n <Select.Option value='본인'>본인</Select.Option>\n <Select.Option value='부모'>부모</Select.Option>\n <Select.Option value='자매'>자매</Select.Option>\n <Select.Option value='친구'>친구</Select.Option>\n <Select.Option value='지인'>지인</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n </FlexWrapper>\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'patient') && (\n <StyledHotFix>이용자 성함을 입력해주세요.</StyledHotFix>\n )}\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'relate') && (\n <StyledHotFix>환자와의 관계를 선택해주세요.</StyledHotFix>\n )}\n <DivisionLine small />\n\n <WithmateLabel required>연락처(휴대전화번호)</WithmateLabel>\n <WithmateInput\n type='text'\n disabled\n placeholder='ex) 01029101234 (\"-\" 없이 입력해주세요)'\n value={(data && data.contact) || undefined}\n onChange={ev => {\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 11) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'contact', value: ev.target.value });\n }}\n />\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'contact') && (\n <StyledHotFix>올바른 휴대전화번호를 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine small />\n\n <WithmateLabel required>병원 위치</WithmateLabel>\n <WithamteInputWithButton\n buttonName='검색'\n inputConfig={{\n type: 'text',\n disabled: true,\n value: (data && data.starting) || undefined,\n }}\n />\n\n <DivisionLine small />\n\n <WithmateLabel required={data && data.service === 'unemergency'}>자택 주소 (고향시 내 주소지만 서비스 진행 가능)</WithmateLabel>\n <WithamteInputWithButton\n buttonName='검색'\n inputConfig={{\n type: 'text',\n disabled: true,\n value: (data && data.destination) || undefined,\n placeholder: 'ex) 경기 고양시 덕양구 고양시청로',\n }}\n />\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'starting') && (\n <StyledHotFix>귀가시 자택 주소를 입력해주세요.</StyledHotFix>\n )}\n\n {data && data.service === 'dropcare' && (\n <>\n <DivisionLine small />\n\n <FlexWrapper withHalf>\n <WithmateLabel required>거주 유형</WithmateLabel>\n <WithmateLabel required>주택 유형</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateSelect placeholder='-' disabled>\n <Select.Option value='아파트'>아파트</Select.Option>\n <Select.Option value='단독'>단독</Select.Option>\n <Select.Option value='다가구'>다가구</Select.Option>\n </WithmateSelect>\n <WithmateSelect placeholder='-' disabled>\n <Select.Option value='자가'>자가</Select.Option>\n <Select.Option value='전.월세'>전.월세</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n </FlexWrapper>\n\n <DivisionLine small />\n <FlexWrapper withHalf>\n <WithmateLabel required>장기 요양 등급</WithmateLabel>\n <WithmateLabel required>확정</WithmateLabel>\n </FlexWrapper>\n <FlexWrapper withHalf>\n <WithmateSelect placeholder='-' disabled>\n <Select.Option value='1등급'>1등급</Select.Option>\n <Select.Option value='2등급'>2등급</Select.Option>\n <Select.Option value='3등급'>3등급</Select.Option>\n <Select.Option value='4등급'>4등급</Select.Option>\n <Select.Option value='5등급'>5등급</Select.Option>\n </WithmateSelect>\n <WithmateSelect placeholder='-' disabled>\n <Select.Option value='해피케어'>해피케어</Select.Option>\n <Select.Option value='장기요양'>장기요양</Select.Option>\n <Select.Option value='렌탈'>렌탈</Select.Option>\n </WithmateSelect>\n </FlexWrapper>\n </>\n )}\n\n <DivisionLine />\n\n <FullWidthButton bg={Pallete.blue100} onClick={onNextStep}>\n 다음으로\n </FullWidthButton>\n </Container>\n );\n};\n\nexport const ContractEditStep_2 = ({ data, inputDeepHandler, onClose }) => {\n const onCalendar = value => {\n inputDeepHandler({ type: 'temp', deepType: 'date', value });\n };\n\n const sickHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'sick', value });\n };\n\n const commentHandler = value => {\n inputDeepHandler({ type: 'temp', deepType: 'comment', value });\n };\n\n const getFee = () => {\n const _transport = data.transport && data.transport === 'own' ? 20000 : 0;\n const _service =\n data.productInfo &&\n data.service &&\n (data.service === 'unemergency' ? data.productInfo.proPrice : data.productInfo.basicPrice ? data.productInfo.basicPrice : 0) * data.usageTime;\n\n const _point = (data.usingPoint || 0) * -1;\n\n return _transport + _service + _point;\n };\n\n return (\n <Container>\n <H1 bold style={{ color: Pallete.dark80 }}>\n 예약을\n <br className='mobile-exist' />\n 확인해주세요\n </H1>\n\n <WithmateLabel required>예약일자</WithmateLabel>\n <ConfigProvider locale={locale}>\n <WithmateDatePicker\n inputReadOnly\n disabled\n style={{ width: '100%', height: '36px' }}\n value={(data && data.date) || undefined}\n placeholder='예약일자를 설정해주세요.'\n format='YYYY-MM-DD'\n onChange={onCalendar}\n disabledDate={current =>\n current < moment().add(0, 'day') ||\n current.get('day') === 0 ||\n current.get('day') === 6 ||\n holidayKR.isSolarHoliday(moment(current).toDate())\n }\n />\n </ConfigProvider>\n\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'date') && (\n <StyledHotFix>예약일자를 선택해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>예약 시간</WithmateLabel>\n <FlexWrapper withHalf>\n <WithmateInput\n type='text'\n disabled\n placeholder='ex) 16'\n value={(data && data.time) || undefined}\n style={{ marginRight: '4px' }}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 23) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'time', value: ev.target.value });\n }}\n suffix='시'\n />\n <WithmateInput\n type='text'\n disabled\n placeholder='ex) 30'\n value={(data && data.minute) || undefined}\n onChange={ev => {\n if (ev.target.value && ev.target.value.length > 10) return null;\n const numValue = parseFloat(ev.target.value);\n if (typeof numValue !== 'number') return null;\n if (ev.nativeEvent.data && isNotNumber(ev.nativeEvent.data)) {\n ev.preventDefault();\n return null;\n }\n if (ev.target.value.length > 2 || numValue > 60) return null;\n\n inputDeepHandler({ type: 'temp', deepType: 'minute', value: ev.target.value });\n }}\n suffix='분'\n />\n </FlexWrapper>\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'time' || r === 'minute') && (\n <StyledHotFix>서비스 이용을 위한 예약 시간을 정확히 입력해주세요.</StyledHotFix>\n )}\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'overtime') && (\n <StyledHotFix>18시 이후의 서비스 예약은 불가능합니다.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>추가 요청 사항</WithmateLabel>\n <WithmateTextarea\n type='text'\n disabled\n placeholder={`서비스 진행자에게 추가적으로 요청할 사항을 적어주세요.\n ex) 이동 간 낙상 방지에 각별히 신경써주세요.`}\n value={(data && data.comment) || undefined}\n onChange={ev => {\n commentHandler(ev.target.value);\n }}\n />\n {data && data.reserveHotFix && data.reserveHotFix.length > 0 && data.reserveHotFix.some(r => r === 'comment') && (\n <StyledHotFix>추가 요청 사항을 입력해주세요.</StyledHotFix>\n )}\n\n <DivisionLine />\n\n <WithmateLabel required>이동 수단 선택</WithmateLabel>\n <WithmateValue>\n {data.transport === 'own'\n ? '본인소유 자차 이용'\n : data.transport === 'common'\n ? '대중교통 이용 (택시・버스 등)'\n : data.transport === 'withcar'\n ? '위드메이트 차량 호출'\n : '-'}\n </WithmateValue>\n\n <DivisionLine />\n\n <WithmateLabel required bg={Pallete.blue50}>\n 예상 소요 시간\n </WithmateLabel>\n <WithmateValue>{parseInt(data.addTime || 0, 10) / 60} 시간</WithmateValue>\n\n <DivisionLine />\n\n <WithmateLabel>총 예상비용</WithmateLabel>\n <WithmateValue>₩ {getFee()}</WithmateValue>\n <WithmateValueTip>(VAT 10% 포함된 가격입니다)</WithmateValueTip>\n\n <DivisionLine />\n\n <FullWidthButton bg={Pallete.dark80} onClick={onClose}>\n 확인완료\n </FullWidthButton>\n </Container>\n );\n};\nconst RelativeWrapper = styled.div`\n position: relative;\n\n > input {\n width: 100% !important;\n }\n`;\n\nconst SigleButtonWrapper = styled.div`\n position: absolute;\n top: 1px;\n right: 1px;\n`;\n\nconst SigleButton = styled.span`\n display: inline-block;\n width: 43px;\n height: 100%;\n line-height: 43px;\n // border-radius: 4px;\n\n cursor: ${props => (props.disabled ? 'not-allowed' : 'pointer')};\n font-size: 11px;\n color: ${props => (props.active ? '#ffffff' : Pallete.dark60)};\n text-align: center;\n\n background-color: ${props => (props.active ? Pallete.blue50 : '#ffffff')};\n`;\n\nconst AlertMessage = styled.p`\n margin-bottom: 0px;\n margin-top: 4px;\n\n font-size: 11px;\n color: #565656;\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport Modal from 'react-modal';\nimport { Timeline } from 'antd';\nimport moment from 'moment';\n\n// components\nimport { TabContainer, Tab } from '../Components/Common/tab';\nimport { FullWidthButton, HalfWidthButton, ButtonWrapper } from '../Components/Common/button';\nimport {\n DivisionLine,\n WithmateLabel,\n WithmateInput,\n HalfWithmateInput,\n WithmateTextarea,\n WithmateSelect,\n FlexWrapper,\n FlexDiv,\n HalfWithmateSelect,\n} from '../Components/Common/input';\n\nimport { Step1, Step2, Step3, ContractdStep_1, ContractStep_2, ContractStep_3 } from './Reserve/step';\nimport { EditStep1, EditStep2, ContractEditStep_1, ContractEditStep_2 } from './Reserve/editStep';\nimport ColorPallete from '../theme';\n\nconst customStyles = {\n overlay: {\n display: 'flex',\n\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n alignItems: 'center',\n justifyContent: 'center',\n\n zIndex: '99999999999999 !important',\n },\n content: {\n width: '100%',\n height: '100%',\n boxShadow: 'initial',\n border: '0px',\n top: '0px',\n left: '0px',\n right: '0px',\n bottom: '0px',\n backgroundColor: 'transparent',\n padding: '0px',\n\n display: 'flex',\n alignItems: 'center',\n },\n};\n\nclass CustomModal extends React.PureComponent {\n state = {};\n\n componentDidMount = () => {\n window.addEventListener('resize', this.onCheckSize, false);\n if (this.props.visible) {\n document.body.style.overflow = 'hidden';\n }\n };\n\n componentWillUnmount = () => {\n window.removeEventListener('resize', this.onCheckSize, false);\n document.body.style.overflow = 'unset';\n };\n\n onCheckSize = () => {\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const innerContent = document.getElementById(this.props.childrenId);\n\n if (windowWidth <= 480) {\n let top = innerContent.clientHeight / windowHeight >= 0.8 ? '100px' : 'initial';\n let bottom = innerContent.clientHeight / windowHeight >= 0.8 ? 'initial' : '0px';\n\n if (this.props.childrenId && this.props.childrenId.includes('full-header')) {\n top = '0px';\n bottom = '0px';\n }\n\n innerContent.style.maxWidth = '424px';\n innerContent.style.top = top;\n innerContent.style.bottom = bottom;\n\n this.setState({\n top,\n bottom,\n });\n } else {\n innerContent.style.maxWidth = this.props.childrenId && this.props.childrenId.includes('wide') ? '720px' : '424px';\n innerContent.style.top = windowHeight * 0.15 + 'px';\n innerContent.style.marginBottom = windowHeight * 0.15 + 'px';\n }\n };\n\n render() {\n return (\n <Modal style={{ ...customStyles }} isOpen={this.props.visible} onAfterOpen={this.onCheckSize}>\n {this.props.children}\n </Modal>\n );\n }\n}\n\nexport const CommonWithmateModal = ({ visible, config = {}, onCancel, onOk }) => {\n return (\n <CustomModal visible={visible} childrenId='common-withmate-modal'>\n <ModalInnerContainer id='common-withmate-modal'>\n {!config.noClose && <CloseButton src={'/assets/images/close.png'} onClick={onCancel} />}\n\n <TitleSection style={{ textAlign: 'center' }}>\n <CommonModalTitle style={{ textAlign: 'center' }}>{config && config.title ? config.title : ''}</CommonModalTitle>\n <CommonModalSubtitle style={{ marginTop: 0, wordBreak: 'keep-all' }}>\n {config && config.description ? config.description : ''}\n </CommonModalSubtitle>\n </TitleSection>\n\n <ContentSection style={{ textAlign: 'center' }}>\n {/* contents */}\n {config && config.content ? config.content : null}\n <ButtonWrapper half={config && config.cancelText && onCancel && typeof onCancel === 'function'}>\n {/* cancel */}\n {config && config.cancelText && onCancel && typeof onCancel === 'function' ? (\n <FullWidthButton bg={ColorPallete.dark70} onClick={onCancel}>\n {config && config.cancelText ? config.cancelText : '취소'}\n </FullWidthButton>\n ) : null}\n {/* confirm */}\n <FullWidthButton bg={ColorPallete.blue50} small onClick={onOk && typeof onOk === 'function' ? onOk : onCancel}>\n {config && config.confirmText ? config.confirmText : '확인 및 저장'}\n </FullWidthButton>\n </ButtonWrapper>\n </ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\n\nexport const SampleModal = ({ visible, visibleHandler, inputHandler, inputDeepHandler, data, onSave }) => {\n return (\n <CustomModal visible={visible} childrenId='sample-new-modal'>\n <ModalInnerContainer id='sample-new-modal'>\n <CloseButton src={'/assets/images/close.png'} onClick={visibleHandler} />\n <TitleSection>\n <CommonModalTitle></CommonModalTitle>\n </TitleSection>\n\n <ContentSection></ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\n\nexport const NoramlReserveModal = ({ visible, visibleHandler, inputHandler, inputDeepHandler, data, setDestination, setStarting, onSave }) => {\n const { step = 1 } = data;\n\n return (\n <CustomModal visible={visible} childrenId='normal-reserve-modal'>\n <ModalInnerContainer id='normal-reserve-modal'>\n <CloseButton src={'/assets/images/close.png'} onClick={visibleHandler} />\n\n <ContentSection>\n {step === 1 && <Step1 data={data} inputDeepHandler={inputDeepHandler} setDestination={setDestination} setStarting={setStarting} />}\n\n {step === 2 && <Step2 data={data} inputDeepHandler={inputDeepHandler} />}\n\n {step === 3 ? <Step3 data={data} inputDeepHandler={inputDeepHandler} onReserve={onSave} /> : null}\n </ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\n\nexport const HappyReserveModal = ({ visible, visibleHandler, inputHandler, inputDeepHandler, data, setDestination, setStarting, onSave, onDropSave }) => {\n const { step = 1 } = data;\n\n return (\n <CustomModal visible={visible} childrenId='normal-reserve-modal'>\n <ModalInnerContainer id='normal-reserve-modal'>\n <CloseButton src={'/assets/images/close.png'} onClick={visibleHandler} />\n\n <ContentSection>\n {step === 1 && (\n <ContractdStep_1\n data={data}\n inputDeepHandler={inputDeepHandler}\n setDestination={setDestination}\n setStarting={setStarting}\n onDropoReserve={onDropSave}\n />\n )}\n\n {step === 2 && <ContractStep_2 data={data} inputDeepHandler={inputDeepHandler} />}\n\n {step === 3 ? <ContractStep_3 data={data} inputDeepHandler={inputDeepHandler} onReserve={onSave} /> : null}\n </ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\n\nexport const NoramlReserveEditModal = ({ visible, visibleHandler, data, inputDeepHandler, onModify }) => {\n const { step = 1 } = data;\n return (\n <CustomModal visible={visible} childrenId='normal-edit-reserve-modal'>\n <ModalInnerContainer id='normal-edit-reserve-modal'>\n <CloseButton src={'/assets/images/close.png'} onClick={visibleHandler} />\n <ContentSection>\n {step === 1 && <EditStep1 data={data} inputDeepHandler={inputDeepHandler} />}\n\n {step === 2 && <EditStep2 data={data} inputDeepHandler={inputDeepHandler} onModify={onModify} onClose={visibleHandler} />}\n </ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\n\nexport const HappyReserveEditModal = ({ visible, visibleHandler, data, inputDeepHandler, onModify }) => {\n const { step = 1 } = data;\n return (\n <CustomModal visible={visible} childrenId='normal-edit-reserve-modal'>\n <ModalInnerContainer id='normal-edit-reserve-modal'>\n <CloseButton src={'/assets/images/close.png'} onClick={visibleHandler} />\n <ContentSection>\n {step === 1 && <ContractEditStep_1 data={data} inputDeepHandler={inputDeepHandler} />}\n\n {step === 2 && <ContractEditStep_2 data={data} inputDeepHandler={inputDeepHandler} onClose={visibleHandler} />}\n </ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\n\nexport const NewHandleReportModal = ({ visible, visibleHandler, data, inputHandler, onSave }) => {\n return (\n <CustomModal visible={visible} childrenId='wide-edit-report-modal'>\n <ModalInnerContainer id='wide-edit-report-modal'>\n <CloseButton src={'/assets/images/close.png'} onClick={visibleHandler} />\n <TitleSection>\n <WideModalTitle>서비스 리포트 작성</WideModalTitle>\n <AlertText>\n *서비스 리포트를 작성하지 않을 경우 서비스 종료로 인정되지 않습니다.\n <br />\n 환자와 헤어진 후 1시간 내에 꼭 리포트를 작성해주세요. 리포트 작성 완료 후 정산이 진행됩니다*\n </AlertText>\n </TitleSection>\n <ContentSection>\n <DivisionLine />\n\n <WithmateLabel required>서비스 진행 중 특이사항</WithmateLabel>\n <WithmateTextarea\n small\n placeholder='ex) 금일 이동 중 차가 많이 막혀 서비스 시간이 늘어났습니다.\n 금일 진료와는 상관없이 환자분의 잔기침이 많았습니다.\n 금일 내시경 검사가 밀려 예약된 시간보다 늦게 진료가 시작되었습니다.'\n value={data.description || null}\n onChange={ev => {\n inputHandler({ type: 'description', value: ev.target.value });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel required>진료 및 치료 내용</WithmateLabel>\n <WithmateTextarea\n small\n placeholder='ex) 환자분의 증상은 점차 호전되고 있으며, 다음 진료 간 최종 완치 유무를 결정한다고 합니다. \n 또, 따로 물어보셨던 안마의자 사용은 삼가라는 답변을 들었습니다.'\n value={data.care || null}\n onChange={ev => {\n inputHandler({ type: 'care', value: ev.target.value });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel>복약지도 사항</WithmateLabel>\n <WithmateTextarea\n small\n placeholder='ex) (약이름) : 1일 3회 식 후 복용, 해당 약 복용 중 매운 음식 자제'\n value={data.medicine || null}\n onChange={ev => {\n inputHandler({ type: 'medicine', value: ev.target.value });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel>다음 진료 일정 정리</WithmateLabel>\n <WithmateTextarea\n small\n placeholder='ex) 다음 진료일 > 서울대병원 2021년 6월 15일 (화) 14시 20분 / CT 촬영 및 혈액 검사 예정'\n value={data.nextSchedule || null}\n onChange={ev => {\n inputHandler({ type: 'nextSchedule', value: ev.target.value });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel>메이트 전달 사항</WithmateLabel>\n <WithmateTextarea\n small\n placeholder='ex) 오늘 병원 동행 서비스를 진행하며 어머님이 참 밝고 용감한 분이라는 생각이 많이 들었습니다. \n 시종일관 웃음으로 저를 대해주셨고, 치료와 진료 또한 긍정적인 마음으로 받으셨습니다. \n 어머님의 건강을 기원하며, 오늘 서비스를 마무리하겠습니다. 감사합니다.'\n value={data.mateComment || null}\n onChange={ev => {\n inputHandler({ type: 'mateComment', value: ev.target.value });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel required>의료 기관 및 의사 평가</WithmateLabel>\n <WithmateTextarea\n small\n placeholder='ex) 서비스에 만족했습니다. \n 의사 성함 : 만족스러웠던 이유'\n value={data.doctorComment || null}\n onChange={ev => {\n inputHandler({ type: 'doctorComment', value: ev.target.value });\n }}\n />\n\n <DivisionLine big />\n\n <ButtonWrapper>\n <HalfWidthButton style={{ marginRight: '8px', color: '#afb0b2' }} bg='#e6e6e6' onClick={visibleHandler}>\n 닫기\n </HalfWidthButton>\n <HalfWidthButton bg='#3bc1ff' onClick={onSave}>\n 리포트 등록하기\n </HalfWidthButton>\n </ButtonWrapper>\n </ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\n\nexport const NoReportModal = ({ visible, visibleHandler, onNext }) => {\n return (\n <CustomModal visible={visible} childrenId='viewer-report-modal'>\n <ModalInnerContainer id='viewer-report-modal'>\n <CloseButton src={'/assets/images/close.png'} onClick={visibleHandler} />\n <TitleSection>\n <WideModalTitle>서비스 리포트 미완료 예약 알림</WideModalTitle>\n </TitleSection>\n <ContentSection>\n <DivisionLine big />\n\n <p>서비스 리포트 작성을 완료하지않은 수행 이력이 있습니다. </p>\n <p>서비스 리포트 등록을 완료하고 서비스 수행 대금을 수령해보세요.</p>\n\n <DivisionLine big />\n\n <ButtonWrapper>\n <HalfWidthButton style={{ margin: '0 auto' }} bg='#3bc1ff' onClick={visibleHandler}>\n 리포트 작성하러 가기\n </HalfWidthButton>\n </ButtonWrapper>\n </ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\nexport const ReportMoal = ({ visible, visibleHandler, data }) => {\n const { report, timeline, selectedServiceName } = data;\n\n return (\n <CustomModal visible={visible} childrenId='wide-viewer-report-modal'>\n <ModalInnerContainer id='wide-viewer-report-modal'>\n <CloseButton src={'/assets/images/close.png'} onClick={visibleHandler} />\n <TitleSection>\n <WideModalTitle>서비스 리포트</WideModalTitle>\n </TitleSection>\n <ContentSection>\n <DivisionLine big />\n\n <ReportInfoBlock style={{ border: '0px' }}>\n <p className='title'>{moment(report.createdAt).format('YYYY년 MM월 DD일')}</p>\n <ReportDescription>\n 금일 {selectedServiceName} 서비스는\n <span style={{ color: '#3bc1ff', fontWeight: 'bold' }}>\n 총 {moment(timeline.complete.time).diff(timeline.receipt.time, 'minutes')}분\n </span>\n 동안 진행됐습니다.\n </ReportDescription>\n </ReportInfoBlock>\n\n <Timeline mode={'left'}>\n {timeline && timeline.receipt && timeline.receipt.time && (\n <Timeline.Item label={moment(timeline.receipt.time).format('HH:mm').toString()}>고객님과 메이트가 만났습니다.</Timeline.Item>\n )}\n {timeline && timeline.start && timeline.start.time && (\n <Timeline.Item label={moment(timeline.start.time).format('HH:mm').toString()}>병원으로 출발했습니다.</Timeline.Item>\n )}\n {timeline && timeline.arrived && timeline.arrived.time && (\n <Timeline.Item label={moment(timeline.arrived.time).format('HH:mm').toString()}>병원에 도착했습니다.</Timeline.Item>\n )}\n {timeline && timeline.careStart && timeline.careStart.time && (\n <Timeline.Item label={moment(timeline.careStart.time).format('HH:mm').toString()}>진료를 시작했습니다.</Timeline.Item>\n )}\n {timeline && timeline.careDone && timeline.careDone.time && (\n <Timeline.Item label={moment(timeline.careDone.time).format('HH:mm').toString()}>\n 진료가 종료됐습니다. {moment(timeline.careDone.time).diff(moment(timeline.careStart.time).toDate(), 'minutes')}분 동안\n 진료했습니다.\n </Timeline.Item>\n )}\n\n {timeline && timeline.treatmentStart && timeline.treatmentStart.time && (\n <Timeline.Item label={moment(timeline.treatmentStart.time).format('HH:mm').toString()}>치료를 시작했습니다.</Timeline.Item>\n )}\n {timeline && timeline.treatmentDone && timeline.treatmentDone.time && (\n <Timeline.Item label={moment(timeline.treatmentDone.time).format('HH:mm').toString()}>\n 치료가 종료됐습니다. {moment(timeline.treatmentDone.time).diff(moment(timeline.treatmentStart.time).toDate(), 'minutes')}분 동안\n 치료했습니다.\n </Timeline.Item>\n )}\n\n {/* 진료 시작/종료(두 번째) */}\n {timeline && timeline.careStart_second && timeline.careStart_second.time && (\n <Timeline.Item label={moment(timeline.careStart_second.time).format('HH:mm').toString()}>\n 진료(두 번째)를 시작했습니다.\n </Timeline.Item>\n )}\n {timeline && timeline.careDone_second && timeline.careDone_second.time && (\n <Timeline.Item label={moment(timeline.careDone_second.time).format('HH:mm').toString()}>\n 진료(두 번째)가 종료됐습니다.{' '}\n {moment(timeline.careDone_second.time).diff(moment(timeline.careStart_second.time).toDate(), 'minutes')}분 동안 진료했습니다.\n </Timeline.Item>\n )}\n {/* 치료 시작/종료(두 번째) */}\n {timeline && timeline.treatmentStart_second && timeline.treatmentStart_second.time && (\n <Timeline.Item label={moment(timeline.treatmentStart_second.time).format('HH:mm').toString()}>\n 치료(두 번째)를 시작했습니다.\n </Timeline.Item>\n )}\n {timeline && timeline.treatmentDone_second && timeline.treatmentDone_second.time && (\n <Timeline.Item label={moment(timeline.treatmentDone_second.time).format('HH:mm').toString()}>\n 치료(두 번째)가 종료됐습니다.{' '}\n {moment(timeline.treatmentDone_second.time).diff(moment(timeline.treatmentStart_second.time).toDate(), 'minutes')}분 동안\n 치료했습니다.\n </Timeline.Item>\n )}\n\n {/* 진료 시작/종료(세 번째) */}\n {timeline && timeline.careStart_third && timeline.careStart_third.time && (\n <Timeline.Item label={moment(timeline.careStart_third.time).format('HH:mm').toString()}>\n 진료(세 번째)를 시작했습니다.\n </Timeline.Item>\n )}\n {timeline && timeline.careDone_third && timeline.careDone_third.time && (\n <Timeline.Item label={moment(timeline.careDone_third.time).format('HH:mm').toString()}>\n 진료(세 번째)가 종료됐습니다.{' '}\n {moment(timeline.careDone_third.time).diff(moment(timeline.careStart_third.time).toDate(), 'minutes')}분 동안 진료했습니다.\n </Timeline.Item>\n )}\n {/* 치료 시작/종료(세 번째) */}\n {timeline && timeline.treatmentStart_third && timeline.treatmentStart_third.time && (\n <Timeline.Item label={moment(timeline.treatmentStart_third.time).format('HH:mm').toString()}>\n 치료(세 번째)를 시작했습니다.\n </Timeline.Item>\n )}\n {timeline && timeline.treatmentDone_third && timeline.treatmentDone_third.time && (\n <Timeline.Item label={moment(timeline.treatmentDone_third.time).format('HH:mm').toString()}>\n 치료(세 번째)가 종료됐습니다.{' '}\n {moment(timeline.treatmentDone_third.time).diff(moment(timeline.treatmentStart_third.time).toDate(), 'minutes')}분 동안\n 치료했습니다.\n </Timeline.Item>\n )}\n\n {timeline && timeline.backStart && timeline.backStart.time && (\n <Timeline.Item label={moment(timeline.backStart.time).format('HH:mm').toString()}>귀가를 시작했습니다.</Timeline.Item>\n )}\n {timeline && timeline.complete && timeline.complete.time && (\n <Timeline.Item label={moment(timeline.complete.time).format('HH:mm').toString()}>\n 귀가 완료하였으며, 서비스가 종료됐습니다.\n </Timeline.Item>\n )}\n </Timeline>\n {report.description && (\n <>\n <ReportInfoBlock>\n <p className='title'>서비스 진행 중 특이사항</p>\n <ReportDescription>\n {(report.description &&\n report.description.split('\\n').map((word, index) => (\n <span key={'report-desc-word' + index.toString()}>\n {word}\n <br />\n </span>\n ))) ||\n '-'}\n </ReportDescription>\n </ReportInfoBlock>\n\n <DivisionLine small />\n </>\n )}\n\n {report.care && (\n <>\n <ReportInfoBlock>\n <p className='title'>진료 및 치료 내용</p>\n <ReportDescription>\n {(report.care &&\n report.care.split('\\n').map((word, index) => (\n <span key={'report-care-word' + index.toString()}>\n {word}\n <br />\n </span>\n ))) ||\n '-'}\n </ReportDescription>\n </ReportInfoBlock>\n <DivisionLine small />\n </>\n )}\n\n {report.medicine && (\n <>\n <ReportInfoBlock>\n <p className='title'>복약지도 내용</p>\n <ReportDescription>\n {(report.medicine &&\n report.medicine.split('\\n').map((word, index) => (\n <span key={'report-medicine-word' + index.toString()}>\n {word}\n <br />\n </span>\n ))) ||\n '-'}\n </ReportDescription>\n </ReportInfoBlock>\n\n <DivisionLine small />\n </>\n )}\n {report.nextSchedule && (\n <>\n <ReportInfoBlock>\n <p className='title'>다음 진료 일정 정리</p>\n <ReportDescription>\n {(report.nextSchedule &&\n report.nextSchedule.split('\\n').map((word, index) => (\n <span key={'report-nextSchedule-word' + index.toString()}>\n {word}\n <br />\n </span>\n ))) ||\n '-'}\n </ReportDescription>\n </ReportInfoBlock>\n\n <DivisionLine small />\n </>\n )}\n {report.mateComment && (\n <>\n <ReportInfoBlock>\n <p className='title'>메이트 전달 사항</p>\n <ReportDescription>\n {(report.mateComment &&\n report.mateComment.split('\\n').map((word, index) => (\n <span key={'report-mateComment-word' + index.toString()}>\n {word}\n <br />\n </span>\n ))) ||\n '-'}\n </ReportDescription>\n </ReportInfoBlock>\n\n <DivisionLine small />\n </>\n )}\n\n {selectedServiceName.includes('은평 성모병원') && (\n <>\n <ReportInfoBlock>\n <p className='title'>가톨릭대학교 은평성모병원 안내 말</p>\n <ReportDescription>\n {(report.mateComment &&\n report.mateComment.split('\\n').map((word, index) => (\n <span key={'report-mateComment-word' + index.toString()}>\n 가톨릭대학교 은평성모병원을 이용해 주셔서 감사드립니다. <br />\n 최고의 환자경험이 되도록 항상 최선을 다하겠습니다.\n <br />\n </span>\n ))) ||\n '-'}\n </ReportDescription>\n </ReportInfoBlock>\n\n <DivisionLine small />\n </>\n )}\n\n <ButtonWrapper>\n <HalfWidthButton style={{ margin: '0 auto' }} bg='#3bc1ff' onClick={visibleHandler}>\n 닫기\n </HalfWidthButton>\n </ButtonWrapper>\n </ContentSection>\n </ModalInnerContainer>\n </CustomModal>\n );\n};\n\nconst ModalInnerContainer = styled.div`\n position: absolute;\n left: 0px;\n right: 0px;\n\n box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);\n border: 1px solid #e6e6e6;\n background-color: #ffffff;\n border-radius: 8px;\n\n width: 100%;\n max-width: 424px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none;\n }\n\n margin: 0 auto;\n height: auto;\n padding: 24px;\n\n ${props =>\n props.onlyMobile\n ? `\n display: none;\n `\n : ''}\n @media (max-width: 480px) {\n border-bottom-left-radius: 0px;\n border-bottom-right-radius: 0px;\n bottom: 0px;\n padding: 16px;\n\n ${props =>\n props.onlyMobile\n ? `\n display: flex;\n border-radius: 0px;\n padding: 0px;\n `\n : ''}\n }\n`;\n\nconst TitleSection = styled.div``;\n\nconst HeaderTitleSection = styled.div`\n height: 44px;\n line-height: 44px;\n font-size: 15px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: -0.45px;\n text-align: center;\n color: #161616;\n border-bottom: 1px solid #e9e9e9;\n > span.mobile-only {\n font-size: 15px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: -0.45px;\n text-align: center;\n color: #161616;\n }\n position: relative;\n > img {\n position: absolute;\n top: 6px;\n left: 10px;\n width: 32px;\n height: 32px;\n object-fit: contain;\n cursor: pointer;\n }\n > img.close {\n left: unset;\n right: 10px;\n }\n @media (min-width: 480px) {\n height: unset;\n line-height: unset;\n border-bottom: 0px;\n > span.mobile-only {\n display: none;\n }\n > img.mobile-only {\n display: none;\n }\n }\n`;\n\nconst ContentSection = styled.div`\n flex: 1;\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none;\n }\n`;\n\nconst MobileContentSection = styled(ContentSection)`\n padding: 16px;\n @media (min-width: 480px) {\n padding: 0px;\n }\n`;\n\nconst CloseButton = styled.img`\n position: absolute;\n top: 16px;\n right: 24px;\n\n width: 18px;\n height: 18px;\n\n object-fit: cover;\n cursor: pointer;\n\n @media (max-width: 480px) {\n width: 16px;\n height: 16px;\n\n &.desktop-only {\n display: none;\n }\n }\n`;\n\nconst WideModalTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n`;\n\nconst AlertText = styled.div`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.52;\n letter-spacing: -0.3px;\n text-align: left;\n color: #ff5500;\n`;\nconst CommonModalTitle = styled.p`\n font-size: 28px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n text-align: left;\n color: #161616;\n\n margin-bottom: ${props => (props.withSub ? '8px' : '16px')};\n`;\n\nconst CommonModalSubtitle = styled.p`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.43;\n letter-spacing: -0.7px;\n text-align: center;\n color: #565656;\n\n margin-bottom: 40px;\n\n @media (max-width: 480px) {\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.46;\n letter-spacing: -0.65px;\n text-align: center;\n margin-bottom: 32px;\n }\n`;\n\nconst CommonModalDescription = styled.p`\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n text-align: center;\n color: #a6a6a6;\n margin-top: -32px;\n margin-bottom: 40px;\n\n @media (max-width: 480px) {\n font-size: 11px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.55;\n letter-spacing: -0.55px;\n text-align: center;\n }\n`;\n\nconst ReportInfoBlock = styled.div`\n padding-bottom: 24px;\n border-bottom: 1px solid #e9e9e9;\n\n > p.title {\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.43;\n letter-spacing: normal;\n text-align: left;\n color: #afb0b2;\n margin-bottom: 8px;\n }\n`;\n\nconst ReportDescription = styled.div`\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n }\n`;\n","import React, { Component } from 'react';\nimport Styled from 'styled-components';\nimport { withRouter } from 'react-router-dom';\nimport KakaoLoginImg from './o2.png';\nimport KakaoLoginImgM from './o.png';\nimport { KAKAO, USER } from '../../../../Lib/variables';\nimport { notification } from 'antd';\n\nconst { Kakao } = window;\n\nclass KakaoLogin extends Component {\n onEdit = ({ type, value }) => {\n this.props.editRegisterForm({ type, value });\n };\n\n checkUser = async ({ email }) => {\n const { userType, type } = this.props.auth.registerForm;\n const resolve = await this.props.checkUserId({ id: email, userType: USER, type: KAKAO });\n console.log(resolve);\n return resolve;\n };\n\n register = async ({ email, gender }) => {\n const { photo, contact, marketing, connection, birth, message, userType, type, name } = this.props.auth.registerForm;\n this.onEdit({ type: 'type', value: KAKAO });\n this.onEdit({ type: 'email', value: email });\n this.onEdit({ type: 'sex', value: gender === 'male' ? '남' : '녀' });\n this.props.history.push('/user/register');\n // const resolve = await this.props.register({ id: email, userType: USER, name, type: KAKAO, photo, contact, marketing, connection, birth, sex: gender });\n // if (resolve && resolve.message === 'success') {\n // }\n\n // if (resolve === 'check parameters') {\n // notification.open({\n // message: '회원가입에 실패하였습니다.',\n // description: '누락된 정보가 없는지 확인해주세요.',\n // type: 'success',\n // });\n // }\n };\n\n login = async ({ email }) => {\n const { userType, type } = this.props.auth.registerForm;\n const resolve = await this.props.login({ id: email, userType: USER, type: KAKAO });\n if (resolve === 'not exist') {\n return this.setState({\n modal: true,\n modalTitle: '이메일 로그인',\n modalInfo: '존재하지 않는 사용자의 아이디입니다. 아이디를 확인해주세요.',\n });\n }\n\n if (resolve === 'not allowed') {\n return this.setState({\n modal: true,\n modalTitle: '이메일 로그인',\n modalInfo: '관리자로부터의 가입 승인을 대기중입니다. ',\n });\n }\n\n if (resolve === 'wrong password') {\n return this.setState({\n modal: true,\n modalTitle: '이메일 로그인',\n modalInfo: '잘못된 비밀번호입니다. 확인 후 다시 시도해주세요. ',\n });\n }\n };\n\n loginWithKakao = () => {\n // scope : 수집할 사용자 정보 명시(동의항목)\n const scope = 'profile_nickname, gender, account_email';\n\n const that = this;\n // const { photo, contact, marketing, connection, birth, message } = this.props.auth.registerForm;\n\n Kakao.Auth.login({\n scope,\n // success는 인증 정보를 응답(response) 받는다.\n success: function (response) {\n //카카오 SDK에 사용자 토큰을 설정한다.\n window.Kakao.Auth.setAccessToken(response.access_token);\n // console.log(`AccessToken 정보 : ${window.Kakao.Auth.getAccessToken()}`);\n\n window.Kakao.API.request({\n url: '/v2/user/me',\n success: async function ({ kakao_account }) {\n //어떤 정보 넘어오는지 확인\n // console.log(kakao_account);\n const { email, gender } = kakao_account;\n\n // console.log(email)\n const resolve = await that.checkUser({ email });\n console.log(resolve);\n if (resolve === true) {\n that.login({ email });\n } else {\n that.register({ email, gender });\n }\n },\n fail: function (error) {\n console.log(error);\n },\n });\n },\n fail: function (error) {\n console.log(error);\n },\n });\n };\n render() {\n const { location } = this.props.history;\n\n let viewToShow;\n if (location.pathname.includes('/login')) {\n viewToShow = <ButtonWrap onClick={this.loginWithKakao}>카카오 로그인</ButtonWrap>;\n } else if (location.pathname.includes('/mainRegister')) {\n viewToShow = (\n <ButtonWrap2 onClick={this.loginWithKakao}>\n <span className='visually-hidden'>카카오</span>\n </ButtonWrap2>\n );\n }\n\n return <div className='KakaoIdLogin'>{viewToShow}</div>;\n }\n}\n\nexport default withRouter(KakaoLogin);\n\nconst ButtonWrap = Styled.div`\n background-image: url(${KakaoLoginImg});\n background-repeat: no-repeat;\n margin: -10px auto;\n padding-top: 12px;\n text-align: center;\n font-weight: bold;\n width: 100%;\n height: 45px;\n border-radius: 12px;\n\n @media (max-width: 768px) {\n background-image: url(${KakaoLoginImgM});\n width: 100%;\n height: 45px;\n }\n`;\n\nconst ButtonWrap2 = Styled.div`\n background-image: url(${'/assets/images/icons/kakaotalk.png'});\n background-repeat: no-repeat;\n margin: -10px auto;\n text-align: center;\n width: 50px;\n height: 50px;\n overflow: hidden;\n\n @media (max-width: 768px) {\n background-image: url(${'/assets/images/icons/kakaotalk.png'});\n width: 100%;\n height: 45px;\n }\n\n span.visually-hidden {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n border: 0;\n clip: rect(0, 0, 0, 0);\n overflow: hidden;\n }\n`;\n","import React from 'react';\nimport { NavLink } from 'react-router-dom';\nimport { notification, message, Input, Button } from 'antd';\nimport { LOCAL, MATE, USER } from '../../../../Lib/variables';\nimport { CommonWithmateModal } from '../../../../Components/newModal';\nimport { DivisionLine, WithmateInput } from '../../../../Components/Common/input';\n\nimport KakaoLogin from './KakaoLogin';\n\nclass LoginComponent extends React.PureComponent {\n state = {\n modal: false,\n modalTitle: '',\n modalInfo: '',\n };\n\n onEdit = ({ type, value }) => {\n this.props.editLoginForm({ type, value });\n };\n\n login = () => {\n const { email, password, userType } = this.props.auth.loginForm;\n const type = LOCAL;\n\n this.props\n .login({ id: email, password, userType, type })\n .then(resolve => {\n if (resolve === 'not exist') {\n return this.setState({\n modal: true,\n modalTitle: '이메일 로그인',\n modalInfo: '존재하지 않는 사용자의 아이디입니다. 아이디를 확인해주세요.',\n });\n }\n\n if (resolve === 'not allowed') {\n return this.setState({\n modal: true,\n modalTitle: '이메일 로그인',\n modalInfo: '관리자로부터의 가입 승인을 대기중입니다. ',\n });\n }\n\n if (resolve === 'wrong password') {\n return this.setState({\n modal: true,\n modalTitle: '이메일 로그인',\n modalInfo: '잘못된 비밀번호입니다. 확인 후 다시 시도해주세요. ',\n });\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n // return notification.open({\n // message: '로그인 에러',\n // description: '로그인 처리중 에러가 발생하였습니다. 새로고침 후 다시 시도해주세요.',\n // type: 'error',\n // });\n });\n };\n\n render() {\n const { loginForm } = this.props.auth;\n\n return (\n <div className='login-container'>\n <div className='inner-container'>\n <div className='login-form'>\n <div className='login-title'>\n <img src='/assets/images/new_logo_img.png' alt='위드메이트 로고' style={{ width: '45px', height: 'auto' }} /><p style={{ display: 'inline-block', verticalAlign: '-10px', paddingLeft: '10px' }}>로그인</p>\n <br/>\n <h5 style={{color: 'gray'}}>위드메이트의 서비스를 이용하기 위해 로그인을 해주세요.</h5>\n </div>\n <div>\n <div className='form-user-type'>\n <div\n onClick={() => {\n this.onEdit({ type: 'userType', value: USER });\n }}\n className={`type ${loginForm && loginForm.userType === USER ? 'active' : undefined}`}\n >\n <p>일반 고객 로그인</p>\n <h5>병원 동행서비스를 이용하고 싶어요!</h5>\n </div>\n </div>\n <div className='form-user-type'>\n <div\n onClick={() => {\n this.onEdit({ type: 'userType', value: MATE });\n }}\n className={`type ${loginForm && loginForm.userType === MATE ? 'active' : undefined}`}\n >\n <p>메이트 로그인</p>\n <h5>병원 동행서비스를 수행하는 메이트로 활동하고 싶어요!</h5>\n </div>\n </div>\n </div>\n {loginForm.userType === USER ? <>\n <div className='form'>\n <label>이메일</label>\n <WithmateInput\n type='email'\n value={loginForm.email}\n onChange={ev => {\n this.onEdit({ type: 'email', value: ev.target.value });\n }}\n placeholder='ex) korea@mail.com'\n />\n <DivisionLine />\n <WithmateInput\n type='password'\n value={loginForm.password}\n onChange={ev => {\n this.onEdit({ type: 'password', value: ev.target.value });\n }}\n onPressEnter={this.login}\n placeholder='비밀번호를 입력해주세요'\n />\n\n <Button type='primary' style={{ borderRadius: '4px', marginTop: '20px', borderRadius: '12px' }} onClick={this.login}>\n 로그인 하기\n </Button>\n {loginForm.userType === USER ?\n <KakaoLogin {...this.props} /> : null\n }\n\n <DivisionLine />\n\n <div className='link-wrapper'>\n <span\n className='link'\n onClick={() => {\n this.props.history.push('/user/register');\n }}\n >\n 회원가입\n </span>\n <span\n className='link'\n onClick={() => {\n this.props.history.push('/user/find/password');\n }}\n >\n 비밀번호 찾기\n </span>\n <span\n className='link'\n onClick={() => {\n this.props.history.push('/mate/apply');\n }}\n >\n 메이트 지원하기\n </span>\n </div>\n </div>\n </> : null}\n\n {loginForm.userType === MATE ? <>\n <div className='form'>\n <label>이메일</label>\n <WithmateInput\n type='email'\n value={loginForm.email}\n onChange={ev => {\n this.onEdit({ type: 'email', value: ev.target.value });\n }}\n placeholder='ex) korea@mail.com'\n />\n <DivisionLine />\n <WithmateInput\n type='password'\n value={loginForm.password}\n onChange={ev => {\n this.onEdit({ type: 'password', value: ev.target.value });\n }}\n onPressEnter={this.login}\n placeholder='비밀번호를 입력해주세요'\n />\n\n <Button type='primary' style={{ borderRadius: '4px', marginTop: '20px', borderRadius: '12px' }} onClick={this.login}>\n 로그인 하기\n </Button>\n\n <DivisionLine />\n\n <div className='link-wrapper'>\n <span\n className='link'\n onClick={() => {\n this.props.history.push('/user/register');\n }}\n >\n 회원가입\n </span>\n <span\n className='link'\n onClick={() => {\n this.props.history.push('/user/find/password');\n }}\n >\n 비밀번호 찾기\n </span>\n <span\n className='link'\n onClick={() => {\n this.props.history.push('/mate/apply');\n }}\n >\n 메이트 지원하기\n </span>\n </div>\n </div>\n </> : null}\n </div>\n </div>\n\n {this.state.modal && (\n <CommonWithmateModal\n visible={this.state.modal}\n config={{\n title: this.state.modalTitle,\n description: this.state.modalInfo,\n confirmText: '확인 및 닫기',\n noClose: true,\n }}\n onOk={() => {\n this.setState({ modal: false, modalTitle: '', modalInfo: '' });\n }}\n />\n )}\n </div>\n );\n }\n}\nexport default LoginComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport LoginStyledContainer from './login.styled';\nimport Login from './login';\nimport { login, editLoginForm, editRegisterForm, checkUserId } from '../../../../Reducer/Modules/auth';\n\nclass LoginPage extends React.PureComponent {\n componentDidMount = () => {\n const { auth } = this.props;\n const userId = localStorage.getItem('id');\n if ((auth && auth.id) || userId) return this.props.history.goBack('/');\n };\n render() {\n return (\n <LoginStyledContainer>\n <Login {...this.props} />\n </LoginStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ auth }) => ({\n auth,\n});\n\nconst mapDispatchToProps = dispatch => ({\n editRegisterForm: ({ type, value }) => dispatch(editRegisterForm({ type, value })),\n login: ({ id, password, userType, type }) => dispatch(login({ id, password, userType, type })),\n checkUserId: ({ id, userType, type }) => dispatch(checkUserId({ id, userType, type })),\n editLoginForm: ({ type, value }) => dispatch(editLoginForm({ type, value })),\n});\nexport default connect(mapStateToProps, mapDispatchToProps)(LoginPage);\n","import React from 'react';\nimport { MATE, USER } from '../../../../Lib/variables';\nimport KakaoLogin from '../Login/KakaoLogin';\n\nclass MainComponent extends React.PureComponent {\n render() {\n const { userType } = this.props.auth;\n\n return (\n <div className='login-container'>\n <div className='inner-container'>\n <div className='register-form'>\n <div className='register-title'>\n <img src='/assets/images/new_logo_img.png' alt='위드메이트 로고' style={{ width: '45px', height: 'auto' }} />\n <p style={{ display: 'inline-block', verticalAlign: '-10px', paddingLeft: '10px' }}>회원가입</p>\n <br />\n <h5 style={{ color: 'gray' }}>위드메이트의 서비스를 이용하기 위해 회원가입을 해주세요.</h5>\n </div>\n\n <div>\n <div className='form-user-type'>\n <div\n onClick={() => {\n this.props.history.push('/user/register');\n }}\n className={`type ${userType === USER ? 'active' : undefined}`}\n >\n <p>일반 고객으로 가입하기</p>\n <h5>병원 동행서비스를 이용하고 싶어요!</h5>\n </div>\n </div>\n <div className='form-user-type'>\n <div\n onClick={() => {\n this.props.history.push('/mate/apply');\n }}\n className={`type ${userType === MATE ? 'active' : undefined}`}\n >\n <p>메이트 지원하기</p>\n <h5>병원 동행서비스를 수행하는 메이트로 활동하고 싶어요!</h5>\n </div>\n </div>\n </div>\n\n {/* <div className='link-wrapper'>\n <span className='text'>SNS계정으로 간편하게 회원가입 </span>\n <div style={{ paddingLeft: '15px', paddingBottom: '15px', borderRadius: '20px', width: 'auto', height: 'auto' }}>\n <KakaoLogin {...this.props} checkUserId={this.props.checkUserId} />\n </div>\n </div> */}\n <div className='link-wrapper'>\n <span className='text'>이미 계정이 있으신가요? </span>\n <span\n onClick={() => {\n this.props.history.push('/user/login');\n }}\n className='link'\n >\n 로그인\n </span>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default MainComponent;\n","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../../../theme';\n\nconst MainRegisterStyledContainer = styled.div`\n margin-top: 55px;\n min-height: 100vh;\n background-image: url('/assets/images/login_bg.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: 80% 50%;\n\n @media (max-width: 480px) {\n min-height: initial;\n height: 100%;\n }\n\n .inner-container {\n padding: 0px;\n padding-top: 144px;\n padding-bottom: 100px;\n\n @media (max-width: 480px) {\n padding: 0px;\n }\n\n .register-form {\n background-color: white;\n border-radius: 8px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 340px;\n margin: 0 auto;\n padding: 24px;\n\n @media (max-width: 480px) {\n max-width: initial;\n width: 100%;\n border-radius: 0px;\n box-shadow: none;\n }\n\n .register-title {\n margin-bottom: 24px;\n\n p {\n font-size: ${sizeHandler(32)};\n font-weight: bold;\n letter-spacing: -0.7px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .link-wrapper {\n display: flex;\n justify-content: center;\n .text {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n line-height: 21px;\n }\n\n .link {\n cursor: pointer;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.3px;\n text-align: center;\n color: ${mainColor};\n\n margin-left: 8px;\n }\n }\n\n .form {\n label {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.15px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n input {\n height: 40px;\n border: solid 1px #e6e6e6;\n // margin-bottom: 20px;\n }\n\n button {\n width: 100%;\n height: 46px;\n margin-top: 4px;\n margin-bottom: 16px;\n\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n }\n }\n\n .form-user-type {\n height: 76px;\n margin-bottom: 20px;\n border-radius: 4px;\n border: 1px solid #e6e6e6;\n display: flex;\n align-items: center;\n overflow: hidden;\n\n .type {\n flex: 1;\n height: 100%;\n line-height: 30px;\n background-color: #ffffff;\n cursor: pointer;\n\n &:first-child {\n border-right: 1px solid #e6e6e6;\n }\n\n p {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n line-height: 40px;\n text-align: left;\n padding-left: 10px;\n color: #606060;\n }\n\n h5 {\n font-size: ${sizeHandler(12)};\n text-align: left;\n padding-left: 10px;\n color: #606060;\n }\n\n &.active {\n background-color: #606060;\n\n p {\n color: #ffffff;\n }\n\n h5 {\n color: white;\n }\n }\n }\n }\n }\n }\n`;\nexport default MainRegisterStyledContainer;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport MainRegister from './main';\nimport MainRegisterStyledContainer from './main.styled';\n\nclass MainRegisterPage extends React.PureComponent {\n render() {\n return (\n <MainRegisterStyledContainer>\n <MainRegister {...this.props} />\n </MainRegisterStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ auth }) => ({\n auth,\n});\n\nconst mapDispatchToProps = dispatch => ({\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MainRegisterPage);","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../../../theme';\n\nconst RegisterStyledContainer = styled.div`\n padding-top: 110px;\n padding-bottom: 55px;\n\n background-image: url('/assets/images/login_bg.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: 80% 50%;\n\n @media (max-width: 480px) {\n min-height: initial;\n height: 100%;\n padding-bottom: 0px;\n padding-top: 55px;\n }\n\n .inner-container {\n padding-bottom: 0px;\n padding-top: 0px;\n\n @media (max-width: 480px) {\n padding: 0px;\n }\n\n .register-form {\n background-color: white;\n border-radius: 8px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 360px;\n margin: 0 auto;\n padding: 32px;\n\n @media (max-width: 480px) {\n max-width: initial;\n width: 100%;\n border-radius: 0px;\n box-shadow: none;\n padding: 24px;\n }\n\n .title-wrapper {\n display: flex;\n justify-content: flex-start;\n margin-bottom: 16px;\n\n p {\n flex: 1;\n font-size: ${sizeHandler(32)};\n font-weight: bold;\n letter-spacing: -0.7px;\n line-height: 48px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n }\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: right;\n color: ${mainColor};\n }\n }\n\n .form {\n label {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.15px;\n line-height: 20px;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 4px;\n }\n\n input {\n height: 44px;\n border: solid 1px #e6e6e6;\n padding: 10px;\n\n &.ant-input {\n font-size: 16px;\n line-height: 28px;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.7);\n\n &::placeholder {\n font-size: 14px;\n }\n }\n }\n\n .type-button-wrapper {\n width: 100%;\n height: 48px;\n\n background-color: white;\n border: 1px solid #e6e6e6;\n border-radius: 4px;\n\n display: flex;\n align-items: center;\n\n > .type-button {\n width: 50%;\n height: 100%;\n line-height: 48px;\n\n text-align: center;\n cursor: pointer;\n\n font-size: 16px;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.2);\n }\n\n > .type-button.active {\n background: rgba(0, 0, 0, 0.7);\n border-radius: 4px;\n color: #f9f9f9;\n }\n }\n\n button {\n width: 100%;\n height: 46px;\n margin-top: 4px;\n margin-bottom: 16px;\n\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n }\n\n .link-wrapper {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n .text {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n line-height: 21px;\n }\n\n .link {\n cursor: pointer;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.3px;\n text-align: center;\n color: ${mainColor};\n\n margin-left: 8px;\n }\n }\n }\n\n .form-user-type {\n height: 36px;\n margin-bottom: 20px;\n border-radius: 4px;\n border: 1px solid #e6e6e6;\n display: flex;\n align-items: center;\n overflow: hidden;\n\n .type {\n flex: 1;\n height: 100%;\n line-height: 36px;\n background-color: #ffffff;\n cursor: pointer;\n\n &:first-child {\n border-right: 1px solid #e6e6e6;\n }\n\n p {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n text-align: center;\n color: #606060;\n }\n\n &.active {\n background-color: #606060;\n\n p {\n color: #ffffff;\n }\n }\n }\n }\n }\n }\n\n .ant-upload-drag-container {\n .title {\n margin-top: 12px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n }\n\n .reco {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n text-align: center;\n color: #a7a7a7;\n }\n }\n`;\nexport default RegisterStyledContainer;\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../theme';\nconst TermsStyledContainer = styled.div`\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default TermsStyledContainer;\n","import React from 'react';\n\nclass TermsComponent extends React.PureComponent {\n render() {\n return (\n <div className='terms-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>위드메이트 서비스 이용약관</h2>\n </div>\n\n <div className='context-block'>\n <h3>제 1조(목적)</h3>\n <p>\n 본 약관은 ㈜블루카멜(이하 “회사”라 한다)가 제공하는 위드메이트 병원 동행 서비스와 관련하여 회사와 회원과의 권리,\n <br />\n 의무 및 책임 사항, 그리고 기타 필요한 사항을 규정함을 목적으로 합니다.\n </p>\n <br />\n <p>본 서비스 이용약관은 2021년 12월 20일부터 시행됩니다.</p>\n </div>\n\n <div className='context-block'>\n <h3>제 2조(정의)</h3>\n <h5>1. 본 약관에서 사용하는 용어의 정의는 다음과 같습니다.</h5>\n\n <div className='info'>\n <p className='title'>“위드메이트 서비스” 혹은 “서비스”라 함은 당사가 제공하는 ‘병원 동행 서비스’를 의미합니다.</p>\n <p className='title'>\n “회원”이라 함은 회사가 제공하는 서비스를 이용하기 위하여 본 약관에 동의하고 회사의 회원으로 가입하는 자를 말합니다. (단,\n 메이트와 관련된 사실 관계에 한하여, 메이트도 본 약관에서 “회원”에 포함될 수 있습니다)\n </p>\n <p className='title'>\n “메이트”라 함은 회사가 회원에게 서비스를 제공하기 위해 직접 선별하고 교육하여 ‘프리랜서’의 형태로 간접 고용한 인원을 말합니다.\n </p>\n <p className='title'>\n “운송사업자\"라 함은 여객자동차 운수사업법 제4조에 따른 면허를 받은 여객자동차 운송사업자로서, 회사(메이트 인력)의 중개 또는 회원\n 스스로를 통해 택시 등 그 면허를 받은 운송 수단을 이용하여 운송서비스를 제공하는 자를 의미합니다.\n </p>\n <p className='title'>\n “중개”라 함은 회사가 직접 서비스를 제공하지 않고, 이용자 또는 회원의 요청에 따라 적격 메이트를 연결하여 알선하는 것을\n 의미합니다.\n </p>\n <p className='title'>\n “매칭”이라 함은 회원이 플랫폼(웹사이트 포함)에서 출발지와 목적지를 입력하고, “예약하기\" 버튼을 통해 서비스 이용을 요청(이하\n “이용 요청”이라고 합니다)하면, 요청 시점에 서비스 제공이 가능한 메이트가 플랫폼(웹사이트 포함)을 통하여\n 수락함으로써(매칭됨으로써), 회원과 회사 사이의 메이트 알선 계약이 각 체결된 상태를 의미합니다.\n </p>\n <p className='title'>\n “플랫폼(웹사이트 포함)”이라 함은 회사가 회원에게 서비스를 제공하기 위하여 개발한 위드메이트 애플리케이션과 웹사이트를\n 의미합니다.\n </p>\n <p className='title'>\n “이용요금”이라 함은\n <br />\n (i) 메이트가 제공하는 의료 동행 서비스에 대한 비용\n <br />\n (ii) 회원이 택시 등 운송사업자의 운송 수단을 예약하거나 호출하여 이동하는 비용,\n <br />\n (iii) 기타 비용(고객 소유 자가용 대리 운전 비용, 예약 취소 및 변경 수수료 등)을 총칭하여 의미합니다.\n </p>\n </div>\n\n <h5 style={{ marginTop: '56px' }}>\n 2. 본 약관에서 사용하는 용어의 정의는 본 조제 1항에서 정하는 것을 제외하고는 관계 법령에서 정하는 바에 의합니다. 관계 법령에서\n 정하지 않는 것은 일반적인 상 관례에 의합니다.\n </h5>\n </div>\n\n <div className='context-block'>\n <h3>제 3조(약관의 효력 및 변경)</h3>\n <h5>1.</h5>\n <h6>\n 약관은 애플리케이션 소프트웨어 및 해당 애플리케이션과 웹사이트의 모든 패치, 업데이트, 업그레이드 또는 새로운 버전에 적용되며, 가장\n 최신 버전이 모든 기존 버전에 우선합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 본 약관은 서비스 이용계약의 성격상 회사의 웹사이트 또는 서비스 이용을 위한 애플리케이션 내에 본 약관을 명시하고, 이용자가\n 애플리케이션을 설치 및 실행 혹은 웹사이트 열람과 동시에 효력이 발생합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>회사는 관계 법령 또는 상관습에 위배되지 않는 범위에서 본 약관을 개정할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사는 관련 법령의 변경이나 이용자의 권리 및 의무사항, 서비스 등을 개선하기 위해 본 약관을 변경할 수 있으며, 변경된 경우에 약관의\n 내용과 적용일을 정하여, 적용일 7일 전 회사 공식 홈페이지나 공식 블로그, 제공하는 애플리케이션 등을 통해 이용자에게 고지하고\n 적용일부터 효력이 발생합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 이용자는 변경된 약관에 대해 거부할 권리가 있습니다. 본 약관의 변경에 대해 이의가 있는 이용자는 서비스 이용을 중단하고 이용을\n 해지(탈퇴 및 삭제)할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>\n 회사가 본 조 4항에 따라 변경된 약관을 공시 또는 고지하면서 이용자가 기간 내의 의사표시를 하지 않으면 변경된 약관에 동의한 것으로\n 간주합니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 4조(약관 외 준칙)</h3>\n <h5>1.</h5>\n <h6>\n 회사는 필요한 경우 특정 서비스에 관하여 적용될 사항을 위해 개별 약관이나 이용 정책을 정하여 운영할 수 있으며, 해당 내용은 홈페이지\n 등을 통해 공지합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 본 약관에 규정되지 않은 사항에 대해서는 관련 법령 또는 개별 약관, 이용 정책, 서비스 이용 화면을 통하여 제시된 개별 이용 조건(이용\n 요금 등, 이하 “개별계약“이라고 합니다)에서 정한 바에 따릅니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 본 약관과 개별 약관, 개별 계약의 내용이 충돌할 경우 본 약관에 별도의 규정이 없는 한 개별 계약 또는 개별 약관에서 정한 바에 따릅니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회원은 서비스 이용 시 개별 계약 또는 개별 약관의 내용을 확인하여야 하며, 이를 확인하지 않아 발생한 손해에 대해 회사는 책임을\n 부담하지 않습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 5조(이용 계약의 성립)</h3>\n <h5>1.</h5>\n <h6>\n 이용 계약은 이용자가 본 이용 약관에 대한 동의 또는 회사의 애플리케이션을 다운로드 받거나 실행하여 이용하는 경우, 그리고 웹사이트\n 회원 가입을 완료한 경우 이 약관에 동의한 것으로 간주합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>이용자는 동의하지 않는 경우 애플리케이션이나 웹사이트 계정 로그아웃 및 삭제와 함께 이를 철회할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 제 1항에 따른 회원 가입 신청에 대해 승낙함을 원칙으로 합니다. 다만, 다음 각 호의 경우 회사는 회원 가입 신청을 승낙하지 않거나\n 사후에 회원 계약을 해지할 수 있습니다.\n </h6>\n\n <div className='info'>\n <p className='title'>신청자가 본 약관 위반 등의 사유로 이전에 회원 자격이 상실 또는 회원 계약이 해지되었던 경우</p>\n <p className='title'>자신의 귀책으로 이용 정지를 당한 회원이 그 이용 정지 기간 중에 이용 계약을 임의 해지하고 재신청을 하는 경우</p>\n <p className='title'>본 약관에 위배되거나 위법 또는 사회상규상 부당한 가입 신청임이 확인된 경우</p>\n <p className='title'>허위의 정보를 기재한 경우, 회사가 제시하는 내용을 기재하지 않은 경우 또는 오기 등이 있는 경우</p>\n <p className='title'>미성년자 등 법령상 행위 무능력자인 경우</p>\n <p className='title'>기타 신청자의 귀책 사유로 인하여 승낙이 불가능하거나 기타 회사가 정한 제반 사항을 위반한 자의 신청</p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 서비스 신청자가 대리인일 경우, 해당 서비스 수혜자에 대한 모든 정보는 사실에 근거하여 제공되어야 하며, 허위 사실 기재 시 발생하는\n 모든 민형사상 책임은 신청자에게 있습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 6조(회원 계약의 해제 및 해지 등)</h3>\n <h5>1.</h5>\n <h6>\n 회원은 언제든지 회원 계약의 해지를 신청할 수 있으며, 회사는 관련 법령에서 정하는 바에 따라 이를 즉시 처리하여야 합니다. 다만,\n 회원에게 미수금이 있을 경우에는 미수금에 대한 결제를 완료한 이후에 해지 신청이 가능합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원이 회원 계약을 해지할 경우, 회사는 관련 법령 개인정보처리방침 또는 내부관리 계획 등에 따라 회원 정보를 보유하는 경우를\n 제외하고는 해지 즉시 회원의 모든 정보를 삭제합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회원 계약 해지로 인해 발생한 불이익에 대한 책임은 회원 본인이 부담해야 하며, 회사는 회원에게 부가적으로 제공한 각종 무상 혜택을\n 회수할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사가 회원 계약을 해지하는 경우 회사는 회원에게 해지 사유를 밝혀 해지 의사를 통지합니다. 이 경우 회사는 해지를 하기 전에 상당한\n 기간을 정하여 회원에게 이의 신청의 기회를 부여합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>회원 계약이 회사에 의해 해지되는 경우 회원의 재이용 신청에 대해 회사는 승낙을 거절할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>\n 회원의 귀책 사유로 인해 회원 계약이 해지됨으로써 발생한 손해는 당해 회원이 부담하여야 하며, 회사는 관련 법령에 규정이 없는 한 책임을\n 부담하지 않습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 7조(서비스 내용)</h3>\n <h5>1.</h5>\n <h6>회사가 제공하는 병원 동행 서비스의 내용은 다음과 같습니다.</h6>\n <div className='info'>\n <p className='title'>\n <span className='bold'>병원 동행 Pro 서비스 : </span>응급 상황에 처하지는 않았으나 정기적, 혹은 비정기적으로 의료 기관에 방문해\n 적절한 조치를 받아야 하는 고객을 위한 서비스.\n </p>\n <p className='title'>\n <span className='bold'>병원 동행 Basic 서비스 & 수면내시경 보호자 서비스 :</span>보호자 동행이 법적 의무는 아니나 보호자가 없을\n 경우 시술이 어려운 수면 내시경 등과 같은 의료 조치를 받아야 하는 고객을 위한 보호자 대행 서비스.\n </p>\n <p className='title'>\n <span className='bold'>병원 동행 서비스 제공을 위한 메이트 알선(중개) 서비스 : </span>회원의 서비스 이용 요청 시 적격 자격을\n 갖춘 인원을 회사가 직접 선별하고 교육한 후, 프리랜서로 등록된 인력이 병원 동행 서비스를 위한 동행자를 알선 받을 수 있도록\n 중개해주는 서비스.\n </p>\n\n <p className='title'>\n <span className='bold'>고객 소유 자가용 대리 운전 서비스 : </span>회원의 요청에 따라 알선된 메이트가 고객 소유의 자가용을 운행해\n 병원과 자택을 이동하는 서비스\n </p>\n <p className='title'>\n <span className='bold'>택시 등 여객자동차 운송 중개 서비스 :</span>회원의 요청에 따라 알선된 메이트가 택시 등 여객자동차\n 운송사업자의 운송 수단을 호출하여 동행할 수 있도록 중개해주는 서비스.\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>회사는 제1항의 각 호의 서비스 이외에도 추가적인 서비스를 개발하여 회원에게 제공할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사가 제공하는 서비스와 플랫폼(웹사이트 포함)의 사용은 무료입니다. 단, 회사가 제공한 서비스를 통해 메이트 알선을 포함한 병원 동행\n 서비스가 제공되는 경우 사용자는 해당 서비스에 대한 이용 요금을 지불할 의무를 가집니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사는 회원과 메이트 사이의 병원 동행 서비스 혹은 메이트 알선 계약 및 회원과 여객자동차 운송사업자 사이의 운송 계약 체결을 중개하고\n 제 8조 1항에 명시된 ‘병원 동행 서비스 비용’을 수취하는 회사입니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>회사의 메이트는 고객에게 어떠한 형태의 의료 서비스나 치료, 구급차 등의 의료 운송 서비스를 제공하지 않습니다.</h6>\n </div>\n\n <div className='context-block'>\n <h3>제 8조(이용 요금 등)</h3>\n <h5>1.</h5>\n <h6>\n 위드메이트 서비스 이용 요금은 ‘병원 동행 서비스 비용’으로 구성되어 있습니다. 단, 상황에 따라 이동 중에 발생하는 운송 교통 비용이\n 고객 본인 부담으로 발생할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회사는 이용 요금을 애플리케이션 혹은 웹사이트 내의 예약하기 페이지에 게시하거나, 예약 완료 시에 별도로 회원에게 안내합니다. 다만\n 최종 이용 요금은 다양한 변수에 따라서 서비스 종료 후 추가 부과가 될 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 메이트가 회원이 지정한 출발지에 도착하여 회원에게 도착을 안내하였음에도 회원이 사전 연락 없이 일정 시간(20분) 이내에 나타나지\n 아니하거나 계약을 취소하는 경우 회사는 제 9조에 명시된 취소 수수료를 회원에게 부과할 수 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n [병원 동행 Pro] 서비스 이용 옵션 중 ‘고객 소유의 자차 운행’을 선택한 경우 예약일에 맞춰 본인의 차량 보험사가 제공하는 ‘임시 운전자\n 특약’에 가입을 해야 합니다. 이때 발생하는 보험 비용은 고객 본인 부담이며, 임시 운전자 특약에 가입을 하지 않고 메이트에게 운전을\n 위임하여 사고가 발생한 경우 모든 책임은 고객 본인에게 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 서비스와 관련하여 발생한 미납경비, 손해배상 등 회원의 회사에 대한 채무가 모두 정산될 때까지 해당 회원의 서비스 사용이 중지되며, 그\n 채무가 일정기간 계속하여 변제되지 않을 경우에는 해당 회원의 회원자격이 박탈될 수 있습니다. 서비스 사용 중지 또는 회원자격 박탈에\n 대한 판단 기준은 회사의 약관 및 이용정책에 근거합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>\n 회원이 본 약관 및 위 각 조항을 준수하지 않았을 경우, 회사는 본 약관 및 이용 정책에 따라 손해배상 금액 등 각종 수수료를 부과하는 것\n 외에 계약을 해지할 수 있는 권리를 가집니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>7.</h5>\n <h6>\n 회사는 본 서비스와 관련하여 발생한 미납경비, 손해배상 등 회원의 회사에 대한 채무가 정산되지 않을 경우 회원을 상대로 보전처분,\n 본안소송제기, 강제집행절차의 착수 등 채무 변제를 위한 법적 조치에 들어갈 수 있습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 9조(계약 등의 취소)</h3>\n <h5>1. 회원이 정상적으로 매칭된 병원 동행 서비스 계약을 취소 및 변경하는 경우에는 아래와 같이 수수료가 발생합니다.</h5>\n\n <div className='info'>\n <p className='title'>\n <span className='bold'>서비스 예약 날짜 기준 48시간 이내 변경 및 취소</span>수수료 없이 변경 & 취소 가능\n </p>\n <p className='title'>\n <span className='bold'>서비스 예약 전날 18:00 이전 변경 및 취소</span>취소 시 수수료 10,000원 발생. 단, 메이트와 변경 협의 성공\n 시에는 수수료 부과 X 수수료 부과 X\n </p>\n <p className='title'>\n <span className='bold'>당일 예약 변경 및 취소</span>취소 시 수수료 15,000원 발생. 단, 메이트와 변경 협의 성공 시에는 수수료 부과\n X\n </p>\n <p className='title'>\n <span className='bold'>서비스 시작 2시간 전 이내 변경 및 취소</span>서비스 수수료 20,000원 발생. 단, 메이트와 변경 협의 성공\n 시에는 수수료 부과 X 수수료 부과 X\n </p>\n <p className='title'>\n <span className='bold'>노쇼(No-Show)의 경우</span>회원 자격 정지 및 민/형사상 책임 소지를 물을 수 있음\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>\n 2. 회사가 서비스 계약을 취소하는 경우 회원에게 사유를 설명하고 이용요금 전액을 청구하지 아니하며, 회원이 입은 피해에 대한 보상을\n 협의하고 지급합니다.\n </h5>\n\n <h5 style={{ marginTop: '48px' }}>\n 3. 서비스 수혜자의 상태(건강 이상, 인지능력 저하 등)에 따른 현장 판단으로 서비스가 수행되지 못한 경우에도, 이용자는 당일 취소\n 수수료를 부담할 수 있습니다.\n </h5>\n </div>\n\n <div className='context-block'>\n <h3>제 10조(서비스 제공 밎 중단)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 서비스를 주 5일 (월~금), 1일 10시간 (오전 9시~오후 7시) 제공함을 원칙으로 합니다. 특수 예약에 대해서는 검토 후 해당 시간\n 외에도 서비스를 제공할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회사는 서비스의 제공에 필요한 경우 정기 점검을 실시할 수 있으며, 정기 점검 시간은 플랫폼(웹사이트 포함)의 서비스 제공 화면에 공지한\n 바에 따릅니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 파산 또는 회생 절차 개시 등 정상적인 영업 활동이 곤란한 경우 또는 회사의 영업상 필요한 경우 서비스 내용을 변경하거나 서비스를\n 종료할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>회사는 다음 각 호의 경우 당해 서비스의 전부 또는 일부의 제공을 중단하거나 제한할 수 있습니다.</h6>\n\n <div className='info'>\n <p className='title'>\n 천재지변, 전쟁, 폭동, 화재, 파업 등 쟁의행위, 정부기관의 통제, 테러, 해킹, DDOS, 기타 회사의 합리적인 노력으로 제어할 수 없는\n 사유가 발생하거나 발생할 우려가 있는 경우\n </p>\n <p className='title'>기간통신사업자로부터 전기통신서비스가 제공되지 않은 경우</p>\n <p className='title'>서비스용 설비의 장애 및 정기 점검, 보수점검, 교체 또는 고장, 통신의 두절 등의 사유가 발생한 경우</p>\n <p className='title'>서비스가 제3자와의 제휴를 통하여 제공되는 경우에 당해 제휴사업자의 사정에 따라 변경되거나 중지되는 경우</p>\n <p className='title'>기타 서비스의 원활한 운영을 현저히 저해하는 사유가 발생한 경우</p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 본 조 제3항, 제4항의 사유로 서비스 내용이 변경 또는 중단되는 경우, 회사는 그로 인해 회원이 입은 손해에 대하여 고의 또는 중과실이\n 없는 한 배상하지 않습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>회사는 본 조 상기된 사유가 발생한 경우 최대한 빠른 시간 내에 서비스를 재개하도록 최선의 노력을 다합니다.</h6>\n </div>\n\n <div className='context-block'>\n <h3>제 11조(서비스의 변경)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 상당한 이유가 있는 경우에 운영상, 기술상의 필요에 따라 제공하고 있는 전부 또는 일부의 서비스를 변경할 수 있습니다. 다만,\n 변경된 내용이 중대하거나 회원에게 불리한 경우에는 회사가 해당 서비스를 제공받는 회원에게 통지합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회사는 전항에 따른 서비스 변경에 대한 동의를 거절한 회원에 대하여는 해당 서비스의 제공을 중지하거나 회원 이용 계약을 해지할 수\n 있습니다. 이 때 회원 역시 회원 계약을 종료할 권한을 가집니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 12조(회원에 대한 서비스 이용 제한 등)</h3>\n\n <h5>1.</h5>\n <h6>회사는 다음 각 호에 해당하는 경우 회원에 대하여 서비스 제공을 제한하거나 중지할 수 있습니다.</h6>\n <div className='info'>\n <p className='title'>\n 폭언, 폭행, 그 밖에 적정 범위를 벗어난 신체적ㆍ정신적 고통을 유발하는 행위를 통해, 회원이 서비스의 정상적인 운영을 방해한 경우\n </p>\n <p className='title'>\n 법정 감염병 환자, 법정 감염병 의사 환자, 감염병 병원체보유자 등, 환자가 각종 매개체를 통해 메이트에게 질병을 전염 및 유발할\n 것으로 우려되는 경우\n </p>\n <p className='title'>회원이 타인의 명의를 도용하여 회원가입을 한 경우</p>\n <p className='title'>\n 이용 요금을 지급하지 아니하거나 이용 요금을 결제함에 있어서 타인 명의 결제 도용, 전화번호 도용 등 불법적인 방법을 사용한 경우\n </p>\n <p className='title'>\n 불법프로그램의 제공 및 운영 방해, 정보통신망법을 위반한 불법 통신 및 해킹, 악성프로그램의 배포, 접속 권한 초과 행위 등과 같이\n 회원이 관련 법령을 위반한 경우\n </p>\n <p className='title'>회원이 계속해서 1년 이상 로그인하지 않는 경우</p>\n <p className='title'>\n 서비스 수혜자의 상태가 다음에 해당하는 경우:\n <br />\n <p style={{ paddingLeft: '20px' }}>· 거동이 불가능하거나 현저히 떨어지는 경우</p>\n <p style={{ paddingLeft: '20px' }}>· 인지장애가 의심 또는 확인된 경우 (경중 불문, 서비스 제공 불가)</p>\n <p style={{ paddingLeft: '20px' }}>\n · 위 사실을 은폐하거나 허위로 신청한 경우: 서비스 즉시 중단 및 법적 조치 대상이 될 수 있음\n </p>\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회사는 사안에 따라 사전 또는 사후 통지하며, 보호자의 진술, 병원 소견, 메이트의 현장 판단 등을 토대로 제한 여부를 결정할 수 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 서비스 수혜자 또는 보호자의 사전 고지 의무 위반 여부를 확인하기 위해 필요한 경우 의학적 소견서나 병원 진료 정보를 요청할 수\n 있으며, 협조하지 않을 경우 서비스 제공이 제한될 수 있습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 13조(개인정보의 관리 및 변경)</h3>\n\n <h6>\n 이용자는 본 서비스의 이용을 위해 자신의 개인 정보를 성실히 관리해야 하며, 개인정보에 변동사항이 있을 경우 이를 변경해야 합니다. 본\n 서비스를 이용하면서 이용자의 개인정보 변경이 지연되거나 누락, 이용자에 의해 유출되어 발생하는 손해는 이용자의 책임으로 합니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 14조(정보의 제공 및 광고의 게재)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 회원이 서비스 이용 중 필요하다고 인정되는 다양한 정보를 서비스 내 공지사항 또는 서비스 화면, 메시지, 전자우편 등의 방법으로\n 회원에게 제공할 수 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>회사는 서비스의 운영과 관련하여 서비스 화면 등에 광고를 게재할 수 있습니다.</h6>\n </div>\n\n <div className='context-block'>\n <h3>제 15조(회사의 의무)</h3>\n\n <h5>1.</h5>\n <h6>회사는 관련법과 본 약관의 금지하는 행위를 하지 않으며, 계속적이고 안정적인 서비스를 제공하기 위하여 최선을 다하여 노력합니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>회사는 이용자의 개인정보 보호를 위한 보안 의무에 최선을 다합니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 이용자로부터 제기되는 의견이나 불만이 정당하고 객관적으로 인정될 경우에는 적절한 절차를 거쳐 즉시 처리하여야 합니다. 다만,\n 즉시 처리가 불가한 경우에는 이용자에게 그 사유와 처리 일정을 통보하여야 합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사가 제공하는 서비스로 인하여 회원에게 손해가 발생한 경우 그러한 손해가 회사의 고의나 과실에 기해 발생한 경우에 한하여 회사에서\n 책임을 부담합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>회사는 정보통신망법, 통신비밀보호법, 전기통신사업법 등 서비스의 운영, 유지와 관련 있는 법령을 준수합니다.</h6>\n </div>\n\n <div className='context-block'>\n <h3>제 16조(회원의 의무)</h3>\n\n <h5>1.</h5>\n <h6>\n 회원은 최종 요금 등의 서비스 조건을 확인한 후 이용 요청을 하여야 하고, 제 8조 2항에 따라 서비스 종료 이후 추가 요금이 발생할 수\n 있다는 사실을 인지해야 합니다. 서비스 조건을 확인하지 않고 이용 요청을 하여 발생한 손실, 손해에 대한 책임은 회원 본인이 부담하여야\n 합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원은 본 약관 및 회사가 서비스와 관련하여 고지하는 내용을 준수하여야 하며, 약관 및 고지 내용을 위반하거나 이행하지 아니하여\n 발생하는 모든 손실, 손해에 대하여 책임을 부담합니다. 이용 요청과 관련하여 회원이 입력한 정보 및 그 정보와 관련하여 발생한 책임과\n 불이익은 전적으로 회원이 부담하여야 합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회원은 택시 혹은 승합자동차의 대여 및 이동 서비스 이용 시 반드시 본인 명의의 결제수단을 사용하여야 하며, 타인의 결제 수단을 임의로\n 사용해서는 안 됩니다. 타인의 결제수단을 임의로 사용함으로써 발생하는 회사, 결제 수단의 적법한 소유자, 전자결제대행 또는 이동서비스\n 제공자 등의 손실과 손해에 대한 모든 책임은 회원에게 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회원은 회사가 서비스를 안전하게 제공할 수 있도록 회사에 협조하여야 하며, 회사가 회원의 본 약관 위반행위를 발견하여 회원에게 해당\n 위반행위에 대하여 소명을 요청할 경우 회원은 회사의 요청에 적극 응하여야 합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 회원은 분쟁이 발생한 경우 분쟁의 해결을 위하여 성실히 임하여야 하며, 분쟁 해결에 대한 회원의 불성실로 인하여 이동 서비스 제공자 또는\n 회사에 손해가 발생한 경우 회원은 이에 대한 책임을 부담하여야 합니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 17조(회원의 금지 행위)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 서비스의 신뢰성을 제고하고 안전한 거래가 이뤄질 수 있도록 회원에게 특정한 행위를 금지하며 이를 금지 행위로 규정하고 있습니다.\n 금지 행위의 항목은 수시로 갱신될 수 있으며 항목 추가 및 변경 시 별도로 고지하지 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원이 위드메이트 서비스로 중개 받은 메이트 또는 기타 운송 수단 탑승 중 메이트, 차량, 혹은 제 3자에 대하여 손해를 입혔을 경우 회원은\n 이를 배상하여야 하며 구체적인 금액은 아래와 같습니다. 이에 관하여 제휴사의 기사 알선 포함 승합자동차 대여 서비스 이용약관에서 정한\n 사항이 있다면 그에 따릅니다.\n </h6>\n <div className='info'>\n <p className='title'>\n <span className='bold'>메이트를 폭행하거나 정신적인 피해를 끼친 경우 :</span>치료비 전액 배상 및 영업손실비\n </p>\n <p className='title'>\n <span className='bold'>차량을 오염시킨 경우: </span>30만원 이내에서 세차 실비 및 영업손실비\n </p>\n <p className='title'>\n <span className='bold'>차량 및 차내 기물 파손 비용:</span> 원상 복구 비용 및 영업손실비\n </p>\n <p className='title'>\n <span className='bold'>목적지 도착 후 하차 거부:</span>경찰서 등의 인계 시까지의 운임 및 영업손실비\n </p>\n <p className='title'>\n <span className='bold'>분실물 발견 후 배달 요청 :</span>배차 중지 후 분실물 배달을 위한 영업손실비\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 회원이 본 조의 금지행위를 하는 경우 서비스 이용을 제한할 수 있으며, 이 경우 발생하는 모든 책임은 회원이 부담합니다. 회사는\n 필요한 경우 회원의 금지 행위 사실을 관련 정부기관 또는 사법기관에 통지할 수 있습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 18조(책임 제한)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 회원과 메이트 간, 회원과 운송사업자 간 거래를 중개하는 시스템의 운영 관리를 제공하며, 회원, 메이트, 운송사업자를 대리하지\n 않습니다. 회원과 메이트, 그리고 운송사업자 사이에 성립된 거래에 따라 회원 또는 메이트, 혹은 운송사업자가 제공한 정보에 대한 책임은\n 회원과 메이트, 그리고 운송사업자가 부담합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원이 자신의 개인 정보 및 계정 등을 타인에게 제공하거나, 회원의 관리 소홀로 유출됨으로써 발생하는 피해에 대해서 책임을 부담하지\n 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>회사는 회원의 귀책 사유로 인한 서비스 이용의 장애에 대하여는 책임을 지지 않습니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>회사는 회원이 서비스와 관련하여 게재한 정보, 자료, 사실의 신뢰도, 정확성 등의 내용에 관하여는 책임을 부담하지 않습니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 회사는 서비스간 회원의 귀책 사유로 발생한 메이트와의 갈등(물리적 폭행, 언어 폭력, 부적절한 신체 접촉 등)으로 인해 발생한 피해에\n 대해서 책임을 부담하지 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>\n 회사는 관계 법령의 변경, 천재지변, 디도스(DDOS)공격, IDC 장애, 기간통신사업자의 회선 장애 또는 이에 준하는 불가항력으로 인하여\n 서비스를 제공할 수 없는 경우에는 서비스 제공에 관한 책임이 면제됩니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>7.</h5>\n <h6>\n 회사는 회원의 서비스 이용과 직접적으로 관련이 없는 분쟁에 관여하지 않으며, 회원과 운전용역 제공자 및 운송사업자 또는 회원과 제3자\n 간의 분쟁을 포함하여 도난, 폭행, 성범죄 등에 대해서는 회사의 과실이 없는 한 책임을 부담하지 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>8.</h5>\n <h6>\n 회사는 스마트기기 환경으로 인하여 발생하는 제반 문제 또는 회사의 귀책 사유가 없는 네트워크 환경으로 인하여 발생하는 문제에 대해서\n 책임을 지지 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>9.</h5>\n <h6>\n 회사는 메이트의 현장 상황 판단(서비스 거부 포함)에 따라 불가피하게 서비스가 중단된 경우, 고의 또는 중대한 과실이 없는 한 책임을\n 부담하지 않습니다.\n </h6>\n </div>\n\n <div className='context-block' style={{ marginBottom: '100px' }}>\n <h3>제 19조(분쟁의 해결)</h3>\n\n <h5>1.</h5>\n <h6>본 약관에 명시되지 않은 사항이 관계 법령에 규정되어 있을 경우에는 해당 규정에 따릅니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>서비스 이용으로 발생한 분쟁에 대해 소송이 제기되는 경우 법령에 정한 절차에 따른 법원을 관할 법원으로 합니다.</h6>\n </div>\n\n <div className='context-block'>\n <div className='privacy-justify'>\n <p className='version'>개인정보 처리방법 버전 번호 : v.1.2</p>\n <p className='date'>제정일자 : 2021년 12월 20일</p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default TermsComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport TermsStyledContainer from './terms.styled';\nimport Terms from './terms';\n\nclass TermsContainer extends React.PureComponent {\n render() {\n return (\n <TermsStyledContainer component={this.props.isComponent || undefined}>\n <Terms {...this.props} />\n </TermsStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\nexport default connect(mapStateToProps, mapDispatchToProps)(TermsContainer);\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../theme';\nconst PrivacyStyledContainer = styled.div`\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .medium-bold {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n\n \n .in {\n font-size: ${sizeHandler(13)};\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n text-indent: -20px;\n padding-left: 40px;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default PrivacyStyledContainer;\n","import React from 'react';\n\nclass PrivacyComponent extends React.PureComponent {\n render() {\n return (\n <div className='privacy-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>㈜ 블루카멜 개인정보처리방침</h2>\n <p>\n 병원동행서비스 위드메이트(www.withmate.kr, 이하 “서비스\")를 운영하는 (주)블루카멜(이하 “회사”)은 「개인정보보호법」 제30조에 따라\n 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 다음과 같이 개인정보처리방침(이하 \"방침\")을\n 수립 및 공개합니다. 개인정보처리방침은 관련 법령 또는 지침, 회사의 약관 또는 정책에 따라 변경될 수 있습니다. 회사는 해당 변경 사항을\n 온라인 게시 등의 방법으로 이용자에게 알립니다.\n <br />\n <br />이 개인정보처리방침은 2023년 7월 25일부터 적용됩니다.\n </p>\n <br />\n <br />\n <br />\n\n <p style={{ fontSize: '20px' }}>\n <a\n href='https://docs.google.com/document/d/e/2PACX-1vTQ3CepPqUO6BqEg8va9_5e0zZg7V1nMuK7xiibF1Nxa2RQAX1C5xv3p4mnIVmkeeh_ClORu1P3Fs0p/pub'\n target='_blank'\n style={{ color: 'gray' }}\n >\n ✅ 개인정보처리방침 2차(2023.07.22)\n </a>\n </p>\n <p style={{ fontSize: '20px' }}>\n <a\n href='https://docs.google.com/document/d/e/2PACX-1vQTjHkJBb2VK4gofoPrHZVYbgCOvOgDDvClVJjwYpx7ikkLFW37GUlFS5Hwa8osGb7a7mNbg55qlEMu/pub'\n target='_blank'\n style={{ color: 'gray' }}\n >\n ✅ 개인정보처리방침 1차(2021.12.20)\n </a>\n </p>\n </div>\n {/* <div className='context-block'>\n <h3>제 1조 (수집하는 개인정보의 항목 및 수집 방법)</h3>\n <h5>1. 수집하는 개인정보의 항목</h5>\n <p>\n 회사는 회원가입(또는 서비스 가입), 원활한 고객 상담, 의료 시설 관계자와 메이트 지원자의 신분 확인, 그리고 각종 서비스의 제공을 위해\n 위드메이트 서비스 최초 이용 시 다음과 같은 개인정보를 수집하고 있습니다.\n <br />\n <br />\n 일반개인정보: 회원의 이름, 이메일 주소(아이디) 및 패스워드, 전화번호, 단말기 정보, 프로필 사진(메이트 지원자에 한함), 블랙박스로\n 인하여 수집되는 영상 (회사는 음성을 수집하지 않으나, 회사가 직접 관리하지 않는 일반 택시와 같은 여객운송 서비스 차량에 설치된\n 블랙박스 기종에 따라 음성이 녹음될 수 있습니다), 민원/사고 발생 관련 정보, 집이나 회사 등의 주소 정보, 기타 아래 서비스 이용\n 과정에서 수집되는 정보 및 회원이 서비스 이용을 위해 자발적으로 입력하는 정보 등.\n </p>\n <div className='info'>\n <p className='title'>또한, 서비스 이용과정이나 사업처리 과정에서 아래와 같은 정보들이 자동으로 생성되어 수집될 수 있습니다.</p>\n <p className='content'>\n - IP Address, 방문 일시, 서비스 이용 기록, 쿠키, 접속 로그, 불량 이용 기록, 앱 설치정보, 네트워크 위치정보 등{' '}\n </p>\n </div>\n <div className='info'>\n <p className='title'>나아가 서비스 이용과정에서 다음과 같은 정보들이 수집될 수 있습니다.</p>\n <p className='content'>- 계좌 이체 시: 은행명, 계좌번호 등</p>\n <p className='content'>- 신용카드 결제 시 : 카드사명, 카드번호 등</p>\n <p className='content'>- 휴대전화 결제 시 : 전화 번호, 통신사, 결제 승인 번호 등</p>\n </div>\n\n <h5 style={{ marginTop: '80px' }}>2. 개인정보 수집방법</h5>\n <p>회사는 다음과 같은 방법으로 개인정보를 수집합니다.</p>\n <div className='info'>\n <p className='content'>- 위드메이트 플랫폼(애플리케이션 & 웹사이트)의 실행 또는 사용 과정에서 수집</p>\n <p className='content'>- 협력 회사로부터의 제공</p>\n <p className='content'>- 생성 정보 수집 툴(쿠키를 포함)을 통한 수집</p>\n <p className='content'>- 사용 중 회원의 자발적 제공을 통한 수집</p>\n </div>\n </div>\n\n <div className='context-block'>\n <h3>제 2조 (개인정보의 수집 및 이용 목적)</h3>\n <p>\n 회사는 회원의 동의가 있거나 법령의 규정에 의한 경우를 제외하고는 본 조에서 고지한 범위를 넘어 회원의 개인정보를 활용하지 않습니다.\n 회사는 수집한 개인정보를 다음과 같은 목적으로 이용합니다.\n </p>\n\n <div className='info-block'>\n <p className='title'>1. 위드메이트 서비스 제공 및 운영</p>\n <p className='content'>\n 회원이 가입한 위드메이트 서비스 내 상호 식별, 서비스 제공에 관한 계약 이행 및 서비스 제공에 따른 요금정산, 이용 및 경비 결제,\n 콘텐츠 제공, 물품 배송 또는 청구서 등 발송, 금융거래 본인 인증 및 금융 서비스(추후 기능 추가 예정), 미수금 추심, 서비스 이용 중\n 사고 발생 시 사고처리, 회사의 약관 또는 이용 정책의 위반 행위 적발을 위한 기록 조회\n </p>\n </div>\n\n <div className='info-block'>\n <p className='title'>2. 회원관리</p>\n <p className='content'>\n 서비스 제공, 회원 식별, 본인 확인, 개인 식별, 이용이 제한된 회원 - 위드메이트 이용약관에 따라 이용이 제한된 회원 - 의 부정 이용\n 방지와 비인가 사용 방지, 가입 의사 확인 및 가입 횟수 제한, 분쟁 조정을 위한 기록 보존, 불만 처리 등 민원 처리, 고지 사항 전달,\n 추후 법정 대리인 본인 확인, 최신 정보 전달, 서비스의 유효성 확인, 접속 빈도 파악, 회원의 서비스 이용에 대한 통계 확인 및 파악\n </p>\n </div>\n\n <div className='info-block'>\n <p className='title'>3. (선택적) 신규 서비스 개발 및 마케팅 · 광고에 활용</p>\n <p className='content'>\n 신규 서비스 개발 및 맞춤 서비스 제공, 통계학적 특성에 따른 서비스 제공 및 광고 게재, 이벤트 참여 기회 제공 또는 광고성 정보 제공\n </p>\n </div>\n\n <div className='info-block'>\n <p className='title'>4. 사고 발생시 원인 규명 및 처리를 위한 수집 및 이용</p>\n </div>\n </div>\n\n <div className='context-block'>\n <h3>제 3조 (개인정보의 제한적 공개 및 제 3자 제공)</h3>\n <h6>\n 회사는 회원의 개인정보를 “제2조 (개인정보의 수집 및 이용목적)”에서 고지한 범위 내에서 처리하며, 회원의 사전 동의가 있거나 법령에 규정된 \n 경우를 제외하고는 회원의 개인정보를 동의 범위를 초과하여 이용하거나 외부에 공개 또는 제3자에게 제공하지 않는 것을 원칙으로 합니다. \n 다만, 다음의 경우 주의를 기울여 회원의 개인정보를 제한적으로 공개할 수 있습니다.\n </h6>\n <div className='info'>\n <p className='title'>\n <span className='bold'>- 제휴관계 :</span>회사는 제 3자와 제휴 관계를 맺을 경우 반드시 사전에 제휴사명, 제휴사의 개인정보 이용목적, \n 공유하는 개인정보의 항목, 제휴기간에 관하여 알릴 것이며 반드시 이용자의 동의에 의해서만 정보를 제공하거나 공유합니다. 제휴 관계에 있어서 \n 위 고지할 사항에 변화가 있을 때도 같은 절차에 의하여 이용자에게 알리고 동의를 구합니다.\n </p>\n </div>\n <div className='info'>\n <p className='title'>\n <span className='bold'>- 취급위탁 :</span>원활한 업무 처리를 위해 이용자의 개인정보를 위탁 처리할 경우 반드시 사전에 위탁 처리 업체명과 \n 개인정보 취급 위탁을 하는 업무의 내용을 이용자에게 알리고 동의를 받아야 합니다.\n </p>\n </div>\n <div className='info'>\n <p className='title'>\n <span className='bold'>- 매각, 인수합병 등 :</span>회사의 영업의 전부 또는 일부의 양도 합병 등으로 이용자의 개인정보를 제3자에게 이전하는 \n 경우에는 회사는 해당 이용자에게 개인정보를 이전하려는 사실, 개인정보를 이전받는 자의 명칭, 이용자가 개인정보의 이전을 원하지 아니하는 경우 \n 그 동의를 철회할 수 있는 방법과 절차에 관하여 사전에 전자우편ㆍ서면ㆍ전화 또는 이와 유사한 방법 중 어느 하나의 방법으로(회사가 과실 없이 \n 이용자의 연락처를 알 수 없어 이러한 방법에 따라 통지할 수 없는 경우에는 회사의 어플리케이션 또는 플랫폼 첫 화면에 30일 이상 게시하는 방법으로\n 한다) 알릴 것이며 이용자의 개인정보에 대한 동의 철회의 선택권을 부여합니다.\n </p>\n </div>\n <div className='info'>\n <p className='title'>\n <span className='bold'>- 고지 및 동의 방법 :</span>위 제휴 관계 또는 취급 위탁의 경우 회사가 이용자의 동의를 얻는 방법은 다음 열거된 방법들 중 \n 어느 하나와 같습니다. 다만, 개인정보 수집 매체의 특성상 동의 내용을 전부 표시하기 어려운 경우에는 이용자에게 동의 내용을 확인할 수 있는 \n 아래의 방법(인터넷주소ㆍ사업장 전화번호 등)을 안내하고 동의를 얻을 수 있습니다.\n <br/><br/>\n <span className='in'><b> 가. </b>인터넷 사이트(어플리케이션 또는 플랫폼)에 동의 내용을 게재하고 이용자가 동의 여부를 표시하도록 하는 방법</span><br/>\n <span className='in'><b> 나. </b>동의 내용이 기재된 서면을 이용자에게 직접 교부하거나, 우편을 통하여 전달하고 이용자가 동의 내용에 대하여 \n 서명 날인 후 제출하도록 하는 방법</span><br/>\n <span className='in'><b> 다. </b>동의 내용이 적힌 전자우편을 발송하여 이용자로부터 동의의 의사표시가 적힌 전자우편을 전송 받는 방법</span><br/>\n <span className='in'><b> 라. </b>전화를 통하여 동의 내용을 이용자에게 알리고 동의를 얻거나 인터넷 주소 등 동의 내용을 확인할 수 있는 방법을 \n 안내하고 <br/>재차 전화 통화를 통하여 동의를 얻는 방법</span>\n </p>\n </div>\n <div className='info'>\n <p className='title'>\n <span className='bold'>- 예외 사항 :</span>다음 예외의 경우에는 회사는 이용자의 동의를 받지 아니하고 또한 이용자에게 고지하지 아니하고도 이용자의 \n 개인정보를 제공할 수 있습니다.\n <br/><br/>\n <span className='in'><b> 가. </b>법관이 발부한 영장에 의하여 이용자의 개인정보의 제공 요구가 있을 경우</span><br/>\n <span className='in'><b> 나. </b>통계 작성, 학술 연구나 시장 조사를 위하여 특정 개인을 식별할 수 없는 형태로 광고주, 협력사 또는 연구 단체 등에 \n 제공하는 경우</span><br/>\n <span className='in'><b> 다. </b>기타 관계 법령에 따라 회사에게 이용자의 개인정보를 제공할 의무가 인정되는 경우</span>\n <br/>\n 그러나 위 예외에 해당하여 이용자의 동의를 받지 아니하고 정보를 제공하는 경우에도 정보를 제공하는 경우에도 본래의 수집 목적 및 이용 목적에 반하여 무분별하게 \n 정보가 제공되지 않도록 최대한 노력하겠습니다.\n </p>\n </div>\n <div className='info'>\n <p className='title'>\n <span className='bold'>- 병원 동행 서비스 매칭 서비스 및 온라인 플랫폼 특성에 의한 예외 사항 :</span>위드메이트 서비스 이용 도중 매칭된 회원과 메이트 상호간\n 식별을 위해 이름, 프로필 사진, 전화 번호, 주소, 병명, 나이 등이 위드메이트 서비스 내의 매칭된 회원에게 공개됩니다. 이는 공개 범위 특정이 불가능하여 별도로 고지하여 \n 동의 받지 못함을 양해바랍니다.\n </p>\n </div>\n </div>\n\n <div className='context-block'>\n <h3>제 4조 (개인정보의 취급 위탁)</h3>\n <h6>\n 회사는 원활한 개인정보 업무 처리를 위하여 추후 개인정보 처리 업무를 외부에 위탁할 예정이며, 해당 업체의 명단은 확정 후 공지될\n 예정입니다.\n <br />\n <br />\n 또, 회사는 위탁 계약 체결 시 개인정보보호법 제25조에 따라 위탁 업무 수행 목적 외 개인정보 처리 금지, 재위탁 제한, 수탁자에 대한 관리\n 및 감독, 책임에 관한 사항을 명시하고, 수탁자가 개인정보를 안전하게 처리하는지 감독할 의무가 있으며, 해당 의무를 책임지고 준수할\n 것입니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 5조 (동의의 거부권 및 거부 시의 불이익 고지)</h3>\n <h6>\n 회원은 개인정보 수집ㆍ이용에 관한 동의를 거부할 권리가 있습니다. 다만, 계약 체결 및 이행 등을 위해 필요한 최소한의 개인정보\n 수집ㆍ이용에 관한 동의를 거부하는 경우에는 서비스 이용이 불가능하거나 처리 업무가 지연되는 등의 불이익이 있을 수 있습니다.\n <br />\n <br />\n 또한 마케팅 활동 및 홍보를 위한 개인정보 수집ㆍ이용 및/또는 선택적 수집ㆍ이용에 관한 동의를 거부하는 경우에는 이벤트, 혜택에 대한\n 정보를 제공받지 못하거나 사은품ㆍ판촉물 제공, 제휴서비스 이용, 할인 혜택 적용 및 포인트 적립 불가 등의 불이익이 있을 수 있습니다.\n </h6>\n <p>\n ※ 본 제공 동의 이외에도 회사는 회원이 별도로 동의한 경우, 회원이 동의한 바에 따라 개인정보를 수집ㆍ이용하거나 제3자에게 개인정보를\n 제공할 수 있습니다.\n </p>\n </div>\n\n <div className='context-block'>\n <h3>제 6조 (개인정보의 보유 및 이용 기간)</h3>\n <h5>1.</h5>\n <h6>회사는 회원이 회원의 자격을 유지하고 있는 동안 수집된 회원의 개인정보를 보유 및 이용할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 하지만 회원이 탈퇴하거나 자격을 상실한 경우, 회사는 회원의 별도 요청이 없더라도 수집된 회원 정보를 삭제 및 파기합니다. 회사는 다음의\n 방법으로 개인정보를 파기합니다.\n </h6>\n <div className='info'>\n <p className='content'>- 전자적 파일 : 파일 삭제 및 디스크 등의 저장 매체 포맷</p>\n <p className='content'>- 수기(手記) 문서 : 분쇄하거나 소각</p>\n </div>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>단, 회원의 탈퇴 또는 자격 상실에도 불구하고 다음의 정보는 아래의 이유로 명시 기간 동안 보존 후 삭제 및 파기됩니다.</h6>\n <div className='info'>\n <p className='title'>3-1) 회사 내부 방침에 의한 정보 보유</p>\n <p className='content'>- 회원 간의 분쟁 및 문제해결을 위한 회원정보 기록 : 분쟁의 소멸 시효 등 도과시까지</p>\n <p className='content'>- 탈퇴 회원의 재가입 제한을 위한 회원정보 기록: 3개월</p>\n <p className='content'>- 이용 제한 회원 및 부정 회원의 재가입 제한을 위한 회원 정보 기록: 제한 기간에 따름(별도저장)</p>\n </div>\n <div className='info' style={{ marginTop: '32px' }}>\n <p className='title'>3-2) 관계 법령에 의한 정보 보유</p>\n <p className='content'>- 표시/광고에 관한 기록 : 6개월 (「전자상거래 등에서의 소비자보호에 관한 법률」)</p>\n <p className='content'>- 계약 또는 청약철회 등에 관한 기록 : 5년 (「전자상거래 등에서의 소비자보호에 관한 법률」)</p>\n <p className='content'>- 대금결제 및 재화 등의 공급에 관한 기록 : 5년 (「전자상거래 등에서의 소비자보호에 관한 법률」)</p>\n <p className='content'>- 소비자의 불만 또는 분쟁 처리에 관한 기록 : 3년 (「전자상거래 등에서의 소비자보호에 관한 법률」)</p>\n <p className='content'>- 로그인 기록 : 3개월 (「통신비밀보호법」)</p>\n </div>\n </div>\n\n <div className='context-block'>\n <h3>제 7조 (회원 및 법정대리인의 권리, 의무와 그 행사 방법)</h3>\n <h5>1.</h5>\n <h6>\n 회원은 언제든지 등록되어 있는 자신의 개인 정보를 열람하거나 수정할 수 있으며, 회사의 개인정보 처리에 동의하지 않는 경우 동의를\n 거부하거나 가입 해지(회원탈퇴)를 요청할 수 있습니다. 단, 개인 정보에서 서비스 운영을 위해 확인이 필요한 정보를 변경할 경우에는\n 회사의 승인이 이루어질 때까지 서비스 이용이 제한될 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원의 개인정보 조회 및 수정을 위해서는 \"개인정보변경\"(또는 \"회원정보수정\" 등)을, 가입해지(동의철회)를 위해서는 \"회원탈퇴\"를, 각\n 클릭하여 본인 확인 절차를 거치신 후 직접 열람, 정정 또는 탈퇴가 가능합니다. 혹은 개인정보 관리책임자에게 서면 또는 이메일로\n 연락하시면 지체 없이 조치하겠습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회원이 개인정보의 오류에 대한 정정을 요청하신 경우에 회사는 당해 정정을 완료하기 전까지 당해 개인정보를 이용하거나 제3자에게\n 제공하지 않습니다. 또한 잘못된 개인정보를 제3자에게 이미 제공한 경우에는 정정 처리 결과를 제3자에게 지체 없이 통지하여 정정이\n 이루어지도록 하겠습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사는 회원의 요청에 의해 해지 또는 삭제된 개인정보는 \"제6조 개인정보의 보유 및 이용기간\"에 명시된 바에 따라 처리하고 그 외의 용도로\n 열람 또는 이용할 수 없도록 처리하고 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 서비스에 가입할 수 있는 자는 만 19세 이상이며, 개인정보의 수집∙이용에 법정 대리인의 동의가 필요한 만 14세 미만 아동의 개인정보는\n 원칙적으로 수집하지 않습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 8조 (개인정보 자동 수집 장치의 설치와 운영 및 거부에 관한 사항)</h3>\n <h5>1.</h5>\n <h6>\n 회원은 언제든지 등록되어 있는 자신의 개인 정보를 열람하거나 수정할 수 있으며, 회사의 개인정보 처리에 동의하지 않는 경우 동의를\n 거부하거나 가입 해지(회원탈퇴)를 요청할 수 있습니다. 단, 개인 정보에서 서비스 운영을 위해 확인이 필요한 정보를 변경할 경우에는\n 회사의 승인이 이루어질 때까지 서비스 이용이 제한될 수 있습니다.\n </h6>\n <div className='info'>\n <p className='title'>\n <span className='bold'>쿠키의 사용목적 :</span>이용자가 방문한 각 서비스와 웹 사이트들에 대한 방문 및 이용 형태, 인기 검색어,\n 보안 접속 여부, 등을 파악하여 이용자에게 최적화된 정보 제공을 위해 사용됩니다.\n </p>\n <p className='title'>\n <span className='bold'>쿠키의 설치∙운영 및 거부 :</span>웹브라우저 상단의 도구>인터넷 옵션>개인정보 메뉴의 옵션 설정을 통해 쿠키\n 저장을 거부 할 수 있습니다.\n </p>\n <p className='title'>\n <span className='bold'>쿠키 저장을 거부할 경우 맞춤형 서비스 이용에 어려움이 발생할 수 있습니다.</span>\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>회사는 이용자에게 개별적인 맞춤 서비스를 제공하기 위해 온라인 맞춤형 광고 서비스를 사용합니다.</h6>\n <div className='info'>\n <p className='title'>\n <span className='bold'>행태 정보 수집 방법 :</span>이용자가 당사 애플리케이션을 실행할 때 자동 수집 및 전송합니다.\n </p>\n <p className='title'>\n <span className='bold'>모바일 애플리케이션 사용 시 광고 식별자 수집 :</span>회사는 이용자의 ADID/IDFA를 수집할 수 있습니다.\n ADID/IDFA란 모바일 앱 이용자의 광고 식별 값으로써, 사용자의 맞춤 서비스 제공이나 더 나은 환경의 광고를 제공하기 위한 측정을 위해\n 수집할 수 있습니다.\n </p>\n <p className='title'>\n <span className='bold'>거부 방법 :</span>- Android: 설정 → 구글(구글설정) → 광고 → 광고 맞춤설정 선택 해제\n </p>\n </div>\n </div>\n\n <div className='context-block'>\n <h3>제 9조 (개인정보의 안전성 확보 조치)</h3>\n <h6>\n 회원은 언제든지 등록되어 있는 자신의 개인 정보를 열람하거나 수정할 수 있으며, 회사의 개인정보 처리에 동의하지 않는 경우 동의를\n 거부하거나 가입 해지(회원탈퇴)를 요청할 수 있습니다. 단, 개인 정보에서 서비스 운영을 위해 확인이 필요한 정보를 변경할 경우에는\n 회사의 승인이 이루어질 때까지 서비스 이용이 제한될 수 있습니다.\n </h6>\n\n <div className='info'>\n <p className='title'>\n <span className='bold'>- 관리적 조치 :</span>내부 관리 계획 수립 및 시행, 직원과 종업원 등에 대한 정기적 교육\n </p>\n <p className='title'>\n <span className='bold'>- 기술적 조치 : </span>개인정보 처리시스템(또는 개인정보가 저장된 컴퓨터)의 비밀번호 설정 등 접근권한\n 관리, 백신소프트웨어 등 보안프로그램 설치, 개인정보가 저장된 파일의 암호화\n </p>\n <p className='title'>\n <span className='bold'>- 물리적 조치 :</span>개인정보가 저장․보관된 장소의 시건, 출입통제 등\n </p>\n </div>\n </div>\n\n <div className='context-block'>\n <h3>제 10조 (개인정보 관리책임자 및 담당자의 연락처)</h3>\n <h6>\n 회사는 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보 주체의 불만 및 피해 구제를 처리하기 위하여 아래와\n 같이 개인정보 보호책임자를 지정하고 있습니다.\n </h6>\n\n <p className='medium-bold'>개인정보 보호 및 관리 책임자 (사업주 또는 대표자)</p>\n <div className='info'>\n <p className='title' style={{ borderTop: '1px solid #e6e6e6' }}>\n <span className='bold'>성명 및 직책 :</span>지승배 / 대표이사\n </p>\n <p className='title'>\n <span className='bold'>연락처 :</span>ceo@withmate.kr\n </p>\n <p className='title'>\n <span className='bold'>고객센터 :</span>070-4300-9075\n </p>\n </div>\n </div>\n\n <div className='context-block'>\n <h3>제 11조 (고지의 의무)</h3>\n <h6>\n 현 개인정보처리방침 내용 추가, 삭제 및 수정이 있을 시에는 개정 최소 7일전부터 회사 애플리케이션, 서비스 내의 '공지사항' 또는 기타\n 알기 쉬운 방법을 통해 고지할 것입니다. 다만, 개인정보의 수집 및 활용, 제3자 제공 등과 같이 회원 권리의 중요한 변경이 있을 경우에는\n 최소 30일 전에 고지합니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <div className='privacy-justify'>\n <p className='version'>개인정보 처리방법 버전 번호 : v.1.2</p>\n <p className='date'>제정일자 : 2021년 12월 20일</p>\n </div>\n </div> */}\n </div>\n </div>\n );\n }\n}\nexport default PrivacyComponent;\n","import React from 'react';\n\n// component\nimport PrivacyStyledContainer from './privacy.styled';\nimport Privacy from './privacy';\n\nclass PrivacyContainer extends React.PureComponent {\n render() {\n return (\n <PrivacyStyledContainer component={this.props.isComponent || undefined}>\n <Privacy {...this.props} />\n </PrivacyStyledContainer>\n );\n }\n}\n\nexport default PrivacyContainer;\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../theme';\nconst MarketingStyledContainer = styled.div`\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > table {\n border-spacing: 0px;\n width: 100%;\n height: 100px;\n border: 1px solid #e2e2e2;\n\n > tr, th, td {\n width: 200px;\n border: 1px solid #e2e2e2;\n text-align: left;\n padding-left: 10px;\n }\n\n > td {\n line-height: 2rem;\n border: 1px solid #e2e2e2;\n }\n\n > thead {\n height: 35px; \n }\n\n > tbody {\n background-color: #f9f9f9;\n }\n\n @media (max-width: 832px) {\n width: 100%;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default MarketingStyledContainer;","import React from 'react';\n\nclass MarketingComponent extends React.PureComponent {\n render() {\n return (\n <div className='marketing-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>위드메이트 마케팅 정보 활용 동의</h2>\n </div>\n\n <div className='context-block'>\n <p>\n 마케팅 정보 수신 여부 및 마케팅을 위한 개인정보 수집이용을 거부하실 수 있으며, <br />\n 거부 시에도 위드메이트 서비스를 이용하실 수 있으나, 동의를 거부한 경우 각종 소식 및 이벤트 참여에 제한이 있을 수 있습니다.\n </p>\n <br/>\n <table class=\"table\">\n <thead>\n <tr>\n <th>개인정보 수집 항목</th>\n <th>개인정보 수집 이용 목적</th>\n <th>보유 및 이용기간</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>이름, 연락처, 이메일</td>\n <td>• 이벤트 운영 및 광고성 정보 전송\n <br/>\n • 서비스 관련 정보 전송\n </td>\n <td>이용자가 동의를 철회하거나, 회원 탈퇴시 즉시 삭제</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default MarketingComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport MarketingStyledContainer from './marketing.styled';\nimport Marketing from './marketing';\n\nclass MarketingContainer extends React.PureComponent {\n render() {\n return (\n <MarketingStyledContainer component={this.props.isComponent || undefined}>\n <Marketing {...this.props} />\n </MarketingStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\nexport default connect(mapStateToProps, mapDispatchToProps)(MarketingContainer);\n","import styled from 'styled-components';\nimport { sizeHandler } from '../../../../theme';\nconst NromalStyledContainer = styled.div`\n * {\n thead {\n border: 1px solid gray;\n text-align: center;\n\n tr {\n font-weight: bold;\n }\n }\n\n tbody {\n td:nth-child(2),\n td:nth-child(3) {\n text-align: center;\n }\n }\n\n tr {\n border: 1px solid gray;\n }\n\n td {\n padding: 0.5rem;\n border: 1px solid gray;\n }\n }\n\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default NromalStyledContainer;\n","import React from 'react';\n\nclass EssentialComponent extends React.PureComponent {\n render() {\n return (\n <div className='terms-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>[필수/일반] (주)블루카멜 개인정보 수집 및 이용 동의 확인서</h2>\n </div>\n\n <div className='context-block'>\n <table>\n <thead>\n <tr>\n <td style={{ width: '55%' }}>처리 항목</td>\n <td>처리 목적</td>\n <td>처리 목적</td>\n </tr>\n </thead>\n <tbody style={{ border: '1px solid gray' }}>\n <tr>\n <td>\n 공통(가입경로, 가입자 생년월일, 가입자 성별, 가입자 이름, 가입자 휴대전화번호, 보호자/환자 여부), 이메일주소 가입\n 시(이메일 주소, 비밀번호, 인증번호), 카카오계정 가입 시(카카오계정)\n </td>\n <td>회원 가입 및 관리</td>\n </tr>\n <tr>\n <td>민원인 이름, 민원인 휴대전화번호</td>\n <td>회원 가입 및 관리</td>\n </tr>\n <tr>\n <td>\n 거주환경(계단이용여부), 동행인 선택 여부, 동행인 성별 선택, 동행인 이름, 예상 소요시간, 예약자 휴대전화번호, 이동 수단,\n 환자 나이, 환자 성별, 환자 이름, 환자 휴대전화번호, 환자와의 관계, 희망 접선 일시\n </td>\n <td>서비스 제공 및 관리</td>\n <td>온라인 예약하기</td>\n </tr>\n <tr>\n <td>\n 서비스 종류, 작성 일시, 작성자 이름, 평점, 방문병원 주소, 서비스 진행 현황, 예약 신청 일자, 진료 예약 일시, 환자 이름\n </td>\n <td>서비스 제공 및 관리</td>\n <td>후기 작성하기</td>\n </tr>\n <tr>\n <td>\n 동행인 사진, 동행인 서비스 이력, 동행인 이름, 동행인 평점, 동행인 휴대전화번호, 보호자 휴대전화번호, 서비스 종류, 예상\n 소요시간, 예약 신청 일시, 이동 수단, 환자 성별, 환자 이름, 환자 휴대전화번호, 환자와의 관계, 희망 접선 시간, 희망 접선\n 일자\n </td>\n <td>서비스 제공 및 관리</td>\n <td>마이페이지(예약내역)</td>\n </tr>\n <tr>\n <td>가입자 이름, 가입자 휴대전화번호, 비밀번호, 카드 유효기간, 카드번호, 카드사</td>\n <td>서비스 제공 및 관리</td>\n <td>마이페이지(개인정보 관리)</td>\n </tr>\n <tr>\n <td>쿠폰 번호, 쿠폰 사용 내역, 포인트 적립 내역, 포인트 사용 내역, 현재 잔여 포인트</td>\n <td>서비스 제공 및 관리</td>\n <td>마이페이지(내 포인트)</td>\n </tr>\n <tr>\n <td>거주환경(계단이용여부), 환자 나이, 환자 성별, 환자 이름, 환자 휴대전화번호, 환자와의 관계</td>\n <td>서비스 제공 및 관리</td>\n <td>마이페이지(환자 프로필 관리)</td>\n </tr>\n <tr>\n <td>\n 거주환경(계단이용여부), 동행인 성별 선택, 동행인 의료 기관 평가, 동행인 의사 평가, 동행인 이름, 동행인 휴대전화번호,\n 보호자 휴대전화번호, 서비스 종류, 예상 소요시간, 예약번호, 예약자 이름, 이동 수단, 환자 나이, 환자 성별, 환자 이름, 환자\n 휴대전화번호, 희망 접선 일시\n </td>\n <td>서비스 제공 및 관리</td>\n <td>관리자페이지(예약/수행이력)</td>\n </tr>\n <tr>\n <td>\n 가입자 생년월일, 가입자 성별, 거주환경(계단이용여부), 병원동행서비스 개선점, 의료 기관 만족 여부, 동행인 서비스 이력,\n 동행인 선택 여부, 동행인 성별 선택, 동행인 의료 기관 평가, 동행인 의사 평가, 동행인 평점, 의료 기관 만족 이유, 의료진\n 만족 여부, 의료진 만족 이유, 서비스 종류, 예상 소요시간, 이벤트 참여 여부, 이용 후기, 향후 재신청 의향, 이동 수단,\n 포인트 사용 내역, 환불 정보, 결제수단, 이용금액(결산), 이용금액(예상), 쿠폰 사용 내역, 평점, 총 이용시간, 포인트 적립\n 내역, 현재 잔여 포인트, 환자 나이, 환자 성별, 환자와의 관계\n </td>\n <td>서비스 품질 개선 및 신규 서비스 개발</td>\n <td>서비스 품질 개선 및 신규 서비스 개발</td>\n </tr>\n </tbody>\n </table>\n\n <div className='info'>\n <p className='title' />\n <p className='title'>\n <b>[ 개인정보의 수집 및 이용 동의 거부 시 불이익 ]</b> <br />\n 정보주체는 개인정보 수집 및 이용에 동의를 거부할 권리가 있습니다. 단, 필수항목에 대해 거부할 경우,\n ‘(주)블루카멜(개인정보처리자)’이 제공하는 서비스의 일부 또는 전부를 이용할 수 없습니다.\n </p>\n <p className='title'>\n <b>[ 개인정보의 보유 및 이용 기간 ]</b> <br />\n ① 위에서 제시한 처리 목적과 관련한 개인정보는 수집 및 이용에 대한 동의일부터 회원 탈퇴 후 2년까지\n ‘(주)블루카멜(개인정보처리자)’이 보유 및 처리합니다. <br />\n ② 다음과 같은 경우에는 ‘(주)블루카멜(개인정보처리자)’이 개인정보를 제1항에서 정한 기간과 달리 보유 및 처리할 수 있습니다. <br />\n   1. 다음과 같이 관련 법령에 의하여 보존할 필요성이 있는 경우 <br />\n   1) 신용정보의 수집/처리 및 이용 등에 관한 기록 : 3년 <br />\n   2) 소비자의 불만 또는 분쟁처리에 관한 기록 : 3년 <br />\n   3) 대금결제 및 재화 등의 공급에 관한 기록 : 5년 <br />\n   4) 계약 또는 청약철회 등에 관한 기록 : 5년 <br />\n   5) 표시/광고에 관한 기록 : 6개월 <br />\n   2. 정보주체로부터 사전에 동의를 받은 경우 : 정보주체가 사전 동의한 기간\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default EssentialComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport NormalStyledContainer from './normal.styled';\nimport Normal from './normal';\n\nclass NormalContainer extends React.PureComponent {\n render() {\n return (\n <NormalStyledContainer component={this.props.isComponent || undefined}>\n <Normal {...this.props} />\n </NormalStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\nexport default connect(mapStateToProps, mapDispatchToProps)(NormalContainer);\n","import styled from 'styled-components';\nimport { sizeHandler } from '../../../../theme';\nconst TermsStyledContainer = styled.div`\n * {\n thead {\n border: 1px solid gray;\n text-align: center;\n\n tr {\n font-weight: bold;\n }\n }\n\n tbody {\n td:nth-child(2),\n td:nth-child(3) {\n text-align: center;\n }\n }\n\n tr {\n border: 1px solid gray;\n }\n\n td {\n padding: 0.5rem;\n border: 1px solid gray;\n }\n }\n\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default TermsStyledContainer;\n","import React from 'react';\n\nclass SensitiveComponent extends React.PureComponent {\n render() {\n return (\n <div className='terms-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>[필수/민감] (주)블루카멜 개인정보 수집 및 이용 동의 확인서</h2>\n </div>\n\n <div className='context-block'>\n <table>\n <thead>\n <tr>\n <td style={{ width: '55%' }}>수집 및 이용 항목</td>\n <td>수집 및 이용 목적</td>\n <td>수집 및 이용 목적</td>\n </tr>\n </thead>\n <tbody style={{ border: '1px solid gray' }}>\n <tr>\n <td>동행 시 주의사항, 진료 예약 시간, 진료 예약 일자, 방문병원 주소, 출발지 주소(자택, 터미널, 입원 병원 등)</td>\n <td>서비스 제공 및 관리</td>\n <td>온라인 예약하기</td>\n </tr>\n <tr>\n <td>방문병원 주소, 서비스 진행 현황, 예약 신청 일자, 진료 예약 일시</td>\n <td>서비스 제공 및 관리</td>\n <td>후기 작성하기</td>\n </tr>\n <tr>\n <td>\n 다음 진료 일정 정리, 동행인 전달사항, 방문병원 주소, 복약 지도사항, 서비스 진행 중 특이사항, 진료 및 치료 내용, 진료\n 예약 시간, 진료 예약 일자, 출발지 주소(자택, 터미널, 입원 병원 등), 환자 통원 타임라인\n </td>\n <td>서비스 제공 및 관리</td>\n <td>마이페이지(예약내역)</td>\n </tr>\n <tr>\n <td>동행 시 주의사항, 출발지 주소(자택, 터미널, 입원 병원 등)</td>\n <td>서비스 제공 및 관리</td>\n <td>마이페이지(환자 프로필 관리)</td>\n </tr>\n <tr>\n <td>\n 다음 진료 일정 정리, 동행 시 주의사항, 동행인 전달사항, 방문병원 주소, 복약 지도사항, 서비스 진행 중 특이사항, 서비스\n 진행 현황, 진료 및 치료 내용, 진료 예약 일시, 출발지 주소(자택, 터미널, 입원 병원 등), 환자 통원 타임라인\n </td>\n <td>서비스 제공 및 관리</td>\n <td>관리자페이지(예약/수행이력)</td>\n </tr>\n <tr>\n <td>\n 동행 시 주의사항, 동행인 전달사항, 방문병원 주소, 서비스 진행 중 특이사항, 진료 및 치료 내용, 출발지 주소(자택, 터미널,\n 입원 병원 등), 환자 통원 타임라인\n </td>\n <td>서비스 품질 개선 및 신규 서비스 개발</td>\n <td>서비스 품질 개선 및 신규 서비스 개발</td>\n </tr>\n </tbody>\n </table>\n\n <div className='info'>\n <p className='title' />\n <p className='title'>\n <b>[ 개인정보의 수집 및 이용 동의 거부 시 불이익 ]</b> <br />\n 정보주체는 개인정보 수집 및 이용에 동의를 거부할 권리가 있습니다. 단, 필수항목에 대해 거부할 경우,\n ‘(주)블루카멜(개인정보처리자)’이 제공하는 서비스의 일부 또는 전부를 이용할 수 없습니다.\n </p>\n <p className='title'>\n <b>[ 개인정보의 보유 및 이용 기간 ]</b> <br />\n ① 위에서 제시한 처리 목적과 관련한 개인정보는 수집 및 이용에 대한 동의일부터 회원 탈퇴 후 2년까지\n ‘(주)블루카멜(개인정보처리자)’이 보유 및 처리합니다. <br />\n ② 다음과 같은 경우에는 ‘(주)블루카멜(개인정보처리자)’이 개인정보를 제1항에서 정한 기간과 달리 보유 및 처리할 수 있습니다. <br />\n   1. 다음과 같이 관련 법령에 의하여 보존할 필요성이 있는 경우 <br />\n   1) 신용정보의 수집/처리 및 이용 등에 관한 기록 : 3년 <br />\n   2) 소비자의 불만 또는 분쟁처리에 관한 기록 : 3년 <br />\n   3) 대금결제 및 재화 등의 공급에 관한 기록 : 5년 <br />\n   4) 계약 또는 청약철회 등에 관한 기록 : 5년 <br />\n   5) 표시/광고에 관한 기록 : 6개월 <br />\n   2. 정보주체로부터 사전에 동의를 받은 경우 : 정보주체가 사전 동의한 기간\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default SensitiveComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport SensitiveStyledContainer from './sensitive.styled';\nimport Sensitive from './sensitive';\n\nclass SensitiveContainer extends React.PureComponent {\n render() {\n return (\n <SensitiveStyledContainer component={this.props.isComponent || undefined}>\n <Sensitive {...this.props} />\n </SensitiveStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\nexport default connect(mapStateToProps, mapDispatchToProps)(SensitiveContainer);\n","import styled from 'styled-components';\nimport { sizeHandler } from '../../../../theme';\nconst NromalStyledContainer = styled.div`\n * {\n thead {\n border: 1px solid gray;\n text-align: center;\n\n tr {\n font-weight: bold;\n }\n }\n\n tbody {\n td:nth-child(2),\n td:nth-child(3) {\n text-align: center;\n }\n }\n\n tr {\n border: 1px solid gray;\n }\n\n td {\n padding: 0.5rem;\n border: 1px solid gray;\n }\n }\n\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default NromalStyledContainer;\n","import React from 'react';\n\nclass NormalComponent extends React.PureComponent {\n render() {\n return (\n <div className='terms-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>[선택/일반] (주)블루카멜 개인정보 수집 및 이용 동의 확인서</h2>\n </div>\n\n <div className='context-block'>\n <table>\n <thead>\n <tr>\n <td style={{ width: '55%' }}>수집 및 이용 항목</td>\n <td>수집 및 이용 목적</td>\n <td>수집 및 이용 목적</td>\n </tr>\n </thead>\n <tbody style={{ border: '1px solid gray' }}>\n <tr>\n <td>추천인 이름, 추천인 휴대전화번호, 이벤트 참여 정보(이벤트 참여 여부, 받는 사람, 받는 주소)</td>\n <td>서비스 제공 및 관리</td>\n <td>온라인 예약하기</td>\n </tr>\n <tr>\n <td>\n 병원동행서비스 개선점, 의료 기관 만족 여부, 의료 기관 만족 이유, 의료진 만족 여부, 의료진 만족 이유, 이용 후기, 제목,\n 향후 재신청 의향\n </td>\n <td>서비스 제공 및 관리</td>\n <td>후기 작성하기</td>\n </tr>\n <tr>\n <td>추천인 이름</td>\n <td>서비스 제공 및 관리</td>\n <td>관리자페이지(예약/수행이력)</td>\n </tr>\n <tr>\n <td>이벤트 참여 여부, 병원동행서비스 개선점, 의료 기관 만족 여부, 의료 기관 만족 이유, 이용 후기, 향후 재신청 의향</td>\n <td>서비스 품질 개선 및 신규 서비스 개발</td>\n <td>서비스 품질 개선 및 신규 서비스 개발</td>\n </tr>\n </tbody>\n </table>\n\n <div className='info'>\n <p className='title' />\n <p className='title'>\n <b>[ 개인정보의 수집 및 이용 동의 거부 시 불이익 ]</b> <br />\n 정보주체는 개인정보 수집 및 이용에 동의를 거부할 권리가 있습니다. 단, 필수항목에 대해 거부할 경우,\n ‘(주)블루카멜(개인정보처리자)’이 제공하는 서비스의 일부 또는 전부를 이용할 수 없습니다.\n </p>\n <p className='title'>\n <b>[ 선택항목 입력 시 처리 동의로 간주 ]</b> <br />\n ‘(주)블루카멜(개인정보처리자)’이 정한 선택항목은 정보주체가 서비스 이용 과정에서 해당 항목을 입력하지 않는다면 수집되지\n 않습니다. 선택항목 처리에 동의를 거부하더라도, 서비스 이용 중 정보주체가 해당 항목을 입력한다면 처리에 대해 동의한 것으로\n 간주합니다.\n </p>\n <p className='title'>\n <b>[ 개인정보의 보유 및 이용 기간 ]</b> <br />\n ① 위에서 제시한 처리 목적과 관련한 개인정보는 수집 및 이용에 대한 동의일부터 회원 탈퇴 후 2년까지\n ‘(주)블루카멜(개인정보처리자)’이 보유 및 처리합니다. <br />\n ② 다음과 같은 경우에는 ‘(주)블루카멜(개인정보처리자)’이 개인정보를 제1항에서 정한 기간과 달리 보유 및 처리할 수 있습니다. <br />\n   1. 다음과 같이 관련 법령에 의하여 보존할 필요성이 있는 경우 <br />\n   1) 신용정보의 수집/처리 및 이용 등에 관한 기록 : 3년 <br />\n   2) 소비자의 불만 또는 분쟁처리에 관한 기록 : 3년 <br />\n   3) 대금결제 및 재화 등의 공급에 관한 기록 : 5년 <br />\n   4) 계약 또는 청약철회 등에 관한 기록 : 5년 <br />\n   5) 표시/광고에 관한 기록 : 6개월 <br />\n   2. 정보주체로부터 사전에 동의를 받은 경우 : 정보주체가 사전 동의한 기간\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default NormalComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport NormalStyledContainer from './normal.styled';\nimport Normal from './normal';\n\nclass NormalContainer extends React.PureComponent {\n render() {\n return (\n <NormalStyledContainer component={this.props.isComponent || undefined}>\n <Normal {...this.props} />\n </NormalStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\nexport default connect(mapStateToProps, mapDispatchToProps)(NormalContainer);\n","import styled from 'styled-components';\nimport { sizeHandler } from '../../../../theme';\nconst SensitiveStyledContainer = styled.div`\n * {\n thead {\n border: 1px solid gray;\n text-align: center;\n\n tr {\n font-weight: bold;\n }\n }\n\n tbody {\n td:nth-child(2),\n td:nth-child(3) {\n text-align: center;\n }\n }\n\n tr {\n border: 1px solid gray;\n }\n\n td {\n padding: 0.5rem;\n border: 1px solid gray;\n }\n }\n\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default SensitiveStyledContainer;\n","import React from 'react';\n\nclass SensitiveComponent extends React.PureComponent {\n render() {\n return (\n <div className='terms-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>[선택/민감] (주)블루카멜 개인정보 수집 및 이용 동의 확인서</h2>\n </div>\n\n <div className='context-block'>\n <table>\n <thead>\n <tr>\n <td style={{ width: '55%' }}>수집 및 이용 항목</td>\n <td>수집 및 이용 목적</td>\n <td>수집 및 이용 목적</td>\n </tr>\n </thead>\n <tbody style={{ border: '1px solid gray' }}>\n <tr>\n <td>기타 요청 및 전달사항</td>\n <td>서비스 제공 및 관리</td>\n <td>온라인 예약하기</td>\n </tr>\n <tr>\n <td>의료진 이름</td>\n <td>서비스 제공 및 관리</td>\n <td>후기 작성하기</td>\n </tr>\n <tr>\n <td>기타 요청 및 전달사항</td>\n <td>서비스 제공 및 관리</td>\n <td>마이페이지(예약내역)</td>\n </tr>\n <tr>\n <td>기타 요청 및 전달사항</td>\n <td>서비스 제공 및 관리</td>\n <td>관리자페이지(예약/수행이력)</td>\n </tr>\n <tr>\n <td>기타 요청 및 전달사항</td>\n <td>서비스 품질 개선 및 신규 서비스 개발</td>\n <td>서비스 품질 개선 및 신규 서비스 개발</td>\n </tr>\n </tbody>\n </table>\n\n <div className='info'>\n <p className='title' />\n <p className='title'>\n <b>[ 개인정보의 수집 및 이용 동의 거부 시 불이익 ]</b> <br />\n 정보주체는 개인정보 수집 및 이용에 동의를 거부할 권리가 있습니다. 단, 필수항목에 대해 거부할 경우,\n ‘(주)블루카멜(개인정보처리자)’이 제공하는 서비스의 일부 또는 전부를 이용할 수 없습니다.\n </p>\n <p className='title'>\n <b>[ 선택항목 입력 시 처리 동의로 간주 ]</b> <br />\n ‘(주)블루카멜(개인정보처리자)’이 정한 선택항목은 정보주체가 서비스 이용 과정에서 해당 항목을 입력하지 않는다면 수집되지\n 않습니다. 선택항목 처리에 동의를 거부하더라도, 서비스 이용 중 정보주체가 해당 항목을 입력한다면 처리에 대해 동의한 것으로\n 간주합니다.\n </p>\n <p className='title'>\n <b>[ 개인정보의 보유 및 이용 기간 ]</b> <br />\n ① 위에서 제시한 처리 목적과 관련한 개인정보는 수집 및 이용에 대한 동의일부터 회원 탈퇴 후 2년까지\n ‘(주)블루카멜(개인정보처리자)’이 보유 및 처리합니다. <br />\n ② 다음과 같은 경우에는 ‘(주)블루카멜(개인정보처리자)’이 개인정보를 제1항에서 정한 기간과 달리 보유 및 처리할 수 있습니다. <br />\n   1. 다음과 같이 관련 법령에 의하여 보존할 필요성이 있는 경우 <br />\n   1) 신용정보의 수집/처리 및 이용 등에 관한 기록 : 3년 <br />\n   2) 소비자의 불만 또는 분쟁처리에 관한 기록 : 3년 <br />\n   3) 대금결제 및 재화 등의 공급에 관한 기록 : 5년 <br />\n   4) 계약 또는 청약철회 등에 관한 기록 : 5년 <br />\n   5) 표시/광고에 관한 기록 : 6개월 <br />\n   2. 정보주체로부터 사전에 동의를 받은 경우 : 정보주체가 사전 동의한 기간\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default SensitiveComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport SensitiveStyledContainer from './sensitive.styled';\nimport Sensitive from './sensitive';\n\nclass SensitiveContainer extends React.PureComponent {\n render() {\n return (\n <SensitiveStyledContainer component={this.props.isComponent || undefined}>\n <Sensitive {...this.props} />\n </SensitiveStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\nexport default connect(mapStateToProps, mapDispatchToProps)(SensitiveContainer);\n","import styled from 'styled-components';\nimport { sizeHandler } from '../../../theme';\nconst AdvertisementStyledContainer = styled.div`\n * {\n thead {\n border: 1px solid gray;\n text-align: center;\n\n tr {\n font-weight: bold;\n }\n }\n\n tbody {\n td:nth-child(2),\n td:nth-child(3) {\n text-align: center;\n }\n }\n\n tr {\n border: 1px solid gray;\n }\n\n td {\n padding: 0.5rem;\n border: 1px solid gray;\n }\n }\n\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default AdvertisementStyledContainer;\n","import React from 'react';\n\nclass AdvertisementComponent extends React.PureComponent {\n render() {\n return (\n <div className='terms-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>[맞춤 광고] (주)블루카멜 개인정보 수집 및 이용 동의 확인서</h2>\n </div>\n\n <div className='context-block'>\n <div className='info'>\n <p className='title'>\n <b>[ 개인정보 처리 항목 ]</b> <br />\n 가입경로, 가입자 생년월일, 가입자 성별, 가입자 휴대전화번호, 서비스 종류, 이동 수단, 이메일 주소, 결제 카드사, 카드사, 환자\n 나이, 환자 성별, 환자 휴대전화번호, <b>다음 진료 일정 정리</b> <br />* ‘<b>다음 진료 일정 정리</b>’는 민감 정보에 해당\n </p>\n <p className='title'>\n <b>[ 개인정보의 수집 및 이용 동의 거부 시 불이익 ]</b> <br />\n 정보주체는 개인정보 수집 및 이용에 동의를 거부할 권리가 있습니다. 맞춤 광고 목적의 항목에 대해 거부하더라도,\n ‘(주)블루카멜(개인정보처리자)’이 제공하는 서비스를 전부 또는 일부를 이용하실 수 있습니다.\n </p>\n <p className='title'>\n <b>[ 개인정보의 보유 및 이용 기간 ]</b> <br />\n ① 위에서 제시한 처리 목적과 관련한 개인정보는 수집 및 이용에 대한 동의일부터 회원 탈퇴 후 2년까지\n ‘(주)블루카멜(개인정보처리자)’이 보유 및 처리합니다. <br />\n ② 다음과 같은 경우에는 ‘(주)블루카멜(개인정보처리자)’이 개인정보를 제1항에서 정한 기간과 달리 보유 및 처리할 수 있습니다. <br />\n   1. 다음과 같이 관련 법령에 의하여 보존할 필요성이 있는 경우 <br />\n   1) 신용정보의 수집/처리 및 이용 등에 관한 기록 : 3년 <br />\n   2) 소비자의 불만 또는 분쟁처리에 관한 기록 : 3년 <br />\n   3) 대금결제 및 재화 등의 공급에 관한 기록 : 5년 <br />\n   4) 계약 또는 청약철회 등에 관한 기록 : 5년 <br />\n   5) 표시/광고에 관한 기록 : 6개월 <br />\n   2. 정보주체로부터 사전에 동의를 받은 경우 : 정보주체가 사전 동의한 기간\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default AdvertisementComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport AdvertisementStyledContainer from './advertisement.styled';\nimport Advertisement from './advertisement';\n\nclass AdvertisementContainer extends React.PureComponent {\n render() {\n return (\n <AdvertisementStyledContainer component={this.props.isComponent || undefined}>\n <Advertisement {...this.props} />\n </AdvertisementStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\nexport default connect(mapStateToProps, mapDispatchToProps)(AdvertisementContainer);\n","import React from 'react';\nimport { notification, message, Button, Checkbox, Select } from 'antd';\nimport validator from 'validator';\nimport styled from 'styled-components';\n\nimport { LOCAL, MATE, USER, KAKAO } from '../../../../Lib/variables';\nimport axios from '../../../../Lib/axios';\nimport { CommonWithmateModal } from '../../../../Components/newModal';\nimport { DivisionLine, WithmateSelect, WithmateInput } from '../../../../Components/Common/input';\n\nimport Terms from '../../../Policy/Terms';\nimport Privacy from '../../../Policy/Privacy';\nimport Marketing from '../../../Policy/Marketing';\nimport EssentialNormal from '../../../Policy/Essential/Normal';\nimport EssentialSensitive from '../../../Policy/Essential/Sensitive';\nimport SelectiveNormal from '../../../Policy/Selective/Normal';\nimport SelectiveSensitive from '../../../Policy/Selective/Sensitive';\nimport Advertisement from '../../../Policy/Advertisement';\n\nclass RegisterComponent extends React.PureComponent {\n state = {\n modal: false,\n modalInfo: '',\n modalTitle: '',\n createdAuthCode: '',\n authCodeCheck: false,\n vaildated: false,\n };\n\n componentWillUnmount = () => {\n this.onEdit({ type: 'clear', value: '' });\n };\n\n onEdit = ({ type, value }) => {\n this.props.editRegisterForm({ type, value });\n };\n\n handleCheckAllChange = () => {\n const { registerForm } = this.props.auth;\n\n this.onEdit({ type: 'checkAll', value: !registerForm.checkAll });\n\n this.onEdit({ type: 'termsOfUse', value: !registerForm.checkAll });\n this.onEdit({ type: 'privacyPolicy', value: !registerForm.checkAll });\n this.onEdit({ type: 'essentialGeneral', value: !registerForm.checkAll });\n this.onEdit({ type: 'essentialSensitive', value: !registerForm.checkAll });\n this.onEdit({ type: 'selectiveGeneral', value: !registerForm.checkAll });\n this.onEdit({ type: 'selectiveSensitive', value: !registerForm.checkAll });\n this.onEdit({ type: 'selectiveAdvertise', value: !registerForm.checkAll });\n };\n\n onSendMailHandler = event => {\n event.preventDefault();\n\n const { email } = this.props.auth.registerForm;\n\n if (!email) {\n this.setState({\n modal: true,\n modalTitle: '이메일 미입력',\n modalInfo: '이메일이 입력되지 않았습니다. 사용하실 이메일을 입력해주세요.',\n });\n return;\n }\n\n axios.post('/v1/auth/create/code', { email: this.props.auth.registerForm.email }).then(response => {\n console.log('>> 인증코드가 발송되었습니다.');\n alert('인증코드가 발송되었습니다.', response);\n });\n };\n\n onCheckHandler = event => {\n event.preventDefault();\n const { email, code } = this.props.auth.registerForm;\n axios.get('/v1/auth/vaildate/code', { params: { email, code } }).then(resolve => {\n const { data } = resolve;\n if (data === 'success') {\n notification.open({\n message: '이메일 인증완료',\n description: '이메일 인증이 완료되었습니다.',\n type: 'success',\n });\n } else {\n notification.open({\n message: '이메일 인증실패',\n description: '이메일 인증에 실패하였습니다. 다시 입력하세요.',\n type: 'warning',\n });\n }\n\n this.setState({ vaildated: true });\n });\n };\n\n pageOneValidator = () => {\n const { termsOfUse, privacyPolicy, essentialGeneral, essentialSensitive } = this.props.auth.registerForm;\n\n if (!termsOfUse) {\n return this.setState({\n modal: true,\n modalTitle: '서비스 이용 약관에 동의해주세요.',\n modalInfo: '원활한 서비스 이용을 위해 위드메이트 서비스 이용약관에 동의해주세요.',\n });\n }\n\n if (!privacyPolicy) {\n return this.setState({\n modal: true,\n modalTitle: '개인 정보 처리 방침에 동의해주세요.',\n modalInfo: '원활한 서비스 이용을 위해 위드메이트 개인 정보 처리 방침에 동의해주세요.',\n });\n }\n\n if (!essentialGeneral) {\n return this.setState({\n modal: true,\n modalTitle: '[필수/일반] 개인정보 수집 및 이용 동의에 동의해주세요.',\n modalInfo: '원활한 서비스 이용을 위해 위드메이트 [필수/일반] 개인정보 수집 및 이용 동의에 동의해주세요.',\n });\n }\n\n if (!essentialSensitive) {\n return this.setState({\n modal: true,\n modalTitle: '[필수/민감] 개인정보 수집 및 이용 동의에 동의해주세요.',\n modalInfo: '원활한 서비스 이용을 위해 위드메이트 [필수/일반] 개인정보 수집 및 이용 동의에 동의해주세요.',\n });\n }\n\n this.onEdit({ type: 'page', value: 2 });\n };\n\n pageSndValidator = () => {\n const { userType, name, photo = '', contact, sex, birth } = this.props.auth.registerForm;\n\n if (!name)\n return this.setState({\n modal: true,\n modalTitle: '성함을 입력해주세요.',\n modalInfo: '보다 원활한 서비스 이용을 위해 고객님의 성함을 입력해주세요.',\n });\n\n if (!sex) {\n return this.setState({\n modal: true,\n modalTitle: '성별을 선택해주세요.',\n modalInfo: '보다 원활한 서비스 이용을 위해 고객님의 성별을 선택해주세요.',\n });\n }\n\n if (!birth || birth.length < 8) {\n return this.setState({\n modal: true,\n modalTitle: '생년월일을 입력해주세요.',\n modalInfo: '보다 원활한 서비스 이용을 위해 고객님의 생년월일을 입력해주세요.',\n });\n }\n\n if (userType === USER) {\n if (!contact || contact.length < 11) {\n return this.setState({\n modal: true,\n modalTitle: '연락처를 입력해주세요.',\n modalInfo: '원활한 위드메이트 서비스를 이용을 위해 고객님의 연락처를 입력해주세요.',\n });\n }\n }\n\n if (userType === MATE) {\n if (!photo) {\n return this.setState({\n modal: true,\n modalTitle: '메이트님의 프로필 사진을 설정해주세요.',\n modalInfo: '실물 사진(ex. 증명사진)으로 프로필 사진을 설정하시면 고객과의 원활한 소통에 도움이 됩니다.',\n });\n }\n\n if (!contact) {\n return this.setState({\n modal: true,\n modalTitle: '메이트님의 연락처를 입력해주세요.',\n modalInfo: '메이트님의 신원 확인을 위해 위드메이트에서 연락이 갈 예정입니다. 올바른 연락처를 입력해주세요.',\n });\n }\n }\n\n this.onEdit({ type: 'page', value: 3 });\n };\n\n onRegister = () => {\n const {\n termsOfUse, // 서비스 이용약관\n privacyPolicy, // 개인정보처리방침 동의\n essentialGeneral, // 필수_일반\n essentialSensitive, // 필수_민감\n selectiveGeneral = false, // 선택_일반\n selectiveSensitive = false, // 선택_민감\n selectiveAdvertise = false, // 선택_광고\n email,\n password,\n repassword,\n connection,\n recommenderName,\n longtermCare = false,\n marketing = false,\n userType,\n type = LOCAL,\n name,\n photo,\n contact,\n birth,\n code,\n identify,\n reason,\n } = this.props.auth.registerForm;\n\n const urlSource = window.location.search === '?source=dlive' ? 'dlive' : 'withmate';\n\n if (type === LOCAL) {\n if (!email || !validator.isEmail(email)) {\n return this.setState({\n modal: true,\n modalTitle: '올바른 이메일을 입력해주세요',\n modalInfo: '잘못된 이메일을 입력하시면 예약 알림을 받지 못하는 등의 불이익을 받으실 수 있습니다',\n });\n }\n\n if (!password || password.length < 10) {\n return this.setState({\n modal: true,\n modalTitle: '비밀번호를 확인해주세요.',\n modalInfo: '고객님의 개인정보 보호를 위해 비밀번호는 최소 10자리 이상으로 설정해주세요.',\n });\n }\n\n if (!repassword || password !== repassword) {\n return this.setState({\n modal: true,\n modalTitle: '비밀번호가 일치하지 않습니다.',\n modalInfo: '입력하신 비밀번호와 비밀번호 확인란의 정보가 일치하지 않습니다.',\n });\n }\n\n if (!this.state.vaildated || !code) {\n return this.setState({\n modal: true,\n modalTitle: '이메일 인증을 먼저 진행해주세요.',\n modalInfo: '이메일을 입력 후 인증을 먼저 진행해주세요.',\n });\n }\n }\n\n if (!connection) {\n return this.setState({\n modal: true,\n modalTitle: '유입 경로를 선택해주세요.',\n modalInfo: '위드메이트를 알게된 경로를 선택해주세요.',\n });\n }\n\n if (!identify) {\n return this.setState({\n modal: true,\n modalTitle: '보호자인지 본인인지 선택해주세요.',\n modalInfo: '보다 원활한 서비스 이용을 위해 보호자인지 본인인지 선택해주세요.',\n });\n }\n\n if (identify === '보호자') {\n if (!reason) {\n return this.setState({\n modal: true,\n modalTitle: '이용하는 이유를 입력하세요.',\n modalInfo: '위드메이트를 이용하는 이유를 입력해주세요.',\n });\n }\n }\n\n this.props\n .checkUserId({ id: email, userType, type })\n .then(resolve => {\n if (!resolve) {\n this.props\n .register({\n termsOfUse,\n privacyPolicy,\n essentialGeneral,\n essentialSensitive,\n selectiveGeneral,\n selectiveSensitive,\n selectiveAdvertise,\n\n id: email,\n password,\n userType,\n name,\n code,\n identify,\n reason,\n type,\n photo,\n contact,\n marketing,\n connection,\n recommenderName,\n birth,\n longtermCare,\n urlSource:\n window.location.search === '?source=dlive' ? 'dlive' : window.location.search === '?source=metlife' ? 'metlife' : 'withmate',\n })\n .then(resolve => {\n // 메이트 회원가입 처리\n if (userType === MATE && resolve && resolve.message === 'success') {\n this.props.editRegisterForm({ type: 'clear', value: '' });\n\n notification.open({\n message: '회원가입을 완료하였습니다.',\n description: '관리자의 회원가입 승인 후 활동가능합니다.',\n type: 'success',\n });\n }\n\n if (userType === USER && resolve === 'check parameters') {\n notification.open({\n message: '회원가입에 실패하였습니다.',\n description: '누락된 정보가 없는지 확인해주세요.',\n type: 'success',\n });\n }\n\n if (userType === USER && resolve && resolve.message === 'success') {\n this.props.history.push(`/success`);\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n } else {\n return this.setState({\n modal: true,\n modalTitle: '이미 존재하는 사용자의 이메일입니다.',\n modalInfo: '아이디를 확인해주세요. 비밀번호를 분실하신 경우 비밀번호 찾기를 이용해주세요.',\n });\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n setPhoto = ({ file }) => {\n this.onEdit({ type: 'photo', value: file.originFileObj });\n };\n\n formCompleteStatus = () => {\n let valid = true;\n if (!this.props.auth || !this.props.auth.registerForm) return false;\n\n const { page } = this.props.auth.registerForm;\n if (page === 1) {\n const { termsOfUse, privacyPolicy, essentialGeneral, essentialSensitive, selectiveGeneral, selectiveSensitive, selectiveAdvertise } =\n this.props.auth.registerForm;\n if (!termsOfUse) valid = false;\n if (!privacyPolicy) valid = false;\n if (!essentialGeneral) valid = false;\n if (!essentialSensitive) valid = false;\n }\n\n if (page === 2) {\n const { name, contact, sex, birth } = this.props.auth.registerForm;\n if (!name) valid = false;\n if (!contact || contact.length < 11) valid = false;\n if (!sex) valid = false;\n if (!birth || birth.length < 8) valid = false;\n }\n\n if (page === 3) {\n const { email, password, repassword, connection, recommenderName, code, type, identify, reason, longtermCare } = this.props.auth.registerForm;\n if (type === LOCAL) {\n if (!email) valid = false;\n if (!password) valid = false;\n if (!repassword) valid = false;\n if (!code) valid = false;\n if (!this.state.vaildated) valid = false;\n }\n if (!connection) valid = false;\n if (!identify) valid = false;\n\n if (identify === '보호자') {\n if (!reason) valid = false;\n }\n }\n\n return valid;\n };\n\n render() {\n const { registerForm } = this.props.auth;\n // console.log(registerForm)\n const status = this.formCompleteStatus();\n\n return (\n <div className='register-container'>\n <div className='inner-container'>\n <div className='register-form'>\n <div className='title-wrapper'>\n <p>회원가입</p>\n <span>{registerForm.page}/3</span>\n </div>\n {registerForm.page === 1 ? (\n <div className='form snd'>\n <Agree>\n <Checkbox onChange={this.handleCheckAllChange} value={registerForm.checkAll || false}>\n 전체 동의하기\n </Checkbox>\n </Agree>\n <p style={{ fontSize: '12px', color: 'gray' }}>\n [선택/일반] 개인정보 수집 및 이용 동의, [선택/민감] 개인정보 수집 및 이용 동의, [맞춤 광고] 개인정보 수집 및 이용 동의를\n 포함합니다.\n </p>\n <br />\n\n <Agree>\n <Checkbox\n onChange={() => {\n this.onEdit({ type: 'termsOfUse', value: !registerForm.termsOfUse });\n }}\n checked={registerForm.termsOfUse || false}\n >\n [필수] 서비스 이용 약관\n </Checkbox>\n <AgreeLinkText\n onClick={() => {\n this.setState({ modal: true, modalTitle: '이용약관 확인', modalInfo: <Terms isComponent /> });\n }}\n >\n <p style={{ color: '#A5A5A5' }}>내용보기</p>\n </AgreeLinkText>\n </Agree>\n\n <Agree>\n <Checkbox\n onChange={() => {\n this.onEdit({ type: 'privacyPolicy', value: !registerForm.privacyPolicy });\n }}\n checked={registerForm.privacyPolicy || false}\n >\n [필수] 개인 정보 처리 방침 동의\n </Checkbox>\n\n <AgreeLinkText\n onClick={() => {\n this.setState({ modal: true, modalTitle: '개인정보 처리방침 확인', modalInfo: <Privacy isComponent /> });\n }}\n >\n <p style={{ color: '#A5A5A5' }}>내용보기</p>\n </AgreeLinkText>\n </Agree>\n\n <Agree>\n <Checkbox\n onChange={() => {\n this.onEdit({ type: 'essentialGeneral', value: !registerForm.essentialGeneral });\n }}\n checked={registerForm.essentialGeneral || false}\n >\n [필수/<span style={{ color: '#3399ff' }}>일반</span>] 개인정보 수집 및 이용 동의\n </Checkbox>\n <AgreeLinkText\n onClick={() => {\n this.setState({\n modal: true,\n modalTitle: '[필수/일반] 개인정보 수집 및 이용 동의',\n modalInfo: <EssentialNormal isComponent />,\n });\n }}\n >\n <p style={{ color: '#A5A5A5' }}>내용보기</p>\n </AgreeLinkText>\n </Agree>\n <Agree>\n <Checkbox\n onChange={() => {\n this.onEdit({ type: 'essentialSensitive', value: !registerForm.essentialSensitive });\n }}\n checked={registerForm.essentialSensitive || false}\n >\n [필수/<span style={{ color: '#ff4040' }}>민감</span>] 개인정보 수집 및 이용 동의\n </Checkbox>\n <AgreeLinkText\n onClick={() => {\n this.setState({\n modal: true,\n modalTitle: '[필수/민감] 개인정보 수집 및 이용 동의',\n modalInfo: <EssentialSensitive isComponent />,\n });\n }}\n >\n <p style={{ color: '#A5A5A5' }}>내용보기</p>\n </AgreeLinkText>\n </Agree>\n <Agree>\n <Checkbox\n onChange={() => {\n this.onEdit({ type: 'selectiveGeneral', value: !registerForm.selectiveGeneral });\n }}\n checked={registerForm.selectiveGeneral || false}\n >\n [<span style={{ color: '#03c75a' }}>선택</span>/<span style={{ color: '#3399ff' }}>일반</span>] 개인정보 수집 및 이용\n 동의\n </Checkbox>\n <AgreeLinkText\n onClick={() => {\n this.setState({\n modal: true,\n modalTitle: '[선택/일반] 개인정보 수집 및 이용 동의',\n modalInfo: <SelectiveNormal isComponent />,\n });\n }}\n >\n <p style={{ color: '#A5A5A5' }}>내용보기</p>\n </AgreeLinkText>\n </Agree>\n <Agree>\n <Checkbox\n onChange={() => {\n this.onEdit({ type: 'selectiveSensitive', value: !registerForm.selectiveSensitive });\n }}\n checked={registerForm.selectiveSensitive || false}\n >\n [<span style={{ color: '#03c75a' }}>선택</span>/<span style={{ color: '#ff4040' }}>민감</span>] 개인정보 수집 및 이용\n 동의\n </Checkbox>\n <AgreeLinkText\n onClick={() => {\n this.setState({\n modal: true,\n modalTitle: '[선택/민감] 개인정보 수집 및 이용 동의',\n modalInfo: <SelectiveSensitive isComponent />,\n });\n }}\n >\n <p style={{ color: '#A5A5A5' }}>내용보기</p>\n </AgreeLinkText>\n </Agree>\n <Agree>\n <Checkbox\n onChange={() => {\n this.onEdit({ type: 'selectiveAdvertise', value: !registerForm.selectiveAdvertise });\n }}\n checked={registerForm.selectiveAdvertise || false}\n >\n [<span style={{ color: '#03c75a' }}>선택</span>/<span style={{ color: '#FF6666' }}>광고</span>] 개인정보 수집 및 이용\n 동의\n </Checkbox>\n <AgreeLinkText\n onClick={() => {\n this.setState({\n modal: true,\n modalTitle: '[맞춤 광고] 개인정보 수집 및 이용 동의',\n modalInfo: <Advertisement isComponent />,\n });\n }}\n >\n <p style={{ color: '#A5A5A5' }}>내용보기</p>\n </AgreeLinkText>\n </Agree>\n\n <DivisionLine />\n\n <Button\n onClick={() => {\n if (!status) return null;\n\n this.pageOneValidator();\n }}\n type='primary'\n style={!status ? { backgroundColor: '#E6E6E6', border: 0, cursor: 'not-allowed' } : {}}\n >\n 계속하기\n </Button>\n </div>\n ) : registerForm.page === 2 ? (\n <div className='form snd'>\n <label>이름</label>\n <WithmateInput\n type='text'\n placeholder='ex. 홍길동'\n value={registerForm.name || ''}\n onChange={ev => {\n this.onEdit({ type: 'name', value: ev.target.value });\n }}\n />\n\n <DivisionLine small />\n\n <label>성별</label>\n <div className='type-button-wrapper'>\n <div\n className={`type-button ${registerForm.sex && registerForm.sex === '남' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'sex', value: '남' });\n }}\n >\n 남자\n </div>\n <div\n className={`type-button ${registerForm.sex && registerForm.sex === '녀' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'sex', value: '녀' });\n }}\n >\n 여자\n </div>\n </div>\n\n <DivisionLine small />\n\n <label>생년월일</label>\n <WithmateInput\n type='text'\n maxLength={8}\n placeholder='숫자만 입력해주세요 (ex. 19880320)'\n value={registerForm.birth || ''}\n onChange={ev => {\n this.onEdit({ type: 'birth', value: ev.target.value });\n }}\n />\n\n <DivisionLine />\n\n <label>연락처</label>\n <WithmateInput\n type='text'\n maxLength={11}\n placeholder='숫자만 입력해주세요.(ex. 01014231324)'\n value={registerForm.contact || ''}\n onChange={ev => {\n this.onEdit({ type: 'contact', value: ev.target.value });\n }}\n />\n\n <DivisionLine />\n\n <Button\n onClick={() => {\n if (!status) return null;\n\n this.pageSndValidator();\n }}\n type='primary'\n style={!status ? { backgroundColor: '#E6E6E6', border: 0, cursor: 'not-allowed' } : {}}\n >\n 계속하기\n </Button>\n\n <div className='link-wrapper'>\n <span className='text'>메이트 신청을 희망하시나요? </span>\n <span\n onClick={() => {\n this.props.history.push('/mate/apply');\n }}\n className='link'\n >\n 메이트 신청하기\n </span>\n </div>\n\n <div className='link-wrapper'>\n <span className='text'>이미 계정이 있으신가요? </span>\n <span\n onClick={() => {\n this.props.history.push('/user/login');\n }}\n className='link'\n >\n 로그인\n </span>\n </div>\n </div>\n ) : (\n <>\n <div className='form fst'>\n {registerForm.type === KAKAO ? null : (\n <>\n <label>이메일</label>\n <div>\n <WithmateInput\n type='email'\n value={registerForm.email || ''}\n onChange={ev => {\n this.onEdit({ type: 'email', value: ev.target.value });\n }}\n required\n style={{ width: '180px' }}\n placeholder='이메일을 입력해주세요.'\n />\n <button\n onClick={this.onSendMailHandler}\n style={{\n width: '90px',\n height: '44px',\n marginLeft: '10px',\n backgroundColor: '#3bc1ff',\n borderColor: '#3bc1ff',\n border: '0',\n outline: '0',\n borderRadius: '3px',\n }}\n >\n 인증하기\n </button>\n </div>\n\n <div>\n <WithmateInput\n type='password'\n value={registerForm.code || ''}\n onChange={ev => {\n this.onEdit({ type: 'code', value: ev.target.value });\n }}\n required\n style={{ width: '180px' }}\n placeholder='인증번호를 입력해주세요.'\n />\n <button\n onClick={this.onCheckHandler}\n style={{\n width: '90px',\n height: '44px',\n marginLeft: '10px',\n backgroundColor: '#3bc1ff',\n borderColor: '#3bc1ff',\n border: '0',\n outline: '0',\n borderRadius: '3px',\n }}\n >\n 확인\n </button>\n </div>\n\n <DivisionLine small />\n\n <label style={{ display: 'block' }}>비밀번호</label>\n <WithmateInput\n password='true'\n type='password'\n onChange={ev => {\n this.onEdit({ type: 'password', value: ev.target.value });\n }}\n placeholder='10자리 이상 비밀번호를 입력해주세요.'\n value={registerForm.password || ''}\n />\n\n <DivisionLine small />\n\n <label style={{ display: 'block' }}>비밀번호 확인</label>\n <WithmateInput\n type='password'\n password='true'\n onChange={ev => {\n this.onEdit({ type: 'repassword', value: ev.target.value });\n }}\n placeholder='비밀번호를 확인해주세요.'\n value={registerForm.repassword || ''}\n />\n\n <DivisionLine small />\n </>\n )}\n\n <label style={{ display: 'block' }}>위드메이트를 어떻게 알고 오셨나요?</label>\n <WithmateSelect\n style={{ height: '48px', width: '100%' }}\n placeholder='유입 경로를 선택해주세요.'\n value={registerForm.connection || undefined}\n onChange={value => {\n this.onEdit({ type: 'connection', value });\n }}\n >\n <Select.Option value='메트라이프'>메트라이프(360Future)</Select.Option>\n <Select.Option value='딜라이브'>딜라이브</Select.Option>\n <Select.Option value='검색'>검색</Select.Option>\n <Select.Option value='언론기사'>언론기사</Select.Option>\n <Select.Option value='광고'>광고</Select.Option>\n <Select.Option value='지인 추천'>지인 추천</Select.Option>\n </WithmateSelect>\n\n <DivisionLine small />\n\n {registerForm.connection === '지인 추천' ? (\n <>\n <label style={{ display: 'block' }}>추천인 성함을 입력하세요.</label>\n <WithmateInput\n type='text'\n onChange={ev => {\n this.onEdit({ type: 'recommenderName', value: ev.target.value });\n }}\n value={registerForm.recommenderName || ''}\n />\n </>\n ) : null}\n\n <DivisionLine small />\n\n <label>본인인가요 ? 보호자인가요 ?</label>\n <div className='type-button-wrapper'>\n <div\n className={`type-button ${registerForm.identify && registerForm.identify === '본인' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'identify', value: '본인' });\n }}\n >\n 본인\n </div>\n <div\n className={`type-button ${registerForm.identify && registerForm.identify === '보호자' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'identify', value: '보호자' });\n }}\n >\n 보호자\n </div>\n </div>\n\n <DivisionLine small />\n\n {registerForm.identify === '본인' ? null : (\n <>\n <label style={{ display: 'block' }}>이용하는 이유 (보호자 선택시)</label>\n <WithmateInput\n type='text'\n onChange={ev => {\n this.onEdit({ type: 'reason', value: ev.target.value });\n }}\n placeholder='육아, 직장등'\n value={registerForm.reason || ''}\n />\n\n <DivisionLine small />\n </>\n )}\n\n {/* <Agree>\n <Checkbox\n onChange={() => {\n this.onEdit({ type: 'longtermCare', value: !registerForm.longtermCare });\n }}\n value={registerForm.agree || false}\n >\n 장기요양등급 상담 신청하기 (선택)\n </Checkbox>\n </Agree>\n <Alert>*장기요양등급 상담 신청을 원하시면 체크해주세요.</Alert> */}\n\n <DivisionLine small />\n\n <Agree>\n <Checkbox\n onClick={() => {\n this.onEdit({ type: 'marketing', value: !registerForm.marketing });\n }}\n >\n 개인정보 마케팅 활용 동의 (선택)\n </Checkbox>\n <a\n className='point'\n onClick={() => {\n this.setState({ modal: true, modalTitle: '개인정보 마케팅 활용 동의', modalInfo: <Marketing isComponent /> });\n }}\n >\n 더보기 {'>'}\n </a>\n </Agree>\n\n <Alert>*개인 정보 활용에 동의할 경우, 2000 포인트를 지급합니다.</Alert>\n\n <DivisionLine small />\n\n <Button\n type='primary'\n onClick={() => {\n this.onRegister();\n }}\n style={{ display: 'block' }}\n style={!status ? { backgroundColor: '#E6E6E6', border: 0, cursor: 'not-allowed' } : {}}\n >\n 가입하기\n </Button>\n\n <div className='link-wrapper'>\n <span className='text'>이미 계정이 있으신가요? </span>\n <a\n className='link'\n onClick={() => {\n this.props.history.push('/user/login');\n }}\n >\n 로그인\n </a>\n </div>\n </div>\n </>\n )}\n </div>\n </div>\n\n {this.state.modal && (\n <CommonWithmateModal\n visible={this.state.modal}\n config={{\n title: this.state.modalTitle,\n description: this.state.modalInfo,\n confirmText: '확인 및 닫기',\n noClose: false,\n }}\n onOk={() => {\n this.setState({ modal: false, modalTitle: '', modalInfo: '' });\n }}\n onCancel={() => {\n this.setState({ modal: false, modalTitle: '', modalInfo: '' });\n }}\n />\n )}\n </div>\n );\n }\n}\nexport default RegisterComponent;\n\nconst Agree = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n margin-bottom: 8px;\n\n span {\n font-size: 14px;\n line-height: 21px;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n span.point {\n color: #3bc1ff;\n }\n\n a.point {\n color: #3bc1ff;\n cursor: pointer;\n text-decoration: none;\n }\n\n .ant-checkbox-wrapper {\n margin-bottom: 0px !important;\n }\n`;\n\nconst Alert = styled.p`\n margin-bottom: 0px;\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 20px;\n letter-spacing: -0.15px;\n color: #ff5500;\n`;\n\nconst AgreeLinkText = styled.p`\n margin-bottom: 4px;\n font-size: 13px;\n color: rgba(0, 0, 0, 0.7);s\n\n cursor: pointer;\n &:hover {\n color: #3bc1ff;\n transition: all 0.3s;\n }\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport RegisterStyledContainer from './register.styled';\nimport Register from './register';\nimport { register, editRegisterForm, checkUserId, confirmEmailAuth } from '../../../../Reducer/Modules/auth';\n\nclass RegisterPage extends React.PureComponent {\n render() {\n return (\n <RegisterStyledContainer>\n <Register {...this.props} />\n </RegisterStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ auth }) => ({\n auth,\n});\n\nconst mapDispatchToProps = dispatch => ({\n editRegisterForm: ({ type, value }) => dispatch(editRegisterForm({ type, value })),\n register: info => dispatch(register(info)),\n checkUserId: ({ id, userType, type }) => dispatch(checkUserId({ id, userType, type })),\n confirmEmailAuth: verificationCode => dispatch(confirmEmailAuth(verificationCode))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RegisterPage);","import React from 'react';\nimport { connect } from 'react-redux';\nimport { KAKAO } from '../../../../Lib/variables';\nimport { logout } from '../../../../Reducer/Modules/auth';\n\nclass LogoutPage extends React.PureComponent {\n componentDidMount = () => {\n const { id, userType, type } = this.props.auth;\n if (!id || !userType) {\n localStorage.clear();\n return (window.location.href = '/');\n }\n if( type === KAKAO && window.Kakao) {\n window.Kakao.Auth.logout()\n }\n this.props.logout({ id, userType });\n };\n\n render() {\n return <div></div>;\n }\n}\n\nconst mapStateToProps = ({ auth }) => ({\n auth,\n});\nconst mapDispatchToProps = dispatch => ({\n logout: ({ id, userType }) => dispatch(logout({ id, userType })),\n});\nexport default connect(mapStateToProps, mapDispatchToProps)(LogoutPage);\n","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../../../theme';\n\nconst StyledFindContainer = styled.div`\n margin-top: 55px;\n min-height: 100vh;\n background-image: url('/assets/images/main-background.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n .find-container {\n .inner-container {\n padding: 0px;\n padding-top: 144px;\n padding-bottom: 100px;\n\n .login-form {\n background-color: white;\n border-radius: 8px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 340px;\n margin: 0 auto;\n padding: 24px;\n\n .login-title {\n margin-bottom: 24px;\n\n p {\n font-size: ${sizeHandler(32)};\n font-weight: bold;\n letter-spacing: -0.7px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .form {\n label {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.15px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n input {\n height: 40px;\n border: solid 1px #e6e6e6;\n margin-bottom: 20px;\n }\n\n button {\n width: 100%;\n height: 46px;\n margin-top: 4px;\n margin-bottom: 16px;\n\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n }\n\n .link-wrapper {\n display: flex;\n justify-content: center;\n\n .link {\n cursor: pointer;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.5);\n\n &:first-child {\n border-right: 1px solid #e6e6e6;\n padding-right: 16px;\n }\n\n &:last-child {\n margin-left: 16px;\n }\n }\n }\n }\n\n .form-user-type {\n height: 36px;\n margin-bottom: 20px;\n border-radius: 4px;\n border: 1px solid #e6e6e6;\n display: flex;\n align-items: center;\n overflow: hidden;\n\n .type {\n flex: 1;\n height: 100%;\n line-height: 36px;\n background-color: #ffffff;\n cursor: pointer;\n\n &:first-child {\n border-right: 1px solid #e6e6e6;\n }\n\n p {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n text-align: center;\n color: #606060;\n }\n\n &.active {\n background-color: #606060;\n\n p {\n color: #ffffff;\n }\n }\n }\n }\n }\n }\n }\n`;\nexport default StyledFindContainer;\n","import React from 'react';\nimport { notification, Input, Button, message } from 'antd';\nimport { USER, MATE } from '../../../../Lib/variables';\n\nclass Find extends React.PureComponent {\n state = {\n alert: '',\n };\n\n onEdit = ({ type, value }) => {\n this.props.editFindForm({ type, value });\n };\n\n onFind = () => {\n const { email, userType } = this.props.auth.findForm;\n\n this.props\n .findPassword({ id: email, userType })\n .then(resolve => {\n if (resolve === 'not exist') {\n return message.info('존재하지 않는 사용자 아이디입니다.');\n }\n\n if (resolve === 'success') {\n message.info('이메일로 임시 비밀번호가 전송되었습니다.');\n setTimeout(() => {\n this.props.history.push('/user/login');\n }, 1200);\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n render() {\n const { findForm } = this.props.auth;\n return (\n <div className='find-container'>\n <div className='inner-container'>\n <div className='login-form'>\n <div className='login-title'>\n <p>비밀번호 찾기</p>\n </div>\n <div className='form-user-type'>\n <div\n onClick={() => {\n this.onEdit({ type: 'userType', value: USER });\n }}\n className={`type ${findForm && findForm.userType === USER ? 'active' : undefined}`}\n >\n <p>일반</p>\n </div>\n <div\n onClick={() => {\n this.onEdit({ type: 'userType', value: MATE });\n }}\n className={`type ${findForm && findForm.userType === MATE ? 'active' : undefined}`}\n >\n <p>메이트</p>\n </div>\n </div>\n <div className='form'>\n <label>이메일</label>\n <Input\n type='email'\n placeholder='ex) korea@mail.com'\n value={findForm.email}\n onChange={ev => {\n this.onEdit({ type: 'email', value: ev.target.value });\n }}\n />\n <Button type='primary' onClick={this.onFind}>\n 이메일 전송하기\n </Button>\n\n <div className='link-wrapper'>\n <span\n className='link'\n onClick={() => {\n this.props.history.push('/user/login');\n }}\n >\n 로그인\n </span>\n <span\n className='link'\n onClick={() => {\n this.props.history.push('/user/register');\n }}\n >\n 회원가입\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default Find;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledFindContainer from './find.styled';\nimport Find from './find';\nimport { editFindPasswordForm, findPassword } from './../../../../Reducer/Modules/auth';\n\nclass FindPage extends React.PureComponent {\n render() {\n return (\n <StyledFindContainer>\n <Find {...this.props} />\n </StyledFindContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ auth }) => ({\n auth,\n});\n\nconst mapDispatchToProps = dispatch => ({\n editFindForm: ({ type, value }) => dispatch(editFindPasswordForm({ type, value })),\n findPassword: ({ id, userType }) => dispatch(findPassword({ id, userType })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FindPage);\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../../theme';\n\nconst StyledMateContainer = styled.div`\n margin-top: 55px;\n\n .auth-container {\n // min-height: 100vh;\n // display: flex;\n flex-direction: column;\n background-color: rgba(0, 0, 0, 0.02);\n }\n\n .navigation-container {\n border-bottom: 1px solid #e6e6e6;\n background-color: white;\n\n .inner-container {\n padding: 0px;\n }\n\n .user-info-container {\n display: flex;\n align-items: center;\n padding: 82px 30px;\n\n .default-info {\n flex: 1;\n display: flex;\n align-items: center;\n\n div {\n width: 110px;\n height: 110px;\n border-radius: 55px;\n margin-right: 20px;\n background-color: #e6e6e6;\n position: relative;\n overflow: hidden;\n\n img {\n width: 100%;\n height: 110px;\n object-fit: cover;\n position: absolute;\n margin: auto;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n }\n\n span {\n display: inline-block;\n position: absolute;\n margin: auto;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n line-height: 110px;\n text-align: center;\n color: #ada5a5;\n }\n }\n\n p {\n flex: 1;\n font-size: ${sizeHandler(38)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: rgba(0, 0, 0, 0.8);\n\n > span {\n font-size: ${sizeHandler(38)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: rgba(0, 0, 0, 0.8);\n }\n\n br {\n display: block;\n }\n\n @media (max-width: 768px) {\n font-size: ${sizeHandler(26)};\n \n > span {\n font-size: ${sizeHandler(26)};\n }\n }\n }\n }\n\n .reserve-info {\n flex: 1;\n\n .title {\n margin-bottom: 12px;\n\n p {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n color: rgba(145, 145, 145, 0.8);\n }\n }\n\n .value-wrapper {\n display: flex;\n align-items; center;\n\n .value-block {\n flex: 1;\n\n .title {\n img {\n height: 14px;\n margin-right: 4px;\n }\n \n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n \n .value {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n color: #3bc1ff;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n }\n }\n }\n }\n\n .navigator {\n display: flex;\n align-items: center;\n padding: 0px 30px;\n\n @media (max-width: 768px) {\n padding: 0px 16px;\n }\n\n .nav-tab {\n margin-right: 32px;\n padding-bottom: 12px;\n position: relative;\n\n @media (max-width: 768px) {\n margin-right: 16px;\n }\n\n .name {\n font-size: ${sizeHandler(14)};\n text-align: center;\n cursor: pointer;\n\n &.active { \n font-weight: bold;\n color: #3bc1ff;\n }\n }\n\n span.underline {\n background-color: #3bc1ff;\n position: absolute;\n bottom: 0px;\n left: 0px;\n\n &.active {\n width: 100%;\n height: 3px;\n display: inline-block;\n }\n }\n }\n }\n\n @media (max-width: 768px) {\n .user-info-container {\n padding: 42px 16px;\n flex-direction: column;\n align-items: flex-start;\n\n .reserve-info {\n margin-top: 40px;\n }\n\n .value-wrapper {\n flex-direction: column;\n\n .value-block:last-child {\n margin-top: 20px;\n }\n }\n }\n }\n }\n\n .usage-info-container {\n flex: 1;\n // background-color: rgba(0, 0, 0, 0.02);\n\n .inner-container {\n height: 100%;\n padding: 56px 30px;\n\n @media (max-width: 768px) {\n padding: 40px 16px;\n }\n }\n\n .filter-wrapper {\n margin-bottom: 20px;\n\n .filter {\n font-size: 14px;\n font-weight: bold;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n margin-right: 32px;\n cursor: pointer;\n }\n\n .filter.active {\n color: ${mainColor};\n }\n }\n }\n\n .user-info-wrapper {\n .wrapper {\n padding: 36px;\n background-color: white;\n border-radius: 4px;\n border: solid 1px #e6e6e6;\n float: left;\n width: calc(50% - 10px);\n \n @media (max-width: 768px) {\n width: 100%;\n }\n }\n \n .title-wrapper {\n font-size: ${sizeHandler(20)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 28px;\n }\n\n .service {\n margin-bottom: 20px;\n\n p.info {\n font-size: ${sizeHandler(12)};\n font-weight: normal;\n letter-spacing: -0.15px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n input {\n height: 36px;\n display: inline-block;\n width: 100%;\n }\n\n button {\n width: 100%;\n height: 48px;\n border-radius: 2px;\n color: white;\n }\n\n .ant-upload-drag-container {\n .title {\n margin-top: 12px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n }\n \n .reco {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n text-align: center;\n color: #a7a7a7;\n }\n }\n\n .flex-wrapper {\n display: flex;\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: #606060;\n cursor: pointer;\n }\n }\n }\n\n .default-info {\n margin-right: 20px;\n }\n\n .privacy-info {\n\n @media (max-width: 768px) {\n margin-top: 20px;\n }\n }\n\n .etc-info {\n margin-top: 20px;\n }\n }\n`;\n\nexport const UserPhoto = styled.div`\n width: 100%;\n height: 200px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n border-radius: 4px;\n border: 2px dotted #e9e9e9;\n // background-color: #e6e6e6;\n\n > img {\n width: 120px;\n height: 120px;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\nexport const GuideRowWrapper = styled.div`\n width: 100%;\n height: 293px;\n\n max-width: 372px;\n\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: solid 1px #f2f2f2;\n background-color: #ffffff;\n\n margin-right: 12px;\n\n @media (max-width: 768px) {\n > div:last-child {\n margin-right: 0px;\n }\n }\n`;\n\nexport const GuideRowWrapper2 = styled.div`\n width: 100%;\n height: 293px;\n\n max-width: 750px;\n\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: solid 1px #f2f2f2;\n background-color: #ffffff;\n\n margin-right: 12px;\n\n @media (max-width: 768px) {\n > div:last-child {\n margin-right: 0px;\n }\n }\n`;\n\nexport const GuideContainer = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: center;\n\n margin-bottom: 56px;\n\n > div:last-child {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: center;\n\n > div:last-child {\n margin-top: 12px;\n }\n }\n`;\n\nexport const GuideDescriptionSectionTitle = styled.div`\n margin-top: 0px;\n margin-bottom: 16pxs;\n\n border-bottom: 1px solid #f2f2f2;\n padding: 32px;\n padding-bottom: 24px;\n\n font-size: 20px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.56;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n text-decoration: underline;\n cursor: pointer;\n\n > img {\n text-decoration: none;\n width: 24px;\n height: 24px;\n object-fit: contain;\n\n margin-left: 4px;\n }\n`;\n\nexport const GuideDescriptionSection = styled.div`\n padding: 32px;\n padding-top: 24px;\n`;\n\nexport const GuideDescriptionSectionContent = styled.div`\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.86;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n word-break: keep-all;\n`;\n\nexport const StudyButton = styled.div`\n margin: 32px auto;\n\n height: 76px;\n width: fit-content;\n\n padding: 22px 30px;\n border-radius: 4px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: solid 2px #3bc1ff;\n background-color: #ffffff;\n\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: center;\n color: #3bc1ff;\n\n cursor: pointer;\n\n img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n\n margin-left: 8px;\n }\n\n @media (max-width: 768px) {\n font-size: 18px;\n height: 52px;\n padding: 12px 24px;\n }\n`;\n\nexport const AlertMessage = styled.div`\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.64;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ff5500;\n\n max-width: 682px;\n margin: 0 auto;\n\n word-break: keep-all;\n\n @media (max-width: 768px) {\n font-size: 14px;\n }\n`;\n\nexport default StyledMateContainer;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Input, message } from 'antd';\n\nimport { sizeHandler, mainColor } from '../../../theme';\nimport { colorParserByStatus } from '../../../Lib/utils';\nimport { ASSIST, UNEMER, HAPPYCARE } from '../../../Lib/variables';\n\nimport moment from 'moment';\n\nexport const InputFilter = ({ keyword, keywordHandler }) => (\n <FilterWrapper>\n <Input\n value={keyword}\n onChange={ev => {\n keywordHandler(ev.target.value);\n }}\n placeholder='예약번호, 이용자 성함 등을 검색해보세요.'\n />\n </FilterWrapper>\n);\n\nconst FilterWrapper = styled.div`\n margin-bottom: 12px;\n`;\n\nexport const CalleList = ({ list, onRow }) => {\n if (!list || list.length === 0) {\n return (\n <FullContainer>\n <Inner>\n <EmptyList>서비스 수행 내역이 없습니다.</EmptyList>\n </Inner>\n </FullContainer>\n );\n }\n\n return (\n <ListConatiner>\n {list.map((item, index) => {\n const serviceType =\n !item.productInfo || !item.productInfo.usePro || !item.productInfo.useBasic ? '' : item.service === 'unemergency' ? 'Pro' : 'Basic';\n const serviceName = (item.productInfo && item.productInfo.name && item.service && item.productInfo.name + serviceType) || '-';\n\n return (\n <ReserveItem\n key={item._id + index + 'call-list'}\n reserveCode={item.reserveCode}\n name={item.patient}\n serviceType={item.service}\n service={serviceName}\n reserveDate={moment(item.reserveDate).format('MM월 DD일 HH시mm분')}\n starting={item.call && item.call.status === '예약접수' ? item.shortStarting || '' : item.starting || ''}\n destination={item.destination}\n status={(item.call && item.call.status) || ''}\n onRow={() => {\n onRow(item);\n }}\n />\n );\n })}\n </ListConatiner>\n );\n};\n\nconst ReserveItem = ({ service, name, reserveDate, starting, destination, serviceType, status, onDetail, reserveCode, onRow }) => (\n <ItemContainer>\n <TitleSection>\n <ItemColumn>\n <ItemTitle>서비스 명</ItemTitle>\n <ItemContents style={{ color: mainColor }}>{service}</ItemContents>\n </ItemColumn>\n </TitleSection>\n\n <ContentSection>\n <ItemColumn>\n <ItemTitle>예약 상태</ItemTitle>\n <ItemContents>{status}</ItemContents>\n </ItemColumn>\n <ItemColumn>\n <ItemTitle>예약 코드</ItemTitle>\n <ItemContents>{reserveCode}</ItemContents>\n </ItemColumn>\n <ItemColumn>\n <ItemTitle>이용자 성함</ItemTitle>\n <ItemContents>{name}</ItemContents>\n </ItemColumn>\n <ItemColumn>\n <ItemTitle>병원 진료 예약 시간</ItemTitle>\n <ItemContents>{reserveDate}</ItemContents>\n </ItemColumn>\n {serviceType === 'unemergency' && (\n <ItemColumn>\n <ItemTitle>자택 주소</ItemTitle>\n <ItemContents>{starting}</ItemContents>\n </ItemColumn>\n )}\n <ItemColumn>\n <ItemTitle>병원 주소</ItemTitle>\n <ItemContents>{destination}</ItemContents>\n </ItemColumn>\n </ContentSection>\n\n <ItemColumn>\n <DetailButton onClick={onRow}>\n <span>상세정보 및 관리</span>\n </DetailButton>\n </ItemColumn>\n </ItemContainer>\n);\n\nconst EmptyList = styled.p`\n font-size: 20px;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 16px;\n position: relative;\n`;\n\nconst FullContainer = styled.div`\n width: 100%;\n min-height: 300px;\n`;\n\nconst Inner = styled.div`\n max-width: 1024px;\n margin: 0 auto;\n padding-top: 40px;\n\n @media (max-width: 1080px) {\n padding-left: 16px;\n padding-right: 16px;\n }\n\n @media (max-width: 768px) {\n padding-top: 40px;\n }\n`;\nconst TitleSection = styled.div``;\n\nconst ContentSection = styled.div`\n flex: 1;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: flex-start;\n\n overflow-y: scroll;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none; /* Chrome, Safari, Opera*/\n }\n`;\n\nconst ListConatiner = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n flex-wrap: wrap;\n\n > div:nth-child(3n) {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n > div:nth-child(3n) {\n margin-right: 16px;\n }\n\n > div:nth-child(2n) {\n margin-right: 0px;\n }\n }\n\n @media (max-width: 480px) {\n > div:nth-child(3n) {\n margin-right: 0px;\n }\n\n flex-direction: column;\n justify-content: center;\n }\n`;\n\nconst ItemContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n width: 340px;\n height: 410px;\n overflow: scroll;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none; /* Chrome, Safari, Opera*/\n }\n\n padding: 20px;\n margin-bottom: 16px;\n margin-right: 16px;\n\n border-radius: 4px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n background-color: #ffffff;\n\n @media (max-width: 768px) {\n margin-bottom: 16px;\n }\n\n @media (max-width: 480px) {\n width: 100%;\n max-width: initial;\n margin-right: 0px;\n }\n`;\n\nconst ItemTitle = styled.p`\n color: #a7a7a7;\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n margin: 0px;\n padding: 0px;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(11)};\n }\n`;\n\nconst ItemContents = styled.p`\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: #606060;\n margin: 0px;\n padding: 0px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(12)};\n margin-bottom: 4px;\n }\n`;\n\nconst ItemColumn = styled.div`\n width: 100%;\n margin-bottom: 6px;\n\n @media (max-width: 768px) {\n display: ${props => (props.hiddenMobile ? 'none' : 'block')};\n width: 100%;\n }\n`;\n\nconst DetailButton = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 100%;\n height: 44px;\n\n border-radius: 4px;\n border: 1px solid ${mainColor};\n cursor: pointer;\n transition: all 0.3s;\n text-align: center;\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: ${mainColor};\n text-align: center;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(12)};\n }\n }\n\n &:hover {\n background-color: ${mainColor};\n span {\n color: white;\n }\n }\n\n @media (max-width: 768px) {\n width: 100%;\n height: 34px;\n font-size: ${sizeHandler(12)};\n }\n`;\n","import React from 'react';\nimport { Table, Input, Button, message, Modal, Select } from 'antd';\nimport axios from '../../../../Lib/axios';\n\n// components\nimport { MateCallStatusModal } from '../../../../Components/modal';\nimport { NewHandleReportModal } from '../../../../Components/newModal';\nimport { InputFilter, CalleList } from '../../../../Components/User/Mate/auth';\n\n// styled\nimport { GuideRowWrapper2, UserPhoto } from './mate.styled';\nimport {\n GuideRowWrapper,\n GuideDescriptionSection,\n StudyButton,\n GuideDescriptionSectionTitle,\n GuideDescriptionSectionContent,\n AlertMessage,\n GuideContainer,\n} from './mate.styled';\n// utils\nimport moment from 'moment';\nimport { ASSIST, MATE, UNEMER } from '../../../../Lib/variables';\nimport { WithmateLabel, WithmateInput, WithmateSelect, DivisionLine } from '../../../../Components/Common/input';\nimport { NoReportModal } from '../../../../Components/newModal';\n\nclass Mate extends React.PureComponent {\n state = {\n active: 'list', // list, info, guide\n reservedFilter: 'none', // none, reserved, matched, complete\n modal: false,\n\n onRowModal: false,\n rowDetail: null,\n handleReportModal: false,\n report: '',\n keyword: '',\n callList: [],\n };\n\n componentDidMount = () => {\n this.syncStep();\n this.fetchList();\n };\n\n componentDidUpdate = (prevProps, prevState) => {\n if (prevState.active !== this.state.active) {\n this.props.history.push(`/user/mate/mypage/${this.state.active}`);\n }\n };\n\n syncStep = () => {\n const { params } = this.props.match;\n const { active } = this.state;\n\n if (params.tab && active !== params.tab) {\n this.setState({ active: params.tab });\n } else if (!params.tab) {\n this.props.history.push(`/user/mate/mypage/list`);\n }\n };\n\n fetchList = () => {\n const { userType, id } = this.props.auth;\n if (id && userType === MATE) {\n axios.get('/v2/service/mate/call/list', { params: { mateId: id } }).then(resolve => {\n const { data: callList } = resolve;\n if (callList && Array.isArray(callList)) {\n this.setState({ callList }, () => {\n const noReports = callList.filter(d => d.call && !d.call.reportId && d.call.status === '서비스 종료').length;\n if (noReports > 0) {\n this.setState({\n noReportModal: true,\n });\n }\n });\n }\n });\n }\n };\n\n updateBasicInfo = () => {\n const { id, userType } = this.props.auth;\n const { userInfo } = this.props.app;\n const { newPhoto, name, contact } = userInfo;\n\n if (!name || !contact) return message.info('필수정보인 이름과 연락처를 입력해주세요.');\n if (name.length > 15) return message.info('이름이 너무 깁니다. 이름은 15자 이내로 설정해주세요.');\n\n const info = { name, contact };\n if (newPhoto) info.photo = newPhoto;\n\n this.props.modify({ id, userType, info }).then(resolve => {\n if (resolve && resolve.name) {\n message.success('정보를 업데이트 하였습니다.');\n\n localStorage.setItem('name', resolve.name);\n localStorage.setItem('photo', resolve.photo);\n\n this.props.editAuth({ type: 'photo', value: resolve.photo });\n this.props.editAuth({ type: 'name', value: resolve.name });\n this.props.editAuth({ type: 'contact', value: resolve.contact });\n this.props.onEdit({ type: 'photo', value: resolve.photo });\n this.props.onEdit({ type: 'newPhoto', value: '' });\n }\n });\n };\n\n modifyPassword = () => {\n const { passwordForm, id, userType } = this.props.auth;\n const { password, newPassword, reNewPassword } = passwordForm;\n\n if (password === newPassword) return message.info('새 비밀번호는 기존 비밀번호와 달라야합니다.');\n if (reNewPassword !== newPassword) return message.info('새 비밀번호를 확인해주세요.');\n\n this.props.modifyPassword({ id, userType, password, newPassword }).then(resolve => {\n if (resolve && resolve === 'wrong password') {\n return message.error('비밀번호가 일치하지 않습니다.');\n }\n\n if (resolve && resolve === 'not exist') {\n message.error('유효하지 않은 계정입니다. 다시 로그인해주세요.');\n return this.props.history.push('/user/logout');\n }\n\n if (resolve && resolve === 'success') {\n message.success('비밀번호를 변경하였습니다.');\n this.props.editPassword({ type: 'clear', value: '' });\n }\n });\n };\n\n withdrawl = () => {\n const { id, userType } = this.props.auth;\n const { password } = this.state.temp;\n\n if (!password) return message.info('비밀번호를 입력해주세요.');\n\n this.props.withdrawlUser({ id, userType, password }).then(resolve => {\n if (resolve && resolve === 'wrong password') {\n return message.info('잘못된 비밀번호입니다.');\n }\n\n if (resolve && resolve === 'success') {\n message.info('회원탈퇴를 완료하였습니다. 이용해주셔서 감사합니다.');\n this.setState({ modal: false, temp: null }, () => {\n setTimeout(() => {\n this.props.history.push('/user/logout');\n }, 500);\n });\n }\n });\n };\n\n tabHandler = type => {\n this.setState({ active: type });\n };\n\n onNextProcess = async () => {\n const { rowDetail } = this.state;\n\n const {\n _id,\n callId,\n service,\n call: { status, reportId },\n reserveDate,\n } = rowDetail;\n\n if (moment(reserveDate).startOf('day').valueOf() > moment().startOf('day').valueOf()) {\n message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n return null;\n }\n\n if (!_id || !callId || !service) {\n return message.error('해당 예약정보는 유효하지 않습니다. 새로고침 후 다시 시도해주세요.');\n }\n\n if (status && status === '예약접수') {\n return message.warning('아직 고객님이 예약을 확정짓지 않아 진행이 불가능합니다.');\n }\n\n if (service === UNEMER) {\n if (status === '예약완료') return this.unemergencyService().doReceipt();\n else if (status === '접선') return this.unemergencyService().doStart();\n else if (status === '병원 출발') return this.unemergencyService().doArrive();\n else if (status === '병원 도착') return this.unemergencyService().doCare();\n else if (status === '진료 시작') return this.unemergencyService().doCareDone();\n else if (status === '진료 종료') return this.unemergencyService().doBackStart();\n else if (status === '자택 출발') return this.unemergencyService().doComplete();\n else if (status === '서비스 종료') {\n if (reportId) return message.warning('이미 종료된 서비스입니다.');\n else this.openReportForm();\n }\n }\n\n if (service === ASSIST) {\n if (status === '예약완료') return this.assistService().doReceipt();\n else if (status === '접선') return this.assistService().doCare();\n else if (status === '진료 시작') return this.assistService().doCareDone();\n else if (status === '진료 종료') return this.assistService().doComplete();\n else if (status === '서비스 종료') {\n if (reportId) return message.warning('이미 종료된 서비스입니다.');\n else this.openReportForm();\n }\n }\n };\n\n unemergencyService = () => {\n const { id } = localStorage.getItem('id');\n const { rowDetail } = this.state;\n const { _id, callId } = rowDetail;\n\n const doReceipt = async () => {\n axios.put('/v2/service/receipt/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"접선\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('접선 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n const doStart = async () => {\n axios.put('/v2/service/start/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"병원 출발\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('병원 출발 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n const doArrive = async () => {\n axios.put('/v2/service/arrive/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"병원 도착\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('병원 도착 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n const doCare = async () => {\n axios.put('/v2/service/care/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"진료 시작\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('진료 시작 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n const doCareDone = async () => {\n axios.put('/v2/service/caredone/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"진료 종료\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('진료 종료 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n const doBackStart = async () => {\n axios\n .put('/v2/service/goback/mate/call', { reserveId: _id, callId })\n .then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"자택 출발\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('자택 출발 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n })\n .catch(err => {\n console.log(err);\n });\n };\n\n const doComplete = async () => {\n axios.put('/v2/service/complete/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"서비스 종료\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('서비스 종료 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n return {\n doReceipt,\n doStart,\n doArrive,\n doCare,\n doCareDone,\n doBackStart,\n doComplete,\n };\n };\n\n assistService = () => {\n const { id } = localStorage.getItem('id');\n const { rowDetail } = this.state;\n const { _id, callId } = rowDetail;\n\n const doReceipt = async () => {\n axios.put('/v2/service/receipt/normal/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"접선\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('접선 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n const doCare = async () => {\n axios.put('/v2/service/care/normal/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"진료 시작\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('진료 시작 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n const doCareDone = async () => {\n axios.put('/v2/service/caredone/normal/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"진료 종료\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('진료 종료 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n const doComplete = async () => {\n axios.put('/v2/service/complete/normal/mate/call', { reserveId: _id, callId }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'check parameters') return message.warning('죄송합니다. 요청에 실패하였습니다.');\n if (data === 'not yet') return message.warning('진료 예약일 전에는 예약을 진행할 수 없습니다.');\n if (data === 'invalid call') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n if (data === 'already done') return message.warning('이미 \"서비스 종료\" 처리 하였습니다.');\n if (data === 'success') {\n message.success('서비스 종료 처리 완료');\n this.setState({ onRowModal: false });\n this.fetchList();\n }\n });\n };\n\n return { doReceipt, doCare, doCareDone, doComplete };\n };\n\n onAddReport = () => {\n const { report } = this.state;\n const { description, care, doctorComment } = report;\n\n if (!description) message.warning('서비스 진행 중 특이사항을 작성해주세요.');\n if (!care) message.warning('진료 및 치료 내용을 작성해주세요.');\n if (!doctorComment) message.warning('의료 기관 및 의사 평가을 작성해주세요.');\n\n axios\n .post('/v2/review/add/report', { ...report, mateId: localStorage.getItem('id') })\n .then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n if (data === 'check parameters') return message.warning('입력하지 않은 내용이 있는지 확인해주세요.');\n if (data === 'already done') return message.warning('이미 리포트 등록을 완료하였습니다. 새로고침하여 확인해주세요.');\n if (data === 'invalid call') return message.warning('유효하지 않은 수행이력입니다. 새로고침 후 다시 시도해주세요.');\n if (data === 'unmatched mate') return message.warning('잘못된 시도입니다. 다른 메이트에게 배정된 예약입니다.');\n\n message.success('사후리포트 등록 완료');\n this.setState({ report: null, handleReportModal: false });\n this.fetchList();\n })\n .catch(error => {\n return message.error('요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n });\n };\n\n inputHandler = ({ type, value }) => {\n this.setState(prevState => ({\n report: {\n ...prevState['report'],\n [type]: value,\n },\n }));\n };\n\n openReportForm = () => {\n const { rowDetail } = this.state;\n\n this.setState({\n onRowModal: false,\n rowDetail: null,\n handleReportModal: true,\n report: {\n description: '',\n care: '',\n medicine: '',\n nextSchedule: '',\n mateComment: '',\n doctorComment: '',\n callId: rowDetail.callId,\n },\n });\n };\n\n render() {\n const { auth } = this.props;\n const { active, reservedFilter, callList, keyword } = this.state;\n\n const { password, newPassword, reNewPassword } = auth.passwordForm;\n const { list, userInfo } = this.props.app;\n\n const filteredList = keyword\n ? callList.filter(reserve => {\n return (\n (reserve && reserve.reserveCode && reserve.reserveCode.toLowerCase().includes(keyword.toLowerCase())) ||\n (reserve && reserve.patient && reserve.patient.toLowerCase().includes(keyword.toLowerCase()))\n );\n })\n : callList;\n\n return (\n <div className='auth-container'>\n <div className='navigation-container'>\n <div className='inner-container'>\n <div className='user-info-container'>\n <div className='default-info'>\n <div>{auth.photo ? <img src={auth.photo} alt='user-profile' /> : <span>no image</span>}</div>\n <p>\n <span>{auth.name}님,</span>\n <br />\n <span>안녕하세요</span>\n </p>\n </div>\n <div className='reserve-info'>\n <div className='title'>\n <p>\n 수행 통계{' '}\n {/* <a href='https://www.notion.so/FAQ-cfe01db37c67472086b414a044ed6370' target='_blank' style={{ fontSize: '12px' }}>\n (메이트 교육 자료 바로가기)\n </a> */}\n </p>\n </div>\n <div className='value-wrapper'>\n <div className='value-block'>\n <div className='title'>\n <img src='/assets/images/unemergency-small.png' alt='small-icon' />\n <span>병원 동행 Pro</span>\n </div>\n <div className='value'>\n <p>\n {callList && callList.length > 0\n ? callList.filter(m => m.service === UNEMER && m.call.status === '서비스 종료').length\n : '0'}\n 회 수행\n </p>\n </div>\n </div>\n\n <div className='value-block'>\n <div className='title'>\n <img src='/assets/images/withassist-small.png' alt='small-icon' />\n <span>병원 동행 Basic</span>\n </div>\n <div className='value'>\n <p>\n {callList && callList.length > 0\n ? callList.filter(m => m.service !== UNEMER && m.call.status === '서비스 종료').length\n : '0'}\n 회 수행\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div className='navigator'>\n <div className='nav-tab'>\n <span\n onClick={() => {\n this.tabHandler('list');\n }}\n className={`name ${active === 'list' ? 'active' : ''}`}\n >\n 예약 및 접수내역\n </span>\n <span className={`underline ${active === 'list' ? 'active' : ''}`}></span>\n </div>\n\n <div className='nav-tab'>\n <span\n onClick={() => {\n this.tabHandler('info');\n }}\n className={`name ${active === 'info' ? 'active' : ''}`}\n >\n 개인정보 관리\n </span>\n <span className={`underline ${active === 'info' ? 'active' : ''}`}></span>\n </div>\n\n <div className='nav-tab'>\n <span\n onClick={() => {\n this.tabHandler('guide');\n }}\n className={`name ${active === 'guide' ? 'active' : ''}`}\n >\n 메이트 온라인 학습\n </span>\n <span className={`underline ${active === 'guide' ? 'active' : ''}`}></span>\n </div>\n </div>\n </div>\n </div>\n\n <div className='usage-info-container'>\n <div className='inner-container'>\n {active === 'list' && (\n <>\n <div className='filter-wrapper'>\n <Filter\n filter={reservedFilter}\n value='none'\n name='전체'\n onClick={() => {\n this.setState({ reservedFilter: 'none' });\n }}\n />\n <Filter\n filter={reservedFilter}\n value='reserved'\n name='예약접수'\n onClick={() => {\n this.setState({ reservedFilter: 'reserved' });\n }}\n />\n\n <Filter\n filter={reservedFilter}\n value='matched'\n name='예약완료 (진행중)'\n onClick={() => {\n this.setState({ reservedFilter: 'matched' });\n }}\n />\n <Filter\n filter={reservedFilter}\n value='complete'\n name='서비스 종료'\n onClick={() => {\n this.setState({ reservedFilter: 'complete' });\n }}\n />\n </div>\n\n <InputFilter\n keyword={this.state.keyword}\n keywordHandler={value => {\n this.setState({ keyword: value });\n }}\n />\n\n <CalleList\n list={\n reservedFilter === 'none'\n ? filteredList\n : reservedFilter === 'reserved'\n ? filteredList.filter(p => p.call && p.call.status === '예약접수')\n : reservedFilter === 'matched'\n ? filteredList.filter(\n p =>\n p.call &&\n (p.call.status === '예약완료' ||\n p.call.status === '접선' ||\n p.call.status === '병원 출발' ||\n p.call.status === '병원 도착' ||\n p.call.status === '진료 시작' ||\n p.call.status === '진료 종료' ||\n p.call.status === '자택 출발'),\n )\n : reservedFilter === 'complete'\n ? filteredList.filter(p => p.call && p.call.status === '서비스 종료')\n : []\n }\n onRow={info => {\n this.setState({ rowDetail: info, onRowModal: true });\n }}\n />\n </>\n )}\n\n {active === 'info' && (\n <>\n <div className='user-info-wrapper'>\n <div className='default-info wrapper'>\n <div className='title-wrapper'>\n <p>프로필 수정</p>\n </div>\n <div className='service' style={{ marginBottom: '40px' }}>\n <WithmateLabel>프로필 사진</WithmateLabel>\n <div>\n <input\n id='mate-profile'\n hidden\n type='file'\n accept='image/x-png,image/gif,image/jpeg'\n onChange={ev => {\n this.props.onEdit({ type: 'newPhoto', value: ev.target.files[0] });\n }}\n />\n <UserPhoto\n onClick={e => {\n e.preventDefault();\n document.getElementById('mate-profile').click();\n }}\n >\n <img src={userInfo.newPhoto ? URL.createObjectURL(userInfo.newPhoto) : userInfo.photo} alt='user-profile' />\n </UserPhoto>\n </div>\n </div>\n\n <div className='service'>\n <WithmateLabel>이름</WithmateLabel>\n <WithmateInput\n placeholder='성함을 입력해주세요.'\n value={userInfo.name}\n onChange={ev => {\n this.props.onEdit({ type: 'name', value: ev.target.value });\n }}\n />\n </div>\n\n <div className='service'>\n <WithmateLabel>연락처</WithmateLabel>\n <WithmateInput\n placeholder='연락처를 입력해주세요.'\n value={userInfo.contact}\n onChange={ev => {\n this.props.onEdit({ type: 'contact', value: ev.target.value });\n }}\n />\n </div>\n\n <div className='service'>\n <WithmateLabel>\n 성별 <span style={{ fontSize: '11px' }}>(변경은 1:1 문의로 인증 후 가능)</span>\n </WithmateLabel>\n <WithmateInput placeholder='성별을 입력해주세요.' value={userInfo.sex} disabled />\n </div>\n\n <div className='service' style={{ marginBottom: '0px' }}>\n <Button onClick={this.updateBasicInfo} style={{ backgroundColor: '#484848' }}>\n 수정된 프로필 저장\n </Button>\n </div>\n </div>\n <div className='privacy-info wrapper'>\n <div className='title-wrapper'>\n <p>비밀번호 변경</p>\n </div>\n\n <div className='service'>\n <WithmateLabel>현재 비밀번호</WithmateLabel>\n <div>\n <WithmateInput\n type='password'\n placeholder='현재 비밀번호를 입력해주세요.'\n value={password}\n onChange={ev => {\n this.props.editPassword({ type: 'password', value: ev.target.value });\n }}\n />\n </div>\n </div>\n\n <div className='service'>\n <WithmateLabel>새 비밀번호</WithmateLabel>\n <div>\n <WithmateInput\n type='password'\n placeholder='새 비밀번호를 입력해주세요.'\n value={newPassword}\n onChange={ev => {\n this.props.editPassword({ type: 'newPassword', value: ev.target.value });\n }}\n />\n </div>\n </div>\n\n <div className='service'>\n <WithmateLabel>새 비밀번호 확인</WithmateLabel>\n <div>\n <WithmateInput\n type='password'\n placeholder='새 비밀번호를 확인해주세요.'\n value={reNewPassword}\n onChange={ev => {\n this.props.editPassword({ type: 'reNewPassword', value: ev.target.value });\n }}\n />\n </div>\n </div>\n\n <div className='service'>\n <Button onClick={this.modifyPassword} style={{ backgroundColor: '#ffffff', color: '#606060', marginBottom: '0px' }}>\n 비밀번호 변경\n </Button>\n </div>\n </div>\n <div className='etc-info wrapper'>\n <div className='title-wrapper'>\n <p>기타</p>\n </div>\n\n <div className='service'>\n <div className='flex-wrapper'>\n <p\n onClick={() => {\n this.props.history.push('/policy/privacy');\n }}\n >\n 개인정보 처리방침 <b>{'>'}</b>\n </p>\n <p\n onClick={() => {\n this.props.history.push('/policy/terms');\n }}\n >\n 서비스 이용약관 <b>{'>'}</b>\n </p>\n </div>\n </div>\n\n <div className='service'>\n <Button\n style={{ backgroundColor: '#b7b7b7' }}\n onClick={() => {\n this.props.history.push('/user/logout');\n }}\n >\n 로그아웃\n </Button>\n </div>\n\n <div className='service' style={{ marginBottom: '0px' }}>\n <Button\n onClick={() => {\n this.setState({ modal: true, temp: { password: '' } });\n }}\n style={{ color: '#a7a7a7', height: '30px' }}\n >\n 회원탈퇴\n </Button>\n </div>\n </div>\n <div className='clearfix' />\n </div>\n </>\n )}\n\n {active === 'guide' && (\n <>\n {userInfo.doProducts.includes('ITEM_mIagil546753836') ? (\n <GuideContainer>\n <GuideBlock2\n title='메이트 교육영상 시청'\n content='메이트 서비스를 활동하기 위한 온라인 영상 교육입니다. 서비스 수행 시 필요한 지침과 규칙을 준수하고 책임을 질 수 있는 서비스 건수를 매칭하기 위해 병원동행서비스의 개념과 수행 방법을 동영상 교육 자료를 통해 학습할 수 있습니다 '\n link='/mateEducation/manual'\n />\n </GuideContainer>\n ) : null}\n <GuideContainer>\n <GuideBlock\n title='서비스 매뉴얼 보기'\n content='메이트 서비스를 수행하기 위한 교육 자료입니다. 위드메이트가 제공하는 종류 및 타입별 병원 동행 서비스의 개념과 수행방법, 그리고 주의사항에 대해 학습할 수 있습니다.'\n // link='https://s3.ap-northeast-2.amazonaws.com/withmate.photo/withmate_service_manual.pdf'\n link='/service/manual'\n />\n <GuideBlock\n title='플랫폼 이용 방법 보기'\n content='위드메이트 온라인 플랫폼 이용 방법을 설명하는 교육 자료입니다. 플랫폼의 효율적인 사용 방법과 정상적인 병원 동행 서비스 제공을 위한 필수 기능들에 대해 학습할 수 있습니다.'\n // link='https://s3.ap-northeast-2.amazonaws.com/withmate.photo/withmate_platform_manual.pdf'\n link='/platform/manual'\n />\n </GuideContainer>\n <StudyButton\n onClick={() => {\n window.open('https://www.notion.so/FAQ-cfe01db37c67472086b414a044ed6370', '_blank');\n }}\n >\n 메이트 FAQ 바로가기\n <img src='/assets/images/w_copy.png' />\n </StudyButton>\n\n <AlertMessage>\n *해당 페이지에서 제공되는 모든 교육 자료를 학습하고 숙지한 뒤 서비스 수행이 가능합니다. 서비스 매뉴얼 및 플랫폼 이용 방법\n 미숙지로 인해 발생하는 피해에 대한\n <br />\n 모든 책임은 메이트 본인에게 있습니다*\n </AlertMessage>\n </>\n )}\n </div>\n </div>\n\n {this.state.modal && (\n <Modal\n visible={this.state.modal}\n title='회원탈퇴'\n footer={null}\n onCancel={() => {\n this.setState({ modal: false, temp: null });\n }}\n >\n <WithmateInput\n type='password'\n placeholder='회원탈퇴를 위해 비밀번호를 입력해주세요.'\n value={this.state.temp.password}\n onChange={ev => {\n const value = ev.target.value;\n this.setState(prevState => ({ temp: { password: value } }));\n }}\n />\n <DivisionLine />\n <div style={{ display: 'flex' }}>\n <Button\n style={{ flex: 1, marginRight: '8px', height: '40px' }}\n type='danger'\n onClick={() => {\n this.setState({ modal: false, temp: null });\n }}\n >\n 취소\n </Button>\n <Button style={{ flex: 1, height: '40px' }} type='primary' onClick={this.withdrawl}>\n 확인\n </Button>\n </div>\n </Modal>\n )}\n\n {this.state.noReportModal && (\n <NoReportModal\n visible={this.state.noReportModal}\n visibleHandler={() => {\n this.setState({ noReportModal: false, reservedFilter: 'complete' });\n }}\n />\n )}\n\n {this.state.onRowModal ? (\n <MateCallStatusModal\n visibleHandler={() => {\n this.setState({ onRowModal: false, rowDetail: null });\n }}\n info={this.state.rowDetail}\n onNext={this.onNextProcess}\n />\n ) : null}\n\n {this.state.handleReportModal ? (\n <NewHandleReportModal\n data={this.state.report}\n visible={this.state.handleReportModal}\n visibleHandler={() => {\n this.setState({ handleReportModal: false, report: null });\n }}\n onSave={this.onAddReport}\n inputHandler={this.inputHandler}\n />\n ) : null}\n </div>\n );\n }\n}\nexport default Mate;\n\nconst GuideBlock = ({ title, content, link }) => (\n <GuideRowWrapper>\n <GuideDescriptionSectionTitle\n onClick={() => {\n window.open(link, '_blank');\n }}\n >\n {title} <img src={'/assets/images/w_right_arrow.png'} alt='링크' />\n </GuideDescriptionSectionTitle>\n <GuideDescriptionSection>\n <GuideDescriptionSectionContent>{content}</GuideDescriptionSectionContent>\n </GuideDescriptionSection>\n </GuideRowWrapper>\n);\n\nconst GuideBlock2 = ({ title, content, link, history }) => (\n <GuideRowWrapper2>\n <GuideDescriptionSectionTitle\n onClick={() => {\n window.open(link, '_blank');\n }}\n >\n {title} <img src={'/assets/images/w_right_arrow.png'} alt='링크' />\n </GuideDescriptionSectionTitle>\n <GuideDescriptionSection>\n <GuideDescriptionSectionContent>{content}</GuideDescriptionSectionContent>\n </GuideDescriptionSection>\n </GuideRowWrapper2>\n);\n\nconst Filter = ({ filter, value, onClick, name }) => {\n return (\n <span className={`filter ${filter === value ? 'active' : ''}`} onClick={onClick}>\n {name}\n </span>\n );\n};\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\n\nimport StyledMateContainer from './mate.styled';\nimport Mate from './mate';\nimport { MATE } from '../../../../Lib/variables';\n\nimport {\n acceptCall,\n cancelCall,\n getUserInfo,\n editUserForm,\n modifyUserInfo,\n completeCall,\n // getMateReserveList,\n // getContractList,\n} from '../../../../Reducer/Modules/app';\nimport { editAuth, editPasswordForm, modifyPassword, withdrawlUser } from '../../../../Reducer/Modules/auth';\n\nclass MatePage extends React.PureComponent {\n componentDidMount = () => {\n const mateId = localStorage.getItem('id');\n const userType = localStorage.getItem('userType');\n\n if (mateId) {\n if (userType !== MATE) {\n window.location.href = '/';\n } else {\n this.props.getUserInfo({ id: mateId, userType });\n }\n } else {\n this.props.history.push('/user/login');\n }\n };\n\n render() {\n if (this.props.auth.userType !== MATE) {\n return <div></div>;\n }\n\n return (\n <StyledMateContainer>\n <Mate {...this.props} />\n </StyledMateContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\nconst mapDispatchToProps = dispatch => ({\n getUserInfo: ({ id, userType }) => dispatch(getUserInfo({ id, userType })),\n onEdit: ({ type, value }) => dispatch(editUserForm({ type, value })),\n modify: ({ id, userType, info }) => dispatch(modifyUserInfo({ id, userType, info })),\n modifyPassword: ({ id, userType, password, newPassword }) => dispatch(modifyPassword({ id, userType, password, newPassword })),\n editAuth: ({ type, value }) => dispatch(editAuth({ type, value })),\n editPassword: ({ type, value }) => dispatch(editPasswordForm({ type, value })),\n\n withdrawlUser: ({ id, userType, password }) => dispatch(withdrawlUser({ id, userType, password })),\n cancelCall: ({ callId }) => dispatch(cancelCall({ callId })),\n completeCall: ({ callId }) => dispatch(completeCall({ callId })),\n acceptCall: ({ callId, mateId }) => dispatch(acceptCall({ callId, mateId })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MatePage);\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../../theme';\n\nconst StyledNormalContainer = styled.div`\n margin-top: 55px;\n\n .auth-container {\n // display: flex;\n // flex-direction: column;\n min-height: 100vh;\n background-color: rgba(0, 0, 0, 0.02);\n }\n\n .navigation-container {\n flex-shrink: 0;\n border-bottom: 1px solid #e6e6e6;\n background-color: white;\n\n .inner-container {\n padding: 0px;\n }\n\n .user-info-container {\n display: flex;\n align-items: center;\n padding: 82px 30px;\n\n .default-info {\n flex: 1;\n display: flex;\n align-items: center;\n\n div {\n width: 110px;\n height: 110px;\n border-radius: 55px;\n margin-right: 20px;\n background-color: #e6e6e6;\n position: relative;\n overflow: hidden;\n\n img {\n height: 110px;\n position: absolute;\n margin: auto;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n }\n\n span {\n display: inline-block;\n position: absolute;\n margin: auto;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n line-height: 110px;\n text-align: center;\n color: #ada5a5;\n }\n }\n\n p {\n flex: 1;\n font-size: ${sizeHandler(38)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n\n .reserve-info {\n flex: 1;\n\n .title {\n margin-bottom: 12px;\n\n p {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n color: rgba(145, 145, 145, 0.8);\n }\n }\n\n .value-wrapper {\n display: flex;\n align-items; center;\n\n .value-block {\n flex: 1;\n\n .title {\n img {\n height: 14px;\n margin-right: 4px;\n }\n \n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n \n .value {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n color: #3bc1ff;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n }\n }\n }\n }\n\n .navigator {\n display: flex;\n align-items: center;\n padding: 0px 30px;\n\n .nav-tab {\n margin-right: 32px;\n padding-bottom: 12px;\n position: relative;\n\n .name {\n font-size: ${sizeHandler(14)};\n text-align: center;\n cursor: pointer;\n\n &.active { \n font-weight: bold;\n color: #3bc1ff;\n }\n }\n\n span.underline {\n background-color: #3bc1ff;\n position: absolute;\n bottom: 0px;\n left: 0px;\n\n &.active {\n width: 100%;\n height: 3px;\n display: inline-block;\n }\n }\n }\n }\n\n @media (max-width: 768px) {\n .user-info-container {\n flex-direction: column;\n align-items: flex-start;\n\n .reserve-info {\n margin-top: 40px;\n }\n\n .value-wrapper {\n flex-direction: column;\n\n .value-block:last-child {\n margin-top: 20px;\n }\n }\n }\n }\n }\n\n .usage-info-container {\n flex: 1;\n // background-color: rgba(0, 0, 0, 0.02);\n\n .inner-container {\n height: 100%;\n padding: 56px 30px;\n\n @media (max-width: 768px) {\n padding: 40px 16px;\n }\n }\n\n .filter-wrapper {\n margin-bottom: 20px;\n\n .filter {\n font-size: 14px;\n font-weight: bold;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n margin-right: 32px;\n cursor: pointer;\n }\n\n .filter.active {\n color: ${mainColor};\n }\n }\n }\n\n .user-info-wrapper {\n .wrapper {\n padding: 36px;\n background-color: white;\n border-radius: 4px;\n border: solid 1px #e6e6e6;\n float: left;\n width: calc(50% - 10px);\n \n @media (max-width: 768px) {\n width: 100%;\n }\n }\n\n .wrapper.etc-info {\n float: right;\n }\n \n .title-wrapper {\n font-size: ${sizeHandler(20)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 28px;\n }\n\n .service {\n margin-bottom: 20px;\n\n p.info {\n font-size: ${sizeHandler(12)};\n font-weight: normal;\n letter-spacing: -0.15px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n input {\n height: 36px;\n display: inline-block;\n width: 100%;\n }\n\n button {\n width: 100%;\n height: 48px;\n border-radius: 2px;\n color: white;\n }\n\n .ant-upload-drag-container {\n .title {\n margin-top: 12px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n }\n \n .reco {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n text-align: center;\n color: #a7a7a7;\n }\n }\n\n .flex-wrapper {\n display: flex;\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: #606060;\n cursor: pointer;\n }\n }\n }\n\n .default-info {\n margin-right: 20px;\n }\n\n .card-info {\n margin-right: 20px;\n margin-top: 20px;\n }\n\n .privacy-info {\n margin-top: -352px;\n @media (max-width: 768px) {\n margin-top: 20px;\n }\n }\n\n .etc-info {\n margin-top: -290px;\n @media (max-width: 768px) {\n margin-top: 20px;\n }\n }\n }\n\n .user-profile-wrapper {\n .wrapper {\n padding: 36px;\n background-color: white;\n border-radius: 4px;\n border: solid 1px #e6e6e6;\n float: left;\n width: calc(100% - 10px);\n \n @media (max-width: 768px) {\n width: 100%;\n }\n }\n\n .wrapper.etc-info {\n float: right;\n }\n \n .title-wrapper {\n font-size: ${sizeHandler(20)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 28px;\n }\n\n .service {\n margin-bottom: 20px;\n\n p.info {\n font-size: ${sizeHandler(12)};\n font-weight: normal;\n letter-spacing: -0.15px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n input {\n height: 36px;\n display: inline-block;\n width: 100%;\n }\n\n button {\n width: 110px;\n height: 48px;\n border-radius: 2px;\n color: white;\n }\n\n .ant-upload-drag-container {\n .title {\n margin-top: 12px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n }\n \n .reco {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n text-align: center;\n color: #a7a7a7;\n }\n }\n\n .flex-wrapper {\n display: flex;\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: #606060;\n cursor: pointer;\n }\n }\n }\n\n .default-info {\n margin-right: 20px;\n }\n\n .privacy-info {\n\n @media (max-width: 768px) {\n margin-top: 20px;\n }\n }\n\n .etc-info {\n margin-top: 20px;\n }\n }\n\n input {\n height: 36px;\n display: inline-block;\n width: 100%;\n }\n\n .ant-input-number-input-wrap {\n height: 100%;\n\n .ant-input-number-input {\n height: 100%;\n }\n\n input {\n height: 100%;\n }\n } \n`;\n\nexport const PointBoxRow = styled.div`\n display: flex;\n align-items: flex-start;\n margin-bottom: 20px;\n\n > div:last-child {\n margin-right: 0px;\n }\n\n @media (max-width: 480px) {\n margin-bottom: 0px;\n flex-direction: column;\n }\n`;\n\nexport const PointBox = styled.div`\n width: calc(50% - 10px);\n margin-right: 20px;\n\n padding: 32px;\n background-color: #ffffff;\n border-radius: 4px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: solid 1px #f2f2f2;\n\n @media (max-width: 480px) {\n margin-right: 0px;\n margin-bottom: 10px;\n\n max-height: 320px;\n padding: 16px;\n\n width: 100%;\n }\n`;\n\nexport const PointBox2 = styled.div`\n width: 100%;\n margin-right: 20px;\n\n padding: 32px;\n background-color: #ffffff;\n border-radius: 4px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: solid 1px #f2f2f2;\n\n @media (max-width: 480px) {\n margin-right: 0px;\n margin-bottom: 10px;\n\n max-height: 320px;\n padding: 16px;\n\n width: 100%;\n }\n`;\n\nexport const PointBox3 = styled.div`\n width: 100%;\n margin-right: 20px;\n\n padding: 32px;\n background-color: #ffffff;\n border-radius: 4px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: solid 1px #f2f2f2;\n\n @media (max-width: 480px) {\n margin-right: 0px;\n margin-bottom: 10px;\n\n max-height: 370px;\n padding: 16px;\n\n width: 100%;\n }\n`;\n\nexport const PointContent = styled.div`\n max-height: 400px;\n padding-right: 10px;\n overflow-y: scroll;\n\n @media (max-width: 480px) {\n max-height: 320px;\n }\n`;\n\nexport const PointBoxTitle = styled.h4`\n margin-top: 0px;\n margin-bottom: 10px;\n\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 480px) {\n font-size: 18px;\n }\n`;\n\nexport const PointTotal = styled.h5`\n font-size: 32px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.7px;\n text-align: left;\n color: #3bc1ff;\n\n @media (max-width: 480px) {\n font-size: 26px;\n }\n`;\n\nexport const PointHistoryRow = styled.div`\n padding-top: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e6e6e6;\n`;\n\nexport const PointHistoryNameRow = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n margin-bottom: 4px;\n\n > .title {\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.65;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n }\n\n > .value {\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: right;\n color: ${props => (props.add ? '#3bc1ff' : '#ff5500')};\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n }\n`;\n\nexport const PointHistoryValueRow = styled(PointHistoryNameRow)`\n margin-bottom: 0px;\n\n > .title {\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.1px;\n text-align: left;\n color: #afb0b2;\n\n @media (max-width: 480px) {\n font-size: 10px;\n }\n }\n\n > .value {\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.54;\n letter-spacing: -0.15px;\n text-align: left;\n color: #afb0b2;\n\n @media (max-width: 480px) {\n font-size: 10px;\n }\n }\n`;\n\nexport const NoHistory = styled.div`\n padding: 12px;\n text-align: center;\n\n font-size: 20px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.65;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n`;\n\nexport default StyledNormalContainer;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Input, message, notification } from 'antd';\nimport axios from '../../../Lib/axios';\n\nimport { sizeHandler, mainColor } from '../../../theme';\nimport { colorParserByStatus } from '../../../Lib/utils';\nimport { ASSIST, UNEMER, HAPPYCARE } from '../../../Lib/variables';\n\nimport moment from 'moment';\nexport const InputFilter = ({ keyword, keywordHandler }) => (\n <FilterWrapper>\n <Input\n value={keyword}\n onChange={ev => {\n keywordHandler(ev.target.value);\n }}\n placeholder='예약번호, 담당자 성함 등을 검색해보세요.'\n />\n </FilterWrapper>\n);\n\nconst FilterWrapper = styled.div`\n margin-bottom: 12px;\n`;\n\nexport const ReserveList = ({ list, onDetailModal, onMateModal, onReport, onCancel }) => {\n if (!list || list.length === 0) {\n return (\n <FullContainer>\n <Inner>\n <EmptyList>이용내역이 없습니다.</EmptyList>\n </Inner>\n </FullContainer>\n );\n }\n\n return (\n <ListConatiner>\n {list.map((item, index) => {\n const serviceType =\n !item.productInfo || !item.productInfo.usePro || !item.productInfo.useBasic ? '' : item.service === 'unemergency' ? 'Pro' : 'Basic';\n const serviceName = (item.productInfo && item.productInfo.name && item.service && item.productInfo.name + serviceType) || '-';\n\n return (\n <ReserveItem\n key={item._id + index + 'service-list'}\n reserveCode={item.reserveCode}\n service={serviceName}\n serviceType={item.service}\n reserveDate={moment(item.reserveDate).format('MM월 DD일 dddd HH시mm분')}\n destination={item.destination}\n starting={item.starting}\n status={item.call.status}\n onReport={() => {\n onReport(item);\n }}\n onDetail={() => {\n onDetailModal(item._id);\n }}\n onMate={() => {\n if (item.call.status === '접수취소') {\n return message.info('접수취소된 서비스입니다.');\n }\n\n if (!item.call.mate || !item.call.mate) {\n return message.info('아직 담당자가 배정되지 않았습니다.');\n }\n\n onMateModal({\n ...item.call.mate,\n service: item.service,\n status: item.call.status,\n callId: item.call._id,\n reserveId: item._id,\n mateId: item.call.mateId,\n });\n }}\n onCancel={() => {\n const confirmCancel = window.confirm('예약을 취소하시겠습니까?');\n if (confirmCancel) {\n axios\n .put('/v2/service/cancel/reserve/by/user', {\n reserveId: item._id,\n callId: item.callId,\n })\n .then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('요청 실패');\n else if (data === 'wrong request') return message.warning('잘못된 요청입니다.');\n else if (data === 'already cancel') return message.warning('접수 취소된 요청입니다.');\n else if (data === 'already done') return message.warning('서비스 종료된 요청입니다.');\n else if (data === 'success') {\n notification.success({\n message: '예약 취소',\n description: '예약 취소가 완료 되었습니다.',\n });\n // setTimeout(() => {\n // window.location.reload();\n // }, 3000);\n return null;\n }\n });\n }\n }}\n />\n );\n })}\n </ListConatiner>\n );\n};\n\nconst ReserveItem = ({ reserveCode, service, serviceType, reserveDate, destination, starting, status, onReport, onDetail, onMate, onCancel }) => (\n <ItemContainer>\n <TitleSection>\n <ItemColumn>\n <ItemTitle>서비스 명</ItemTitle>\n <ItemContents style={{ color: mainColor }}>{service}</ItemContents>\n </ItemColumn>\n </TitleSection>\n\n <ContentSection>\n <ItemColumn>\n <ItemTitle>예약 번호</ItemTitle>\n <ItemContents>{reserveCode}</ItemContents>\n </ItemColumn>\n <ItemColumn>\n <ItemTitle>진행 상황</ItemTitle>\n <ItemContents style={{ color: colorParserByStatus(status) }}>{status}</ItemContents>\n </ItemColumn>\n <ItemColumn>\n <ItemTitle>예약 날짜</ItemTitle>\n <ItemContents>{reserveDate}</ItemContents>\n </ItemColumn>\n {serviceType === 'unemergency' && (\n <ItemColumn>\n <ItemTitle>자택 주소</ItemTitle>\n <ItemContents>{starting}</ItemContents>\n </ItemColumn>\n )}\n <ItemColumn>\n <ItemTitle>병원 위치</ItemTitle>\n <ItemContents>{destination}</ItemContents>\n </ItemColumn>\n </ContentSection>\n <ItemColumn>\n <DetailButton\n onClick={() => {\n if (status === '서비스 종료') {\n onReport();\n } else {\n onMate();\n }\n }}\n >\n <span>{status === '서비스 종료' ? '서비스 리포트' : '담당자 확인'}</span>\n </DetailButton>\n </ItemColumn>\n <ItemColumn>\n {status === '접수취소' ? null : (\n <ReserveButton\n onClick={() => {\n if (status === '서비스 종료') {\n return null;\n } else {\n onCancel();\n }\n }}\n >\n <span>예약 취소</span>\n </ReserveButton>\n )}\n </ItemColumn>\n <ItemColumn>\n <ReserveButton\n onClick={() => {\n onDetail();\n }}\n >\n <span>예약 확인</span>\n </ReserveButton>\n </ItemColumn>\n </ItemContainer>\n);\nconst TitleSection = styled.div``;\n\nconst EmptyList = styled.p`\n font-size: 20px;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 16px;\n position: relative;\n text-align: center;\n`;\n\nconst FullContainer = styled.div`\n width: 100%;\n min-height: 300px;\n`;\n\nconst Inner = styled.div`\n max-width: 1024px;\n margin: 0 auto;\n padding-top: 40px;\n\n @media (max-width: 1080px) {\n padding-left: 16px;\n padding-right: 16px;\n }\n\n @media (max-width: 768px) {\n padding-top: 40px;\n }\n`;\nconst ContentSection = styled.div`\n flex: 1;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: flex-start;\n\n overflow-y: scroll;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none; /* Chrome, Safari, Opera*/\n }\n`;\n\nconst ListConatiner = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: flex-start;\n flex-wrap: wrap;\n\n > div:nth-child(3n) {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n > div:nth-child(3n) {\n margin-right: 16px;\n }\n\n > div:nth-child(2n) {\n margin-right: 0px;\n }\n }\n\n @media (max-width: 480px) {\n > div:nth-child(3n) {\n margin-right: 0px;\n }\n\n flex-direction: column;\n justify-content: center;\n }\n`;\n\nconst ItemContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n width: 340px;\n height: 430px;\n overflow: scroll;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none; /* Chrome, Safari, Opera*/\n }\n\n padding: 20px;\n margin-bottom: 16px;\n margin-right: 16px;\n\n border-radius: 4px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n background-color: #ffffff;\n\n @media (max-width: 768px) {\n margin-bottom: 16px;\n }\n\n @media (max-width: 480px) {\n width: 100%;\n max-width: initial;\n margin-right: 0px;\n }\n`;\n\nconst ItemTitle = styled.p`\n color: #a7a7a7;\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n margin: 0px;\n padding: 0px;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(11)};\n }\n`;\nconst ItemContents = styled.p`\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: #606060;\n margin: 0px;\n padding: 0px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(12)};\n margin-bottom: 4px;\n }\n`;\n\nconst ItemColumn = styled.div`\n width: 100%;\n margin-bottom: 6px;\n\n @media (max-width: 768px) {\n display: ${props => (props.hiddenMobile ? 'none' : 'block')};\n width: 100%;\n }\n`;\n\nconst DetailButton = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 100%;\n height: 44px;\n\n border-radius: 4px;\n border: 1px solid ${mainColor};\n cursor: pointer;\n transition: all 0.3s;\n text-align: center;\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: ${mainColor};\n text-align: center;\n\n @media (max-width: 430px) {\n font-size: ${sizeHandler(12)};\n }\n }\n\n &:hover {\n background-color: ${mainColor};\n span {\n color: white;\n }\n }\n\n @media (max-width: 768px) {\n width: 100%;\n height: 34px;\n font-size: ${sizeHandler(12)};\n }\n`;\n\nconst ReserveButton = styled(DetailButton)`\n border: 1px solid #e9e9e9;\n color: #565656;\n\n > span {\n color: #565656;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { sizeHandler, mainColor } from '../../../theme';\n\nexport const UserStatistics = ({ auth, pro, basic }) => (\n <UserContainer>\n <div className='default-info'>\n <p>\n {auth.name},\n <br />\n 안녕하세요\n </p>\n </div>\n\n <div className='reserve-info'>\n <div className='title'>\n <p>이용 통계</p>\n </div>\n <div className='value-wrapper'>\n <div className='value-block'>\n <div className='title'>\n <img src='/assets/images/unemergency-small.png' alt='small-icon' />\n <span>병원 동행 Pro</span>\n </div>\n <div className='value'>\n <p>{pro}회 이용</p>\n </div>\n </div>\n\n <div className='value-block'>\n <div className='title'>\n <img src='/assets/images/withassist-small.png' alt='small-icon' />\n <span>병원 동행 Basic</span>\n </div>\n <div className='value'>\n <p>{basic}회 이용</p>\n </div>\n </div>\n </div>\n </div>\n </UserContainer>\n);\n\nconst UserContainer = styled.div`\n display: flex;\n align-items: center;\n padding: 82px 30px;\n\n .default-info {\n flex: 1;\n display: flex;\n align-items: center;\n\n div {\n width: 110px;\n height: 110px;\n border-radius: 55px;\n margin-right: 20px;\n background-color: #e6e6e6;\n position: relative;\n overflow: hidden;\n\n img {\n height: 110px;\n position: absolute;\n margin: auto;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n }\n\n span {\n display: inline-block;\n position: absolute;\n margin: auto;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n line-height: 110px;\n text-align: center;\n color: #ada5a5;\n }\n }\n\n p {\n flex: 1;\n font-size: ${sizeHandler(38)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n\n .reserve-info {\n flex: 1;\n\n .title {\n margin-bottom: 12px;\n\n p {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n color: rgba(145, 145, 145, 0.8);\n }\n }\n\n .value-wrapper {\n display: flex;\n align-items; center;\n\n .value-block {\n flex: 1;\n\n .title {\n img {\n height: 14px;\n margin-right: 4px;\n }\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n\n .value {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n color: #3bc1ff;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n }\n }\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: flex-start;\n\n .reserve-info {\n margin-top: 40px;\n }\n\n .value-wrapper {\n flex-direction: column;\n\n .value-block:last-child {\n margin-top: 20px;\n }\n }\n }\n \n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { sizeHandler, mainColor } from '../../../theme';\n\nexport const UserNavigation = ({ active, tabHandler, onPatientModal }) => (\n <NaviWrapper>\n <div className='nav-tab'>\n <span\n onClick={() => {\n tabHandler('list');\n }}\n className={`name ${active === 'list' ? 'active' : ''}`}\n >\n 예약내역\n </span>\n <span className={`underline ${active === 'list' ? 'active' : ''}`}></span>\n </div>\n\n <div className='nav-tab'>\n <span\n onClick={() => {\n tabHandler('info');\n }}\n className={`name ${active === 'info' ? 'active' : ''}`}\n >\n 개인정보 관리\n </span>\n <span className={`underline ${active === 'info' ? 'active' : ''}`}></span>\n </div>\n\n <div className='nav-tab'>\n <span\n onClick={() => {\n tabHandler('point');\n }}\n className={`name ${active === 'point' ? 'active' : ''}`}\n >\n 내 포인트\n </span>\n <span className={`underline ${active === 'point' ? 'active' : ''}`}></span>\n </div>\n\n <div className='nav-tab'>\n <span\n onClick={() => {\n // onPatientModal();\n tabHandler('profile');\n }}\n className={`name ${active === 'profile' ? 'active' : ''}`}\n >\n 환자 프로필 관리\n </span>\n <span className={`underline ${active === 'profile' ? 'active' : ''}`}></span>\n </div>\n </NaviWrapper>\n);\n\nconst NaviWrapper = styled.div`\n display: flex;\n align-items: center;\n padding: 0px 30px;\n\n .nav-tab {\n margin-right: 32px;\n padding-bottom: 12px;\n position: relative;\n\n .name {\n font-size: ${sizeHandler(14)};\n text-align: center;\n cursor: pointer;\n\n &.active {\n font-weight: bold;\n color: #3bc1ff;\n }\n }\n\n span.underline {\n background-color: #3bc1ff;\n position: absolute;\n bottom: 0px;\n left: 0px;\n\n &.active {\n width: 100%;\n height: 3px;\n display: inline-block;\n }\n }\n }\n`;\n","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../../../theme';\n\nconst ProfileStyledContainer = styled.div`\n\n @media (max-width: 480px) {\n min-height: initial;\n height: 100%;\n padding-bottom: 0px;\n padding-top: 5px;\n }\n\n .inner-container {\n padding-bottom: 0px;\n padding-top: 0px;\n\n @media (max-width: 480px) {\n padding: 0px;\n }\n\n .profile-form {\n\n .title-wrapper {\n display: flex;\n justify-content: flex-start;\n margin-bottom: 16px;\n\n p {\n flex: 1;\n font-size: ${sizeHandler(32)};\n font-weight: bold;\n letter-spacing: -0.7px;\n line-height: 48px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n }\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: right;\n color: ${mainColor};\n }\n }\n\n .form {\n label {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.15px;\n line-height: 20px;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 4px;\n }\n\n input {\n height: 44px;\n border: solid 1px #e6e6e6;\n padding: 10px;\n\n &.ant-input {\n font-size: 16px;\n line-height: 28px;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.7);\n\n &::placeholder {\n font-size: 14px;\n }\n }\n }\n\n .type-button-wrapper {\n width: 100%;\n height: 48px;\n\n background-color: white;\n border: 1px solid #e6e6e6;\n border-radius: 4px;\n\n display: flex;\n align-items: center;\n\n > .type-button {\n width: 50%;\n height: 100%;\n line-height: 48px;\n\n text-align: center;\n cursor: pointer;\n\n font-size: 16px;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.2);\n }\n\n > .type-button.active {\n background: rgba(0, 0, 0, 0.7);\n border-radius: 4px;\n color: #f9f9f9;\n }\n }\n\n button {\n width: 100%;\n height: 46px;\n margin-top: 4px;\n margin-bottom: 16px;\n\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n }\n\n .link-wrapper {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n .text {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n line-height: 21px;\n }\n\n .link {\n cursor: pointer;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.3px;\n text-align: center;\n color: ${mainColor};\n\n margin-left: 8px;\n }\n }\n }\n\n .form-user-type {\n height: 36px;\n margin-bottom: 20px;\n border-radius: 4px;\n border: 1px solid #e6e6e6;\n display: flex;\n align-items: center;\n overflow: hidden;\n\n .type {\n flex: 1;\n height: 100%;\n line-height: 36px;\n background-color: #ffffff;\n cursor: pointer;\n\n &:first-child {\n border-right: 1px solid #e6e6e6;\n }\n\n p {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n text-align: center;\n color: #606060;\n }\n\n &.active {\n background-color: #606060;\n\n p {\n color: #ffffff;\n }\n }\n }\n }\n }\n }\n\n .ant-upload-drag-container {\n .title {\n margin-top: 12px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n }\n\n .reco {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n text-align: center;\n color: #a7a7a7;\n }\n }\n`;\n\nexport default ProfileStyledContainer;","import styled from 'styled-components';\n\nconst StyledContainer = styled.div``;\n\nexport default StyledContainer;\n\nexport const Container = styled.div`\n padding-top: 55px;\n`;\n\nexport const GuideNavContainer = styled.div`\n width: 100%;\n background-color: #ffffff;\n\n border-bottom: 4px solid #f2f2f2;\n`;\n\nexport const InnerContainer = styled.div`\n width: 100%;\n\n max-width: 1120px;\n margin: 0 auto;\n\n // @media (max-width: 1120px) {\n // padding-left: 32px;\n // padding-right: 32px;\n // }\n\n @media (max-width: 768px) {\n padding-left: 20px;\n padding-right: 20px;\n }\n`;\n\nexport const GuideNavWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n padding-top: 16px;\n padding-bottom: 16px;\n\n @media (max-width: 768px) {\n overflow-x: scroll;\n }\n`;\n\nexport const NavTab = styled.div`\n > a {\n cursor: pointer;\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: left;\n\n white-space: nowrap;\n\n color: ${props => (props.active ? '#3BC1FF' : 'rgba(0,0,0,0.6)')};\n\n display: inline-block;\n }\n\n @media (max-width: 768px) {\n margin-right: 40px;\n\n > a {\n font-size: 16px;\n }\n }\n`;\n\nexport const GuideConceptContainer = styled.div`\n margin-top: 102px;\n`;\n\nexport const GuideConceptTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 50px;\n`;\n\nexport const GuideConceptImageWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 100%;\n\n margin-bottom: 40px;\n`;\n\nexport const GuideConceptImage = styled.img`\n height: 200px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const GuideConceptImageMobile = styled.img`\n display: none;\n\n height: 300px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n display: block;\n }\n`;\n\nexport const GuideConceptTextWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: center;\n\n margin-bottom: 122px;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const GuideConceptTextBlock = styled.div`\n &:first-child {\n margin-right: 20px;\n\n @media (max-width: 768px) {\n margin-right: 0px;\n\n margin-bottom: 16px;\n }\n }\n\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.67;\n letter-spacing: -0.2px;\n text-align: left;\n word-break: keep-all;\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.2px;\n text-align: left;\n }\n\n > span {\n font-weight: bold;\n }\n`;\n\nexport const MobileBr = styled.br`\n display: none;\n\n @media (max-width: 768px) {\n display: block;\n }\n\n @media (max-width: 320px) {\n display: none;\n }\n`;\n\nexport const DesktopBr = styled.br`\n display: block;\n\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const MeritContainer = styled.div`\n background-color: #ffffff;\n\n padding-top: 100px;\n padding-bottom: 80px;\n`;\n\nexport const MeritHeaderWrapper = styled.div`\n width: 100%;\n padding-bottom: 10px;\n border-bottom: 2px solid #f2f2f2;\n\n div.wrap {\n display: flex;\n align-items: flex-end;\n justify-content: flex-start;\n }\n\n img {\n width: 72px;\n height: 72px;\n object-fit: contain;\n\n margin-right: 10px;\n }\n\n h3 {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 0px;\n }\n`;\n\nexport const MeritCardList = styled.div`\n display: flex;\n flex-wrap: wrap;\n\n padding-top: 64px;\n`;\n\nexport const MeritCardWrapper = styled.div`\n height: 260px;\n width: 33.333%;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n margin-bottom: 24px;\n }\n`;\n\nexport const MeritCardNumber = styled.p`\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.43;\n letter-spacing: normal;\n text-align: left;\n color: #afb0b2;\n margin-bottom: 16px;\n`;\n\nexport const MeritCardTitleRow = styled.div`\n display: flex;\n align-items: center;\n\n > img {\n width: 20px;\n height: 20px;\n object-fit: contain;\n margin-right: 10px;\n }\n\n > span {\n font-size: 20px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.54;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n }\n`;\n\nexport const MeritCardDesc = styled.div`\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.65;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-weight: bold;\n }\n\n @media (max-width: 768px) {\n font-size: 15px;\n }\n`;\n\nexport const GuideDetailContainer = styled.div`\n background-color: #f9f9f9;\n\n padding-top: 56px;\n padding-bottom: 100px;\n`;\n\nexport const GuideDetailServiceCardWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const GuideDetailServiceCard = styled.div`\n width: 360px;\n padding: 34px 32px;\n\n background: #ffffff;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n @media (max-width: 768px) {\n margin-bottom: 24px;\n width: 100%;\n\n padding: 34px 16px;\n }\n`;\n\nexport const GuideCardImage = styled.img`\n width: 124px;\n height: 124px;\n border-radius: 50%;\n\n margin-bottom: 40px;\n`;\n\nexport const GuideCardSpecTitle = styled.p`\n width: 100%;\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 24px;\n`;\n\nexport const GuideCardSpecRow = styled.div`\n display: flex;\n width: 100%;\n align-items: flex-start;\n\n margin-bottom: 24px;\n\n > span {\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n // line-height: 1.43;\n letter-spacing: normal;\n text-align: left;\n color: #3bc1ff;\n margin-right: 10px;\n }\n\n > p {\n width: 100%;\n flex: 1;\n font-size: 17px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n // line-height: 1.65;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n }\n`;\n\nexport const GuideCardName = styled.p`\n width: 100%;\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 2px;\n`;\n\nexport const GuideCardType = styled.h3`\n width: 100%;\n font-size: 26px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.2;\n letter-spacing: -0.5px;\n text-align: left;\n color: #3bc1ff;\n margin-bottom: 24px;\n`;\n\nexport const GuideCardDescription = styled.p`\n width: 100%;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-weight: bold;\n }\n\n margin-bottom: 60px;\n`;\n\nexport const GuideDetailSubFlexWrapper = styled.div`\n display: flex;\n justify-content: content;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const GuideDetailButtonWrapper = styled(GuideDetailSubFlexWrapper)`\n border-radius: 4px;\n overflow: hidden;\n\n > span.button {\n cursor: pointer;\n display: inline-block;\n\n flex: 1;\n height: 44px;\n line-height: 44px;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 12px;\n text-align: center;\n color: #ffffff;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n }\n\n > span.gray {\n background-color: #606060;\n\n @media (max-width: 768px) {\n margin-bottom: 8px;\n }\n }\n\n > span.blue {\n background-color: #3bc1ff;\n }\n`;\n\nexport const GuideDetailSubFlexbox = styled.div`\n flex: 1;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n > p {\n margin-bottom: 20px;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 18px;\n\n text-align: left;\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nexport const GuideUsingContainer = styled.div`\n padding-top: 62px;\n padding-bottom: 78px;\n background-color: #f9f9f9;\n`;\n\nexport const GuideUsingSubFlexWrapper = styled(GuideDetailSubFlexWrapper)`\n align-items: center;\n justify-content: center;\n\n @media (max-width: 768px) {\n align-items: flex-start;\n padding-left: 40px;\n }\n`;\n\nexport const GuideUsingFlexbox = styled(GuideDetailSubFlexbox)`\n align-items: center;\n flex: initial;\n min-width: 320px;\n\n > p.index {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 10px;\n line-height: 14px;\n\n letter-spacing: -0.333333px;\n color: rgba(0, 0, 0, 0.2);\n\n margin-bottom: 16px;\n }\n\n > p {\n width: auto;\n text-align: center;\n }\n\n > p.title {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 16px;\n line-height: 22px;\n\n text-align: center;\n letter-spacing: -0.6px;\n }\n\n > div {\n display: flex;\n justify-content: center;\n\n margin-bottom: 16px;\n\n img {\n height: 90px;\n object-fit: contain;\n }\n }\n\n margin-bottom: 44px;\n`;\n\nexport const GuideUsageFlexbox = styled.div`\n flex: 1;\n\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n margin-bottom: 68px;\n\n @media (max-width: 768px) {\n margin-bottom: 32px;\n // width: 230px;\n align-items: ;\n }\n\n div {\n // width: 120px;\n\n img {\n width: 64px;\n height: 64px;\n margin-right: 34px;\n object-fit: contain;\n }\n\n // @media (max-width: 768px) {\n // width: 70px;\n\n // img {\n // height: 32px;\n // }\n // }\n }\n\n span {\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.65;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n // @media (max-width: 768px) {\n // font-size: 13px;\n // line-height: 19px;\n // }\n }\n`;\n\nexport const WithmateContainer = styled.div`\n padding-top: 56px;\n // padding-bottom: 120px;\n`;\n\nexport const FlexDivWrapper = styled.div`\n display: flex;\n width: 100%;\n\n ${props => props.top && `margin-bottom: 72px;`}\n`;\n\nexport const HiddenType = styled.div`\n @media (max-width: 768px) {\n ${props => props.mHidden && `display: none;`}\n }\n`;\n\nexport const BigSideBox = styled(HiddenType)`\n width: 58%;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nexport const SmallSideBox = styled(HiddenType)`\n width: 42%;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nexport const WithmateBg = styled.div`\n width: 100%;\n height: 100%;\n\n background-image: url(${props => props.bg});\n background-size: 80% auto;\n background-position: center;\n background-repeat: no-repeat;\n`;\n\nexport const WithmateTitle = styled.div`\n > img {\n width: 72.5px;\n height: 48px;\n object-fit: contain;\n margin-right: 8px;\n }\n\n > span {\n font-size: 28px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.11;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n }\n\n display: flex;\n align-items: flex-end;\n margin-bottom: 24px;\n`;\n","import React from \"react\";\nimport Modal from \"react-modal\";\nimport styled from 'styled-components';\nimport { Button, Checkbox, notification, Select, message, Radio } from 'antd';\n\nimport { DivisionLine, WithmateSelect, WithmateInput, WithamteInputWithButton, WithmateLabel, WithmateTextarea } from \"../../../../Components/Common/input\";\nimport { HalfWidthButton } from '../../../../Components/Common/button';\nimport ProfileStyledContainer from \"./profile.styled\";\nimport { MobileBr } from \"../../../Guide/guide.styled\";\nimport { addPatient } from \"../../../../Lib/Api/auth\";\n\nconst customStyles = {\n overlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(15, 15, 15, 0.79)\",\n },\n content: {\n position: \"absolute\",\n top: \"30px\",\n height: \"90%\",\n border: \"1px solid #ccc\",\n background: \"#ffffff\",\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n borderRadius: \"4px\",\n outline: \"none\",\n padding: \"20px\",\n },\n};\n\nclass NewProfileComponent extends React.PureComponent {\n state = {\n modalInfo: '',\n modalTitle: '',\n };\n\n onEdit = ({ type, value }) => {\n this.props.editAddPatientForm({ type, value });\n };\n\n onStarting = () => {\n new window.daum.Postcode({\n oncomplete: data => {\n const { sido, sigungu, bname, roadAddress, buildingName } = data;\n this.onEdit({ type: 'shortStarting', value: `${sido} ${sigungu} ${bname}` });\n this.onEdit({ type: 'starting', value: `${roadAddress} (${ buildingName })` });\n },\n }).open();\n };\n\n onProfile = () => {\n const {\n name,\n relate,\n sex,\n age,\n contact,\n starting,\n environment,\n caution\n } = this.props.auth.addPatientForm;\n\n if (!name) {\n return message.warning('성함을 입력해주세요.');\n }\n\n if (!relate) {\n return message.warning('관계를 선택해주세요.');\n }\n\n if (!sex) {\n return message.warning('성별을 선택해주세요.');\n }\n\n if (!age || age.length > 3) {\n return message.warning('나이를 입력해주세요.');\n }\n\n if (!contact) {\n return message.warning('연락처를 입력해주세요.');\n }\n\n if (!starting) {\n return message.warning('주소(자택, 출발지)를 입력해주세요.');\n }\n\n if (!environment) {\n return message.warning('거주환경을 입력해주세요.');\n }\n\n if (!caution) {\n return message.warning('메이트와 동행할 때 주의해야할 점을 선택해주세요.');\n }\n\n this.props\n .addPatient({\n id: this.props.auth.id, name, relate, sex, age, contact, starting, environment, caution\n })\n .then(resolve => {\n // console.log(resolve)\n if (resolve.message === 'success') {\n this.props.onClose();\n this.onEdit({ type: 'clear', value: '' });\n notification.open({\n message: '환자 프로필 등록이 완료되었습니다.',\n description: '등록된 환자 프로필을 서비스 예약시 편리하게 이용하실 수 있습니다.',\n type: 'success'\n });\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n }\n\n formCompleteStatus = () => {\n let valid = true;\n if (!this.props.auth || !this.props.auth.addPatientForm) return false;\n\n const { name, relate, sex, age, contact, starting, environment, caution } = this.props.auth.addPatientForm;\n if (!name) valid = false;\n if (!relate) valid = false;\n if (!sex) valid = false;\n if (!age) valid = false;\n if (!contact) valid = false;\n if (!starting) valid = false;\n if (!environment) valid = false;\n if (!caution) valid = false;\n\n return valid;\n };\n\n render() {\n const { addPatientForm } = this.props.auth;\n const status = this.formCompleteStatus();\n return (\n <Modal\n isOpen={this.props.visible}\n ariaHideApp={false}\n // onRequestClose={modalOff} // esc키 또는 background 클릭 시 모달창 닫힘\n style={{ ...customStyles }}\n >\n <ProfileStyledContainer>\n <div className='inner-container'>\n <div className='profile-form'>\n <div className='form'>\n <div>\n <CloseButton src={'/assets/images/close.png'} onClick={this.props.onClose} style={{ width: '22px', height: '22px' }} />\n </div>\n <TitleSection>\n <WideModalTitle>환자 프로필 등록</WideModalTitle>\n <AlertText>\n *위드메이트 서비스를 사용하실 프로필을 등록할 수 있습니다.\n </AlertText>\n </TitleSection>\n\n <br />\n\n <WithmateLabel required>환자 이름</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='ex. 홍길동'\n value={addPatientForm.name || ''}\n onChange={ev => {\n this.onEdit({ type: 'name', value: ev.target.value.trim() });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel required>본인-{addPatientForm.name}님 간 관계</WithmateLabel>\n <WithmateSelect\n style={{ height: '48px', width: '100%' }}\n placeholder='환자 프로필을 등록하는 대상의 관계를 선택해주세요.'\n value={addPatientForm.relate || undefined}\n onChange={value => {\n this.onEdit({ type: 'relate', value });\n }}\n >\n <Select.Option value='본인'>본인</Select.Option>\n <Select.Option value='부모'>부모</Select.Option>\n <Select.Option value='자매'>자매</Select.Option>\n <Select.Option value='친구'>친구</Select.Option>\n <Select.Option value='지인'>지인</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n\n <DivisionLine />\n\n <WithmateLabel required>{addPatientForm.name}님 성별</WithmateLabel>\n <div className='type-button-wrapper'>\n <div\n className={`type-button ${addPatientForm.sex && addPatientForm.sex === '남자' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'sex', value: '남자' });\n }}\n >\n 남자\n </div>\n <div\n className={`type-button ${addPatientForm.sex && addPatientForm.sex === '여자' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'sex', value: '여자' });\n }}\n >\n 여자\n </div>\n </div>\n\n <DivisionLine />\n\n <WithmateLabel required>{addPatientForm.name}님 나이</WithmateLabel>\n <WithmateInput\n type='text'\n maxLength='2'\n placeholder=''\n name='age'\n suffix='세'\n value={addPatientForm.age || ''}\n onChange={ev => {\n this.onEdit({ type: 'age', value: ev.target.value.trim() });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel required>{addPatientForm.name}님 연락처</WithmateLabel>\n <WithmateInput\n type='text'\n maxLength={11}\n placeholder='숫자만 입력해주세요.(ex. 01012345678)'\n value={addPatientForm.contact || ''}\n onChange={ev => {\n this.onEdit({ type: 'contact', value: ev.target.value.trim() });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel required>{addPatientForm.name}님의 주소(자택 혹은 출발지)를 입력해주세요.</WithmateLabel>\n <WithamteInputWithButton\n inputConfig={{\n type: 'text',\n placeholder: 'ex) 서울특별시 도산대로 40, OO 아파트',\n name: 'starting',\n disabled: true,\n value: addPatientForm.starting || ''\n }}\n buttonName='검색'\n onButton={() => { this.onStarting() }}\n />\n <DivisionLine />\n\n <WithmateLabel required>{addPatientForm.name}님은 외출하실 때 '꼭' 계단을 이용하셔야 하나요?</WithmateLabel>\n <Radio\n checked={addPatientForm.environment === '네'}\n onClick={() => {\n this.onEdit({ type: 'environment', value: '네' });\n }}\n >\n 네\n </Radio>\n <Radio checked={addPatientForm.environment === '아니요, 엘레베이터가 있어요'}\n onClick={() => {\n this.onEdit({ type: 'environment', value: '아니요, 엘레베이터가 있어요' })\n }}\n >\n 아니요, 엘레베이터가 있어요\n </Radio>\n <Radio checked={addPatientForm.environment === '1층이라 괜찮아요'}\n onClick={() => {\n this.onEdit({ type: 'environment', value: '1층이라 괜찮아요' })\n }}\n >\n 1층이라 괜찮아요\n </Radio>\n <DivisionLine />\n\n <WithmateLabel required>메이트가 {addPatientForm.name}님과 동행할 때 주의해야 할 점이 있을까요?</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='메이트 도움 필요 소요(승하차 어려움, 보행 어려움, 의료진 설명 이해 어려움 등) 및 메이트 주의 사항'\n value={addPatientForm.caution || ''}\n onChange={ev => {\n this.onEdit({ type: 'caution', value: ev.target.value });\n }}\n />\n <Checkbox checked={addPatientForm.caution === '없어요'}\n onClick={() => {\n this.onEdit({ type: 'caution', value: '없어요' })\n }}\n >\n 없어요\n </Checkbox>\n\n <DivisionLine />\n\n <ButtonWrap>\n <HalfWidthButton style={{ marginRight: '8px', color: '#afb0b2' }} bg='#e6e6e6'\n onClick={this.props.onClose}\n >\n 닫기\n </HalfWidthButton>\n <HalfWidthButton style={{ margin: '0 auto' }} bg='#3bc1ff'\n onClick={() => {\n this.onProfile()\n }}\n style={!status ? { backgroundColor: '#E6E6E6', border: 0, cursor: 'not-allowed' } : {}}\n >\n 프로필 등록\n </HalfWidthButton>\n </ButtonWrap>\n\n <MobileBr />\n </div>\n </div>\n </div>\n </ProfileStyledContainer >\n </Modal >\n );\n }\n};\n\nexport default NewProfileComponent;\n\nconst CloseButton = styled.img`\n position: absolute;\n top: 16px;\n right: 12px;\n\n width: 18px;\n height: 18px;\n\n object-fit: cover;\n cursor: pointer;\n\n @media (max-width: 480px) {\n width: 16px;\n height: 16px;\n\n &.desktop-only {\n display: none;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nconst TitleSection = styled.div``;\n\nconst WideModalTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n`;\n\nconst AlertText = styled.div`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.52;\n letter-spacing: -0.3px;\n text-align: left;\n color: #ff5500;\n`;\n\nconst Agree = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n margin-bottom: 8px;\n\n span {\n font-size: 14px;\n line-height: 21px;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n span.point {\n color: #3bc1ff;\n }\n\n a.point {\n color: #3bc1ff;\n cursor: pointer;\n text-decoration: none;\n }\n\n .ant-checkbox-wrapper {\n margin-bottom: 0px !important;\n }\n`;\n\nconst Alert = styled.p`\n margin-bottom: 0px;\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 20px;\n letter-spacing: -0.15px;\n color: #ff5500;\n`;","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../../../theme';\n\nconst CardStyledContainer = styled.div`\n\n @media (max-width: 480px) {\n min-height: initial;\n height: 100%;\n padding-bottom: 0px;\n padding-top: 5px;\n }\n\n .inner-container {\n padding-bottom: 0px;\n padding-top: 0px;\n\n @media (max-width: 480px) {\n padding: 0px;\n }\n\n .profile-form {\n\n .title-wrapper {\n display: flex;\n justify-content: flex-start;\n margin-bottom: 16px;\n\n p {\n flex: 1;\n font-size: ${sizeHandler(32)};\n font-weight: bold;\n letter-spacing: -0.7px;\n line-height: 48px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n }\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: right;\n color: ${mainColor};\n }\n }\n\n .form {\n label {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.15px;\n line-height: 20px;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 4px;\n }\n\n input {\n height: 44px;\n border: solid 1px #e6e6e6;\n padding: 10px;\n\n &.ant-input {\n font-size: 16px;\n line-height: 28px;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.7);\n\n &::placeholder {\n font-size: 14px;\n }\n }\n }\n\n .type-button-wrapper {\n width: 100%;\n height: 48px;\n\n background-color: white;\n border: 1px solid #e6e6e6;\n border-radius: 4px;\n\n display: flex;\n align-items: center;\n\n > .type-button {\n width: 50%;\n height: 100%;\n line-height: 48px;\n\n text-align: center;\n cursor: pointer;\n\n font-size: 16px;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.2);\n }\n\n > .type-button.active {\n background: rgba(0, 0, 0, 0.7);\n border-radius: 4px;\n color: #f9f9f9;\n }\n }\n\n button {\n width: 100%;\n height: 46px;\n margin-top: 4px;\n margin-bottom: 16px;\n\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n }\n\n .link-wrapper {\n display: flex;\n justify-content: center;\n margin-bottom: 8px;\n .text {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n line-height: 21px;\n }\n\n .link {\n cursor: pointer;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.3px;\n text-align: center;\n color: ${mainColor};\n\n margin-left: 8px;\n }\n }\n }\n\n .form-user-type {\n height: 36px;\n margin-bottom: 20px;\n border-radius: 4px;\n border: 1px solid #e6e6e6;\n display: flex;\n align-items: center;\n overflow: hidden;\n\n .type {\n flex: 1;\n height: 100%;\n line-height: 36px;\n background-color: #ffffff;\n cursor: pointer;\n\n &:first-child {\n border-right: 1px solid #e6e6e6;\n }\n\n p {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n text-align: center;\n color: #606060;\n }\n\n &.active {\n background-color: #606060;\n\n p {\n color: #ffffff;\n }\n }\n }\n }\n }\n }\n\n .ant-upload-drag-container {\n .title {\n margin-top: 12px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n }\n\n .reco {\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n text-align: center;\n color: #a7a7a7;\n }\n }\n`;\n\nexport default CardStyledContainer;","import React from 'react';\nimport Modal from 'react-modal';\nimport styled from 'styled-components';\nimport { notification, Select, message } from 'antd';\n\nimport { DivisionLine, WithmateSelect, WithmateInput, WithmateLabel } from '../../../../Components/Common/input';\nimport { HalfWidthButton } from '../../../../Components/Common/button';\nimport CardStyledContainer from './card.styled';\n\nconst customStyles = {\n overlay: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(15, 15, 15, 0.79)',\n },\n content: {\n position: 'absolute',\n top: '30px',\n width: '350px',\n height: '37%',\n border: '1px solid #ccc',\n background: '#ffffff',\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n borderRadius: '4px',\n outline: 'none',\n padding: '20px',\n },\n};\n\nclass NewProfileComponent extends React.PureComponent {\n state = {\n modalInfo: '',\n modalTitle: '',\n };\n\n onEdit = ({ type, value }) => {\n this.props.editAddCardForm({ type, value });\n };\n\n onCard = () => {\n const { cardName, cardNum, year, month } = this.props.auth.addCardForm;\n\n if (!cardName) {\n return message.warning('카드명을 입력하세요');\n }\n\n if (!cardNum) {\n return message.warning('카드번호를 입력하세요');\n }\n\n if (!year) {\n return message.warning('유효 연도를 선택하세요');\n }\n\n if (!month) {\n return message.warning('유효 월을 선택하세요');\n }\n\n this.props\n .addCard({\n id: this.props.auth.id,\n userName: this.props.auth.name,\n cardName,\n cardNum,\n year,\n month,\n })\n .then(resolve => {\n // console.log(resolve)\n if (resolve.message === 'success') {\n this.props.onClose();\n this.onEdit({ type: 'clear', value: '' });\n notification.open({\n message: '결제카드 등록이 완료되었습니다.',\n description: '등록된 결제카드정보로 서비스 이용결제시 편리하게 이용하실 수 있습니다.',\n type: 'success',\n });\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n formCompleteStatus = () => {\n let valid = true;\n if (!this.props.auth || !this.props.auth.addCardForm) return false;\n\n const { cardName, cardNum, year, month } = this.props.auth.addCardForm;\n if (!cardName) valid = false;\n if (!cardNum) valid = false;\n if (!year) valid = false;\n if (!month) valid = false;\n\n return valid;\n };\n\n render() {\n // console.log(this.props.auth);\n const { addCardForm } = this.props.auth;\n const status = this.formCompleteStatus();\n return (\n <Modal\n isOpen={this.props.visible}\n ariaHideApp={false}\n // onRequestClose={modalOff} // esc키 또는 background 클릭 시 모달창 닫힘\n style={{ ...customStyles }}\n >\n <CardStyledContainer>\n <div className='inner-container'>\n <div className='profile-form'>\n <div className='form'>\n <div>\n <CloseButton src={'/assets/images/close.png'} onClick={this.props.onClose} style={{ width: '22px', height: '22px' }} />\n </div>\n <TitleSection>\n <WideModalTitle>결제카드정보 등록</WideModalTitle>\n </TitleSection>\n\n <br />\n\n <WithmateLabel required>결제 카드사</WithmateLabel>\n <WithmateSelect\n name='cardName'\n placeholder='카드사를 선택하세요'\n value={addCardForm.cardName || undefined}\n onChange={value => {\n this.onEdit({ type: 'cardName', value });\n }}\n >\n <Select.Option value='KB국민카드'>KB국민카드</Select.Option>\n <Select.Option value='삼성카드'>삼성카드</Select.Option>\n <Select.Option value='현대카드'>현대카드</Select.Option>\n <Select.Option value='우리카드'>우리카드</Select.Option>\n <Select.Option value='BC카드'>BC카드</Select.Option>\n <Select.Option value='신한카드'>신한카드</Select.Option>\n <Select.Option value='롯데카드'>롯데카드</Select.Option>\n <Select.Option value='NH농협카드'>NH농협카드</Select.Option>\n </WithmateSelect>\n\n <DivisionLine />\n\n <WithmateLabel required>카드번호</WithmateLabel>\n <WithmateInput\n type='phone'\n placeholder='11자리 또는 12자리의 카드번호를 입력하세요'\n value={addCardForm.cardNum || ''}\n maxLength='19'\n onChange={ev => {\n this.onEdit({\n type: 'cardNum',\n value: ev.target.value\n .replace(/[^0-9]/g, '')\n .replace(/^(\\d{0,4})(\\d{0,4})(\\d{0,4})(\\d{0,4})$/g, '$1-$2-$3-$4')\n .replace(/(\\-{1,2})$/g, ''),\n });\n }}\n />\n <DivisionLine />\n\n <WithmateLabel required>유효기간(MM/YY)</WithmateLabel>\n <YMWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateSelect\n style={{ width: '150px' }}\n placeholder='MM'\n value={addCardForm.month || undefined}\n onChange={value => {\n this.onEdit({ type: 'month', value });\n }}\n >\n <Select.Option value='1'>1</Select.Option>\n <Select.Option value='2'>2</Select.Option>\n <Select.Option value='3'>3</Select.Option>\n <Select.Option value='4'>4</Select.Option>\n <Select.Option value='5'>5</Select.Option>\n <Select.Option value='6'>6</Select.Option>\n <Select.Option value='7'>7</Select.Option>\n <Select.Option value='8'>8</Select.Option>\n <Select.Option value='9'>9</Select.Option>\n <Select.Option value='10'>10</Select.Option>\n <Select.Option value='11'>11</Select.Option>\n <Select.Option value='12'>12</Select.Option>\n </WithmateSelect>\n </div>\n <div style={{ flex: 1 }}>\n <WithmateInput\n style={{ width: '150px' }}\n type='text'\n placeholder='YY'\n maxLength='2'\n value={addCardForm.year || ''}\n onChange={ev => {\n this.onEdit({ type: 'year', value: ev.target.value });\n }}\n />\n </div>\n </YMWrapper>\n <DivisionLine />\n\n <ButtonWrap>\n <HalfWidthButton style={{ marginRight: '8px', color: '#afb0b2' }} bg='#e6e6e6' onClick={this.props.onClose}>\n 닫기\n </HalfWidthButton>\n <HalfWidthButton\n style={{ margin: '0 auto' }}\n bg='#3bc1ff'\n onClick={() => {\n this.onCard();\n }}\n style={!status ? { backgroundColor: '#E6E6E6', border: 0, cursor: 'not-allowed' } : {}}\n >\n 카드정보 등록\n </HalfWidthButton>\n </ButtonWrap>\n </div>\n </div>\n </div>\n </CardStyledContainer>\n </Modal>\n );\n }\n}\n\nexport default NewProfileComponent;\n\nconst CloseButton = styled.img`\n position: absolute;\n top: 16px;\n right: 12px;\n\n width: 18px;\n height: 18px;\n\n object-fit: cover;\n cursor: pointer;\n\n @media (max-width: 480px) {\n width: 16px;\n height: 16px;\n\n &.desktop-only {\n display: none;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nconst TitleSection = styled.div``;\n\nconst WideModalTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n`;\n\nconst YMWrapper = styled.div`\n display: flex;\n align-items: center;\n\n ${props =>\n props.withHalf\n ? `\n > div, p {\n width: calc(50% - 4px) !important;\n margin-right: 8px;\n }\n `\n : ''}\n\n > div:last-child {\n margin-right: 0px;\n }\n`;\n","import React from 'react';\nimport Modal from 'react-modal';\nimport styled from 'styled-components';\nimport { Select, message } from 'antd';\n\nimport { DivisionLine, WithmateSelect, WithmateInput, WithmateLabel } from '../../../../Components/Common/input';\nimport { HalfWidthButton } from '../../../../Components/Common/button';\nimport CardStyledContainer from './card.styled';\nimport { modifyCard } from '../../../../Lib/Api/auth';\n\nconst customStyles = {\n overlay: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(15, 15, 15, 0.79)',\n },\n content: {\n position: 'absolute',\n top: '30px',\n width: '350px',\n height: '37%',\n border: '1px solid #ccc',\n background: '#ffffff',\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n borderRadius: '4px',\n outline: 'none',\n padding: '20px',\n },\n};\n\nclass ModifyProfileComponent extends React.PureComponent {\n state = {\n modalInfo: '',\n modalTitle: '',\n cardId: '',\n cardInfo: null,\n };\n\n componentWillUnmount = () => {\n this.setState({ cardInfo: null });\n };\n\n componentDidUpdate = (prevState, prevProps) => {\n if (!this.state.cardInfo && JSON.stringify(prevProps) !== JSON.stringify(this.props)) {\n this.setState({ cardInfo: this.props });\n }\n if (JSON.stringify(prevProps) !== JSON.stringify(this.props) && !this.props._id) {\n this.setState({ cardInfo: null });\n }\n };\n\n onEdit = ({ type, value }) => {\n this.setState(prevState => ({\n cardInfo: {\n ...prevState.cardInfo,\n [type]: value,\n },\n }));\n };\n\n onCard = () => {\n const { cardInfo } = this.state;\n const { cardName, cardNum, year, month } = cardInfo;\n\n if (!cardName) {\n return message.warning('카드명을 입력하세요');\n }\n\n if (!cardNum) {\n return message.warning('카드번호를 입력하세요');\n }\n\n if (!year) {\n return message.warning('유효 연도를 선택하세요');\n }\n\n if (!month) {\n return message.warning('유효 월을 선택하세요');\n }\n\n const info = { cardName, cardNum, year, month };\n\n modifyCard({ cardId: cardInfo._id, info })\n .then(resolve => {\n if (resolve && resolve.data === 'success') {\n message.success('등록된 카드정보를 변경하였습니다.');\n this.props.onClose();\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n render() {\n if (!this.state.cardInfo) {\n return <div></div>;\n }\n\n const { cardInfo } = this.state;\n\n return (\n <Modal\n isOpen={this.props.visible}\n ariaHideApp={false}\n // onRequestClose={modalOff} // esc키 또는 background 클릭 시 모달창 닫힘\n style={{ ...customStyles }}\n >\n <CardStyledContainer>\n <div className='inner-container'>\n <div className='profile-form'>\n <div className='form'>\n <div>\n <CloseButton src={'/assets/images/close.png'} onClick={this.props.onClose} style={{ width: '22px', height: '22px' }} />\n </div>\n <TitleSection>\n <WideModalTitle>결제카드정보 수정</WideModalTitle>\n </TitleSection>\n\n <br />\n\n <WithmateLabel required>결제 카드사</WithmateLabel>\n <WithmateSelect\n name='cardName'\n placeholder='카드사를 선택하세요'\n value={cardInfo.cardName || undefined}\n onChange={value => {\n this.onEdit({ type: 'cardName', value });\n }}\n >\n <Select.Option value='KB국민카드'>KB국민카드</Select.Option>\n <Select.Option value='삼성카드'>삼성카드</Select.Option>\n <Select.Option value='현대카드'>현대카드</Select.Option>\n <Select.Option value='우리카드'>우리카드</Select.Option>\n <Select.Option value='BC카드'>BC카드</Select.Option>\n <Select.Option value='신한카드'>신한카드</Select.Option>\n <Select.Option value='롯데카드'>롯데카드</Select.Option>\n <Select.Option value='NH농협카드'>NH농협카드</Select.Option>\n </WithmateSelect>\n\n <DivisionLine />\n\n <WithmateLabel required>카드번호</WithmateLabel>\n <WithmateInput\n type='phone'\n placeholder='11자리 또는 12자리의 카드번호를 입력하세요'\n value={cardInfo.cardNum || ''}\n maxLength='19'\n onChange={ev => {\n this.onEdit({\n type: 'cardNum',\n value: ev.target.value\n .replace(/[^0-9]/g, '')\n .replace(/^(\\d{0,4})(\\d{0,4})(\\d{0,4})(\\d{0,4})$/g, '$1-$2-$3-$4')\n .replace(/(\\-{1,2})$/g, ''),\n });\n }}\n />\n <DivisionLine />\n\n <WithmateLabel required>유효기간(MM/YY)</WithmateLabel>\n <YMWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateSelect\n style={{ width: '150px' }}\n placeholder='MM'\n value={cardInfo.month || ''}\n onChange={value => {\n this.onEdit({ type: 'month', value });\n }}\n >\n <Select.Option value='1'>1</Select.Option>\n <Select.Option value='2'>2</Select.Option>\n <Select.Option value='3'>3</Select.Option>\n <Select.Option value='4'>4</Select.Option>\n <Select.Option value='5'>5</Select.Option>\n <Select.Option value='6'>6</Select.Option>\n <Select.Option value='7'>7</Select.Option>\n <Select.Option value='8'>8</Select.Option>\n <Select.Option value='9'>9</Select.Option>\n <Select.Option value='10'>10</Select.Option>\n <Select.Option value='11'>11</Select.Option>\n <Select.Option value='12'>12</Select.Option>\n </WithmateSelect>\n </div>\n <div style={{ flex: 1 }}>\n <WithmateInput\n style={{ width: '150px' }}\n type='text'\n placeholder='YY'\n maxLength='2'\n value={cardInfo.year || ''}\n onChange={ev => {\n this.onEdit({ type: 'year', value: ev.target.value });\n }}\n />\n </div>\n </YMWrapper>\n <DivisionLine />\n\n <ButtonWrap>\n <HalfWidthButton style={{ marginRight: '8px', color: '#afb0b2' }} bg='#e6e6e6' onClick={this.props.onClose}>\n 닫기\n </HalfWidthButton>\n <HalfWidthButton\n style={{ margin: '0 auto' }}\n bg='#3bc1ff'\n onClick={() => {\n this.onCard();\n }}\n >\n 카드정보 수정\n </HalfWidthButton>\n </ButtonWrap>\n </div>\n </div>\n </div>\n </CardStyledContainer>\n </Modal>\n );\n }\n}\n\nexport default ModifyProfileComponent;\n\nconst CloseButton = styled.img`\n position: absolute;\n top: 16px;\n right: 12px;\n\n width: 18px;\n height: 18px;\n\n object-fit: cover;\n cursor: pointer;\n\n @media (max-width: 480px) {\n width: 16px;\n height: 16px;\n\n &.desktop-only {\n display: none;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nconst TitleSection = styled.div``;\n\nconst WideModalTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n`;\n\nconst YMWrapper = styled.div`\n display: flex;\n align-items: center;\n\n ${props =>\n props.withHalf\n ? `\n > div, p {\n width: calc(50% - 4px) !important;\n margin-right: 8px;\n }\n `\n : ''}\n\n > div:last-child {\n margin-right: 0px;\n }\n`;\n","import React from \"react\";\nimport Modal from \"react-modal\";\nimport styled from 'styled-components';\nimport { Button, Checkbox, notification, Select, message, Radio } from 'antd';\n\nimport { DivisionLine, WithmateSelect, WithmateInput, WithamteInputWithButton, WithmateLabel } from \"../../../../Components/Common/input\";\nimport { HalfWidthButton } from '../../../../Components/Common/button';\nimport ProfileStyledContainer from \"./profile.styled\";\nimport { modifyPatient } from \"../../../../Lib/Api/auth\";\nimport { MobileBr } from \"../../../Guide/guide.styled\";\n\nconst customStyles = {\n\n overlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(15, 15, 15, 0.79)\",\n },\n content: {\n position: \"absolute\",\n top: \"30px\",\n height: \"90%\",\n border: \"1px solid #ccc\",\n background: \"#ffffff\",\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n borderRadius: \"4px\",\n outline: \"none\",\n padding: \"20px\",\n },\n}\n\nclass ModifyProfileComponent extends React.PureComponent {\n state = {\n modalInfo: '',\n modalTitle: '',\n patientId: '',\n patientInfo: null\n };\n\n componentWillUnmount = () => {\n this.setState({ patientInfo: null });\n };\n\n componentDidUpdate = (prevState, prevProps) => {\n if (!this.state.patientInfo && JSON.stringify(prevProps) !== JSON.stringify(this.props)) {\n this.setState({ patientInfo: this.props })\n }\n if (JSON.stringify(prevProps) !== JSON.stringify(this.props) && !this.props._id) {\n this.setState({ patientInfo: null })\n }\n }\n\n onEdit = ({ type, value }) => {\n this.setState(prevState => ({\n patientInfo: {\n ...prevState.patientInfo,\n [type]: value,\n }\n }));\n };\n\n onStarting = () => {\n new window.daum.Postcode({\n oncomplete: data => {\n const { sido, sigungu, bname, roadAddress, buildingName } = data;\n this.onEdit({ type: 'shortStarting', value: `${sido} ${sigungu} ${bname}` });\n this.onEdit({ type: 'starting', value: `${roadAddress} (${ buildingName })` });\n },\n }).open();\n };\n\n onProfile = () => {\n const { patientInfo } = this.state;\n const {\n name,\n relate,\n sex,\n age,\n contact,\n starting,\n environment,\n caution\n } = patientInfo;\n\n if (!name) {\n return message.warning('성함을 입력해주세요.');\n }\n\n if (!relate) {\n return message.warning('관계를 선택해주세요.');\n }\n\n if (!sex) {\n return message.warning('성별을 선택해주세요.');\n }\n\n if (!age || age.length > 3) {\n return message.warning('나이를 입력해주세요.');\n }\n\n if (!contact) {\n return message.warning('연락처를 입력해주세요.');\n }\n\n if (!starting) {\n return message.warning('주소(자택, 출발지)를 입력해주세요.');\n }\n\n if (!environment) {\n return message.warning('거주환경을 입력해주세요.');\n }\n\n if (!caution) {\n return message.warning('기타 불편한 사항(시력)을 입력해주세요.');\n }\n\n if (name.length > 15) return message.info('이름이 너무 깁니다. 이름은 15자 이내로 설정해주세요.');\n\n const info = {\n name, relate, sex, age, contact, starting, environment, caution\n }\n\n modifyPatient({ patientId: patientInfo._id, info })\n .then(resolve => {\n // console.log(resolve)\n if (resolve && resolve.data === 'success') {\n message.success('환자 프로필 정보를 변경하였습니다.')\n this.props.onClose();\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n }\n\n render() {\n if (!this.state.patientInfo) {\n return <div></div>;\n }\n\n const { patientInfo } = this.state;\n\n return (\n <Modal\n isOpen={this.props.visible}\n ariaHideApp={false}\n // onRequestClose={modalOff} // esc키 또는 background 클릭 시 모달창 닫힘\n style={{ ...customStyles }}\n >\n <ProfileStyledContainer>\n <div className='inner-container'>\n <div className='profile-form'>\n <div className='form'>\n <div>\n <CloseButton src={'/assets/images/close.png'} onClick={this.props.onClose} style={{ width: '22px', height: '22px' }} />\n </div>\n <TitleSection>\n <WideModalTitle>환자 프로필 수정</WideModalTitle>\n <AlertText>\n * 환자 프로필 정보를 수정할 수 있습니다.\n </AlertText>\n </TitleSection>\n\n <br />\n\n <WithmateLabel required>환자 이름</WithmateLabel>\n <WithmateInput\n type='email'\n placeholder='ex. 홍길동'\n value={patientInfo.name}\n onChange={ev => {\n this.onEdit({ type: 'name', value: ev.target.value.trim() });\n }}\n />\n\n <DivisionLine small />\n\n <WithmateLabel required>본인-환자 간 관계</WithmateLabel>\n <WithmateSelect\n name='relate'\n style={{ height: '48px', width: '100%' }}\n placeholder='환자 프로필을 등록하는 대상의 관계를 선택해주세요.'\n value={patientInfo.relate || undefined}\n onChange={value => {\n this.onEdit({ type: 'relate', value });\n }}\n >\n <Select.Option value='본인'>본인</Select.Option>\n <Select.Option value='부모'>부모</Select.Option>\n <Select.Option value='자매'>자매</Select.Option>\n <Select.Option value='친구'>친구</Select.Option>\n <Select.Option value='지인'>지인</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n\n <DivisionLine small />\n\n <WithmateLabel required>{patientInfo.name}님 성별</WithmateLabel>\n <div className='type-button-wrapper'>\n <div\n className={`type-button ${patientInfo.sex && patientInfo.sex === '남자' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'sex', value: '남자' });\n }}\n >\n 남자\n </div>\n <div\n className={`type-button ${patientInfo.sex && patientInfo.sex === '여자' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'sex', value: '여자' });\n }}\n >\n 여자\n </div>\n </div>\n\n <DivisionLine small />\n\n <WithmateLabel required>{patientInfo.name}님 나이</WithmateLabel>\n <WithmateInput\n type='number'\n maxLength='2'\n placeholder=''\n name='age'\n suffix='세'\n value={patientInfo.age}\n onChange={ev => {\n this.onEdit({ type: 'age', value: ev.target.value.trim() });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel required>{patientInfo.name}님 연락처</WithmateLabel>\n <WithmateInput\n name='contact'\n type='text'\n maxLength={11}\n placeholder='숫자만 입력해주세요.(ex. 01012345678)'\n value={patientInfo.contact}\n onChange={ev => {\n this.onEdit({ type: 'contact', value: ev.target.value.trim() });\n }}\n />\n\n <DivisionLine />\n\n <WithmateLabel required>{patientInfo.name}님의 주소(자택 혹은 출발지)를 입력해주세요.</WithmateLabel>\n <WithamteInputWithButton\n inputConfig={{\n type: 'text',\n placeholder: 'ex) 서울특별시 도산대로 40, OO 아파트',\n name: 'starting',\n disabled: true,\n value: patientInfo.starting\n }}\n buttonName='검색'\n onButton={() => { this.onStarting() }}\n />\n <DivisionLine />\n\n <WithmateLabel required>메이트가 {patientInfo.name}님은 외출하실 때 '꼭' 계단을 이용하셔야 하나요?</WithmateLabel>\n <Radio\n checked={patientInfo.environment === '네'}\n onClick={() => {\n this.onEdit({ type: 'environment', value: '네' });\n }}\n >\n 네\n </Radio>\n <Radio checked={patientInfo.environment === '아니요, 엘레베이터가 있어요'}\n onClick={() => {\n this.onEdit({ type: 'environment', value: '아니요, 엘레베이터가 있어요' })\n }}\n >\n 아니요, 엘레베이터가 있어요\n </Radio>\n <Radio checked={patientInfo.environment === '1층이라 괜찮아요'}\n onClick={() => {\n this.onEdit({ type: 'environment', value: '1층이라 괜찮아요' })\n }}\n >\n 1층이라 괜찮아요\n </Radio>\n <DivisionLine />\n \n <WithmateLabel required>메이트가 {patientInfo.name}님과 동행할 때 주의해야 할 점이 있을까요?</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='동행시 주의사항을 입력하세요.'\n value={patientInfo.caution || ''}\n onChange={ev => {\n this.onEdit({ type: 'caution', value: ev.target.value });\n }}\n />\n <Checkbox checked={patientInfo.caution === '없어요'}\n onClick={() => {\n this.onEdit({ type: 'caution', value: '없어요' })\n }}\n >\n 없어요\n </Checkbox>\n\n <DivisionLine />\n\n <ButtonWrap>\n <HalfWidthButton style={{ marginRight: '8px', color: '#afb0b2' }} bg='#e6e6e6'\n onClick={this.props.onClose}\n >\n 닫기\n </HalfWidthButton>\n <HalfWidthButton style={{ margin: '0 auto' }} bg='#3bc1ff'\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n this.onProfile()\n }}\n >\n 프로필 수정\n </HalfWidthButton>\n </ButtonWrap>\n\n <MobileBr />\n </div>\n </div>\n </div>\n </ProfileStyledContainer >\n </Modal >\n );\n }\n};\n\nexport default ModifyProfileComponent;\n\nconst CloseButton = styled.img`\n position: absolute;\n top: 16px;\n right: 12px;\n\n width: 18px;\n height: 18px;\n\n object-fit: cover;\n cursor: pointer;\n\n @media (max-width: 480px) {\n width: 16px;\n height: 16px;\n\n &.desktop-only {\n display: none;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nconst TitleSection = styled.div``;\n\nconst WideModalTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n`;\n\nconst AlertText = styled.div`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.52;\n letter-spacing: -0.3px;\n text-align: left;\n color: #ff5500;\n`;","import React from 'react';\nimport { DeleteOutlined, EditOutlined } from \"@ant-design/icons\"\n\n\nexport const patientColumn = ({ onModify, onDelete }) => {\n return [\n {\n title: '번호',\n dataIndex: 'index',\n align: 'center',\n width: '58px',\n },\n {\n title: '이름',\n dataIndex: 'name',\n align: 'center'\n },\n {\n title: '나이',\n dataIndex: 'age',\n align: 'center'\n },\n {\n title: '수정',\n dataIndex: 'valid',\n align: 'center',\n width: '58px',\n render: (valid, info) =>\n <EditOutlined\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n\n onModify(info);\n }}\n />\n },\n {\n title: '삭제',\n dataIndex: 'createdAt',\n align: 'center',\n width: '58px',\n render: (createdAt, { _id }) =>\n <DeleteOutlined\n onClick={(e) => {\n console.log('_id: ', _id)\n e.preventDefault();\n e.stopPropagation();\n\n onDelete({ _id });\n }}\n />\n },\n ]\n}\n\nexport const cardColumn = ({ onModify, onDelete }) => {\n return [\n {\n title: '번호',\n dataIndex: 'index',\n align: 'center',\n width: '58px',\n },\n {\n title: '카드명',\n dataIndex: 'cardName',\n align: 'center'\n },\n {\n title: '카드번호',\n dataIndex: 'cardNum',\n align: 'center',\n render: cardNum => <span>**** - **** - **** - {cardNum.slice(15, 19)}</span>\n },\n {\n title: '수정',\n dataIndex: 'valid',\n align: 'center',\n width: '58px',\n render: (valid, info) =>\n <EditOutlined\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n\n onModify(info);\n }}\n />\n },\n {\n title: '삭제',\n dataIndex: 'createdAt',\n align: 'center',\n width: '58px',\n render: (createdAt, { _id }) =>\n <DeleteOutlined\n onClick={(e) => {\n console.log('_id: ', _id)\n e.preventDefault();\n e.stopPropagation();\n\n onDelete({ _id });\n }}\n />\n },\n ]\n};","import React from 'react';\nimport styled from 'styled-components';\nimport { Table, Input, notification, Upload, Button, message, Modal, Select, DatePicker, Collapse, InputNumber, Radio } from 'antd';\nimport moment from 'moment';\nimport _ from 'lodash';\nimport StarRatingComponent from 'react-star-rating-component';\nimport swal from 'sweetalert2';\nimport { DeleteOutlined, EditOutlined } from '@ant-design/icons';\nimport Pallete from '../../../../theme';\n\n// components\nimport { InputFilter, ReserveList } from '../../../../Components/User/Normal/auth';\nimport { UserStatistics } from '../../../../Components/User/Normal/statistics';\nimport { UserNavigation } from '../../../../Components/User/Normal/navi';\nimport { NoramlReserveEditModal, ReportMoal, NoReportModal } from '../../../../Components/newModal';\nimport {\n PointBoxRow,\n PointBox,\n PointBox2,\n PointBox3,\n NoHistory,\n PointBoxTitle,\n PointTotal,\n PointHistoryRow,\n PointHistoryNameRow,\n PointContent,\n PointHistoryValueRow,\n} from './normal.styled';\n\n// utils\nimport axios from '../../../../Lib/axios';\nimport { UNEMER, ASSIST, LOCAL } from '../../../../Lib/variables';\nimport { datetimeFormatter, timeFormatter, currencyFormatter, getWithcarPrice } from '../../../../Lib/utils';\nimport Profile from '../Profile/profile';\nimport Card from '../Card/card';\nimport ModifyCard from '../Card/cardInfoCheck';\nimport ModifyProfile from '../Profile/profileInfoCheck';\nimport { DivisionLine, WithmateInput, WithmateLabel } from '../../../../Components/Common/input';\nimport { patientColumn, cardColumn } from '../../../../Components/Columns/normal';\nimport { HalfWidthButton } from '../../../../Components/Common/button';\n\nconst { Kakao } = window;\n\nmoment.lang('ko', {\n weekdays: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],\n weekdaysShort: ['일', '월', '화', '수', '목', '금', '토'],\n});\n\nclass NormalUser extends React.PureComponent {\n state = {\n active: 'list', // list, info, point\n reservedFilter: 'none', // none, reserved, matched, complete\n paidFilter: 'none', // none, paid, refund\n modal: false,\n kakaoModal: false,\n selected: null,\n cancelModal: false,\n modifyModal: false,\n detailModalPage: 1,\n reserveDetailModal: false,\n mateModal: false,\n mateInfo: {},\n serviceInfo: null,\n serviceStatus: null,\n serviceModal: false,\n keyword: '',\n addHalfTime: false,\n totalPro: 0,\n totalBasic: 0,\n pointUsingHistory: [],\n pointAddHistory: [],\n couponAddHistory: [],\n\n patientModal: false,\n patientModifyModal: false,\n patientInfo: {},\n patientId: '',\n\n cardModal: false,\n cardModifyModal: false,\n cardInfo: {},\n cardId: '',\n\n appointedCode: '',\n };\n\n patientModalOff = () => {\n const userId = localStorage.getItem('id');\n this.props.fetchPatient({ id: userId });\n this.setState({\n patientModal: false,\n patientInfo: {},\n });\n };\n\n patientModifyModalOff = () => {\n const userId = localStorage.getItem('id');\n this.props.fetchPatient({ id: userId });\n this.setState({\n patientModifyModal: false,\n patientInfo: {},\n });\n };\n\n cardModalOff = () => {\n const userId = localStorage.getItem('id');\n this.props.fetchCard({ id: userId });\n this.setState({\n cardModal: false,\n cardInfo: {},\n });\n };\n\n cardModifyModalOff = () => {\n const userId = localStorage.getItem('id');\n this.props.fetchCard({ id: userId });\n this.setState({\n cardModifyModal: false,\n cardInfo: {},\n });\n };\n\n componentDidMount = () => {\n this.syncStep();\n this.fetchUserInfo();\n };\n\n componentDidUpdate = (prevProps, prevState) => {\n if (prevState.active !== this.state.active) {\n this.props.history.push(`/user/mypage/${this.state.active}`);\n }\n };\n\n syncStep = () => {\n const { params } = this.props.match;\n const { active } = this.state;\n\n if (params.tab && active !== params.tab) {\n this.setState({ active: params.tab });\n } else if (!params.tab) {\n this.props.history.push(`/user/mypage/list`);\n }\n };\n\n fetchUserInfo = () => {\n const { userType, id } = this.props.auth;\n // 예약이력\n axios.get('/v2/service/user/reserve/list', { params: { userId: id } }).then(resolve => {\n const { data } = resolve;\n if (data && Array.isArray(data)) {\n this.setState({\n reserves: data,\n totalPro: data.filter(d => d && d.service === UNEMER).length,\n totalBasic: data.filter(d => d && d.service === ASSIST).length,\n });\n }\n });\n // 사용자 포인트\n axios.get('/v2/user/point/history', { params: { userId: id } }).then(resolve => {\n const { data } = resolve;\n if (data && Array.isArray(data)) {\n this.setState({\n pointUsingHistory: data.filter(d => d && d.actionType === 'use'),\n pointAddHistory: data.filter(d => d && d.actionType === 'add'),\n });\n }\n });\n // 사용자 쿠폰\n axios.get('/v2/user/coupon/history', { params: { userId: id } }).then(resolve => {\n const { data } = resolve;\n if (data && Array.isArray(data)) {\n this.setState({\n couponAddHistory: data.filter(d => d && d.actionType === 'add'),\n });\n }\n });\n };\n\n updateBasicInfo = () => {\n const { id, userType } = this.props.auth;\n const { userInfo } = this.props.app;\n const { name, contact } = userInfo;\n\n if (!name || !contact) return message.info('필수정보인 이름과 연락처를 입력해주세요.');\n if (name.length > 15) return message.info('이름이 너무 깁니다. 이름은 15자 이내로 설정해주세요.');\n\n const info = { name, contact };\n\n this.props.modify({ id, userType, info }).then(resolve => {\n if (resolve && resolve.name) {\n message.success('정보를 업데이트 하였습니다.');\n localStorage.setItem('name', resolve.name);\n this.props.editAuth({ type: 'name', value: resolve.name });\n this.props.editAuth({ type: 'contact', value: resolve.contact });\n }\n });\n };\n\n modifyPassword = () => {\n const { passwordForm, id, userType } = this.props.auth;\n const { password, newPassword, reNewPassword } = passwordForm;\n\n if (password === newPassword) return message.info('새 비밀번호는 기존 비밀번호와 달라야합니다.');\n if (reNewPassword !== newPassword) return message.info('새 비밀번호를 확인해주세요.');\n\n this.props\n .modifyPassword({ id, userType, password, newPassword })\n .then(resolve => {\n if (resolve && resolve === 'wrong password') {\n return message.error('비밀번호가 일치하지 않습니다.');\n }\n\n if (resolve && resolve === 'not exist') {\n message.error('유효하지 않은 계정입니다. 다시 로그인해주세요.');\n return this.props.history.push('/user/logout');\n }\n\n if (resolve && resolve === 'success') {\n message.success('비밀번호를 변경하였습니다.');\n this.props.editPassword({ type: 'clear', value: '' });\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n withdrawl = () => {\n const { id, userType, password } = this.props.auth;\n\n if (!password) return message.info('비밀번호를 입력해주세요.');\n\n this.props\n .withdrawlUser({ id, userType, password })\n .then(resolve => {\n if (resolve && resolve === 'wrong password') {\n return message.info('잘못된 비밀번호입니다.');\n }\n\n if (resolve && resolve === 'success') {\n message.info('회원탈퇴를 완료하였습니다. 이용해주셔서 감사합니다.');\n this.setState({ modal: false });\n setTimeout(() => {\n this.props.history.push('/user/logout');\n }, 500);\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n tabHandler = type => {\n this.setState({ active: type });\n };\n\n onMateModal = async info => {\n const { data } = await axios.get('/v2/user/mate/info/detail', {\n params: {\n mateId: info.mateId,\n },\n });\n\n this.setState({\n mateInfo: data,\n callStatus: info.status,\n callId: info.callId,\n reserveId: info.reserveId,\n mateModal: true,\n modifyModal: false,\n reserveDetailModal: false,\n cancelModal: false,\n });\n };\n\n // 요거 진행해야함\n onRematch = async () => {\n const { reserveId, callId } = this.state;\n\n const { data } = await axios.put('/v2/service/deny/mate/call', {\n callId,\n reserveId,\n });\n\n if (data === 'check parameters') {\n return message.warning('요청하신 정보가 올바르지 않습니다. 새로고침 후 다시 시도해주세요.');\n }\n\n if (data === 'no mate') {\n return console.warn('현재 예약 신청항 메이트가 없습니다.');\n }\n\n if (data === 'invalid call') {\n return message.warning('접수내역에 문제가 발생하였습니다. 새로고침 후 다시 시도해주세요.');\n }\n\n if (data === 'already matched') {\n return message.warning('이미 메이트 매칭이 완료되었습니다.');\n }\n\n if (data === 'do not') {\n return message.warning('해당 예약은 메이트 거절 불가한 상태입니다.');\n }\n\n if (data === 'success') {\n message.success('요청완료하였습니다.');\n setTimeout(() => {\n window.location.reload();\n }, 1000);\n }\n };\n\n confirmReserve = () => {\n const { callId, reserveId } = this.state;\n const { id } = this.props.auth;\n\n axios\n .put('/v2/service/allow/mate/call', {\n callId,\n reserveId,\n })\n .then(resolve => {\n const { data } = resolve;\n if (data === 'check parameters') {\n return message.warning('요청하신 정보가 올바르지 않습니다. 새로고침 후 다시 시도해주세요.');\n }\n if (data === 'invalid call') {\n return message.warning('유효하지않은 접수내역입니다. 새로고침 후 다시 시도해주세요.');\n }\n if (data === 'no mate') {\n return console.warn('아직 접수 요청중인 메이트가 없습니다. 문제가 계속되면 고객센터로 문의해주세요.');\n }\n if (data === 'wrong status') {\n return message.warning('해당 예약이 메이트 확정가능한 상태가 아닙니다.');\n }\n if (data === 'issue call') {\n return message.warning('예약에 문제가 발생했습니다. 고객센터로 문의해주세요.');\n }\n if (data === 'success') {\n message.success('메이트 확정 완료');\n setTimeout(() => {\n window.location.reload();\n }, 250);\n }\n });\n };\n\n onDetailModal = reserveId => {\n const { userType, id } = this.props.auth;\n\n axios.get('/v2/service/user/reserve/info', { params: { userId: id, reserveId } }).then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n if (data === 'invalid reserve') return message.warning('유효하지않은 예약입니다.');\n\n this.setState({\n reserveDetailModal: true,\n temp: {\n ...data,\n disabled: true,\n addTime: data.usageTime * 60 + '분',\n date: moment(data.reserveDate),\n time: moment(data.reserveDate).format('HH').toString(),\n minute: moment(data.reserveDate).format('mm').toString(),\n meetDate: data.meetDate ? moment(data.meetDate) : '',\n meetTime: data.meetDate ? moment(data.meetDate).format('HH').toString() : '',\n meetMinute: data.meetDate ? moment(data.meetDate).format('mm').toString() : '',\n },\n });\n });\n };\n\n inputHandler = ({ type, value }) => {\n this.setState({ [type]: value });\n };\n\n inputDeepHandler = ({ type, deepType, value }) => {\n this.setState(prevState => ({\n [type]: {\n ...prevState[type],\n [deepType]: value,\n },\n }));\n };\n\n onViewReport = item => {\n const { call } = item;\n if (!call.reportId) {\n message.warning('죄송합니다. 아직 담당 메이트가 리포트를 등록하지 않았습니다.');\n return null;\n }\n axios.get('/v2/review/report/viewer', { params: { reportId: call.reportId, callId: call._id } }).then(resolve => {\n const { data } = resolve;\n\n this.setState({\n report: data.report,\n timeline: data.timeline,\n selectedServiceName:\n item.productInfo.name + (item.productInfo.name.includes('내시경') ? '' : item.service === 'unemergency' ? ' Pro' : ' Basic'),\n onReportMoal: true,\n });\n });\n };\n\n onPatientModal = () => {\n this.setState({ patientModal: true });\n };\n\n onPatientModifyModal = () => {\n this.setState({ patientModifyModal: true });\n };\n\n onCardModal = () => {\n this.setState({ cardModal: true });\n };\n\n onCardModifyModal = () => {\n this.setState({ cardModifyModal: true });\n };\n\n onRow = row => {\n return {\n onClick: async () => {\n // const info = await this.onFetchPatientInfo(row);\n // console.log(row)\n swal.fire({\n title: '환자 프로필 정보',\n icon: 'info',\n width: '550px',\n html: `\n <br/>\n <div align=\"left\">\n <p><b>ㆍ이름 : </b> ${row.name}</p>\n <p><b>ㆍ관계 : </b> ${row.relate}</p>\n <p><b>ㆍ성별 : </b> ${row.sex}</p>\n <p><b>ㆍ나이 : </b> ${row.age} 세</p>\n <p><b>ㆍ연락처 : </b> ${row.contact}</p>\n <p><b>ㆍ주소 : </b> ${row.starting}</p>\n <p><b>ㆍ계단 이용 : </b> ${row.environment}</p>\n <p><b>ㆍ메이트 주의사항 : </b> ${row.caution}</p>\n </div>\n `,\n });\n },\n };\n };\n\n onFetchPatientInfo = async row => {\n console.log(row);\n return axios.get('/v1/auth/patient/list/info', { params: { userId: row.userId, patientId: row._id } });\n };\n\n onPatientModify = info => {\n this.setState({ patientModifyModal: true, patientInfo: info });\n // console.log(info)\n };\n\n onPatientDelete = ({ _id }) => {\n const { id } = this.props.auth;\n console.log('_id: ', _id);\n\n const confirmed = window.confirm('해당 환자 프로필을 삭제하시겠습니까?');\n if (!confirmed) return null;\n\n this.props\n .deletePatient({ patientId: _id })\n .then(resolve => {\n if (resolve && resolve === 'success') {\n const userId = localStorage.getItem('id');\n this.props.fetchPatient({ id: userId });\n notification.open({\n message: '환자 프로필을 삭제하였습니다.',\n description: '환자 프로필을 삭제하였습니다.',\n type: 'success',\n });\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n onCardModify = info => {\n this.setState({ cardModifyModal: true, cardInfo: info });\n // console.log(info)\n };\n\n onCardDelete = ({ _id }) => {\n const { id } = this.props.auth;\n console.log('_id: ', _id);\n\n const confirmed = window.confirm('해당 카드정보를 삭제하시겠습니까?');\n if (!confirmed) return null;\n\n this.props\n .deleteCard({ cardId: _id })\n .then(resolve => {\n if (resolve && resolve === 'success') {\n const userId = localStorage.getItem('id');\n this.props.fetchCard({ id: userId });\n notification.open({\n message: '카드정보를 삭제하였습니다.',\n description: '카드정보를 삭제하였습니다.',\n type: 'success',\n });\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n // kakao api unlink\n kakaoUnlink = () => {\n const { id, userType } = this.props.auth;\n\n window.Kakao.API.request({\n url: '/v1/user/unlink',\n success: function (response) {\n console.log(response, 'kakao api unlink!');\n // window.location.href = '/user/logout'\n },\n fail: function (error) {\n console.log(error, 'kakao api unlink error');\n },\n });\n\n this.props\n .withdrawlKakao({ id, userType })\n .then(resolve => {\n if (resolve && resolve === 'success') {\n notification.open({\n message: '회원탈퇴를 완료하였습니다.',\n description: '그동안 위드메이트의 서비스를 이용해주셔서 감사합니다.',\n type: 'success',\n });\n this.setState({ kakaoModal: false });\n setTimeout(() => {\n this.props.history.push('/user/logout');\n }, 500);\n }\n })\n .catch(error => {\n message.error('서버장애가 발생하였습니다. 관리자에게 문의해주세요.');\n });\n };\n\n onAddCoupon = async () => {\n const { appointedCode } = this.state;\n if (!appointedCode) {\n // notification.open({\n // message: '쿠폰 코드가 입력되지 않았습니다',\n // description: '쿠폰 코드를 입력해주세요',\n // type: 'warning',\n // });\n }\n\n if (appointedCode) {\n const { data } = await axios.post('/v2/user/add/coupon', {\n userId: this.props.auth.id,\n userName: this.props.auth.name,\n appointedCode,\n info: {\n couponName: '',\n couponValue: '',\n },\n });\n\n if (!data || data === 'check parameters') {\n notification.open({\n message: '쿠폰 코드 등록에 실패하였습니다',\n description: '다시 한번 쿠폰 코드를 입력해주세요',\n type: 'warning',\n });\n }\n\n if (data === 'wrong access') {\n notification.open({\n message: '쿠폰 코드가 일치하지 않습니다',\n description: '입력하신 쿠폰 코드를 다시한번 확인하세요',\n type: 'warning',\n });\n }\n\n if (data === 'duplicate') {\n notification.open({\n message: '이미 등록된 쿠폰 코드입니다',\n description: '다른 쿠폰 코드를 입력해주세요',\n type: 'warning',\n });\n }\n\n if (data === 'success') {\n notification.open({\n message: '쿠폰 코드가 등록되었습니다',\n description: '포인트가 정상적으로 지급되었습니다',\n type: 'success',\n });\n setTimeout(() => {\n window.location.reload();\n }, 250);\n }\n }\n };\n\n handleChange = e => {\n this.setState({ [e.target.title]: e.target.value });\n };\n\n render() {\n // console.log(this.props.auth)\n const { auth } = this.props;\n const { password, newPassword, reNewPassword } = auth.passwordForm;\n const { userInfo } = this.props.app;\n // console.log(userInfo)\n const { pointUsingHistory, pointAddHistory, couponAddHistory, active, reservedFilter, reserves, mateInfo, keyword, totalPro, totalBasic } = this.state;\n\n // console.log(auth);\n const list = keyword\n ? reserves.filter(reserve => {\n const { call } = reserve;\n\n return (\n (reserve && reserve.reserveCode && reserve.reserveCode.toLowerCase().includes(keyword.toLowerCase())) ||\n (call && call.mate && call.mate.toLowerCase().includes(keyword.toLowerCase()))\n );\n })\n : reserves;\n\n return (\n <div className='auth-container'>\n <div className='navigation-container'>\n <div className='inner-container'>\n <UserStatistics auth={auth} pro={totalPro || 0} basic={totalBasic || 0} />\n <UserNavigation\n active={active}\n tabHandler={this.tabHandler}\n onPatientModal={this.onPatientModal}\n onPatientModifyModal={this.onPatientModifyModal}\n onCardModal={this.onCardModal}\n onCardModifyModal={this.onCardModifyModal}\n />\n </div>\n </div>\n\n <div className='usage-info-container'>\n <div className='inner-container'>\n {active === 'list' ? (\n <>\n <div className='filter-wrapper'>\n <Filter\n filter={reservedFilter}\n value='none'\n name='전체'\n onClick={() => {\n this.setState({ reservedFilter: 'none' });\n }}\n />\n <Filter\n filter={reservedFilter}\n value='reserved'\n name='접수대기'\n onClick={() => {\n this.setState({ reservedFilter: 'reserved' });\n }}\n />\n\n <Filter\n filter={reservedFilter}\n value='matched'\n name='예약완료 (진행중)'\n onClick={() => {\n this.setState({ reservedFilter: 'matched' });\n }}\n />\n <Filter\n filter={reservedFilter}\n value='complete'\n name='서비스 종료'\n onClick={() => {\n this.setState({ reservedFilter: 'complete' });\n }}\n />\n </div>\n\n <InputFilter\n keyword={this.state.keyword}\n keywordHandler={value => {\n this.setState({ keyword: value });\n }}\n />\n <ReserveList\n list={\n reservedFilter === 'none'\n ? list\n : reservedFilter === 'reserved'\n ? list.filter(p => p.call.status === '접수대기' || p.call.status === '예약접수')\n : reservedFilter === 'matched'\n ? list.filter(\n p =>\n p.call.status === '예약완료' ||\n p.call.status === '접선' ||\n p.call.status === '병원 출발' ||\n p.call.status === '병원 도착' ||\n p.call.status === '진료 시작' ||\n p.call.status === '진료 종료' ||\n p.call.status === '자택 출발',\n )\n : reservedFilter === 'complete'\n ? list.filter(p => p.call.status === '서비스 종료')\n : []\n }\n onReport={this.onViewReport}\n onDetailModal={_id => {\n this.onDetailModal(_id);\n }}\n onMateModal={info => {\n this.onMateModal(info);\n }}\n />\n </>\n ) : null}\n\n {active === 'info' ? (\n <div className='user-info-wrapper'>\n <div>\n <div className='default-info wrapper'>\n <div className='title-wrapper'>\n <p>프로필 수정</p>\n <p style={{ fontSize: '7px', fontWeight: 'normal', color: 'gray', marginTop: '5px' }}>\n 위드메이트의 이름과 연락처를 수정 하실 수 있습니다.\n </p>\n </div>\n\n <div className='service'>\n <p className='info'>이름</p>\n <div>\n <Input\n placeholder='성함을 입력해주세요.'\n value={userInfo.name}\n onChange={ev => {\n this.props.onEdit({ type: 'name', value: ev.target.value });\n }}\n />\n </div>\n </div>\n\n <div className='service'>\n <p className='info'>연락처</p>\n <div>\n <Input\n placeholder='연락처를 입력해주세요.'\n value={userInfo.contact}\n onChange={ev => {\n this.props.onEdit({ type: 'contact', value: ev.target.value });\n }}\n />\n </div>\n </div>\n\n <div className='service' style={{ marginBottom: '0px' }}>\n <Button onClick={this.updateBasicInfo} style={{ backgroundColor: '#484848' }}>\n 수정된 프로필 저장\n </Button>\n </div>\n </div>\n\n <div className='card-info wrapper'>\n <div className='title-wrapper'>\n <p>결제 카드 정보</p>\n <p style={{ fontSize: '7px', fontWeight: 'normal', color: 'gray', marginTop: '5px' }}>\n 등록된 카드정보를 통해 서비스 결제를 하실 수 있습니다.\n </p>\n </div>\n\n <Card {...this.props} visible={this.state.cardModal} onClose={this.cardModalOff} />\n <ModifyCard {...this.state.cardInfo} visible={this.state.cardModifyModal} onClose={this.cardModifyModalOff} />\n\n <Table\n dataSource={this.props.auth.cardList}\n columns={cardColumn({ onDelete: this.onCardDelete, onModify: this.onCardModify })}\n pagination={{ pageSize: 3 }}\n />\n\n <div className='service' style={{ marginBottom: '0px' }}>\n <Button onClick={this.onCardModal} style={{ backgroundColor: '#484848' }}>\n 카드 정보 추가\n </Button>\n </div>\n </div>\n\n {/* 수정해야할 부분 - KAKAO 로그인인 경우 안보이게*/}\n {this.props.auth.type === LOCAL ? (\n <div className='privacy-info wrapper'>\n <div className='title-wrapper'>\n <p>비밀번호 변경</p>\n </div>\n\n <div className='service'>\n <p className='info'>현재 비밀번호</p>\n <div>\n <Input.Password\n password='true'\n placeholder='현재 비밀번호를 입력해주세요.'\n value={password}\n onChange={ev => {\n this.props.editPassword({ type: 'password', value: ev.target.value });\n }}\n />\n </div>\n </div>\n\n <div className='service'>\n <p className='info'>새 비밀번호</p>\n <div>\n <Input.Password\n password='true'\n placeholder='새 비밀번호를 입력해주세요.'\n value={newPassword}\n onChange={ev => {\n this.props.editPassword({ type: 'newPassword', value: ev.target.value });\n }}\n />\n </div>\n </div>\n\n <div className='service'>\n <p className='info'>새 비밀번호 확인</p>\n <div>\n <Input.Password\n password='true'\n placeholder='새 비밀번호를 확인해주세요.'\n value={reNewPassword}\n onChange={ev => {\n this.props.editPassword({ type: 'reNewPassword', value: ev.target.value });\n }}\n />\n </div>\n </div>\n\n <div className='service'>\n <Button\n onClick={this.modifyPassword}\n style={{ backgroundColor: '#ffffff', color: '#606060', marginBottom: '0px' }}\n >\n 비밀번호 변경\n </Button>\n </div>\n </div>\n ) : (\n <div className='etc-info wrapper' style={{ marginTop: '0px' }}>\n <div className='title-wrapper'>\n <p>기타</p>\n </div>\n\n <div className='service'>\n <div className='flex-wrapper'>\n <p\n onClick={() => {\n this.props.history.push('/policy/privacy');\n }}\n >\n 개인정보 처리방침 <b>{'>'}</b>\n </p>\n <p\n onClick={() => {\n this.props.history.push('/policy/terms');\n }}\n >\n 서비스 이용약관 <b>{'>'}</b>\n </p>\n </div>\n </div>\n\n <div className='service'>\n <Button\n style={{ backgroundColor: '#b7b7b7' }}\n onClick={() => {\n this.props.history.push('/user/logout');\n }}\n >\n 로그아웃\n </Button>\n </div>\n\n <div className='service' style={{ marginBottom: '0px' }}>\n {this.props.auth.type === LOCAL ? (\n <Button\n onClick={() => {\n this.setState({ modal: true });\n }}\n style={{ color: '#a7a7a7', height: '30px' }}\n >\n 회원탈퇴\n </Button>\n ) : (\n <Button\n onClick={() => {\n this.setState({ kakaoModal: true });\n }}\n style={{ color: '#a7a7a7', height: '30px' }}\n >\n 카카오 회원탈퇴\n </Button>\n )}\n </div>\n </div>\n )}\n <div className='clearfix' />\n </div>\n {this.props.auth.type === LOCAL ? (\n <div>\n <div className='etc-info wrapper'>\n <div className='title-wrapper'>\n <p>기타</p>\n </div>\n\n <div className='service'>\n <div className='flex-wrapper'>\n <p\n onClick={() => {\n this.props.history.push('/policy/privacy');\n }}\n >\n 개인정보 처리방침 <b>{'>'}</b>\n </p>\n <p\n onClick={() => {\n this.props.history.push('/policy/terms');\n }}\n >\n 서비스 이용약관 <b>{'>'}</b>\n </p>\n </div>\n </div>\n\n <div className='service'>\n <Button\n style={{ backgroundColor: '#b7b7b7' }}\n onClick={() => {\n this.props.history.push('/user/logout');\n }}\n >\n 로그아웃\n </Button>\n </div>\n\n <div className='service' style={{ marginBottom: '0px' }}>\n {this.props.auth.type === LOCAL ? (\n <Button\n onClick={() => {\n this.setState({ modal: true });\n }}\n style={{ color: '#a7a7a7', height: '30px' }}\n >\n 회원탈퇴\n </Button>\n ) : (\n <Button\n onClick={() => {\n this.setState({ kakaoModal: true });\n }}\n style={{ color: '#a7a7a7', height: '30px' }}\n >\n 카카오 회원탈퇴\n </Button>\n )}\n </div>\n </div>\n <div className='clearfix' />\n </div>\n ) : null}\n </div>\n ) : null}\n\n {active === 'point' && (\n <>\n <PointBoxRow>\n <PointBox>\n <PointBoxTitle>현재 잔여 포인트</PointBoxTitle>\n <PointTotal>{userInfo.point ? currencyFormatter(userInfo.point) : 0} 원</PointTotal>\n </PointBox>\n </PointBoxRow>\n <PointBoxRow>\n <PointBox3>\n <PointBoxTitle>포인트 적립 내역</PointBoxTitle>\n {pointAddHistory && pointAddHistory.length > 0 ? (\n <PointContent>\n {pointAddHistory.map((item, index) => (\n <PointHistoryRow key={'add-point-' + index.toString()}>\n <PointHistoryNameRow add>\n <span className='title'>{item.name}</span>\n <span className='value'>+ {currencyFormatter(item.value)} 원</span>\n </PointHistoryNameRow>\n <PointHistoryValueRow>\n <span className='title'>{moment(item.addedAt).format('YY년 M월 D일 HH:mm')}</span>\n <span className='value'>잔여 포인트 {currencyFormatter(item.leftValue)} 원</span>\n </PointHistoryValueRow>\n </PointHistoryRow>\n ))}\n </PointContent>\n ) : (\n <NoHistory>내역 없음</NoHistory>\n )}\n </PointBox3>\n <PointBox3>\n <PointBoxTitle>포인트 사용 내역</PointBoxTitle>\n {pointUsingHistory && pointUsingHistory.length > 0 ? (\n <PointContent style={{ paddingRight: '10px' }}>\n {pointUsingHistory.map((item, index) => (\n <PointHistoryRow key={'using-point-' + index.toString()}>\n <PointHistoryNameRow>\n <span className='title'>{item.name}</span>\n <span className='value'>- {currencyFormatter(item.value)} 원</span>\n </PointHistoryNameRow>\n <PointHistoryValueRow>\n <span className='title'>{moment(item.usedAt).format('YY년 M월 D일 HH:mm')}</span>\n <span className='value'>잔여 포인트 {currencyFormatter(item.leftValue)} 원</span>\n </PointHistoryValueRow>\n </PointHistoryRow>\n ))}\n </PointContent>\n ) : (\n <NoHistory>내역 없음</NoHistory>\n )}\n </PointBox3>\n </PointBoxRow>\n <PointBoxRow>\n <PointBox2>\n <PointBoxTitle>쿠폰 등록</PointBoxTitle>\n <CouponInput\n placeholder='쿠폰 번호를 입력하세요'\n title='appointedCode'\n value={this.state.appointedCode}\n onChange={this.handleChange}\n />\n <Button\n style={{\n margin: '0 auto',\n width: '100px',\n height: '45px',\n backgroundColor: '#3bc1ff',\n color: 'white',\n fontWeight: 'bold',\n }}\n onClick={() => {\n this.onAddCoupon();\n }}\n >\n 등록\n </Button>\n\n <DivisionLine />\n <DivisionLine />\n <DivisionLine />\n\n <PointBoxTitle>쿠폰 사용 내역</PointBoxTitle>\n {couponAddHistory && couponAddHistory.length > 0 ? (\n <PointContent style={{ paddingRight: '10px' }}>\n {couponAddHistory.map((item, index) => (\n <PointHistoryRow key={'add-coupon-' + index.toString()}>\n <PointHistoryNameRow add>\n <span className='title'>{item.couponName}</span>\n <span className='value'>+ {currencyFormatter(item.couponValue)} P</span>\n </PointHistoryNameRow>\n <PointHistoryValueRow>\n <span className='title'>{moment(item.addedAt).format('YY년 M월 D일 HH:mm')}</span>\n </PointHistoryValueRow>\n </PointHistoryRow>\n ))}\n </PointContent>\n ) : (\n <NoHistory>사용 내역 없음</NoHistory>\n )}\n </PointBox2>\n </PointBoxRow>\n </>\n )}\n\n {active === 'profile' ? (\n <div className='user-profile-wrapper'>\n <div>\n <div className='default-profile wrapper'>\n <div className='title-wrapper'>\n <p>환자 프로필 목록</p>\n <p style={{ fontSize: '12px', fontWeight: 'normal', color: 'gray', marginTop: '5px' }}>\n 위드메이트 서비스를 사용하시는 프로필을 관리할 수 있습니다.\n </p>\n <div className='service' style={{ display: 'flex', justifyContent: 'right' }}>\n <Button onClick={this.onPatientModal} style={{ backgroundColor: '#3bc1ff', borderRadius: '5px' }}>\n 프로필 등록\n </Button>\n\n <Profile {...this.props} visible={this.state.patientModal} onClose={this.patientModalOff} />\n <ModifyProfile\n {...this.state.patientInfo}\n visible={this.state.patientModifyModal}\n onClose={this.patientModifyModalOff}\n />\n </div>\n </div>\n\n <div className='profileList'>\n <Table\n dataSource={this.props.auth.patientList}\n columns={patientColumn({ onDelete: this.onPatientDelete, onModify: this.onPatientModify })}\n onRow={this.onRow}\n pagination={{\n pageSize: 5,\n }}\n />\n </div>\n </div>\n\n <div className='clearfix' />\n </div>\n </div>\n ) : null}\n </div>\n </div>\n\n {this.state.reserveDetailModal && (\n <NoramlReserveEditModal\n visible={this.state.reserveDetailModal}\n visibleHandler={() => {\n this.setState({ temp: null, reserveDetailModal: false });\n }}\n data={this.state.temp}\n inputDeepHandler={this.inputDeepHandler}\n />\n )}\n\n {this.state.onReportMoal && (\n <ReportMoal\n visible={this.state.onReportMoal}\n visibleHandler={() => {\n this.setState({\n report: null,\n timeline: null,\n onReportMoal: false,\n selectedServiceName: '',\n });\n }}\n data={{\n report: this.state.report,\n timeline: this.state.timeline,\n selectedServiceName: this.state.selectedServiceName,\n }}\n />\n )}\n\n <Modal\n visible={this.state.modal}\n title='회원탈퇴'\n footer={null}\n onCancel={() => {\n this.setState({ modal: false });\n }}\n >\n <DivisionLine />\n\n <p>\n <b>* 회원탈퇴 전, 유의사항을 확인해 주시기 바랍니다.</b> <DivisionLine />\n - 회원탈퇴 시 위드메이트 서비스 이용이 불가합니다. <br />\n - 회원탈퇴 후 회원 정보 및 이용 기록은 모두 삭제되며, <br /> 복구 가능하지 않습니다.\n </p>\n\n <DivisionLine />\n\n <label>\n <b>* 비밀번호</b>\n </label>\n <Input.Password\n style={{ height: '36px', marginBottom: '20px' }}\n password='true'\n placeholder='회원탈퇴를 위해 비밀번호를 입력해주세요.'\n value={auth.password}\n onChange={ev => {\n this.props.editAuth({ type: 'password', value: ev.target.value });\n }}\n />\n <br />\n\n <div style={{ display: 'flex' }}>\n <Button\n style={{ flex: 1, marginRight: '8px', height: '40px' }}\n type='danger'\n onClick={() => {\n this.setState({ modal: false });\n }}\n >\n 취소\n </Button>\n <Button style={{ flex: 1, height: '40px' }} type='primary' onClick={this.withdrawl}>\n 확인\n </Button>\n </div>\n </Modal>\n\n <Modal\n visible={this.state.kakaoModal}\n title='카카오 회원탈퇴'\n footer={null}\n onCancel={() => {\n this.setState({ modal: false });\n }}\n >\n <DivisionLine />\n\n <p>\n <b>* 회원탈퇴 전, 유의사항을 확인해 주시기 바랍니다.</b> <DivisionLine />\n - 회원탈퇴 시 위드메이트 서비스 이용이 불가합니다. <br />\n - 회원탈퇴 후 회원 정보 및 이용 기록은 모두 삭제되며, <br /> 복구 가능하지 않습니다.\n </p>\n <DivisionLine />\n <label>\n <b>카카오 계정 회원 탈퇴를 하시겠습니까 ?</b>\n </label>\n <DivisionLine />\n <div style={{ display: 'flex' }}>\n <Button\n style={{ flex: 1, marginRight: '8px', height: '40px' }}\n type='danger'\n onClick={() => {\n this.setState({ kakaoModal: false });\n }}\n >\n 취소\n </Button>\n <Button style={{ flex: 1, height: '40px' }} type='primary' onClick={this.kakaoUnlink}>\n 확인\n </Button>\n </div>\n </Modal>\n\n <Modal\n visible={this.state.mateModal}\n title='담당 메이트 정보'\n footer={null}\n onCancel={() => {\n this.setState({ mateModal: false });\n }}\n >\n <div className='mate-img-wrapper'>\n <img src={mateInfo && mateInfo.mate ? mateInfo.mate.photo : '사진이 제공되지 않았습니다.'} alt='mate' />\n </div>\n <div className='mate-info-wrapper'>\n <div>\n <p className='label'>이름</p>\n <div className='input'>\n <p className='value'>{mateInfo && mateInfo.mate ? mateInfo.mate.name : ''}</p>\n </div>\n </div>\n <div>\n <p className='label'>연락처</p>\n <div className='input'>\n <p className='value'>{mateInfo && mateInfo.mate ? mateInfo.mate.contact : ''}</p>\n </div>\n </div>\n <div>\n <p className='label'>Pro 서비스 이력</p>\n <div className='input'>\n <p className='value'>{(mateInfo && mateInfo.review && mateInfo.review.unemergency) || 0}건</p>\n </div>\n </div>\n <div>\n <p className='label'>Basic 서비스 이력</p>\n <div className='input'>\n <p className='value'>{(mateInfo && mateInfo.review && mateInfo.review.assist) || 0}건</p>\n </div>\n </div>\n {mateInfo && mateInfo.review ? (\n <div>\n <p className='label'>동행 서비스 이행 평점</p>\n <StarRatingComponent\n starCount={5}\n value={(mateInfo.review && mateInfo.review.score) || 4}\n renderStarIcon={(index, value) => {\n return (\n <img\n style={{ width: '24px', height: '23px', marginRight: '8px' }}\n src={`/assets/images/icon_${index <= value ? 'active_star' : 'star'}.png`}\n />\n );\n }}\n onStarClick={() => {}}\n />\n </div>\n ) : null}\n <Button\n type='primary'\n onClick={() => {\n if (mateInfo && this.state.callStatus === '예약접수') {\n this.confirmReserve();\n } else {\n this.setState({ mateModal: false });\n }\n }}\n >\n {mateInfo && this.state.callStatus === '예약접수' ? '예약 및 메이트 확정하기' : '확인'}\n </Button>\n {mateInfo && this.state.callStatus === '예약접수' ? (\n <Button style={{ marginTop: '12px' }} onClick={this.onRematch}>\n 메이트 거절 및 재배정\n </Button>\n ) : null}\n </div>\n </Modal>\n </div>\n );\n }\n}\nexport default NormalUser;\n\nconst Filter = ({ filter, value, onClick, name }) => {\n return (\n <span className={`filter ${filter === value ? 'active' : ''}`} onClick={onClick}>\n {name}\n </span>\n );\n};\n\nconst PanelHead = styled.p`\n font-size: 14px;\n font-weight: 600;\n line-height: 24px;\n height: 24px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n`;\n\nconst AddTimeSelector = styled.div`\n display: flex;\n flex-wrap: wrap;\n\n min-height: 60px;\n\n > span {\n margin-right: 8px;\n margin-bottom: 6px;\n\n display: inline-block;\n\n padding-left: 12px;\n padding-right: 12px;\n height: 24px;\n line-height: 24px;\n\n font-size: 12px;\n text-align: center;\n\n background-color: #dedede;\n color: #ffffff;\n\n border-radius: 10px;\n white-space: nowrap;\n cursor: pointer;\n\n @media (min-width: 768px) {\n &:hover {\n transition: all 0.5s;\n background-color: #3bc1ff;\n }\n }\n\n &.active {\n background-color: #3bc1ff;\n }\n }\n`;\n\nconst CouponInput = styled(Input)`\n width: 100%;\n height: 46px;\n line-height: 44px;\n ${props => props.small && `max-width: 102px; height: 32px; line-height: 29px;`}\n\n margin-bottom: 0px;\n\n color: ${Pallete.dark100};\n font-size: 14px;\n font-weight: normal;\n\n border-radius: 4px;\n border: 1px solid ${Pallete.dark50} !important;\n background-color: #ffffff;\n\n @media (max-width: 480px) {\n font-size: 12px;\n border: 1px solid ${Pallete.dark50} !important;\n }\n\n &.ant-input {\n width: 65%;\n height: 45px;\n line-height: 44px;\n\n margin-bottom: 0px;\n\n color: ${Pallete.dark100};\n font-size: 14px;\n font-weight: normal;\n\n border-radius: 4px;\n border: 1px solid ${Pallete.dark50} !important;\n background-color: #ffffff;\n\n &::placeholder {\n color: ${Pallete.dark60};\n font-size: 14px;\n font-weight: normal;\n }\n\n @media (max-width: 480px) {\n font-size: 12px;\n border: 1px solid ${Pallete.dark50} !important;\n\n &::placeholder {\n font-size: 12px;\n }\n }\n }\n\n &:focus {\n border: 1px solid ${Pallete.blue100} !important;\n transition: all 0.3s;\n box-shadow: none;\n outline: 0;\n }\n\n &:disabled {\n background-color: ${Pallete.dark10};\n }\n\n &.ant-input-affix-wrapper-disabled {\n background-color: #f5f5f5;\n }\n\n &.ant-input-affix-wrapper {\n height: 46px;\n line-height: 43px;\n padding: 0px 11px;\n\n ${props => props.small && `max-width: 102px; height: 32px; line-height: 29px;`}\n\n .ant-input {\n width: 100% !important;\n height: 100%;\n line-height: 43px;\n\n color: ${Pallete.dark100};\n font-size: 14px;\n font-weight: normal;\n\n border: 0px !important;\n &::placeholder {\n color: ${Pallete.dark60};\n font-size: 14px;\n font-weight: normal;\n }\n\n &:focus {\n border: 1px solid ${Pallete.blue100} !important;\n transition: all 0.3s;\n box-shadow: none;\n outline: 0;\n }\n\n @media (max-width: 480px) {\n font-size: 12px;\n line-height: 43px;\n\n &:focus {\n border: 1px solid ${Pallete.dark50} !important;\n }\n\n &::placeholder {\n font-size: 12px;\n }\n }\n &:disabled {\n background-color: ${Pallete.dark10};\n }\n }\n\n .ant-input-suffix {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n text-align: right;\n color: ${Pallete.dark100};\n\n @media (max-width: 480px) {\n font-size: 12px;\n }\n }\n }\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledNormalContainer from './normal.styled';\nimport Normal from './normal';\nimport { USER } from '../../../../Lib/variables';\nimport {\n // getPayHistory,\n // getReserveUsage,\n // getReserveList,\n getUserInfo,\n editUserForm,\n modifyUserInfo,\n cancelReserve,\n modifyReserve,\n} from '../../../../Reducer/Modules/app';\nimport { editAuth, editPasswordForm, modifyPassword, withdrawlUser, withdrawlKakao,\n editAddPatientForm, addPatient, fetchPatient, deletePatient, modifyPatient, getPatientInfo, \n fetchCard, editAddCardForm, addCard, getCardInfo, modifyCard, deleteCard, checkCouponCode } from '../../../../Reducer/Modules/auth';\n\nclass NormalPage extends React.PureComponent {\n componentDidMount = () => {\n const userId = localStorage.getItem('id');\n const userType = localStorage.getItem('userType');\n const type = localStorage.getItem('type');\n\n if (userId) {\n if (userType !== USER) {\n window.location.href = '/';\n } else {\n this.props.getUserInfo({ id: userId, userType, type });\n this.props.fetchPatient({ id: userId });\n this.props.fetchCard({ id: userId });\n }\n } else {\n this.props.history.push('/user/login');\n }\n };\n\n render() {\n if (this.props.auth.userType !== USER) {\n return <div></div>;\n }\n\n return (\n <StyledNormalContainer>\n <Normal {...this.props} />\n </StyledNormalContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchPatient: ({ id }) => dispatch(fetchPatient({ id })),\n fetchCard: ({ id }) => dispatch(fetchCard({ id })),\n\n getUserInfo: ({ id, userType, type }) => dispatch(getUserInfo({ id, userType, type })),\n onEdit: ({ type, value }) => dispatch(editUserForm({ type, value })),\n modify: ({ id, userType, info }) => dispatch(modifyUserInfo({ id, userType, info })),\n modifyPassword: ({ id, userType, password, newPassword }) => dispatch(modifyPassword({ id, userType, password, newPassword })),\n editAuth: ({ type, value }) => dispatch(editAuth({ type, value })),\n editPassword: ({ type, value }) => dispatch(editPasswordForm({ type, value })),\n \n withdrawlUser: ({ id, userType, password }) => dispatch(withdrawlUser({ id, userType, password })),\n withdrawlKakao: ({ id, userType }) => dispatch(withdrawlKakao({ id, userType })),\n\n cancelReserve: ({ callId }) => dispatch(cancelReserve({ callId })),\n modifyReserve: ({ reserveId, info }) => dispatch(modifyReserve({ reserveId, info })),\n \n editAddPatientForm: ({ type, value }) => dispatch(editAddPatientForm({ type, value })),\n addPatient: (info) => dispatch(addPatient(info)),\n deletePatient: ({ patientId }) => dispatch(deletePatient({ patientId })),\n modifyPatient: ({ id, patientId, info }) => dispatch(modifyPatient({ id, patientId, info })),\n getPatientInfo: ({ id, patientId }) => dispatch(getPatientInfo({ id, patientId })),\n\n editAddCardForm: ({ type, value }) => dispatch(editAddCardForm({ type, value })),\n addCard: (info) => dispatch(addCard(info)),\n getCardInfo: ({ id, cardId }) => dispatch(getCardInfo({ id, cardId })),\n modifyCard: ({ id, cardId, info }) => dispatch(modifyCard({ id, cardId, info })),\n deleteCard: ({ cardId }) => dispatch(deleteCard({ cardId })),\n});\n \nexport default connect(mapStateToProps, mapDispatchToProps)(NormalPage);\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../../theme';\n\nconst StyledPendingContainer = styled.div`\n margin-top: 55px;\n min-height: 100vh;\n background-color: rgba(0, 0, 0, 0.02);\n // background-size: cover;\n // background-repeat: no-repeat;\n // background-position: center;\n\n .inner-container {\n padding: 0px;\n padding-top: 144px;\n padding-bottom: 100px;\n\n .pending-form {\n background-color: white;\n border-radius: 8px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n width: 100%;\n max-width: 340px;\n margin: 0 auto;\n padding: 24px;\n\n .login-title {\n margin-bottom: 24px;\n\n p {\n font-size: ${sizeHandler(32)};\n font-weight: bold;\n letter-spacing: -0.7px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .form {\n .img-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 124px;\n padding: 20px 0px;\n\n img {\n height: 100%;\n }\n }\n\n .info-title {\n p {\n margin: 0px;\n padding: 0px;\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n }\n\n margin-bottom: 4px;\n }\n\n .info-body {\n margin-bottom: 32px;\n\n p {\n margin: 0px;\n padding: 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n }\n }\n`;\nexport default StyledPendingContainer;\n","import React from 'react';\nimport {} from 'antd';\n\nexport default class Pending extends React.PureComponent {\n render() {\n return (\n <div className='pending-container'>\n <div className='inner-container'>\n <div className='pending-form'>\n <div className='login-title'>\n <p>회원가입</p>\n </div>\n <div className='form'>\n <div className='img-wrapper'>\n <img src='/assets/images/checkpoint.png' alt='check-circle' />\n </div>\n <div className='info-title'>\n <p>메이트 가입신청 완료</p>\n </div>\n <div className='info-body'>\n <p>\n 약 7일 이내에 메이트 가입신청 결과를 <br />\n 가입하신 이메일로 보내드리겠습니다.\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledPendingContainer from './pending.styled';\nimport Pending from './pending';\n\nclass PendingPage extends React.PureComponent {\n render() {\n return (\n <StyledPendingContainer>\n <Pending {...this.props} />\n </StyledPendingContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ auth }) => ({\n auth,\n});\n\nconst mapDispatchToProps = dsipatch => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PendingPage);\n","import React from 'react';\nimport { Switch, Route } from 'react-router-dom';\n\n// pages\nimport NotFound from '../NotFound';\nimport Login from './AuthPages/Login';\nimport Main from './AuthPages/MainRegister';\nimport Register from './AuthPages/Register';\nimport Logout from './AuthPages/Logout';\nimport Find from './AuthPages/Find';\nimport Mate from './AuthPages/Mate';\nimport Normal from './AuthPages/Normal';\nimport Pending from './AuthPages/Pending';\n\n// import Example from './AuthPages/Example';\n\n// component\nexport default class AuthPage extends React.PureComponent {\n render() {\n const { url } = this.props.match;\n // console.log(url);\n return (\n <Switch>\n <Route exact path={`${url}/login`} component={Login} />\n <Route exact path={`${url}/logout`} component={Logout} />\n\n <Route exact path={`${url}/register?url_source=dlive`} component={Register} />\n <Route exact path={`${url}/register?url_source=metlife`} component={Register} />\n\n <Route exact path={`${url}/register`} component={Register} />\n <Route exact path={`${url}/mainRegister`} component={Main} />\n\n {/* <Route exact path={`${url}/example`} component={Example} /> 경로 입력 시 /user/example로 해야 화면출력*/}\n\n <Route exact path={`${url}/find/password`} component={Find} />\n <Route exact path={`${url}/mypage`} component={Normal} />\n <Route exact path={`${url}/mypage/:tab`} component={Normal} />\n <Route exact path={`${url}/mate/pending`} component={Pending} />\n <Route exact path={`${url}/mate/mypage`} component={Mate} />\n <Route exact path={`${url}/mate/mypage/:tab`} component={Mate} />\n {/* <Route exact path={`${url}/withdrawl`} component={Register} /> */}\n <Route component={NotFound} />\n </Switch>\n );\n }\n}\n","import styled from 'styled-components';\n\nconst AuthStyledContainer = styled.div``;\n\nexport default AuthStyledContainer;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport Auth from './auth';\n\n// styles\nimport AuthStyledContainer from './auth.styled';\n\nclass AuthPages extends React.PureComponent {\n render() {\n return (\n <AuthStyledContainer>\n <Auth {...this.props} />\n </AuthStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\n\nconst mapStateToDispatch = dispatch => ({});\n\nexport default connect(mapStateToProps, mapStateToDispatch)(AuthPages);\n","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../theme';\n\nconst StyledCompanyContainer = styled.div`\n padding-top: 55px;\n\n .snd-section .inner-container .block:nth-child(2) {\n align-items: flex-end;\n }\n\n .block {\n display: flex;\n align-items: center;\n justify-content: center;\n\n .img-block {\n flex: 1;\n margin-bottom: 30px;\n position: relative;\n display: flex;\n align-items: flex-start;\n\n img {\n width: 65%;\n }\n\n &.right {\n // justify-content: flex-end;\n }\n }\n\n .text-block {\n flex: 1;\n margin-bottom: 30px;\n\n .title {\n p {\n padding: 0px;\n margin: 0px;\n font-size: ${sizeHandler(36)};\n font-weight: bold;\n margin-bottom: 20px;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n }\n }\n\n .content {\n p {\n padding: 0px;\n margin: 0px;\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 20px;\n }\n }\n }\n }\n\n .fst-section {\n background-image: url('/assets/images/company-main.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n .inner-container {\n padding-top: 166px;\n padding-bottom: 166px;\n }\n\n .text-block {\n p {\n margin: 0px;\n padding: 0px;\n text-align: center;\n color: white;\n\n &.title {\n color: #161616;\n font-size: ${sizeHandler(28)};\n font-weight: bold;\n margin-bottom: 8px;\n letter-spacing: -0.6px;\n }\n\n &.content {\n font-size: ${sizeHandler(32)};\n font-weight: bold;\n letter-spacing: -0.38px;\n }\n }\n }\n }\n\n .trd-section {\n background-image: url('/assets/images/hug.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n\n .inner-container {\n padding-top: 144px;\n padding-bottom: 88px;\n }\n\n .text-block {\n p {\n text-align: center;\n margin: 0px;\n padding: 0px;\n color: white;\n\n &.title {\n font-size: ${sizeHandler(34)};\n font-weight: bold;\n letter-spacing: -1px\n margin-bottom: 12px;\n }\n\n &.content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(22)};\n letter-spacing: -0.3px;\n }\n }\n }\n }\n\n .fth-section {\n margin-bottom: 40px;\n border-bottom: 1px solid #e6e6e6;\n \n .title-block {\n margin-bottom: 20px;\n\n p {\n text-align: center;\n font-size: ${sizeHandler(36)};\n font-weight: bold;\n margin-bottom: 20px;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n }\n }\n\n .items-block {\n .item {\n float: left;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 33.3333%;\n height: 124px;\n\n @media(max-width: 768px) {\n width: 100%;\n padding: 0px 20px;\n }\n\n .img-wrapper {\n width: 30%;\n float: left;\n\n img {\n width: 70%;\n }\n }\n\n .text-wrapper {\n width: 70%;\n float: left;\n\n .name {\n font-size: ${sizeHandler(20)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n \n }\n\n .value {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n }\n }\n }\n\n .fifth-section {\n\n .inner-container {\n padding-top: 200px;\n padding-bottom: 65px;\n\n .text-block {\n .title {\n text-align: center;\n font-size: ${sizeHandler(36)};\n font-weight: bold;\n margin-bottom: 20px;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n }\n\n .content {\n text-align: center;\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 20px;\n }\n\n .news {\n text-align: center;\n margin-bottom: 80px;\n }\n }\n\n // .logo-block {\n \n // .three {\n \n // .logo-wrapper {\n // float: left;\n // width: 20%;\n\n // display: flex;\n // align-items: center;\n // justify-content: center;\n \n // margin-bottom: 16px;\n\n // img {\n // height: 76px;\n // }\n // }\n // }\n // }\n }\n }\n\n @media (max-width: 768px) {\n .block {\n flex-direction: column;\n\n &.fst {\n order: 1;\n \n .img-block {\n align-items: center;\n justify-content: center;\n }\n }\n\n .snd {\n order: 2;\n }\n\n .trd {\n order: 4;\n }\n\n .fth {\n order: 3;\n margin-top: 20px;\n }\n \n .img-block {\n // display: none;\n // margin-bottom: 20px;\n // justify-content: center;\n\n // &.right {\n // justify-content: center;\n // }\n\n // img {\n // width: 25%;\n // }\n }\n }\n\n .fth-section { \n .items-block {\n flex-direction: column;\n\n .row {\n flex-direction: row;\n\n .item {\n flex: 1;\n justify-content: flex-start;\n\n .text-block {\n flex: 1;\n }\n }\n }\n }\n }\n\n }\n\n\n .sth-container {\n .img-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 156px;\n margin-bottom: 34px;\n\n img {\n height: 100%;\n }\n }\n\n .text-wrapper {\n .title {\n font-size: ${sizeHandler(36)};\n font-weight: bold;\n letter-spacing: -1px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: normal;\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n`;\nexport default StyledCompanyContainer;\n","import React from 'react';\n\nimport { mainColor } from '../../../theme';\n\nclass FstBlock extends React.PureComponent {\n render() {\n return (\n <div className='fst-section'>\n <div className='inner-container'>\n <div className='text-block'>\n <p className='title'>Built for Healthcare, Designed for NEMT</p>\n <p className='content'>병원으로 향하는 새로운 길,</p>\n <p className='content'>위드메이트가 열어갑니다.</p>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default FstBlock;\n","import React from 'react';\n\nclass SndBlock extends React.PureComponent {\n render() {\n return (\n <div className='snd-section'>\n <div className='inner-container'>\n <div className='block fst'>\n <div className='img-block'>\n <img alt='something img' src='/assets/images/why.png' />\n </div>\n <div className='text-block snd'>\n <div className='title'>\n <p>등장배경</p>\n </div>\n <div className='content'>\n <p>\n 날로 분주해지는 현대 사회 속에서, 우리는 매일 직장과 육아라는 전투를 치릅니다. <br />\n 살아남기 위한 발버둥을 치기에도 버거운 순간, 떨어져 있는 가족들에 대한 걱정과 <br />\n 자기 자신을 돌보기 위한 시간을 내는 것이 힘겹기만 합니다.\n </p>\n <p>\n 과연 그 누가 물리적인 거리와 시간적인 제약, 그리고 직장과 육아가 주는 압박감을 <br />\n 떨쳐내고 가족과 자신을 위해 선뜻 움직일 수 있을까요? 그렇다면 우리는 언제까지 <br />\n 이런 막막한 상황을 견디기만 해야 할까요?\n </p>\n <p>이를 해결하기 위한 믿을 수 있는 서비스를 합리적인 가격으로 제공받을 수는 없는 걸까요?</p>\n </div>\n </div>\n </div>\n <div className='block'>\n <div className='text-block trd'>\n <div className='title'>\n <p>위드메이트의 시작</p>\n </div>\n <div className='content'>\n <p>\n 2015년 설립된 위드메이트는 고령화 및 1인 가구 시대에 접어든 <br />\n 대한민국의 현 상황에 적합한 의료 동행 서비스는 무엇인지 연구했습니다.\n </p>\n <p>\n 이후 위드메이트는 탄탄한 신뢰와 안정된 서비스 시스템을 기반으로 <br />\n 유수의 병원 동행 서비스를 수행하며 축적된 데이터와 <br />\n 실전 경험을 바탕으로 차별화된 병원 동행 Pro/Basic 서비스를 <br />\n 런칭하게 되었습니다.\n </p>\n </div>\n </div>\n <div className='img-block right fth'>\n <img alt='something img' src='/assets/images/withtaxi.png' style={{ width: '100%' }} />\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default SndBlock;\n","import React from 'react';\n\nclass TrdBlock extends React.PureComponent {\n render() {\n return (\n <div className='trd-section'>\n <div className='inner-container'>\n <div className='text-block'>\n <p className='title'>암 치료 동행 전문 기업</p>\n <p className='content'>\n 위드메이트는 자타공인 국내 최고 수준의 암 치료 동행 서비스를 제공합니다. 위드메이트는 청담동과 하남에 위치한 암 전문 요양 병원과\n <br />\n 국립 암센터와의 협업 시스템 구축을 통해 항암 치료 동행과 관련된 다양한 경험과 데이터를 축적했습니다.\n <br />\n 이를 통해 위드메이트는 단순한 동행이 아닌, 전문적인 수준의 암 치료 동행 서비스를 제공합니다.\n </p>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default TrdBlock;\n","import React from 'react';\n\nclass FthBlock extends React.PureComponent {\n render() {\n return (\n <div className='fth-section' data-aos='fade-up' data-aos-anchor-placement='top-bottom' data-aos-duration='2000'>\n <div className='inner-container'>\n <div className='title-block'>\n <p>통계로 보는 위드메이트</p>\n </div>\n <div className='items-block'>\n <Item name='5,000건 ↑' value='총 서비스 수행 건수' img='/assets/images/daily-count.png' />\n <Item name='3,500건 ↑' value='암 치료 병원 동행 건수' img='/assets/images/satisfied.png' />\n <Item name='50건 ↑' value='일일 서비스 수행 건수' img='/assets/images/daily-count.png' />\n <Item name='12 곳' value='협력 기관' img='/assets/images/services.png' />\n <Item name='81%' value='서비스 재사용률' img='/assets/images/unsatisfied.png' />\n <Item name='1억 2천만원' value='책임 보험' img='/assets/images/shield.png' />\n <div className='clearfix' />\n </div>\n </div>\n </div>\n );\n }\n}\n\nconst Item = ({ name, value, img }) => {\n return (\n <div className='item'>\n <div className='img-wrapper'>\n <img src={img} alt='value-icon' />\n </div>\n <div className='text-wrapper'>\n <p className='name'>{name}</p>\n <p className='value'>{value}</p>\n </div>\n <div className='clearfix' />\n </div>\n );\n};\nexport default FthBlock;\n","import React from 'react';\nimport styled from 'styled-components';\n\nclass FstBlock extends React.PureComponent {\n render() {\n return (\n <div className='fifth-section'>\n <div className='inner-container'>\n <div className='text-block' data-aos='fade-up' data-aos-anchor-placement='top-bottom' data-aos-duration='2000'>\n <p className='title'>믿을 수 있는 기업</p>\n <p className='content'>\n 위드메이트는 국가 기관과 지자체에게 검증 받은 서비스로, 현재 <b>보건복지부</b>와 <b>고양시</b>, 그리고 <br />\n <b>국립 암센터</b>가 주관하는 <b>‘고양 해피 케어’</b> 컨소시엄의 일원으로 소속되어 국립 암센터를 이용하는 <br />\n 고양 시민에게 병원 동행 서비스를 제공하고 있습니다. 위드메이트와 함께할 <br />\n 협력 단체 및 기업은 추후 확장될 예정이니 많은 관심 부탁드립니다.\n <br />\n </p>\n <p className='news'>\n <a href='https://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=103&oid=025&aid=0002919541#' target='_blank'>\n 기사링크 >\n </a>\n </p>\n </div>\n <CoCompany />\n </div>\n </div>\n );\n }\n}\n\nexport const CoCompany = ({ style }) => {\n return (\n <StyledCoCompany data-aos='fade-up' data-aos-anchor-placement='top-bottom' data-aos-duration='2000' style={style || {}}>\n <div className='logo-block'>\n <div className='three'>\n <div className='logo-wrapper'>\n <img src='/assets/images/gov-care.png' alt='logo' />\n </div>\n <div className='logo-wrapper'>\n <img src='/assets/images/goyang.png' alt='logo' />\n </div>\n <div className='logo-wrapper'>\n <img src='/assets/images/cancel.png' alt='logo' />\n </div>\n <div className='logo-wrapper'>\n <img src='/assets/images/goyang-society.png' alt='logo' />\n </div>\n <div className='logo-wrapper'>\n <img src='/assets/images/ericchi.png' alt='logo' />\n </div>\n <div className='logo-wrapper'>\n <img src='/assets/images/beatus.png' alt='logo' />\n </div>\n\n <div className='logo-wrapper'>\n <img src='/assets/images/juga.png' alt='logo' />\n </div>\n\n <div className='logo-wrapper'>\n <img src='/assets/images/goyang-happy.png' alt='logo' />\n </div>\n <div className='logo-wrapper'>\n <img src='/assets/images/gpcop.png' alt='logo' />\n </div>\n\n <div className='logo-wrapper'>\n <img src='/assets/images/paju_woman.png' alt='logo' />\n </div>\n\n <div className='logo-wrapper'>\n <img src='/assets/images/cheongdam.png' alt='logo' />\n </div>\n <div className='logo-wrapper'>\n <img src='/assets/images/hyo-hospital.png' alt='logo' />\n </div>\n <div className='clearfix' />\n </div>\n </div>\n </StyledCoCompany>\n );\n};\n\nconst StyledCoCompany = styled.div`\n .logo-block {\n .three {\n .logo-wrapper {\n float: left;\n width: calc(100% / 6);\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n margin-bottom: 16px;\n\n img {\n height: 76px;\n }\n }\n }\n }\n\n @media (max-width: 768px) {\n .logo-block {\n .three {\n // flex-direction: column;\n display: block;\n\n .logo-wrapper {\n width: 50%;\n float: left;\n\n display: flex;\n align-items: center;\n justify-content: center;\n }\n }\n }\n }\n`;\nexport default FstBlock;\n","import React from 'react';\n\nexport default class SthSection extends React.PureComponent {\n render() {\n return (\n <div className='sth-container' data-aos='fade-up' data-aos-anchor-placement='top-bottom' data-aos-duration='2000'>\n <div className='inner-container'>\n <div className='img-wrapper'>\n <img src='/assets/images/safetyservice.png' alt='smile' />\n </div>\n <div className='text-wrapper'>\n <p className='title'>안전한 병원 동행의 시작</p>\n <p className='content'>\n 위드메이트는 병원 동행 서비스의 본질을 ‘안전’이라고 생각합니다. 이에 위드메이트는 전직원의 <br />\n 정기적인 교육 및 검열, 전문 자격증 취득 및 보유 여부 상시 점검, 영업배상책임 보험 가입 등 안전한\n <br />\n 병원 동행 서비스의 제공을 위해 최선을 다하고 있습니다.\n </p>\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\n\n// section\nimport FstBlock from './Section/fst';\nimport SndBlock from './Section/snd';\nimport TrdBlock from './Section/trd';\nimport FthBlock from './Section/fth';\nimport FifBlock from './Section/fifth';\nimport SthBlock from './Section/sth';\n\nclass Company extends React.PureComponent {\n render() {\n return (\n <div className='company-container'>\n <FstBlock />\n <FthBlock />\n <SndBlock />\n <TrdBlock />\n <FifBlock />\n <SthBlock />\n </div>\n );\n }\n}\nexport default Company;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledCompanyContainer from './company.styled';\nimport Company from './company';\n\nclass CompanyPage extends React.PureComponent {\n render() {\n return (\n <StyledCompanyContainer>\n <Company {...this.props} />\n </StyledCompanyContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CompanyPage);\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../theme';\n\nconst StyledFaqContainer = styled.div`\n padding-top: 55px;\n\n .faq-header {\n border-bottom: 1px solid #e6e6e6;\n\n .inner-container {\n padding: 0px;\n padding-top: 82px;\n\n @media (max-width: 768px) {\n padding-top: 42px;\n }\n\n > .flex-wrapper {\n position: relative;\n\n .faq-main-title {\n flex: 1;\n .title {\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 8px;\n }\n\n .description {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 82px;\n }\n }\n\n .img-section {\n position: absolute;\n bottom: 0px;\n right: 0px;\n\n > img {\n width: 100%;\n max-width: 549px;\n height: auto;\n object-fit: cover;\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n\n .faq-nav {\n display: flex;\n align-items: center;\n\n .nav-tab {\n margin-right: 32px;\n padding-bottom: 12px;\n position: relative;\n\n a {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: center;\n color: #3bc1ff;\n }\n\n span.underline {\n background-color: #3bc1ff;\n position: absolute;\n bottom: 0px;\n left: 0px;\n\n &.active {\n width: 100%;\n height: 3px;\n display: inline-block;\n }\n }\n\n @media (max-width: 768px) {\n margin-right: 16px;\n }\n }\n }\n }\n }\n\n .faq-contents {\n .inner-container {\n padding-top: 0px;\n\n @media (max-width: 768px) {\n h1 {\n font-size: 30px;\n margin-top: 60px;\n }\n }\n }\n }\n\n .panel-header {\n display: flex;\n align-items: center;\n\n .row-index {\n width: 80px;\n color: ${mainColor};\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n }\n\n .title {\n flex: 1;\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n .title {\n font-size: ${sizeHandler(14)};\n }\n }\n }\n\n .panel-content {\n padding-left: 80px;\n\n > p {\n width: 60%;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .panel-contents-wrapper {\n margin-top: 20px;\n margin-bottom: 20px;\n\n .panel-contents {\n padding: 12px 0px;\n border-bottom: 1px solid #e6e6e6;\n\n &:first-child {\n border-top: 1px solid #e6e6e6;\n }\n\n .panel-content-subtitle {\n float: left;\n width: 40%;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: left;\n color: ${mainColor};\n }\n\n .panel-content-subcontents {\n float: left;\n width: 50%;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n .panel-content-subtitle {\n width: 100%;\n }\n\n .panel-content-subcontents {\n width: 100%;\n }\n }\n }\n }\n }\n\n h1 {\n font-size: ${sizeHandler(34)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n\n margin-bottom: 26px;\n margin-top: 50px;\n }\n\n @media (max-width: 1120px) {\n .faq-header {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .panel-header {\n .row-index {\n width: 70px;\n }\n }\n\n .panel-content {\n padding-left: 70px;\n\n > p {\n width: 90%;\n }\n }\n }\n`;\nexport default StyledFaqContainer;\n","import React from 'react';\nimport { HashLink } from 'react-router-hash-link';\nimport { Collapse, Icon } from 'antd';\nimport { mainColor } from '../../theme';\nconst { Panel } = Collapse;\n\nexport default class FAQ extends React.PureComponent {\n render() {\n const { hash } = this.props.location;\n return (\n <div className='faq-container'>\n <div className='faq-header'>\n <div className='inner-container'>\n <div className='flex-wrapper'>\n <div className='faq-main-title'>\n <p className='title'>위드메이트 FAQ</p>\n <p className='description'>고객님의 궁금증을 해소하세요!</p>\n </div>\n <div className='img-section'>\n <img src={'/assets/images/faq_bg2.png'} alt='faq-img' />\n </div>\n <div className='faq-nav'>\n <div className='nav-tab'>\n <HashLink className='name' to='/faq/#common' scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'start' })}>\n 공통 FAQ\n </HashLink>\n <span className={`underline ${hash === '#common' ? 'active' : undefined}`}></span>\n </div>\n <div className='nav-tab'>\n <HashLink className='name' to='/faq/#emergency' scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'start' })}>\n 병원 동행 Pro FAQ\n </HashLink>\n <span className={`underline ${hash === '#emergency' ? 'active' : undefined}`}></span>\n </div>\n <div className='nav-tab'>\n <HashLink className='name' to='/faq/#assist' scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'start' })}>\n 병원 동행 Basic FAQ\n </HashLink>\n <span className={`underline ${hash === '#assist' ? 'active' : undefined}`}></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className='faq-contents'>\n <div className='inner-container'>\n <h1 id='common'>공통 FAQ</h1>\n <div>\n <Collapse\n expandIconPosition='right'\n bordered={false}\n expandIcon={({ isActive }) => (\n <Icon type='right' rotate={isActive ? 90 : -90} style={{ color: isActive ? mainColor : '#a7a7a7' }} />\n )}\n >\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-1' title='동행인의 신원은 확실한가요?' />}\n >\n <PanelContent>\n <p>\n 현재 위드메이트는 적격 자격을 갖춘 인원들을 선별하고 세밀한 채용 단계를 거친 후, 영업 배상 책임 보험 가입과 함께\n 엄격한 자체 교육을 실시하며 서비스 인력을 모집하고 있습니다.\n <br />\n 이와 동시에 위드메이트가 진행하는 주기적인 교육과 점검을 통해 서비스를 제공하는 인력 모두가 건강한 긴장감을 놓치지\n 않도록 철저하게 관리하고 있습니다.\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-2' title='서비스 신청 방법에 대해 알려주세요.' />}\n >\n <PanelContent>\n <p>\n 위드메이트 서비스는 웹사이트를 통해 신청이 가능합니다. 웹사이트 내 서비스 신청 모듈을 통해 서비스 신청을 해주시면\n 됩니다. 회원 가입 진행을 완료하신 분이라면 전화 상담을 통한 예약 신청 또한 가능합니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-3' title='서비스 신청 후 절차가 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 예약 접수가 완료되면, 위드메이트 소속의 전문 동행인들은 예약 발생 알림을 받고 검토를 진행하게 됩니다. 이후 동행인이\n 예약을 접수하면 고객님께 ‘예약 완료’ 알림이 가고, 고객님께서 해당 동행인의 접수를 수락하시면 최종 ‘매칭’이\n 이루어집니다. 이후 예약 일정에 맞춰 동행인과 함께 병원에 방문하시면 됩니다. 고객님께서 동행인의 접수를 거절하시면\n 처음 단계로 돌아가 다른 동행인의 접수를 대기하게 됩니다.\n <br />\n 만약 동행인 접수가 불가한 경우 고객님께 예약 불가 알림이 가고, 추후 서비스 재신청을 통해 서비스를 받을 수 있습니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-4' title='위드메이트 서비스 이용 가능 지역은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 위드메이트의 서비스는 현재 수도권 내에서 이용 가능합니다. 빠른 시일 내 경기도를 포함한 타 지역 서비스 확장을 계획\n 중에 있습니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-5' title='예약 변경 및 취소 수수료는 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>고객님께서 정상적으로 매칭된 병원 동행 서비스 계약을 취소 및 변경하는 경우에는 아래와 같이 수수료가 발생합니다.</p>\n <div className='panel-contents-wrapper'>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>서비스 예약 날짜 기준 48시간 이내 변경 및 취소</p>\n <p className='panel-content-subcontents'>수수료 없이 변경 & 취소 가능</p>\n <div className='clearfix' />\n </div>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>서비스 예약 전날 18:00 이전 변경 및 취소</p>\n <p className='panel-content-subcontents'>\n 취소 시 수수료 10,000원 발생. 단, 메이트와 변경 협의 성공 시에는 수수료 부과 X\n </p>\n <div className='clearfix' />\n </div>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>당일 예약 변경 및 취소</p>\n <p className='panel-content-subcontents'>\n 취소 시 수수료 15,000원 발생. 단, 메이트와 변경 협의 성공 시에는 수수료 부과 X\n </p>\n <div className='clearfix' />\n </div>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>서비스 시작 2시간 전 이내 변경 및 취소</p>\n <p className='panel-content-subcontents'>\n 취소 시 수수료 20,000원 발생. 단, 메이트와 변경 협의 성공 시에는 수수료 부과 X\n </p>\n <div className='clearfix' />\n </div>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>노쇼(No-Show)의 경우</p>\n <p className='panel-content-subcontents'>회원 자격 정지 및 민/형사상 책임 소지를 물을 수 있음</p>\n <div className='clearfix' />\n </div>\n </div>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-6' title='회사측의 과실로 예약일정을 소화 못하면 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 회사측의 과실로 예약된 서비스를 이용하지 못한 경우 서비스 요금을 전액 배상해드리며, 상황에 따라 서비스 무료 이용권\n 등의 추가 배상을 진행합니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-7' title='예약 장소에서 담당 동행인을 어떻게 찾나요?' />}\n >\n <PanelContent>\n <p>\n 예약 접수 후 동행인 매칭이 완료되면 ‘마이페이지’ 내에서 동행인의 정보를 확인하실 수 있으며, 해당 정보를 통해\n 동행인과 서비스 관련 소통을 진행하시면 됩니다.\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-8' title='예약한 시간보다 진료나 귀가가 늦어져 서비스 시간이 추가되면 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 위드메이트 서비스는 후불제이기 때문에 예약한 서비스 시간을 넘어 추가 서비스가 이루어지는 경우, 해당 시간만큼의 추가\n 비용이 발생합니다. 서비스 종료 후 추가된 금액이 포함된 최종 요금을 결제하시면 됩니다. 추가 비용은 서비스 시간 15분\n 미만 초과 시 발생하지 않으며, 15분을 초과할 시 30분 단위의 요금이 발생합니다.\n <br />\n (Ex. 2시간 예약 서비스가 최종 2시간 14분으로 종료 > 추가 요금 발생 X)\n <br />\n (Ex. 2시간 예약 서비스가 최종 2시간 16분으로 종료 > 추가 요금 발생 O)\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-9' title='위드메이트 서비스는 사용 가능 시간이 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 위드메이트의 모든 서비스는 주 5일 (월~금), 1일 10시간 (오전 9시 ~ 오후 7시) 동안 이용 가능합니다. 주말 및 공휴일에는\n 서비스 제공을 하지 않습니다. 하지만 특수 예약에 대해서는 해당 시간 외에도 서비스를 제공할 수 있습니다.\n </p>\n </PanelContent>\n </Panel>\n </Collapse>\n </div>\n <h1 id='emergency'>병원 동행 Pro FAQ</h1>\n <div>\n <Collapse\n expandIconPosition='right'\n bordered={false}\n expandIcon={({ isActive }) => (\n <Icon type='right' rotate={isActive ? 90 : -90} style={{ color: isActive ? mainColor : '#a7a7a7' }} />\n )}\n >\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-1' title='병원 동행 Pro는 정확히 어떤 경우에 신청할 수 있나요?' />}\n >\n <PanelContent>\n <p>\n 병원 동행 Pro는 응급 상황에 처하지는 않았으나 정기적, 혹은 비정기적으로 의료 기관에 방문해 의료 조치를 받아야 하는\n 경우에 신청 가능합니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-2' title='서비스 요금은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 병원 동행 Pro 서비스 요금은 시간 당 25,000원입니다. 또, 고객 소유의 차량을 메이트가 운행하여 동행할 경우 20,000원이\n 추가됩니다 (택시 등 대중 교통을 이용할 경우 추가 요금은 없으나 해당 교통비 개별 부담). 모든 서비스 비용은 VAT 포함\n 가격입니다.\n <br />\n (Ex. 2시간 예약 + 고객 소유 차량 운행 선택 시 > 기본 요금 50,000원 + 차량 운행비 20,000원 = 70,000원)\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-3' title='동행인의 성별은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>남성과 여성 인력이 모두 대기 중입니다.</p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-4' title='서비스는 어떤 형식으로 이루어지나요?' />}\n >\n <PanelContent>\n <p>\n 예약일과 시간에 맞춰 위드메이트 소속의 동행인이 병원 출발지(고객님 자택 등)로 도착합니다. 이후 서비스 신청에 따라\n 고객 소유의 차량을 통해 이동할 경우 동행인이 차량을 운행하고 병원까지 이동하며(택시 등의 대중 교통 이용 시 해당 비용\n 자가 부담), 병원 내에서 이루어지는 모든 활동에 동행합니다.\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-5' title='동행인은 어떤 사람들인가요?' />}\n >\n <PanelContent>\n <p>\n 동행인은 철저하게 선별되고 영업배상책임보험에 가입되어 있으며, 위드메이트가 자체적으로 실시하는 엄격한 서비스 교육을\n 모두 이수하고 통과한 전문가입니다. 또, 위드메이트의 동행인은 국립 암센터에서 실시하는 주기적인 암 환자 관리 교육 및\n 세미나에 지속적으로 참여해 서비스 품질과 전문성이 보장된 인력들입니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-6' title='중증 또는 휠체어 등의 의료 기구 대동이 필요한 환자도 이용 가능한가요?' />}\n >\n <PanelContent>\n <p>\n 중증 또는 휠체어 등의 의료 기구 대동이 필요한 환자에 대한 비응급 의료 동행 서비스는 준비 중에 있습니다. 현\n 서비스로는 해당 인원과의 동행은 불가하며, 예약이 접수된 경우 개별적인 연락을 통해 예약 불가를 알려드립니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={\n <PanelHeader\n rowIndex='2-7'\n title='단발성이 아니라 수회에 걸쳐서 정기적으로 위드메이트 서비스를 이용하고 싶은데 이 같은 경우 예약을 어떻게 하나요?'\n />\n }\n >\n <PanelContent>\n <p>\n 방사선이나 암 치료와 같이 주기적으로 내원이 필요한 경우 개별 상담을 통해 예약이 가능합니다. 위드메이트 서비스를 장기\n 예약할 경우 특별 할인 혜택 또한 제공되고 있습니다. 서비스 센터로 문의 주실 경우 위드메이트의 전문 상담원이\n 안내해드립니다.\n </p>\n </PanelContent>\n </Panel>\n </Collapse>\n </div>\n <h1 id='assist'>병원 동행 Basic FAQ</h1>\n <div>\n <Collapse\n expandIconPosition='right'\n bordered={false}\n expandIcon={({ isActive }) => (\n <Icon type='right' rotate={isActive ? 90 : -90} style={{ color: isActive ? mainColor : '#a7a7a7' }} />\n )}\n >\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-1' title='병원 동행 Basic은 정확히 어떤 경우에 신청할 수 있나요?' />}\n >\n <PanelContent>\n <p>\n 병원 동행 Basic은 주로 수술의 범주에는 속하지 않지만 마취 혹은 단순 보호자가 필요한 수면 내시경 등을 포함한 모든\n 종류의 시술을 해야 할 경우에 신청합니다. 물론 Pro 서비스를 받아야 하지만 자택에서 병원, 다시 병원에서 자택까지의\n 동행 과정을 필요로 하지 않는 상황에서도 신청이 가능합니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-2' title='서비스 요금은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 병원 동행 Basic 요금은 시간 당 15,000원입니다. (Ex. 2시간 예약 시 30,000원)\n <br /> 모든 서비스 비용은 VAT 포함 가격입니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-3' title='동행인은 어떤 사람들인가요?' />}\n >\n <PanelContent>\n <p>병원 동행 Basic 서비스 동행인은 Pro 서비스와 동일한 인력으로 구성되어 있습니다.</p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-4' title='동행인의 성별은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>남성과 여성 인력이 모두 대기 중입니다.</p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-5' title='서비스는 어떤 형식으로 이루어지나요?' />}\n >\n <PanelContent>\n <p>\n 고객님께서 지정하신 병원에서 동행자와 접선 후, 동행자는 예약자의 진료 접수부터 종료 시점까지 병원 내부에서\n 대기합니다. 진료 종료 후, 동행자는 예약자의 의사를 확인한 후 업무를 마치고 복귀합니다.\n </p>\n </PanelContent>\n </Panel>\n </Collapse>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n\nconst PanelHeader = ({ rowIndex, title }) => {\n return (\n <div className='panel-header'>\n <p className='row-index'>{rowIndex}</p>\n <p className='title'>{title}</p>\n </div>\n );\n};\n\nconst PanelContent = ({ children }) => {\n return <div className='panel-content'>{children}</div>;\n};\n","import React from 'react';\nimport StyledFaqContainer from './faq.styled';\nimport FAQ from './faq';\n\nclass FAQContainer extends React.PureComponent {\n render() {\n return (\n <StyledFaqContainer>\n <FAQ {...this.props} />\n </StyledFaqContainer>\n );\n }\n}\nexport default FAQContainer;\n","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../../../theme';\nconst StyledBuyContainer = styled.div`\n margin-top: 55px;\n\n .buy-container {\n min-height: 100vh;\n position: relative;\n width: 100%;\n background-color: #ebf9ff;\n background-image: url('/assets/images/main-bg.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n @media (max-width: 768px) {\n background-image: none;\n }\n\n .order-menu-wrapper {\n width: 50%;\n position: relative;\n max-width: 440px;\n min-width: 370px;\n background-color: white;\n border-radius: 8px;\n box-shadow: 1px 2px 3.5px #e6e6e6;\n padding: 32px;\n // overflow: hidden;\n\n .mobile-close-button {\n display: none;\n }\n\n .ant-input-number {\n width: 100%;\n height: 48px;\n\n .ant-input-number-input-wrap {\n height: 100%;\n\n input {\n height: 100%;\n }\n }\n\n .ant-input-number-handler-wrap {\n opacity: 1;\n width: 48px;\n\n span {\n display: flex;\n align-items: center;\n justify-content: center;\n\n i {\n position: relative;\n margin-top: 0px;\n left: 0px;\n top: 0px;\n bottom: 0px;\n right: 0px;\n font-size: 16px;\n }\n }\n .anticon.anticon-up.ant-input-number-handler-up-inner {\n color: ${mainColor};\n }\n .anticon.anticon-down.ant-input-number-handler-down-inner {\n color: ${mainColor};\n }\n }\n }\n\n @media (max-width: 768px) {\n margin: 0px auto;\n width: 100%;\n }\n\n .order-title {\n margin-bottom: 20px;\n\n p {\n margin: 0px;\n padding: 0px;\n font-size: ${sizeHandler(28)};\n font-weight: bold;\n letter-spacing: -0.7px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .fee-wrapper {\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n\n p {\n margin: 0px;\n padding: 0px;\n\n &.info {\n flex: 1;\n font-size: 14px;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n &.fee {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: right;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n .total-wrapper {\n display: flex;\n align-items: center;\n padding: 20px 0px;\n margin-top: 16px;\n margin-bottom: 32px;\n border-top: 1px solid #e6e6e6;\n border-bottom: 1px solid #e6e6e6;\n\n p {\n margin: 0px;\n padding: 0px;\n\n &.info {\n flex: 1;\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n letter-spacing: -0.5px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n &.fee {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n letter-spacing: -0.5px;\n text-align: right;\n color: #3bc1ff;\n }\n }\n }\n\n .service {\n margin-bottom: 20px;\n\n .service-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #ddd;\n border-radius: 6px;\n\n .tab {\n flex: 1;\n height: 48px;\n border-right: 1px solid #ddd;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:last-child {\n border: 0px;\n }\n\n span {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.2px;\n font-weight: bold;\n color: ${mainColor};\n }\n }\n\n .tab.active {\n background-color: ${mainColor};\n\n span {\n color: white;\n }\n }\n }\n\n .info-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n\n p {\n flex: 1;\n margin: 0px;\n padding: 0px;\n text-align: left;\n\n &:first-child {\n margin-right: 8px;\n }\n }\n }\n\n .info-input-tab {\n display: flex;\n align-items: center;\n // justify-content: center;\n\n > div {\n flex: 1;\n\n &:first-child {\n margin-right: 8px;\n }\n }\n\n .input {\n display: flex;\n border-radius: 4px;\n border: solid 1px #e6e6e6;\n height: 36px;\n line-height: 36px;\n text-indent: 12px;\n align-items: center;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n background-color: #f5f5f5;\n cursor: not-allowed;\n\n // .ant-input {\n // color: rgba(0, 0, 0, 0.8);\n // }\n\n &.phone {\n flex: 0.5;\n\n @media (max-width: 768px) {\n flex: 1;\n }\n }\n\n &.input-with-icon {\n p {\n height: 100%;\n flex: 1;\n }\n\n div {\n height: 100%;\n width: 36px;\n border-left: 1px solid #e6e6e6;\n display: flex;\n justify-content: center;\n align-items: center;\n\n span {\n text-align: center;\n text-indent: 0px;\n opacity: 0.3;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n }\n }\n }\n\n .service-fee-wrapper {\n margin-bottom: 32px;\n\n .service {\n display: flex;\n align-items: center;\n padding-top: 12px;\n margin-bottom: 0px;\n\n .name {\n flex: 1;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .fee {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: right;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n input {\n height: 36px;\n display: inline-block;\n width: 100%;\n }\n\n .select {\n display: inline-block;\n height: 36px;\n width: 100%;\n\n .ant-select-selection--single {\n height: 100%;\n }\n\n .ant-select-selection__rendered {\n line-height: 36px;\n }\n }\n\n .info {\n font-size: ${sizeHandler(12)};\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 4px;\n letter-spacing: -0.15px;\n }\n\n .ant-select-selection__rendered {\n margin-right: 34px;\n border-right: 1px solid #e6e6e6;\n }\n\n .ant-select-arrow {\n color: ${mainColor};\n }\n\n .image-with-text {\n display: flex;\n align-items: center;\n img {\n height: 18px;\n border: 0px;\n }\n\n p {\n flex: 1;\n margin: 0px;\n padding: 0px;\n margin-left: 12px;\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: #3bc1ff;\n }\n }\n }\n\n .side-summary-tab {\n position: absolute;\n top: 0px;\n right: -380px;\n width: 360px;\n height: 100%;\n background-color: white;\n border-radius: 8px;\n box-shadow: 1px 2px 3.5px #e6e6e6;\n padding: 32px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n border-radius: 0px;\n box-shadow: none;\n padding: 0px;\n position: relative;\n top: 55px;\n left: 0px;\n background-color: transparent;\n }\n\n .refund-info-wrapper {\n flex: 1;\n display: flex;\n align-items: flex-end;\n\n .info-wrapper {\n width: 100%;\n\n .title {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n color: #a7a7a7;\n margin-bottom: 8px;\n }\n\n .info {\n font-size: ${sizeHandler(10)};\n line-height: ${sizeHandler(16)};\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n margin-top: 36px;\n padding-bottom: 20px;\n\n .info {\n margin-bottom: 60px;\n }\n }\n }\n }\n }\n }\n }\n`;\nexport default StyledBuyContainer;\n","import React from 'react';\nimport { Input, Button, InputNumber, message } from 'antd';\nimport { mainColor } from '../../../../theme';\nimport { UNEMER, ASSIST, MATE, DEV } from '../../../../Lib/variables';\nimport { currencyFormatter } from '../../../../Lib/utils';\nimport moment from 'moment';\n\nexport default class BuyTicket extends React.PureComponent {\n onEdit = ({ type, value }) => {\n this.props.edit({ type, value });\n };\n\n componentWillUnmount = () => {\n this.onEdit({ type: 'clear', value: '' });\n };\n\n payment = () => {\n const { id, name, userType } = this.props.auth;\n const { service, count } = this.props.app.buyForm;\n\n if (userType === MATE) return message.info('해당 서비스는 일반 사용자만 이용가능합니다.');\n if (!id) return this.props.history.push('/logout');\n\n this.props\n .getServiceInfo({ code: service })\n .then(resolve => {\n if (resolve && Array.isArray(resolve) && resolve.length > 0) {\n const { _id, defaultPrice } = resolve[0];\n const discount = count >= 10 ? count * defaultPrice * 0.1 : count >= 4 ? count * defaultPrice * 0.05 : 0;\n\n const totalPrice = defaultPrice * count - discount;\n\n const IMP = window.IMP; // 생략해도 괜찮습니다.\n IMP.init('imp47625929'); // \"imp00000000\" 대신 발급받은 \"가맹점 식별코드\"를 사용합니다.\n\n // IMP.request_pay(param, callback) 호출\n IMP.request_pay(\n {\n // param\n pg: 'inicis',\n pay_method: 'card',\n merchant_uid: _id + '-' + moment().valueOf(),\n name: service === UNEMER ? '병원 동행 Pro 이용권' : '병원 동행 Basic 이용권',\n amount: totalPrice,\n buyer_email: '',\n buyer_name: name,\n buyer_tel: '',\n m_redirect_url: `https://server.withmate.kr/v1/service/buy/ticket/${count}/${id}/${service}/mobile`,\n },\n function(rsp) {\n // callback\n if (rsp.success === true) {\n const productInfo = {\n productCode: service,\n totalPrice: rsp.paid_amount,\n productId: _id,\n name: rsp.name,\n merchantUid: rsp.merchant_uid,\n count,\n impUid: rsp.imp_uid,\n payMethod: rsp.pay_method,\n unit: rsp.currency,\n paidStatus: rsp.paid === 'paid' ? true : false,\n cardName: rsp.card_name,\n bankName: rsp.bank_name,\n cardQuota: rsp.card_quota, // 할부 월수\n buyerEmail: rsp.buyer_email,\n };\n\n this.props\n .buyTicket({ userId: id, info: productInfo })\n .then(resolve => {\n if (resolve && resolve !== 'success') {\n return message.error('결제가 정상적으로 수행되지 않았습니다. 새로고침 후 다시 시도해주세요.');\n }\n\n if (resolve && resolve === 'success') {\n message.success('상품 구매를 완료하였습니다. 서비스를 예약해보세요.');\n return this.props.history.push('/');\n }\n })\n .catch(error => {\n message.error('상품 결제이력 등록 중 오류가 발생하였습니다. 관리자에게 문의하여 주시기 바랍니다.');\n });\n } else {\n return message.error('결제 시도 중 오류가 발생하였습니다. 다시 시도해주세요.');\n }\n },\n );\n } else {\n return message.info('현재 판매 마감된 상품입니다. 다른 상품을 고매해주세요.');\n }\n })\n .catch(error => {\n return message.error('결제 시도 중 오류가 발생하였습니다. 다시 시도해주세요.');\n });\n };\n\n render() {\n const { service, count } = this.props.app.buyForm;\n const discount =\n count >= 10 ? count * (service === UNEMER ? 120000 : 18000) * 0.1 : count >= 4 ? count * (service === UNEMER ? 120000 : 18000) * 0.05 : 0;\n return (\n <div className='buy-container'>\n <div className='inner-container'>\n <div className='order-menu-wrapper'>\n <div className='order-title'>\n <p>서비스 이용을 위해</p>\n <p>이용권을 구매해주세요</p>\n </div>\n <div className='service'>\n <p className='info'>\n <img\n src='/assets/images/info-icon.png'\n alt='info'\n style={{ width: '12px', height: '12px', marginRight: '4px', color: mainColor }}\n />\n 서비스 선택\n </p>\n <div className='service-tab'>\n <div\n className={`tab ${service === UNEMER ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'service', value: UNEMER });\n this.onEdit({ type: 'count', value: 1 });\n }}\n >\n <span>비응급 동행</span>\n </div>\n <div\n className={`tab ${service === 'assist' ? 'active' : ''}`}\n onClick={() => {\n this.onEdit({ type: 'service', value: ASSIST });\n this.onEdit({ type: 'count', value: 1 });\n }}\n >\n <span>위드 어시스트</span>\n </div>\n </div>\n </div>\n\n <div className='service'>\n <p className='info'>이용권 구매 수량</p>\n <div>\n <InputNumber\n min={1}\n max={30}\n value={count}\n onChange={val => {\n if (typeof val !== 'number') return null;\n\n this.onEdit({ type: 'count', value: val });\n }}\n formatter={() => {\n return `${service === UNEMER ? '병원 동행 Pro x ' : '병원 동행 Basic x '}${count}`;\n }}\n />\n </div>\n </div>\n\n <div className='fee-wrapper'>\n <p className='info'>{service === UNEMER ? '병원 동행 Pro' : '병원 동행 Basic'} 이용권 비용</p>\n <p className='fee'>{service === UNEMER ? '120,000 KRW' : '18,000 KRW'}</p>\n </div>\n\n <div className='fee-wrapper'>\n <p className='info'>구매 수량</p>\n <p className='fee'>x {count}</p>\n </div>\n\n {count >= 4 ? (\n <div className='fee-wrapper'>\n <p className='info'>할인액</p>\n <p className='fee'>\n {currencyFormatter(discount)}\n KRW ({count >= 10 ? 10 : count >= 4 ? 5 : 0}%)\n </p>\n </div>\n ) : null}\n\n <div className='total-wrapper'>\n <p className='info'>Total</p>\n <p className='fee'>{currencyFormatter(count * (service === UNEMER ? 120000 : 18000) - discount)} KRW</p>\n </div>\n\n <div className='button-wrapper'>\n <Button style={{ width: '100%', height: '40px' }} type='primary' onClick={this.payment}>\n 구매하기\n </Button>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledBuyContaeinr from './buy.styled';\nimport Buy from './buy';\n\nimport { MATE } from '../../../../Lib/variables';\nimport { editBuyForm, getServiceInfo, buyTicket } from '../../../../Reducer/Modules/app';\n\nclass BuyTicketPage extends React.PureComponent {\n componentDidMount = () => {\n const { id, userType } = this.props.auth;\n if (!id || userType === MATE) this.props.history.goBack();\n };\n\n render() {\n return (\n <StyledBuyContaeinr>\n <Buy {...this.props} />\n </StyledBuyContaeinr>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\n\nconst mapDispatchToProps = dispatch => ({\n edit: ({ value, type }) => dispatch(editBuyForm({ type, value })),\n getServiceInfo: ({ code }) => dispatch(getServiceInfo({ code })),\n buyTicket: ({ userId, info }) => dispatch(buyTicket({ userId, info })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BuyTicketPage);\n","import React from 'react';\nimport { Switch, Route } from 'react-router-dom';\n\nimport Buy from './ProductPages/Buy';\n\nexport default class ProductRenderPages extends React.PureComponent {\n render() {\n const { url } = this.props.match;\n return (\n <Switch>\n <Route path={`${url}/buy/ticket`} component={Buy} />\n </Switch>\n );\n }\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\n\nimport Products from './product';\n\nclass ProductPages extends React.PureComponent {\n render() {\n return <Products {...this.props} />;\n }\n}\n\nconst mapStateToProps = ({}) => ({});\n\nconst mapStateToDispatch = dispatch => ({});\n\nexport default connect(mapStateToProps, mapStateToDispatch)(ProductPages);\n","import styled from 'styled-components';\n\nexport const ValueBox = styled.div`\n margin-bottom: 16px;\n\n .switch {\n margin-right: 10px;\n }\n\n .slide-img-div {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n border: 2px dashed #ccc;\n border-radius: 5px;\n margin-bottom: 10px;\n\n .slide-img-desc {\n bottom-margin: 20px;\n }\n\n .slide-img-preview {\n position: relative;\n \n .upload-img {\n max-width: 200px;\n max-height: auto;\n margin-top: 10px;\n pointer-evnets: none;\n }\n \n .icon-div {\n position: absolute;\n padding-bottom: 30px;\n right: 0;\n \n .delete-btn {\n border: none;\n font-size: 18px;\n }\n }\n }\n }\n }\n`;\n\nconst ReservePageContainer = styled.div`\n width: 100%;\n min-height: 100vh;\n\n padding-top: 54px;\n // padding-bottom: 54px;\n`;\n\nconst ResrevePageInnerContainer = styled.div`\n width: 1120px;\n margin: 0 auto;\n\n ${props => props.bg && `background-image: url(${props.bg}); background-size: contain; background-position: 50% 80%; background-repeat: no-repeat;`}\n\n padding-top: ${props => (props.smallPadding ? '0px' : '48px')};\n padding-bottom: ${props => (props.smallPadding ? '0px' : '188px')};\n\n @media (max-width: 768px) {\n width: 100%;\n padding-top: 24px;\n padding-bottom: 30px;\n ${props => props.bg && `background-image: transparent; background-color: ${props.mobileBg ? props.mobieBg : '#ffffff'};`}\n }\n`;\n\nconst ResrevePageHalfInnerContainer = styled.div`\n margin: 0 auto;\n width: 1120px;\n margin-right: auto;\n margin-left: auto;\n padding: 15px;\n\n ${props => props.bg && `background-image: url(${props.bg}); background-size: cover; background-position: 50% 80%; background-repeat: no-repeat;`}\n\n padding-top: ${props => (props.smallPadding ? '0px' : '10px')};\n padding-bottom: ${props => (props.smallPadding ? '0px' : '30px')};\n\n @media (max-width: 768px) {\n width: 100%;\n padding-top: 24px;\n padding-bottom: 48px;\n ${props => props.bg && `background-image: transparent; background-color: ${props.mobileBg ? props.mobieBg : '#ffffff'};`}\n }\n`;\n\nconst ReserveTopCover = styled.div`\n background: ${props =>\n props.isMain ? `url('/assets/images/w_reserve_web.png') no-repeat top center` : `url('/assets/images/w_reserve_m.png') no-repeat top center`};\n background-size: cover;\n\n @media (max-width: 768px) {\n ${props => !props.isMain && `display: none;`}\n }\n`;\nexport { ReserveTopCover, ReservePageContainer, ResrevePageInnerContainer, ResrevePageHalfInnerContainer };\n\nconst TopBannerSubDescription = styled.div`\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: #ffffff;\n margin-top: 8px;\n`;\n\nconst TopBannerSection = styled.div`\n width: 100%;\n\n padding-top: ${props => (props.isMain ? '110px' : '86px')};\n padding-bottom: ${props => (props.isMain ? '0px' : '67px')};\n\n text-align: center;\n\n @media (max-width: 768px) {\n text-align: center;\n ${props => props.bg === '#f9f9f9' && `display: none;`}\n padding-top: 56px;\n }\n`;\n\nconst TopBannerText = styled.h3`\n margin-top: 0px;\n margin-bottom: 2px;\n\n font-size: 32px;\n font-weight: 300;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.7px;\n text-align: center;\n color: #ffffff;\n\n > span {\n font-size: 32px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.7px;\n text-align: left;\n color: #ffffff;\n }\n\n @media (max-width: 768px) {\n font-size: 24px;\n\n > span {\n font-size: 24px;\n }\n }\n`;\n\nconst TopBannerDescription = styled.div`\n padding: 8px 24px;\n width: fit-content;\n\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: center;\n background-color: #3bc1ff;\n color: #ffffff;\n\n border-radius: 50vh;\n margin: 0 auto;\n margin-bottom: 16px;\n`;\n\nexport { TopBannerSection, TopBannerText, TopBannerDescription };\n\nconst StepSectionContainer = styled.div`\n padding-top: 32px;\n padding-bottom: 32px;\n\n background-color: #ffffff;\n\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nconst StepButtonWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nconst StepButton = styled.button`\n width: 200px;\n height: 64px;\n line-height: 64px;\n border: 0px;\n outline: none;\n\n border-radius: 50vh;\n cursor: not-allowed;\n\n text-align: center;\n font-size: 18px;\n letter-spacing: -0.1px;\n\n ${props =>\n props.active\n ? `\n background-color: #3bc1ff;\n color: #ffffff;\n `\n : `\n background-color: #e6e6e6;\n color:#afb0b2;`}\n\n @media (max-width: 768px) {\n width: 192px;\n height: 52px;\n line-height: 52px;\n font-size: 14px;\n letter-spacing: normal;\n }\n`;\n\nconst UnderLineText = styled.span`\n cursor: pointer;\n\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: #3bc1ff;\n\n text-decoration: underline;\n`;\n\nconst StepArrow = styled.img`\n width: 16px;\n height: 16px;\n object-fit: contain;\n\n margin-left: 8px;\n margin-right: 8px;\n\n @media (max-width: 768px) {\n transform: rotate(90deg);\n widteh: 24px;\n height: 24px;\n margin-left: 0px;\n margin-right: 0px;\n margin-top: 8px;\n margin-bottom: 8px;\n }\n`;\n\nexport { UnderLineText, TopBannerSubDescription, StepSectionContainer, StepButtonWrapper, StepButton, StepArrow };\n\nconst NextStepGudieContainer = styled.div`\n width: 100%;\n\n padding-top: 56px;\n padding-bottom: 42px;\n\n ${props => props.useBg && `background-color: rgba(242,242,242,0.3);`}\n text-align: center;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n\n // margin-bottom: 48px;\n\n @media (max-width: 768px) {\n padding-top: 24px;\n padding-bottom: 24px;\n\n // margin-bottom: 24px;\n }\n`;\n\nconst NextStepEmoj = styled.img`\n width: 64px;\n height: 64px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n width: 32px;\n height: 32px;\n }\n`;\n\nconst NextStepTitle = styled.h4`\n margin-top: 24px;\n margin-bottom: 16px;\n\n font-size: 36px;\n line-height: 48px;\n color: ${props => props.color};\n letter-spacing: -0.7px;\n text-align: center;\n font-weight: bold;\n\n @media (max-width: 768px) {\n margin-top: 16px;\n\n font-size: 22px;\n line-height: 30px;\n letter-spacing: -0.5px;\n }\n`;\n\nconst MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n\nconst DesktopBr = styled.br`\n display: block;\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nconst NextStepArrowDown = styled.img`\n width: 48px;\n height: 48px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n width: 24px;\n height: 24px;\n }\n`;\n\nexport { NextStepGudieContainer, NextStepEmoj, NextStepTitle, NextStepArrowDown };\n\nconst ServiceSectionContainer = styled.div`\n position: relative;\n`;\n\nconst ServiceSectionTitle = styled.h5`\n font-size: 28px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n font-weight: bold;\n margin-bottom: 16px;\n\n @media (max-width: 768px) {\n font-size: 22px;\n }\n`;\n\nconst ServiceSectionDescription = styled.p`\n margin-bottom: 52px;\n\n font-size: 16px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n letter-spacing: -0.2px;\n line-height: 28px;\n\n @media (max-width: 768px) {\n font-size: 15px;\n line-height: 23px;\n letter-spacing: -0.3px;\n\n margin-bottom: 48px;\n }\n`;\n\nexport { ServiceSectionContainer, ServiceSectionTitle, ServiceSectionDescription };\n\nconst ServiceCardList = styled.div`\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: center;\n padding-bottom: 80px;\n\n > div:nth-child(5n) {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n justify-content: flex-start;\n padding-left: 16px;\n padding-right: 16px;\n\n > div:nth-child(5n) {\n margin-right: 12px;\n }\n\n > div:nth-child(2n) {\n margin-right: 0px;\n }\n }\n`;\n\nconst ServiceCardWrapper = styled.div`\n width: 216px;\n height: 234px;\n\n border-radius: 4px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: ${props => (props.on ? '4px solid #3bc1ff' : '1px solid #e6e6e6')};\n padding: ${props => (props.on ? '13px' : '16px')};\n background-color: #ffffff;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n\n margin-right: 10px;\n margin-bottom: 10px;\n\n > img {\n width: 144px;\n height: 144px;\n object-fit: contain;\n\n margin-bottom: 4px;\n }\n\n @media (max-width: 768px) {\n width: calc(50% - 6px);\n height: 195px;\n\n margin-right: 12px;\n margin-bottom: 10px;\n\n padding: 4px;\n\n padding-top: ${props => (props.on ? '12px' : '15px')};\n padding-bottom: ${props => (props.on ? '12px' : '15px')};\n\n > img {\n // width: 100%;\n // max-height: 120px\n width: 120px;\n height: 120px;\n\n margin-bottom: 2px;\n }\n }\n`;\n\nconst ServiceCardButton = styled.div`\n display: inline-block;\n\n width: 100%;\n max-width: 184px;\n height: 48px;\n line-height: 48px;\n\n cursor: pointer;\n\n font-size: 18px;\n letter-spacing: -0.1px;\n color: #3bc1ff;\n background-color: #ffffff;\n border-radius: 50vh;\n text-align: center;\n border: 1px solid #afb0b2;\n\n &:hover {\n transition: all 0.25s;\n color: #ffffff;\n background-color: #3bc1ff;\n }\n\n &.selected {\n color: #ffffff;\n background-color: #3bc1ff;\n }\n\n @media (max-width: 768px) {\n font-size: 16px;\n max-width: 130px;\n\n height: 40px;\n line-height: 40px;\n\n &:hover {\n transition: none;\n color: #3bc1ff;\n background-color: #ffffff;\n }\n\n &.selected {\n color: #ffffff;\n background-color: #3bc1ff;\n }\n }\n`;\n\nexport { ServiceCardList, ServiceCardWrapper, ServiceCardButton };\n\nconst ZzzServiceWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n\n padding: 32px;\n border-radius: 4px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: 1px solid #e6e6e6;\n\n @media (max-width: 768px) {\n width: calc(100% - 32px);\n margin: 0 auto;\n }\n`;\n\nconst ZzzArt = styled.img`\n width: 200px;\n height: 160px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n width: 175px;\n height: 140px;\n\n margin-bottom: 16px;\n }\n`;\n\nconst ZzzDescription = styled.div`\n margin-bottom: 8px;\n\n font-weight: bold;\n font-size: 20px;\n letter-spacing: -0.1px;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n font-size: 16px;\n margin-bottom: 16px;\n text-align: center;\n }\n`;\n\nexport { ZzzServiceWrapper, ZzzArt, ZzzDescription };\n\nconst AlzheServiceWrapper = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n\n padding: 32px;\n border-radius: 4px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: 1px solid #e6e6e6;\n\n @media (max-width: 768px) {\n width: calc(100% - 32px);\n margin: 0 auto;\n }\n`;\n\nconst AlzheArt = styled.img`\n width: 200px;\n height: 160px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n width: 175px;\n height: 140px;\n\n margin-bottom: 16px;\n }\n`;\n\nconst AlzheDescription = styled.div`\n margin-bottom: 8px;\n\n font-weight: bold;\n font-size: 20px;\n letter-spacing: -0.1px;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n font-size: 16px;\n margin-bottom: 16px;\n text-align: center;\n }\n`;\n\nexport { AlzheServiceWrapper, AlzheArt, AlzheDescription };\n\nconst ServiceTypeSectionContainer = styled.div`\n width: 100%;\n position: relative;\n\n padding-top: 36px;\n ${props => props.gap && `padding-bottom: 54px;`}\n\n ${props => props.bg && `background-image: url(${props.bg}); background-size: contain; background-position: right; background-repeat: no-repeat;`}\n\n @media (max-width: 768px) {\n ${props => props.bg && `background-image: transparent; background-color: ${props.mobileBg ? props.mobieBg : '#ffffff'};`}\n }\n`;\n\nconst ServiceTypeWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n > div:last-child {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n\n > div:last-child {\n margin-bottom: 0px;\n margin-right: auto;\n }\n }\n`;\n\nexport { ServiceTypeSectionContainer, ServiceTypeWrapper };\n\nconst ServiceTypeCardWrapper = styled.div`\n width: 368px;\n height: 410px;\n padding: 16px;\n border-radius: 4px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n background-color: #ffffff;\n border: 4px solid ${props => (props.selected ? '#3bc1ff' : '#e6e6e6')};\n\n display: flex;\n flex-direction: column;\n align-items: center;\n\n margin-right: 8px;\n\n @media (max-width: 768px) {\n margin-right: auto;\n margin: 0 auto;\n margin-bottom: 10px;\n\n width: calc(100% - 32px);\n height: auto;\n border: 1px solid ${props => (props.selected ? '#3bc1ff' : '#e6e6e6')};\n }\n`;\n\nconst ServiceTypeCardImg = styled.img`\n width: 140px;\n height: 140px;\n object-fit: cover;\n`;\n\nconst ServiceTypeName = styled.span`\n margin-top: 11px;\n margin-bottom: 8px;\n\n font-size: 24px;\n font-weight: bold;\n text-align: center;\n letter-spacing: -0.5px;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n font-size: 22px;\n line-height: 1.42;\n letter-spacing: -0.5px;\n\n margin-top: 0px;\n margin-bottom: 0px;\n }\n`;\n\nconst ServiceTypeDescription = styled.div`\n word-break: keep-all;\n font-size: 15px;\n text-align: center;\n letter-spacing: -0.3px;\n margin-bottom: 36px;\n\n max-width: 204px;\n`;\n\nconst NextStepButton = styled.div`\n width: 280px;\n height: 72px;\n line-height: 72px;\n text-align: center;\n\n margin: 0 auto;\n margin-top: 100px;\n\n border-radius: 50vh;\n cursor: pointer;\n\n background-color: ${props => (props.on ? '#3bc1ff' : '#e6e6e6')};\n color: ${props => (props.on ? '#ffffff' : '#afb0b2')};\n font-size: 22px;\n letter-spacing: -0.5px;\n\n @media (max-width: 768px) {\n height: 55px;\n line-height: 55px;\n font-size: 16px;\n letter-spacing: -0.1px;\n\n margin-top: 56px;\n }\n`;\n\nconst LastStepButton = styled(NextStepButton)`\n @media (max-width: 768px) {\n margin-top: 32px;\n margin-bottom: 32px;\n }\n`;\nexport { MobileBr, DesktopBr, NextStepButton, LastStepButton, ServiceTypeCardWrapper, ServiceTypeCardImg, ServiceTypeName, ServiceTypeDescription };\n\nconst FormContainer = styled.div`\n width: 100%;\n background-color: #f9f9f9;\n\n padding-top: 68px;\n padding-bottom: 80px;\n\n background-image: url('/assets/images/artwork_both_bg.png');\n background-size: contain;\n background-position: 50% 70%;\n background-repeat: no-repeat;\n\n @media (max-width: 768px) {\n background: transparent;\n\n padding-top: 0px;\n padding-bottom: 0px;\n }\n`;\n\nconst FormWrapper = styled.div`\n width: 646px;\n margin: 0 auto;\n background-color: #ffffff;\n border: 1px solid #e6e6e6;\n border-radius: 8px;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n\n padding: 48px 32px;\n margin-bottom: 64px;\n\n @media (max-width: 768px) {\n width: 100%;\n border-radius: 0px;\n box-shadow: unset;\n border: 0px;\n\n padding: 32px 16px;\n margin-bottom: 0px;\n }\n\n .type-button-wrapper {\n width: 100%;\n height: 48px;\n\n background-color: white;\n border: 1px solid #e6e6e6;\n border-radius: 4px;\n\n display: flex;\n align-items: center;\n\n > .type-button {\n width: 50%;\n height: 100%;\n line-height: 48px;\n\n text-align: center;\n cursor: pointer;\n\n font-size: 16px;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.2);\n }\n\n > .type-button.active {\n background: rgba(0, 0, 0, 0.7);\n border-radius: 4px;\n color: #f9f9f9;\n }\n }\n`;\n\nconst FormMainTitle = styled.h3`\n font-size: 32px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.7px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-top: 0px;\n margin-bottom: 16px;\n\n @media (max-width: 768px) {\n font-size: 22px;\n line-height: 1.42;\n letter-spacing: -0.5px;\n margin-bottom: 8px;\n }\n`;\n\nconst FormMainAlert = styled.p`\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: #ff5500;\n\n margin-top: 0px;\n margin-bottom: 32px;\n\n word-break: keep-all;\n\n @media (max-width: 768px) {\n font-size: 14px;\n line-height: 1.58;\n letter-spacing: -0.3px;\n }\n`;\n\nexport { FormContainer, FormWrapper, FormMainTitle, FormMainAlert };\n\nconst ServiceName = styled.h5`\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: left;\n color: #3bc1ff;\n\n margin-bottom: 40px;\n`;\n\nconst Sexes = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n line-height: 44px;\n\n > span {\n display: inline-block;\n cursor: pointer;\n\n flex: 1;\n height: 100%;\n border-radius: 4px;\n border: 1px solid #e9e9e9;\n\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n font-size: 14px;\n letter-spacing: -0.2px;\n\n margin-right: 8px;\n }\n\n > span.active {\n background-color: #3bc1ff;\n color: white;\n }\n\n > span:last-child {\n margin-right: 0px;\n }\n`;\n\nconst LabelDescription = styled.span`\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: #afb0b2;\n margin-left: 4px;\n`;\n\nconst FlexFormWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: center;\n\n max-width: 1120px;\n margin: 0 auto;\n\n > div:first-child {\n margin-right: 20px;\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n\n > div:first-child {\n margin-right: 0px;\n margin-bottom: 0px;\n }\n }\n`;\n\nconst ResultFormWrapper = styled(FormWrapper)`\n width: auto;\n flex: 1;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nconst LabelAndValueRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n ${props => props.borderColor && `border-bottom: 1px solid ${props.borderColor};`}\n\n padding-top: 8px;\n padding-bottom: 8px;\n`;\n\nconst LabelValue = styled.span`\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n font-size: 16px;\n ine-height: 1.42;\n }\n`;\n\nconst PriceValue = styled.span`\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: right;\n color: #3bc1ff;\n\n @media (max-width: 768px) {\n font-size: 16px;\n ine-height: 1.42;\n }\n`;\n\nconst PriceDetailLabel = styled.span`\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n padding-left: 12px;\n position: relative;\n\n > span {\n position: absolute;\n top: 0px;\n left: 0px;\n font-size: 12px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: #cecfd0;\n }\n`;\n\nconst PriceDetailValue = styled.span`\n font-size: 16px;\n font-weight: ${props => (props.value ? 'bold' : 'normal')};\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.2px;\n text-align: right;\n color: ${props => (props.value ? '#3bc1ff' : '#afb0b2')};\n`;\n\nconst DashAndText = styled.div`\n display: flex;\n align-items: flex-start;\n\n img {\n width: 16px;\n height: 16px;\n margin-top: 4px;\n margin-right: 8px;\n }\n\n > a {\n color: #3bc1ff;\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.58;\n letter-spacing: -0.3px;\n text-align: left;\n }\n\n > span {\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n word-break: keep-all;\n }\n\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n word-break: keep-all;\n\n ${props => props.alert && `color: #ff5500;`}\n\n @media (max-width: 768px) {\n font-size: 14px;\n\n > span {\n font-size: 14px;\n }\n }\n`;\nexport {\n DashAndText,\n LabelValue,\n PriceDetailLabel,\n PriceDetailValue,\n ServiceName,\n LabelAndValueRow,\n PriceValue,\n Sexes,\n LabelDescription,\n FlexFormWrapper,\n ResultFormWrapper,\n};\n\nconst CongraturateLogo = styled.div`\n width: 100%;\n height: auto;\n\n text-align: center;\n\n margin-top: 12px;\n margin-bottom: 12px;\n\n > img {\n width: 200px;\n height: 200px;\n }\n`;\n\nconst DoneResultWrapper = styled.div`\n padding-top: 40px;\n padding-bottom: 40px;\n border-bottom: 1px solid #e9e9e9;\n`;\n\nconst MobileStepImage = styled.div`\n display: none;\n @media (max-width: 768px) {\n display: block;\n margin-top: 32px;\n text-align: center;\n width: 100%;\n\n > img {\n margin: 0 auto;\n width: 174px;\n height: 174px;\n }\n }\n`;\n\nexport { CongraturateLogo, MobileStepImage, DoneResultWrapper };\n","import React from 'react';\nimport styled from 'styled-components';\nimport { mainColor } from '../../../theme';\n\nexport const Container = styled.div`\n width: 100vw;\n height: auto;\n padding-top: 55px;\n`;\n\nexport const TopWrapper = styled.div`\n width: 100%;\n height: auto;\n\n // background-image: url('/assets/images/main-background.png');\n // background-position: center;\n // background-repeat: no-repeat;\n // background-size: cover;\n background-color: #80abff;\n`;\n\nexport const BottomWrapper = styled.div`\n width: 100%;\n background-color: white;\n`;\n\nexport const InnerContainer = styled.div`\n max-width: 1080px;\n margin: 0 auto;\n\n padding: 80px 0px;\n position: relative;\n\n img.bg {\n width: auto;\n height: 100%;\n\n position: absolute;\n top: 0px;\n right: 0px;\n }\n\n @media (max-width: 1080px) {\n padding: 80px 16px;\n img.bg {\n display: none;\n }\n\n br {\n display: block;\n }\n }\n\n @media (max-width: 768px) {\n padding: 80px 16px;\n\n br {\n display: block;\n }\n }\n`;\n\nexport const Logo = styled.img`\n display: inline-block;\n width: 200px;\n object-fit: contain;\n`;\n\nexport const Title = styled.p`\n margin-bottom: 24px;\n\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n`;\n\nexport const MediumText = styled.p`\n margin-bottom: 8px;\n\n font-size: 36px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.7px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-size: 36px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.7px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid #000000;\n }\n`;\n\nexport const Noti = styled.div`\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.54;\n letter-spacing: -0.15px;\n text-align: left;\n color: rgba(0, 0, 0, 0.6);\n word-break: keep-all;\n`;\n\nexport const ApplyButton = styled.span`\n padding: 14px 28px;\n background-color: #3bc1ff;\n\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.4;\n letter-spacing: -0.1px;\n text-align: center;\n color: #ffffff;\n\n border-radius: 4px;\n min-width: 230px;\n overflow: hidden;\n\n display: inline-block;\n margin-top: 42px;\n cursor: pointer;\n\n &:hover {\n transition: all 0.5s;\n background-color: ${mainColor};\n color: white;\n }\n`;\n\nexport const LargeText = styled.p`\n margin-bottom: 0px;\n\n font-weight: bold;\n color: #ffffff;\n font-size: 32px;\n\n padding: 2.5px;\n border-bottom: 4px solid #ffffff;\n display: inline-block;\n`;\n\nexport const FlexWrapper = styled.div`\n display: flex;\n\n > div {\n flex: 1;\n margin-bottom: 32px;\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const FlexTitle = styled.p`\n display: inline-block;\n\n font-size: 16px;\n font-weight: bold;\n color: #161616;\n\n padding: 12px;\n border-bottom: 0.5px solid #161616;\n\n margin-bottom: 20px;\n`;\n\nexport const Contact = styled.p`\n margin-bottom: 8px;\n\n font-weight: bold;\n color: #161616;\n font-size: 20px;\n`;\n\nexport const ContactTime = styled.p`\n font-weight: bold;\n color: #161616;\n font-size: 12px;\n`;\n\nexport const Link = styled.a`\n display: inline-block;\n margin-bottom: 8px;\n\n color: #565656;\n font-size: 12px;\n font-weight: bold;\n text-decoration: underline;\n`;\n","import React from 'react';\nimport { message } from 'antd';\nimport axios from '../../Lib/axios';\n\nimport { DivisionLine, WithmateInput, WithmateLabel } from '../../Components/Common/input';\nimport { FlexFormWrapper, FormMainTitle, FormWrapper, LabelAndValueRow, PriceDetailLabel, PriceDetailValue, ResultFormWrapper, ServiceName, Sexes } from '../Reserve/reserve.styled';\nimport { FlexWrapper } from '../Apply/Ready/ready.styled';\nimport { HalfWidthButton } from '../../Components/Common/button';\n\nclass LongTermCareComponent extends React.PureComponent {\n state = {\n name: '',\n age: '',\n contact: '',\n sex: '',\n region: '',\n gradePresence: '',\n gradeLevel: ''\n };\n\n onLongTermCare = async () => {\n const userId = localStorage.getItem('id');\n const { name, age, contact, sex, region, gradePresence, gradeLevel } = this.state;\n\n if (!name) {\n return this.setState({\n modal: true,\n modalTitle: '이름을 입력해주세요.',\n modalInfo: '장기요양등급 상담하시는분의 이름을 입력해주세요.',\n });\n }\n\n if (!age) {\n return this.setState({\n modal: true,\n modalTitle: '나이를 입력해주세요.',\n modalInfo: '장기요양등급 상담하시는분의 나이를 입력해주세요.',\n });\n }\n\n if (!contact) {\n return this.setState({\n modal: true,\n modalTitle: '연락처를 입력하세요.',\n modalInfo: '장기요양등급 상담하시는분의 연락처를 입력해주세요.',\n });\n }\n\n if (!sex) {\n return this.setState({\n modal: true,\n modalTitle: '성별을 선택하세요.',\n modalInfo: '장기요양등급 상담하시는분의 성별을 선택해주세요.',\n });\n }\n\n if (!region) {\n return this.setState({\n modal: true,\n modalTitle: '거주지 지역을 입력하세요.',\n modalInfo: '장기요양등급 상담하시는 분의 거주지 지역을 입력해주세요.',\n });\n }\n\n if (!gradePresence) {\n return this.setState({\n modal: true,\n modalTitle: '요양등급 유무를 선택하세요.',\n modalInfo: '요양등급 유무를 선택해주세요.',\n });\n }\n\n\n const { data } = await axios.post('/v1/longTermCare/add', { userId, name, age, contact, sex, region, gradePresence, gradeLevel });\n\n if (!data) return message.error('죄송합니다. 일시적인 서버 장애가 발생하였습니다.');\n if (data === 'check parameters') return message.warning('필수 정보들을 입력해주세요.');\n if (data === 'success') {\n message.success('장기요양등급 신청서 작성이 완료되었습니다. 빠른 시일내에 상담 연락드리겠습니다.');\n setTimeout(() => {\n this.props.history.push('/');\n }, 600);\n }\n };\n\n handleChange = e => {\n this.setState({ [e.target.title]: e.target.value });\n };\n\n render() {\n return (\n <div style={{ padding: '10px', marginTop: '100px' }}>\n <FlexFormWrapper>\n <FormWrapper>\n <FormMainTitle>장기요양 등급 상담 신청서</FormMainTitle>\n <ServiceName style={{ fontSize: '15px' }}>장기요양 등급 신청서를 작성하시면 상담신청이 가능합니다.</ServiceName>\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>이름</WithmateLabel>\n <WithmateInput\n type='text'\n title='name'\n value={this.state.name || ''}\n onChange={this.handleChange}\n />\n </div>\n   \n <div style={{ flex: 1 }}>\n <WithmateLabel required>나이</WithmateLabel>\n <WithmateInput maxLength='2' placeholder='50' title='age' suffix='세' value={this.state.age} onChange={this.handleChange} />\n </div>\n </FlexWrapper>\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>연락처</WithmateLabel>\n <WithmateInput maxLength='11' title='contact' value={this.state.contact} onChange={this.handleChange} />\n </div>\n   \n <div style={{ flex: 1 }}>\n <WithmateLabel required>성별</WithmateLabel>\n <Sexes style={{ height: '46px' }}>\n <span\n className={this.state.sex === '남성' ? 'active' : 'inactive'}\n onClick={() => {\n this.handleChange({ target: { title: 'sex', value: '남성' } });\n }}\n >\n 남성\n </span>\n <span\n className={this.state.sex === '여성' ? 'active' : 'inactive'}\n onClick={() => {\n this.handleChange({ target: { title: 'sex', value: '여성' } });\n }}\n >\n 여성\n </span>\n </Sexes>\n </div>\n </FlexWrapper>\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>지역</WithmateLabel>\n <WithmateInput placeholder='지역의 구까지 입력해주세요. ex) 서울특별시 강남구' title='region' value={this.state.region} onChange={this.handleChange} />\n </div>\n </FlexWrapper>\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>요양등급 유무</WithmateLabel>\n <Sexes style={{ height: '46px' }}>\n <span\n className={this.state.gradePresence === '있다' ? 'active' : 'inactive'}\n onClick={() => {\n this.handleChange({ target: { title: 'gradePresence', value: '있다' } });\n }}\n >\n 있다\n </span>\n <span\n className={this.state.gradePresence === '없다' ? 'active' : 'inactive'}\n onClick={() => {\n this.handleChange({ target: { title: 'gradePresence', value: '없다' } });\n }}\n >\n 없다\n </span>\n </Sexes>\n </div>\n   \n {this.state.gradePresence === '있다' ? <>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>등급을 입력하세요</WithmateLabel>\n <WithmateInput title='gradeLevel' suffix='등급' value={this.state.gradeLevel} onChange={this.handleChange} />\n </div>\n </> : null}\n </FlexWrapper>\n </FormWrapper>\n\n <ResultFormWrapper>\n <FormMainTitle style={{ fontSize: '25px' }}>신청 내역</FormMainTitle>\n\n <LabelAndValueRow borderColor='#cecfd0'>\n </LabelAndValueRow>\n\n <DivisionLine x_small />\n <DivisionLine />\n\n <LabelAndValueRow>\n <PriceDetailLabel><span>* </span>이름</PriceDetailLabel>\n <PriceDetailValue>{this.state.name}</PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow>\n <PriceDetailLabel><span>* </span>나이</PriceDetailLabel>\n <PriceDetailValue>{this.state.age + ' 세'}</PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow>\n <PriceDetailLabel><span>* </span>연락처</PriceDetailLabel>\n <PriceDetailValue>{this.state.contact}</PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow>\n <PriceDetailLabel><span>* </span>성별</PriceDetailLabel>\n <PriceDetailValue>{this.state.sex}</PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow>\n <PriceDetailLabel><span>* </span>지역</PriceDetailLabel>\n <PriceDetailValue>{this.state.region}</PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow>\n <PriceDetailLabel><span>* </span>장애등급 유무</PriceDetailLabel>\n <PriceDetailValue>{this.state.gradePresence}</PriceDetailValue>\n </LabelAndValueRow>\n {this.state.gradePresence == '있다' ? <>\n <LabelAndValueRow>\n <PriceDetailLabel><span>* </span>장애등급</PriceDetailLabel>\n <PriceDetailValue>{this.state.gradeLevel}</PriceDetailValue>\n </LabelAndValueRow>\n </> : null}\n\n <DivisionLine /><DivisionLine /><DivisionLine /><DivisionLine small />\n <HalfWidthButton style={{ margin: '0 auto' }} bg='#3bc1ff'\n onClick={this.onLongTermCare}\n >\n 신청하기\n </HalfWidthButton>\n </ResultFormWrapper>\n </FlexFormWrapper>\n </div>\n );\n }\n}\nexport default LongTermCareComponent;","import React from 'react';\nimport { AutoComplete, Button } from 'antd';\nimport styled from 'styled-components';\nimport { DivisionLine } from '../../Components/Common/input';\nimport Background from './login_bg.png';\nimport Checkpoint from './checkpoint.png';\n\nclass SuccessComponent extends React.PureComponent {\n render() {\n return (\n <div className='success-container' style={{ backgroundImage: 'url('+Background+')' }}>\n <div className='inner-container' style={{ display: 'flex', justifyContent: 'center'}}>\n <div className='success-form' style={{ border: '1px solid lightgray', borderRadius: '7px', width: '550px', marginTop: '40px', paddingTop: '80px', maxWidth: '480px' , backgroundColor: 'white' }}>\n <div className='success-title'>\n <img class=\"successImg\" src={Checkpoint} style={{ width: '70px', height: '70px', display: 'block', margin: '0px auto' }}/>\n <DivisionLine />\n <h1 style={{ textAlign: 'center' }}>회원가입이 <b>완료</b> 되었습니다.</h1>\n </div>\n\n <DivisionLine /><DivisionLine />\n\n <div className='form-success-type' style={{ textAlign: 'center' }}>\n <div>\n <h4>※ 위드메이트의 서비스를 더욱 편리하게 사용할 수 있도록 <br/>\n <b>환자 프로필</b>을 등록하실 수 있습니다.</h4>\n </div>\n </div>\n \n <DivisionLine />\n <hr style={{ textAlgn: 'center', width: '320px', color: 'gray' }}/>\n\n <div className='form' style={{ textAlign: 'center' }}>\n <Button type='primary' style={{ borderRadius: '4px', marginTop: '20px', backgroundColor: 'gray' }} \n onClick={() => {\n this.props.history.push('/user/mypage/profile');\n }}\n >\n 프로필 등록\n </Button>\n \n <Button type='primary' style={{ borderRadius: '4px', marginTop: '20px' }} \n onClick={() => {\n this.props.history.push('/');\n }}\n >\n 다음에 하기\n </Button>\n </div>\n <DivisionLine />\n </div>\n </div>\n </div>\n );\n }\n}\nexport default SuccessComponent;","// import React, { useState } from 'react';\n// import { Document, Page, pdfjs } from 'react-pdf';\n// import samplePDF from '../PDFfile/withmate_service_manual.pdf';\n// import './servicePDF.css';\n\n// pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;\n\n// export default function ServicePDF() {\n// const [numPages, setNumPages] = useState(null);\n\n// function onDocumentLoadSuccess({ numPages }) {\n// setNumPages(numPages);\n// }\n\n// return (\n// <div style={{ height: '1000px', overflow: 'auto', overflowX: 'hidden' }}>\n// <Document\n// className={'PDFDocument'}\n// file={samplePDF}\n// options={{ workerSrc: \"/pdf.worker.js\" }}\n// onLoadSuccess={onDocumentLoadSuccess}\n// >\n// {Array.from(new Array(numPages), (el, index) => (\n// <Page className={'PDFPage'} key={`page_${index + 1}`} pageNumber={index + 1} width={1000}/>\n// ))}\n// </Document>\n// </div>\n// );\n// }\n\nimport React, { Component } from \"react\";\n\nexport default class ServicePDF extends Component {\n constructor() {\n super();\n this.state = {\n iFrameHeight: \"0px\"\n };\n }\n\n render() {\n return (\n <div>\n <iframe\n style={{\n position: \"absolute\",\n top: '60px',\n left: 0,\n width: \"100%\",\n height: \"95%\"\n }}\n src={`https://drive.google.com/file/d/141x-SJYLk8W5ix4vjVWKi3738Osux2bT/preview`}\n frameBorder=\"0\"\n />\n </div>\n );\n }\n}\n","import { message } from 'antd';\nimport React from 'react';\nimport ServiceManual from './servicePDF';\n\nclass ManualComponent extends React.PureComponent {\n componentDidMount = () => {\n if (!localStorage.getItem('id')) {\n message.warning('서비스 매뉴얼을 보시려면 로그인 후 이용해주세요.');\n return this.props.history.push('/user/login');\n }\n this.props.history.push('/service/manual');\n }\n\n render() {\n return (\n <div className='pdf-form'>\n <ServiceManual />\n </div>\n );\n }\n}\nexport default ManualComponent;","// import React, { useState } from 'react';\n// import { Document, Page, pdfjs } from 'react-pdf';\n// import samplePDF from '../PDFfile/withmate_platform_manual.pdf';\n// import './platformPDF.css';\n\n// pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;\n\n// export default function PlatformPDF() {\n// const [numPages, setNumPages] = useState(null);\n\n// function onDocumentLoadSuccess({ numPages }) {\n// setNumPages(numPages);\n// }\n\n// return (\n// <div style={{ height: '1000px', overflow: 'auto', overflowX: 'hidden' }}>\n// <Document\n// className={'PDFDocument'}\n// file={samplePDF}\n// options={{ workerSrc: \"/pdf.worker.js\" }}\n// onLoadSuccess={onDocumentLoadSuccess}\n// >\n// {Array.from(new Array(numPages), (el, index) => (\n// <Page className={'PDFPage'} key={`page_${index + 1}`} pageNumber={index + 1} width={1000}/>\n// ))}\n// </Document>\n// </div>\n// );\n// }\n\nimport React, { Component } from \"react\";\n\nexport default class PlatformPDF extends Component {\n constructor() {\n super();\n this.state = {\n iFrameHeight: \"0px\"\n };\n }\n\n render() {\n return (\n <div>\n <iframe\n style={{\n position: \"absolute\",\n top: '60px',\n left: 0,\n width: \"100%\",\n height: \"95%\"\n }}\n src={`https://drive.google.com/file/d/1uC2X66wxaGyIiekW_lkDsuLeIbPcMf_t/preview`}\n frameBorder=\"0\"\n />\n </div>\n );\n }\n}\n","import { message } from 'antd';\nimport React from 'react';\nimport PlatformManual from './platformPDF';\n\nclass ManualComponent extends React.PureComponent {\n componentDidMount = () => {\n if (!localStorage.getItem('id')) {\n message.warning('플랫폼 매뉴얼을 보시려면 로그인 후 이용해주세요.');\n return this.props.history.push('/user/login');\n }\n this.props.history.push('/platform/manual');\n }\n\n render() {\n return (\n <div className='pdf-form'>\n <PlatformManual />\n </div>\n );\n }\n}\nexport default ManualComponent;","import { Button } from 'antd';\nimport Title from 'antd/lib/typography/Title';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { WithmateLabel } from '../../../../Components/Common/input';\n\nexport const EduVideo1 = () => {\n return (\n <VideoSectionContainer>\n <VideoSectionInnerContainer>\n <div style={{ paddingBottom: '30px' }}>\n <Title style={{ fontWeight: 'bold' }}>메이트 온라인 교육영상</Title><br />\n <p style={{ color: '#3bc1ff'}}>* 해당 영상 화면을 클릭하시면 재생/일시정지가 가능합니다.</p><br />\n <p style={{ paddingBottom: '10px' }}>온라인 교육영상을 모두 시청하신 후 <MobileBr />아래 주소의 구글폼에 접속하셔서<br/>\n 교육영상 문제를 풀고 제출하시면 <MobileBr />확인 후 메이트 지원 합격안내를 해드립니다.\n </p>\n <Button \n onClick={() => {\n window.open('https://docs.google.com/forms/d/e/1FAIpQLSfimp7QrRY0OkrMQQiZLQ3xFodaD7KosDL7PRsIcypencUaXg/viewform?usp=share_link')\n }}\n style={{ width: '250px', height: '40px', fontSize: '20px', textAlign: 'center' }}\n >\n 메이트 교육영상 문제풀기\n </Button>\n </div>\n <WithmateLabel style={{ fontSize: '15px' }}>병원동행 매니저 교육 1: 병원 동행 서비스의 정의</WithmateLabel>\n <VideoArea>\n <iframe\n width=\"100%\"\n height=\"100%\"\n src=\"https://youtube.com/embed/3f-CHGx75LY?modestbranding=1?cc_load_policy=1&controls=0&rel=0&disablekb=1\"\n title=\"withmate YouTube video player2\"\n allow=\"accelerometer; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loop={true}\n controls={false}\n ></iframe>\n </VideoArea>\n </VideoSectionInnerContainer>\n </VideoSectionContainer>\n );\n};\n\nconst VideoSectionContainer = styled.div`\n padding-top: 105px;\n padding-bottom: 30px;\n\n width: 100%;\n\n @media (max-width: 768px) {\n text-align: center;\n padding-top: 100px;\n // padding-top: 10px;\n // padding-bottom: 0px;\n padding-bottom: 10px;\n }\n`;\n\nconst VideoSectionInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n`;\n\nconst VideoSectionTitle = styled.h4`\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.6);\n\n margin-top: 0px;\n margin-bottom: 105px;\n\n @media (max-width: 768px) {\n font-size: 14px;\n margin-bottom: 68px;\n }\n`;\n\nconst VideoArea = styled.div`\n width: 100%;\n height: calc(1120px / 16 * 9);\n background-color: #000000;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n\n @media (max-width: 1120px) {\n height: calc(100vw / 16 * 9);\n }\n\n @media (max-width: 768px) {\n width: 100%;\n height: calc(100vw / 16 * 9);\n background-color: #000000;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n }\n`;\n\nconst MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;","import React from 'react';\nimport styled from 'styled-components';\nimport { WithmateLabel } from '../../../../Components/Common/input';\n\nexport const EduVideo2 = () => {\n return (\n <VideoSectionContainer>\n <VideoSectionInnerContainer>\n <WithmateLabel style={{ fontSize: '15px' }}>병원동행 매니저 교육 2: 메이트 - 안전한 동행</WithmateLabel>\n <VideoArea>\n <iframe\n width=\"100%\"\n height=\"100%\"\n src=\"https://youtube.com/embed/pWcuUOdho-8?modestbranding=1?cc_load_policy=1&controls=0&rel=0&disablekb=1\"\n title=\"withmate YouTube video player\"\n allow=\"accelerometer; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loop={true}\n controls={false}\n ></iframe>\n </VideoArea>\n </VideoSectionInnerContainer>\n </VideoSectionContainer>\n );\n};\n\nconst VideoSectionContainer = styled.div`\n padding-top: 105px;\n padding-bottom: 30px;\n\n width: 100%;\n\n @media (max-width: 768px) {\n // padding-top: 62px;\n padding-top: 10px;\n // padding-bottom: 0px;\n padding-bottom: 10px;\n }\n`;\n\nconst VideoSectionInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n`;\n\nconst VideoSectionTitle = styled.h4`\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.6);\n\n margin-top: 0px;\n margin-bottom: 105px;\n\n @media (max-width: 768px) {\n font-size: 14px;\n margin-bottom: 68px;\n }\n`;\n\nconst VideoArea = styled.div`\n width: 100%;\n height: calc(1120px / 16 * 9);\n background-color: #000000;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n\n @media (max-width: 1120px) {\n height: calc(100vw / 16 * 9);\n }\n\n @media (max-width: 768px) {\n width: 100%;\n height: calc(100vw / 16 * 9);\n background-color: #000000;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n }\n`;\n\nconst MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { WithmateLabel } from '../../../../Components/Common/input';\n\nexport const EduVideo3 = () => {\n return (\n <VideoSectionContainer>\n <VideoSectionInnerContainer>\n <WithmateLabel style={{ fontSize: '15px' }}>병원동행 매니저 교육 3: 위드메이트 플랫폼 사용 매뉴얼</WithmateLabel>\n <VideoArea>\n <iframe\n width=\"100%\"\n height=\"100%\"\n src=\"https://youtube.com/embed/juq5t-NyCsA?modestbranding=1?cc_load_policy=1&controls=0&rel=0&disablekb=1\"\n title=\"withmate YouTube video player3\"\n allow=\"accelerometer; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loop={true}\n controls={false}\n ></iframe>\n </VideoArea>\n </VideoSectionInnerContainer>\n </VideoSectionContainer>\n );\n};\n\nconst VideoSectionContainer = styled.div`\n padding-top: 105px;\n padding-bottom: 30px;\n\n width: 100%;\n\n @media (max-width: 768px) {\n // padding-top: 62px;\n padding-top: 10px;\n // padding-bottom: 0px;\n padding-bottom: 10px;\n }\n`;\n\nconst VideoSectionInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n`;\n\nconst VideoSectionTitle = styled.h4`\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.6);\n\n margin-top: 0px;\n margin-bottom: 105px;\n\n @media (max-width: 768px) {\n font-size: 14px;\n margin-bottom: 68px;\n }\n`;\n\nconst VideoArea = styled.div`\n width: 100%;\n height: calc(1120px / 16 * 9);\n background-color: #000000;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n\n @media (max-width: 1120px) {\n height: calc(100vw / 16 * 9);\n }\n\n @media (max-width: 768px) {\n width: 100%;\n height: calc(100vw / 16 * 9);\n background-color: #000000;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n }\n`;\n\nconst MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { WithmateLabel } from '../../../../Components/Common/input';\n\nexport const EduVideo4 = () => {\n return (\n <VideoSectionContainer>\n <VideoSectionInnerContainer>\n <WithmateLabel style={{ fontSize: '15px' }}>병원동행 매니저 교육 4: 메이트 학습 매뉴얼</WithmateLabel>\n <VideoArea>\n <iframe\n width=\"100%\"\n height=\"100%\"\n src=\"https://youtube.com/embed/S9daiT1kMmE?modestbranding=1?cc_load_policy=1&controls=0&rel=0&disablekb=1\"\n title=\"withmate YouTube video player4\"\n allow=\"accelerometer; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n loop={true}\n controls={false}\n ></iframe>\n </VideoArea>\n </VideoSectionInnerContainer>\n </VideoSectionContainer>\n );\n};\n\nconst VideoSectionContainer = styled.div`\n padding-top: 105px;\n padding-bottom: 30px;\n\n width: 100%;\n\n @media (max-width: 768px) {\n // padding-top: 62px;\n padding-top: 10px;\n // padding-bottom: 0px;\n padding-bottom: 10px;\n }\n`;\n\nconst VideoSectionInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n`;\n\nconst VideoSectionTitle = styled.h4`\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.6);\n\n margin-top: 0px;\n margin-bottom: 105px;\n\n @media (max-width: 768px) {\n font-size: 14px;\n margin-bottom: 68px;\n }\n`;\n\nconst VideoArea = styled.div`\n width: 100%;\n height: calc(1120px / 16 * 9);\n background-color: #000000;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n\n @media (max-width: 1120px) {\n height: calc(100vw / 16 * 9);\n }\n\n @media (max-width: 768px) {\n width: 100%;\n height: calc(100vw / 16 * 9);\n background-color: #000000;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n > iframe,\n video {\n width: 100%;\n height: 100%;\n }\n }\n`;\n\nconst MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n","import { message } from 'antd';\nimport React from 'react';\nimport { EduVideo1 } from './VideoList/Video1';\nimport { EduVideo2 } from './VideoList/Video2';\nimport { EduVideo3 } from './VideoList/Video3';\nimport { EduVideo4 } from './VideoList/Video4';\n\nclass ManualComponent extends React.PureComponent {\n state = {\n // showEduVideo2: false,\n // showEduVideo3: false,\n // showEduVideo4: false\n }\n\n componentDidMount = () => {\n if (!localStorage.getItem('id')) {\n message.warning('메이트 교육 영상을 시청하시려면 로그인 후 이용해주세요.');\n return this.props.history.push('/user/login');\n }\n this.props.history.push('/mateEducation/manual');\n\n // this.timer2 = setTimeout(() => {\n // this.setState({ showEduVideo2: true });\n // }, 2400000); // 40분 뒤 (40 * 60 * 1000)\n \n // this.timer3 = setTimeout(() => {\n // this.setState({ showEduVideo3: true });\n // }, 3600000); // 1시간 뒤 (60 * 60 * 1000)\n \n // this.timer4 = setTimeout(() => {\n // this.setState({ showEduVideo4: true });\n // }, 4800000); // 1시간 20분 뒤 (80 * 60 * 1000)\n }\n\n // componentWillUnmount() {\n // clearTimeout(this.timer2);\n // clearTimeout(this.timer3);\n // clearTimeout(this.timer4);\n // }\n\n render() {\n return (\n <div className='video-form'>\n <EduVideo1 />\n <EduVideo2 />\n <EduVideo3 />\n <EduVideo4 />\n {/* {this.state.showEduVideo2 && <EduVideo2 />}\n {this.state.showEduVideo3 && <EduVideo3 />}\n {this.state.showEduVideo4 && <EduVideo4 />} */}\n </div>\n\n );\n }\n}\nexport default ManualComponent;","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../theme';\n\nconst StyledListContainer = styled.div`\n padding-top: 55px;\n\n .faq-header {\n // border-bottom: 1px solid #e6e6e6;\n\n .inner-container {\n padding: 0px;\n padding-top: 82px;\n\n @media (max-width: 768px) {\n padding-top: 42px;\n }\n\n > .flex-wrapper {\n position: relative;\n\n .faq-main-title {\n flex: 1;\n .title {\n font-size: ${sizeHandler(30)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 8px;\n }\n\n .description {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 82px;\n }\n }\n\n .img-section {\n position: absolute;\n bottom: -50px;\n right: 0px;\n\n > img {\n width: 100%;\n max-width: 549px;\n height: auto;\n object-fit: cover;\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n\n .faq-nav {\n display: flex;\n align-items: center;\n\n .nav-tab {\n margin-right: 32px;\n padding-bottom: 12px;\n position: relative;\n\n a {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: center;\n color: #3bc1ff;\n }\n\n span.underline {\n background-color: #3bc1ff;\n position: absolute;\n bottom: 0px;\n left: 0px;\n\n &.active {\n width: 100%;\n height: 3px;\n display: inline-block;\n }\n }\n\n @media (max-width: 768px) {\n margin-right: 16px;\n }\n }\n }\n }\n }\n\n .faq-contents {\n .inner-container {\n padding-top: 0px;\n\n @media (max-width: 768px) {\n h1 {\n font-size: 30px;\n margin-top: 60px;\n }\n }\n }\n }\n\n .panel-header {\n display: flex;\n align-items: center;\n\n .row-index {\n width: 80px;\n color: ${mainColor};\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n }\n\n .title {\n flex: 1;\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n .title {\n font-size: ${sizeHandler(14)};\n }\n }\n }\n\n .panel-content {\n padding-left: 80px;\n\n > p {\n width: 60%;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .panel-contents-wrapper {\n margin-top: 20px;\n margin-bottom: 20px;\n\n .panel-contents {\n padding: 12px 0px;\n border-bottom: 1px solid #e6e6e6;\n\n &:first-child {\n border-top: 1px solid #e6e6e6;\n }\n\n .panel-content-subtitle {\n float: left;\n width: 40%;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: left;\n color: ${mainColor};\n }\n\n .panel-content-subcontents {\n float: left;\n width: 50%;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n .panel-content-subtitle {\n width: 100%;\n }\n\n .panel-content-subcontents {\n width: 100%;\n }\n }\n }\n }\n }\n\n h1 {\n font-size: ${sizeHandler(34)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n\n margin-bottom: 26px;\n margin-top: 50px;\n }\n\n @media (max-width: 1120px) {\n .faq-header {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .panel-header {\n .row-index {\n width: 70px;\n }\n }\n\n .panel-content {\n padding-left: 70px;\n\n > p {\n width: 90%;\n }\n }\n }\n`;\nexport default StyledListContainer;\n","import styled from 'styled-components';\n\nconst StyledListContainer = styled.div`\n // border-bottom: 1px solid #e6e6e6;\n`;\n\nexport const HeaderButton = styled.div`\n cursor: pointer;\n\n width: 265px;\n height: 60px;\n line-height: 60px;\n\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n\n margin-top: 40px;\n margin-bottom: 90px;\n border-radius: 4px;\n background-color: #3bc1ff;\n\n &:hover {\n transition: all 0.5s;\n opacity: 0.8;\n }\n\n @media (max-width: 768px) {\n width: 230px;\n height: 48px;\n line-height: 48px;\n }\n`;\n\nexport const NavigationTabWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n\nexport const NavigationTab = styled.span`\n position: relative;\n display: inline-block;\n margin-right: 44px;\n\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n padding-bottom: 20px;\n\n cursor: pointer;\n\n &.active {\n color: #55d4ff;\n }\n`;\n\nexport const NavigationTabUnderline = styled.span`\n display: inline-block;\n position: absolute;\n left: 0px;\n bottom: -3px;\n\n width: 100%;\n height: 3px;\n background-color: #55d4ff;\n`;\n\nexport const CountDisplay = styled.div`\n font-size: 36px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.44;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n > span {\n color: #4bcfff;\n }\n\n margin-bottom: 20px;\n`;\n\nexport const CollapseContainer = styled.div`\n .ant-collapse-icon-position-right > .ant-collapse-item > .ant-collapse-header {\n padding-left: 0px;\n padding-right: 0px;\n }\n\n .ant-collapse-content > .ant-collapse-content-box {\n padding-left: 0px;\n padding-right: 0px;\n }\n`;\n\nexport const CollapseHeader = styled.div`\n display: flex;\n align-items: center;\n border-bottom: 1px solid #e6e6e6;\n`;\n\nexport const CollapseTab = styled.div`\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n color: rgba(0, 0, 0, 0.7);\n\n padding-bottom: 11px;\n`;\n\nexport const CollapseTabOnlyDesktop = styled(CollapseTab)`\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const PanelHeader = styled.div`\n display: flex;\n`;\n\nexport const PanelField = styled.div`\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n\n ${props => (props.style ? props.style : `flex: 1;`)}\n ${props => (props.onlyDesktop ? `display: block;` : null)} \n\n &.title {\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.56;\n letter-spacing: normal;\n color: rgba(0, 0, 0, 0.8);\n }\n\n @media (max-width: 768px) {\n ${props => (props.onlyDesktop ? `display: none;` : null)}\n }\n`;\n\nexport const Star = styled.img`\n width: 16.7px;\n height: 16px;\n object-fit: contain;\n margin-bottom: 4px;\n`;\n\nexport const ReviewTextWrapper = styled.div`\n padding-left: 120px;\n padding-right: 50px;\n\n @media (max-width: 768px) {\n padding-left: 0px;\n }\n`;\n\nexport const ReviewText = styled.p`\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n`;\n\nexport const MyReview = styled.span`\n display: inline-block;\n width: 53px;\n height: 20px;\n line-height: 20px;\n border-radius: 10px;\n background-color: #3bc1ff;\n\n font-size: 10px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: -0.21px;\n color: #ffffff;\n text-align: center;\n`;\n\nexport const ReviewMobileInfo = styled.div`\n display: flex;\n align-items: center;\n\n margin-bottom: 27px;\n display: none;\n\n @media (max-width: 768px) {\n display: block;\n }\n`;\n\nexport const ReviewerName = styled.span`\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 0px;\n margin-right: 16px;\n`;\n\nexport default StyledListContainer;\n","import React from 'react';\nimport moment from 'moment';\nimport { Button, Popover } from 'antd';\nimport _ from 'lodash';\n\nimport { UNEMER, ASSIST } from '../../Lib/variables';\nimport { currencyFormatter, colorParserByStatus } from '../../Lib/utils';\n\nexport const callColumn = ({ onAccept, onCancel, onComplete }) => {\n return [\n {\n title: '예약번호',\n align: 'left',\n width: '110px',\n render: ({ reserve }) => <span>{reserve && reserve.length > 0 ? reserve[0].reserveCode : '-'}</span>,\n },\n {\n title: '이용자 성함',\n align: 'left',\n ellipsis: true,\n width: '72px',\n render: (_id, { reserve }) => <span>{!reserve ? '-' : reserve[0].patient}</span>,\n },\n {\n title: '진행 현황',\n align: 'center',\n ellipsis: true,\n width: '100px',\n render: ({ status }) =>\n status === '결제대기' ? (\n <Button className='button' style={{ backgroundColor: '#3bc1ff' }}>\n 잔금 결제\n </Button>\n ) : (\n <span\n style={{\n fontWeight: 'bold',\n color: colorParserByStatus(status),\n }}\n >\n {status}\n </span>\n ),\n },\n {\n title: '서비스',\n dataIndex: 'reserve',\n align: 'left',\n ellipsis: true,\n width: '100px',\n render: reserve => (\n <span>{!reserve ? '-' : reserve[0].service === UNEMER ? '병원 동행 Pro' : reserve[0].service === ASSIST ? '병원 동행 Basic' : '-'}</span>\n ),\n },\n {\n title: '병원 위치',\n align: 'left',\n ellipsis: true,\n width: '140px',\n render: (createdAt, { reserve }) => <span>{!reserve ? '-' : reserve[0].starting}</span>,\n },\n {\n title: '예약 일자',\n align: 'left',\n ellipsis: true,\n width: '140px',\n render: ({ reserve }) => <span>{moment(reserve[0].reserveDate).format('YYYY년 MM월 DD일 - HH:mm A')}</span>,\n },\n ];\n};\n\nexport const reserveColumn = ({ onMate, onCancel, onModify, onDetailModify, onServiceReport }) => {\n return [\n {\n title: '예약번호',\n dataIndex: 'reserveCode',\n width: '110px',\n render: reserveCode => <span>{reserveCode ? reserveCode : '-'}</span>,\n },\n {\n title: '서비스',\n dataIndex: 'service',\n align: 'left',\n ellipsis: true,\n width: '100px',\n render: service => <span>{service === UNEMER ? '병원 동행 Pro' : service === ASSIST ? '병원 동행 Basic' : '-'}</span>,\n },\n {\n title: '이용자 성함',\n dataIndex: 'patient',\n align: 'left',\n ellipsis: true,\n width: '90px',\n render: patient => <span>{patient}</span>,\n },\n {\n title: '병원 위치',\n dataIndex: 'starting',\n align: 'left',\n ellipsis: true,\n width: '140px',\n render: starting => <span>{starting}</span>,\n },\n {\n title: '예약 일자',\n dataIndex: 'reserveDate',\n align: 'left',\n ellipsis: true,\n width: '140px',\n render: reserveDate => <span>{moment(reserveDate).format('YYYY년 MM월 DD일 - HH:mm A')}</span>,\n },\n {\n title: '진행 현황',\n // dataIndex: 'status',\n align: 'center',\n ellipsis: true,\n width: '100px',\n render: ({ call }) =>\n call[0].status === '결제대기' ? (\n <Button className='button' style={{ backgroundColor: '#3bc1ff' }}>\n 잔금 결제\n </Button>\n ) : (\n <span\n style={{\n fontWeight: 'bold',\n color: colorParserByStatus(call[0].status),\n }}\n >\n {call[0].status}\n </span>\n ),\n },\n {\n title: '결제',\n align: 'center',\n width: '70px',\n ellipsis: true,\n render: ({ paidStatus, call }) => (\n <span style={{ color: paidStatus ? '#606060' : '#ff5500' }}>{call[0].status === '환불' ? '-' : paidStatus ? '완료' : '대기'}</span>\n ),\n },\n {\n title: '담당자',\n align: 'center',\n width: '70px',\n ellipsis: true,\n render: ({ call }) => (\n <span\n onClick={() => {\n if (!_.isEmpty(call) && !_.isEmpty(call[0].mate)) onMate(call[0]);\n }}\n style={{ cursor: !_.isEmpty(call) && !_.isEmpty(call[0].mate) ? 'pointer' : undefined }}\n >\n {!_.isEmpty(call) && !_.isEmpty(call[0].mate) ? call[0].mate[0].name : '-'}\n </span>\n ),\n },\n {\n title: '-',\n align: 'center',\n width: '50px',\n render: ({ _id, call, paidStatus, callId, service }) =>\n call[0].status === '서비스 종료' ? (\n <Popover\n placement='bottomRight'\n content={\n <div className='popover-content-wrapper'>\n <p\n style={{ borderBottom: '1px solid #606060' }}\n onClick={() => {\n onServiceReport(call[0], service);\n }}\n >\n 서비스 리포트\n </p>\n </div>\n }\n >\n <span\n style={{\n cursor: 'pointer',\n display: 'inline-block',\n height: '24px',\n width: '24px',\n lineHeight: '22px',\n textAlign: 'center',\n border: '1px solid #e6e6e6',\n borderRadius: '12px',\n }}\n >\n <i style={{ fontSize: '11px', fontWeight: 300, color: '#3bc1ff' }} className='fas fa-ellipsis-h' />\n </span>\n </Popover>\n ) : call[0].status === '접수대기' || (call[0].status === '예약완료' && paidStatus === false) ? (\n <Popover\n placement='bottomRight'\n content={\n <div className='popover-content-wrapper'>\n <p\n style={{ borderBottom: '1px solid #606060' }}\n onClick={() => {\n call[0].status === '접수대기' ? onDetailModify(_id) : onModify(_id);\n }}\n >\n 예약수정\n <i className='fas fa-pen' color='#606060' style={{ marginLeft: '20px' }} />\n </p>\n <p\n onClick={() => {\n onCancel(callId);\n }}\n >\n 예약취소\n <i className='fas fa-times' color='#606060' style={{ marginLeft: '20px' }} />\n </p>\n </div>\n }\n >\n <span\n style={{\n cursor: 'pointer',\n display: 'inline-block',\n height: '24px',\n width: '24px',\n lineHeight: '22px',\n textAlign: 'center',\n border: '1px solid #e6e6e6',\n borderRadius: '12px',\n }}\n >\n <i style={{ fontSize: '11px', fontWeight: 300, color: '#3bc1ff' }} className='fas fa-ellipsis-h' />\n </span>\n </Popover>\n ) : (\n '-'\n ),\n },\n ];\n};\n\nexport const payHistoryColumn = [\n {\n title: '서비스',\n dataIndex: 'service',\n align: 'left',\n ellipsis: true,\n width: '100px',\n render: service => <span>{service === UNEMER ? '병원 동행 Pro' : service === ASSIST ? '병원 동행 Basic' : '-'}</span>,\n },\n {\n title: '요청사항',\n dataIndex: 'type',\n align: 'left',\n ellipsis: true,\n width: '60px',\n render: type => (\n <span\n style={{\n fontSize: '14px',\n fontWeight: 'bold',\n letterSpacing: '-0.3px',\n color: type === 'paid' ? '#3bc1ff' : '#ff5500',\n }}\n >\n {type === 'paid' ? '결제' : '환불'}\n </span>\n ),\n },\n {\n title: '금액',\n dataIndex: 'price',\n align: 'left',\n ellipsis: true,\n width: '120px',\n render: price => <span>{currencyFormatter(price)} KRW</span>,\n },\n {\n title: '요청시간',\n dataIndex: 'createdAt',\n align: 'left',\n ellipsis: true,\n width: '140px',\n render: createdAt => <span>{moment(createdAt).format('YYYY년 MM월 DD일 - hh:mm A')}</span>,\n },\n {\n title: '상태',\n dataIndex: 'status',\n align: 'left',\n ellipsis: true,\n width: '80px',\n render: status => <span style={{ fontSize: '14px', letterSpacing: '-0.3px', color: '#a7a7a7' }}>{status === true ? '완료' : '진행중'}</span>,\n },\n];\n\nexport const newsEvent = [\n {\n title: '번호',\n dataIndex: 'index',\n align: 'center',\n width: '80px',\n },\n {\n title: '제목',\n dataIndex: 'title',\n align: 'left',\n \n },\n {\n title: '등록일',\n dataIndex: 'createdAt',\n align: 'center',\n width: '100px',\n render: createdAt => <span>{moment(createdAt).format('YY.MM.DD') || '0'}</span>\n },\n];","import React from 'react';\nimport { Collapse, Icon, Table } from 'antd';\nimport { CollapseContainer } from '../../Review/List/list.styled';\n\nimport { newsEvent } from '../../../Components/Columns/user';\n\nexport default class Event extends React.PureComponent {\n\n onRow = (row, index) => {\n return {\n onClick: () => {\n this.props.history.push({\n pathname: `/newsEvent/info/${row._id}`,\n state: {\n id: row._id,\n },\n });\n },\n };\n };\n\n render() {\n\n return (\n <div className='faq-container'>\n <div className='faq-header'>\n <div className='inner-container'>\n <div className='flex-wrapper'>\n <div className='faq-main-title'>\n <p className='title'>위드메이트 소식</p>\n <p className='description'>위드메이트의 다양한 소식을 확인할 수 있습니다.</p>\n </div>\n <div className='img-section'>\n <img src={'/assets/images/comment_main.png'} style={{ width: '200px', height: 'auto', marginRight: '100px' }} alt='faq-img' />\n </div>\n </div>\n </div>\n </div>\n <div className='faq-contents'>\n <CollapseContainer className='inner-container'>\n <Table\n rowKey='id'\n dataSource={this.props.newsEvent.newsEventList}\n columns={newsEvent}\n onRow={this.onRow}\n pagination={{\n pageSize: 10\n }}\n />\n </CollapseContainer>\n </div>\n </div>\n );\n }\n}","import axios from '../axios';\n\nexport const addNewsEvent = async ({ id, title, content, photo, url, url2, urlSource, urlSource2 }) => {\n const config = {\n id,\n title,\n content,\n photo,\n url,\n url2,\n urlSource,\n urlSource2,\n };\n\n const result = await imageUpload(photo);\n config.photo = result.data;\n\n return axios.post(`/v1/newsEvent/add`, config);\n};\n\nexport const fetchNewsEvent = () => {\n return axios.get('/v1/newsEvent/list');\n};\n\nexport const getNewsEventInfo = async ({ newsEventId, info }) => {\n return axios.get('/v1/newsEvent/list/info', { newsEventId, info });\n};\n\nexport const imageUpload = photo => {\n const formData = new FormData();\n formData.append('photo', photo);\n const header = { headers: { 'Content-Type': 'multipart/form-data' } };\n return axios.post('/v1/newsEvent/image/upload', formData, header);\n};\n","import { createAction, handleActions } from \"redux-actions\";\nimport produce from \"immer\";\nimport * as newsEventAPI from '../../Lib/Api/newsEvent';\nimport _ from 'lodash';\nimport { createReduxThunk } from '../../Lib/middleware';\n\nconst ADD_NEWSEVENT = 'newsEvent/ADD_NEWSEVENT';\nconst ADD_NEWSEVENT_SUCCESS = 'newsEvent/ADD_NEWSEVENT_SUCCESS';\n\nconst NEWSEVENT_INFO = 'newsEvent/NEWSEVENT_INFO';\nconst NEWSEVENT_INFO_SUCCESS = 'newsEvent/NEWSEVENT_INFO_SUCCESS';\n\nconst GET_NEWSEVENT = 'newsEvent/GET_NEWSEVENT';\nconst GET_NEWSEVENT_SUCCESS = 'newsEvent/GET_NEWSEVENT_SUCCESS';\n\nexport const addNewsEvent = createReduxThunk(ADD_NEWSEVENT, newsEventAPI.addNewsEvent);\nexport const fetchNewsEvent = createReduxThunk(GET_NEWSEVENT, newsEventAPI.fetchNewsEvent);\nexport const getNewsEventInfo = createReduxThunk(NEWSEVENT_INFO, newsEventAPI.getNewsEventInfo);\n\n\nconst initalState = {\n newsEventInfo: {},\n newsEventList: [],\n};\n\nconst appReducer = handleActions(\n {\n [ADD_NEWSEVENT_SUCCESS]: (state, { payload }) =>\n produce(state, draft => { }),\n\n [GET_NEWSEVENT_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && payload.message === 'success') {\n draft['newsEventList'] = payload.data;\n }\n }),\n\n [NEWSEVENT_INFO_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n if (payload && !_.isEmpty(payload)) {\n draft['newsEventInfo'] = payload.data;\n }\n }),\n },\n initalState\n);\n\nexport default appReducer;","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledListContainer from './list.styled';\nimport List from './list';\nimport { addNewsEvent, fetchNewsEvent, getNewsEventInfo } from '../../../Reducer/Modules/newsEvent';\n\nclass InfoContainer extends React.PureComponent {\n componentDidMount = () => {\n this.props.fetchNewsEvent();\n };\n\n render() {\n return (\n <StyledListContainer>\n <List {...this.props} />\n </StyledListContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth, newsEvent }) => ({\n app,\n auth,\n newsEvent,\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchNewsEvent: () => dispatch(fetchNewsEvent()),\n addNewsEvent: info => dispatch(addNewsEvent(info)),\n getNewsEventInfo: ({ id, newsEventId }) => dispatch(getNewsEventInfo({ id, newsEventId })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InfoContainer);\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../theme';\n\nconst StyledInfoContainer = styled.div`\n padding-top: 55px;\n\n .faq-header {\n // border-bottom: 1px solid #e6e6e6;\n\n .inner-container {\n padding: 0px;\n padding-top: 82px;\n\n @media (max-width: 768px) {\n padding-top: 42px;\n }\n\n > .flex-wrapper {\n position: relative;\n\n .faq-main-title {\n flex: 1;\n .title {\n font-size: ${sizeHandler(30)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 8px;\n\n @media {\n padding-left: 10px;\n }\n }\n\n .description {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 82px;\n\n @media {\n padding-left: 10px;\n }\n }\n }\n\n .img-section {\n position: absolute;\n bottom: -50px;\n right: 0px;\n\n > img {\n width: 100%;\n max-width: 549px;\n height: auto;\n object-fit: cover;\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n }\n }\n\n .info-contents {\n .inner-container {\n padding-top: 0px;\n\n @media (max-width: 768px) {\n h1 {\n font-size: 30px;\n margin-top: 60px;\n }\n }\n\n .img-section {\n\n > img {\n max-width: 500px;\n height: auto;\n object-fit: cover;\n }\n }\n }\n } \n\n h1 {\n font-size: ${sizeHandler(34)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n\n margin-bottom: 26px;\n margin-top: 50px;\n }\n\n @media (max-width: 832px) {\n .info-contents {\n .inner-container {\n .img-section {\n > img {\n max-width: 300px;\n height: auto;\n object-fit: cover;\n }\n }\n }\n } \n }\n\n @media (max-width: 1120px) {\n .faq-header {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .panel-header {\n .row-index {\n width: 70px;\n }\n }\n\n .panel-content {\n padding-left: 70px;\n\n > p {\n width: 90%;\n }\n }\n }\n`;\n\nexport default StyledInfoContainer;","import React from 'react';\n\nexport const InfoBlock = ({ label, value, children }) => (\n <div style={{ paddingBottom: '20px', marginBottom: '20px', borderBottom: '1px solid #e6e6e6' }}>\n <p style={{ margin: 0, padding: 0, marginBottom: '8px', color: 'rgba(0,0,0,0.4)', fontSize: '10px' }}>{label}</p>\n <p style={{ margin: 0, padding: 0, color: 'rgba(0,0,0,0.87)', fontSize: '14px' }}>{value}</p>\n {children}\n </div>\n);\n","import React from 'react';\nimport axios from '../../../Lib/axios';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport { Button, message, Table } from 'antd';\nimport { CollapseContainer } from '../../Review/List/list.styled';\n\nimport { InfoBlock } from '../../../Components/Common/block';\n\nexport default class Event extends React.PureComponent {\n state = {\n data: {},\n };\n\n componentDidMount = () => {\n // const { state } = this.props.history.location;\n // if (!state || !state.id) return this.props.history.goBack();\n const { id } = this.props.match.params;\n\n this.fetchInfo(id);\n };\n\n fetchInfo = async id => {\n const { data } = await axios.get('/v1/newsEvent/list/info', {\n params: {\n newsEventId: id,\n },\n });\n\n if (!data || data === 'check parameters') {\n return this.props.history.goBack();\n }\n\n if (data === 'invalid newEvent') {\n return message.warning('잘못된 게시물 정보입니다.');\n }\n\n this.setState({ ...data });\n };\n\n render() {\n const { url, url2, urlSource, urlSource2 } = this.state;\n\n return (\n <div className='faq-container'>\n <div className='faq-header'>\n <div className='inner-container'>\n <div className='flex-wrapper'>\n <div className='faq-main-title'>\n <p className='title'>위드메이트 소식</p>\n <p className='description'>위드메이트의 다양한 소식을 확인할 수 있습니다.</p>\n </div>\n <div className='img-section'>\n <img src={'/assets/images/comment_main.png'} style={{ width: '200px', height: 'auto', marginRight: '100px' }} alt='faq-img' />\n </div>\n </div>\n </div>\n </div>\n <div className='info-contents'>\n <CollapseContainer className='inner-container' style={{ width: '80%', margin: 'auto' }}>\n <>\n <ValueBox>\n <Label style={{ fontSize: '25px' }}>{this.state.title}</Label>\n </ValueBox>\n\n <ValueBox style={{ textAlign: 'right' }}>\n <InfoBlock label='작성일' value={moment(this.state.createdAt).format('YYYY년 MM월 DD일 dddd')} />\n </ValueBox>\n\n <ValueBox>\n {this.state.photo && (\n <div className='img-section' style={{ display: 'flex', justifyContent: 'center' }}>\n <img\n style={{ objectFit: 'contain' }}\n src={typeof this.state.photo === 'string' ? this.state.photo : URL.createObjectURL(this.state.photo)}\n alt='사진'\n />\n </div>\n )}\n </ValueBox>\n\n <ValueBox>\n <InfoBlock label='내용'>\n <p style={{ whiteSpace: 'pre-wrap' }}>{this.state.content} </p>\n </InfoBlock>\n {this.state.url ? (\n <InfoBlock label='링크'>\n {url ? (\n <a href={this.state.url} target='_blank' style={{ fontSize: '15px', color: '#3bc1ff' }}>\n ㆍ{urlSource}\n </a>\n ) : (\n ''\n )}{' '}\n <br />\n {url2 ? (\n <a href={this.state.url2} target='_blank' style={{ fontSize: '15px', color: '#3bc1ff' }}>\n ㆍ{urlSource2}\n </a>\n ) : (\n ''\n )}\n </InfoBlock>\n ) : null}\n </ValueBox>\n\n <ValueBox>\n <Button\n className='white'\n onClick={() => {\n this.props.history.goBack();\n }}\n style={{ float: 'right' }}\n >\n 목록으로\n </Button>\n </ValueBox>\n </>\n </CollapseContainer>\n </div>\n </div>\n );\n }\n}\n\nexport const ValueBox = styled.div`\n margin-bottom: 16px;\n`;\n\nexport const Label = styled.p`\n text-align: left;\n font-size: 11px;\n margin-bottom: 4px;\n color: #565656;\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledInfoContainer from './info.styled';\nimport Info from './info';\nimport { addNewsEvent, fetchNewsEvent, getNewsEventInfo } from '../../../Reducer/Modules/newsEvent';\n\nclass InfoContainer extends React.PureComponent {\n componentDidMount = () => {\n const { id } = this.props.auth;\n const { state } = this.props.location;\n const { id: newsEventId } = this.props.match.params;\n\n // console.log(newsEventId, state);\n\n if (state === 'newsEvent') this.props.getNewsEventInfo({ newsEventId });\n };\n\n render() {\n return (\n <StyledInfoContainer>\n <Info {...this.props} />\n </StyledInfoContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth, newsEvent }) => ({\n app, \n auth,\n newsEvent\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchNewsEvent: () => dispatch(fetchNewsEvent()),\n addNewsEvent: (info) => dispatch(addNewsEvent(info)),\n getNewsEventInfo: ({ id, newsEventId }) => dispatch(getNewsEventInfo({ id, newsEventId }))\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InfoContainer);\n","import React from 'react';\nimport { Switch, Route } from 'react-router-dom';\n\n// pages\nimport List from './List';\nimport Info from './Info';\n\nclass NewsEvent extends React.PureComponent {\n render() {\n return (\n <Switch>\n <Route exact path='/newsEvent/list' component={List} />\n <Route exact path='/newsEvent/info/:id' component={Info} />\n </Switch>\n );\n }\n}\nexport default NewsEvent;\n","import { createAction, handleActions } from 'redux-actions';\nimport produce from 'immer';\nimport * as reviewAPI from '../../Lib/Api/review';\nimport _ from 'lodash';\nimport { createReduxThunk } from '../../Lib/middleware';\n\nconst ADD_REVIEW = 'review/ADD_REVIEW';\nconst ADD_REVIEW_SUCCESS = 'review/ADD_REVIEW_SUCCESS';\n\nconst REPLY_REVIEW = 'review/REPLY_REVIEW';\nconst REPLY_REVIEW_SUCCESS = 'review/REPLY_REVIEW_SUCCESS';\n\nconst DELETE_REVIEW = 'review/DELETE_REVIEW';\nconst DELETE_REVIEW_SUCCESS = 'review/DELETE_REVIEW_SUCCESS';\n\nconst GET_REVIEW_LIST = 'review/GET_REVIEW_LIST';\nconst GET_REVIEW_LIST_SUCCESS = 'review/GET_REVIEW_LIST_SUCCESS';\n\nconst EDIT_REVIEW = 'review/EDIT_REVIEW';\n\n// initalState\nconst initialState = {\n review: {},\n reviewList: [],\n reviewPage: 0,\n tab: 'basic',\n};\n\nexport const addReview = createReduxThunk(ADD_REVIEW, reviewAPI.addReview);\nexport const replyReview = createReduxThunk(REPLY_REVIEW, reviewAPI.replyReview);\nexport const deleteReview = createReduxThunk(DELETE_REVIEW, reviewAPI.deleteReview);\nexport const getReviewList = createReduxThunk(GET_REVIEW_LIST, reviewAPI.getReviewList);\n\nexport const editReview = createAction(EDIT_REVIEW, input => input);\n\nconst appReducer = handleActions(\n {\n [ADD_REVIEW_SUCCESS]: (state, { payload }) => produce(state, draft => {}),\n [GET_REVIEW_LIST_SUCCESS]: (state, { payload }) =>\n produce(state, draft => {\n draft['reviewList'] = payload;\n }),\n [EDIT_REVIEW]: (state, { payload }) =>\n produce(state, draft => {\n draft[payload.type] = payload.value;\n }),\n },\n initialState,\n);\n\nexport default appReducer;\n","import axios from '../axios';\n\nexport const addReview = ({ reserveId, userId, title, review, score, reserveDate }) => {\n return axios.post(`/v1/review/add`, { reserveId, userId, title, review, score, reserveDate });\n};\n\nexport const getReviewList = ({ page }) => {\n return axios.get(`/v1/review/list`, { page });\n};\n\nexport const replyReview = ({}) => {\n return axios.post(`/v1/reply/review`, {});\n};\n\nexport const deleteReview = ({ reviewId }) => {\n return axios.put(`/v1/delete/review`, { reviewId });\n};\n","import styled from 'styled-components';\nimport { Input } from 'antd';\n\nconst StyledAddContainer = styled.div``;\n\nexport default StyledAddContainer;\n\nexport const WritePaper = styled.div`\n background-color: white;\n padding: 21px 31px 31px 31px;\n border-radius: 8px;\n border: solid 1px #e6e6e6;\n\n @media (max-width: 480px) {\n padding: 16px;\n border-radius: 4px;\n }\n`;\n\nexport const FormHeader = styled.div`\n border-bottom: solid 1px #e6e6e6;\n padding-bottom: 22px;\n`;\n\nexport const FormTitle = styled.div`\n font-size: 32px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.7px;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n\n @media (max-width: 480px) {\n font-size: 24px;\n }\n`;\n\nexport const FormSubtitle = styled.div`\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 32px;\n\n @media (max-width: 480px) {\n font-size: 13px;\n }\n`;\n\nexport const FormTypeWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: flex-start;\n }\n`;\n\nexport const FormTypeBlock = styled.div`\n margin-right 220px;\n\n @media (max-width: 768px) {\n margin-right: 0px;\n margin-bottom: 20px;\n\n &:last-child {\n margin-bottom: 0px;\n }\n }\n`;\n\nexport const FormTypeTitle = styled.p`\n font-size: 11px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.67;\n letter-spacing: normal;\n color: #b1b1b1;\n\n margin-bottom: 11px;\n\n @media (max-width: 480px) {\n font-size: 10px;\n }\n`;\n\nexport const FormTypeDesc = styled.p`\n font-size: 20px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.54;\n letter-spacing: -0.1px;\n text-align: left;\n color: #3bc1ff;\n\n margin-bottom: 0px;\n\n @media (max-width: 480px) {\n font-size: 16px;\n }\n`;\n\nexport const FormDescription = styled.span`\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: left;\n color: #3bc1ff;\n\n margin-left: 4px;\n\n @media (max-width: 480px) {\n font-size: 11px;\n }\n`;\n\nexport const StarImg = styled.img`\n width: 46px;\n height: 44px;\n margin-right: 8px;\n\n @media (max-width: 480px) {\n width: 26px;\n height: 24px;\n margin-right: 4px;\n }\n`;\n\nexport const FormBody = styled.div`\n padding-top: 22px;\n`;\n\nexport const FormRow = styled.div`\n margin-bottom: 32px;\n`;\n\nexport const FormInput = styled(Input)`\n height: 44px;\n\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.3px;\n color: #161616;\n\n &::placeholder {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.3px;\n color: #a7a7a7;\n }\n\n @media (max-width: 480px) {\n font-size: 12px;\n\n &::placeholder {\n font-size: 11px;\n }\n }\n`;\n\nexport const FormTextarea = styled(Input.TextArea)`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.3px;\n color: #161616;\n\n &::placeholder {\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.3px;\n color: #a7a7a7;\n }\n\n @media (max-width: 480px) {\n font-size: 12px;\n\n &::placeholder {\n font-size: 11px;\n }\n }\n`;\n\nexport const FormButtonWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n margin-top: 50px;\n\n @media (max-width: 480px) {\n margin-top: 32px;\n }\n`;\n\nexport const FormButton = styled.div`\n cursor: pointer;\n\n border-radius: 2px;\n width: 297px;\n height: 60px;\n line-height: 60px;\n\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: -0.15px;\n text-align: center;\n color: #ffffff;\n\n &.blue {\n background-color: #3bc1ff;\n }\n\n &.white {\n background-color: #b7b7b7;\n margin-right: 16px;\n }\n\n &:hover {\n transition: all 0.5s;\n opacity: 0.8;\n }\n\n @media (max-width: 480px) {\n height: 44px;\n line-height: 44px;\n font-size: 13px;\n }\n`;\n\nexport const FormTitleRowWrapper = styled.div`\n padding-top: 16px;\n padding-bottom: 16px;\n\n border-bottom: 1px solid #f2f2f2;\n`;\n\nexport const FormRowTitle = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.65;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 0px;\n\n @media (max-width: 480px) {\n font-size: 14px;\n flex-direction: column;\n align-items: flex-start;\n }\n`;\n\nexport const CheckboxGroup = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-end;\n text-align: right;\n\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.65;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n .ant-checkbox-inner {\n width: 18px;\n height: 18px;\n }\n\n @media (max-width: 480px) {\n .ant-checkbox-wrapper {\n font-size: 12px !important;\n }\n .ant-checkbox-inner {\n width: 16px;\n height: 16px;\n }\n\n margin-top: 4px;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst CommentPageHeader = ({ children, title, desc }) => {\n return (\n <HeaderContainer>\n <HeaderWrapper className='inner-container'>\n <HeaderBlock>\n <HeaderTitle>{title}</HeaderTitle>\n <HeaderDescription>\n {desc.split('\\n').map((word, index) => (\n <p key={'add-word-brea-' + index.toString()}>{word}</p>\n ))}\n </HeaderDescription>\n {children}\n </HeaderBlock>\n <HeaderBlock className='img-cover'>\n <MainImageWrapper>\n {/* <MainImage src='/assets/images/comment_main.png' /> */}\n <MainImage src='/assets/images/w_main_crop.png' />\n </MainImageWrapper>\n </HeaderBlock>\n </HeaderWrapper>\n </HeaderContainer>\n );\n};\n\nconst HeaderContainer = styled.div`\n // border-bottom: 1px solid #e6e6e6;\n`;\n\nconst HeaderWrapper = styled.div`\n display: flex;\n\n padding: 0px;\n padding-top: 100px;\n padding-bottom: 0px;\n\n @media (max-width: 1120px) {\n padding: 100px 16px 0px 16px;\n }\n`;\n\nconst HeaderBlock = styled.div`\n flex: 1;\n\n &.img-cover {\n flex: 1.2;\n\n display: flex;\n justify-content: flex-start;\n align-items: flex-end;\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n`;\n\nconst HeaderTitle = styled.div`\n font-size: 44px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #000000;\n\n margin-top: 30px;\n margin-bottom: 6px;\n\n @media (max-width: 768px) {\n font-size: 32px;\n margin-top: 16px;\n }\n`;\n\nconst HeaderDescription = styled.div`\n > p {\n margin-bottom: 0px;\n\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n @media (max-width: 768px) {\n font-size: 12px;\n }\n }\n`;\n\nconst MainImageWrapper = styled.div`\n display: flex;\n justify-content: flex-start;\n\n width: 80%;\n height: 100%;\n max-height: 391px;\n`;\n\nconst MainImage = styled.div`\n width: 100%;\n height: 100%;\n background-image: url(${props => props.src});\n background-position: top;\n background-repeat: no-repeat;\n background-size: cover;\n`;\n\nexport default CommentPageHeader;\n","import React from 'react';\nimport styled from 'styled-components';\nimport StarRatingComponent from 'react-star-rating-component';\nimport { message, notification, Checkbox } from 'antd';\nimport moment from 'moment';\n\nimport { ASSIST } from '../../../Lib/variables';\nimport axios from '../../../Lib/axios';\nimport CommentPageHeader from '../../../Components/Templates/Review/header';\nimport { WithmateLabel, DivisionLine, WithmateInput, WithmateTextarea } from '../../../Components/Common/input';\n\nimport {\n WritePaper,\n FormHeader,\n StarImg,\n FormTitle,\n FormSubtitle,\n FormTypeWrapper,\n FormTypeBlock,\n CheckboxGroup,\n FormTypeDesc,\n FormRowTitle,\n FormDescription,\n FormTitleRowWrapper,\n FormButtonWrapper,\n FormButton,\n} from './add.styled';\n\nexport default class AddComment extends React.PureComponent {\n state = {\n star: 0,\n title: '',\n review: '',\n useAgain: null,\n corpSatisfied: null,\n corpSatisfiedReason: '',\n doctorSatisfied: null,\n doctorSatisfiedReason: '',\n hope: '',\n };\n\n componentDidMount = () => {\n this.checkReserveValidation();\n };\n\n checkReserveValidation = async () => {\n const id = localStorage.getItem('id');\n const { params } = this.props.match;\n\n if (!params.reserveId) {\n message.info('올바르지않은 시도입니다. 다시 시도해주세요.');\n return this.props.history.goBack();\n }\n const { data: reviewStatus } = await axios.get('/v1/review/check/validation', { params: { reserveId: params.reserveId } });\n if (!reviewStatus) {\n message.info('올바르지않은 시도입니다. 다시 시도해주세요.');\n return setTimeout(() => {\n this.props.history.goBack();\n }, 1000);\n }\n\n if (reviewStatus === 'already registered') {\n notification.error({\n message: '작성 완료 알림',\n description: `이미 해당 이용에 대한 후기를 작성하였습니다. 목록으로 돌아가 다시 시도해주세요.`,\n });\n\n return setTimeout(() => {\n this.props.history.goBack();\n }, 1000);\n }\n\n if (reviewStatus === 'invalid reserve') {\n notification.error({\n message: '유효하지 않은 이용내역',\n description: `올바르지않은 시도입니다. 다시 시도해주세요.`,\n });\n return setTimeout(() => {\n this.props.history.goBack();\n }, 1000);\n }\n\n axios.get('/v2/service/user/reserve/info', { params: { userId: id, reserveId: params.reserveId } }).then(resolve => {\n const { data: info } = resolve;\n if (!info) return message.error('죄송합니다. 요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n if (info === 'invalid reserve') return message.warning('유효하지않은 예약입니다.');\n\n const serviceType =\n !info.productInfo || !info.productInfo.usePro || !info.productInfo.useBasic ? '' : info.service === 'unemergency' ? 'Pro' : 'Basic';\n const serviceName = (info.productInfo && info.productInfo.name && info.service && info.productInfo.name + serviceType) || '-';\n\n this.setState({\n reserveId: info._id,\n callId: info.call._id,\n service: info.service,\n reserveDate: info.reserveDate,\n serviceName,\n });\n });\n };\n\n starHandler = (nextValue, prevValue, name) => {\n this.setState({ star: nextValue });\n };\n\n inputHandler = ({ type, value }) => {\n this.setState({\n [type]: value,\n });\n };\n\n onAddReview = () => {\n // 리뷰 추가\n const userId = localStorage.getItem('id');\n const { star, reserveId, title, review, useAgain, corpSatisfied, corpSatisfiedReason, doctorSatisfied, doctorSatisfiedReason, hope, reserveDate } = this.state;\n\n const info = { score: star };\n\n if (title) info.title = title;\n if (reserveDate) info.reserveDate = reserveDate;\n if (review) info.review = review;\n if (typeof useAgain === 'boolean') info.useAgain = useAgain;\n if (typeof corpSatisfied === 'boolean') info.corpSatisfied = corpSatisfied;\n if (corpSatisfiedReason) info.corpSatisfiedReason = corpSatisfiedReason;\n if (typeof doctorSatisfied === 'boolean') info.doctorSatisfied = doctorSatisfied;\n if (doctorSatisfiedReason) info.doctorSatisfiedReason = doctorSatisfiedReason;\n if (hope) info.hope = hope;\n\n if (!star) return message.warning('별점을 매겨주세요.');\n\n axios\n .post('/v2/review/add', { info, reserveId, userId })\n .then(resolve => {\n const { data } = resolve;\n if (!data) return message.error('죄송합니다. 일시적인 서버 장애로 요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n else if (data === 'check parameters') return message.warning('요청에 실패하였습니다.');\n else if (data === 'invalid') return message.warning('잘못된 요청입니다. 재 로그인 후 시도해주세요.');\n else if (data === 'not exist reserve') return message.warning('잘못된 요청입니다. 새로고침 후 다시 시도해주세요.');\n else if (data === 'already registered') return message.warning('이미 리뷰 등록을 완료한 예약입니다.');\n else if (data === 'success') {\n message.success('리뷰 등록 완료');\n setTimeout(() => {\n this.props.history.goBack();\n }, 250);\n return null;\n }\n })\n .catch(error => {\n return message.error('죄송합니다. 일시적인 서버 장애로 요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n });\n };\n\n render() {\n const { star, title, serviceName, reserveDate, review, useAgain, corpSatisfied, corpSatisfiedReason, doctorSatisfied, doctorSatisfiedReason, hope } =\n this.state;\n\n return (\n <div>\n <CommentPageHeader title='서비스 이용 후기 작성' desc={`후기 작성 시 최대 3,000포인트를\\n 지급해드립니다.`}>\n <PaddingDiv style={{ paddingTop: '90px' }} />\n </CommentPageHeader>\n\n <FullContainer>\n <div className='inner-container'>\n <WritePaper>\n <FormHeader>\n <FormTitle>후기 작성</FormTitle>\n <FormSubtitle>후기를 작성하실 이용 내역을 선택해주세요</FormSubtitle>\n <FormTypeWrapper>\n <FormTypeBlock>\n <WithmateLabel>이용하신 서비스</WithmateLabel>\n <FormTypeDesc>{serviceName}</FormTypeDesc>\n </FormTypeBlock>\n <FormTypeBlock>\n {/* <WithmateLabel>이용 날짜</WithmateLabel>\n <FormTypeDesc>{moment(reserveDate).format('YYYY년 MM월 DD일')}</FormTypeDesc>\n </FormTypeBlock> */}\n <WithmateLabel>서비스 이용 날짜</WithmateLabel>\n <FormTypeDesc>{moment(reserveDate).format('YYYY년 MM월 DD일')}</FormTypeDesc>\n </FormTypeBlock>\n </FormTypeWrapper>\n </FormHeader>\n\n <DivisionLine big />\n\n <WithmateLabel required>\n 별점\n <FormDescription>(작성 시 500포인트 지급)</FormDescription>\n </WithmateLabel>\n <StarRatingComponent\n starCount={5}\n value={star}\n renderStarIcon={(index, value) => {\n return <StarImg src={`/assets/images/icon_${index <= value ? 'active_star' : 'star'}.png`} />;\n }}\n onStarClick={this.starHandler}\n />\n\n <DivisionLine big />\n\n <WithmateLabel>\n 제목\n <FormDescription>(제목 + 이용후기 작성 시 500포인트 지급)</FormDescription>\n </WithmateLabel>\n <WithmateInput\n value={title}\n maxLength={30}\n onChange={ev => {\n this.inputHandler({ type: 'title', value: ev.target.value });\n }}\n placeholder='제목을 입력해주세요.'\n />\n\n <DivisionLine big />\n\n <WithmateLabel>이용 후기</WithmateLabel>\n <WithmateTextarea\n value={review || undefined}\n placeholder='고객님의 소중한 후기는 위드메이트 서비스 개선에 많은 도움이 됩니다. 감사합니다.'\n onChange={ev => {\n this.inputHandler({ type: 'review', value: ev.target.value });\n }}\n />\n\n <DivisionLine big />\n <DivisionLine big />\n\n <WithmateLabel>\n 추가 선택 사항\n <FormDescription>(선택사항까지 작성 완료 시 2000포인트 추가 지급)</FormDescription>\n </WithmateLabel>\n\n <DivisionLine small />\n\n <FormTitleRowWrapper>\n <FormRowTitle>\n 다음 진료에도 위드메이트를 사용하실건가요?\n <CheckboxGroup>\n <Checkbox\n value={true}\n checked={useAgain === true}\n onClick={() => {\n this.setState({ useAgain: !useAgain ? true : null });\n }}\n >\n 예\n </Checkbox>\n <Checkbox\n value={false}\n checked={useAgain === false}\n onClick={() => {\n this.setState({ useAgain: useAgain === false ? null : false });\n }}\n >\n 아니오\n </Checkbox>\n </CheckboxGroup>\n </FormRowTitle>\n </FormTitleRowWrapper>\n\n <FormTitleRowWrapper>\n <FormRowTitle>\n 금일 방문하신 의료 기관의 서비스에 만족하시나요?\n <CheckboxGroup>\n <Checkbox\n value={true}\n checked={corpSatisfied === true}\n onClick={() => {\n this.setState({ corpSatisfied: !corpSatisfied ? true : null });\n }}\n >\n 예\n </Checkbox>\n <Checkbox\n value={false}\n checked={corpSatisfied === false}\n onClick={() => {\n this.setState({ corpSatisfied: corpSatisfied === false ? null : false });\n }}\n >\n 아니오\n </Checkbox>\n </CheckboxGroup>\n </FormRowTitle>\n </FormTitleRowWrapper>\n\n <FormTitleRowWrapper>\n <FormRowTitle>이유는 무엇인가요?</FormRowTitle>\n <DivisionLine x_small />\n <WithmateInput\n value={corpSatisfiedReason}\n maxLength={30}\n onChange={ev => {\n this.inputHandler({ type: 'corpSatisfiedReason', value: ev.target.value });\n }}\n placeholder='어떤 부분에서 의료기관이 만족스러우셨는지 입력해주세요.'\n />\n </FormTitleRowWrapper>\n\n <FormTitleRowWrapper>\n <FormRowTitle>\n 금일 방문하신 의료 기관의 의료진은 누구이고, 서비스에 만족하시나요?\n <CheckboxGroup>\n <Checkbox\n value={true}\n checked={doctorSatisfied === true}\n onClick={() => {\n this.setState({ doctorSatisfied: !doctorSatisfied ? true : null });\n }}\n >\n 예\n </Checkbox>\n <Checkbox\n value={false}\n checked={doctorSatisfied === false}\n onClick={() => {\n this.setState({ doctorSatisfied: doctorSatisfied === false ? null : false });\n }}\n >\n 아니오\n </Checkbox>\n </CheckboxGroup>\n </FormRowTitle>\n <DivisionLine x_small />\n <WithmateInput\n value={doctorSatisfiedReason}\n maxLength={30}\n onChange={ev => {\n this.inputHandler({ type: 'doctorSatisfiedReason', value: ev.target.value });\n }}\n placeholder='의료진의 이름과 만족하는 이유를 입력해주세요.'\n />\n </FormTitleRowWrapper>\n\n <FormTitleRowWrapper>\n <FormRowTitle>병원 동행 서비스의 개선점이 있다면 무엇이라고 생각하시나요?</FormRowTitle>\n <DivisionLine x_small />\n <WithmateTextarea\n value={hope || undefined}\n placeholder={`고객님의 소중한 후기는 위드메이트 서비스개선에 많은 도움이 됩니다.\n감사합니다.`}\n onChange={ev => {\n this.inputHandler({ type: 'hope', value: ev.target.value });\n }}\n />\n </FormTitleRowWrapper>\n\n <DivisionLine big />\n\n <FormButtonWrapper>\n <FormButton\n className='white'\n onClick={() => {\n this.props.history.goBack();\n }}\n >\n 뒤로가기\n </FormButton>\n <FormButton className='blue' onClick={this.onAddReview}>\n 등록하기\n </FormButton>\n </FormButtonWrapper>\n </WritePaper>\n </div>\n </FullContainer>\n </div>\n );\n }\n}\nexport const PaddingDiv = styled.div``;\n\nexport const FullContainer = styled.div`\n width: 100%;\n background-color: #f6f6f6;\n min-height: 70vh;\n\n @media (max-width: 480px) {\n > .inner-container {\n padding: 16px 16px;\n }\n }\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\nimport { getReserveInfo } from '../../../Reducer/Modules/app';\nimport { addReview } from '../../../Reducer/Modules/review';\nimport StyledAddContainer from './add.styled';\nimport AddCommentPage from './add';\nimport { message } from 'antd';\n\nclass AddCommentPageContainer extends React.PureComponent {\n componentDidMount = () => {\n const id = localStorage.getItem('id');\n const { params } = this.props.match;\n\n if (!id) {\n message.info('로그인 후 이용해주세요.');\n return this.props.history.push('/user/login');\n }\n\n if (params && params.reserveId) {\n this.props\n .getReserve({\n reserveId: params.reserveId,\n userId: id,\n })\n .then(resolve => {\n if (resolve === 'no matched user') {\n message.info('해당 리뷰의 접근권한이 없습니다.');\n return this.props.history.push('/review/own/usage/list');\n }\n\n if (resolve && resolve.review && resolve.review.length > 0) {\n message.info('이미 리뷰를 작성하였습니다.');\n return this.props.history.push('/review/own/usage/list');\n }\n });\n }\n };\n\n render() {\n return (\n <StyledAddContainer>\n <AddCommentPage {...this.props} />\n </StyledAddContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth, review }) => ({\n app,\n auth,\n review,\n});\n\nconst mapDispatchToProps = dispatch => ({\n addReview: ({ reserveId, userId, title, review, score }) => dispatch(addReview({ reserveId, userId, title, review, score })),\n getReserve: ({ reserveId, userId }) => dispatch(getReserveInfo({ reserveId, userId })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AddCommentPageContainer);\n","import React from 'react';\nimport { Collapse, Icon, Pagination, message } from 'antd';\nimport moment from 'moment';\n\nimport CommentPageHeader from '../../../Components/Templates/Review/header';\nimport {\n HeaderButton,\n CollapseContainer,\n CollapseHeader,\n CollapseTab,\n CollapseTabOnlyDesktop,\n CountDisplay,\n PanelHeader,\n PanelField,\n Star,\n ReviewTextWrapper,\n ReviewText,\n ReviewMobileInfo,\n ReviewerName,\n MyReview,\n} from './list.styled';\n\nimport axios from '../../../Lib/axios';\n\nconst { Panel } = Collapse;\n\nconst PerPage = 20;\n\nexport default class CommentList extends React.PureComponent {\n state = {\n tab: 'basic',\n total: 0,\n list: [],\n page: 1,\n };\n\n componentDidMount = () => {\n this.fetchList();\n };\n\n fetchList = () => {\n const { page } = this.state;\n axios.get('/v2/review/list', { params: { page, pageCnt: PerPage } }).then(resolve => {\n const { data } = resolve;\n if (data && data.total) {\n this.setState({ total: data.total || 0, list: data.list || [] });\n }\n });\n };\n\n renderStar = score => {\n return (\n <>\n {new Array(score).fill(0).map((star, index) => (\n <Star key={'active-star=' + index.toString()} src='/assets/images/icon_active_star.png' alt='active-star' />\n ))}\n {new Array(5 - score).fill(0).map((star, index) => (\n <Star key={'active-star=' + index.toString()} src='/assets/images/icon_star.png' alt='active-star' />\n ))}\n </>\n );\n };\n\n getAutoTitle = ({ title, rate }) => {\n if (title) return title;\n if (rate === 5) return '서비스 매우 만족';\n if (rate >= 4) return '서비스 만족';\n if (rate >= 3) return '서비스 보통';\n if (rate >= 2) return '서비스 불만족';\n if (rate >= 1) return '서비스 매우 불만족';\n };\n\n render() {\n const { tab, list, page, total } = this.state;\n const { id, userType } = this.props.auth;\n\n return (\n <div>\n <CommentPageHeader title='이용 후기' desc={`고객님의 소중한 후기를 통해 더욱 발전하는\\n 위드메이트가 되겠습니다.`}>\n <HeaderButton\n onClick={() => {\n if (userType && userType === 'user') {\n this.props.history.push('/review/own/usage/list');\n } else {\n message.warning('비회원과 메이트는 작성할 수 없습니다.');\n }\n }}\n >\n 후기 작성하기\n </HeaderButton>\n </CommentPageHeader>\n\n <CollapseContainer className='inner-container'>\n <CountDisplay>\n <span>{total}</span>건\n </CountDisplay>\n\n <CollapseHeader>\n <CollapseTab style={{ width: '40px' }}>번호</CollapseTab>\n <CollapseTab style={{ flex: 1 }}>서비스</CollapseTab>\n <CollapseTab style={{ flex: 1 }}>제목</CollapseTab>\n <CollapseTabOnlyDesktop style={{ width: '80px' }}>작성자</CollapseTabOnlyDesktop>\n <CollapseTabOnlyDesktop style={{ width: '120px' }}>별점</CollapseTabOnlyDesktop>\n <CollapseTabOnlyDesktop style={{ width: '152px' }}>작성일</CollapseTabOnlyDesktop>\n </CollapseHeader>\n <Collapse\n key={'item-key-frefresh'}\n expandIconPosition='right'\n bordered={false}\n expandIcon={({ isActive }) => <Icon type='right' rotate={isActive ? 90 : -90} style={{ color: isActive ? '#3bc1ff' : '#a7a7a7' }} />}\n >\n {list &&\n list.map((info, index) => (\n <Panel\n key={'comment-order-' + index.toString() + 'item'}\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={\n <PanelHeader>\n <PanelField style={{ width: '40px' }} index>\n {total - ((page - 1) * PerPage + index)}\n </PanelField>\n <PanelField style={{ width: '80px' }}>{info.reserve.service === 'assist' ? 'Basic' : 'Pro'}</PanelField>\n <PanelField className='title' style={{ flex: 1 }}>\n {this.getAutoTitle({ title: info.title, rate: info.score })}\n </PanelField>\n <PanelField style={{ width: '80px' }} onlyDesktop>\n {id === info.user._id ? <MyReview>내후기</MyReview> : info.user.name}\n </PanelField>\n <PanelField style={{ width: '120px' }} onlyDesktop>\n {info.score ? this.renderStar(parseInt(info.score, 10)) : null}\n </PanelField>\n <PanelField style={{ width: '152px' }} onlyDesktop>\n {moment(info.createdAt).format('YYYY-MM-DD')}\n </PanelField>\n </PanelHeader>\n }\n >\n <ReviewTextWrapper>\n <ReviewMobileInfo>\n {id === info.user._id ? (\n <MyReview style={{ marginRight: '17px' }}>내후기</MyReview>\n ) : (\n <ReviewerName>{info.user.name}</ReviewerName>\n )}\n <span style={{ marginRight: '18px' }}>{info.score ? this.renderStar(parseInt(info.score, 10)) : null}</span>\n <ReviewerName>{moment(info.createdAt).format('YYYY-MM-DD')}</ReviewerName>\n </ReviewMobileInfo>\n {info.review && (\n <ReviewText>\n {info.review.split('\\n').map((text, index) => (\n <span key={info._id + index.toString() + tab}>\n {text}\n <br />\n </span>\n ))}\n </ReviewText>\n )}\n <ReviewText style={{ marginTop: '8px' }}>\n (담당 메이트: {info.reserve && info.reserve.call && info.reserve.call.mate ? info.reserve.call.mate.name : '-'})\n </ReviewText>\n\n <ReviewText style={{ marginTop: '15px', paddingLeft: '15px' }}>\n {info.reply === '' ? (\n ''\n ) : (\n <>\n <a style={{ color: '#3bc1ff' }}>➔ </a>\n <b>위드메이트</b>: {info.reply ? info.reply : ''}\n </>\n )}\n </ReviewText>\n </ReviewTextWrapper>\n </Panel>\n ))}\n </Collapse>\n <Pagination\n pageSize={PerPage}\n total={this.state.total}\n current={this.state.page}\n onChange={page => {\n this.setState({ page, list: [] }, () => {\n this.fetchList();\n });\n }}\n />\n </CollapseContainer>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledListContainer from './list.styled';\nimport CommentList from './list';\n\nimport { getReviewList, editReview } from '../../../Reducer/Modules/review';\n\nclass CommentListPage extends React.PureComponent {\n render() {\n return (\n <StyledListContainer>\n <CommentList {...this.props} />\n </StyledListContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth, review }) => ({\n app,\n auth,\n review,\n});\n\nconst mapDispatchToProps = dispatch => ({\n // getReviewList: page => dispatch(getReviewList({ page })),\n editReview: ({ type, value }) => dispatch(editReview({ type, value })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CommentListPage);\n","import styled from 'styled-components';\n\nconst StyledListContainer = styled.div``;\n\nexport const FullContainer = styled.div`\n width: 100%;\n background-color: #f6f6f6;\n min-height: 70vh;\n`;\n\nexport const PaddingDiv = styled.div``;\n\nexport const TableContainer = styled.div``;\n\nexport const TableHeader = styled.div`\n padding: 23px 32px 32px 32px;\n background-color: #ffffff;\n border-bottom: 1px solid rgba(0, 0, 0, 0.09);\n\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n`;\n\nexport const TableTitle = styled.p`\n font-size: 36px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.44;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 4px;\n`;\n\nexport const TableSubTitle = styled.p`\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 0px;\n`;\n\nexport const TableAlert = styled.p`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 0px;\n margin-top: 16px;\n`;\n\nexport const TableBody = styled.div`\n overflow-x: scroll;\n background-color: white;\n`;\n\nexport const TableRow = styled.div`\n width: 100%;\n\n display: flex;\n align-items: center;\n\n padding-top: 11px;\n padding-bottom: 12px;\n\n border-bottom: 1px solid #e6e6e6;\n\n @media (max-width: 768px) {\n width: fit-content;\n }\n`;\n\nexport const TableField = styled.div`\n ${props => (props.style ? props.style : `flex: 1;`)}\n\n display: flex;\n flex-direction: column;\n text-align: left;\n\n margin: 0px 26px;\n\n ${props =>\n props.desktopOnly\n ? `\n @media (max-width: 768px) {\n display: none;\n }\n `\n : undefined}\n\n ${props => (props.title ? `font-weight: bold;` : undefined)}\n`;\n\nexport const TableButton = styled.div`\n align-self: flex-end;\n width: 134px;\n height: 28px;\n line-height: 28px;\n\n border-radius: 2px;\n border: 1px solid #3bc1ff;\n background-color: #3bc1ff;\n\n font-size: 10px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: normal;\n text-align: center;\n color: #ffffff;\n\n cursor: pointer;\n &:hover {\n transition: all 0.5s;\n opacity: 0.8;\n }\n\n &.disabled {\n border: 1px solid #a7a7a7;\n background-color: #a7a7a7;\n cursor: not-allowed;\n\n &:hover {\n transition: all 0.5s;\n opacity: 1;\n }\n }\n`;\n\nexport const EmptyWrapper = styled.div`\n padding: 32px;\n width: 100%;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n flex-direction: column;\n`;\n\nexport const EmptyImage = styled.img`\n width: 200px;\n height: 120px;\n object-fit: contain;\n\n margin-bottom: 20px;\n`;\n\nexport const EmptyText = styled.span`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.3px;\n color: #b1b1b1;\n`;\n\nexport default StyledListContainer;\n","import React from 'react';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport { ASSIST, UNEMER } from '../../../Lib/variables';\nimport ReviewPageHeader from '../../../Components/Templates/Review/header';\nimport {\n FullContainer,\n TableContainer,\n TableHeader,\n TableTitle,\n PaddingDiv,\n TableBody,\n TableSubTitle,\n TableAlert,\n TableRow,\n TableField,\n TableButton,\n EmptyWrapper,\n EmptyText,\n EmptyImage,\n} from './mylist.styled';\n\nexport default class MyReviewList extends React.PureComponent {\n onReserve = _id => {\n this.props.history.push('/review/edit/' + _id);\n };\n\n render() {\n const { reserveList } = this.props.app;\n const done_list = reserveList.filter(reserve => reserve.call.length > 0 && reserve.call[0].status === '서비스 종료' && reserve.review.length === 0);\n\n return (\n <div>\n <ReviewPageHeader title='이용 후기 쓰기' desc={`후기 작성 시 서비스 요금 2,000원\\n 할인이 적용됩니다.`}>\n <PaddingDiv style={{ paddingTop: '120px' }} />\n </ReviewPageHeader>\n\n <FullContainer>\n <TableContainer className='inner-container'>\n <TableHeader>\n <TableTitle>이용 내역 선택</TableTitle>\n <TableSubTitle>후기를 작성하실 이용 내역을 선택해주세요</TableSubTitle>\n </TableHeader>\n\n <TableBody>\n <TableRow>\n <TableField title style={{ width: '40px' }}>\n 서비스\n </TableField>\n <TableField title style={{ width: '64px' }}>\n 환자 이름\n </TableField>\n <TableField title style={{ width: '110px' }}>\n 예약 병원\n </TableField>\n <TableField title style={{ width: '200px' }}>\n 예약 시간\n </TableField>\n <TableField title style={{ width: '120px' }}>\n 신청 날짜\n </TableField>\n <TableField title style={{ width: '70px' }}>\n 진행 현황\n </TableField>\n <TableField></TableField>\n </TableRow>\n {done_list.length > 0 ? (\n done_list.map((reserve, index) => {\n return (\n <TableRow key={reserve._id.substr(4, 8) + index.toString()}>\n <TableField style={{ width: '40px' }}>{reserve.service === ASSIST ? 'BASIC' : 'PRO'}</TableField>\n <TableField style={{ width: '64px' }}>{reserve.patient}님</TableField>\n <TableField style={{ width: '110px' }}>{reserve.destination || '-'}</TableField>\n <TableField style={{ width: '200px' }}>{moment(reserve.reserveDate).format('YYYY년 MM월 DD일 - HH:mm')}</TableField>\n <TableField style={{ width: '120px' }}>{moment(reserve.createdAt).format('YYYY년 MM월 DD일')}</TableField>\n <TableField style={{ width: '70px' }}>{reserve.call.length > 0 ? reserve.call[0].status : '-'}</TableField>\n <TableField>\n <TableButton\n onClick={() => {\n this.onReserve(reserve._id);\n }}\n >\n 작성 하기\n </TableButton>\n </TableField>\n </TableRow>\n );\n })\n ) : (\n <EmptyList />\n )}\n {/* \n {reserveList\n .map((reserve, index) => {\n return (\n <TableRow key={reserve._id.substr(4, 8) + index.toString()}>\n <TableField style={{ width: '40px' }}>{reserve.service === ASSIST ? 'BASIC' : 'PRO'}</TableField>\n <TableField style={{ width: '64px' }}>{reserve.patient}님</TableField>\n <TableField style={{ width: '86px' }}>{reserve.destination || '-'}</TableField>\n <TableField style={{ width: '170px' }}>{moment(reserve.reserveDate).format('YYYY년 MM월 DD일 - hh:mm')}</TableField>\n <TableField style={{ width: '120px' }}>{moment(reserve.creaetedAt).format('YYYY년 MM월 DD일')}</TableField>\n <TableField style={{ width: '70px' }}>{reserve.call.length > 0 ? reserve.call[0].status : '-'}</TableField>\n <TableField>\n {reserve.call.length > 0 && reserve.call[0].status === '서비스 종료' && reserve.review.length === 0 ? (\n <TableButton\n onClick={() => {\n this.onReserve(reserve._id);\n }}\n >\n 작성 하기\n </TableButton>\n ) : (\n <TableButton className='disabled'>작성 불가</TableButton>\n )}\n </TableField>\n </TableRow>\n );\n })} */}\n </TableBody>\n\n {/* <TableAlert>* 최근 2주내의 이용 내역에 대한 리뷰만 작성이 가능합니다.</TableAlert> */}\n </TableContainer>\n </FullContainer>\n </div>\n );\n }\n}\n\nconst EmptyList = () => (\n <EmptyWrapper>\n <EmptyImage src='/assets/images/main_logo.png' alt='logo' />\n <EmptyText>후기를 작성가능한 이용내역이 없습니다.</EmptyText>\n </EmptyWrapper>\n);\n","import React from 'react';\nimport { connect } from 'react-redux';\n\nimport { USER, MATE } from '../../../Lib/variables';\nimport { getReserveList } from '../../../Reducer/Modules/app';\nimport StyledMylistContainer from './mylist.styled';\nimport MyCommentList from './mylist';\nimport { message } from 'antd';\n\nclass MyCommentListPage extends React.PureComponent {\n componentDidMount = () => {\n const id = localStorage.getItem('id');\n const userType = localStorage.getItem('userTYp');\n\n if (id) {\n this.props.fetchReserveList({ userId: id });\n }\n\n if (!id) {\n message.info('로그인 후 이용해주세요.');\n return this.props.history.push('/user/login');\n }\n\n if (id && userType === MATE) {\n message.info('일반 사용자를 위한 페이지입니다.');\n return this.props.history.push('/');\n }\n };\n\n componentDidUpdate = (prevProps, prevState) => {\n const { id } = this.props.auth;\n\n if (!prevProps.auth.id && id) {\n this.props.fetchReserveList({ userId: id });\n }\n };\n\n render() {\n return (\n <StyledMylistContainer>\n <MyCommentList {...this.props} />\n </StyledMylistContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\nconst mapDispatchToProps = dispatch => ({\n fetchReserveList: ({ userId }) => dispatch(getReserveList({ userId })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MyCommentListPage);\n","import React from 'react';\nimport {\n Container,\n TopWrapper,\n BottomWrapper,\n InnerContainer,\n Logo,\n MediumText,\n LargeText,\n Title,\n ApplyButton,\n FlexWrapper,\n FlexTitle,\n Contact,\n ContactTime,\n Link,\n Noti,\n} from './ready.styled';\n\nclass ReadyApplyPage extends React.PureComponent {\n render() {\n return (\n <Container>\n <TopWrapper>\n <InnerContainer>\n {/* <Logo src='/assets/images/main_logo.png' alt='withmate' /> */}\n <Title>위드메이트 동행 매니저, ‘메이트’</Title>\n <MediumText>병원 동행 서비스</MediumText>\n <MediumText>새로운 수익 창출의 시작</MediumText>\n <Noti>개인 일정에 맞춰 동행 서비스 접수 내역에</Noti>\n <Noti>매칭 신청을 하고 수익을 창출하세요!</Noti>\n <Noti>*단, 해외 여행에 결격 사유가 없는 자에 한해 지원이 가능합니다*</Noti>\n <Noti>* 지원 3일 이내 채용 담당자가 연락을 드립니다.</Noti>\n <div>\n <ApplyButton\n onClick={() => {\n this.props.history.push('/apply/form');\n }}\n >\n 메이트 지원하기\n </ApplyButton>\n </div>\n <img className='bg' src={'/assets/images/art_clap.png'} alt='일러스트' />\n </InnerContainer>\n </TopWrapper>\n <BottomWrapper>\n <InnerContainer>\n <FlexWrapper>\n <div>\n <Title style={{ color: '#161616' }}>위드메이트</Title>\n </div>\n <div>\n <FlexTitle>지원관련 상담</FlexTitle>\n <Contact>070-4300-9075</Contact>\n <ContactTime>상담 가능시간 / 오전 9시 ~ 오후 5시</ContactTime>\n </div>\n <div>\n <FlexTitle>안내사항</FlexTitle>\n <br />\n <Link href='https://www.notion.so/FAQ-cfe01db37c67472086b414a044ed6370' target='_blank'>\n 메이트 가이드\n </Link>\n <br />\n <Link href='https://www.notion.so/01a7a20704d14289a4f6b93de6c56a04?v=b137c8389c66455eb89361fc99291539' target='_blank'>\n 메이트 FAQ\n </Link>\n {/* <br />\n <Link href='/service/guide' target='_blank'>\n 회사소개\n </Link> */}\n </div>\n </FlexWrapper>\n </InnerContainer>\n </BottomWrapper>\n </Container>\n );\n }\n}\nexport default ReadyApplyPage;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Input } from 'antd';\n\nimport { mainColor } from '../../../theme';\n\nexport const FormContainer = styled.div`\n // background-color: ${mainColor};\n width: 100vw;\n\n padding-top: 55px;\n`;\n\nexport const InnerContainer = styled.div`\n max-width: 800px;\n margin: 0 auto;\n padding: 80px 0px;\n\n @media (max-width: 1080px) {\n padding: 80px 16px;\n }\n\n @media (max-width: 768px) {\n padding: 80px 16px;\n }\n`;\n\nexport const LargeText = styled.p`\n margin-bottom: 0px;\n\n font-weight: bold;\n color: #ffffff;\n font-size: 32px;\n\n padding: 2.5px;\n border-bottom: 4px solid #ffffff;\n display: inline-block;\n`;\n\nexport const InputWrapper = styled.div`\n border-radius: 8px;\n border: 1px solid #e9e9e9;\n background-color: #ffffff;\n padding: 16px;\n border-left: 8px solid ${mainColor};\n\n margin-bottom: 12px;\n overflow: hidden;\n`;\n\nexport const InputLabel = styled.div`\n font-size: 14px;\n margin-bottom: 8px;\n\n > span {\n font-size: 12px;\n }\n`;\n\nexport const StyledInput = styled(Input.TextArea)`\n font-size: 14px;\n &::placeholder {\n font-size: 14px;\n }\n`;\n\nexport const ApplyButton = styled.span`\n padding: 10px 16px;\n background-color: ${mainColor};\n\n color: #ffffff;\n font-size: 16px;\n font-weight: bold;\n\n width: 100%;\n min-width: 200px;\n max-width: 360px;\n\n border-radius: 40px;\n overflow: hidden;\n\n display: inline-block;\n margin-top: 40px;\n cursor: pointer;\n\n &:hover {\n transition: all 0.5s;\n background-color: #ffffff;\n border: 1px solid ${mainColor};\n color: ${mainColor};\n }\n`;\n\nexport const FormImgWrapper = styled.div`\n > img {\n width: 150px;\n object-fit: contain;\n }\n`;\n\nexport const SpinWrapper = styled.div`\n display: flex;\n width: 100vw;\n height: 100vh;\n\n position: fixed;\n top: 0px;\n left: 0px;\n\n z-index: 9999;\n\n align-items: center;\n justify-content: center;\n\n background-color: rgba(0, 0, 0, 0.6);\n`;\n","import React from 'react';\nimport { Checkbox, Input, message, Spin } from 'antd';\n\n// utils\nimport axios from '../../../Lib/axios';\nimport { imageUpload } from '../../../Lib/Api/app';\n\n// styles\nimport { FormContainer, InnerContainer, InputWrapper, InputLabel, StyledInput, ApplyButton, LargeText, FormImgWrapper, SpinWrapper } from './form.styled';\n\nconst initialState = {\n info: [],\n photoFst: false,\n photoSnd: false,\n fileFst: false,\n fileSnd: false,\n photoFstValue: null,\n photoSndValue: null,\n fileFstValue: null,\n fileSndValue: null,\n onSpin: false,\n};\n\nclass MateFormPage extends React.PureComponent {\n state = {\n ...initialState,\n };\n\n componentDidMount = () => {\n this.fetchForm();\n };\n\n componentWillUnmount = () => {\n this.setState({ ...initialState });\n };\n\n fetchForm = async () => {\n const { data: form } = await axios.get('/v1/user/recent/apply/form');\n this.setState({\n ...form,\n });\n };\n\n editForm = ({ type, value }) => {\n this.setState({ [type]: value });\n };\n\n sendForm = async () => {\n const { careCareer, info, photoFst, photoSnd, fileSnd, fileFst } = this.state;\n const { photoFstValue, photoSndValue, fileFstValue, fileSndValue } = this.state;\n\n this.setState({ onSpin: true });\n\n if (!careCareer) {\n this.setState({ onSpin: false });\n return message.warning('치매 간병 경력 여부를 선택해주세요.');\n }\n\n if (info.some(item => !item.value)) {\n this.setState({ onSpin: false });\n return message.warning('답변하지 않은 질문이 있습니다.');\n }\n\n if (photoFst && !photoFstValue) {\n this.setState({ onSpin: false });\n return message.warning('프로필 사진을 첨부해주세요.');\n }\n\n if (photoSnd && !photoSndValue) {\n this.setState({ onSpin: false });\n return message.warning('이미지 파일을 첨부해주세요.');\n }\n\n if (fileFst && !fileFstValue) {\n this.setState({ onSpin: false });\n return message.warning('이미지 파일을 첨부해주세요.');\n }\n\n if (fileSnd && !fileSndValue) {\n this.setState({ onSpin: false });\n return message.warning('추가 파일을 첨부해주세요.');\n }\n\n const form = { careCareer, info };\n if (photoFst) {\n const { data } = await imageUpload(photoFstValue);\n form.photoFst = data;\n }\n if (photoSnd) {\n const { data } = await imageUpload(photoSndValue);\n form.photoSnd = data;\n }\n if (fileFst) {\n const { data } = await imageUpload(fileFstValue);\n form.fileFst = data;\n }\n if (fileSnd) {\n const { data } = await imageUpload(fileSndValue);\n form.fileSnd = data;\n }\n\n const { data } = await axios.post('/v1/user/apply/mate', {\n form,\n });\n\n if (!data) {\n this.setState({ onSpin: false });\n return message.error('서버 장애로 지원에 실패했습니다. 관리자에게 문의해주세요.');\n }\n\n if (data === 'success') {\n this.setState({ onSpin: false });\n message.success('감사합니다. 메이트 지원이 완료되었습니다. 검토후 결과를 안내해드리겠습니다.');\n console.log(data, form);\n setTimeout(() => {\n window.location.href = '/';\n }, 1500);\n return null;\n }\n\n if (data === 'check parameters') {\n this.setState({ onSpin: false });\n return message.info('누락된 정보가 있는지 지원서 양식을 확인해주세요.');\n }\n };\n\n render() {\n const { careCareer, info, photoFst, photoSnd, fileFst, fileSnd } = this.state;\n\n return (\n <FormContainer>\n <InnerContainer>\n <LargeText style={{ color: '#161616', marginBottom: '20px' }}>메이트 지원하기</LargeText>\n <InputWrapper>\n <InputLabel>치매관련 간병 경력</InputLabel>\n <Checkbox checked={careCareer === '없어요'}\n onClick={() => {\n this.editForm({ type: 'careCareer', value: '없어요' })\n }}\n >\n 없어요\n </Checkbox>\n <Checkbox checked={careCareer === '1년 미만'}\n onClick={() => {\n this.editForm({ type: 'careCareer', value: '1년 미만' })\n }}\n >\n 1년 미만\n </Checkbox>\n <Checkbox checked={careCareer === '2 ~ 3년'}\n onClick={() => {\n this.editForm({ type: 'careCareer', value: '2 ~ 3년' })\n }}\n >\n 2 ~ 3년\n </Checkbox>\n <Checkbox checked={careCareer === '3년이상'}\n onClick={() => {\n this.editForm({ type: 'careCareer', value: '3년이상' })\n }}\n >\n 3년이상\n </Checkbox>\n </InputWrapper>\n\n {info.map((item, index) => (\n <InputWrapper key={'question-' + index.toString() + '-keys'}>\n <InputLabel>\n {item.question}{' '}\n {item.maxLength ? (\n <span>\n ({item.value ? item.value.length : 0}/{item.maxLength})\n </span>\n ) : (\n ''\n )}\n </InputLabel>\n <StyledInput\n value={item.value}\n placeholder={item.placeholder}\n onChange={ev => {\n const _info = JSON.parse(JSON.stringify(info));\n if (item.maxLength && ev.target.value.length > item.maxLength) {\n return null;\n }\n\n _info[index].value = ev.target.value;\n this.editForm({ type: 'info', value: _info });\n }}\n />\n </InputWrapper>\n ))}\n {photoFst ? (\n <InputWrapper>\n <InputLabel>프로필 사진</InputLabel>\n {this.state.photoFstValue ? (\n <FormImgWrapper>\n <img src={URL.createObjectURL(this.state.photoFstValue)} />\n </FormImgWrapper>\n ) : null}\n <input\n type='file'\n accept='image/x-png,image/gif,image/jpeg'\n onChange={ev => {\n this.editForm({ type: 'photoFstValue', value: ev.target.files[0] });\n }}\n />\n </InputWrapper>\n ) : null}\n {photoSnd ? (\n <InputWrapper>\n <InputLabel>이미지 파일 첨부</InputLabel>\n {this.state.photoSndValue ? (\n <FormImgWrapper>\n <img src={URL.createObjectURL(this.state.photoSndValue)} />\n </FormImgWrapper>\n ) : null}\n <input\n type='file'\n accept='image/x-png,image/gif,image/jpeg'\n onChange={ev => {\n this.editForm({ type: 'photoSndValue', value: ev.target.files[0] });\n }}\n />\n </InputWrapper>\n ) : null}\n {fileFst ? (\n <InputWrapper>\n <InputLabel>이력서 첨부</InputLabel>\n {this.state.fileFstValue ? <p>{this.state.fileFstValue.name}</p> : null}\n <input\n type='file'\n onChange={ev => {\n this.editForm({ type: 'fileFstValue', value: ev.target.files[0] });\n }}\n />\n </InputWrapper>\n ) : null}\n {fileSnd ? (\n <InputWrapper>\n <InputLabel>추가 파일첨부</InputLabel>\n {this.state.fileSndValue ? <p>{this.state.fileSndValue.name}</p> : null}\n <input\n type='file'\n onChange={ev => {\n this.editForm({ type: 'fileSndValue', value: ev.target.files[0] });\n }}\n />\n </InputWrapper>\n ) : null}\n\n <div style={{ textAlign: 'center' }}>\n <ApplyButton onClick={this.sendForm}>지원하기</ApplyButton>\n </div>\n </InnerContainer>\n {this.state.onSpin ? (\n <SpinWrapper>\n <Spin size='large' />\n </SpinWrapper>\n ) : null}\n </FormContainer>\n );\n }\n}\n\nexport default MateFormPage;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Input } from 'antd';\n\nimport { mainColor } from '../../../theme';\n\nexport const FormContainer = styled.div`\n // background-color: ${mainColor};\n width: 100vw;\n\n padding-top: 55px;\n`;\n\nexport const InnerContainer = styled.div`\n max-width: 800px;\n margin: 0 auto;\n padding: 80px 0px;\n\n .type-button-wrapper {\n width: 100%;\n height: 48px;\n\n background-color: white;\n border: 1px solid #e6e6e6;\n border-radius: 4px;\n\n display: flex;\n align-items: center;\n\n > .type-button {\n width: 50%;\n height: 100%;\n line-height: 48px;\n\n text-align: center;\n cursor: pointer;\n\n font-size: 16px;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.2);\n }\n\n > .type-button.active {\n background: rgba(0, 0, 0, 0.7);\n border-radius: 4px;\n color: #f9f9f9;\n }\n }\n\n @media (max-width: 1080px) {\n padding: 80px 16px;\n }\n\n @media (max-width: 768px) {\n padding: 80px 16px;\n }\n`;\n\nexport const LargeText = styled.p`\n margin-bottom: 0px;\n\n font-weight: bold;\n color: #ffffff;\n font-size: 32px;\n\n padding: 2.5px;\n border-bottom: 4px solid #ffffff;\n display: inline-block;\n`;\n\nexport const InputWrapper = styled.div`\n border-radius: 8px;\n border: 1px solid #e9e9e9;\n background-color: #ffffff;\n padding: 16px;\n border-left: 8px solid ${mainColor};\n\n margin-bottom: 12px;\n overflow: hidden;\n`;\n\nexport const InputLabel = styled.div`\n font-size: 17px;\n margin-bottom: 8px;\n\n > span {\n font-size: 12px;\n }\n`;\n\nexport const StyledInput = styled(Input.TextArea)`\n font-size: 14px;\n &::placeholder {\n font-size: 14px;\n }\n`;\n\nexport const ApplyButton = styled.span`\n padding: 10px 16px;\n background-color: ${mainColor};\n\n color: #ffffff;\n font-size: 16px;\n font-weight: bold;\n\n width: 100%;\n min-width: 200px;\n max-width: 360px;\n\n border-radius: 40px;\n overflow: hidden;\n\n display: inline-block;\n margin-top: 40px;\n cursor: pointer;\n\n &:hover {\n transition: all 0.5s;\n background-color: #ffffff;\n border: 1px solid ${mainColor};\n color: ${mainColor};\n }\n`;\n\nexport const FormImgWrapper = styled.div`\n > img {\n padding-bottom: 10px;\n width: 150px;\n object-fit: contain;\n }\n`;\n\nexport const SpinWrapper = styled.div`\n display: flex;\n width: 100vw;\n height: 100vh;\n\n position: fixed;\n top: 0px;\n left: 0px;\n\n z-index: 9999;\n\n align-items: center;\n justify-content: center;\n\n background-color: rgba(0, 0, 0, 0.6);\n`;\n","import React from 'react';\nimport { Checkbox, Select, message, Spin } from 'antd';\n\n// utils\nimport axios from '../../../Lib/axios';\nimport { imageUpload } from '../../../Lib/Api/app';\n\n// styles\nimport { FormContainer, InnerContainer, InputWrapper, InputLabel, ApplyButton, LargeText, FormImgWrapper, SpinWrapper } from './mateApply.styled';\nimport { WithamteInputWithButton, WithmateInput, WithmateSelect, WithmateTextarea } from '../../../Components/Common/input';\n\nclass MateApplyPage extends React.PureComponent {\n state = {\n photo: '',\n onSpin: false,\n };\n\n handleChange = e => {\n this.setState({ [e.target.title]: e.target.value });\n };\n\n handleTrimChange = e => {\n this.setState({ [e.target.title]: e.target.value.trim() });\n };\n\n onAddress = () => {\n new window.daum.Postcode({\n oncomplete: data => {\n const { roadAddress, buildingName } = data;\n this.setState(prevState => ({\n address: `${roadAddress} (${buildingName})`,\n }));\n },\n }).open();\n };\n\n editApply = ({ type, value }) => {\n this.setState({ [type]: value });\n };\n\n onSendApply = async () => {\n const {\n name,\n gender,\n birth,\n // photo,\n email,\n contact,\n address,\n connection,\n connection_etc,\n activity_area,\n drive,\n careCareer,\n care_experience,\n insurance,\n privacy,\n license_photo,\n } = this.state;\n\n this.setState({ onSpin: true });\n\n if (!name) {\n this.setState({ onSpin: false });\n return message.warning('성함을 입력하세요.');\n }\n\n if (!gender) {\n this.setState({ onSpin: false });\n return message.warning('성별을 입력하세요.');\n }\n\n if (!birth || birth.length < 8) {\n this.setState({ onSpin: false });\n return message.warning('생년월일 8자리를 입력하세요.');\n }\n\n if (!email) {\n this.setState({ onSpin: false });\n return message.warning('이메일을 입력하세요.');\n }\n\n if (!contact) {\n this.setState({ onSpin: false });\n return message.warning('개인 연락처를 입력하세요.');\n }\n\n if (!address) {\n this.setState({ onSpin: false });\n return message.warning('자택 주소를 검색하여 입력하세요.');\n }\n\n if (!careCareer) {\n this.setState({ onSpin: false });\n return message.warning('치매관련 간병 경력 기간을 선택하세요.');\n }\n\n // if (!activity_area) {\n // this.setState({ onSpin: false });\n // return message.warning('메이트 활동이 가능한 지역을 선택해주세요.');\n // }\n\n if (!care_experience) {\n this.setState({ onSpin: false });\n return message.warning('개인 간병 경력 사항을 입력하세요.');\n }\n\n if (!insurance) {\n this.setState({ onSpin: false });\n return message.warning('삼성화재 전문인 배상 책임 보험 가입 동의를 선택하세요.');\n }\n\n if (!privacy) {\n this.setState({ onSpin: false });\n return message.warning('개인정보 수집 및 이용 동의를 선택하세요.');\n }\n\n const formData = new FormData();\n formData.append('license_photo', license_photo);\n const header = { headers: { 'Content-Type': 'multipart/form-data' } };\n const { data: image } = await axios.post('/v1/user/apply/mate/image/upload', formData, header);\n\n const { data } = await axios.post('/v1/user/apply/mate/add', {\n name,\n gender,\n birth,\n // photo: image,\n email,\n contact,\n address,\n connection,\n connection_etc,\n activity_area: activity_area ? activity_area.join(', ') : '', // 배열을 쉼표로 구분된 문자열로 변환\n drive,\n careCareer,\n care_experience,\n insurance,\n privacy,\n license_photo: image,\n });\n\n if (!data) {\n this.setState({ onSpin: false });\n return message.error('서버 장애로 지원에 실패했습니다. 관리자에게 문의해주세요.');\n }\n\n if (data === 'success') {\n this.setState({ onSpin: false });\n message.success('감사합니다. 메이트 지원이 완료되었습니다. 검토후 결과를 안내해드리겠습니다.');\n setTimeout(() => {\n window.location.href = '/';\n }, 1500);\n return null;\n }\n\n if (data === 'check parameters') {\n this.setState({ onSpin: false });\n return message.info('누락된 정보가 있는지 지원서 양식을 확인해주세요.');\n }\n };\n\n render() {\n return (\n <FormContainer>\n <InnerContainer>\n <LargeText style={{ color: '#161616', marginBottom: '20px' }}>메이트 지원하기</LargeText>\n\n <InputWrapper>\n <InputLabel>성함을 입력하세요</InputLabel>\n <WithmateInput type='text' title='name' value={this.state.name || ''} onChange={this.handleTrimChange} />\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>성별을 선택하세요</InputLabel>\n <div className='type-button-wrapper'>\n <div\n className={`type-button ${this.state.gender && this.state.gender === '남자' ? 'active' : ''}`}\n onClick={() => {\n this.editApply({ type: 'gender', value: '남자' });\n }}\n >\n 남자\n </div>\n <div\n className={`type-button ${this.state.gender && this.state.gender === '여자' ? 'active' : ''}`}\n onClick={() => {\n this.editApply({ type: 'gender', value: '여자' });\n }}\n >\n 여자\n </div>\n </div>\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>생년월일을 입력하세요</InputLabel>\n <WithmateInput\n type='text'\n title='birth'\n value={this.state.birth || ''}\n onChange={this.handleTrimChange}\n placeholder='만 19세 이상의 성인만 메이트로 활동이 가능합니다. 생년월일을 8자리로 입력해주세요'\n />\n </InputWrapper>\n\n {/* <InputWrapper>\n <InputLabel>이미지 파일 첨부</InputLabel>\n {this.state.photo ? (\n <FormImgWrapper>\n <img src={URL.createObjectURL(this.state.photo)} />\n </FormImgWrapper>\n ) : null}\n <input\n type='file'\n accept='image/x-png,image/gif,image/jpeg'\n onChange={ev => {\n this.editApply({ type: 'photo', value: ev.target.files[0] });\n }}\n />\n </InputWrapper> */}\n\n <InputWrapper>\n <InputLabel>개인 이메일을 입력하세요</InputLabel>\n <WithmateInput\n type='text'\n title='email'\n value={this.state.email || ''}\n onChange={this.handleTrimChange}\n placeholder='기입하신 이메일로 프리랜서 근로 계약 문서가 전송되고 온라인 계약 체결이 진행됩니다.'\n />\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>개인 연락처를 입력하세요</InputLabel>\n <WithmateInput\n type='text'\n title='contact'\n value={this.state.contact || ''}\n onChange={this.handleTrimChange}\n placeholder='기입해주신 연락처로 메이트 합격/불합격 여부 알림과 메이트로 활동하실때 사용하시는 아이디와 임시 비밀번호 전송됩니다.'\n />\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>자택 주소를 입력하세요</InputLabel>\n <WithamteInputWithButton\n inputConfig={{\n type: 'text',\n placeholder: 'ex) 서울특별시 도산대로 40, OO 아파트',\n name: 'address',\n value: this.state.address || '',\n }}\n buttonName='검색'\n onButton={() => {\n this.onAddress();\n }}\n />\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>메이트 가입 경로(선택 사항)</InputLabel>\n <WithmateSelect\n style={{ height: '48px', width: '100%', paddingBottom: '5px' }}\n placeholder='위드메이트의 메이트 가입 경로를 선택하세요'\n value={this.state.connection || undefined}\n onChange={value => {\n this.editApply({ type: 'connection', value });\n }}\n >\n <Select.Option value='한국직업평가진흥협회'>한국직업평가진흥협회</Select.Option>\n <Select.Option value='검색'>검색</Select.Option>\n <Select.Option value='광고'>광고</Select.Option>\n <Select.Option value='구직사이트'>구직사이트</Select.Option>\n <Select.Option value='뉴스기사'>뉴스기사</Select.Option>\n <Select.Option value='대신위드유'>대신위드유</Select.Option>\n <Select.Option value='에이플러스'>에이플러스</Select.Option>\n <Select.Option value='복지넷'>복지넷</Select.Option>\n <Select.Option value='강동 50+'>강동 50+</Select.Option>\n <Select.Option value='서대문 50+'>서대문 50+</Select.Option>\n <Select.Option value='국립 암센터'>국립 암센터</Select.Option>\n <Select.Option value='지인'>지인</Select.Option>\n <Select.Option value='카페'>카페•블로그</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n {this.state.connection === '기타' ? (\n <WithmateInput\n type='text'\n title='connection_etc'\n value={this.state.connection_etc || ''}\n onChange={this.handleChange}\n placeholder='메이트 가입 경로를 입력하세요'\n />\n ) : null}\n {this.state.connection === '한국직업평가진흥협회' ? (\n <InputWrapper>\n <InputLabel>자격증 이미지 파일첨부</InputLabel>\n {this.state.license_photo ? (\n <FormImgWrapper>\n <img src={URL.createObjectURL(this.state.license_photo)} />\n </FormImgWrapper>\n ) : null}\n <input\n type='file'\n accept='image/x-png,image/gif,image/jpeg'\n onChange={ev => {\n this.editApply({ type: 'license_photo', value: ev.target.files[0] });\n }}\n />\n </InputWrapper>\n ) : null}\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>메이트 활동 가능 지역을 알려주세요</InputLabel>\n <WithmateSelect\n style={{ height: '48px', width: '100%', paddingBottom: '5px' }}\n placeholder='메이트 활동이 가능한 지역을 선택해주세요 (여러개 가능)'\n value={this.state.si || undefined}\n onChange={value => {\n this.editApply({ type: 'si', value });\n }}\n >\n <Select.Option value='서울'>서울</Select.Option>\n <Select.Option value='경기도'>경기도</Select.Option>\n <Select.Option value='경상남도'>경상남도</Select.Option>\n </WithmateSelect>\n {this.state.si === '서울' ? (\n <WithmateSelect\n mode='multiple'\n style={{ height: '48px', width: '100%', paddingBottom: '5px' }}\n placeholder='메이트 활동이 가능한 지역을 선택해주세요 (여러개 가능)'\n value={this.state.activity_area || []}\n onChange={value => {\n this.editApply({ type: 'activity_area', value });\n }}\n >\n <Select.Option value='강남구'>강남구</Select.Option>\n <Select.Option value='강동구'>강동구</Select.Option>\n <Select.Option value='강북구'>강북구</Select.Option>\n <Select.Option value='강서구'>강서구</Select.Option>\n <Select.Option value='관악구'>관악구</Select.Option>\n <Select.Option value='광진구'>광진구</Select.Option>\n <Select.Option value='구로구'>구로구</Select.Option>\n <Select.Option value='금천구'>금천구</Select.Option>\n <Select.Option value='노원구'>노원구</Select.Option>\n <Select.Option value='도봉구'>도봉구</Select.Option>\n <Select.Option value='동대문구'>동대문구</Select.Option>\n <Select.Option value='동작구'>동작구</Select.Option>\n <Select.Option value='마포구'>마포구</Select.Option>\n <Select.Option value='서대문구'>서대문구</Select.Option>\n <Select.Option value='서초구'>서초구</Select.Option>\n <Select.Option value='성동구'>성동구</Select.Option>\n <Select.Option value='성북구'>성북구</Select.Option>\n <Select.Option value='송파구'>송파구</Select.Option>\n <Select.Option value='양천구'>양천구</Select.Option>\n <Select.Option value='영등포구'>영등포구</Select.Option>\n <Select.Option value='용산구'>용산구</Select.Option>\n <Select.Option value='은평구'>은평구</Select.Option>\n <Select.Option value='종로구'>종로구</Select.Option>\n <Select.Option value='중구'>중구</Select.Option>\n <Select.Option value='중랑구'>중랑구</Select.Option>\n </WithmateSelect>\n ) : null}\n {this.state.si === '경기도' ? (\n <WithmateSelect\n mode='multiple'\n style={{ height: '48px', width: '100%', paddingBottom: '5px' }}\n placeholder='메이트 활동이 가능한 지역을 선택해주세요 (여러개 가능)'\n value={this.state.activity_area || []}\n onChange={value => {\n this.editApply({ type: 'activity_area', value });\n }}\n >\n <Select.Option value='경기남부'>경기남부</Select.Option>\n <Select.Option value='수원시'>수원시</Select.Option>\n <Select.Option value='용인시'>용인시</Select.Option>\n <Select.Option value='성남시'>성남시</Select.Option>\n <Select.Option value='부천시'>부천시</Select.Option>\n <Select.Option value='화성시'>화성시</Select.Option>\n <Select.Option value='안산시'>안산시</Select.Option>\n <Select.Option value='평택시'>평택시</Select.Option>\n <Select.Option value='시흥시'>시흥시</Select.Option>\n <Select.Option value='김포시'>김포시</Select.Option>\n <Select.Option value='광주시'>광주시</Select.Option>\n <Select.Option value='광명시'>광명시</Select.Option>\n <Select.Option value='군포시'>군포시</Select.Option>\n <Select.Option value='하남시'>하남시</Select.Option>\n <Select.Option value='오산시'>오산시</Select.Option>\n <Select.Option value='이천시'>이천시</Select.Option>\n <Select.Option value='안성시'>안성시</Select.Option>\n <Select.Option value='의왕시'>의왕시</Select.Option>\n <Select.Option value='양평군'>양평군</Select.Option>\n <Select.Option value='여주시'>여주시</Select.Option>\n <Select.Option value='과천시'>과천시</Select.Option>\n <Select.Option value='경기북부'>경기북부</Select.Option>\n <Select.Option value='고양시'>고양시</Select.Option>\n <Select.Option value='남양주시'>남양주시</Select.Option>\n <Select.Option value='파주시'>파주시</Select.Option>\n <Select.Option value='의정부시'>의정부시</Select.Option>\n <Select.Option value='양주시'>양주시</Select.Option>\n <Select.Option value='구리시'>구리시</Select.Option>\n <Select.Option value='포천시'>포천시</Select.Option>\n <Select.Option value='동두천시'>동두천시</Select.Option>\n <Select.Option value='가평군'>가평군</Select.Option>\n <Select.Option value='연천군'>연천군</Select.Option>\n </WithmateSelect>\n ) : null}\n\n {this.state.si === '경상남도' ? (\n <WithmateSelect\n mode='multiple'\n style={{ height: '48px', width: '100%', paddingBottom: '5px' }}\n placeholder='메이트 활동이 가능한 지역을 선택해주세요 (여러개 가능)'\n value={this.state.activity_area || []}\n onChange={value => {\n this.editApply({ type: 'activity_area', value });\n }}\n >\n <Select.Option value='창원시'>창원시</Select.Option>\n </WithmateSelect>\n ) : null}\n {/* <WithmateInput\n type='text'\n title='activity_area'\n value={this.state.activity_area || ''}\n onChange={this.handleChange}\n placeholder='메이트 활동이 가능한 서비스 지역과 병원을 알려주세요 (강남구 일대, 종로구 일대, 세브란스 병원, 서울대 병원, 아산병원 등'\n /> */}\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>운전 가능 여부를 선택하세요</InputLabel>\n <Checkbox\n checked={this.state.drive === '가능'}\n onClick={() => {\n this.editApply({ type: 'drive', value: '가능' });\n }}\n >\n 가능\n </Checkbox>\n <Checkbox\n checked={this.state.drive === '불가능'}\n onClick={() => {\n this.editApply({ type: 'drive', value: '불가능' });\n }}\n >\n 불가능\n </Checkbox>\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>치매관련 간병 경력</InputLabel>\n <Checkbox\n checked={this.state.careCareer === '없어요'}\n onClick={() => {\n this.editApply({ type: 'careCareer', value: '없어요' });\n }}\n >\n 없어요\n </Checkbox>\n <Checkbox\n checked={this.state.careCareer === '1년 미만'}\n onClick={() => {\n this.editApply({ type: 'careCareer', value: '1년 미만' });\n }}\n >\n 1년 미만\n </Checkbox>\n <Checkbox\n checked={this.state.careCareer === '2 ~ 3년'}\n onClick={() => {\n this.editApply({ type: 'careCareer', value: '2 ~ 3년' });\n }}\n >\n 2 ~ 3년\n </Checkbox>\n <Checkbox\n checked={this.state.careCareer === '3년이상'}\n onClick={() => {\n this.editApply({ type: 'careCareer', value: '3년이상' });\n }}\n >\n 3년이상\n </Checkbox>\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>개인의 간병 경력 사항을 입력하세요</InputLabel>\n <WithmateTextarea\n style={{ height: '100px' }}\n type='text'\n title='care_experience'\n value={this.state.care_experience || ''}\n onChange={this.handleChange}\n placeholder='메이트 활동을 위해 도움이 되는 자신의 간병 경력을 500자 이내로 자유롭게 남겨주세요 (요양보호사 자격증 보유 & OO요양병원 3년 근무 등 / 간병 이외의 경력도 기재 가능'\n />\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>삼성화재 전문인 배상 책임 보험 가입 동의</InputLabel>\n <p style={{ fontSize: '13px', color: 'gray', paddingBottom: '10px' }}>\n 보험 가입 심사를 위해 설계 동의를 진행해주세요. 위드메이트는 메이트의 서비스 이행 중 안전한 보호를 위해 회사가 부담하는 보험 가입\n 절차를 도와드리고 있습니다. 보험 가입에 대한 의사를 체크해주세요. 해당 절차는 보험 가입 심사 동의를 위한 것이며, 동의를 하는것\n 만으로 보험에 가입이 되는 것은 아닙니다. 보험 가입은 메이트 심사 합격 후 실제 서비스가 매칭된 인원에 한하여 본사와 전화 상담 후\n 진행됩니다.\n </p>\n <Checkbox\n checked={this.state.insurance === '동의'}\n onClick={() => {\n this.editApply({ type: 'insurance', value: '동의' });\n }}\n >\n 동의\n </Checkbox>\n <Checkbox\n checked={this.state.insurance === '비동의'}\n onClick={() => {\n this.editApply({ type: 'insurance', value: '비동의' });\n }}\n >\n 비동의\n </Checkbox>\n </InputWrapper>\n\n <InputWrapper>\n <InputLabel>개인정보 수집 및 이용 동의</InputLabel>\n <p style={{ fontSize: '13px', color: 'gray', paddingBottom: '10px' }}>\n 위드메이트는 본 지원서를 통해 수집한 개인정보를 메이트 심사, 서비스 교육 안내, 동행 서비스 중개를 제외한 타 목적으로 이용하지\n 않습니다. 지원자는 본 개인정보 수집 및 이용에 동의하지 않을 권리가 있습니다. 단, 동의하지 않을 경우 메이트 심사 및 모집에 제한이\n 있을 수 있습니다. 위드메이트의 개인정보 수집 및 이용 동의 여부를 선택해주세요.\n </p>\n <Checkbox\n checked={this.state.privacy === '동의'}\n onClick={() => {\n this.editApply({ type: 'privacy', value: '동의' });\n }}\n >\n 동의\n </Checkbox>\n <Checkbox\n checked={this.state.privacy === '비동의'}\n onClick={() => {\n this.editApply({ type: 'privacy', value: '비동의' });\n }}\n >\n 비동의\n </Checkbox>\n </InputWrapper>\n\n <div style={{ textAlign: 'center' }}>\n <ApplyButton onClick={this.onSendApply}>지원하기</ApplyButton>\n </div>\n </InnerContainer>\n {/* {this.state.onSpin ? (\n <SpinWrapper>\n <Spin size='large' />\n </SpinWrapper>\n ) : null} */}\n </FormContainer>\n );\n }\n}\n\nexport default MateApplyPage;\n","import React from 'react';\nimport { HashLink } from 'react-router-hash-link';\nimport swal from 'sweetalert2';\n\n// components\nimport { GuideNavContainer, InnerContainer, GuideNavWrapper, NavTab, MobileBr } from '../guide.styled';\n\nexport const GuideNav = ({ activeTab, onTab, onReserve }) => {\n return (\n <GuideNavContainer>\n <InnerContainer>\n <GuideNavWrapper>\n <NavTab active={activeTab === 'withmate'}>\n <HashLink\n to='/nemt/service/#withmate'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('withmate');\n }}\n >\n 위드메이트란?\n </HashLink>\n </NavTab>\n {/* <NavTab active={activeTab === 'concept'}>\n <HashLink\n to='/nemt/service/#concept'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('concept');\n }}\n >\n 병원 동행이란?\n </HashLink>\n </NavTab> */}\n <NavTab active={activeTab === 'types'}>\n <HashLink\n to='/nemt/service/#types'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('types');\n }}\n >\n 서비스 종류\n </HashLink>\n </NavTab>\n <NavTab active={activeTab === 'merit'}>\n <HashLink\n to='/nemt/service/#merit'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('merit');\n }}\n >\n 믿을수 있는 위드메이트\n </HashLink>\n </NavTab>\n <NavTab active={activeTab === 'usage'}>\n <HashLink\n to='/nemt/service/#usage'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('usage');\n }}\n >\n 이런분께 추천해요\n </HashLink>\n </NavTab>\n <NavTab active={activeTab === 'partners'}>\n <HashLink\n to='/nemt/service/#partners'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('partners');\n }}\n >\n 위드메이트 파트너\n </HashLink>\n </NavTab>\n </GuideNavWrapper>\n </InnerContainer>\n </GuideNavContainer>\n );\n};\n","import React from 'react';\n\n// components\nimport {\n GuideConceptContainer,\n InnerContainer,\n GuideConceptTitle,\n GuideConceptImageWrapper,\n GuideConceptImage,\n GuideConceptImageMobile,\n GuideConceptTextWrapper,\n GuideConceptTextBlock,\n MobileBr,\n DesktopBr,\n} from '../guide.styled';\n\nexport const GuideConcept = ({}) => {\n return (\n <GuideConceptContainer id='concept'>\n {/* <InnerContainer>\n <GuideConceptTitle>병원 동행이란?</GuideConceptTitle>\n <GuideConceptImageWrapper>\n <GuideConceptImage src='/assets/images/with_concept_new.png' />\n <GuideConceptImageMobile src='/assets/images/with_concept_mobile_new.png' />\n </GuideConceptImageWrapper>\n <GuideConceptTextWrapper>\n <GuideConceptTextBlock>\n <span>‘비응급 의료 동행(Non-Emergency-Medical-Transportation)’</span>으로\n <DesktopBr /> 불리는 ‘병원 동행’ 서비스는 응급 상황에 처하지는 않았으나 정기적, 혹은\n <DesktopBr /> 비정기적으로 의료 기관에 방문해 적절한 의료 조치를 받아야 하는 사람을\n <DesktopBr /> 위한 <span>헬스케어 서비스</span>\n 입니다. 이미 미국과 캐나다, 일본 등의 선진국에서는\n <DesktopBr /> 국가 주도의 복지 서비스로 정착했으며, 이를 넘어 국가 차원의 병원 동행\n <DesktopBr /> 전문 기업 육성에 힘을 쏟고 있는 상황입니다.\n </GuideConceptTextBlock>\n <GuideConceptTextBlock>\n 위드메이트는 <span>국내 최초</span>로 ‘비응급 의료 동행 서비스’의 개념을 구축했으며,\n <DesktopBr /> 유수의 기관과 많은 개인에게 병원 동행 서비스를 제공했습니다.\n <DesktopBr />\n <MobileBr />\n <DesktopBr /> 위드메이트 플랫폼이 제공하는 병원 동행 서비스는 다음과 같습니다.\n </GuideConceptTextBlock>\n </GuideConceptTextWrapper>\n </InnerContainer> */}\n </GuideConceptContainer>\n );\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport swal from 'sweetalert2';\n\n// components\nimport {\n GuideDetailContainer,\n InnerContainer,\n GuideConceptTitle,\n GuideDetailServiceCardWrapper,\n GuideDetailServiceCard,\n GuideCardImage,\n GuideCardName,\n GuideCardType,\n GuideCardDescription,\n GuideCardSpecTitle,\n GuideCardSpecRow,\n MobileBr,\n DesktopBr,\n} from '../guide.styled';\n\nimport { UNEMER, ASSIST } from '../../../Lib/variables';\n\nexport const GuideDetail = () => {\n return (\n <GuideDetailContainer id='types'>\n <InnerContainer>\n <GuideConceptTitle>서비스 종류</GuideConceptTitle>\n <GuideDetailServiceCardWrapper>\n <GuideCard\n source={'/assets/images/art_pro.png'}\n name='병원 동행'\n type='Pro'\n desc={\n <>\n <>\n 위드메이트 동행 전문가가 고객님의\n <br />\n <span>자택에서 병원까지 </span>동행하고, 병원 업무를\n <br />\n 마친 뒤 <span>다시 자택까지</span> 동행합니다.\n </>\n <br />\n <br />\n <>\n <b>요금</b> <br />\n 시간당 25,000원 (추가 30분마다 12,500원)\n </>\n </>\n }\n spec1={\n <>\n 위드메이트 소속 동행 전문가가 <br />\n 자택에서 병원까지 동행\n </>\n }\n spec2={\n <>\n 대중교통, 고객님 소유 자차, 택시 중<br />\n 선택하여 이동\n </>\n }\n spec3={\n <>\n 서비스 종료 이후\n <br />\n 서비스 보고서 열람 가능\n </>\n }\n spec4={\n <>\n 서비스 진행 단계별 카카오톡\n <br />\n 실시간 알림 업데이트 제공\n </>\n }\n />\n <GuideCard\n source={'/assets/images/art_basic.png'}\n name='병원 동행'\n type='Basic'\n desc={\n <>\n <>\n 위드메이트 베이직 서비스는 위드메이트 동행\n <br />\n 전문가가 고객님께서 지정한 의료 시설 혹은\n <br />\n <span>병원 내에서 보호자 대행 업무</span>를 수행합니다.\n </>\n <br />\n <br />\n <>\n <b>요금</b> <br />\n 시간당 15,000원 (추가 30분마다 7,500원)\n </>\n </>\n }\n spec1={\n <>\n 고객님의 진료 일정에 맞춰 위드메이트 <br />\n 소속 동행 전문가가 의료 시설 도착\n </>\n }\n spec2={\n <>\n 지정된 의료 시설에서 고객님 접선 후 <br />\n 진료 시작부터 끝까지 동행\n </>\n }\n spec3={\n <>\n 진료 종료 후 고객님의 상태를 <br />\n 파악하고 이상 없을 시 서비스 종료\n </>\n }\n spec4={\n <>\n 서비스 진행 단계별 카카오톡\n <br />\n 실시간 알림 업데이트 제공\n </>\n }\n />\n <GuideCard\n source={'/assets/images/art_zzz.png'}\n name='보호자 동행'\n type='수면 내시경'\n desc={\n <>\n <>\n {/* 위드메이트 동행 전문가가 고객님께서\n <br />\n <span>자택에서 병원까지 </span>동행하고, 병원 내에서\n <br />\n <span>보호자 대행 업무</span>를 수행합니다. */}\n 고객님께서 수면내시경 검사를 받는\n <br />\n <span>병원 내에서 </span>위드메이트 동행 전문가가\n <br />\n <span>보호자 대행 업무</span>를 수행합니다.\n </>\n <br />\n <br />\n <>\n <b>요금</b> <br />\n 시간당 15,000원 (추가 30분마다 7,500원)\n </>\n </>\n }\n spec1={\n <>\n 고객님의 진료 일정에 맞춰 위드메이트 <br />\n 소속 동행 전문가가 의료 시설 도착\n </>\n }\n spec2={\n <>\n 지정된 의료 시설에서 고객님 접선 후 <br />\n 수면 내시경 검사 시작부터 끝까지 동행\n </>\n }\n spec3={\n <>\n 수면 내시경 검사 종료 후 고객님의 <br />\n 상태를 파악하고 이상 없을 시 종료\n </>\n }\n spec4={\n <>\n 서비스 진행 단계별 카카오톡 <br />\n 실시간 알림 업데이트 제공\n </>\n }\n />\n </GuideDetailServiceCardWrapper>\n </InnerContainer>\n </GuideDetailContainer>\n );\n};\n\nconst GuideCard = ({ source, name, type, desc, spec1, spec2, spec3, spec4 }) => (\n <GuideDetailServiceCard>\n <GuideCardImage src={source} />\n <GuideCardName>{name}</GuideCardName>\n <GuideCardType>{type}</GuideCardType>\n <GuideCardDescription>{desc}</GuideCardDescription>\n <GuideCardSpecTitle>서비스 구성</GuideCardSpecTitle>\n\n <GuideCardSpecRow>\n <span>01</span>\n <p>{spec1}</p>\n </GuideCardSpecRow>\n\n <GuideCardSpecRow>\n <span>02</span>\n <p>{spec2}</p>\n </GuideCardSpecRow>\n\n <GuideCardSpecRow>\n <span>03</span>\n <p>{spec3}</p>\n </GuideCardSpecRow>\n\n <GuideCardSpecRow>\n <span>04</span>\n <p>{spec4}</p>\n </GuideCardSpecRow>\n </GuideDetailServiceCard>\n);\n","import React from 'react';\nimport styled from 'styled-components';\n\n// components\nimport { GuideUsingContainer, InnerContainer, GuideConceptTitle, GuideUsingSubFlexWrapper, GuideUsageFlexbox, MobileBr, DesktopBr } from '../guide.styled';\n\nexport const GuideUsage = () => {\n return (\n <GuideUsingContainer id='usage'>\n <InnerContainer>\n <GuideConceptTitle>이런 분께 추천해요</GuideConceptTitle>\n <GuideUsingSubFlexWrapper>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_legache.png' />\n </div>\n <span>\n 병원에 가시는 <DesktopBr />\n <MobileBr />\n 어르신\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_wheelchair.png' />\n </div>\n <span>\n 거동이 <DesktopBr />\n <MobileBr />\n 힘드신 분\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_x-ray.png' />\n </div>\n <span>\n 항암 / 방사선 치료를 <DesktopBr />\n <MobileBr />\n 받으시는 분\n </span>\n </GuideUsageFlexbox>\n </GuideUsingSubFlexWrapper>\n\n <GuideUsingSubFlexWrapper>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_injection.png' />\n </div>\n <span>\n 수면내시경 등 <DesktopBr />\n <MobileBr />\n 마취가 동반되는 <DesktopBr />\n <MobileBr />\n 치료를 받으시는 분\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_round_trip.png' />\n </div>\n <span>\n 입원 / 퇴원\n <DesktopBr />\n <MobileBr />\n 하시는 분\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_eyecare.png' />\n </div>\n <span>\n 안과 진료/시술을 <DesktopBr />\n <MobileBr />\n 받으시는 분\n </span>\n </GuideUsageFlexbox>\n </GuideUsingSubFlexWrapper>\n\n <GuideUsingSubFlexWrapper>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_detailcheck.png' />\n </div>\n <span>\n 각종 검진을 <DesktopBr />\n <MobileBr />\n 받으시는 분\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_pregnant.png' />\n </div>\n <span>\n 임산부, 산모, <DesktopBr />\n <MobileBr />및 소아\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_blood.png' />\n </div>\n <span>혈액 투석 환자</span>\n </GuideUsageFlexbox>\n </GuideUsingSubFlexWrapper>\n </InnerContainer>\n </GuideUsingContainer>\n );\n};\n","import React from 'react';\nimport {\n MeritContainer,\n InnerContainer,\n MeritHeaderWrapper,\n MeritCardList,\n MeritCardWrapper,\n MeritCardNumber,\n MeritCardDesc,\n MeritCardTitleRow,\n} from '../guide.styled';\n\nexport const Merit = () => {\n return (\n <MeritContainer id='merit'>\n <MeritHeaderWrapper>\n <InnerContainer>\n <div className='wrap'>\n <img src='/assets/images/faith_up.png' />\n <h3>믿을 수 있는 위드메이트</h3>\n </div>\n </InnerContainer>\n </MeritHeaderWrapper>\n <InnerContainer>\n <MeritCardList>\n <MeritCard\n title='인정 받은 서비스'\n source='/assets/images/faith_icon_1.png'\n desc={\n <>\n 위드메이트 병원 동행 서비스는\n <br />\n <span>신한 오픈 이노베이션 2기 우수 기업</span>으로\n <br />\n 선정된 신뢰할 수 있는 서비스입니다.{' '}\n </>\n }\n number='01'\n />\n <MeritCard\n title='검증 받은 서비스'\n source='/assets/images/faith_icon_2.png'\n desc={\n <>\n 위드메이트는 엄격한 검증을 거친 후<br />\n 보건복지부와 고양시, 그리고 국립 암센터가\n <br />\n 주관하는<span>‘고양 해피 케어’</span>컨소시엄의 <br />\n 일원으로 활동 중에 있습니다.\n </>\n }\n number='02'\n />\n <MeritCard\n title='서비스 인력 평점 제도'\n source='/assets/images/faith_icon_3.png'\n desc={\n <>\n 위드메이트는 더욱 높은 서비스 경험을\n <br />\n 제공하기 위해 매뉴얼을 만들고, 서비스 <br />\n 종료 후 <span>고객님의 후기를 반영</span>하여 <br />\n 서비스 인력을 관리합니다.\n </>\n }\n number='03'\n />\n <MeritCard\n title='전문적인 서비스 인력 양성'\n source='/assets/images/faith_icon_4.png'\n desc={\n <>\n 위드메이트는 여성 인력 개발 센터,\n <br /> 재취업 지원 센터, 고용 복지 플러스\n <br /> 센터 등의 전문 기관과 <span>일자리 협업 </span>\n <br />\n <span>프로그램</span>을 운영하며 검증된 서비스\n <br />\n 인력을 주기적으로 양성하고 있습니다.\n </>\n }\n number='04'\n />\n <MeritCard\n title='책임지는 서비스'\n source='/assets/images/faith_icon_5.png'\n desc={\n <>\n 위드메이트는 서비스 제공 인력 전원이\n <br />\n 삼성화재가 제공하는 1억 2천만원 한도의 <br />\n <span>‘전문인 영업 배상 책임 보험’</span>에 가입되어 <br />\n 책임지는 서비스를 제공합니다.\n </>\n }\n number='05'\n />\n <MeritCard\n title='안전한 서비스'\n source='/assets/images/faith_icon_6.png'\n desc={\n <>\n 위드메이트는 <span> 시니어 헬스케어 서비스의</span>\n <br />\n <span>본질은 ‘안전’</span>이라고 생각하고, 서비스 인력의\n <br />\n 정기적인 교육, 자격증 취득 및 보유 여부 <br />\n 점검, 서비스 매뉴얼의 수정 및 보완등을 <br />\n 진행하고 있습니다.\n </>\n }\n number='06'\n />\n </MeritCardList>\n </InnerContainer>\n </MeritContainer>\n );\n};\n\nconst MeritCard = ({ number, title, source, desc }) => (\n <MeritCardWrapper>\n <MeritCardNumber>{number}</MeritCardNumber>\n <MeritCardTitleRow>\n <img src={source} />\n <span>{title}</span>\n </MeritCardTitleRow>\n <MeritCardDesc>{desc}</MeritCardDesc>\n </MeritCardWrapper>\n);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport {\n WithmateContainer,\n InnerContainer,\n WithmateTitle,\n MeritCardDesc,\n FlexDivWrapper,\n BigSideBox,\n SmallSideBox,\n WithmateBg,\n GuideConceptTitle,\n MobileBr,\n DesktopBr,\n} from '../guide.styled';\nexport const Withmate = () => {\n return (\n <WithmateContainer id='withmate'>\n <InnerContainer>\n <FlexDivWrapper top>\n <SmallSideBox>\n <WithmateTitle>\n <img src='/assets/images/new_logo_img.png' />\n <span>위드메이트란?</span>\n </WithmateTitle>\n <Block bigMargin>\n 위드메이트는 <span>온라인 병원 동행 서비스 매칭 플랫폼</span>을<MobileBr /> 시작으로,\n <DesktopBr /> 대한민국에서{' '}\n <span>\n 사회적 의미의 ‘시니어’라는 <MobileBr />\n 단어를 없애기 위해\n </span>{' '}\n 설립된 <DesktopBr />\n <span>\n 시니어 라이프 스타일 <MobileBr />\n 혁신 기업\n </span>\n 입니다.\n </Block>\n <Title>위드메이트의 시작</Title>\n <Block>\n <span>2015년</span>에 설립된 위드메이트는 <span>초고령화 </span>및 <MobileBr />\n <span>1인 가구 시대</span>에 <DesktopBr />\n 접어든 대한민국의 현 상황에 적합한\n <MobileBr />\n <span> 시니어 라이프 스타일 혁신</span>\n <DesktopBr />\n <span>서비스를 개발합니다.</span>\n </Block>\n <Block noMargin>\n 이를 위해 위드메이트는 <MobileBr />\n <span>국내 최초로 병원 동행 서비스를 런칭해</span>\n <MobileBr />\n <DesktopBr />\n <span>탄탄한 신뢰</span>와 <span>안정된 서비스</span> 시스템을 기반으로 <MobileBr />\n 축적되는 <DesktopBr />\n 데이터와 실전 경험을 바탕으로{' '}\n <span>\n 다양한 <MobileBr />\n 신규 서비스를 연구\n </span>\n 하여 <DesktopBr />\n <span>\n 시니어 라이프 스타일 <MobileBr />\n 혁신 기업\n </span>\n 의 길을 걷고 있습니다.\n </Block>\n </SmallSideBox>\n <BigSideBox mHidden>\n <WithmateBg bg='/assets/images/guide_withmate_main1.png' />\n </BigSideBox>\n </FlexDivWrapper>\n {/* <FlexDivWrapper>\n <SmallSideBox mHidden>\n <WithmateBg bg='/assets/images/guide_withmate_main2.png' />\n </SmallSideBox>\n <BigSideBox>\n <Title>등장 배경</Title>\n <Block>\n 2017년, 국내 <span>65세 이상 인구 비율이 14%를 넘으며</span> <MobileBr />\n 대한민국은 공식적으로 <DesktopBr />\n <span>고령 사회</span> 에 접어들었습니다. <MobileBr />\n 다가올 2025년, 65세 이상 인구 비율은 20%를\n <MobileBr />\n <DesktopBr />\n 넘길 것으로 전망되며 이후{' '}\n <span>\n 대한민국은 초고령 사회로 <MobileBr />\n 접어들게 될 것\n </span>\n 입니다.\n </Block>\n\n <Block>\n 이렇게 시니어가 늘어가는 순간에도, <MobileBr />\n <span>현대 사회는 날로 분주해지기만 합니다.</span>\n <DesktopBr />\n 젊은 세대는 <MobileBr />\n 매일 직장과 육아라는 전투를 치르며 살아남기 위한 <MobileBr />\n 발버둥을 치기에도 <DesktopBr />\n 버겁습니다. 이렇게 자기 자신을 <MobileBr />\n 돌보기 위한 시간을 내는 것도 힘겨운 상황 속에서,\n <MobileBr />\n <DesktopBr />\n <span>\n 떨어져 있는 고령 가족에 대한 걱정은 어쩌면 <MobileBr />\n 사치처럼 보이기도 합니다.{' '}\n </span>\n </Block>\n\n <Block noMargin>\n 물리적인 거리와 시간적인 제약, 그리고 직장과 육아가 <MobileBr />\n 주는 압박감을 떨쳐내고 <DesktopBr />\n <span>\n 고령의 가족을 위해 선뜻 <MobileBr />\n 움직일 수 있을까요?{' '}\n </span>\n 시니어는 날로 발전하는 기술의 <DesktopBr />\n <MobileBr />\n 파도 속에서 자신의 생존을 위해 필요한 서비스를 <MobileBr />\n 누군가의 도움 없이 적재적소에 선택해 <DesktopBr />\n <span>\n 자유롭게 <MobileBr />\n 사용할 수 있을까요?\n </span>{' '}\n 그렇다면 우리는 언제까지 이런 <MobileBr />\n 막막한 상황을 견디기만 <DesktopBr />\n 해야 할까요? 위드메이트는 <MobileBr />\n 이렇게 시니어가 겪게 되는 다양한{' '}\n <span>\n 일상 생활의 <MobileBr />\n 불편함을{' '}\n </span>\n <DesktopBr />\n <span>병원 동행 서비스를 시작으로 해소합니다.</span>\n </Block>\n </BigSideBox>\n </FlexDivWrapper> */}\n </InnerContainer>\n </WithmateContainer>\n );\n};\n\nconst Title = styled(GuideConceptTitle)`\n margin-bottom: 24px;\n text-align: left;\n`;\n\nconst Block = styled(MeritCardDesc)`\n font-size: 16px;\n margin-bottom: 24px;\n ${props => props.noMargin && `margin-bottom: 0px;`}\n ${props => props.bigMargin && `margin-bottom: 74px;`}\n\n @media (max-width: 768px) {\n word-break: keep-all;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const GuideBanner = () => {\n return <GuideBannerContainer>위드메이트를 알려드릴게요!</GuideBannerContainer>;\n};\n\nconst GuideBannerContainer = styled.div`\n width: 100%;\n height: 235px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n font-size: 40px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.2;\n letter-spacing: -0.7px;\n text-align: center;\n color: #ffffff;\n\n background-image: url('/assets/images/guide_title_bg.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n @media (max-width: 768px) {\n font-size: 22px;\n background-position: left;\n }\n`;\n","import React from 'react';\nimport _ from 'lodash';\nimport styled from 'styled-components';\nimport { message } from 'antd';\n\n// components\nimport { GuideNav } from './Section/nav';\nimport { GuideConcept } from './Section/concept';\nimport { GuideDetail } from './Section/detail';\nimport { GuideUsage } from './Section/usage';\nimport { WithmatePartners } from '../Home/Section/partners';\nimport { Merit } from './Section/merit';\nimport { Withmate } from './Section/withmate';\nimport { GuideBanner } from './Section/banner';\n\nimport { Container } from './guide.styled';\nimport { NoramlReserveModal } from '../../Components/newModal';\n\nclass GuidePage extends React.PureComponent {\n state = {\n activeTab: 'concept',\n reserveModal: false,\n reserveType: null,\n step: 1,\n mobile_menu: false,\n addHalfTime: false,\n };\n\n inputHandler = ({ type, value }) => {\n this.setState({ [type]: value });\n };\n\n inputDeepHandler = ({ type, deepType, value }) => {\n this.setState(prevState => ({\n [type]: {\n ...prevState[type],\n [deepType]: value,\n },\n }));\n };\n\n onTab = tab => {\n this.setState({\n activeTab: tab,\n });\n };\n\n onRoute = path => {\n this.props.history.push(path);\n };\n\n render() {\n const { activeTab, reserveModal, step, addHalfTime, popoverVisible } = this.state;\n\n return (\n <Container>\n <GuideBanner />\n <GuideNav\n activeTab={activeTab}\n onTab={this.onTab}\n onReserve={serviceType => {\n this.setState({\n reserveModal: true,\n temp: {\n page: 1,\n service: 'unemergency',\n addTime: '60',\n payMethod: 'transfer',\n sex: '남',\n transport: 'common',\n report: false,\n },\n });\n }}\n />\n <Withmate />\n <GuideConcept />\n <GuideDetail />\n <Merit />\n <GuideUsage />\n <WithmatePartners />\n </Container>\n );\n }\n}\n\nexport default GuidePage;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\n\n// component\nimport GuidePage from './guide';\nimport { MATE } from '../../Lib/variables';\n\n// styles\nimport StyledContainer from './guide.styled';\n\n// actions\nimport { serviceReserve, editResrveForm } from '../../Reducer/Modules/app';\n\nclass GuideContainer extends React.PureComponent {\n componentDidMount = () => {};\n\n render() {\n return (\n <StyledContainer>\n <GuidePage {...this.props} />\n </StyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\n\nconst mapStateToDispatch = dispatch => ({\n serviceReserve: ({ userId, info }) => dispatch(serviceReserve({ userId, info })),\n editForm: ({ type, value }) => dispatch(editResrveForm({ type, value })),\n});\n\nexport default connect(mapStateToProps, mapStateToDispatch)(GuideContainer);\n","import styled from 'styled-components';\n\nconst StyledContainer = styled.div``;\n\nexport default StyledContainer;\n\nexport const Container = styled.div``;\n\nexport const NemtTitleWrapper = styled.div`\n margin-top: 104px;\n margin-bottom: 58px;\n`;\n\nexport const InnerContainer = styled.div`\n width: 100%;\n\n max-width: 1120px;\n margin: 0 auto;\n\n @media (max-width: 1120px) {\n padding-left: 32px;\n padding-right: 32px;\n }\n\n @media (max-width: 768px) {\n padding-left: 20px;\n padding-right: 20px;\n }\n`;\n\nexport const NemtTitle = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 40px;\n line-height: 46px;\n\n text-align: center;\n letter-spacing: -0.6px;\n\n color: rgba(0, 0, 0, 0.8);\n`;\n\nexport const NemtServiceWrapper = styled.div`\n display: flex;\n flex-direction: column;\n\n justify-content: flex-start;\n`;\n\nexport const NemtServiceFlexWrapper = styled.div`\n display: flex;\n\n align-items: flex-start;\n justify-content: center;\n\n margin-bottom: 30px;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const NemtBox = styled.div`\n margin-bottom: 30px;\n position: relative;\n\n @media (max-width: 768px) {\n margin-bottom: 80px;\n }\n`;\n\nexport const NemtColumnBox = styled(NemtBox)`\n width: calc((100% - 20px) / 2);\n\n &:first-child {\n margin-right: 20px;\n }\n\n @media (max-width: 768px) {\n &:first-child {\n margin-right: 0px;\n }\n\n width: 100%;\n }\n`;\n\nexport const NemtBoxTitle = styled.p`\n position: absolute;\n top: 34px;\n left: 34px;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 16px;\n line-height: 20px;\n\n letter-spacing: -0.4px;\n\n > span {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 26px;\n line-height: 44px;\n\n letter-spacing: -0.777778px;\n }\n\n @media (max-width: 768px) {\n position: relative;\n top: 0px;\n left: 0px;\n\n margin-bottom: 4px;\n\n font-size: 15px;\n line-height: 21px;\n\n > span {\n font-size: 24px;\n line-height: 40px;\n }\n }\n`;\n\nexport const NemtServiceImageWrapper = styled.div`\n border-radius: 12px;\n overflow: hidden;\n\n &.desktop-visible {\n display: block;\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n\n &.mobile-visible {\n display: none;\n\n @media (max-width: 768px) {\n display: block;\n }\n }\n\n > img {\n width: 100%;\n object-fit: contain;\n }\n`;\n\nexport const MobileBr = styled.br`\n display: none;\n\n @media (max-width: 768px) {\n display: block;\n }\n`;\n\nexport const DesktopBr = styled.br`\n display: block;\n\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const NemtInfobox = styled.div`\n padding: 24px;\n\n @media (max-width: 768px) {\n padding: 0px;\n padding-top: 24px;\n }\n`;\n\nexport const ReserveButton = styled.span`\n width: 246px;\n height: 48px;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n background: #3bc1ff;\n border-radius: 4px;\n\n cursor: pointer;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 14px;\n line-height: 24px;\n text-align: center;\n\n color: #ffffff;\n\n > img {\n width: 18px;\n height: 18px;\n\n margin-right: 6px;\n }\n\n margin-bottom: 20px;\n\n &:hover {\n opacity: 0.85;\n transition: all 0.5s;\n }\n\n @media (max-width: 430px) {\n font-size: 12px;\n }\n\n @media (max-width: 430px) {\n width: 100%;\n }\n`;\n\nexport const NemtDescription = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 14px;\n line-height: 20px;\n\n word-break: keep-all;\n\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n color: #3bc1ff;\n cursor: pointer;\n }\n\n @media (max-width: 768px) {\n font-size: 12px;\n line-height: 18px;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { message as Message } from 'antd';\n\n// components\nimport {\n Container,\n InnerContainer,\n NemtTitleWrapper,\n NemtTitle,\n NemtServiceWrapper,\n NemtBox,\n NemtColumnBox,\n NemtBoxTitle,\n NemtServiceFlexWrapper,\n NemtServiceImageWrapper,\n ReserveButton,\n NemtInfobox,\n NemtDescription,\n MobileBr,\n DesktopBr,\n} from './nemt.styled';\n\n// utils\nimport axios from '../../Lib/axios';\n\n// modal\nimport { EmergencyCorpSearchModal, ShareCarRequestModal } from '../../Components/modal';\n\nclass NemtPage extends React.PureComponent {\n state = {\n activeTab: 'concept',\n reserveModal: false,\n searchModal: false,\n emergencyList: [],\n emergencyKeyword: '',\n requestModal: false,\n requestInfo: {\n corp: '',\n address: '',\n manager: '',\n contact: '',\n message: '',\n },\n };\n\n componentDidMount = async () => {\n const { data } = await axios.get(`/v1/corp/list`);\n if (!data) return null;\n\n if (data && Array.isArray(data)) {\n this.setState({\n emergencyList: data,\n });\n }\n };\n\n onRoute = path => {\n this.props.history.push(path);\n };\n\n onShareRequest = async () => {\n const {\n requestInfo: { corp, address, manager, contact, message },\n } = this.state;\n if (!corp || !address || !manager || !contact || !message) return Message.info('정보를 기입해주세요.');\n\n const { data } = await axios.post('/v1/share/add', {\n corp,\n address,\n manager,\n contact,\n message,\n });\n\n if (!data) {\n return Message.error('일시적인 서버장애가 발생했습니다. 다시 시도해주세요.');\n }\n\n if (data === 'check parameters') {\n return Message.warning('정보를 모두 기입해주세요.');\n }\n\n if (data === 'success') {\n Message.success('셔틀 셰어링 서비스를 요청하였습니다.');\n\n this.setState({\n requestModal: false,\n requestInfo: {\n corp: '',\n address: '',\n manager: '',\n contact: '',\n message: '',\n },\n });\n }\n };\n\n render() {\n const { requestInfo, emergencyKeyword, emergencyList } = this.state;\n\n return (\n <Container>\n <InnerContainer>\n <NemtTitleWrapper>\n <NemtTitle>서비스 안내</NemtTitle>\n </NemtTitleWrapper>\n\n <NemtServiceWrapper>\n <NemtBox>\n <NemtServiceImageWrapper className='desktop-visible'>\n <img src='/assets/images/service_around_desktop.png' />\n </NemtServiceImageWrapper>\n <NemtServiceImageWrapper className='mobile-visible'>\n <img src='/assets/images/service_around_mobile.png' />\n </NemtServiceImageWrapper>\n\n <NemtInfobox>\n <ReserveButton\n onClick={() => {\n this.props.history.push('/nemt/service');\n }}\n >\n <img src='/assets/images/icon_calendar.png' />\n 예약하기\n </ReserveButton>\n\n <NemtBoxTitle style={{ color: '#236037' }}>\n 위드메이트\n <DesktopBr />\n <MobileBr />\n <span>병원 동행 서비스</span>\n </NemtBoxTitle>\n\n <NemtDescription>\n 병원 동행 서비스는 응급 상황에 처하지는 않았으나 정기적, 혹은 비정기적으로 <DesktopBr />\n 의료 기관에 방문해 적절한 의료 조치를 받아야 하는 분들을 위한 서비스입니다. <DesktopBr />\n <MobileBr />\n 자세한 설명은{' '}\n <span\n onClick={() => {\n this.props.history.push('/nemt/service');\n }}\n >\n 병원동행 서비스 NEMT 페이지\n </span>\n 에서 확인이 가능합니다.\n </NemtDescription>\n </NemtInfobox>\n </NemtBox>\n </NemtServiceWrapper>\n\n <NemtServiceFlexWrapper>\n <NemtColumnBox id='shuttle-service'>\n <NemtServiceImageWrapper>\n <img src='/assets/images/shuttle.png' />\n </NemtServiceImageWrapper>\n\n <NemtInfobox>\n <ReserveButton\n onClick={() => {\n this.setState({ requestModal: true });\n }}\n >\n <img src='/assets/images/icon_message.png' />\n 문의하기\n </ReserveButton>\n\n <NemtBoxTitle style={{ color: '#1D5DA2' }}>\n 위드메이트\n <DesktopBr />\n <MobileBr />\n <span>셔틀 셰어링 서비스</span>\n </NemtBoxTitle>\n\n <NemtDescription>\n 요양 시설 운영비 중 차량 유지 비용은 주유비, 운행 직원 급여, 식대 등이 <DesktopBr />\n 더해질 경우 막대한 비중을 차지합니다. 하지만 노후 차량을 사용하거나, <DesktopBr />\n 운행 직원 수를 줄일 경우 입소 환자 안전에 문제가 생기기 때문에 <DesktopBr />\n 요양 시설이 차량 유지 비용을 줄이는 방법은 사실상 없습니다.\n <DesktopBr />\n <DesktopBr />\n 이에 위드메이트는 요양 시설이 차량 유지 비용을 절감할 수 있는\n <DesktopBr />\n ‘셔틀 셰어링’ 서비스를 도입했습니다. A와 B라는 두 곳의 요양원이 <DesktopBr />\n 위드메이트가 제공하는 셔틀과 기사를 공유하며 잉여 시간과 좌석을 함께 <DesktopBr />\n 사용하는 방법입니다. A 병원의 남는 좌석을 B 병원이 이용하거나, <DesktopBr />\n B 병원의 환자가 치료를 받는 동안 A 병원의 환자가 차량을 이용하는 방식이죠.\n <DesktopBr />\n <DesktopBr />\n 위드메이트의 셔틀 쉐어링 서비스가 필요한 기관은 <DesktopBr />\n 문의 접수 버튼을 클릭하세요!\n </NemtDescription>\n </NemtInfobox>\n </NemtColumnBox>\n\n <NemtColumnBox id='search-service'>\n <NemtServiceImageWrapper>\n <img src='/assets/images/emergency_car.png' />\n </NemtServiceImageWrapper>\n\n <NemtInfobox>\n <ReserveButton\n onClick={() => {\n this.setState({ searchModal: true });\n }}\n >\n <img src='/assets/images/icon_search.png' />\n 검색하기\n </ReserveButton>\n\n <NemtBoxTitle style={{ color: '#B85465' }}>\n 위드메이트\n <DesktopBr />\n <MobileBr />\n <span>사설 구급 업체 검색 서비스 </span>\n </NemtBoxTitle>\n\n <NemtDescription>\n '구급’이라는 단어가 들어간 탓에, 흔히 사설 구급차를 떠올렸을 때 응급 상황이 <DesktopBr />\n 아닌 이상 사용할 일이 없을 것이라고 생각이 듭니다. 하지만 사설 구급차는 <DesktopBr />\n 요양 시설 입소 환자의 병원 이송, 대형 행사 진행 중 비상 대기, 정상 거동이 <DesktopBr />\n 불가한 환자 이송 등 일상 생활의 다양한 분야에 필요한 서비스입니다.\n <DesktopBr />\n <DesktopBr />\n 위드메이트는 플랫폼 이용자에게 무료로 각 지역의 사설 구급 업체를 <DesktopBr />\n 검색할 수 있는 서비스를 제공하고 있습니다. 지역별로 나눠 편리하게 <DesktopBr />\n 사설 구급 업체를 검색해보세요!\n </NemtDescription>\n </NemtInfobox>\n </NemtColumnBox>\n </NemtServiceFlexWrapper>\n </InnerContainer>\n\n {this.state.searchModal ? (\n <EmergencyCorpSearchModal\n data={emergencyList}\n keyword={emergencyKeyword}\n inputHandler={value => {\n this.setState({ emergencyKeyword: value });\n }}\n visibleHandler={() => {\n this.setState({ searchModal: false });\n }}\n />\n ) : null}\n {this.state.requestModal ? (\n <ShareCarRequestModal\n data={requestInfo}\n visibleHandler={() => {\n this.setState({ requestModal: false });\n }}\n inputHandler={({ type, value }) => {\n this.setState(prevState => ({\n requestInfo: {\n ...prevState.requestInfo,\n [type]: value,\n },\n }));\n }}\n onSave={this.onShareRequest}\n />\n ) : null}\n </Container>\n );\n }\n}\n\nexport default NemtPage;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\n\n// component\nimport NemtPage from './nemt';\nimport { MATE } from '../../Lib/variables';\n\n// styles\nimport StyledContainer from './nemt.styled';\n\n// actions\nimport {} from '../../Reducer/Modules/app';\n\nclass NemtContainer extends React.PureComponent {\n componentDidMount = () => {};\n\n render() {\n return (\n <StyledContainer>\n <NemtPage {...this.props} />\n </StyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\n\nconst mapStateToDispatch = dispatch => ({});\n\nexport default connect(mapStateToProps, mapStateToDispatch)(NemtContainer);\n","import React from \"react\";\nimport Modal from \"react-modal\";\nimport styled from 'styled-components';\nimport { Button, message, Table } from 'antd';\n\nimport ProfileStyledContainer from \"../Auth/AuthPages/Profile/profile.styled\";\nimport { HalfWidthButton } from \"../../Components/Common/button\";\nimport { DivisionLine } from \"../../Components/Common/input\";\nimport { getPatientInfo } from \"../../Lib/Api/auth\";\n\nconst customStyles = {\n\n overlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(15, 15, 15, 0.79)\",\n },\n content: {\n position: \"absolute\",\n top: \"30px\",\n height: \"60%\",\n border: \"1px solid #ccc\",\n background: \"#ffffff\",\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n borderRadius: \"4px\",\n outline: \"none\",\n padding: \"20px\",\n },\n}\n\nconst patientColumn = ({ onCheck }) => {\n return [\n {\n title: '이름',\n dataIndex: 'name',\n align: 'center',\n width: '100px'\n },\n {\n title: '나이',\n dataIndex: 'age',\n align: 'center',\n width: '100px'\n },\n {\n title: '선택',\n align: 'center',\n width: '100px',\n dataIndex: '_id',\n render: (_id, data) =>\n <Button\n style={{ width: '70px', height: '30px' }}\n onClick={() => { onCheck(data) }}\n >\n 선택\n </Button>\n },\n ]\n}\n\nclass PatientProfileListComponent extends React.PureComponent {\n state = {\n patientInfo: {},\n patientList: [],\n patientId: '',\n patientInfo: null\n };\n\n componentWillUnmount = () => {\n this.setState({ patientInfo: null });\n };\n\n onChoose = () => {\n const { patientInfo } = this.state;\n console.log(patientInfo)\n\n getPatientInfo({ patientId: patientInfo._id }).then(resolve => {\n console.log(resolve)\n const { data } = resolve;\n if (resolve && resolve.data && resolve.data.message === 'success') {\n if (patientInfo && patientInfo.reservedStarting) delete data.starting;\n if (patientInfo && patientInfo.environment) delete data.environment;\n if (patientInfo && patientInfo.walk) delete data.walk;\n\n this.setState({ patientInfo: resolve.data.data })\n } else {\n message.info('선택하신 환자 프로필이 존재하지 않습니다.');\n }\n });\n };\n\n onChangeCheckbox = ({ }) => {\n\n };\n\n // 체크박스 선택\n // rowSelection = {\n // onChange: (selectedRowKeys , selectedRows ) => {\n // console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);\n // },\n // getCheckboxProps: (record ) => {\n // console.log(record)\n // }\n // };\n\n render() {\n // console.log(this.props)\n return (\n <Modal\n isOpen={this.props.visible}\n ariaHideApp={false}\n // onRequestClose={modalOff} // esc키 또는 background 클릭 시 모달창 닫힘\n style={{ ...customStyles }}\n >\n <ProfileStyledContainer>\n <div className='inner-container'>\n <div className='profile-form'>\n <div className='form'>\n <div>\n <CloseButton src={'/assets/images/close.png'} onClick={this.props.onClose} style={{ width: '22px', height: '22px' }} />\n </div>\n <TitleSection>\n <WideModalTitle>환자 프로필 목록</WideModalTitle>\n <AlertText>\n * 환자 프로필 정보를 선택할 수 있습니다. <br />\n [ 마이페이지 ]에서 환자 프로필을 등록하실 수 있습니다.\n </AlertText>\n </TitleSection>\n\n <br />\n\n <DivisionLine />\n\n <div className='profileList'>\n <Table\n dataSource={this.props.list}\n columns={patientColumn({\n onCheck: (data) => {\n this.props.onUpdatePatient(data);\n this.props.onClose()\n }\n })}\n rowKey='_id'\n pagination={{\n pageSize: 3,\n hideOnSinglePage: true,\n size: 'small',\n }}\n // rowSelection={{\n // type: 'checkbox',\n // ...this.rowSelection\n // }}\n // rowKey='_id'\n />\n </div>\n\n <DivisionLine />\n\n <ButtonWrap>\n <HalfWidthButton style={{ margin: '0 auto' }} bg='#3bc1ff'\n onClick={this.props.onClose}\n >\n 닫기\n </HalfWidthButton>\n </ButtonWrap>\n </div>\n </div>\n </div>\n </ProfileStyledContainer >\n </Modal >\n );\n }\n};\n\nexport default PatientProfileListComponent;\n\nconst CloseButton = styled.img`\n position: absolute;\n top: 16px;\n right: 12px;\n\n width: 18px;\n height: 18px;\n\n object-fit: cover;\n cursor: pointer;\n\n @media (max-width: 480px) {\n width: 16px;\n height: 16px;\n\n &.desktop-only {\n display: none;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nconst TitleSection = styled.div``;\n\nconst WideModalTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n`;\n\nconst AlertText = styled.div`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.52;\n letter-spacing: -0.3px;\n text-align: left;\n color: #ff5500;\n`;","import React from 'react';\nimport Modal from 'react-modal';\nimport styled from 'styled-components';\nimport { Button, Input, message, Table } from 'antd';\n\nimport ProfileStyledContainer from '../Auth/AuthPages/Profile/profile.styled';\nimport { HalfWidthButton } from '../../Components/Common/button';\nimport { DivisionLine } from '../../Components/Common/input';\nimport { getMateInfo } from '../../Lib/Api/auth';\nimport axios from '../../Lib/axios';\n\nconst customStyles = {\n overlay: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(15, 15, 15, 0.79)',\n },\n content: {\n position: 'absolute',\n top: '30px',\n height: '90%',\n border: '1px solid #ccc',\n background: '#ffffff',\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n borderRadius: '4px',\n outline: 'none',\n padding: '20px',\n },\n};\n\nconst mateListColumn = ({ onCheck }) => {\n return [\n {\n title: '이름',\n dataIndex: 'name',\n align: 'center',\n width: '100px',\n sorter: (a, b) => a.name.localeCompare(b.name),\n },\n // {\n // title: '성별',\n // dataIndex: 'sex',\n // align: 'center',\n // width: '100px',\n // render: sex => <span>{sex === '남' ? '남자' : '여자'}</span>\n // },\n {\n title: '사진',\n dataIndex: 'photo',\n align: 'center',\n width: '100px',\n render: photoURL => <img src={photoURL} style={{ width: '100px', height: 'auto' }} />,\n },\n // {\n // title: '수행 이력',\n // dataIndex: 'review',\n // align: 'center',\n // width: '100px',\n // render: review => <span>Pro 서비스 이력: {(review && review.unemergency) || 0}건\n // <br />Basic 서비스 이력: {(review && review.assist) || 0}건</span>,\n // },\n {\n title: '선택',\n align: 'center',\n width: '100px',\n dataIndex: '_id',\n render: (_id, data) => (\n <Button\n style={{ width: '70px', height: '30px' }}\n onClick={() => {\n onCheck(data);\n }}\n >\n 선택\n </Button>\n ),\n },\n ];\n};\n\nclass PatientProfileListComponent extends React.PureComponent {\n state = {\n mateInfo: {},\n mateList: [],\n mateId: '',\n keyword: '',\n review: null,\n };\n\n componentWillUnmount = () => {\n this.setState({ mateInfo: null });\n };\n\n onChoose = () => {\n const { mateInfo, mateId } = this.state;\n console.log(mateInfo, mateId);\n\n getMateInfo({ mateId: mateInfo._id }).then(resolve => {\n console.log(resolve);\n const { data } = resolve;\n if (resolve && resolve.data && resolve.data.message === 'success') {\n this.setState({ mateInfo: resolve.data.data });\n } else {\n message.info('선택하신 메이트가 존재하지 않습니다.');\n }\n });\n };\n\n getList = () => {\n const { keyword } = this.state;\n\n const list = this.props.list.filter(item => item && item.name && item.name.toLowerCase().includes(keyword));\n\n return list;\n };\n\n render() {\n const list = this.getList();\n // console.log(this.props)\n return (\n <Modal\n isOpen={this.props.visible}\n ariaHideApp={false}\n // onRequestClose={modalOff} // esc키 또는 background 클릭 시 모달창 닫힘\n style={{ ...customStyles }}\n >\n <ProfileStyledContainer>\n <div className='inner-container'>\n <div className='mate-form'>\n <div className='form'>\n <div>\n <CloseButton src={'/assets/images/close.png'} onClick={this.props.onClose} style={{ width: '22px', height: '22px' }} />\n </div>\n <TitleSection>\n <WideModalTitle>메이트 선택하기</WideModalTitle>\n <AlertText>* 서비스 수행을 함께할 메이트를 선택하실 수 있습니다.</AlertText>\n </TitleSection>\n\n <br />\n\n <DivisionLine />\n\n <div className='mateList'>\n <Input\n value={this.state.keyword}\n onChange={ev => {\n this.setState({ keyword: ev.target.value });\n }}\n placeholder='메이트 이름으로 검색하세요.'\n style={{ marginBottom: '24px' }}\n />\n <Table\n dataSource={list}\n columns={mateListColumn({\n onCheck: data => {\n this.props.onUpdateMate(data);\n this.props.onClose();\n },\n })}\n rowKey='_id'\n pagination={{\n pageSize: 5,\n hideOnSinglePage: true,\n size: 'small',\n }}\n />\n </div>\n\n <DivisionLine />\n\n <ButtonWrap>\n <HalfWidthButton style={{ margin: '0 auto' }} bg='#3bc1ff' onClick={this.props.onClose}>\n 닫기\n </HalfWidthButton>\n </ButtonWrap>\n </div>\n </div>\n </div>\n </ProfileStyledContainer>\n </Modal>\n );\n }\n}\n\nexport default PatientProfileListComponent;\n\nconst CloseButton = styled.img`\n position: absolute;\n top: 16px;\n right: 12px;\n\n width: 18px;\n height: 18px;\n\n object-fit: cover;\n cursor: pointer;\n\n @media (max-width: 480px) {\n width: 16px;\n height: 16px;\n\n &.desktop-only {\n display: none;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nconst TitleSection = styled.div``;\n\nconst WideModalTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n`;\n\nconst AlertText = styled.div`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.52;\n letter-spacing: -0.3px;\n text-align: left;\n color: #ff5500;\n`;\n","import React from \"react\";\nimport Modal from \"react-modal\";\nimport styled from 'styled-components';\nimport { Button, message, Table } from 'antd';\n\nimport CardStyledContainer from \"../Auth/AuthPages/Card/card.styled\";\nimport { HalfWidthButton } from \"../../Components/Common/button\";\nimport { DivisionLine } from \"../../Components/Common/input\";\nimport { getCardInfo } from \"../../Lib/Api/auth\";\n\nconst customStyles = {\n overlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(15, 15, 15, 0.79)\",\n },\n content: {\n position: \"absolute\",\n top: \"30px\",\n height: \"40%\",\n border: \"1px solid #ccc\",\n background: \"#ffffff\",\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n borderRadius: \"4px\",\n outline: \"none\",\n padding: \"20px\",\n }\n}\n\nconst cardColumn = ({ onCheck }) => {\n return [\n {\n title: '카드명',\n dataIndex: 'cardName',\n align: 'center',\n width: '80px'\n },\n {\n title: '카드번호',\n dataIndex: 'cardNum',\n align: 'center',\n render: cardNum => <span>**** - **** - **** - {cardNum.slice(15, 19)}</span>\n },\n {\n title: '선택',\n align: 'center',\n width: '60px',\n dataIndex: '_id',\n render: (_id, data) =>\n <Button\n style={{ width: '60px', height: '30px' }}\n onClick={() => { onCheck(data) }}\n >\n 선택\n </Button>\n },\n ]\n}\n\nclass CardListComponent extends React.PureComponent {\n state = {\n cardInfo: {},\n cardList: [],\n cardId: '',\n cardInfo: null\n };\n\n componentWillUnmount = () => {\n this.setState({ cardInfo: null });\n };\n\n onChoose = () => {\n const { cardInfo } = this.state;\n console.log(cardInfo)\n\n getCardInfo({ cardId: cardInfo._id }).then(resolve => {\n console.log(resolve)\n const { data } = resolve;\n if (resolve && resolve.data && resolve.data.message === 'success') {\n if (cardInfo && cardInfo.cardName) delete data.cardName;\n if (cardInfo && cardInfo.cardNum) delete data.cardNum;\n if (cardInfo && cardInfo.year) delete data.year;\n if (cardInfo && cardInfo.month) delete data.month;\n\n this.setState({ cardInfo: resolve.data.data })\n } else {\n message.info('선택하신 카드정보가 존재하지 않습니다.');\n }\n });\n };\n\n render() {\n // console.log(this.props)\n return (\n <Modal\n isOpen={this.props.visible}\n ariaHideApp={false}\n // onRequestClose={modalOff} // esc키 또는 background 클릭 시 모달창 닫힘\n style={{ ...customStyles }}\n >\n <CardStyledContainer>\n <div className='inner-container'>\n <div className='profile-form'>\n <div className='form'>\n <div>\n <CloseButton src={'/assets/images/close.png'} onClick={this.props.onClose} style={{ width: '22px', height: '22px' }} />\n </div>\n <TitleSection>\n <WideModalTitle>결제 카드 목록</WideModalTitle>\n <AlertText>\n * 결제하실 카드를 선택할 수 있습니다. <br />\n [ 마이페이지 ]에서 결제 카드를 등록하실 수 있습니다.\n </AlertText>\n </TitleSection>\n\n <br />\n\n <DivisionLine />\n\n <div className='profileList'>\n <Table\n dataSource={this.props.list}\n columns={cardColumn({\n onCheck: (data) => {\n this.props.onUpdateCard(data);\n this.props.onClose()\n }\n })}\n rowKey='_id'\n pagination={{\n pageSize: 3,\n hideOnSinglePage: true,\n size: 'small',\n }}\n />\n </div>\n\n <DivisionLine />\n\n <ButtonWrap>\n <HalfWidthButton style={{ margin: '0 auto' }} bg='#3bc1ff'\n onClick={this.props.onClose}\n >\n 닫기\n </HalfWidthButton>\n </ButtonWrap>\n </div>\n </div>\n </div>\n </CardStyledContainer >\n </Modal >\n );\n }\n};\n\nexport default CardListComponent;\n\nconst CloseButton = styled.img`\n position: absolute;\n top: 16px;\n right: 12px;\n\n width: 18px;\n height: 18px;\n\n object-fit: cover;\n cursor: pointer;\n\n @media (max-width: 480px) {\n width: 16px;\n height: 16px;\n\n &.desktop-only {\n display: none;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n width: 100%;\n display: flex;\n align-items: center;\n`;\n\nconst TitleSection = styled.div``;\n\nconst WideModalTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 4px;\n`;\n\nconst AlertText = styled.div`\n font-size: 14px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.52;\n letter-spacing: -0.3px;\n text-align: left;\n color: #ff5500;\n`;","import React from 'react';\nimport styled from 'styled-components';\nimport { Button, Checkbox, message, notification, Radio, Select } from 'antd';\nimport moment from 'moment';\nimport 'moment/locale/ko';\nimport locale from 'antd/es/date-picker/locale/ko_KR';\nimport holidayKR from 'holiday-kr';\nimport swal from 'sweetalert2';\n\n// libs\nimport axios from '../../Lib/axios';\nimport { combineDateAndTime } from '../../Lib/utils';\nimport { celluarValidate } from '../../Lib/regex';\n\n// styled\nimport { ReserveTopCover, ReservePageContainer, ResrevePageInnerContainer, ResrevePageHalfInnerContainer, MobileBr, DesktopBr } from './reserve.styled';\nimport { TopBannerSection, TopBannerText, TopBannerDescription } from './reserve.styled';\nimport { StepSectionContainer, StepButton, LastStepButton, StepButtonWrapper, StepArrow } from './reserve.styled';\nimport { NextStepGudieContainer, NextStepEmoj, NextStepTitle, NextStepArrowDown } from './reserve.styled';\nimport { ServiceSectionContainer, ServiceSectionTitle, ServiceSectionDescription } from './reserve.styled';\nimport { ServiceCardWrapper, ServiceCardButton, ServiceCardList } from './reserve.styled';\nimport { ZzzServiceWrapper, ZzzArt, ZzzDescription } from './reserve.styled';\nimport { AlzheServiceWrapper, AlzheArt, AlzheDescription } from './reserve.styled';\nimport { ServiceTypeSectionContainer, ServiceTypeWrapper } from './reserve.styled';\nimport { ServiceTypeCardWrapper, ServiceTypeCardImg, NextStepButton, ServiceTypeName, ServiceTypeDescription } from './reserve.styled';\nimport { FormContainer, MobileStepImage, TopBannerSubDescription, UnderLineText, FormWrapper, FormMainTitle, FormMainAlert } from './reserve.styled';\nimport {\n ServiceName,\n LabelValue,\n DashAndText,\n Sexes,\n LabelAndValueRow,\n PriceValue,\n LabelDescription,\n FlexFormWrapper,\n ResultFormWrapper,\n PriceDetailLabel,\n PriceDetailValue,\n CongraturateLogo,\n DoneResultWrapper,\n} from './reserve.styled';\n\n// components\nimport {\n DivisionLine,\n WithmateLabel,\n WithmateInput,\n WithmateTextarea,\n WithmateSelect,\n FlexWrapper,\n WithmateTimepicker,\n WithamteInputWithButton,\n WithmateDatePicker,\n} from '../../Components/Common/input';\nimport { ButtonWrapper, RadiusHalfWidthButton } from '../../Components/Common/button';\n\nimport PatientProfileListModal from './patientListModal';\nimport MateModal from './mateListModal';\nimport CardListModal from './cardListModal';\nimport { fetchPatient, fetchMate, fetchCard } from '../../Lib/Api/auth';\nimport { Label } from 'reactstrap';\n\nexport default class ReservationPage extends React.PureComponent {\n state = {\n step: 'items', // items, basic, form, confirm, done\n big5: [],\n local: [],\n corpBy: [],\n zzz: [],\n alzhe: [],\n productId: '',\n productInfo: null,\n service: '',\n patientList: [],\n patientId: '',\n mateList: [],\n chooseMate: '아니오',\n cardList: [],\n };\n\n componentDidMount = async () => {\n const userId = localStorage.getItem('id');\n if (!userId) {\n message.warning('로그인 후 이용해주세요.');\n setTimeout(() => {\n this.props.history.goBack();\n }, 250);\n return null;\n }\n\n const { params } = this.props.match;\n if (params.step && params.step !== 'items') {\n this.props.history.push('/reserve/items');\n }\n\n this.fetchUserInfo();\n this.fetchItemList();\n };\n\n componentDidUpdate = prevProps => {\n const { params: prevParams } = prevProps.match;\n const { params } = this.props.match;\n if (JSON.stringify(prevParams) !== JSON.stringify(params)) {\n this.setState({ step: params.step });\n }\n };\n\n fetchUserInfo = () => {\n const userId = localStorage.getItem('id');\n if (!userId) return null;\n axios.get(`/v1/user/${userId}/user`).then(resolve => {\n const { data } = resolve;\n if (data && data._id) {\n this.setState({ userInfo: data, point: data.point, usePoint: 0, connection: data.connection });\n }\n });\n };\n\n onPrevSetting = () => {\n const userId = localStorage.getItem('id');\n fetchPatient({ id: userId }).then(resolve => {\n // console.log(resolve)\n if (resolve && resolve.data && resolve.data.message === 'success') {\n this.setState({ patientList: resolve.data.data, patientProfileListModal: true });\n } else {\n notification.open({\n message: '조회되는 환자 목록이 없습니다.',\n description: '[마이페이지]에서 환자 프로필을 등록하실 수 있습니다.',\n type: 'primary',\n });\n }\n });\n\n // const { productInfo } = this.state;\n // if (!userId) return null;\n\n // axios.get('/v2/user/recent/reserve/info', { params: { userId } }).then(resolve => {\n // const { data } = resolve;\n // if (data && data._id) {\n // delete data._id;\n // // 도착지랑 출발지 제외하고 나머지 다 추가\n // if (productInfo && productInfo.reservedDestination) delete data.destination;\n // if (productInfo && productInfo.reservedStarting) delete data.starting;\n\n // this.setState({ ...data });\n // } else {\n // message.warning('조회되는 최근 예약정보가 없습니다.');\n // }\n // });\n };\n\n onPrevSetting2 = () => {\n fetchMate({ valid: true }).then(resolve => {\n console.log(resolve);\n if (resolve && resolve.data && resolve.data.message === 'success') {\n this.setState({ mateList: resolve.data.data, mateListModal: true });\n } else {\n message.info('조회되는 메이트가 없습니다.');\n }\n });\n };\n\n // 카드 목록 불러오기\n onPrevSetting3 = () => {\n const userId = localStorage.getItem('id');\n fetchCard({ id: userId }).then(resolve => {\n if (resolve && resolve.data && resolve.data.message === 'success') {\n this.setState({ cardList: resolve.data.data, cardListModal: true });\n } else {\n notification.open({\n message: '조회되는 카도 목록이 없습니다.',\n description: '[마이페이지]에서 결제 카드를 등록하실 수 있습니다.',\n type: 'primary',\n });\n }\n });\n };\n\n fetchItemList = () => {\n axios.get('/v1/product/service/tag/group', { params: { isOption: true } }).then(resolve => {\n const { data } = resolve;\n if (data) {\n this.setState({ ...data });\n }\n });\n };\n\n onSelectService = info => {\n this.setState(\n {\n productId: info.id,\n productInfo: info,\n isZzz: false,\n isAlzhe: false,\n starting: info.reservedStarting || '',\n destination: info.reservedDestination || '',\n shortStarting: info.reservedShortStarting || '',\n shortDestination: info.reservedShortDestination || '',\n },\n this.goSecondStep,\n );\n };\n\n goSecondStep = () => {\n const rect = document.querySelector('#second-step').getClientRects();\n const { top } = rect[0];\n window.scrollTo(0, window.scrollY + top - 55);\n };\n\n goNextButton = () => {\n const rect = document.querySelector('#fst-next-btn').getClientRects();\n const { top } = rect[0];\n window.scrollTo(0, window.scrollY + top - 55);\n };\n // Daum Address Search 출발지\n onStarting = () => {\n new window.daum.Postcode({\n oncomplete: data => {\n const { sido, sigungu, bname, roadAddress, buildingName } = data;\n this.setState(prevState => ({\n shortStarting: `${sido} ${sigungu} ${bname}`,\n starting: `${roadAddress} (${buildingName})`,\n }));\n },\n }).open();\n };\n // Daum Address Search 도착지\n onDestination = () => {\n new window.daum.Postcode({\n oncomplete: data => {\n const { sido, sigungu, bname, roadAddress, buildingName } = data;\n this.setState(prevState => ({\n destination: `${roadAddress} (${buildingName})`,\n shortDestination: `${sido} ${sigungu} ${bname}`,\n }));\n },\n }).open();\n };\n\n onAddress = () => {\n new window.daum.Postcode({\n oncomplete: data => {\n const { roadAddress, buildingName } = data;\n this.setState(prevState => ({\n address: `${roadAddress} (${buildingName})`,\n }));\n },\n }).open();\n };\n\n stepHandler = () => {\n const { step: currentStep, service, productId, shortStarting, shortDestination, recommender = '', recommenderContact = '' } = this.state;\n const { patient, sex, contact = '', age, guardContact, relate, starting, destination } = this.state;\n const {\n mateGender,\n reserveDate,\n meetTime,\n meetMinute,\n reserveTime,\n reserveMinute,\n addTime,\n comment,\n transport,\n // payment = 'transfer',\n payment,\n usePoint,\n point,\n productInfo,\n environment,\n caution,\n chooseMate,\n mateName,\n cardName,\n cardNum,\n year,\n month,\n installment,\n } = this.state;\n\n switch (currentStep) {\n case 'items':\n if (!service) return message.warning('서비스를 선택해주세요.');\n if (!productId) return message.warning('서비스 상세 분류를 선택해주세요. (ex. Pro, Basic, 내시경 등)');\n\n this.props.history.push('/reserve/basic');\n break;\n\n case 'basic':\n if (!patient) return message.warning('환자분의 성함을 입력해주세요.');\n if (!sex) return message.warning('환자분의 성별을 입력해주세요.');\n // if (!contact) return message.warning('환자분의 연락처를 입력해주세요.');\n if (!age) return message.warning('환자분의 나이를 입력해주세요.');\n if (!relate) return message.warning('환자분과의 관계를 선택해주세요.');\n if (!guardContact) return message.warning('보호자님의 연락처를 확인해주세요.');\n if (!destination) return message.warning('도착지를 검색 및 설정해주세요.');\n if (service === 'unemergency' && !starting) return message.warning('출발지를 검색 및 설정해주세요.');\n\n this.props.history.push('/reserve/form');\n break;\n\n case 'form':\n if (!reserveDate) return message.warning('진료 예약일을 설정해주세요.');\n if (!reserveTime || !reserveMinute) return message.warning('진료 예약 시간을 설정해주세요.');\n if (service === 'unemergency' && (!meetTime || !meetMinute)) return message.warning('동행인의 출발지 도착 희망 시간을 설정해주세요.');\n if (!addTime) return message.warning('예상 소요 시간을 입력해주세요.');\n if (recommenderContact && !celluarValidate(recommenderContact))\n return message.warning('추천인 연락처를 올바르게 입력해주세요. (ex. 01012341243');\n if ((recommenderContact && !recommender) || (recommender && !recommenderContact)) return message.warning('추천인 정보를 마저 입력해주세요.');\n\n this.props.history.push('/reserve/confirm');\n break;\n\n case 'confirm':\n // 여기서 결제해야함\n const userId = localStorage.getItem('id');\n if (!userId) return null;\n\n const _transport = transport && transport === 'own' ? 20000 : 0;\n const _service =\n productInfo &&\n service &&\n (service === 'unemergency' ? productInfo.proPrice : productInfo.basicPrice ? productInfo.basicPrice : 0) * addTime;\n const discount = service === 'unemergency' ? productInfo.proDiscount || 0 : productInfo.basicDiscount || 0;\n const totalFee = _transport + _service - discount;\n\n if (service === 'unemergency' && !transport) return message.warning('이동 수단을 선택해주세요.');\n if (usePoint > point) return message.warning('잔여 포인트보다 사용하고자 하는 포인트가 더 높습니다.');\n if (usePoint > totalFee) return message.warning('사용하고자 하는 포인트가 예상 결제금액보다 높습니다.');\n\n const info = {\n shortStarting,\n destination,\n shortDestination,\n comment,\n service,\n addTime,\n starting,\n contact,\n guardContact,\n reserveDate: combineDateAndTime({ date: reserveDate, time: reserveTime, minute: reserveMinute }),\n meetDate: combineDateAndTime({ date: reserveDate, time: meetTime, minute: meetMinute }),\n patient,\n relate,\n payment,\n sex,\n age,\n transport,\n recommender,\n recommenderContact,\n product: productId,\n usingPoint: usePoint,\n mateGender,\n environment,\n caution,\n chooseMate,\n mateName,\n cardName,\n cardNum,\n year,\n month,\n installment,\n };\n\n axios\n .post('/v2/service/reserve/new', { info, userId })\n .then(async resolve => {\n const { data } = resolve;\n if (!data) message.error('죄송합니다 요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n if (data === 'check parameters') return message.warning('입력하지 않은 정보가 있는지 다시 한번 확인해주세요.');\n if (data === 'invalid user') return message.warning('세션이 만료되었습니다. 재 로그인 후 다시 시도해주세요.');\n if (data === 'invalid product')\n return message.warning('죄송합니다. 선택하신 서비스가 더이상 지원하지 않는 서비스입니다. 다른 서비스를 이용해주세요.');\n\n if (data === 'success') {\n // 사용자 연락처 갱신\n // await axios.post('/v1/user/modify/info', { id: userId, userType: 'user', info: { contact: guardContact } });\n\n message.success('동행 서비스 요청 완료');\n this.props.history.push('/reserve/done');\n }\n })\n .catch(error => {\n message.error('죄송합니다 요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n });\n break;\n }\n };\n\n stepHandler2 = () => {\n const { step: currentStep, service, productId, shortStarting, shortDestination, recommender = '', recommenderContact = '' } = this.state;\n const { patient, sex, contact, age, guardContact, relate, starting, destination, mateId } = this.state;\n const {\n mateGender,\n reserveDate,\n meetTime,\n meetMinute,\n reserveTime,\n reserveMinute,\n addTime,\n comment,\n transport,\n // payment = 'transfer',\n payment,\n usePoint,\n point,\n productInfo,\n environment,\n caution,\n chooseMate,\n mateName,\n } = this.state;\n\n switch (currentStep) {\n case 'items':\n if (!service) return message.warning('서비스를 선택해주세요.');\n if (!productId) return message.warning('서비스 상세 분류를 선택해주세요. (ex. Pro, Basic, 내시경 등)');\n\n this.props.history.push('/reserve/basic');\n break;\n\n case 'basic':\n if (!patient) return message.warning('환자분의 성함을 입력해주세요.');\n if (!sex) return message.warning('환자분의 성별을 입력해주세요.');\n // if (!contact) return message.warning('환자분의 연락처를 입력해주세요.');\n if (!age) return message.warning('환자분의 나이를 입력해주세요.');\n if (!relate) return message.warning('환자분과의 관계를 선택해주세요.');\n if (!guardContact) return message.warning('보호자님의 연락처를 확인해주세요.');\n if (!destination) return message.warning('도착지를 검색 및 설정해주세요.');\n if (service === 'unemergency' && !starting) return message.warning('출발지를 검색 및 설정해주세요.');\n\n this.props.history.push('/reserve/form');\n break;\n\n case 'form':\n if (!reserveDate) return message.warning('진료 예약일을 설정해주세요.');\n if (!reserveTime || !reserveMinute) return message.warning('진료 예약 시간을 설정해주세요.');\n if (service === 'unemergency' && (!meetTime || !meetMinute)) return message.warning('동행인의 출발지 도착 희망 시간을 설정해주세요.');\n if (!addTime) return message.warning('예상 소요 시간을 입력해주세요.');\n if (recommenderContact && !celluarValidate(recommenderContact))\n return message.warning('추천인 연락처를 올바르게 입력해주세요. (ex. 01012341243');\n if ((recommenderContact && !recommender) || (recommender && !recommenderContact)) return message.warning('추천인 정보를 마저 입력해주세요.');\n\n this.props.history.push('/reserve/confirm');\n break;\n\n case 'confirm':\n // 여기서 결제해야함\n const userId = localStorage.getItem('id');\n if (!userId) return null;\n\n const _transport = transport && transport === 'own' ? 20000 : 0;\n const _service =\n productInfo &&\n service &&\n (service === 'unemergency' ? productInfo.proPrice : productInfo.basicPrice ? productInfo.basicPrice : 0) * addTime;\n const discount = service === 'unemergency' ? productInfo.proDiscount || 0 : productInfo.basicDiscount || 0;\n const totalFee = _transport + _service - discount;\n\n if (service === 'unemergency' && !transport) return message.warning('이동 수단을 선택해주세요.');\n if (usePoint > point) return message.warning('잔여 포인트보다 사용하고자 하는 포인트가 더 높습니다.');\n if (usePoint > totalFee) return message.warning('사용하고자 하는 포인트가 예상 결제금액보다 높습니다.');\n\n const info = {\n shortStarting,\n destination,\n shortDestination,\n comment,\n service,\n addTime,\n starting,\n contact,\n guardContact,\n reserveDate: combineDateAndTime({ date: reserveDate, time: reserveTime, minute: reserveMinute }),\n meetDate: combineDateAndTime({ date: reserveDate, time: meetTime, minute: meetMinute }),\n patient,\n relate,\n payment,\n sex,\n age,\n transport,\n recommender,\n recommenderContact,\n product: productId,\n usingPoint: usePoint,\n mateGender,\n environment,\n caution,\n chooseMate,\n mateId,\n };\n\n axios\n .post('/v2/service/reserve/mate/new', { info, userId, mateId })\n .then(async resolve => {\n const { data } = resolve;\n if (!data) message.error('죄송합니다 요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n if (data === 'check parameters') return message.warning('입력하지 않은 정보가 있는지 다시 한번 확인해주세요.');\n if (data === 'invalid user') return message.warning('세션이 만료되었습니다. 재 로그인 후 다시 시도해주세요.');\n if (data === 'invalid product')\n return message.warning('죄송합니다. 선택하신 서비스가 더이상 지원하지 않는 서비스입니다. 다른 서비스를 이용해주세요.');\n\n if (data === 'success') {\n message.success('동행 서비스 요청 완료');\n this.props.history.push('/reserve/done');\n }\n })\n .catch(error => {\n message.error('죄송합니다 요청에 실패하였습니다. 잠시 후 다시 시도해주세요.');\n });\n break;\n }\n };\n\n prevStep = () => {\n this.props.history.goBack();\n };\n\n handleChange = e => {\n const type = e.target.name;\n const value = e.target.value;\n\n this.setState({ [type]: value });\n };\n\n patientProfileListModalOff = () => {\n this.setState({\n patientProfileListModal: false,\n });\n };\n\n mateListModalOff = () => {\n this.setState({\n mateListModal: false,\n });\n };\n\n cardListModalOff = () => {\n this.setState({\n cardListModal: false,\n });\n };\n\n onUpdatePatient = data => {\n this.setState({\n patient: data.name,\n age: data.age,\n contact: data.contact,\n relate: data.relate,\n sex: data.sex,\n starting: data.starting,\n environment: data.environment,\n caution: data.caution,\n });\n };\n\n onUpdateMate = data => {\n this.setState({\n mateName: data.name,\n mateContact: data.contact,\n mateId: data._id,\n });\n };\n\n onUpdateCard = data => {\n this.setState({\n cardName: data.cardName,\n cardNum: data.cardNum,\n year: data.year,\n month: data.month,\n });\n };\n\n render() {\n const { step, big5, local, corpBy, zzz, alzhe, productId = '', productInfo, service, isZzz = false, isAlzhe = false, mateName } = this.state;\n // console.log(this.state)\n return (\n <ReservePageContainer>\n <ReserveTopCover isMain={step === 'items'}>\n <BannerSection isMain={step === 'items'} />\n {step === 'items' && (\n <NextGuider\n color={'#ffffff'}\n emoj={'/assets/images/guide_step_1.png'}\n title={\n <>\n 먼저, 원하시는 <MobileBr />\n 서비스 종류를 선택하세요!\n </>\n }\n />\n )}\n </ReserveTopCover>\n {step && step !== 'items' && <StepSection step={step} />}\n {step === 'items' && (\n <>\n <ServiceSection\n bg='/assets/images/artwork_right_bg.png'\n mobileBg='#ffffff'\n title='대형병원 동행 서비스'\n description='대형병원에 방문하는 분들을 위한 서비스입니다.'\n >\n <ServiceCardList>\n {big5 &&\n big5.length > 0 &&\n big5.map((product, index) => (\n <Card\n key={'big5-item-' + index.toString()}\n source={product.logo}\n selected={product.id === productId ? 'selected' : ''}\n onSelect={() => {\n this.onSelectService(product);\n }}\n />\n ))}\n </ServiceCardList>\n </ServiceSection>\n <ServiceSection\n mobileBg='#f2f2f2'\n title='지역별 병원 동행 서비스'\n description={\n <>\n 대형병원을 제외한 각 지역별 병원에 <MobileBr /> 방문하는 분들을 위한 서비스입니다.\n </>\n }\n >\n <ServiceCardList>\n {local &&\n local.length > 0 &&\n local.map((product, index) => (\n <Card\n key={'local-item-' + index.toString()}\n source={product.logo}\n selected={product.id === productId ? 'selected' : ''}\n onSelect={() => {\n this.onSelectService(product);\n }}\n />\n ))}\n </ServiceCardList>\n </ServiceSection>\n {/* <ServiceSection\n bg='/assets/images/artwork_left_bg.png'\n mobileBg='#ffffff'\n title='기업 기관별 동행 서비스'\n description={\n <>\n 위드메이트와 협업 중인 <MobileBr /> 기업 및 기관을 위한 접수 창구입니다\n </>\n }\n >\n <ServiceCardList>\n {corpBy &&\n corpBy.length > 0 &&\n corpBy.map((product, index) => (\n <Card\n key={'corpBy-item-' + index.toString()}\n source={product.logo}\n selected={product.id === productId ? 'selected' : ''}\n onSelect={() => {\n this.onSelectService(product);\n }}\n />\n ))}\n </ServiceCardList>\n </ServiceSection> */}\n {/* <ZzzService\n selected={zzz.length === 0 ? '' : zzz[0].id === productId ? 'selected' : ''}\n onSelect={() => {\n if (zzz.length === 0) return message.warning('운영중인 내시경 보호자 서비스가 없습니다.');\n\n const z_one = zzz[0];\n this.setState({ productId: z_one.id, productInfo: z_one, isZzz: true }, this.goSecondStep);\n }}\n />\n\n <AlzheService\n selected={alzhe.length === 0 ? '' : alzhe[0].id === productId ? 'selected' : ''}\n onSelect={() => {\n if (alzhe.length === 0) return message.warning('운영중인 치매 보호자 서비스가 없습니다.');\n\n const a_one = alzhe[0];\n this.setState({ productId: a_one.id, productInfo: a_one, isAlzhe: true }, this.goSecondStep);\n }}\n /> */}\n {productId && (\n <>\n <NextGuider\n bg\n id='second-step'\n emoj={'/assets/images/guide_step_2.png'}\n title={\n <>\n 이제, 원하시는 <MobileBr /> 서비스 타입을 선택하세요!\n </>\n }\n />\n <ServiceTypeSection bg='/assets/images/artwork_right_bg2.png' mobileBg={'#ffffff'}>\n <ServiceTypeWrapper>\n {productInfo.usePro && !isZzz && (\n <ServiceTypeCard\n emoj={'/assets/images/art_pro.png'}\n name='Pro'\n desc={`위드메이트 동행 전문가가 고객님 자택에서 병원까지 동행하고, 병원 업무를 마친 뒤 다시 자택까지 \n 동행합니다.`}\n selected={service === 'unemergency' ? 'selected' : ''}\n onSelect={() => {\n this.setState({ service: 'unemergency' }, this.goNextButton);\n }}\n />\n )}\n\n {productInfo.useBasic && !isZzz && (\n <ServiceTypeCard\n emoj={'/assets/images/art_basic.png'}\n name='Basic'\n desc={`위드메이트 베이직 서비스는 \n 위드메이트 동행 전문가가 지정한 의료 시설 혹은 병원 내에서 \n 보호자 대행 업무를 수행합니다.`}\n selected={service === 'assist' ? 'selected' : ''}\n onSelect={() => {\n this.setState({ service: 'assist' }, this.goNextButton);\n }}\n />\n )}\n\n {isZzz && (\n <ServiceTypeCard\n emoj={'/assets/images/art_zzz.png'}\n name='내시경'\n desc={`위드메이트 동행 전문가가 고객님께서 수면 내시경 검사/진료를 \n 받는 의료 시설에 도착한 후 \n 보호자 대행 업무를 수행합니다.`}\n selected={service === 'assist' ? 'selected' : ''}\n onSelect={() => {\n this.setState({ service: 'assist' }, this.goNextButton);\n }}\n />\n )}\n </ServiceTypeWrapper>\n <NextStepButton id='fst-next-btn' on={productId && service} onClick={this.stepHandler}>\n 다음 단계로가기\n </NextStepButton>\n </ServiceTypeSection>\n </>\n )}\n </>\n )}\n {/* {step === 'basic' && ( */}\n {step === 'basic' && (\n <>\n <FormContainer>\n <BasicForm\n data={this.state}\n handleChange={this.handleChange}\n onStarting={this.onStarting}\n onDestination={this.onDestination}\n onPrevSetting={this.onPrevSetting}\n />\n <CustomButtonWrapper>\n <RadiusHalfWidthButton bg='#cecfd0' onClick={this.prevStep}>\n 이전으로\n </RadiusHalfWidthButton>\n <RadiusHalfWidthButton bg='#3bc1ff' onClick={this.stepHandler}>\n 다음 단계로가기\n </RadiusHalfWidthButton>\n </CustomButtonWrapper>\n </FormContainer>\n </>\n )}\n {/* {step === 'form' && ( */}\n {step === 'form' && (\n <>\n <FormContainer>\n <MainForm data={this.state} handleChange={this.handleChange} onPrevSetting2={this.onPrevSetting2} />\n <CustomButtonWrapper>\n <RadiusHalfWidthButton bg='#cecfd0' onClick={this.prevStep}>\n 이전으로\n </RadiusHalfWidthButton>\n <RadiusHalfWidthButton bg='#3bc1ff' onClick={this.stepHandler}>\n 다음 단계로가기\n </RadiusHalfWidthButton>\n </CustomButtonWrapper>\n </FormContainer>\n </>\n )}\n {step === 'confirm' && (\n <>\n <FormContainer>\n <ConfirmForm data={this.state} handleChange={this.handleChange} onPrevSetting3={this.onPrevSetting3} onAddress={this.onAddress} />\n <CustomButtonWrapper>\n <RadiusHalfWidthButton bg='#cecfd0' onClick={this.prevStep}>\n 이전으로\n </RadiusHalfWidthButton>\n {mateName ? (\n <>\n <RadiusHalfWidthButton bg='#3bc1ff' onClick={this.stepHandler2}>\n 신청 완료\n </RadiusHalfWidthButton>\n </>\n ) : (\n <RadiusHalfWidthButton bg='#3bc1ff' onClick={this.stepHandler}>\n 신청 완료하기\n </RadiusHalfWidthButton>\n )}\n </CustomButtonWrapper>\n </FormContainer>\n </>\n )}\n {step === 'done' && (\n <>\n <FormContainer>\n <DoneForm data={this.state} />\n <LastStepButton\n on\n onClick={() => {\n this.props.history.push('/user/mypage/list');\n }}\n >\n 마이 페이지로\n </LastStepButton>\n </FormContainer>\n </>\n )}\n\n <PatientProfileListModal\n list={this.state.patientList}\n visible={this.state.patientProfileListModal}\n onClose={this.patientProfileListModalOff}\n onUpdatePatient={this.onUpdatePatient}\n />\n\n <MateModal list={this.state.mateList} visible={this.state.mateListModal} onClose={this.mateListModalOff} onUpdateMate={this.onUpdateMate} />\n\n <CardListModal list={this.state.cardList} visible={this.state.cardListModal} onClose={this.cardListModalOff} onUpdateCard={this.onUpdateCard} />\n </ReservePageContainer>\n );\n }\n}\n\nconst BannerSection = ({ isMain }) => (\n <TopBannerSection isMain={isMain}>\n {isMain && (\n <ResrevePageInnerContainer smallPadding>\n <TopBannerDescription>국내 최대 규모의 병원 동행 서비스 매칭 플랫폼</TopBannerDescription>\n <TopBannerText>\n <span>위드메이트</span>가 함께 동행해드립니다\n </TopBannerText>\n </ResrevePageInnerContainer>\n )}\n {!isMain && (\n <ResrevePageInnerContainer smallPadding>\n <TopBannerText style={{ textAlign: 'left' }}>\n <span>\n 위드메이트가\n <br />\n 함께 동행 해드립니다\n </span>\n </TopBannerText>\n <TopBannerSubDescription>국내 최대 규모의 병원 동행 서비스 매칭 플랫폼</TopBannerSubDescription>\n </ResrevePageInnerContainer>\n )}\n </TopBannerSection>\n);\n\nconst StepSection = ({ step }) => (\n <StepSectionContainer>\n <ResrevePageInnerContainer smallPadding>\n <StepButtonWrapper>\n <StepButton active={step === 'basic'}>환자 기본 정보 입력</StepButton>\n <StepArrow src={'/assets/images/stepper.png'} alt='화살표' />\n <StepButton active={step === 'form'}>서비스 신청 정보 입력</StepButton>\n <StepArrow src={'/assets/images/stepper.png'} alt='화살표' />\n <StepButton active={step === 'confirm'}>매칭 신청 확인</StepButton>\n <StepArrow src={'/assets/images/stepper.png'} alt='화살표' />\n <StepButton active={step === 'done'}>신청 완료</StepButton>\n </StepButtonWrapper>\n </ResrevePageInnerContainer>\n </StepSectionContainer>\n);\n\nconst NextGuider = ({ id, emoj, title, color = 'rgba(0,0,0,0.7)', bg = false }) => (\n <NextStepGudieContainer id={id} useBg={bg ? true : false}>\n <NextStepEmoj src={emoj} alt='스텝넘버' />\n <NextStepTitle color={color}>{title}</NextStepTitle>\n <NextStepArrowDown src={'/assets/images/arrowDown.png'} alt='아래로' />\n </NextStepGudieContainer>\n);\n\nconst ServiceSection = ({ title, description, bg, mBg, children }) => {\n return (\n <ServiceSectionContainer>\n <ResrevePageInnerContainer bg={bg} mobileBg={mBg}>\n <ServiceSectionTitle>{title}</ServiceSectionTitle>\n <ServiceSectionDescription>{description}</ServiceSectionDescription>\n {children}\n </ResrevePageInnerContainer>\n </ServiceSectionContainer>\n );\n};\n\nconst Card = ({ source, onSelect, selected }) => (\n <ServiceCardWrapper on={selected || ''}>\n <img src={source} alt='로고' />\n <ServiceCardButton className={selected ? 'selected' : 'none-selected'} onClick={onSelect}>\n 선택\n </ServiceCardButton>\n </ServiceCardWrapper>\n);\n\nconst ZzzService = ({ selected, onSelect }) => (\n <ResrevePageHalfInnerContainer>\n <ZzzServiceWrapper>\n <ZzzArt src='/assets/images/art_zzz.png' />\n <ServiceSectionTitle>수면 내시경 보호자 서비스</ServiceSectionTitle>\n <ZzzDescription>\n {' '}\n 수면 내시경 검사 시 <MobileBr />\n 보호자를 대행하는 서비스입니다.\n </ZzzDescription>\n <ServiceSectionDescription>\n 수면 내시경 검사가 끝날 때까지 <b>병원 안에서</b>\n <MobileBr /> 고객님의 보호자 대행 업무를 수행합니다.\n <DesktopBr />\n <MobileBr />\n <MobileBr />\n <b>서울/경기(일부)</b>에서만 서비스가 제공됩니다.\n <DesktopBr />\n <MobileBr />\n </ServiceSectionDescription>\n <ServiceCardButton className={selected ? 'selected' : 'none-selected'} onClick={onSelect}>\n 선택\n </ServiceCardButton>\n </ZzzServiceWrapper>\n </ResrevePageHalfInnerContainer>\n);\n\nconst AlzheService = () => (\n <ResrevePageHalfInnerContainer>\n <AlzheServiceWrapper>\n <AlzheArt src='/assets/images/art_alzhe.jpg' />\n <ServiceSectionTitle>치매 동행 서비스 (beta)</ServiceSectionTitle>\n <AlzheDescription>\n 메이트가 치매 환자분의 집-병원 간 <MobileBr /> 모든 여정을 함께하는 서비스입니다.\n </AlzheDescription>\n <ServiceSectionDescription>\n <b>치매 환자 전문</b> 메이트를 포함하여 <MobileBr /> 2인의 메이트가 배정됩니다.\n <DesktopBr />\n <MobileBr />\n <MobileBr />\n 메이트(<b>2인</b>)-환자 간 매칭이 완료되지 않으면\n <MobileBr /> 서비스가 제공되지 않는 점 양해바랍니다.\n <MobileBr />\n <DesktopBr />\n <MobileBr />\n <b>전화</b>로만 서비스 예약을 하실 수 있습니다.\n </ServiceSectionDescription>\n <ServiceCardButton\n onClick={() => {\n swal.fire({\n title: '위드메이트 고객센터',\n text: '☎ 070-4300-9075',\n icon: 'info',\n confirmButtonText: '전화걸기',\n cancelButtonText: '확인',\n showCancelButton: true,\n }).then(result => {\n if (result.isConfirmed) {\n document.location.href = 'tel:070-4300-9075';\n }\n });\n }}\n >\n 전화 상담하기\n </ServiceCardButton>\n </AlzheServiceWrapper>\n </ResrevePageHalfInnerContainer>\n);\n\nconst ServiceTypeSection = ({ bg, mobileBg, children }) => (\n <ServiceTypeSectionContainer bg={bg} mBg={mobileBg} gap>\n {children}\n </ServiceTypeSectionContainer>\n);\n\nconst ServiceTypeCard = ({ emoj, name, desc, selected, onSelect }) => (\n <ServiceTypeCardWrapper selected={selected || ''}>\n <ServiceTypeCardImg src={emoj} alt='type' />\n <ServiceTypeName>{name}</ServiceTypeName>\n <ServiceTypeDescription>{desc}</ServiceTypeDescription>\n <ServiceCardButton onClick={onSelect} className={selected ? 'selected' : 'none-selected'}>\n 선택\n </ServiceCardButton>\n </ServiceTypeCardWrapper>\n);\n\nconst BasicForm = ({ data, handleChange, onStarting, onDestination, onPrevSetting }) => {\n const { productInfo, service, patient, contact, sex, age, relate, guardContact = '', starting, destination } = data;\n return (\n <FormWrapper>\n <FormMainTitle>좋아요! 매칭 신청을 시작해볼까요?</FormMainTitle>\n\n <DivisionLine big />\n\n <WithmateLabel>선택하신 서비스</WithmateLabel>\n\n <ServiceName>\n {productInfo.name} {productInfo.name.includes('내시경') ? '' : service === 'unemergency' ? 'Pro' : 'Basic'}\n </ServiceName>\n\n <DivisionLine big />\n\n <FlexWrapper style={{ justifyContent: 'space-between' }}>\n <ServiceTypeName style={{ marginTop: '0px', marginBottom: '0px' }}>환자 정보 입력</ServiceTypeName>\n </FlexWrapper>\n\n <div style={{ textAlign: 'right' }}>\n <Label style={{ color: 'gray', fontSize: '11px' }}>* 등록하신 환자프로필 정보를 가져와 편리하게 예약하실 수 있습니다.</Label>\n <br />\n <UnderLineText onClick={onPrevSetting}>환자 프로필 불러오기</UnderLineText>\n </div>\n\n <DivisionLine />\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자 성함</WithmateLabel>\n <WithmateInput type='text' placeholder='홍길동' maxLength='24' name='patient' value={patient || null} onChange={handleChange} />\n </div>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자 나이</WithmateLabel>\n <WithmateInput type='text' maxLength='2' placeholder='50' name='age' suffix='세' value={age || null} onChange={handleChange} />\n </div>\n </FlexWrapper>\n\n <DivisionLine big />\n\n <FlexWrapper withHalf>\n {productInfo.name.includes('내시경') ? null : (\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자 연락처</WithmateLabel>\n <WithmateInput\n type='text'\n maxLength='11'\n placeholder='ex) 01029791234'\n name='contact'\n value={contact || null}\n onChange={handleChange}\n />\n </div>\n )}\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자 성별</WithmateLabel>\n <Sexes>\n <span\n className={sex === '남자' ? 'active' : 'inactive'}\n onClick={() => {\n handleChange({ target: { name: 'sex', value: '남자' } });\n }}\n >\n 남성\n </span>\n <span\n className={sex === '여자' ? 'active' : 'inactive'}\n onClick={() => {\n handleChange({ target: { name: 'sex', value: '여자' } });\n }}\n >\n 여성\n </span>\n </Sexes>\n </div>\n </FlexWrapper>\n\n <DivisionLine big />\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n {productInfo.name.includes('내시경') ? (\n <>\n <WithmateLabel required>서비스 신청인 연락처</WithmateLabel>\n <WithmateInput\n type='text'\n maxLength='11'\n placeholder='서비스를 제공받으실 분의 연락처를 입력하세요.'\n name='guardContact'\n value={guardContact || null}\n onChange={handleChange}\n />\n </>\n ) : (\n <>\n <WithmateLabel required>보호자 연락처</WithmateLabel>\n <WithmateInput\n type='text'\n maxLength='11'\n placeholder='ex) 01029791234'\n name='guardContact'\n value={guardContact || null}\n onChange={handleChange}\n />\n </>\n )}\n </div>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자와의 관계</WithmateLabel>\n <WithmateSelect\n placeholder='본인'\n value={relate || undefined}\n onChange={value => {\n handleChange({ target: { name: 'relate', value } });\n }}\n >\n <Select.Option value='본인'>본인</Select.Option>\n <Select.Option value='부모'>부모</Select.Option>\n <Select.Option value='자매'>자매</Select.Option>\n <Select.Option value='친구'>친구</Select.Option>\n <Select.Option value='지인'>지인</Select.Option>\n <Select.Option value='기타'>기타</Select.Option>\n </WithmateSelect>\n </div>\n </FlexWrapper>\n\n <DivisionLine big />\n\n <WithmateLabel required>목적지 주소 (방문 병원 위치)</WithmateLabel>\n <WithamteInputWithButton\n inputConfig={{\n type: 'text',\n placeholder: 'ex) 서울특별시 강남 을지병원',\n name: 'destination',\n disabled: true,\n value: destination || null,\n }}\n buttonName='검색'\n onButton={() => {\n if (productInfo.reservedDestination) return message.info('목적지가 고정된 서비스입니다.');\n else onDestination();\n }}\n />\n\n <DivisionLine big />\n {service === 'unemergency' && (\n <>\n <WithmateLabel required>출발지 주소 (자택, 터미널, 역, 입원 병원 등)</WithmateLabel>\n <WithamteInputWithButton\n inputConfig={{\n type: 'text',\n placeholder: 'ex) 서울특별시 서초대로 30, ABC아파트',\n name: 'starting',\n disabled: true,\n value: starting || null,\n }}\n buttonName='검색'\n onButton={() => {\n if (productInfo.reservedStarting) return message.info('출발지가 고정된 서비스입니다.');\n else onStarting();\n }}\n />\n\n <DivisionLine big />\n </>\n )}\n\n <MobileStepImage>\n <img src={service === 'unemergency' ? '/assets/images/art_pro.png' : '/assets/images/art_basic.png'} alt='스텝이미지' />\n </MobileStepImage>\n </FormWrapper>\n );\n};\n\nconst MainForm = ({ data, handleChange, onPrevSetting2 }) => {\n const {\n productInfo,\n service,\n addTime,\n reserveDate,\n reserveTime,\n reserveMinute,\n meetTime,\n meetMinute,\n mateGender,\n comment,\n recommender,\n recommenderContact,\n environment,\n caution,\n chooseMate,\n mateName,\n mateContact,\n } = data;\n const time = !reserveTime ? 9 : moment(reserveTime).get('hour');\n let allowedAddTimes = 18 - parseInt(time, 10) > 0 ? 18 - parseInt(time, 10) : 0;\n\n return (\n <FormWrapper>\n <FormMainTitle>이것만 하면 매칭 신청이 끝나요!</FormMainTitle>\n <DivisionLine x_small />\n\n <WithmateLabel>선택하신 서비스</WithmateLabel>\n <ServiceName>\n {productInfo.name} {productInfo.name.includes('내시경') ? '' : service === 'unemergency' ? 'Pro' : 'Basic'}\n </ServiceName>\n\n <ServiceTypeName style={{ marginTop: '0px', marginBottom: '0px' }}>병원 정보 입력</ServiceTypeName>\n <DivisionLine />\n\n <WithmateLabel required>동행 인력 희망 성별</WithmateLabel>\n <Sexes>\n <span\n className={!mateGender ? 'active' : 'inactive'}\n onClick={() => {\n handleChange({ target: { name: 'mateGender', value: '' } });\n }}\n >\n 상관없음\n </span>\n <span\n className={mateGender === '남' ? 'active' : 'inactive'}\n onClick={() => {\n handleChange({ target: { name: 'mateGender', value: '남' } });\n }}\n >\n 남성\n </span>\n <span\n className={mateGender === '녀' ? 'active' : 'inactive'}\n onClick={() => {\n handleChange({ target: { name: 'mateGender', value: '녀' } });\n }}\n >\n 여성\n </span>\n </Sexes>\n <DivisionLine big />\n\n <WithmateLabel required>\n 메이트 선택\n {/* <LabelDescription>(선택하신 메이트님과 상의가 되신 경우에만 가능합니다.)</LabelDescription> */}\n <LabelDescription>(이전에 동행한 메이트 중에서 선택할 수 있습니다.)</LabelDescription>\n </WithmateLabel>\n <Sexes>\n <span\n className={chooseMate === '예' ? 'active' : 'inactive'}\n onClick={() => {\n handleChange({ target: { name: 'chooseMate', value: '예' } });\n }}\n >\n 예\n </span>\n <span\n className={chooseMate === '아니오' ? 'active' : 'inactive'}\n onClick={() => {\n handleChange({ target: { name: 'chooseMate', value: '아니오' } });\n }}\n >\n 아니오\n </span>\n </Sexes>\n <DivisionLine small />\n\n {chooseMate === '아니오' ? null : (\n <>\n <FlexWrapper withHalf>\n <div style={{ flex: 3 }}>\n <WithmateInput\n allowClear\n readonly='readonly'\n type='text'\n name='mateName'\n value={mateName || null}\n onChange={ev => {\n handleChange({ target: { name: 'mateName', value: ev.target.value } });\n }}\n />\n </div>\n <div style={{ flex: 1 }}>\n <Button onClick={onPrevSetting2} style={{ height: '46px' }}>\n 메이트 목록 불러오기\n </Button>\n </div>\n </FlexWrapper>\n <DivisionLine big />\n </>\n )}\n\n <WithmateLabel required>진료 예약일</WithmateLabel>\n <WithmateDatePicker\n locale={locale}\n placeholder='진료 예약일을 설정해주세요.'\n disabledDate={current =>\n current < moment().add(0, 'day') ||\n current.get('day') === 0 ||\n current.get('day') === 6 ||\n holidayKR.isSolarHoliday(moment(current).toDate())\n }\n inputReadOnly\n value={reserveDate || undefined}\n name='reserveDate'\n onChange={date => {\n handleChange({ target: { name: 'reserveDate', value: date } });\n }}\n />\n <DivisionLine big />\n\n <>\n {service === 'unemergency' && (\n <WithmateLabel required>\n 동행인의 출발지 도착 희망 시간 <LabelDescription>(자택, 터미널, 역, 입원 병원 등)</LabelDescription>\n </WithmateLabel>\n )}\n {service === 'assist' && (\n <WithmateLabel required>\n 동행인의 병원 도착 희망 시간 <LabelDescription>(진료 병원, 입원 병원 등)</LabelDescription>\n </WithmateLabel>\n )}\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateInput\n placeholder='13'\n name='meetTime'\n maxLength={2}\n value={meetTime || undefined}\n onChange={ev => {\n if (ev.target.value.length > 2) return null;\n if (ev.target.value && parseInt(ev.target.value) > 24) return null;\n\n handleChange({ target: { name: 'meetTime', value: ev.target.value } });\n }}\n />\n </div>\n <div style={{ flex: 1 }}>\n <WithmateInput\n placeholder='30'\n name='meetMinute'\n maxLength={2}\n value={meetMinute || undefined}\n onChange={ev => {\n if (ev.target.value.length > 2) return null;\n if (ev.target.value && parseInt(ev.target.value) > 59) return null;\n\n handleChange({ target: { name: 'meetMinute', value: ev.target.value } });\n }}\n />\n </div>\n </FlexWrapper>\n <DivisionLine big />\n </>\n {/* {service === 'unemergency' && (\n )} */}\n\n <WithmateLabel required>방문병원 진료 예약 시간</WithmateLabel>\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateInput\n placeholder='13'\n name='reserveTime'\n maxLength={2}\n value={reserveTime || undefined}\n onChange={ev => {\n if (ev.target.value.length > 2) return null;\n if (ev.target.value && parseInt(ev.target.value) > 24) return null;\n\n handleChange({ target: { name: 'reserveTime', value: ev.target.value } });\n }}\n />\n </div>\n <div style={{ flex: 1 }}>\n <WithmateInput\n placeholder='30'\n name='reserveMinute'\n maxLength={2}\n value={reserveMinute || undefined}\n onChange={ev => {\n if (ev.target.value.length > 2) return null;\n if (ev.target.value && parseInt(ev.target.value) > 59) return null;\n\n handleChange({ target: { name: 'reserveMinute', value: ev.target.value } });\n }}\n />\n </div>\n </FlexWrapper>\n\n <DivisionLine big />\n\n <WithmateLabel required>예상 소요 시간</WithmateLabel>\n <WithmateSelect\n placeholder='예상 소요 시간을 선택해주세요.'\n value={\n addTime\n ? meetTime && meetMinute\n ? `${addTime}시간 (${parseInt(meetTime, 10) + parseInt(addTime, 10)}시 ${meetMinute}분 서비스 종료 예정)`\n : addTime\n : addTime\n }\n onChange={val => {\n handleChange({ target: { name: 'addTime', value: val } });\n }}\n >\n {new Array(9).fill(0).map((hour, index) => {\n return (\n <Select.Option key={'hour-row-' + index.toString()} value={index + 1}>\n {index + 1}시간\n </Select.Option>\n );\n })}\n </WithmateSelect>\n <DivisionLine big />\n\n <WithmateLabel required>외출하실 때 '꼭' 계단을 이용하셔야 하나요?</WithmateLabel>\n <Radio\n checked={environment === '네'}\n onClick={() => {\n handleChange({ target: { name: 'environment', value: '네' } });\n }}\n >\n 네\n </Radio>\n <Radio\n checked={environment === '아니요, 엘레베이터가 있어요'}\n onClick={() => {\n handleChange({ target: { name: 'environment', value: '아니요, 엘레베이터가 있어요' } });\n }}\n >\n 아니요, 엘레베이터가 있어요\n </Radio>\n <Radio\n checked={environment === '1층이라 괜찮아요'}\n onClick={() => {\n handleChange({ target: { name: 'environment', value: '1층이라 괜찮아요' } });\n }}\n >\n 1층이라 괜찮아요\n </Radio>\n <DivisionLine />\n\n <DivisionLine />\n\n <WithmateLabel required>메이트가 동행할 때 주의해야 할 점이 있을까요?</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='동행시 주의사항을 입력하세요.'\n value={caution || ''}\n onChange={ev => {\n handleChange({ target: { name: 'caution', value: ev.target.value } });\n }}\n />\n <Checkbox\n checked={caution === '없어요'}\n onClick={() => {\n handleChange({ target: { name: 'caution', value: '없어요' } });\n }}\n >\n 없어요\n </Checkbox>\n\n <DivisionLine />\n\n <WithmateLabel>기타 요청 및 전달 사항</WithmateLabel>\n <WithmateTextarea\n type='text'\n middle='true'\n placeholder={`그 외에, \"정형외과에 갑니다\", \"안마 의자 사용이 가능한지 물어봐주세요\", \"다음 예약 일정을 꼭 잡아주세요\" 등 메이트님께 요청 및 전달하는 사항을 입력해주세요.`}\n name='comment'\n value={comment || null}\n onChange={handleChange}\n />\n <DivisionLine />\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel>추천인 성함</WithmateLabel>\n <WithmateInput type='text' placeholder='홍길동' maxLength={24} name='recommender' onChange={handleChange} value={recommender || null} />\n </div>\n <div style={{ flex: 1 }}>\n <WithmateLabel>추천인 전화번호</WithmateLabel>\n <WithmateInput\n type='text'\n maxLength={11}\n placeholder='ex) 01029701234'\n name='recommenderContact'\n onChange={handleChange}\n value={recommenderContact || null}\n />\n </div>\n </FlexWrapper>\n\n <MobileStepImage>\n <img src={service === 'unemergency' ? '/assets/images/art_pro.png' : '/assets/images/art_basic.png'} alt='스텝이미지' />\n </MobileStepImage>\n </FormWrapper>\n );\n};\n\nconst ConfirmForm = ({ data, handleChange, onAddress, onPrevSetting3 }) => {\n const { productInfo, service, patient, contact, sex, age, relate, guardContact = '', starting, destination, environment, caution } = data;\n const { addTime, usePoint, reserveDate, transport, reserveTime, meetTime, mateGender, comment, reserveMinute, meetMinute, mateName, connection } = data;\n const { cardName, cardNum, year, month, installment } = data;\n\n const _transport = transport && transport === 'own' ? 20000 : 0;\n const _service =\n productInfo && service && (service === 'unemergency' ? productInfo.proPrice : productInfo.basicPrice ? productInfo.basicPrice : 0) * addTime;\n\n const _point = !usePoint ? 0 : parseInt(usePoint, 10) * -1;\n const discount = service === 'unemergency' ? productInfo.proDiscount || 0 : productInfo.basicDiscount || 0;\n const totalFee = _transport + _service + _point - discount;\n\n return (\n <FlexFormWrapper>\n <FormWrapper>\n <FormMainTitle>매칭 신청 내역을 알려드릴게요!</FormMainTitle>\n <DivisionLine x_small />\n <WithmateLabel>선택하신 서비스</WithmateLabel>\n <ServiceName>\n {productInfo.name} {productInfo.name.includes('내시경') ? '' : service === 'unemergency' ? 'Pro' : 'Basic'}\n </ServiceName>\n\n <LabelValue style={{ marginTop: '0px', marginBottom: '0px' }}>신청 내역</LabelValue>\n <DivisionLine />\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자 성함</WithmateLabel>\n <WithmateInput type='text' placeholder='' maxLength='24' name='patient' value={patient || null} disabled />\n </div>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자 나이</WithmateLabel>\n <WithmateInput type='text' maxLength='2' placeholder='50' name='age' suffix='세' value={age || null} disabled />\n </div>\n </FlexWrapper>\n\n <DivisionLine big />\n\n <FlexWrapper withHalf>\n {productInfo.name.includes('내시경') ? null : (\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자 연락처</WithmateLabel>\n <WithmateInput type='text' placeholder='' maxLength='11' name='contact' value={contact || null} disabled />\n </div>\n )}\n </FlexWrapper>\n\n <DivisionLine big />\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>보호자 연락처</WithmateLabel>\n <WithmateInput type='text' placeholder='' maxLength='11' name='guardContact' value={guardContact || null} disabled />\n </div>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자와의 관계</WithmateLabel>\n <WithmateInput type='text' placeholder='50' name='relate' value={relate || null} disabled />\n </div>\n </FlexWrapper>\n\n <DivisionLine big />\n\n <FlexWrapper withHalf>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>환자 성별</WithmateLabel>\n <WithmateInput type='text' placeholder='' name='sex' value={sex || null} disabled />\n </div>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>동행 인력 희망 성별</WithmateLabel>\n <WithmateInput type='text' placeholder='50' name='mateGender' value={mateGender || '상관 없음'} disabled />\n </div>\n </FlexWrapper>\n\n <DivisionLine big />\n\n <FlexWrapper withHalf>\n <WithmateLabel required>선택된 메이트</WithmateLabel>\n <WithmateInput type='text' name='mateName' value={mateName || '선택 안함'} disabled />\n </FlexWrapper>\n\n <DivisionLine big />\n\n <WithmateLabel required>목적지 주소 (방문 병원 위치)</WithmateLabel>\n <WithmateInput type='text' placeholder='' name='destination' value={destination || null} disabled />\n\n <DivisionLine big />\n {service === 'unemergency' && (\n <>\n <WithmateLabel required>출발지 주소 (자택, 터미널, 역, 입원 병원 등)</WithmateLabel>\n <WithmateInput type='text' placeholder='' name='starting' value={starting || null} disabled />\n\n <DivisionLine big />\n </>\n )}\n\n <WithmateLabel required>진료 일정</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder=''\n maxLength={24}\n name='reserveDate'\n value={moment(combineDateAndTime({ date: reserveDate, time: reserveTime, minute: reserveMinute })).format('YYYY-MM-DD HH시 mm분') || null}\n disabled\n />\n\n <DivisionLine big />\n\n {service === 'unemergency' && (\n <WithmateLabel required>\n 동행인의 출발지 도착 희망 시간 <LabelDescription>(자택, 터미널, 역, 입원 병원 등)</LabelDescription>\n </WithmateLabel>\n )}\n {service === 'assist' && (\n <WithmateLabel required>\n 동행인의 병원 도착 희망 시간 <LabelDescription>(진료 병원, 입원 병원 등)</LabelDescription>\n </WithmateLabel>\n )}\n <WithmateInput\n type='text'\n placeholder=''\n maxLength={24}\n name='meetDate'\n value={moment(combineDateAndTime({ date: reserveDate, time: meetTime, minute: meetMinute })).format('YYYY-MM-DD HH시 mm분') || null}\n disabled\n />\n\n <DivisionLine big />\n\n <WithmateLabel required>외출하실 때 '꼭' 계단을 이용하셔야 하나요?</WithmateLabel>\n <WithmateInput type='text' placeholder='' maxLength='24' name='environment' value={environment || null} disabled />\n\n <DivisionLine />\n\n <WithmateLabel required>메이트가 동행할 때 주의해야 할 점이 있을까요?</WithmateLabel>\n <WithmateInput type='text' placeholder='' maxLength='24' name='caution' value={caution || null} disabled />\n\n <DivisionLine />\n\n <WithmateLabel required>기타 요청 및 전달 사항</WithmateLabel>\n <WithmateTextarea type='text' placeholder='' name='comment' value={comment || null} disabled />\n </FormWrapper>\n\n <ResultFormWrapper>\n <FormMainTitle>결제 내역</FormMainTitle>\n <DivisionLine x_small />\n {service === 'unemergency' && (\n <>\n <WithmateSelect\n placeholder='이동 수단을 선택해주세요'\n value={transport || undefined}\n onChange={value => {\n handleChange({ target: { name: 'transport', value } });\n }}\n >\n <Select.Option value='common'>대중 교통</Select.Option>\n <Select.Option value='own'>본인 소유 자차 이동</Select.Option>\n </WithmateSelect>\n\n {transport === 'own' && (\n <>\n <DivisionLine x_small />\n <FormMainAlert>서비스 당일 ‘누구나 보험’ 변경 필수입니다.</FormMainAlert>\n </>\n )}\n <DivisionLine />\n </>\n )}\n\n <LabelAndValueRow borderColor='#cecfd0'>\n <LabelValue>예상 비용</LabelValue>\n {service === 'unemergency' ? (\n <PriceValue>\n {connection === '메트라이프'\n ? '(10% 할인가격) ' + (parseInt(totalFee, 10) + -1 * _point > 0 ? parseInt(totalFee, 10) + -1 * _point : 0) * 0.9\n : parseInt(totalFee, 10) + -1 * _point > 0\n ? parseInt(totalFee, 10) + -1 * _point\n : 0}\n 원\n </PriceValue>\n ) : (\n <PriceValue>{parseInt(totalFee, 10) + -1 * _point > 0 ? parseInt(totalFee, 10) + -1 * _point : 0}원</PriceValue>\n )}\n </LabelAndValueRow>\n {service === 'unemergency' ? (\n <>\n <LabelAndValueRow>\n <PriceDetailLabel>\n <span>ㄴ</span>보유 포인트\n </PriceDetailLabel>\n <PriceDetailValue>{data.point}원</PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow borderColor='#e6e6e6'>\n <PriceDetailLabel>\n <span>ㄴ</span>사용할 포인트\n </PriceDetailLabel>\n <PriceDetailValue>\n <WithmateInput\n type='text'\n small\n suffix='원'\n name='usePoint'\n value={data.usePoint || null}\n placeholder='0'\n onChange={handleChange}\n />\n </PriceDetailValue>\n </LabelAndValueRow>\n </>\n ) : null}\n <LabelAndValueRow borderColor='#e6e6e6'>\n <PriceDetailLabel>\n <span>ㄴ</span>결제 수단\n </PriceDetailLabel>\n <WithmateSelect\n placeholder='결제수단'\n value={data.payment || undefined}\n onChange={value => {\n handleChange({ target: { name: 'payment', value } });\n }}\n style={{ width: '102px' }}\n >\n <Select.Option value='transfer'>계좌이체</Select.Option>\n <Select.Option value='card'>카드결제</Select.Option>\n </WithmateSelect>\n </LabelAndValueRow>\n {data.payment === 'card' && (\n <>\n <FormMainAlert>카드결제 이용시 [ 서비스 안내 사항 ]을 확인하세요</FormMainAlert>\n <div style={{ textAlign: 'right' }}>\n <UnderLineText onClick={onPrevSetting3}>등록된 카드목록</UnderLineText>\n </div>\n <div style={{ flex: 1, paddingBottom: '10px' }}>\n <WithmateLabel required>결제 카드사</WithmateLabel>\n <WithmateSelect\n name='cardName'\n placeholder='카드사를 선택하세요'\n value={cardName || undefined}\n onChange={value => {\n handleChange({ target: { name: 'cardName', value } });\n }}\n >\n <Select.Option value='KB국민카드'>KB국민카드</Select.Option>\n <Select.Option value='삼성카드'>삼성카드</Select.Option>\n <Select.Option value='현대카드'>현대카드</Select.Option>\n <Select.Option value='우리카드'>우리카드</Select.Option>\n <Select.Option value='BC카드'>BC카드</Select.Option>\n <Select.Option value='신한카드'>신한카드</Select.Option>\n <Select.Option value='롯데카드'>롯데카드</Select.Option>\n <Select.Option value='NH농협카드'>NH농협카드</Select.Option>\n </WithmateSelect>\n </div>\n <div style={{ flex: 1, paddingBottom: '10px' }}>\n <WithmateLabel required>카드 번호</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='카드 번호를 입력하세요'\n maxLength='24'\n name='cardNum'\n value={cardNum || null}\n onChange={handleChange}\n />\n </div>\n <div style={{ flex: 1, paddingBottom: '10px' }}>\n <WithmateLabel required>유효기간(MM/YY)</WithmateLabel>\n <WithmateInput\n type='text'\n placeholder='월(MM)'\n maxLength='24'\n name='month'\n value={month || null}\n onChange={handleChange}\n style={{ width: '100px', marginRight: '15px' }}\n />\n <WithmateInput\n type='text'\n placeholder='년(YY)'\n maxLength='24'\n name='year'\n value={year || null}\n onChange={handleChange}\n style={{ width: '100px', marginRight: '15px' }}\n />\n </div>\n <div style={{ flex: 1 }}>\n <WithmateLabel required>할부 기간</WithmateLabel>\n <WithmateSelect\n name='installment'\n placeholder='할부 기간을 선택하세요'\n value={installment || undefined}\n onChange={value => {\n handleChange({ target: { name: 'installment', value } });\n }}\n >\n <Select.Option value='일시불'>일시불</Select.Option>\n <Select.Option value='2개월'>2개월</Select.Option>\n <Select.Option value='3개월'>3개월</Select.Option>\n <Select.Option value='4개월'>4개월</Select.Option>\n <Select.Option value='5개월'>5개월</Select.Option>\n <Select.Option value='6개월'>6개월</Select.Option>\n <Select.Option value='7개월'>7개월</Select.Option>\n <Select.Option value='8개월'>8개월</Select.Option>\n <Select.Option value='9개월'>9개월</Select.Option>\n <Select.Option value='10개월'>10개월</Select.Option>\n <Select.Option value='11개월'>11개월</Select.Option>\n <Select.Option value='12개월'>12개월</Select.Option>\n </WithmateSelect>\n </div>\n </>\n )}\n\n <DivisionLine />\n\n {/* <LabelAndValueRow>\n <LabelValue>포인트 적용 후 예상 비용</LabelValue>\n <PriceValue>{totalFee > 0 ? totalFee : 0}원</PriceValue>\n </LabelAndValueRow> */}\n\n <DivisionLine big />\n <DivisionLine big />\n\n <ServiceTypeName style={{ marginTop: '0px', marginBottom: '0px' }}>서비스 안내 사항</ServiceTypeName>\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_check.png' alt='아이콘' />\n • 위드메이트 서비스는 후불제이며, 모든 서비스가 종료된 이후 최종 요금 안내에 따라 [계좌이체] 또는 [카드결제]를 통한 결제를 진행해주시면\n 됩니다.\n <br />• [카드결제]를 이용하실 경우 [마이페이지]에서 사용하실 카드를 등록하시면 편리하게 카드 정보로 결제하실 수 있습니다.\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_check.png' alt='아이콘' />\n <span>\n • [카드결제]는 [페이투페이]의 <a>수기결제</a>로 카드결제가 진행됩니다. <br />• 카드 정보는 서비스 비용 결제 목적으로만 이용되며, 그 외\n 다른 목적으로 이용되거나 제3자에게 제공되는 일은 절대 없습니다.\n </span>\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_check.png' alt='아이콘' />\n 이동 수단 중 [자차 이동]을 선택한 경우 예약일에 맞춰 차량 보험을 예약자 또는 본인이 직접 [누구나 보험]으로 변경해주셔야 합니다.\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_check.png' alt='아이콘' />\n 택시비와 진료비 등의 부가 비용은 고객님께서 부담해주셔야 합니다.\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_pin.png' alt='아이콘' />\n <span>\n 서비스에 대한 추가 문의 사항은 <a>FAQ</a>에서 확인 가능합니다. 위드메이트 상담 센터 운영 시간은 월 ~ 금 09:00 ~ 18:00 입니다.\n </span>\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText alert>\n <img src='/assets/images/w_alert.png' alt='아이콘' />\n 위드메이트는 플랫폼 내 전문 인력 스스로 매칭 신청을 검토하므로, 매칭 신청을 하시더라도 최종 매칭에 실패할 가능성이 있음을 알려드립니다.\n </DashAndText>\n <MobileStepImage>\n <img src={service === 'unemergency' ? '/assets/images/art_pro.png' : '/assets/images/art_basic.png'} alt='스텝이미지' />\n </MobileStepImage>\n </ResultFormWrapper>\n </FlexFormWrapper>\n );\n};\n\nconst DoneForm = ({ data }) => {\n const { usePoint, point, transport, reserveDate, reserveTime, reserveMinute, productInfo, service, addTime } = data;\n\n const _transport = transport && transport === 'own' ? 20000 : 0;\n const _service =\n productInfo && service && (service === 'unemergency' ? productInfo.proPrice : productInfo.basicPrice ? productInfo.basicPrice : 0) * addTime;\n\n const _point = (usePoint || 0) * -1;\n const discount = service === 'unemergency' ? productInfo.proDiscount || 0 : productInfo.basicDiscount || 0;\n\n const totalFee = _transport + _service + _point - discount;\n\n return (\n <FormWrapper>\n <ServiceTypeName style={{ marginTop: '0px', marginBottom: '0px' }}>매칭 신청이 완료되었어요!</ServiceTypeName>\n <CongraturateLogo>\n <img src='/assets/images/artwork_festival.png' alt='예약완료' />\n </CongraturateLogo>\n\n <DoneResultWrapper>\n <LabelAndValueRow borderColor='#cecfd0'>\n <LabelValue>신청일자</LabelValue>\n <PriceDetailValue style={{ color: 'rgba(0,0,0,0.7)' }}>\n {moment(combineDateAndTime({ date: reserveDate, time: reserveTime, minute: reserveMinute })).format('YYYY-MM-DD HH시 mm분')}\n </PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow borderColor='#cecfd0'>\n <LabelValue>선택하신 서비스</LabelValue>\n <PriceDetailValue style={{ color: 'rgba(0,0,0,0.7)' }}>\n {productInfo.name} {productInfo.name.includes('내시경') ? '' : service === 'unemergency' ? 'Pro' : 'Basic'}\n </PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow borderColor='#cecfd0'>\n <LabelValue>총 예상 비용</LabelValue>\n <ServiceName style={{ marginBottom: '0px' }}>{totalFee}</ServiceName>\n </LabelAndValueRow>\n <LabelAndValueRow>\n <PriceDetailLabel>\n <span>ㄴ</span>사용된 포인트\n </PriceDetailLabel>\n <PriceDetailValue>{data.usePoint}원</PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow>\n <PriceDetailLabel>\n <span>ㄴ</span>잔여 포인트\n </PriceDetailLabel>\n <PriceDetailValue>{point - usePoint}원</PriceDetailValue>\n </LabelAndValueRow>\n <LabelAndValueRow>\n <PriceDetailLabel>\n <span>ㄴ</span>결제 수단\n </PriceDetailLabel>\n <PriceDetailValue value>{data.payment === 'card' ? '카드결제' : '계좌이체'}</PriceDetailValue>\n </LabelAndValueRow>\n </DoneResultWrapper>\n\n <DivisionLine />\n <ServiceTypeName style={{ marginTop: '0px', marginBottom: '0px' }}>서비스 안내 사항</ServiceTypeName>\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_check.png' alt='아이콘' />\n 위드메이트 서비스는 후불제이며, 모든 서비스가 종료된 이후 최종 요금 안내에 따라 계좌 이체를 통한 결제를 진행해주시면 됩니다.\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_check.png' alt='아이콘' />\n 이동 수단 중 ‘자차 이동’을 선택한 경우 예약일에 맞춰 차량 보험을 예약자 또는 본인이 직접 ‘누구나 보험’으로 변경해주셔야 합니다.\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_check.png' alt='아이콘' />\n 택시비와 진료비 등의 부가 비용은 고객님께서 부담해주셔야 합니다.\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText>\n <img src='/assets/images/w_pin.png' alt='아이콘' />\n <span>\n 서비스에 대한 추가 문의 사항은 <a>FAQ</a>에서 확인 가능합니다. 위드메이트 상담 센터 운영 시간은 월 ~ 금 09:00 ~ 18:00 입니다.\n </span>\n </DashAndText>\n\n <DivisionLine />\n\n <DashAndText alert>\n <img src='/assets/images/w_alert.png' alt='아이콘' />\n 위드메이트는 플랫폼 내 전문 인력 스스로 매칭 신청을 검토하므로, 매칭 신청을 하시더라도 최종 매칭에 실패할 가능성이 있음을 알려드립니다.\n </DashAndText>\n </FormWrapper>\n );\n};\n\nconst CustomButtonWrapper = styled(ButtonWrapper)`\n max-width: 640px;\n margin: 0 auto;\n\n @media (max-width: 480px) {\n flex-direction: column;\n\n > a:first-child {\n order: 2;\n margin-bottom: 48px;\n }\n\n > a:last-child {\n order: 1;\n }\n }\n`;\n","import React from 'react';\nimport { debounce } from 'lodash';\nimport styled from 'styled-components';\nimport { message, Spin } from 'antd';\nimport _ from 'lodash';\n\n// components\nimport { NoCatchedList } from '../../../../Components/User/Mate/reserve';\nimport { MateReserveInfoModal } from '../../../../Components/modal';\n\n// utils\nimport axios from '../../../../Lib/axios';\n\nclass Reserve extends React.PureComponent {\n state = {\n reserveModal: false,\n reserveInfo: null,\n refreshing: false,\n list: [],\n };\n\n componentDidMount = () => {\n this.fetchList();\n };\n\n fetchList = debounce(() => {\n const mateId = localStorage.getItem('id');\n\n this.setState(\n {\n refreshing: true,\n },\n () => {\n axios\n .get('/v2/service/mate/reserve/list', {\n params: {\n mateId,\n },\n })\n .then(resolve => {\n const { data: list } = resolve;\n if (list && Array.isArray(list)) {\n this.setState({ list, refreshing: false });\n }\n })\n .catch(error => {\n this.setState({ refreshing: false });\n });\n },\n );\n }, 300);\n\n onCatchCall = () => {\n const { reserveInfo } = this.state;\n const { id } = this.props.auth;\n\n if (!reserveInfo || !reserveInfo.call || !reserveInfo.call._id) {\n this.setState({ reserveInfo: null, reserveModal: false });\n message.warning('유효하지않은 예약내역입니다. 다른 예약내역을 확인해주세요.');\n return null;\n }\n\n axios\n .put('/v2/service/catch/call', {\n callId: reserveInfo.call._id,\n mateId: id,\n })\n .then(resolve => {\n const { data: result } = resolve;\n if (!result) return message.warning('요청에 실패했습니다.');\n if (result === 'invalid call') return message.warning('잘못된 요청입니다.');\n if (result === 'already catched') return message.warning('이미 접수된 요청입니다.');\n if (result === 'denied') return message.warning('예약자에 의해 거절 당하셨거나 혹은 메이트님이 직접 해당 내역을 수신거부 하셨습니다.');\n if (result === 'success') {\n message.success('예약 접수 요청완료');\n this.setState({ reserveModal: false, reserveInfo: null }, () => {\n this.fetchList();\n });\n }\n })\n .catch(error => {\n message.warning('요청에 실패했습니다.');\n });\n };\n\n render() {\n const { list } = this.state;\n\n return (\n <>\n <NoCatchedList\n data={this.state}\n list={list}\n onRefresh={this.fetchList}\n detailHandler={info => {\n this.setState({ reserveModal: true, reserveInfo: info });\n }}\n />\n\n {this.state.reserveModal ? (\n <MateReserveInfoModal\n info={this.state.reserveInfo}\n visibleHandler={() => {\n this.setState({\n reserveModal: false,\n reserveInfo: null,\n });\n }}\n onCatch={this.onCatchCall}\n />\n ) : null}\n\n {this.state.refreshing ? (\n <SpinWrapper>\n <Spin size='large' />\n </SpinWrapper>\n ) : null}\n </>\n );\n }\n}\n\nconst SpinWrapper = styled.div`\n position: fixed;\n top: 0px;\n left: 0px;\n width: 100vw;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n\n\n z-index: 9999\n background-color: rgba(0, 0, 0, 0.6);\n`;\n\nexport default Reserve;\n","import { message } from 'antd';\nimport React from 'react';\nimport styled from 'styled-components';\nimport swal from 'sweetalert2';\nimport SwiperCore, { Pagination, Navigation, Autoplay } from 'swiper';\nimport 'swiper/swiper-bundle.min.css';\nimport 'swiper/swiper.min.css';\nimport 'swiper/components/navigation/navigation.min.css';\nimport 'swiper/components/pagination/pagination.min.css';\n\nSwiperCore.use([Navigation, Pagination, Autoplay]);\n\nexport const UserMain = ({ history }) => {\n return (\n <UserMainContainer>\n <UserMainInnerContainer>\n <WithmateSpecRow>\n <img src='/assets/images/collaboration/withmate_metlife_main.png' style={{ paddingTop: '40px', width: '380px' }} alt='메인 이미지' />\n </WithmateSpecRow>\n <BottomSection>\n <HighLight>\n 메트라이프 360Future <br />\n 회원만을 위한 <br />\n <p style={{ fontSize: '30px', color: '#3bc1ff' }}>병원동행서비스</p>\n </HighLight>\n <ButtonWrapper>\n <ReserveButton\n onClick={() => {\n window.open('https://play.google.com/store/apps/details?id=com.bluecamel.withmate');\n }}\n >\n 위드메이트 이용하기\n </ReserveButton>\n <ReserveButton\n onClick={() => {\n if (!localStorage.getItem('id')) {\n message.warning('병원 동행서비스 예약을 이용하시려면 회원가입 후 이용해주세요.');\n return history.push('/user/register?url_source=metlife');\n }\n\n history.push('/reserve/items');\n }}\n >\n 동행서비스 예약\n <img src='/assets/images/main_right_blue.png' alt='방향표' />\n </ReserveButton>\n <div style={{ paddingBottom: '8px' }} />\n <CallButton\n onClick={() => {\n swal.fire({\n title: '위드메이트 고객센터',\n text: '☎ 070-4300-9075',\n icon: 'info',\n confirmButtonText: '전화걸기',\n cancelButtonText: '확인',\n showCancelButton: true,\n }).then(result => {\n if (result.isConfirmed) {\n document.location.href = 'tel:070-4300-9075';\n }\n });\n }}\n >\n 전화 상담하기\n <img src='/assets/images/icons/phone.png' alt='전화기' />\n </CallButton>\n </ButtonWrapper>\n </BottomSection>\n </UserMainInnerContainer>\n </UserMainContainer>\n );\n};\n\nconst UserMainContainer = styled.div`\n width: 100%;\n height: 628px;\n\n background: linear-gradient(to top, #ffffff, #eeeeee);\n\n @media (max-width: 768px) {\n // height: 598px;\n height: 650px;\n }\n`;\n\nconst UserMainInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n height: 100%;\n margin: 0 auto;\n\n background-image: url('/assets/images/w_main.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n padding-top: 72px;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n padding-top: 52px;\n align-items: center;\n background: transparent;\n }\n`;\n\nconst WithmateSpecRow = styled.div`\n display: flex;\n align-items: flex-end;\n\n font-size: 32px;\n font-stretch: normal;\n font-style: normal;\n font-weight: 300;\n line-height: 1.48;\n letter-spacing: -0.7px;\n text-align: left;\n color: #ffffff;\n\n > span {\n font-size: 32px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.7px;\n text-align: left;\n color: #ffffff;\n\n margin-left: 4px;\n }\n\n > span.big {\n font-size: 64px;\n line-height: 1.2;\n position: relative;\n margin-right: 6px;\n\n > d {\n font-size: 28px;\n position: absolute;\n top: -16px;\n left: calc(50% - 12px);\n }\n }\n\n > span.normal {\n font-size: 40px;\n line-height: 1.2;\n position: relative;\n margin-right: 6px;\n\n > d {\n font-size: 18px;\n position: absolute;\n top: -16px;\n left: calc(50% - 12px);\n }\n }\n\n margin-bottom: 4px;\n\n @media (max-width: 768px) {\n margin-bottom: 8px;\n\n font-size: 22px;\n\n > span {\n font-size: 22px;\n }\n\n > span.big {\n font-size: 48px;\n line-height: 1.2;\n position: relative;\n margin-right: 4px;\n\n > d {\n font-size: 20px;\n position: absolute;\n top: -16px;\n left: calc(50% - 8px);\n }\n }\n }\n`;\n\nconst BottomSection = styled.div`\n margin-top: 28px;\n\n @media (max-width: 768px) {\n margin-top: 43px;\n }\n`;\n\nconst HighLight = styled.p`\n font-size: 28px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.2px;\n text-align: left;\n color: black;\n\n margin-bottom: 64px;\n\n @media (max-width: 768px) {\n text-align: center;\n }\n`;\n\nconst ButtonWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: center;\n\n > div:first-child {\n margin-bottom: 8px;\n }\n }\n`;\n\nconst ButtonCommon = styled.div`\n display: flex;\n padding: 20px 24px;\n width: 210px;\n align-items: center;\n justify-content: space-between;\n\n border-radius: 4px;\n margin-right: 8px;\n cursor: pointer;\n\n > img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n }\n\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n\n &:hover {\n box-shadow: 4px 10px 24px -4px rgba(0, 0, 0, 0.1);\n transition: all 0.3s;\n }\n\n @media (max-width: 768px) {\n }\n`;\n\nconst GPButtonCommon = styled.div`\n display: flex;\n padding: 20px 24px;\n width: 210px;\n align-items: center;\n\n border-radius: 4px;\n margin-right: 8px;\n cursor: pointer;\n\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n\n &:hover {\n box-shadow: 4px 10px 24px -4px rgba(0, 0, 0, 0.1);\n transition: all 0.3s;\n }\n\n @media (max-width: 768px) {\n }\n`;\n\nconst ReserveButton = styled(ButtonCommon)`\n background-color: #ffffff;\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n }\n`;\n\nconst CallButton = styled(ButtonCommon)`\n border: 1px solid #ffffff;\n\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n background-color: white;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst GooglePlayButton = styled(GPButtonCommon)`\n background-color: #ffffff;\n border-color: #ffffff;\n border-style: solid;\n font-size: 18px;\n font-weight: bold;\n font-style: normal;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n height: 60px;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const UserGuideSection = () => {\n return (\n <UserGuideContainer>\n <UserGuideInnerContainer>\n <UserGuideTitle>서비스 이용 방법</UserGuideTitle>\n <UserGuideStepWrapper>\n <TextStep>서비스 신청</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>동행 인력 매칭</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>병원 방문</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>서비스 결과 확인</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>후불 결제</TextStep>\n <ImgStep src='/assets/images/main_right_gray.png' alt='방향표' />\n <TextStep>혜택 적립</TextStep>\n </UserGuideStepWrapper>\n\n <MainStepRow>\n <MainStep\n webArrow\n mArrow\n source='/assets/images/main_step_1.png'\n description={`위드메이트 플랫폼에 회원 가입 후\\n병원 동행 서비스 종류를 선택하고\\n신청해주세요!`}\n num='01'\n name='신청하세요!'\n />\n <MainStep\n webArrow\n mArrow\n source='/assets/images/main_step_2.png'\n description={`접수하신 서비스는 24시간 내에\\n매칭 가능 여부가 결정됩니다. 동행 인력이\\n매칭을 시도하면 고객님께서 매칭 수락\\n여부를 결정하시면 됩니다!`}\n num='02'\n name='매칭되세요!'\n />\n <MainStep\n className='uniq'\n mArrow\n source='/assets/images/main_step_3.png'\n description={`동행 인력 매칭 성공 후 예정된 진료일에\\n병원에 다녀오세요! 병원에서 하실 일은\\n진료를 받는 것 밖에 없습니다.\\n진료 동행, 보호자 대행, 병원 행정 보조 등\\n 나머지는 위드메이트가 해드립니다.`}\n num='03'\n name='다녀오세요!'\n />\n </MainStepRow>\n\n <MainStepRow>\n <MainStep\n webArrow\n mArrow\n source='/assets/images/main_step_4.png'\n description={`위드메이트는 동행 서비스 진행 과정을\\n실시간 카카오 알림톡으로 알려드리고,\\n서비스 종료 후 진료 결과와 특이사항 등의\\n내용이 정리된 서비스 리포트를 제공합니다`}\n num='04'\n name='확인하세요!'\n />\n <MainStep\n webArrow\n mArrow\n source='/assets/images/main_step_5.png'\n description={`위드메이트는 정확한 시간 계산이 불가능한\\n병원 진료 특성상, 서비스 요금의 투명성을\\n위해 후불 결제를 진행하고 있습니다.\\n서비스 시간은 초 단위로 자동 계산되니,\\n안심하고 서비스를 받으세요!`}\n num='05'\n name='후불이에요!'\n />\n <MainStep\n source='/assets/images/main_step_6.png'\n description={`회원 가입만 해도 2,000 포인트를\\n지급해드리며, 매번 서비스 후기 작성을\\n할 때마다 최대 3,000 포인트를 지급해드려요!\\n적립된 포인트로 더 저렴하게 서비스를\\n이용해보세요!`}\n num='06'\n name='받아가세요!'\n />\n </MainStepRow>\n </UserGuideInnerContainer>\n </UserGuideContainer>\n );\n};\n\nconst MainStep = ({ webArrow, mArrow, source, num, name, description, className }) => {\n return (\n <MainStepWrapper className={className || ''}>\n <MainStepImageSection>\n <img className='bg' src={source} alt='thumbnail' />\n </MainStepImageSection>\n\n <MainStepTextSection>\n <StepIndex>{num}</StepIndex>\n <StepTitle>{name}</StepTitle>\n <StepDescription>\n {description.split('\\n').map((word, index) => (\n <span key={'word-break-down-' + index.toString() + num}>\n {word}\n <KeepBr />\n </span>\n ))}\n </StepDescription>\n </MainStepTextSection>\n <img className={`arrow ${webArrow && 'web'} ${mArrow && 'mobile'}`} src='/assets/images/w_main_stepper.png' />\n </MainStepWrapper>\n );\n};\n\nconst UserGuideContainer = styled.div`\n width: 100%;\n\n background-color: #ffffff;\n\n padding-top: 103px;\n padding-bottom: 162px;\n\n @media (max-width: 768px) {\n padding-top: 90px;\n padding-bottom: 130px;\n }\n`;\n\nconst UserGuideInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n`;\n\nconst UserGuideTitle = styled.h4`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n\n margin-top: 0px;\n margin-bottom: 32px;\n\n @media (max-width: 768px) {\n font-size: 16px;\n line-height: 1.42;\n letter-spacing: -0.1px;\n margin-bottom: 24px;\n }\n`;\n\nconst UserGuideStepWrapper = styled.div`\n width: 100%;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n margin-bottom: 90px;\n\n @media (max-width: 768px) {\n flex-direction: column;\n margin-bottom: 77px;\n }\n`;\n\nconst TextStep = styled.span`\n font-size: 15px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: normal;\n text-align: left;\n color: rgba(0, 0, 0, 0.6);\n`;\n\nconst ImgStep = styled.img`\n margin-left: 16px;\n margin-right: 16px;\n\n width: 24px;\n height: 24px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n transform: rotate(90deg);\n\n width: 16px;\n height: 16px;\n\n margin-left: 0px;\n margin-right: 0px;\n\n margin-top: 8px;\n margin-bottom: 8px;\n }\n`;\n\nconst MainStepRow = styled.div`\n display: flex;\n align-items: flex-start;\n\n > div:first-child {\n border-left: 0px;\n }\n\n > div:last-child {\n border-right: 0px;\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: center;\n\n > div:last-child {\n border-bottom: 0px;\n }\n\n > div.uniq {\n border-bottom: 1px solid #f2f2f2;\n }\n }\n`;\n\nconst MainStepWrapper = styled.div`\n padding-left: 47px;\n padding-right: 52px;\n border-right: 1px solid #f2f2f2;\n\n position: relative;\n\n > img.arrow {\n width: 24px;\n height: 24px;\n\n position: absolute;\n top: calc(90px - 12px);\n right: -11.5px;\n\n display: none;\n }\n\n > img.mobile {\n display: none;\n }\n\n > img.web {\n display: block;\n }\n\n @media (max-width: 768px) {\n border-right: 0px;\n border-bottom: 1px solid #f2f2f2;\n\n > img.arrow {\n width: 24px;\n height: 24px;\n\n top: unset;\n right: unset;\n bottom: -10px;\n left: calc(50% - 12px);\n\n transform: rotate(90deg);\n }\n\n > img.web {\n display: none;\n }\n\n > img.mobile {\n display: block;\n }\n }\n\n @media (max-width: 768px) {\n padding-right: 0px;\n padding-left: 0px;\n padding-bottom: 44px;\n }\n`;\n\nconst MainStepImageSection = styled.div`\n width: 288px;\n height: 180px;\n\n margin-bottom: 24px;\n\n > img.bg {\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n @media (max-width: 768px) {\n width: 100%;\n text-align: center;\n }\n`;\n\nconst MainStepTextSection = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n`;\n\nconst StepIndex = styled.span`\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.43;\n letter-spacing: normal;\n text-align: center;\n color: #afb0b2;\n margin-bottom: 8px;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst StepTitle = styled.span`\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: left;\n margin-bottom: 24px;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n }\n`;\n\nconst StepDescription = styled.span`\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-size: 15px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: -0.3px;\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n }\n word-break: keep-all;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst KeepBr = styled.br`\n display: block;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n","import styled from 'styled-components';\nimport { mainColor, sizeHandler } from '../../../theme';\n\nconst HomeStyledContainer = styled.div`\n padding-top: 55px;\n\n .center-title {\n text-align: center;\n margin-bottom: 28px;\n\n > p {\n height: 52px;\n line-height: 52px;\n margin-bottom: 0px;\n font-size: 28px;\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n }\n }\n\n .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 0px;\n }\n\n .ant-collapse-borderless > .ant-collapse-item {\n border: 0px;\n }\n\n .ant-collapse-content > .ant-collapse-content-box {\n padding: 0px;\n padding-top: 4px;\n padding-bottom: 12px;\n }\n\n .fake-input {\n width: 100%;\n height: 36px;\n border-radius: 4px;\n border: 1px solid #e6e6e6;\n }\n\n .main-section {\n position: relative;\n width: 100%;\n height: 100vh;\n max-height: 628px;\n // min-height: calc(100vh - 55px);\n\n // background-color: #ebf9ff;\n // background-image: url('/assets/images/new_mainbg.png');\n background-color: linear-gradient(to top, #3bc1ff, #5b62f5);\n background-image: url('/assets/images/w_main.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n @media (max-width: 768px) {\n background-image: url('/assets/images/new_mainbg-mobile.png');\n min-height: 86vh;\n\n .inner-container {\n padding: 0px;\n padding-bottom: 30px;\n min-height: 86vh;\n\n display: flex;\n align-items: flex-end;\n justify-content: flex-end;\n }\n }\n\n .ant-input[disabled] {\n color: rgba(0, 0, 0, 0.7);\n }\n .ant-input {\n font-size: 12px;\n }\n\n .order-menu-wrapper {\n width: 50%;\n position: relative;\n max-width: 440px;\n min-width: 370px;\n background-color: white;\n border-radius: 8px;\n box-shadow: 1px 2px 3.5px #e6e6e6;\n padding: 32px;\n\n .mobile-close-button {\n display: none;\n }\n\n @media (max-width: 768px) {\n display: none;\n\n &.active {\n display: block;\n }\n\n margin: 0px auto;\n position: fixed;\n z-index: 99;\n top: 55px;\n left: 0px;\n width: 100%;\n max-width: 100%;\n height: calc(100vh - 55px);\n overflow: scroll;\n border-radius: 0px;\n\n .mobile-close-button {\n display: block;\n position: absolute;\n top: 16px;\n right: 24px;\n padding: 6px;\n cursor: pointer;\n\n img {\n width: 18px;\n height: 18px;\n }\n }\n\n &.blocked {\n z-index: 0;\n position: relative;\n height: auto;\n overflow: auto;\n }\n }\n\n .order-title {\n margin-bottom: 20px;\n\n p {\n margin: 0px;\n padding: 0px;\n font-size: ${sizeHandler(28)};\n font-weight: bold;\n letter-spacing: -0.7px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .service {\n margin-bottom: 20px;\n\n .time-checker {\n width: calc(50% - 4px);\n }\n\n .time-checker.margin {\n margin-right: 8px;\n }\n\n .search-button {\n position: absolute;\n top: 1px;\n right: 1px;\n background-color: #ececec;\n height: 34px;\n width: 50px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n\n font-size: 12px;\n line-height: 34px;\n text-align: center;\n cursor: pointer;\n color: rgba(0, 0, 0, 0.4);\n }\n\n .service-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #ddd;\n border-radius: 6px;\n\n .tab {\n flex: 1;\n height: 48px;\n border-right: 1px solid #ddd;\n cursor: pointer;\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:last-child {\n border: 0px;\n }\n\n span {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.2px;\n font-weight: bold;\n color: ${mainColor};\n }\n }\n\n .tab.active {\n background-color: ${mainColor};\n\n span {\n color: white;\n }\n }\n }\n\n .info-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n\n p {\n flex: 1;\n margin: 0px;\n padding: 0px;\n text-align: left;\n\n &:first-child {\n margin-right: 8px;\n }\n }\n }\n\n .info-input-tab {\n display: flex;\n align-items: center;\n\n > div {\n flex: 1;\n\n &:first-child {\n margin-right: 8px;\n }\n }\n\n .name-wrapper {\n position: relative;\n\n .sex-type-wrapper {\n position: absolute;\n top: 1px;\n right: 1px;\n z-index: 3;\n background-color: white;\n\n .sex-type {\n display: inline-block;\n width: 34px;\n height: 34px;\n line-height: 36px;\n text-align: center;\n border-left: 1px solid #e6e6e6;\n\n font-size: ${sizeHandler(14)};\n font-weight: normal;\n letter-spacing: -0.2px;\n color: rgba(0, 0, 0, 0.2);\n cursor: pointer;\n\n &:hover {\n color: rgba(0, 0, 0, 0.3);\n transition: all 0.3s;\n }\n\n &.active {\n color: ${mainColor};\n }\n }\n }\n }\n\n .input {\n flex-grow: 1;\n display: flex;\n min-width: 0;\n align-items: center;\n\n border-radius: 4px;\n border: solid 1px #e6e6e6;\n min-height: 36px;\n line-height: 36px;\n text-indent: 12px;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n background-color: #f5f5f5;\n cursor: not-allowed;\n\n p {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n // .ant-input {\n // color: rgba(0, 0, 0, 0.8);\n // }\n\n &.phone {\n flex: 0.5;\n\n @media (max-width: 768px) {\n flex: 1;\n }\n }\n\n &.input-with-icon {\n p {\n height: 100%;\n flex: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n div {\n height: 100%;\n width: 36px;\n border-left: 1px solid #e6e6e6;\n display: flex;\n justify-content: center;\n align-items: center;\n\n span {\n text-align: center;\n text-indent: 0px;\n // opacity: 0.3;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n img {\n width: 18px;\n }\n }\n }\n }\n }\n }\n\n .service-fee-wrapper {\n margin-bottom: 32px;\n\n .service {\n display: flex;\n align-items: center;\n padding-top: 12px;\n margin-bottom: 0px;\n\n .name {\n flex: 1;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .fee {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: right;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n input {\n height: 36px;\n display: inline-block;\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ant-input-number-input-wrap {\n height: 100%;\n\n .ant-input-number-input {\n height: 100%;\n }\n\n input {\n height: 100%;\n }\n }\n\n .select {\n display: inline-block;\n height: 36px;\n width: 100%;\n\n .ant-select-selection--single {\n height: 100%;\n }\n\n .ant-select-selection__rendered {\n line-height: 36px;\n }\n }\n\n .info {\n font-size: ${sizeHandler(12)};\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 4px;\n letter-spacing: -0.15px;\n }\n\n .ant-select-selection__rendered {\n margin-right: 34px;\n border-right: 1px solid #e6e6e6;\n }\n\n .ant-select-arrow {\n color: ${mainColor};\n }\n\n .image-with-text {\n display: flex;\n align-items: center;\n img {\n height: 18px;\n border: 0px;\n }\n\n p {\n flex: 1;\n margin: 0px;\n padding: 0px;\n margin-left: 12px;\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: #3bc1ff;\n }\n }\n }\n\n .side-summary-tab {\n position: absolute;\n top: 0px;\n right: -380px;\n width: 360px;\n height: 100%;\n background-color: white;\n border-radius: 8px;\n box-shadow: 1px 2px 3.5px #e6e6e6;\n padding: 32px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n border-radius: 0px;\n box-shadow: none;\n padding: 0px;\n position: relative;\n top: 55px;\n left: 0px;\n background-color: transparent;\n }\n\n .refund-info-wrapper {\n flex: 1;\n display: flex;\n align-items: flex-end;\n\n .info-wrapper {\n width: 100%;\n\n .title {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n color: #a7a7a7;\n margin-bottom: 8px;\n }\n\n .info {\n font-size: ${sizeHandler(10)};\n line-height: ${sizeHandler(16)};\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n margin-top: 36px;\n padding-bottom: 20px;\n\n .info {\n margin-bottom: 60px;\n }\n }\n }\n }\n }\n }\n }\n\n .additional-fee {\n p {\n margin: 0px;\n padding: 0px;\n margin-top: 8px;\n font-size: ${sizeHandler(10)};\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .ant-input-number {\n width: 100%;\n height: 48px;\n\n .ant-input-number-input-wrap {\n height: 100%;\n\n .ant-input-number-input {\n height: 100%;\n }\n\n input {\n height: 100%;\n }\n }\n\n .ant-input-number-handler-wrap {\n opacity: 1;\n width: 48px;\n\n span {\n display: flex;\n align-items: center;\n justify-content: center;\n\n i {\n position: relative;\n margin-top: 0px;\n left: 0px;\n top: 0px;\n bottom: 0px;\n right: 0px;\n font-size: 16px;\n }\n }\n .anticon.anticon-up.ant-input-number-handler-up-inner {\n color: ${mainColor};\n }\n .anticon.anticon-down.ant-input-number-handler-down-inner {\n color: ${mainColor};\n }\n }\n }\n\n .total-fee-wrapper {\n padding: 18px 0px;\n border-top: 1px solid #e6e6e6;\n border-bottom: 1px solid #e6e6e6;\n\n .total-fee {\n display: flex;\n align-items: center;\n\n .total-min {\n flex: 1;\n font-size: ${sizeHandler(14)};\n // font-weight: bold;\n letter-spacing: -0.5px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .fee-min {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.5px;\n text-align: right;\n // font-weight: bold;\n // color: #3bc1ff;\n\n color: rgba(0, 0, 0, 0.7);\n }\n\n span.vat {\n font-size: ${sizeHandler(11)};\n color: #565656;\n }\n }\n\n .total {\n flex: 1;\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n letter-spacing: -0.5px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .fee {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n letter-spacing: -0.5px;\n text-align: right;\n color: #3bc1ff;\n }\n }\n\n // 여기\n .service-section {\n .concept-container {\n margin-bottom: 68px;\n\n .concept-title {\n font-size: 24px;\n font-weight: bold;\n line-height: 2.17;\n letter-spacing: -0.67px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 12px;\n }\n\n .concept-body {\n font-size: 18px;\n font-weight: normal;\n line-height: 1.78;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n\n @media (max-width: 768px) {\n font-size: 16px;\n }\n }\n }\n\n .service-item:last-child {\n border-top: 1px solid #e6e6e6;\n margin-top: 96px;\n padding-top: 96px;\n }\n\n .service-item {\n .service-name {\n p {\n font-size: ${sizeHandler(36)};\n font-weight: bold;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n position: relative;\n\n .stamp {\n margin-left: 20px;\n padding: 8px 12px;\n border-radius: 4px;\n background-color: #ff0052;\n font-size: 10px;\n font-weight: bold;\n text-align: center;\n color: #ffffff;\n\n position: absolute;\n bottom: 6px;\n }\n }\n\n margin-bottom: 12px;\n }\n\n .mobile {\n display: none;\n }\n\n .desktop {\n display: block;\n }\n\n .service-info {\n display: flex;\n align-items: center;\n\n .service-photo {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding-left: 60px;\n\n img {\n // height: 100%;\n width: 100%;\n }\n }\n\n .info-wrapper {\n flex: 2;\n\n .main-description {\n font-size: ${sizeHandler(18)};\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -0.3px;\n margin-bottom: 32px;\n\n @media (max-width: 768px) {\n font-size: 16px;\n }\n }\n\n .service-detail {\n display: flex;\n align-item: center;\n\n .target-price {\n // flex: ;\n min-width: 240px;\n\n .target {\n margin-bottom: 36px;\n }\n }\n\n .scheme {\n flex: 1;\n margin-left: 20px;\n\n .scheme-items {\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n height: 38px;\n line-height: 38px;\n margin: 0px;\n padding: 0px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n border-bottom: 1px solid #e6e6e6;\n }\n\n .ps {\n font-size: ${sizeHandler(14)};\n color: ${mainColor};\n // font-weight: bold;\n height: 28px;\n line-height: 28px;\n\n &:nth-child(2n-1) {\n color: #ff5500;\n }\n }\n }\n }\n\n .detail-button-wrapper {\n min-width: 240px;\n margin-top: 40px;\n background-color: #606060;\n border-radius: 4px;\n height: 48px;\n cursor: pointer;\n\n p {\n width: 100%;\n height: 100%;\n text-align: center;\n line-height: 48px;\n font-size: ${sizeHandler(14)};\n color: white;\n font-weight: bold;\n }\n }\n\n .reserve-button-wrapper {\n flex: 1;\n\n margin-top: 40px;\n background-color: ${mainColor};\n border-radius: 4px;\n height: 48px;\n cursor: pointer;\n\n p {\n width: 100%;\n height: 100%;\n text-align: center;\n line-height: 48px;\n font-size: ${sizeHandler(14)};\n color: white;\n font-weight: bold;\n }\n }\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 36px;\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n .price-content {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n color: #606060;\n letter-spacing: -0.3px;\n }\n\n .info-container {\n .spec-title {\n font-size: 18px;\n font-weight: bold;\n line-height: 1.56;\n letter-spacing: normal;\n color: rgba(0, 0, 0, 0.8);\n }\n\n .spec-wrapper {\n padding: 8px 0px;\n border-bottom: 1px solid #e6e6e6;\n\n .spec-row {\n font-size: 14px;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n }\n\n .spec-sub {\n font-size: 12px;\n letter-spacing: -0.26px;\n color: #a7a7a7;\n margin: 0px;\n margin-top: 4px;\n }\n }\n }\n\n .button-container {\n display: flex;\n align-items: center;\n margin-top: 32px;\n\n .button {\n border-radius: 4px;\n height: 48px;\n line-height: 48px;\n text-align: center;\n cursor: pointer;\n\n &.video-button {\n width: 285px;\n background-color: #606060;\n margin-right: 20px;\n\n &:hover {\n transition: all 0.3s;\n background-color: #707070;\n }\n }\n\n &.reserve-button {\n background-color: #3bc1ff;\n flex: 1;\n\n &:hover {\n transition: all 0.3s;\n background-color: #54c9ff;\n }\n }\n\n span {\n font-size: 14px;\n font-weight: bold;\n text-align: center;\n color: #ffffff;\n }\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n\n .button {\n width: 100% !important;\n margin-right: 0px !important;\n height: 40px;\n line-height: 40px;\n\n &:last-child {\n margin-top: 16px;\n }\n }\n }\n }\n }\n }\n }\n\n @media (max-width: 768px) {\n .service-item {\n .service-name {\n p {\n font-size: ${sizeHandler(30)};\n\n .stamp {\n padding: 4px 8px;\n bottom: 8px;\n }\n }\n }\n\n .service-info {\n display: block;\n\n .service-photo {\n margin-top: 40px;\n padding-left: 0px;\n\n img {\n width: 100%;\n }\n }\n\n .info-wrapper {\n width: 100%;\n\n > p {\n font-size: ${sizeHandler(16)};\n }\n\n .service-detail {\n flex-direction: column;\n\n .service-photo {\n display: none;\n }\n\n .scheme {\n margin: 0px;\n }\n }\n\n .detail-button-wrapper {\n display: block;\n width: 100%;\n height: 40px;\n\n p {\n line-height: 40px;\n }\n }\n\n .reserve-button-wrapper {\n display: block;\n width: 100%;\n height: 40px;\n\n p {\n line-height: 40px;\n }\n }\n .mobile {\n display: block;\n }\n\n .desktop {\n display: none;\n }\n }\n }\n }\n }\n }\n\n .reserve-section {\n .menu-top {\n display: flex;\n align-items: flex-end;\n margin-bottom: 16px;\n\n .main-title {\n flex: 1;\n font-size: 28px;\n font-weight: bold;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n }\n\n .sub-button {\n color: ${mainColor};\n font-weight: bold;\n font-size: 14px;\n cursor: pointer;\n }\n }\n\n .menu-bottom {\n .reserve-menu {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n margin-bottom: 12px;\n border-radius: 4px;\n box-shadow: 2px 2px 10px 3px rgba(0, 0, 0, 0.1);\n background-color: #ffffff;\n\n .title {\n color: #a7a7a7;\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n margin: 0px;\n padding: 0px;\n }\n\n .contents {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: #606060;\n margin: 0px;\n padding: 0px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .service-name {\n flex: 0.7;\n .contents {\n color: ${mainColor};\n }\n }\n\n .user {\n flex: 0.5;\n }\n\n .date {\n flex: 0.7;\n }\n\n .hospital {\n flex: 1;\n }\n\n .status {\n flex: 0.4;\n }\n\n .button {\n flex: 0.5;\n > div {\n display: flex;\n height: 48px;\n border-radius: 4px;\n align-items: center;\n justify-content: center;\n border: 1px solid ${mainColor};\n cursor: pointer;\n transition: all 0.3s;\n\n span {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: ${mainColor};\n }\n\n &:hover {\n background-color: ${mainColor};\n span {\n color: white;\n }\n }\n }\n }\n\n .content.service {\n color: ${mainColor};\n }\n }\n @media (max-width: 768px) {\n .reserve-menu {\n flex-direction: column;\n align-items: flex-start;\n justify-content: flex-start;\n\n .contents {\n margin-bottom: 20px;\n }\n\n .button {\n width: 100%;\n > div {\n height: 40px;\n }\n }\n }\n }\n }\n }\n\n .section-title {\n padding-bottom: 16px;\n border-bottom: 1px solid #ececec;\n margin-bottom: 48px;\n\n p {\n font-size: ${sizeHandler(18)};\n color: #a7a7a7;\n font-weight: bold;\n margin: 0px;\n padding: 0px;\n opacity: 1;\n }\n }\n\n .order-menu-mobile-wrapper {\n // position: absolute;\n // bottom: 68px;\n // left: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n width: 100%;\n padding: 10px;\n\n p {\n text-align: center;\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: white;\n }\n\n p:nth-child(1) {\n font-size: ${sizeHandler(14)};\n font-weight: normal;\n letter-spacing: -0.3px;\n text-align: center;\n color: white;\n lineheight: ${sizeHandler(20)};\n }\n\n button {\n width: 100%;\n height: 56px;\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n text-align: center;\n color: #ffffff;\n margin-top: 28px;\n }\n\n @media (min-width: 768px) {\n display: none;\n }\n }\n`;\n\nexport default HomeStyledContainer;\n\nexport const UserMainContainer = styled.div`\n width: 100%;\n // min-height: calc(100vh - 55px);\n // background-image: url('/assets/images/');\n\n height: 100vh;\n max-height: 628px;\n\n background-color: linear-gradient(to top, #3bc1ff, #5b62f5);\n background-image: url('/assets/images/w_main.png');\n\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n padding-top: calc((100vh - 55px) * 0.2);\n\n @media (max-width: 768px) {\n background-size: cover;\n background-image: url('/assets/images/new_mainbg-mobile.png');\n\n min-height: initial;\n height: 600px;\n\n padding-top: 354px;\n }\n`;\n\nexport const InnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n margin: 0 auto;\n\n @media (max-width: 1120px) {\n padding-left: 32px;\n padding-right: 32px;\n }\n\n @media (max-width: 768px) {\n padding-left: 0px;\n padding-right: 0px;\n }\n`;\n\nexport const UserMainTitle = styled.div`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 50px;\n line-height: 66px;\n\n letter-spacing: -1.44444px;\n\n color: #ffffff;\n\n position: relative;\n margin-bottom: 16px;\n\n @media (max-width: 768px) {\n > br {\n display: block;\n }\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 22px;\n line-height: 30px;\n\n text-align: center;\n color: #ffffff;\n\n margin-bottom: 4px;\n }\n`;\n\nexport const UserMainTitleDeco = styled.img`\n position: absolute;\n\n object-fit: contain;\n\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const DecoRight = styled(UserMainTitleDeco)`\n top: 0px;\n left: 240px;\n\n width: 32px;\n height: 32px;\n`;\n\nexport const DecoLeft = styled(UserMainTitleDeco)`\n top: 36px;\n left: -60px;\n\n width: 22px;\n height: 22px;\n`;\n\nexport const DecoLeftTop = styled(UserMainTitleDeco)`\n top: -52px;\n left: -62px;\n\n width: 62px;\n height: 62px;\n`;\n\nexport const UserMainSubtitle = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 22px;\n line-height: 30px;\n color: rgba(255, 255, 255, 0.8);\n letter-spacing: -0.4px;\n\n margin-bottom: 44px;\n\n @media (max-width: 768px) {\n font-weight: normal;\n font-size: 12px;\n line-height: 22px;\n letter-spacing: -0.3px;\n text-align: center;\n\n margin-bottom: 24px;\n }\n`;\n\nexport const UserMainRoute = styled.div`\n width: 100%;\n\n @media (max-width: 768px) {\n text-align: center;\n }\n`;\n\nexport const UserMainRouteButton = styled.a`\n display: inline-block;\n width: 100%;\n max-width: 360px;\n height: 64px;\n line-height: 64px;\n\n background: #3bc1ff;\n border: 1px solid #3bc1ff;\n box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 19px;\n letter-spacing: 0.2;\n\n text-align: center;\n\n color: #ffffff;\n cursor: pointer;\n\n &:hover {\n transition: 0.5s;\n opacity: 0.85;\n }\n\n @media (max-width: 768px) {\n width: calc(100vw - 20px);\n max-width: 360px;\n\n height: 56px;\n line-height: 56px;\n font-size: 16px;\n\n margin: 0 auto;\n }\n`;\n\nexport const PartnerContainer = styled.div`\n width: 100%;\n\n padding-top: 60px;\n padding-bottom: 60px;\n\n @media (max-width: 768px) {\n margin-top: 40px;\n }\n`;\n\nexport const PartnerInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n\n margin: 0 auto;\n\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n\n position: relative;\n\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n &::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-width: 768px) {\n padding-left: 24px;\n padding-right: 24px;\n }\n`;\n\nexport const PartnerTitle = styled.div`\n display: flex;\n flex-direction: column;\n width: auto;\n\n align-items: center;\n margin-top: 10px;\n margin-bottom: 46px;\n\n > img {\n width: 24px;\n height: 24px;\n object-fit: contain;\n\n margin-bottom: 16px;\n }\n\n > span {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: center;\n // color: #3bc1ff;\n }\n\n @media (max-width: 1120px) {\n width: 100%;\n text-align: left;\n }\n`;\n\nexport const PartnerListRow = styled.div`\n display: flex;\n width: 100%;\n\n justify-content: space-between;\n align-items: center;\n text-align: center;\n flex-wrap: wrap;\n\n @media (max-width: 768px) {\n justify-content: flex-start;\n }\n\n @media (max-width: 480px) {\n justify-content: space-between;\n\n > div:nth-child(2n) {\n margin-right: 0px;\n }\n }\n`;\n\nexport const PartnerItem = styled.div`\n margin-bottom: 10px;\n\n width: 215px;\n height: 76px;\n\n border-radius: 4px;\n // box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n // border: 1px solid rgba(0, 0, 0, 0.1);\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n > img {\n height: 100%;\n width: 100%;\n object-fit: cover;\n transform: scale(1.1);\n }\n\n @media (max-width: 768px) {\n margin-right: 8px;\n margin-bottom: 8px;\n }\n\n @media (max-width: 480px) {\n width: calc(50% - 4px);\n height: calc((50vw - 24px) * 0.35);\n }\n`;\n\nexport const SectionHeader = styled.div`\n padding-bottom: 10px;\n margin-bottom: 66px;\n\n border-bottom: 1px solid #e9e9e9;\n\n display: flex;\n align-items: flex-end;\n\n > img {\n width: 58px;\n height: 76px;\n object-fit: contain;\n\n margin-right: 16px;\n }\n\n > span {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 26px;\n line-height: 50px;\n\n text-align: center;\n letter-spacing: -0.777778px;\n\n color: rgba(0, 0, 0, 0.8);\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n align-items: center;\n justify-content: center;\n > img {\n width: 48px;\n height: 48px;\n\n margin-bottom: 10px;\n }\n\n > span {\n font-size: 20px;\n line-height: 32px;\n text-align: center;\n letter-spacing: -0.555556px;\n }\n }\n`;\n\nexport const ServiceListContainer = styled.div`\n margin-bottom: 102px;\n\n @media (max-width: 1120px) {\n padding-left: 20px;\n padding-right: 20px;\n }\n`;\n\nexport const ServiceListInnerContainer = styled.div`\n width: 100%;\n max-width: 1120px;\n\n margin: 0 auto;\n`;\n\nexport const ServiceBoxWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const ServiceBoxContainer = styled.div`\n margin-right: 20px;\n\n &:last-child {\n margin-right: 0px;\n }\n\n @media (max-width: 768px) {\n margin-right: 0px;\n }\n\n margin-bottom: 46px;\n`;\n\nexport const ServiceBoxHeader = styled.div`\n > p:first-child {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 12px;\n line-height: 26px;\n\n letter-spacing: -0.3px;\n }\n\n > p:last-child {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 20px;\n line-height: 32px;\n\n letter-spacing: -0.6px;\n }\n`;\n\nexport const ServiceBoxImageWrapper = styled.div`\n border-radius: 6px;\n overflow: hidden;\n`;\n\nexport const ServiceBoxImg = styled.img`\n width: calc((1120px / 3) - (40px / 3));\n max-width: 360px;\n object-fit: contain;\n\n @media (max-width: 1120px) {\n max-width: 280px;\n }\n\n @media (max-width: 900px) {\n max-width: 240px;\n }\n\n @media (max-width: 768px) {\n max-width: 300px;\n }\n`;\n\nexport const ServiceBoxButtons = styled.div`\n width: 100%;\n display: flex;\n\n margin-top: -12px;\n`;\n\nexport const MoreButton = styled.a`\n width: 132px;\n height: 48px;\n\n text-align: center;\n line-height: 48px;\n\n background: #606060;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 13px;\n\n color: #ffffff;\n\n cursor: pointer;\n`;\n\nexport const ActionButton = styled.span`\n flex: 1;\n\n height: 48px;\n line-height: 48px;\n\n text-align: center;\n\n background: #3bc1ff;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 13px;\n\n color: #ffffff;\n\n > img {\n margin-right: 6px;\n\n width: 18px;\n height: 18px;\n object-fit: contain;\n }\n\n cursor: pointer;\n`;\n\nexport const IntroduceSection = styled.div`\n display: flex;\n align-items: center;\n\n margin-bottom: 40px;\n\n > div {\n width: 50%;\n flex: 1;\n }\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const IntroduceSectionFst = styled(IntroduceSection)`\n div.text-block {\n @media (max-width: 768px) {\n order: 2;\n width: 100%;\n\n p {\n text-align: center;\n }\n }\n }\n\n div.img-block {\n position: relative;\n text-align: center;\n\n display: flex;\n align-items: center;\n height: 100px;\n\n img {\n position: absolute;\n bottom: -50px;\n\n left: 5%;\n\n width: 50%;\n object-fit: contain;\n }\n\n @media (max-width: 768px) {\n order: 1;\n width: 100%;\n justify-content: center;\n\n margin-bottom: 14px;\n\n > img {\n position: initial;\n }\n }\n }\n`;\n\nexport const IntroduceSectionSnd = styled(IntroduceSection)`\n div.text-block {\n @media (max-width: 768px) {\n width: 100%;\n }\n }\n\n div.img-block {\n text-align: center;\n width: 100%;\n\n img {\n width: 50%;\n object-fit: cover;\n\n @media (max-width: 768px) {\n object-fit: contain;\n margin-bottom: 14px;\n }\n }\n }\n`;\n\nexport const IntroduceSectionTrd = styled(IntroduceSection)`\n div.text-block {\n @media (max-width: 768px) {\n width: 100%;\n }\n }\n\n div.img-block {\n text-align: center;\n width: 100%;\n\n img {\n width: 50%;\n object-fit: cover;\n\n @media (max-width: 768px) {\n width: 65%;\n object-fit: contain;\n margin-bottom: 14px;\n }\n }\n }\n`;\n\nexport const IntroduceTitle = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 22px;\n line-height: 48px;\n\n letter-spacing: -0.666667px;\n\n color: rgba(0, 0, 0, 0.8);\n\n @media (max-width: 768px) {\n font-size: 18px;\n line-height: 28px;\n letter-spacing: -0.5px;\n }\n`;\n\nexport const IntroduceContent = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: ${props => (props.small ? '13px' : '16px')};\n line-height: ${props => (props.small ? '22px' : '30px')};\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-weight: bold;\n }\n\n @media (max-width: 768px) {\n word-break: keep-all;\n font-size: ${props => (props.small ? '12px' : '14px')};\n line-height: ${props => (props.small ? '20px' : '23px')};\n }\n`;\n\nexport const MobileBr = styled.br`\n display: none;\n @media (max-width: 768px) {\n display: block;\n }\n`;\n\nexport const DesktopBr = styled.br`\n display: block;\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const SpecListRow = styled.div`\n display: flex;\n align-items: flex-start;\n\n width: 100%;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const SpecWrapper = styled.div`\n margin-bottom: 28px;\n margin-right: 20px;\n\n &:last-child {\n margin-right: 0px;\n }\n\n width: calc((100% / 3) - (40px / 3));\n\n @media (max-width: 768px) {\n width: 100%;\n margin-right: 0px;\n }\n`;\n\nexport const SpecIndex = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 12px;\n line-height: 16px;\n\n letter-spacing: -0.333333px;\n color: rgba(0, 0, 0, 0.2);\n\n margin-bottom: 4px;\n`;\n\nexport const SpecTitleWrapper = styled.div`\n display: flex;\n align-items: center;\n\n text-align: left;\n\n > img {\n width: 24px;\n height: 24px;\n\n margin-right: 8px;\n object-fit: contain;\n }\n\n > span {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 20px;\n line-height: 44px;\n\n letter-spacing: -0.666667px;\n\n color: rgba(0, 0, 0, 0.8);\n }\n`;\n\nexport const SpecContent = styled.p`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 13px;\n line-height: 22px;\n\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 0px;\n\n > span {\n font-weight: bold;\n }\n\n @media (max-width: 768px) {\n br {\n display: block;\n }\n }\n`;\n\nexport const ButtonWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n width: 360px;\n\n > div,\n span,\n a {\n width: calc(50% - 4px);\n }\n\n @media (max-width: 768px) {\n margin: 0 auto;\n }\n`;\n","import React from 'react';\nimport CountUp from 'react-countup';\nimport styled from 'styled-components';\n\nimport { DivisionLine } from '../../../../../Components/Common/input';\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faUsers, faHospitalUser } from '@fortawesome/free-solid-svg-icons';\nimport { faRectangleList } from '@fortawesome/free-regular-svg-icons';\n\nimport { Swiper, SwiperSlide } from 'swiper/react';\nimport SwiperCore, { Pagination, Navigation, Autoplay } from 'swiper';\nimport 'swiper/swiper-bundle.min.css';\nimport 'swiper/swiper.min.css';\nimport 'swiper/components/navigation/navigation.min.css';\nimport 'swiper/components/pagination/pagination.min.css';\nimport { MobileBr } from '../../home.styled';\nimport { Button } from 'antd';\n\nSwiperCore.use([Navigation, Pagination, Autoplay]);\n\nexport const UserNumberCount = () => {\n function handleClick(e) {\n window.location.href = '/360F/review/list';\n }\n\n return (\n <div className='container' style={{ height: '700px' }}>\n <RollingContainer>\n <div className='numberCount' style={{ textAlign: 'center' }}>\n <NumberLabel>\n <FontAwesomeIcon icon={faHospitalUser} style={{ paddingRight: '6px' }} />총 가입자 수\n </NumberLabel>\n <br />\n <CountUp className='numberCount' end={1557} suffix=' 명' style={{ fontWeight: 'bold' }} />\n </div>\n\n <div className='numberCount' style={{ textAlign: 'center', paddingLeft: '7%' }}>\n <NumberLabel>\n <FontAwesomeIcon icon={faUsers} style={{ paddingRight: '6px' }} />\n 메이트 수\n </NumberLabel>\n <br />\n <CountUp end={612} suffix=' 명' style={{ fontWeight: 'bold' }} />\n </div>\n\n <div className='numberCount' style={{ textAlign: 'center', paddingLeft: '7%' }}>\n <NumberLabel>\n <FontAwesomeIcon icon={faRectangleList} style={{ paddingRight: '6px' }} />총 이용 건수\n </NumberLabel>\n <br />\n <CountUp end={5000} suffix=' 건 <i class=\"fa-solid fa-arrow-up\" style=\"color: #3bc1ff\"></i>' style={{ fontWeight: 'bold' }} />\n </div>\n </RollingContainer>\n <SatisfactionContainer>\n <SatisfactionLabel>\n 만족도 200% 이용 후기와 서비스 만족도 98% <MobileBr />\n \"위드메이트\" 에게 맡겨주세요\n </SatisfactionLabel>\n </SatisfactionContainer>\n\n <DivisionLine />\n\n <ReviewContainer>\n <Swiper\n direction={'horizontal'} // 슬라이드의 방향을 수직으로 설정합니다.\n spaceBetween={10}\n slidesPerView={1}\n breakpoints={{\n 768: {\n slidesPerView: 1,\n spaceBetween: -50,\n },\n }}\n pagination={{ clickable: true }} // 우측의 점을 클릭했을 때, 클릭한 슬라이드로 이동하게 됩니다.\n navigation\n modules={[Pagination]} // 페이지네이션, 마우스휠등을 사용하려면 모듈을 import해줘야 합니다.\n allowTouchMove // 터치 동작을 허용합니다.\n className='main_slider'\n threshold={20} // 터치 감도를 조정합니다. 숫자가 클수록 터치에 반응하지 않습니다.\n autoplay={{ delay: 1500 }}\n loop={true}\n speed={1000} // 슬라이드가 넘어가는 속도를 조정합니다. 단위는 ms입니다.\n >\n <SwiperSlide>\n <ReviewMainContainer>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review1.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </ReviewMainContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review2.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review3.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review4.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review5.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n\n <SwiperSlide>\n <ReviewMainInnerContainer>\n <ImgStyle>\n <img src={'/assets/images/review/review6.png'} style={{ width: '100%', height: '100%' }} alt='' />\n </ImgStyle>\n </ReviewMainInnerContainer>\n </SwiperSlide>\n </Swiper>\n </ReviewContainer>\n <DivisionLine />\n\n <Button\n type='primary'\n style={{\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n margin: '0 auto',\n width: '200px',\n height: '46px',\n borderRadius: '10px',\n fontSize: '20px',\n }}\n onClick={handleClick}\n >\n 이용후기 더보기\n </Button>\n </div>\n );\n};\n\nconst ReviewContainer = styled.div`\n width: 42%;\n margin-top: 10px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nconst ReviewMainContainer = styled.div`\n width: 100%;\n height: 330px;\n\n @media (max-width: 768px) {\n height: 330px;\n }\n`;\n\nconst ReviewMainInnerContainer = styled.div`\n max-width: 500px;\n height: 100%;\n margin: 0 auto;\n\n padding-top: 10px;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst RollingContainer = styled.div`\n padding-top: 10px;\n padding-bottom: 20px;\n justify-content: center;\n display: flex;\n flex-direction: initial;\n background-color: #f9f9f9;\n\n .numberCount {\n font-size: 35px;\n }\n\n @media (max-width: 768px) {\n justify-content: center;\n\n .numberCount {\n font-size: 20px;\n }\n }\n`;\n\nconst ImgStyle = styled.div`\n width: 330px;\n height: auto;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: 0 auto;\n\n @media (max-width: 768px) {\n width: 280px;\n height: auto;\n }\n`;\n\nconst SatisfactionContainer = styled.label`\n padding-top: 20px;\n justify-content: center;\n display: flex;\n flex-direction: initial;\n\n @media (max-width: 768px) {\n }\n`;\n\nconst SatisfactionLabel = styled.label`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 20px;\n font-weight: bold;\n text-align: center;\n\n @media (max-width: 768px) {\n font-size: 15px;\n }\n`;\n\nconst NumberLabel = styled.label`\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 20px;\n\n @media (max-width: 768px) {\n font-size: 12px;\n }\n`;\n","import React from 'react';\n\n// components\nimport { PartnerContainer, PartnerInnerContainer, PartnerTitle, PartnerListRow, PartnerItem } from '../home.styled';\n\nexport const WithmatePartners = ({}) => {\n const baseUrl = '/assets/images/partners/';\n const fstRow = [\n baseUrl + 'new-goyang.png',\n baseUrl + 'new-gov-care.png',\n baseUrl + 'new-cancel.png',\n baseUrl + 'aju.png',\n baseUrl + 'new-goyang-happy.png',\n ];\n const sndRow = [\n baseUrl + 'new-junglang-woman.png',\n baseUrl + 'new-paju_woman.png',\n baseUrl + 'new-beatus.png',\n baseUrl + 'new-cheongdam.png',\n baseUrl + 'new-hyo-hospital.png',\n ];\n\n const trdRow = [baseUrl + 'ssn.png', baseUrl + 'limo-korea.png', baseUrl + 'help-you.png', baseUrl + 'errichi.png', baseUrl + 'new-imagine-us.png'];\n\n const fthRow = [baseUrl + 'iu-hosp.png', baseUrl + 'new-gpcop.png', baseUrl + 'goyohanM.png', baseUrl + 'carehouse.jpeg', baseUrl + 'bravo.png'];\n\n const ftfRow = [baseUrl + 'dlive.png', baseUrl + 'sungmo.png', baseUrl + 'metlife.png', baseUrl + 'aju_nursing_hospital.png', baseUrl + 'yongin.png'];\n\n return (\n <PartnerContainer id='partners'>\n <PartnerInnerContainer>\n <PartnerTitle>\n <span>\n <img src='/assets/images/partners_map.png' style={{ width: '32px', height: 'auto', paddingBottom: '10px' }} /> 파트너사\n </span>\n <p style={{ color: '#a9a9a9', fontSize: '18px' }}>위드메이트와 함께하는 협력 파트너사입니다.</p>\n </PartnerTitle>\n <PartnerListRow>\n <PartnerItem>\n <img src={fstRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fstRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fstRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fstRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fstRow[4]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={sndRow[4]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={trdRow[4]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={fthRow[4]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[0]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[1]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[2]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[3]} />\n </PartnerItem>\n <PartnerItem>\n <img src={ftfRow[4]} />\n </PartnerItem>\n </PartnerListRow>\n </PartnerInnerContainer>\n </PartnerContainer>\n );\n};\n","import React from 'react';\n\nimport { MATE } from '../../../Lib/variables';\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\n\n// section\nimport Reserve from './Section/reserve';\nimport { UserMain as RenewMain } from './Section/renew/main';\nimport { GuideDetail } from '../../Guide/Section/detail';\nimport { UserGuideSection } from './Section/renew/guide';\nimport { UserNumberCount } from './Section/renew/numberCount';\n\nimport { WithmatePartners } from './Section/partners';\n\nexport default class HomePage extends React.PureComponent {\n state = {\n searchModal: false,\n };\n\n componentDidMount = async () => {};\n\n render() {\n const { userType } = this.props.auth;\n\n return (\n <div id='#main'>\n {userType === MATE ? (\n <>\n <Reserve {...this.props} />\n </>\n ) : (\n <>\n <RenewMain {...this.props} />\n <UserNumberCount />\n <GuideDetail />\n <UserGuideSection />\n <WithmatePartners />\n {/* <UserMainBanner\n goPage={() => {\n this.props.history.push('/nemt/service');\n }}\n /> */}\n </>\n )}\n </div>\n );\n }\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\n\n// component\nimport Home from './home';\nimport { MATE } from '../../../Lib/variables';\n\n// styles\nimport HomeStyledContainer from './home.styled';\n\n// actions\nimport {\n editResrveForm,\n getServiceInfo,\n serviceReserve,\n getUserInfo,\n getContractPartners,\n acceptCall,\n editReserveDetailView,\n editReserveLatestView,\n editViewType,\n editCallPage,\n editContractForm,\n} from '../../../Reducer/Modules/app';\nimport { editAuth } from '../../../Reducer/Modules/auth';\n\nclass HomeContainer extends React.PureComponent {\n componentDidMount = () => {\n const id = localStorage.getItem('id');\n const userType = localStorage.getItem('userType');\n\n if (id && userType === MATE) {\n } else {\n const prevList = localStorage.getItem('partners');\n if (prevList) {\n const list = JSON.parse(prevList);\n this.props.editContractForm({ type: 'partners', value: list });\n }\n\n this.props.fetchPartners();\n }\n };\n\n render() {\n return (\n <HomeStyledContainer>\n <Home {...this.props} />\n </HomeStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\n\nconst mapStateToDispatch = dispatch => ({\n editAuth: ({ type, value }) => dispatch(editAuth({ type, value })),\n editForm: ({ type, value }) => dispatch(editResrveForm({ type, value })),\n editLatest: ({ value }) => dispatch(editReserveLatestView({ value })),\n editDetail: ({ value }) => dispatch(editReserveDetailView({ value })),\n editViewType: ({ value }) => dispatch(editViewType({ value })),\n editCallPage: value => dispatch(editCallPage(value)),\n editContractForm: ({ type, value }) => dispatch(editContractForm({ type, value })),\n\n getServiceInfo: ({ code }) => dispatch(getServiceInfo({ code })),\n getUserInfo: ({ id, userType }) => dispatch(getUserInfo({ id, userType })),\n fetchPartners: () => dispatch(getContractPartners()),\n serviceReserve: ({ userId, info }) => dispatch(serviceReserve({ userId, info })),\n acceptCall: ({ mateId, callId }) => dispatch(acceptCall({ mateId, callId })),\n});\n\nexport default connect(mapStateToProps, mapStateToDispatch)(HomeContainer);\n","import styled from 'styled-components';\n\nconst StyledContainer = styled.div``;\n\nexport default StyledContainer;\n\nexport const Container = styled.div`\n padding-top: 55px;\n`;\n\nexport const GuideNavContainer = styled.div`\n width: 100%;\n background-color: #ffffff;\n\n border-bottom: 4px solid #f2f2f2;\n`;\n\nexport const InnerContainer = styled.div`\n width: 100%;\n\n max-width: 1120px;\n margin: 0 auto;\n\n // @media (max-width: 1120px) {\n // padding-left: 32px;\n // padding-right: 32px;\n // }\n\n @media (max-width: 768px) {\n padding-left: 20px;\n padding-right: 20px;\n }\n`;\n\nexport const GuideNavWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n padding-top: 16px;\n padding-bottom: 16px;\n\n @media (max-width: 768px) {\n overflow-x: scroll;\n }\n`;\n\nexport const NavTab = styled.div`\n > a {\n cursor: pointer;\n font-size: 22px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.5px;\n text-align: left;\n\n white-space: nowrap;\n\n color: ${props => (props.active ? '#3BC1FF' : 'rgba(0,0,0,0.6)')};\n\n display: inline-block;\n }\n\n @media (max-width: 768px) {\n margin-right: 40px;\n\n > a {\n font-size: 16px;\n }\n }\n`;\n\nexport const GuideConceptContainer = styled.div`\n margin-top: 102px;\n`;\n\nexport const GuideConceptTitle = styled.p`\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n\n margin-bottom: 50px;\n`;\n\nexport const GuideConceptImageWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 100%;\n\n margin-bottom: 40px;\n`;\n\nexport const GuideConceptImage = styled.img`\n height: 200px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const GuideConceptImageMobile = styled.img`\n display: none;\n\n height: 300px;\n object-fit: contain;\n\n @media (max-width: 768px) {\n display: block;\n }\n`;\n\nexport const GuideConceptTextWrapper = styled.div`\n display: flex;\n align-items: flex-start;\n justify-content: center;\n\n margin-bottom: 122px;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const GuideConceptTextBlock = styled.div`\n &:first-child {\n margin-right: 20px;\n\n @media (max-width: 768px) {\n margin-right: 0px;\n\n margin-bottom: 16px;\n }\n }\n\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.67;\n letter-spacing: -0.2px;\n text-align: left;\n word-break: keep-all;\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n\n @media (max-width: 768px) {\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.75;\n letter-spacing: -0.2px;\n text-align: left;\n }\n\n > span {\n font-weight: bold;\n }\n`;\n\nexport const MobileBr = styled.br`\n display: none;\n\n @media (max-width: 768px) {\n display: block;\n }\n\n @media (max-width: 320px) {\n display: none;\n }\n`;\n\nexport const DesktopBr = styled.br`\n display: block;\n\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const MeritContainer = styled.div`\n background-color: #ffffff;\n\n padding-top: 100px;\n padding-bottom: 80px;\n`;\n\nexport const MeritHeaderWrapper = styled.div`\n width: 100%;\n padding-bottom: 10px;\n border-bottom: 2px solid #f2f2f2;\n\n div.wrap {\n display: flex;\n align-items: flex-end;\n justify-content: flex-start;\n }\n\n img {\n width: 72px;\n height: 72px;\n object-fit: contain;\n\n margin-right: 10px;\n }\n\n h3 {\n font-size: 24px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.3;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 0px;\n }\n`;\n\nexport const MeritCardList = styled.div`\n display: flex;\n flex-wrap: wrap;\n\n padding-top: 64px;\n`;\n\nexport const MeritCardWrapper = styled.div`\n height: 260px;\n width: 33.333%;\n\n @media (max-width: 768px) {\n width: 100%;\n height: auto;\n margin-bottom: 24px;\n }\n`;\n\nexport const MeritCardNumber = styled.p`\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.43;\n letter-spacing: normal;\n text-align: left;\n color: #afb0b2;\n margin-bottom: 16px;\n`;\n\nexport const MeritCardTitleRow = styled.div`\n display: flex;\n align-items: center;\n\n > img {\n width: 20px;\n height: 20px;\n object-fit: contain;\n margin-right: 10px;\n }\n\n > span {\n font-size: 20px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.54;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n }\n`;\n\nexport const MeritCardDesc = styled.div`\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.65;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-weight: bold;\n }\n\n @media (max-width: 768px) {\n font-size: 15px;\n }\n`;\n\nexport const GuideDetailContainer = styled.div`\n background-color: #f9f9f9;\n\n padding-top: 56px;\n padding-bottom: 100px;\n`;\n\nexport const GuideDetailServiceCardWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const GuideDetailServiceCard = styled.div`\n width: 360px;\n padding: 34px 32px;\n\n background: #ffffff;\n box-shadow: 2px 4px 16px -4px rgba(0, 0, 0, 0.1);\n border: 1px solid rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n\n @media (max-width: 768px) {\n margin-bottom: 24px;\n width: 100%;\n\n padding: 34px 16px;\n }\n`;\n\nexport const GuideCardImage = styled.img`\n width: 124px;\n height: 124px;\n border-radius: 50%;\n\n margin-bottom: 40px;\n`;\n\nexport const GuideCardSpecTitle = styled.p`\n width: 100%;\n font-size: 18px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.26;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 24px;\n`;\n\nexport const GuideCardSpecRow = styled.div`\n display: flex;\n width: 100%;\n align-items: flex-start;\n\n margin-bottom: 24px;\n\n > span {\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n // line-height: 1.43;\n letter-spacing: normal;\n text-align: left;\n color: #3bc1ff;\n margin-right: 10px;\n }\n\n > p {\n width: 100%;\n flex: 1;\n font-size: 17px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n // line-height: 1.65;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n }\n`;\n\nexport const GuideCardName = styled.p`\n width: 100%;\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.42;\n letter-spacing: -0.1px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n margin-bottom: 2px;\n`;\n\nexport const GuideCardType = styled.h3`\n width: 100%;\n font-size: 26px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.2;\n letter-spacing: -0.5px;\n text-align: left;\n color: #3bc1ff;\n margin-bottom: 24px;\n`;\n\nexport const GuideCardDescription = styled.p`\n width: 100%;\n font-size: 16px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.5;\n letter-spacing: -0.3px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n > span {\n font-weight: bold;\n }\n\n margin-bottom: 60px;\n`;\n\nexport const GuideDetailSubFlexWrapper = styled.div`\n display: flex;\n justify-content: content;\n align-items: flex-start;\n\n @media (max-width: 768px) {\n flex-direction: column;\n }\n`;\n\nexport const GuideDetailButtonWrapper = styled(GuideDetailSubFlexWrapper)`\n border-radius: 4px;\n overflow: hidden;\n\n > span.button {\n cursor: pointer;\n display: inline-block;\n\n flex: 1;\n height: 44px;\n line-height: 44px;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 12px;\n text-align: center;\n color: #ffffff;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n }\n\n > span.gray {\n background-color: #606060;\n\n @media (max-width: 768px) {\n margin-bottom: 8px;\n }\n }\n\n > span.blue {\n background-color: #3bc1ff;\n }\n`;\n\nexport const GuideDetailSubFlexbox = styled.div`\n flex: 1;\n\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n\n > p {\n margin-bottom: 20px;\n\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: normal;\n font-size: 12px;\n line-height: 18px;\n\n text-align: left;\n\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nexport const GuideUsingContainer = styled.div`\n padding-top: 62px;\n padding-bottom: 78px;\n background-color: #f9f9f9;\n`;\n\nexport const GuideUsingSubFlexWrapper = styled(GuideDetailSubFlexWrapper)`\n align-items: center;\n justify-content: center;\n\n @media (max-width: 768px) {\n align-items: flex-start;\n padding-left: 40px;\n }\n`;\n\nexport const GuideUsingFlexbox = styled(GuideDetailSubFlexbox)`\n align-items: center;\n flex: initial;\n min-width: 320px;\n\n > p.index {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 10px;\n line-height: 14px;\n\n letter-spacing: -0.333333px;\n color: rgba(0, 0, 0, 0.2);\n\n margin-bottom: 16px;\n }\n\n > p {\n width: auto;\n text-align: center;\n }\n\n > p.title {\n font-family: Noto Sans KR;\n font-style: normal;\n font-weight: bold;\n font-size: 16px;\n line-height: 22px;\n\n text-align: center;\n letter-spacing: -0.6px;\n }\n\n > div {\n display: flex;\n justify-content: center;\n\n margin-bottom: 16px;\n\n img {\n height: 90px;\n object-fit: contain;\n }\n }\n\n margin-bottom: 44px;\n`;\n\nexport const GuideUsageFlexbox = styled.div`\n flex: 1;\n\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n margin-bottom: 68px;\n\n @media (max-width: 768px) {\n margin-bottom: 32px;\n // width: 230px;\n align-items: ;\n }\n\n div {\n // width: 120px;\n\n img {\n width: 64px;\n height: 64px;\n margin-right: 34px;\n object-fit: contain;\n }\n\n // @media (max-width: 768px) {\n // width: 70px;\n\n // img {\n // height: 32px;\n // }\n // }\n }\n\n span {\n font-size: 18px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.65;\n letter-spacing: -0.2px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n\n // @media (max-width: 768px) {\n // font-size: 13px;\n // line-height: 19px;\n // }\n }\n`;\n\nexport const WithmateContainer = styled.div`\n padding-top: 56px;\n // padding-bottom: 120px;\n`;\n\nexport const FlexDivWrapper = styled.div`\n display: flex;\n width: 100%;\n\n ${props => props.top && `margin-bottom: 72px;`}\n`;\n\nexport const HiddenType = styled.div`\n @media (max-width: 768px) {\n ${props => props.mHidden && `display: none;`}\n }\n`;\n\nexport const BigSideBox = styled(HiddenType)`\n width: 58%;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nexport const SmallSideBox = styled(HiddenType)`\n width: 42%;\n\n @media (max-width: 768px) {\n width: 100%;\n }\n`;\n\nexport const WithmateBg = styled.div`\n width: 100%;\n height: 100%;\n\n background-image: url(${props => props.bg});\n background-size: 80% auto;\n background-position: center;\n background-repeat: no-repeat;\n`;\n\nexport const WithmateTitle = styled.div`\n > img {\n width: 72.5px;\n height: 48px;\n object-fit: contain;\n margin-right: 8px;\n }\n\n > span {\n font-size: 28px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.11;\n letter-spacing: -0.5px;\n text-align: left;\n color: rgba(0, 0, 0, 0.7);\n }\n\n display: flex;\n align-items: flex-end;\n margin-bottom: 24px;\n`;\n","import React from 'react';\nimport { HashLink } from 'react-router-hash-link';\n\n// components\nimport { GuideNavContainer, InnerContainer, GuideNavWrapper, NavTab } from '../guide.styled';\n\nexport const GuideNav = ({ activeTab, onTab }) => {\n return (\n <GuideNavContainer>\n <InnerContainer>\n <GuideNavWrapper>\n <NavTab active={activeTab === 'withmate'}>\n <HashLink\n to='/360F/nemt/service/#withmate'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('withmate');\n }}\n >\n 위드메이트란?\n </HashLink>\n </NavTab>\n <NavTab active={activeTab === 'types'}>\n <HashLink\n to='/360F/nemt/service/#types'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('types');\n }}\n >\n 서비스 종류\n </HashLink>\n </NavTab>\n <NavTab active={activeTab === 'merit'}>\n <HashLink\n to='/360F/nemt/service/#merit'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('merit');\n }}\n >\n 믿을수 있는 위드메이트\n </HashLink>\n </NavTab>\n <NavTab active={activeTab === 'usage'}>\n <HashLink\n to='/360F/nemt/service/#usage'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('usage');\n }}\n >\n 이런분께 추천해요\n </HashLink>\n </NavTab>\n <NavTab active={activeTab === 'partners'}>\n <HashLink\n to='/360F/nemt/service/#partners'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'nearest' })}\n onClick={() => {\n onTab('partners');\n }}\n >\n 위드메이트 파트너\n </HashLink>\n </NavTab>\n </GuideNavWrapper>\n </InnerContainer>\n </GuideNavContainer>\n );\n};\n","import React from 'react';\n\n// components\nimport { GuideConceptContainer } from '../guide.styled';\n\nexport const GuideConcept = ({}) => {\n return <GuideConceptContainer id='concept'></GuideConceptContainer>;\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport swal from 'sweetalert2';\n\n// components\nimport {\n GuideDetailContainer,\n InnerContainer,\n GuideConceptTitle,\n GuideDetailServiceCardWrapper,\n GuideDetailServiceCard,\n GuideCardImage,\n GuideCardName,\n GuideCardType,\n GuideCardDescription,\n GuideCardSpecTitle,\n GuideCardSpecRow,\n} from '../guide.styled';\n\nexport const GuideDetail = () => {\n return (\n <GuideDetailContainer id='types'>\n <InnerContainer>\n <GuideConceptTitle>서비스 종류</GuideConceptTitle>\n <GuideDetailServiceCardWrapper>\n <GuideCard\n source={'/assets/images/art_pro.png'}\n name='병원 동행'\n type='Pro'\n desc={\n <>\n <>\n 위드메이트 동행 전문가가 고객님의\n <br />\n <span>자택에서 병원까지 </span>동행하고, 병원 업무를\n <br />\n 마친 뒤 <span>다시 자택까지</span> 동행합니다.\n </>\n <br />\n <br />\n <>\n <b>요금</b> <br />\n 시간당 25,000원 (추가 30분마다 12,500원)\n </>\n </>\n }\n spec1={\n <>\n 위드메이트 소속 동행 전문가가 <br />\n 자택에서 병원까지 동행\n </>\n }\n spec2={\n <>\n 대중교통, 고객님 소유 자차, 택시 중<br />\n 선택하여 이동\n </>\n }\n spec3={\n <>\n 서비스 종료 이후\n <br />\n 서비스 보고서 열람 가능\n </>\n }\n spec4={\n <>\n 서비스 진행 단계별 카카오톡\n <br />\n 실시간 알림 업데이트 제공\n </>\n }\n />\n <GuideCard\n source={'/assets/images/art_basic.png'}\n name='병원 동행'\n type='Basic'\n desc={\n <>\n <>\n 위드메이트 베이직 서비스는 위드메이트 동행\n <br />\n 전문가가 고객님께서 지정한 의료 시설 혹은\n <br />\n <span>병원 내에서 보호자 대행 업무</span>를 수행합니다.\n </>\n <br />\n <br />\n <>\n <b>요금</b> <br />\n 시간당 15,000원 (추가 30분마다 7,500원)\n </>\n </>\n }\n spec1={\n <>\n 고객님의 진료 일정에 맞춰 위드메이트 <br />\n 소속 동행 전문가가 의료 시설 도착\n </>\n }\n spec2={\n <>\n 지정된 의료 시설에서 고객님 접선 후 <br />\n 진료 시작부터 끝까지 동행\n </>\n }\n spec3={\n <>\n 진료 종료 후 고객님의 상태를 <br />\n 파악하고 이상 없을 시 서비스 종료\n </>\n }\n spec4={\n <>\n 서비스 진행 단계별 카카오톡\n <br />\n 실시간 알림 업데이트 제공\n </>\n }\n />\n <GuideCard\n source={'/assets/images/art_zzz.png'}\n name='보호자 동행'\n type='수면 내시경'\n desc={\n <>\n <>\n {/* 위드메이트 동행 전문가가 고객님께서\n <br />\n <span>자택에서 병원까지 </span>동행하고, 병원 내에서\n <br />\n <span>보호자 대행 업무</span>를 수행합니다. */}\n 고객님께서 수면내시경 검사를 받는\n <br />\n <span>병원 내에서 </span>위드메이트 동행 전문가가\n <br />\n <span>보호자 대행 업무</span>를 수행합니다.\n </>\n <br />\n <br />\n <>\n <b>요금</b> <br />\n 시간당 15,000원 (추가 30분마다 7,500원)\n </>\n </>\n }\n spec1={\n <>\n 고객님의 진료 일정에 맞춰 위드메이트 <br />\n 소속 동행 전문가가 의료 시설 도착\n </>\n }\n spec2={\n <>\n 지정된 의료 시설에서 고객님 접선 후 <br />\n 수면 내시경 검사 시작부터 끝까지 동행\n </>\n }\n spec3={\n <>\n 수면 내시경 검사 종료 후 고객님의 <br />\n 상태를 파악하고 이상 없을 시 종료\n </>\n }\n spec4={\n <>\n 서비스 진행 단계별 카카오톡 <br />\n 실시간 알림 업데이트 제공\n </>\n }\n />\n </GuideDetailServiceCardWrapper>\n </InnerContainer>\n </GuideDetailContainer>\n );\n};\n\nconst GuideCard = ({ source, name, type, desc, spec1, spec2, spec3, spec4 }) => (\n <GuideDetailServiceCard>\n <GuideCardImage src={source} />\n <GuideCardName>{name}</GuideCardName>\n <GuideCardType>{type}</GuideCardType>\n <GuideCardDescription>{desc}</GuideCardDescription>\n <GuideCardSpecTitle>서비스 구성</GuideCardSpecTitle>\n\n <GuideCardSpecRow>\n <span>01</span>\n <p>{spec1}</p>\n </GuideCardSpecRow>\n\n <GuideCardSpecRow>\n <span>02</span>\n <p>{spec2}</p>\n </GuideCardSpecRow>\n\n <GuideCardSpecRow>\n <span>03</span>\n <p>{spec3}</p>\n </GuideCardSpecRow>\n\n <GuideCardSpecRow>\n <span>04</span>\n <p>{spec4}</p>\n </GuideCardSpecRow>\n </GuideDetailServiceCard>\n);\n","import React from 'react';\nimport styled from 'styled-components';\n\n// components\nimport { GuideUsingContainer, InnerContainer, GuideConceptTitle, GuideUsingSubFlexWrapper, GuideUsageFlexbox, MobileBr, DesktopBr } from '../guide.styled';\n\nexport const GuideUsage = () => {\n return (\n <GuideUsingContainer id='usage'>\n <InnerContainer>\n <GuideConceptTitle>이런 분께 추천해요</GuideConceptTitle>\n <GuideUsingSubFlexWrapper>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_legache.png' />\n </div>\n <span>\n 병원에 가시는 <DesktopBr />\n <MobileBr />\n 어르신\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_wheelchair.png' />\n </div>\n <span>\n 거동이 <DesktopBr />\n <MobileBr />\n 힘드신 분\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_x-ray.png' />\n </div>\n <span>\n 항암 / 방사선 치료를 <DesktopBr />\n <MobileBr />\n 받으시는 분\n </span>\n </GuideUsageFlexbox>\n </GuideUsingSubFlexWrapper>\n\n <GuideUsingSubFlexWrapper>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_injection.png' />\n </div>\n <span>\n 수면내시경 등 <DesktopBr />\n <MobileBr />\n 마취가 동반되는 <DesktopBr />\n <MobileBr />\n 치료를 받으시는 분\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_round_trip.png' />\n </div>\n <span>\n 입원 / 퇴원\n <DesktopBr />\n <MobileBr />\n 하시는 분\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_eyecare.png' />\n </div>\n <span>\n 안과 진료/시술을 <DesktopBr />\n <MobileBr />\n 받으시는 분\n </span>\n </GuideUsageFlexbox>\n </GuideUsingSubFlexWrapper>\n\n <GuideUsingSubFlexWrapper>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_detailcheck.png' />\n </div>\n <span>\n 각종 검진을 <DesktopBr />\n <MobileBr />\n 받으시는 분\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_pregnant.png' />\n </div>\n <span>\n 임산부, 산모, <DesktopBr />\n <MobileBr />및 소아\n </span>\n </GuideUsageFlexbox>\n <GuideUsageFlexbox>\n <div>\n <img src='/assets/images/icon_blood.png' />\n </div>\n <span>혈액 투석 환자</span>\n </GuideUsageFlexbox>\n </GuideUsingSubFlexWrapper>\n </InnerContainer>\n </GuideUsingContainer>\n );\n};\n","import React from 'react';\nimport {\n MeritContainer,\n InnerContainer,\n MeritHeaderWrapper,\n MeritCardList,\n MeritCardWrapper,\n MeritCardNumber,\n MeritCardDesc,\n MeritCardTitleRow,\n} from '../guide.styled';\n\nexport const Merit = () => {\n return (\n <MeritContainer id='merit'>\n <MeritHeaderWrapper>\n <InnerContainer>\n <div className='wrap'>\n <img src='/assets/images/faith_up.png' />\n <h3>믿을 수 있는 위드메이트</h3>\n </div>\n </InnerContainer>\n </MeritHeaderWrapper>\n <InnerContainer>\n <MeritCardList>\n <MeritCard\n title='인정 받은 서비스'\n source='/assets/images/faith_icon_1.png'\n desc={\n <>\n 위드메이트 병원 동행 서비스는\n <br />\n <span>신한 오픈 이노베이션 2기 우수 기업</span>으로\n <br />\n 선정된 신뢰할 수 있는 서비스입니다.{' '}\n </>\n }\n number='01'\n />\n <MeritCard\n title='검증 받은 서비스'\n source='/assets/images/faith_icon_2.png'\n desc={\n <>\n 위드메이트는 엄격한 검증을 거친 후<br />\n 보건복지부와 고양시, 그리고 국립 암센터가\n <br />\n 주관하는<span>‘고양 해피 케어’</span>컨소시엄의 <br />\n 일원으로 활동 중에 있습니다.\n </>\n }\n number='02'\n />\n <MeritCard\n title='서비스 인력 평점 제도'\n source='/assets/images/faith_icon_3.png'\n desc={\n <>\n 위드메이트는 더욱 높은 서비스 경험을\n <br />\n 제공하기 위해 매뉴얼을 만들고, 서비스 <br />\n 종료 후 <span>고객님의 후기를 반영</span>하여 <br />\n 서비스 인력을 관리합니다.\n </>\n }\n number='03'\n />\n <MeritCard\n title='전문적인 서비스 인력 양성'\n source='/assets/images/faith_icon_4.png'\n desc={\n <>\n 위드메이트는 여성 인력 개발 센터,\n <br /> 재취업 지원 센터, 고용 복지 플러스\n <br /> 센터 등의 전문 기관과 <span>일자리 협업 </span>\n <br />\n <span>프로그램</span>을 운영하며 검증된 서비스\n <br />\n 인력을 주기적으로 양성하고 있습니다.\n </>\n }\n number='04'\n />\n <MeritCard\n title='책임지는 서비스'\n source='/assets/images/faith_icon_5.png'\n desc={\n <>\n 위드메이트는 서비스 제공 인력 전원이\n <br />\n 삼성화재가 제공하는 1억 2천만원 한도의 <br />\n <span>‘전문인 영업 배상 책임 보험’</span>에 가입되어 <br />\n 책임지는 서비스를 제공합니다.\n </>\n }\n number='05'\n />\n <MeritCard\n title='안전한 서비스'\n source='/assets/images/faith_icon_6.png'\n desc={\n <>\n 위드메이트는 <span> 시니어 헬스케어 서비스의</span>\n <br />\n <span>본질은 ‘안전’</span>이라고 생각하고, 서비스 인력의\n <br />\n 정기적인 교육, 자격증 취득 및 보유 여부 <br />\n 점검, 서비스 매뉴얼의 수정 및 보완등을 <br />\n 진행하고 있습니다.\n </>\n }\n number='06'\n />\n </MeritCardList>\n </InnerContainer>\n </MeritContainer>\n );\n};\n\nconst MeritCard = ({ number, title, source, desc }) => (\n <MeritCardWrapper>\n <MeritCardNumber>{number}</MeritCardNumber>\n <MeritCardTitleRow>\n <img src={source} />\n <span>{title}</span>\n </MeritCardTitleRow>\n <MeritCardDesc>{desc}</MeritCardDesc>\n </MeritCardWrapper>\n);\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport {\n WithmateContainer,\n InnerContainer,\n WithmateTitle,\n MeritCardDesc,\n FlexDivWrapper,\n BigSideBox,\n SmallSideBox,\n WithmateBg,\n GuideConceptTitle,\n MobileBr,\n DesktopBr,\n} from '../guide.styled';\nexport const Withmate = () => {\n return (\n <WithmateContainer id='withmate'>\n <InnerContainer>\n <FlexDivWrapper top>\n <SmallSideBox>\n <WithmateTitle>\n <img src='/assets/images/new_logo_img.png' />\n <span>위드메이트란?</span>\n </WithmateTitle>\n <Block bigMargin>\n 위드메이트는 <span>온라인 병원 동행 서비스 매칭 플랫폼</span>을<MobileBr /> 시작으로,\n <DesktopBr /> 대한민국에서{' '}\n <span>\n 사회적 의미의 ‘시니어’라는 <MobileBr />\n 단어를 없애기 위해\n </span>{' '}\n 설립된 <DesktopBr />\n <span>\n 시니어 라이프 스타일 <MobileBr />\n 혁신 기업\n </span>\n 입니다.\n </Block>\n <Title>위드메이트의 시작</Title>\n <Block>\n <span>2015년</span>에 설립된 위드메이트는 <span>초고령화 </span>및 <MobileBr />\n <span>1인 가구 시대</span>에 <DesktopBr />\n 접어든 대한민국의 현 상황에 적합한\n <MobileBr />\n <span> 시니어 라이프 스타일 혁신</span>\n <DesktopBr />\n <span>서비스를 개발합니다.</span>\n </Block>\n <Block noMargin>\n 이를 위해 위드메이트는 <MobileBr />\n <span>국내 최초로 병원 동행 서비스를 런칭해</span>\n <MobileBr />\n <DesktopBr />\n <span>탄탄한 신뢰</span>와 <span>안정된 서비스</span> 시스템을 기반으로 <MobileBr />\n 축적되는 <DesktopBr />\n 데이터와 실전 경험을 바탕으로{' '}\n <span>\n 다양한 <MobileBr />\n 신규 서비스를 연구\n </span>\n 하여 <DesktopBr />\n <span>\n 시니어 라이프 스타일 <MobileBr />\n 혁신 기업\n </span>\n 의 길을 걷고 있습니다.\n </Block>\n </SmallSideBox>\n <BigSideBox mHidden>\n <WithmateBg bg='/assets/images/guide_withmate_main1.png' />\n </BigSideBox>\n </FlexDivWrapper>\n </InnerContainer>\n </WithmateContainer>\n );\n};\n\nconst Title = styled(GuideConceptTitle)`\n margin-bottom: 24px;\n text-align: left;\n`;\n\nconst Block = styled(MeritCardDesc)`\n font-size: 16px;\n margin-bottom: 24px;\n ${props => props.noMargin && `margin-bottom: 0px;`}\n ${props => props.bigMargin && `margin-bottom: 74px;`}\n\n @media (max-width: 768px) {\n word-break: keep-all;\n }\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport const GuideBanner = () => {\n return <GuideBannerContainer>병원동행 서비스는 위드메이트에게!</GuideBannerContainer>;\n};\n\nconst GuideBannerContainer = styled.div`\n width: 100%;\n height: 235px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n font-size: 40px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.2;\n letter-spacing: -0.7px;\n text-align: center;\n color: #ffffff;\n\n background-image: url('/assets/images/guide_title_bg.png');\n background-size: cover;\n background-repeat: no-repeat;\n background-position: center;\n\n @media (max-width: 768px) {\n font-size: 22px;\n background-position: left;\n }\n`;\n","import React from 'react';\nimport _ from 'lodash';\n\n// components\nimport { GuideNav } from './Section/nav';\nimport { GuideConcept } from './Section/concept';\nimport { GuideDetail } from './Section/detail';\nimport { GuideUsage } from './Section/usage';\nimport { WithmatePartners } from '../../Home/Section/partners';\nimport { Merit } from './Section/merit';\nimport { Withmate } from './Section/withmate';\nimport { GuideBanner } from './Section/banner';\n\nimport { Container } from './guide.styled';\n\nclass GuidePage extends React.PureComponent {\n state = {\n activeTab: 'concept',\n reserveModal: false,\n reserveType: null,\n step: 1,\n mobile_menu: false,\n addHalfTime: false,\n };\n\n inputHandler = ({ type, value }) => {\n this.setState({ [type]: value });\n };\n\n inputDeepHandler = ({ type, deepType, value }) => {\n this.setState(prevState => ({\n [type]: {\n ...prevState[type],\n [deepType]: value,\n },\n }));\n };\n\n onTab = tab => {\n this.setState({\n activeTab: tab,\n });\n };\n\n onRoute = path => {\n this.props.history.push(path);\n };\n\n render() {\n const { activeTab } = this.state;\n\n return (\n <Container>\n <GuideBanner />\n <GuideNav\n activeTab={activeTab}\n onTab={this.onTab}\n onReserve={serviceType => {\n this.setState({\n reserveModal: true,\n temp: {\n page: 1,\n service: 'unemergency',\n addTime: '60',\n payMethod: 'transfer',\n sex: '남',\n transport: 'common',\n report: false,\n },\n });\n }}\n />\n <Withmate />\n <GuideConcept />\n <GuideDetail />\n <Merit />\n <GuideUsage />\n <WithmatePartners />\n </Container>\n );\n }\n}\n\nexport default GuidePage;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\n\n// component\nimport GuidePage from './guide';\n\n// styles\nimport StyledContainer from './guide.styled';\n\n// actions\nimport { serviceReserve, editResrveForm } from '../../../Reducer/Modules/app';\n\nclass GuideContainer extends React.PureComponent {\n componentDidMount = () => {};\n\n render() {\n return (\n <StyledContainer>\n <GuidePage {...this.props} />\n </StyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth }) => ({\n app,\n auth,\n});\n\nconst mapStateToDispatch = dispatch => ({\n serviceReserve: ({ userId, info }) => dispatch(serviceReserve({ userId, info })),\n editForm: ({ type, value }) => dispatch(editResrveForm({ type, value })),\n});\n\nexport default connect(mapStateToProps, mapStateToDispatch)(GuideContainer);\n","import styled from 'styled-components';\n\nconst StyledListContainer = styled.div`\n // border-bottom: 1px solid #e6e6e6;\n`;\n\nexport const HeaderButton = styled.div`\n cursor: pointer;\n\n width: 265px;\n height: 60px;\n line-height: 60px;\n\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: -0.2px;\n text-align: center;\n color: #ffffff;\n\n margin-top: 40px;\n margin-bottom: 90px;\n border-radius: 4px;\n background-color: #3bc1ff;\n\n &:hover {\n transition: all 0.5s;\n opacity: 0.8;\n }\n\n @media (max-width: 768px) {\n width: 230px;\n height: 48px;\n line-height: 48px;\n }\n`;\n\nexport const NavigationTabWrapper = styled.div`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n`;\n\nexport const NavigationTab = styled.span`\n position: relative;\n display: inline-block;\n margin-right: 44px;\n\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n text-align: center;\n color: rgba(0, 0, 0, 0.8);\n padding-bottom: 20px;\n\n cursor: pointer;\n\n &.active {\n color: #55d4ff;\n }\n`;\n\nexport const NavigationTabUnderline = styled.span`\n display: inline-block;\n position: absolute;\n left: 0px;\n bottom: -3px;\n\n width: 100%;\n height: 3px;\n background-color: #55d4ff;\n`;\n\nexport const CountDisplay = styled.div`\n font-size: 36px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.44;\n letter-spacing: -1px;\n color: rgba(0, 0, 0, 0.8);\n\n > span {\n color: #4bcfff;\n }\n\n margin-bottom: 20px;\n`;\n\nexport const CollapseContainer = styled.div`\n .ant-collapse-icon-position-right > .ant-collapse-item > .ant-collapse-header {\n padding-left: 0px;\n padding-right: 0px;\n }\n\n .ant-collapse-content > .ant-collapse-content-box {\n padding-left: 0px;\n padding-right: 0px;\n }\n`;\n\nexport const CollapseHeader = styled.div`\n display: flex;\n align-items: center;\n border-bottom: 1px solid #e6e6e6;\n`;\n\nexport const CollapseTab = styled.div`\n font-size: 14px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.57;\n letter-spacing: normal;\n color: rgba(0, 0, 0, 0.7);\n\n padding-bottom: 11px;\n`;\n\nexport const CollapseTabOnlyDesktop = styled(CollapseTab)`\n @media (max-width: 768px) {\n display: none;\n }\n`;\n\nexport const PanelHeader = styled.div`\n display: flex;\n`;\n\nexport const PanelField = styled.div`\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n\n ${props => (props.style ? props.style : `flex: 1;`)}\n ${props => (props.onlyDesktop ? `display: block;` : null)} \n\n &.title {\n font-size: 16px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.56;\n letter-spacing: normal;\n color: rgba(0, 0, 0, 0.8);\n }\n\n @media (max-width: 768px) {\n ${props => (props.onlyDesktop ? `display: none;` : null)}\n }\n`;\n\nexport const Star = styled.img`\n width: 16.7px;\n height: 16px;\n object-fit: contain;\n margin-bottom: 4px;\n`;\n\nexport const ReviewTextWrapper = styled.div`\n padding-left: 120px;\n padding-right: 50px;\n\n @media (max-width: 768px) {\n padding-left: 0px;\n }\n`;\n\nexport const ReviewText = styled.p`\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n`;\n\nexport const MyReview = styled.span`\n display: inline-block;\n width: 53px;\n height: 20px;\n line-height: 20px;\n border-radius: 10px;\n background-color: #3bc1ff;\n\n font-size: 10px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n letter-spacing: -0.21px;\n color: #ffffff;\n text-align: center;\n`;\n\nexport const ReviewMobileInfo = styled.div`\n display: flex;\n align-items: center;\n\n margin-bottom: 27px;\n display: none;\n\n @media (max-width: 768px) {\n display: block;\n }\n`;\n\nexport const ReviewerName = styled.span`\n font-size: 13px;\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.71;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n\n margin-bottom: 0px;\n margin-right: 16px;\n`;\n\nexport default StyledListContainer;\n","import React from 'react';\nimport { Collapse, Icon, Pagination, message } from 'antd';\nimport moment from 'moment';\n\nimport CommentPageHeader from '../../../Components/Templates/Review/header';\nimport {\n HeaderButton,\n CollapseContainer,\n CollapseHeader,\n CollapseTab,\n CollapseTabOnlyDesktop,\n CountDisplay,\n PanelHeader,\n PanelField,\n Star,\n ReviewTextWrapper,\n ReviewText,\n ReviewMobileInfo,\n ReviewerName,\n MyReview,\n} from './review.styled';\n\nimport axios from '../../../Lib/axios';\n\nconst { Panel } = Collapse;\n\nconst PerPage = 20;\n\nexport default class CommentList extends React.PureComponent {\n state = {\n tab: 'basic',\n total: 0,\n list: [],\n page: 1,\n };\n\n componentDidMount = () => {\n this.fetchList();\n };\n\n fetchList = () => {\n const { page } = this.state;\n axios.get('/v2/review/list', { params: { page, pageCnt: PerPage } }).then(resolve => {\n const { data } = resolve;\n if (data && data.total) {\n this.setState({ total: data.total || 0, list: data.list || [] });\n }\n });\n };\n\n renderStar = score => {\n return (\n <>\n {new Array(score).fill(0).map((star, index) => (\n <Star key={'active-star=' + index.toString()} src='/assets/images/icon_active_star.png' alt='active-star' />\n ))}\n {new Array(5 - score).fill(0).map((star, index) => (\n <Star key={'active-star=' + index.toString()} src='/assets/images/icon_star.png' alt='active-star' />\n ))}\n </>\n );\n };\n\n getAutoTitle = ({ title, rate }) => {\n if (title) return title;\n if (rate === 5) return '서비스 매우 만족';\n if (rate >= 4) return '서비스 만족';\n if (rate >= 3) return '서비스 보통';\n if (rate >= 2) return '서비스 불만족';\n if (rate >= 1) return '서비스 매우 불만족';\n };\n\n render() {\n const { tab, list, page, total } = this.state;\n const { id, userType } = this.props.auth;\n\n return (\n <div>\n <CommentPageHeader title='이용 후기' desc={`고객님의 소중한 후기를 통해 더욱 발전하는\\n 위드메이트가 되겠습니다.`}>\n <div style={{ height: '190px' }} />\n </CommentPageHeader>\n\n <CollapseContainer className='inner-container'>\n <CountDisplay>\n <span>{total}</span>건\n </CountDisplay>\n\n <CollapseHeader>\n <CollapseTab style={{ width: '40px' }}>번호</CollapseTab>\n <CollapseTab style={{ flex: 1 }}>서비스</CollapseTab>\n <CollapseTab style={{ flex: 1 }}>제목</CollapseTab>\n <CollapseTabOnlyDesktop style={{ width: '80px' }}>작성자</CollapseTabOnlyDesktop>\n <CollapseTabOnlyDesktop style={{ width: '120px' }}>별점</CollapseTabOnlyDesktop>\n <CollapseTabOnlyDesktop style={{ width: '152px' }}>작성일</CollapseTabOnlyDesktop>\n </CollapseHeader>\n <Collapse\n key={'item-key-frefresh'}\n expandIconPosition='right'\n bordered={false}\n expandIcon={({ isActive }) => <Icon type='right' rotate={isActive ? 90 : -90} style={{ color: isActive ? '#3bc1ff' : '#a7a7a7' }} />}\n >\n {list &&\n list.map((info, index) => (\n <Panel\n key={'comment-order-' + index.toString() + 'item'}\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={\n <PanelHeader>\n <PanelField style={{ width: '40px' }} index>\n {total - ((page - 1) * PerPage + index)}\n </PanelField>\n <PanelField style={{ width: '80px' }}>{info.reserve.service === 'assist' ? 'Basic' : 'Pro'}</PanelField>\n <PanelField className='title' style={{ flex: 1 }}>\n {this.getAutoTitle({ title: info.title, rate: info.score })}\n </PanelField>\n <PanelField style={{ width: '80px' }} onlyDesktop>\n {id === info.user._id ? <MyReview>내후기</MyReview> : info.user.name}\n </PanelField>\n <PanelField style={{ width: '120px' }} onlyDesktop>\n {info.score ? this.renderStar(parseInt(info.score, 10)) : null}\n </PanelField>\n <PanelField style={{ width: '152px' }} onlyDesktop>\n {moment(info.createdAt).format('YYYY-MM-DD')}\n </PanelField>\n </PanelHeader>\n }\n >\n <ReviewTextWrapper>\n <ReviewMobileInfo>\n {id === info.user._id ? (\n <MyReview style={{ marginRight: '17px' }}>내후기</MyReview>\n ) : (\n <ReviewerName>{info.user.name}</ReviewerName>\n )}\n <span style={{ marginRight: '18px' }}>{info.score ? this.renderStar(parseInt(info.score, 10)) : null}</span>\n <ReviewerName>{moment(info.createdAt).format('YYYY-MM-DD')}</ReviewerName>\n </ReviewMobileInfo>\n {info.review && (\n <ReviewText>\n {info.review.split('\\n').map((text, index) => (\n <span key={info._id + index.toString() + tab}>\n {text}\n <br />\n </span>\n ))}\n </ReviewText>\n )}\n <ReviewText style={{ marginTop: '8px' }}>\n (담당 메이트: {info.reserve && info.reserve.call && info.reserve.call.mate ? info.reserve.call.mate.name : '-'})\n </ReviewText>\n </ReviewTextWrapper>\n </Panel>\n ))}\n </Collapse>\n <Pagination\n pageSize={PerPage}\n total={this.state.total}\n current={this.state.page}\n onChange={page => {\n this.setState({ page, list: [] }, () => {\n this.fetchList();\n });\n }}\n />\n </CollapseContainer>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledListContainer from './review.styled';\nimport CommentList from './review';\n\nimport { getReviewList, editReview } from '../../../Reducer/Modules/review';\n\nclass CommentListPage extends React.PureComponent {\n render() {\n return (\n <StyledListContainer>\n <CommentList {...this.props} />\n </StyledListContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth, review }) => ({\n app,\n auth,\n review,\n});\n\nconst mapDispatchToProps = dispatch => ({\n // getReviewList: page => dispatch(getReviewList({ page })),\n editReview: ({ type, value }) => dispatch(editReview({ type, value })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CommentListPage);\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../../theme';\n\nconst StyledListContainer = styled.div`\n padding-top: 55px;\n\n .faq-header {\n // border-bottom: 1px solid #e6e6e6;\n\n .inner-container {\n padding: 0px;\n padding-top: 82px;\n\n @media (max-width: 768px) {\n padding-top: 42px;\n }\n\n > .flex-wrapper {\n position: relative;\n\n .faq-main-title {\n flex: 1;\n .title {\n font-size: ${sizeHandler(30)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 8px;\n }\n\n .description {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 82px;\n }\n }\n\n .img-section {\n position: absolute;\n bottom: -50px;\n right: 0px;\n\n > img {\n width: 100%;\n max-width: 549px;\n height: auto;\n object-fit: cover;\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n\n .faq-nav {\n display: flex;\n align-items: center;\n\n .nav-tab {\n margin-right: 32px;\n padding-bottom: 12px;\n position: relative;\n\n a {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: center;\n color: #3bc1ff;\n }\n\n span.underline {\n background-color: #3bc1ff;\n position: absolute;\n bottom: 0px;\n left: 0px;\n\n &.active {\n width: 100%;\n height: 3px;\n display: inline-block;\n }\n }\n\n @media (max-width: 768px) {\n margin-right: 16px;\n }\n }\n }\n }\n }\n\n .faq-contents {\n .inner-container {\n padding-top: 0px;\n\n @media (max-width: 768px) {\n h1 {\n font-size: 30px;\n margin-top: 60px;\n }\n }\n }\n }\n\n .panel-header {\n display: flex;\n align-items: center;\n\n .row-index {\n width: 80px;\n color: ${mainColor};\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n }\n\n .title {\n flex: 1;\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n .title {\n font-size: ${sizeHandler(14)};\n }\n }\n }\n\n .panel-content {\n padding-left: 80px;\n\n > p {\n width: 60%;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .panel-contents-wrapper {\n margin-top: 20px;\n margin-bottom: 20px;\n\n .panel-contents {\n padding: 12px 0px;\n border-bottom: 1px solid #e6e6e6;\n\n &:first-child {\n border-top: 1px solid #e6e6e6;\n }\n\n .panel-content-subtitle {\n float: left;\n width: 40%;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: left;\n color: ${mainColor};\n }\n\n .panel-content-subcontents {\n float: left;\n width: 50%;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n .panel-content-subtitle {\n width: 100%;\n }\n\n .panel-content-subcontents {\n width: 100%;\n }\n }\n }\n }\n }\n\n h1 {\n font-size: ${sizeHandler(34)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n\n margin-bottom: 26px;\n margin-top: 50px;\n }\n\n @media (max-width: 1120px) {\n .faq-header {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .panel-header {\n .row-index {\n width: 70px;\n }\n }\n\n .panel-content {\n padding-left: 70px;\n\n > p {\n width: 90%;\n }\n }\n }\n`;\nexport default StyledListContainer;\n","import React from 'react';\nimport { Collapse, Icon, Table } from 'antd';\n\nimport { CollapseContainer } from '../../../Review/List/list.styled';\nimport { newsEvent } from '../../../../Components/Columns/user';\n\nexport default class Event extends React.PureComponent {\n onRow = (row, index) => {\n return {\n onClick: () => {\n this.props.history.push({\n pathname: `/360F/newsEvent/info/${row._id}`,\n state: {\n id: row._id,\n },\n });\n },\n };\n };\n\n render() {\n return (\n <div className='faq-container'>\n <div className='faq-header'>\n <div className='inner-container'>\n <div className='flex-wrapper'>\n <div className='faq-main-title'>\n <p className='title'>위드메이트 소식</p>\n <p className='description'>위드메이트의 다양한 소식을 확인할 수 있습니다.</p>\n </div>\n <div className='img-section'>\n <img src={'/assets/images/comment_main.png'} style={{ width: '200px', height: 'auto', marginRight: '100px' }} alt='faq-img' />\n </div>\n </div>\n </div>\n </div>\n <div className='faq-contents'>\n <CollapseContainer className='inner-container'>\n <Table\n rowKey='id'\n dataSource={this.props.newsEvent.newsEventList}\n columns={newsEvent}\n onRow={this.onRow}\n pagination={{\n pageSize: 10,\n }}\n />\n </CollapseContainer>\n </div>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledListContainer from './list.styled';\nimport List from './list';\nimport { addNewsEvent, fetchNewsEvent, getNewsEventInfo } from '../../../../Reducer/Modules/newsEvent';\n\nclass InfoContainer extends React.PureComponent {\n componentDidMount = () => {\n this.props.fetchNewsEvent();\n };\n\n render() {\n return (\n <StyledListContainer>\n <List {...this.props} />\n </StyledListContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth, newsEvent }) => ({\n app,\n auth,\n newsEvent,\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchNewsEvent: () => dispatch(fetchNewsEvent()),\n addNewsEvent: info => dispatch(addNewsEvent(info)),\n getNewsEventInfo: ({ id, newsEventId }) => dispatch(getNewsEventInfo({ id, newsEventId })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InfoContainer);\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../../theme';\n\nconst StyledInfoContainer = styled.div`\n padding-top: 55px;\n\n .faq-header {\n // border-bottom: 1px solid #e6e6e6;\n\n .inner-container {\n padding: 0px;\n padding-top: 82px;\n\n @media (max-width: 768px) {\n padding-top: 42px;\n }\n\n > .flex-wrapper {\n position: relative;\n\n .faq-main-title {\n flex: 1;\n .title {\n font-size: ${sizeHandler(30)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 8px;\n\n @media {\n padding-left: 10px;\n }\n }\n\n .description {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 82px;\n\n @media {\n padding-left: 10px;\n }\n }\n }\n\n .img-section {\n position: absolute;\n bottom: -50px;\n right: 0px;\n\n > img {\n width: 100%;\n max-width: 549px;\n height: auto;\n object-fit: cover;\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n }\n }\n\n .info-contents {\n .inner-container {\n padding-top: 0px;\n\n @media (max-width: 768px) {\n h1 {\n font-size: 30px;\n margin-top: 60px;\n }\n }\n\n .img-section {\n > img {\n max-width: 500px;\n height: auto;\n object-fit: cover;\n }\n }\n }\n }\n\n h1 {\n font-size: ${sizeHandler(34)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n\n margin-bottom: 26px;\n margin-top: 50px;\n }\n\n @media (max-width: 832px) {\n .info-contents {\n .inner-container {\n .img-section {\n > img {\n max-width: 300px;\n height: auto;\n object-fit: cover;\n }\n }\n }\n }\n }\n\n @media (max-width: 1120px) {\n .faq-header {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .panel-header {\n .row-index {\n width: 70px;\n }\n }\n\n .panel-content {\n padding-left: 70px;\n\n > p {\n width: 90%;\n }\n }\n }\n`;\n\nexport default StyledInfoContainer;\n","import React from 'react';\nimport axios from '../../../../Lib/axios';\nimport styled from 'styled-components';\nimport moment from 'moment';\nimport { Button, message, Table } from 'antd';\nimport { CollapseContainer } from '../../../Review/List/list.styled';\n\nimport { InfoBlock } from '../../../../Components/Common/block';\n\nexport default class Event extends React.PureComponent {\n state = {\n data: {},\n };\n\n componentDidMount = () => {\n const { state } = this.props.history.location;\n if (!state || !state.id) return this.props.history.goBack();\n\n this.fetchInfo(state.id);\n };\n\n fetchInfo = async id => {\n const { data } = await axios.get('/v1/newsEvent/list/info', {\n params: {\n newsEventId: id,\n },\n });\n\n if (!data || data === 'check parameters') {\n return this.props.history.goBack();\n }\n\n if (data === 'invalid newEvent') {\n return message.warning('잘못된 게시물 정보입니다.');\n }\n\n this.setState({ ...data });\n };\n\n render() {\n const { url, url2, urlSource, urlSource2 } = this.state;\n\n return (\n <div className='faq-container'>\n <div className='faq-header'>\n <div className='inner-container'>\n <div className='flex-wrapper'>\n <div className='faq-main-title'>\n <p className='title'>위드메이트 소식</p>\n <p className='description'>위드메이트의 다양한 소식을 확인할 수 있습니다.</p>\n </div>\n <div className='img-section'>\n <img src={'/assets/images/comment_main.png'} style={{ width: '200px', height: 'auto', marginRight: '100px' }} alt='faq-img' />\n </div>\n </div>\n </div>\n </div>\n <div className='info-contents'>\n <CollapseContainer className='inner-container' style={{ width: '80%', margin: 'auto' }}>\n <>\n <ValueBox>\n <Label style={{ fontSize: '25px' }}>{this.state.title}</Label>\n </ValueBox>\n\n <ValueBox style={{ textAlign: 'right' }}>\n <InfoBlock label='작성일' value={moment(this.state.createdAt).format('YYYY년 MM월 DD일 dddd')} />\n </ValueBox>\n\n <ValueBox>\n {this.state.photo && (\n <div className='img-section' style={{ display: 'flex', justifyContent: 'center' }}>\n <img\n style={{ objectFit: 'contain' }}\n src={typeof this.state.photo === 'string' ? this.state.photo : URL.createObjectURL(this.state.photo)}\n alt='사진'\n />\n </div>\n )}\n </ValueBox>\n\n <ValueBox>\n <InfoBlock label='내용'>\n <p style={{ whiteSpace: 'pre-wrap' }}>{this.state.content} </p>\n </InfoBlock>\n {this.state.url ? (\n <InfoBlock label='링크'>\n {url ? (\n <a href={this.state.url} target='_blank' style={{ fontSize: '15px', color: '#3bc1ff' }}>\n ㆍ{urlSource}\n </a>\n ) : (\n ''\n )}{' '}\n <br />\n {url2 ? (\n <a href={this.state.url2} target='_blank' style={{ fontSize: '15px', color: '#3bc1ff' }}>\n ㆍ{urlSource2}\n </a>\n ) : (\n ''\n )}\n </InfoBlock>\n ) : null}\n </ValueBox>\n\n <ValueBox>\n <Button\n className='white'\n onClick={() => {\n this.props.history.goBack();\n }}\n style={{ float: 'right' }}\n >\n 목록으로\n </Button>\n </ValueBox>\n </>\n </CollapseContainer>\n </div>\n </div>\n );\n }\n}\n\nexport const ValueBox = styled.div`\n margin-bottom: 16px;\n`;\n\nexport const Label = styled.p`\n text-align: left;\n font-size: 11px;\n margin-bottom: 4px;\n color: #565656;\n`;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport StyledInfoContainer from './info.styled';\nimport Info from './info';\nimport { addNewsEvent, fetchNewsEvent, getNewsEventInfo } from '../../../../Reducer/Modules/newsEvent';\n\nclass InfoContainer extends React.PureComponent {\n componentDidMount = () => {\n const { id } = this.props.auth;\n const { state } = this.props.location;\n const { id: newsEventId } = this.props.match.params;\n\n // console.log(newsEventId, state);\n\n if (state === 'newsEvent') this.props.getNewsEventInfo({ newsEventId });\n };\n\n render() {\n return (\n <StyledInfoContainer>\n <Info {...this.props} />\n </StyledInfoContainer>\n );\n }\n}\n\nconst mapStateToProps = ({ app, auth, newsEvent }) => ({\n app,\n auth,\n newsEvent,\n});\n\nconst mapDispatchToProps = dispatch => ({\n fetchNewsEvent: () => dispatch(fetchNewsEvent()),\n addNewsEvent: info => dispatch(addNewsEvent(info)),\n getNewsEventInfo: ({ id, newsEventId }) => dispatch(getNewsEventInfo({ id, newsEventId })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InfoContainer);\n","import React from 'react';\nimport { Switch, Route } from 'react-router-dom';\n\n// pages\nimport List from './List';\nimport Info from './Info';\n\nclass NewsEvent extends React.PureComponent {\n render() {\n return (\n <Switch>\n <Route exact path='/360F/newsEvent/list' component={List} />\n <Route exact path='/360F/newsEvent/info/:id' component={Info} />\n </Switch>\n );\n }\n}\nexport default NewsEvent;\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../theme';\n\nconst StyledFaqContainer = styled.div`\n padding-top: 55px;\n\n .faq-header {\n border-bottom: 1px solid #e6e6e6;\n\n .inner-container {\n padding: 0px;\n padding-top: 82px;\n\n @media (max-width: 768px) {\n padding-top: 42px;\n }\n\n > .flex-wrapper {\n position: relative;\n\n .faq-main-title {\n flex: 1;\n .title {\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 8px;\n }\n\n .description {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 82px;\n }\n }\n\n .img-section {\n position: absolute;\n bottom: 0px;\n right: 0px;\n\n > img {\n width: 100%;\n max-width: 549px;\n height: auto;\n object-fit: cover;\n }\n\n @media (max-width: 768px) {\n display: none;\n }\n }\n }\n\n .faq-nav {\n display: flex;\n align-items: center;\n\n .nav-tab {\n margin-right: 32px;\n padding-bottom: 12px;\n position: relative;\n\n a {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: center;\n color: #3bc1ff;\n }\n\n span.underline {\n background-color: #3bc1ff;\n position: absolute;\n bottom: 0px;\n left: 0px;\n\n &.active {\n width: 100%;\n height: 3px;\n display: inline-block;\n }\n }\n\n @media (max-width: 768px) {\n margin-right: 16px;\n }\n }\n }\n }\n }\n\n .faq-contents {\n .inner-container {\n padding-top: 0px;\n\n @media (max-width: 768px) {\n h1 {\n font-size: 30px;\n margin-top: 60px;\n }\n }\n }\n }\n\n .panel-header {\n display: flex;\n align-items: center;\n\n .row-index {\n width: 80px;\n color: ${mainColor};\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n }\n\n .title {\n flex: 1;\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n .title {\n font-size: ${sizeHandler(14)};\n }\n }\n }\n\n .panel-content {\n padding-left: 80px;\n\n > p {\n width: 60%;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .panel-contents-wrapper {\n margin-top: 20px;\n margin-bottom: 20px;\n\n .panel-contents {\n padding: 12px 0px;\n border-bottom: 1px solid #e6e6e6;\n\n &:first-child {\n border-top: 1px solid #e6e6e6;\n }\n\n .panel-content-subtitle {\n float: left;\n width: 40%;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n text-align: left;\n color: ${mainColor};\n }\n\n .panel-content-subcontents {\n float: left;\n width: 50%;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n @media (max-width: 768px) {\n .panel-content-subtitle {\n width: 100%;\n }\n\n .panel-content-subcontents {\n width: 100%;\n }\n }\n }\n }\n }\n\n h1 {\n font-size: ${sizeHandler(34)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n letter-spacing: -1px;\n\n margin-bottom: 26px;\n margin-top: 50px;\n }\n\n @media (max-width: 1120px) {\n .faq-header {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .panel-header {\n .row-index {\n width: 70px;\n }\n }\n\n .panel-content {\n padding-left: 70px;\n\n > p {\n width: 90%;\n }\n }\n }\n`;\nexport default StyledFaqContainer;\n","import React from 'react';\nimport { HashLink } from 'react-router-hash-link';\nimport { Collapse, Icon } from 'antd';\nimport { mainColor } from '../../../theme';\nconst { Panel } = Collapse;\n\nexport default class FAQ extends React.PureComponent {\n render() {\n const { hash } = this.props.location;\n return (\n <div className='faq-container'>\n <div className='faq-header'>\n <div className='inner-container'>\n <div className='flex-wrapper'>\n <div className='faq-main-title'>\n <p className='title'>위드메이트 FAQ</p>\n <p className='description'>고객님의 궁금증을 해소하세요!</p>\n </div>\n <div className='img-section'>\n <img src={'/assets/images/faq_bg2.png'} alt='faq-img' />\n </div>\n <div className='faq-nav'>\n <div className='nav-tab'>\n <HashLink className='name' to='/360F/faq/#common' scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'start' })}>\n 공통 FAQ\n </HashLink>\n <span className={`underline ${hash === '#common' ? 'active' : undefined}`}></span>\n </div>\n <div className='nav-tab'>\n <HashLink\n className='name'\n to='/360F/faq/#emergency'\n scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'start' })}\n >\n 병원 동행 Pro FAQ\n </HashLink>\n <span className={`underline ${hash === '#emergency' ? 'active' : undefined}`}></span>\n </div>\n <div className='nav-tab'>\n <HashLink className='name' to='/360F/faq/#assist' scroll={el => el.scrollIntoView({ behavior: 'smooth', block: 'start' })}>\n 병원 동행 Basic FAQ\n </HashLink>\n <span className={`underline ${hash === '#assist' ? 'active' : undefined}`}></span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div className='faq-contents'>\n <div className='inner-container'>\n <h1 id='common'>공통 FAQ</h1>\n <div>\n <Collapse\n expandIconPosition='right'\n bordered={false}\n expandIcon={({ isActive }) => (\n <Icon type='right' rotate={isActive ? 90 : -90} style={{ color: isActive ? mainColor : '#a7a7a7' }} />\n )}\n >\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-1' title='동행인의 신원은 확실한가요?' />}\n >\n <PanelContent>\n <p>\n 현재 위드메이트는 적격 자격을 갖춘 인원들을 선별하고 세밀한 채용 단계를 거친 후, 영업 배상 책임 보험 가입과 함께\n 엄격한 자체 교육을 실시하며 서비스 인력을 모집하고 있습니다.\n <br />\n 이와 동시에 위드메이트가 진행하는 주기적인 교육과 점검을 통해 서비스를 제공하는 인력 모두가 건강한 긴장감을 놓치지\n 않도록 철저하게 관리하고 있습니다.\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-2' title='서비스 신청 방법에 대해 알려주세요.' />}\n >\n <PanelContent>\n <p>\n 위드메이트 서비스는 웹사이트를 통해 신청이 가능합니다. 웹사이트 내 서비스 신청 모듈을 통해 서비스 신청을 해주시면\n 됩니다. 회원 가입 진행을 완료하신 분이라면 전화 상담을 통한 예약 신청 또한 가능합니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-3' title='서비스 신청 후 절차가 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 예약 접수가 완료되면, 위드메이트 소속의 전문 동행인들은 예약 발생 알림을 받고 검토를 진행하게 됩니다. 이후 동행인이\n 예약을 접수하면 고객님께 ‘예약 완료’ 알림이 가고, 고객님께서 해당 동행인의 접수를 수락하시면 최종 ‘매칭’이\n 이루어집니다. 이후 예약 일정에 맞춰 동행인과 함께 병원에 방문하시면 됩니다. 고객님께서 동행인의 접수를 거절하시면\n 처음 단계로 돌아가 다른 동행인의 접수를 대기하게 됩니다.\n <br />\n 만약 동행인 접수가 불가한 경우 고객님께 예약 불가 알림이 가고, 추후 서비스 재신청을 통해 서비스를 받을 수 있습니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-4' title='위드메이트 서비스 이용 가능 지역은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 위드메이트의 서비스는 현재 수도권 내에서 이용 가능합니다. 빠른 시일 내 경기도를 포함한 타 지역 서비스 확장을 계획\n 중에 있습니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-5' title='예약 변경 및 취소 수수료는 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>고객님께서 정상적으로 매칭된 병원 동행 서비스 계약을 취소 및 변경하는 경우에는 아래와 같이 수수료가 발생합니다.</p>\n <div className='panel-contents-wrapper'>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>서비스 예약 날짜 기준 48시간 이내 변경 및 취소</p>\n <p className='panel-content-subcontents'>수수료 없이 변경 & 취소 가능</p>\n <div className='clearfix' />\n </div>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>서비스 예약 전날 18:00 이전 변경 및 취소</p>\n <p className='panel-content-subcontents'>\n 취소 시 수수료 10,000원 발생. 단, 메이트와 변경 협의 성공 시에는 수수료 부과 X\n </p>\n <div className='clearfix' />\n </div>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>당일 예약 변경 및 취소</p>\n <p className='panel-content-subcontents'>\n 취소 시 수수료 15,000원 발생. 단, 메이트와 변경 협의 성공 시에는 수수료 부과 X\n </p>\n <div className='clearfix' />\n </div>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>서비스 시작 2시간 전 이내 변경 및 취소</p>\n <p className='panel-content-subcontents'>\n 취소 시 수수료 20,000원 발생. 단, 메이트와 변경 협의 성공 시에는 수수료 부과 X\n </p>\n <div className='clearfix' />\n </div>\n <div className='panel-contents'>\n <p className='panel-content-subtitle'>노쇼(No-Show)의 경우</p>\n <p className='panel-content-subcontents'>회원 자격 정지 및 민/형사상 책임 소지를 물을 수 있음</p>\n <div className='clearfix' />\n </div>\n </div>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-6' title='회사측의 과실로 예약일정을 소화 못하면 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 회사측의 과실로 예약된 서비스를 이용하지 못한 경우 서비스 요금을 전액 배상해드리며, 상황에 따라 서비스 무료 이용권\n 등의 추가 배상을 진행합니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-7' title='예약 장소에서 담당 동행인을 어떻게 찾나요?' />}\n >\n <PanelContent>\n <p>\n 예약 접수 후 동행인 매칭이 완료되면 ‘마이페이지’ 내에서 동행인의 정보를 확인하실 수 있으며, 해당 정보를 통해\n 동행인과 서비스 관련 소통을 진행하시면 됩니다.\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-8' title='예약한 시간보다 진료나 귀가가 늦어져 서비스 시간이 추가되면 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 위드메이트 서비스는 후불제이기 때문에 예약한 서비스 시간을 넘어 추가 서비스가 이루어지는 경우, 해당 시간만큼의 추가\n 비용이 발생합니다. 서비스 종료 후 추가된 금액이 포함된 최종 요금을 결제하시면 됩니다. 추가 비용은 서비스 시간 15분\n 미만 초과 시 발생하지 않으며, 15분을 초과할 시 30분 단위의 요금이 발생합니다.\n <br />\n (Ex. 2시간 예약 서비스가 최종 2시간 14분으로 종료 > 추가 요금 발생 X)\n <br />\n (Ex. 2시간 예약 서비스가 최종 2시간 16분으로 종료 > 추가 요금 발생 O)\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='1-9' title='위드메이트 서비스는 사용 가능 시간이 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 위드메이트의 모든 서비스는 주 5일 (월~금), 1일 10시간 (오전 9시 ~ 오후 7시) 동안 이용 가능합니다. 주말 및 공휴일에는\n 서비스 제공을 하지 않습니다. 하지만 특수 예약에 대해서는 해당 시간 외에도 서비스를 제공할 수 있습니다.\n </p>\n </PanelContent>\n </Panel>\n </Collapse>\n </div>\n <h1 id='emergency'>병원 동행 Pro FAQ</h1>\n <div>\n <Collapse\n expandIconPosition='right'\n bordered={false}\n expandIcon={({ isActive }) => (\n <Icon type='right' rotate={isActive ? 90 : -90} style={{ color: isActive ? mainColor : '#a7a7a7' }} />\n )}\n >\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-1' title='병원 동행 Pro는 정확히 어떤 경우에 신청할 수 있나요?' />}\n >\n <PanelContent>\n <p>\n 병원 동행 Pro는 응급 상황에 처하지는 않았으나 정기적, 혹은 비정기적으로 의료 기관에 방문해 의료 조치를 받아야 하는\n 경우에 신청 가능합니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-2' title='서비스 요금은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 병원 동행 Pro 서비스 요금은 시간 당 25,000원입니다. 또, 고객 소유의 차량을 메이트가 운행하여 동행할 경우 20,000원이\n 추가됩니다 (택시 등 대중 교통을 이용할 경우 추가 요금은 없으나 해당 교통비 개별 부담). 모든 서비스 비용은 VAT 포함\n 가격입니다.\n <br />\n (Ex. 2시간 예약 + 고객 소유 차량 운행 선택 시 > 기본 요금 50,000원 + 차량 운행비 20,000원 = 70,000원)\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-3' title='동행인의 성별은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>남성과 여성 인력이 모두 대기 중입니다.</p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-4' title='서비스는 어떤 형식으로 이루어지나요?' />}\n >\n <PanelContent>\n <p>\n 예약일과 시간에 맞춰 위드메이트 소속의 동행인이 병원 출발지(고객님 자택 등)로 도착합니다. 이후 서비스 신청에 따라\n 고객 소유의 차량을 통해 이동할 경우 동행인이 차량을 운행하고 병원까지 이동하며(택시 등의 대중 교통 이용 시 해당 비용\n 자가 부담), 병원 내에서 이루어지는 모든 활동에 동행합니다.\n </p>\n </PanelContent>\n </Panel>\n\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-5' title='동행인은 어떤 사람들인가요?' />}\n >\n <PanelContent>\n <p>\n 동행인은 철저하게 선별되고 영업배상책임보험에 가입되어 있으며, 위드메이트가 자체적으로 실시하는 엄격한 서비스 교육을\n 모두 이수하고 통과한 전문가입니다. 또, 위드메이트의 동행인은 국립 암센터에서 실시하는 주기적인 암 환자 관리 교육 및\n 세미나에 지속적으로 참여해 서비스 품질과 전문성이 보장된 인력들입니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='2-6' title='중증 또는 휠체어 등의 의료 기구 대동이 필요한 환자도 이용 가능한가요?' />}\n >\n <PanelContent>\n <p>\n 중증 또는 휠체어 등의 의료 기구 대동이 필요한 환자에 대한 비응급 의료 동행 서비스는 준비 중에 있습니다. 현\n 서비스로는 해당 인원과의 동행은 불가하며, 예약이 접수된 경우 개별적인 연락을 통해 예약 불가를 알려드립니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={\n <PanelHeader\n rowIndex='2-7'\n title='단발성이 아니라 수회에 걸쳐서 정기적으로 위드메이트 서비스를 이용하고 싶은데 이 같은 경우 예약을 어떻게 하나요?'\n />\n }\n >\n <PanelContent>\n <p>\n 방사선이나 암 치료와 같이 주기적으로 내원이 필요한 경우 개별 상담을 통해 예약이 가능합니다. 위드메이트 서비스를 장기\n 예약할 경우 특별 할인 혜택 또한 제공되고 있습니다. 서비스 센터로 문의 주실 경우 위드메이트의 전문 상담원이\n 안내해드립니다.\n </p>\n </PanelContent>\n </Panel>\n </Collapse>\n </div>\n <h1 id='assist'>병원 동행 Basic FAQ</h1>\n <div>\n <Collapse\n expandIconPosition='right'\n bordered={false}\n expandIcon={({ isActive }) => (\n <Icon type='right' rotate={isActive ? 90 : -90} style={{ color: isActive ? mainColor : '#a7a7a7' }} />\n )}\n >\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-1' title='병원 동행 Basic은 정확히 어떤 경우에 신청할 수 있나요?' />}\n >\n <PanelContent>\n <p>\n 병원 동행 Basic은 주로 수술의 범주에는 속하지 않지만 마취 혹은 단순 보호자가 필요한 수면 내시경 등을 포함한 모든\n 종류의 시술을 해야 할 경우에 신청합니다. 물론 Pro 서비스를 받아야 하지만 자택에서 병원, 다시 병원에서 자택까지의\n 동행 과정을 필요로 하지 않는 상황에서도 신청이 가능합니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-2' title='서비스 요금은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>\n 병원 동행 Basic 요금은 시간 당 15,000원입니다. (Ex. 2시간 예약 시 30,000원)\n <br /> 모든 서비스 비용은 VAT 포함 가격입니다.\n </p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-3' title='동행인은 어떤 사람들인가요?' />}\n >\n <PanelContent>\n <p>병원 동행 Basic 서비스 동행인은 Pro 서비스와 동일한 인력으로 구성되어 있습니다.</p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-4' title='동행인의 성별은 어떻게 되나요?' />}\n >\n <PanelContent>\n <p>남성과 여성 인력이 모두 대기 중입니다.</p>\n </PanelContent>\n </Panel>\n <Panel\n style={{ backgroundColor: '#ffffff', borderColor: '#e6e6e6' }}\n header={<PanelHeader rowIndex='3-5' title='서비스는 어떤 형식으로 이루어지나요?' />}\n >\n <PanelContent>\n <p>\n 고객님께서 지정하신 병원에서 동행자와 접선 후, 동행자는 예약자의 진료 접수부터 종료 시점까지 병원 내부에서\n 대기합니다. 진료 종료 후, 동행자는 예약자의 의사를 확인한 후 업무를 마치고 복귀합니다.\n </p>\n </PanelContent>\n </Panel>\n </Collapse>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n\nconst PanelHeader = ({ rowIndex, title }) => {\n return (\n <div className='panel-header'>\n <p className='row-index'>{rowIndex}</p>\n <p className='title'>{title}</p>\n </div>\n );\n};\n\nconst PanelContent = ({ children }) => {\n return <div className='panel-content'>{children}</div>;\n};\n","import React from 'react';\nimport StyledFaqContainer from './faq.styled';\nimport FAQ from './faq';\n\nclass FAQContainer extends React.PureComponent {\n render() {\n return (\n <StyledFaqContainer>\n <FAQ {...this.props} />\n </StyledFaqContainer>\n );\n }\n}\nexport default FAQContainer;\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../../theme';\nconst PrivacyStyledContainer = styled.div`\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .medium-bold {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n\n .in {\n font-size: ${sizeHandler(13)};\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n text-indent: -20px;\n padding-left: 40px;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default PrivacyStyledContainer;\n","import React from 'react';\n\nclass PrivacyComponent extends React.PureComponent {\n render() {\n return (\n <div className='privacy-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>㈜ 블루카멜 개인정보처리방침</h2>\n <p>\n 병원동행서비스 위드메이트(www.withmate.kr, 이하 “서비스\")를 운영하는 (주)블루카멜(이하 “회사”)은 「개인정보보호법」 제30조에 따라\n 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 다음과 같이 개인정보처리방침(이하 \"방침\")을\n 수립 및 공개합니다. 개인정보처리방침은 관련 법령 또는 지침, 회사의 약관 또는 정책에 따라 변경될 수 있습니다. 회사는 해당 변경 사항을\n 온라인 게시 등의 방법으로 이용자에게 알립니다.\n <br />\n <br />이 개인정보처리방침은 2023년 7월 25일부터 적용됩니다.\n </p>\n <br />\n <br />\n <br />\n\n <p style={{ fontSize: '20px' }}>\n <a\n href='https://docs.google.com/document/d/e/2PACX-1vTQ3CepPqUO6BqEg8va9_5e0zZg7V1nMuK7xiibF1Nxa2RQAX1C5xv3p4mnIVmkeeh_ClORu1P3Fs0p/pub'\n target='_blank'\n style={{ color: 'gray' }}\n >\n ✅ 개인정보처리방침 2차(2023.07.22)\n </a>\n </p>\n <p style={{ fontSize: '20px' }}>\n <a\n href='https://docs.google.com/document/d/e/2PACX-1vQTjHkJBb2VK4gofoPrHZVYbgCOvOgDDvClVJjwYpx7ikkLFW37GUlFS5Hwa8osGb7a7mNbg55qlEMu/pub'\n target='_blank'\n style={{ color: 'gray' }}\n >\n ✅ 개인정보처리방침 1차(2021.12.20)\n </a>\n </p>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default PrivacyComponent;\n","import React from 'react';\n\n// component\nimport PrivacyStyledContainer from './privacy.styled';\nimport Privacy from './privacy';\n\nclass PrivacyContainer extends React.PureComponent {\n render() {\n return (\n <PrivacyStyledContainer component={this.props.isComponent || undefined}>\n <Privacy {...this.props} />\n </PrivacyStyledContainer>\n );\n }\n}\n\nexport default PrivacyContainer;\n","import styled from 'styled-components';\nimport { sizeHandler, mainColor } from '../../../../theme';\nconst TermsStyledContainer = styled.div`\n .inner-container {\n ${props => props.component && `padding: 0px !important;`}\n }\n .main-context {\n width: ${props => (props.component ? '100%' : '60%')};\n\n h2 {\n ${props => props.component && `display: none;`}\n font-size: ${sizeHandler(44)};\n font-weight: bold;\n letter-spacing: -0.6px;\n color: #000000;\n margin-bottom: 24px;\n }\n\n p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n padding: 0px;\n margin: 0px;\n }\n }\n\n .context-block {\n margin-top: ${props => (props.component ? '24px' : '100px')};\n padding-top: 24px;\n border-top: 1px solid #e6e6e6;\n width: ${props => (props.component ? '100%' : '60%')};\n\n > h3 {\n font-size: ${sizeHandler(24)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 16px;\n }\n\n > h6 {\n font-size: ${sizeHandler(16)};\n font-weight: normal;\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 24px;\n }\n\n > h5 {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-top: 20px;\n margin-bottom: 12px;\n }\n\n > p {\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n > .privacy-justify {\n display: flex;\n align-items: center;\n ${props => props.component && `display: block;`}\n\n p {\n flex: 1;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n\n &:first-child {\n text-align: left;\n }\n\n &:last-child {\n text-align: right;\n ${props => props.component && `text-align: left;`}\n }\n }\n }\n\n > .info {\n margin-top: 8px;\n .title {\n border-bottom: 1px solid #e6e6e6;\n padding: 24px 0px;\n font-size: ${sizeHandler(14)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n\n .bold {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n margin: 0px;\n padding: 0px;\n margin-bottom: 4px;\n display: block;\n }\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n padding: 20px 0px;\n border-bottom: 1px solid #e6e6e6;\n }\n }\n\n > .info-block {\n margin-top: 68px;\n\n .title {\n font-size: ${sizeHandler(18)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.8);\n margin-bottom: 8px;\n }\n\n .content {\n font-size: ${sizeHandler(14)};\n line-height: ${sizeHandler(24)};\n letter-spacing: -0.3px;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n }\n\n @media (max-width: 1120px) {\n .inner-container {\n padding-left: 16px;\n padding-right: 16px;\n }\n }\n\n @media (max-width: 768px) {\n .main-context {\n width: 100%;\n\n h2 {\n font-size: ${sizeHandler(38)};\n }\n }\n\n .context-block {\n width: 100%;\n }\n\n .privacy-justify {\n flex-direction: column;\n\n p {\n &:first-child {\n text-align: center;\n }\n &:last-child {\n text-align: center;\n }\n }\n }\n }\n`;\nexport default TermsStyledContainer;\n","import React from 'react';\n\nclass TermsComponent extends React.PureComponent {\n render() {\n return (\n <div className='terms-container'>\n <div className='inner-container'>\n <div className='main-context'>\n <h2>위드메이트 서비스 이용약관</h2>\n </div>\n\n <div className='context-block'>\n <h3>제 1조(목적)</h3>\n <p>\n 본 약관은 ㈜블루카멜(이하 “회사”라 한다)가 제공하는 위드메이트 병원 동행 서비스와 관련하여 회사와 회원과의 권리,\n <br />\n 의무 및 책임 사항, 그리고 기타 필요한 사항을 규정함을 목적으로 합니다.\n </p>\n <br />\n <p>본 서비스 이용약관은 2021년 12월 20일부터 시행됩니다.</p>\n </div>\n\n <div className='context-block'>\n <h3>제 2조(정의)</h3>\n <h5>1. 본 약관에서 사용하는 용어의 정의는 다음과 같습니다.</h5>\n\n <div className='info'>\n <p className='title'>“위드메이트 서비스” 혹은 “서비스”라 함은 당사가 제공하는 ‘병원 동행 서비스’를 의미합니다.</p>\n <p className='title'>\n “회원”이라 함은 회사가 제공하는 서비스를 이용하기 위하여 본 약관에 동의하고 회사의 회원으로 가입하는 자를 말합니다. (단,\n 메이트와 관련된 사실 관계에 한하여, 메이트도 본 약관에서 “회원”에 포함될 수 있습니다)\n </p>\n <p className='title'>\n “메이트”라 함은 회사가 회원에게 서비스를 제공하기 위해 직접 선별하고 교육하여 ‘프리랜서’의 형태로 간접 고용한 인원을 말합니다.\n </p>\n <p className='title'>\n “운송사업자\"라 함은 여객자동차 운수사업법 제4조에 따른 면허를 받은 여객자동차 운송사업자로서, 회사(메이트 인력)의 중개 또는 회원\n 스스로를 통해 택시 등 그 면허를 받은 운송 수단을 이용하여 운송서비스를 제공하는 자를 의미합니다.\n </p>\n <p className='title'>\n “중개”라 함은 회사가 직접 서비스를 제공하지 않고, 이용자 또는 회원의 요청에 따라 적격 메이트를 연결하여 알선하는 것을\n 의미합니다.\n </p>\n <p className='title'>\n “매칭”이라 함은 회원이 플랫폼(웹사이트 포함)에서 출발지와 목적지를 입력하고, “예약하기\" 버튼을 통해 서비스 이용을 요청(이하\n “이용 요청”이라고 합니다)하면, 요청 시점에 서비스 제공이 가능한 메이트가 플랫폼(웹사이트 포함)을 통하여\n 수락함으로써(매칭됨으로써), 회원과 회사 사이의 메이트 알선 계약이 각 체결된 상태를 의미합니다.\n </p>\n <p className='title'>\n “플랫폼(웹사이트 포함)”이라 함은 회사가 회원에게 서비스를 제공하기 위하여 개발한 위드메이트 애플리케이션과 웹사이트를\n 의미합니다.\n </p>\n <p className='title'>\n “이용요금”이라 함은\n <br />\n (i) 메이트가 제공하는 의료 동행 서비스에 대한 비용\n <br />\n (ii) 회원이 택시 등 운송사업자의 운송 수단을 예약하거나 호출하여 이동하는 비용,\n <br />\n (iii) 기타 비용(고객 소유 자가용 대리 운전 비용, 예약 취소 및 변경 수수료 등)을 총칭하여 의미합니다.\n </p>\n </div>\n\n <h5 style={{ marginTop: '56px' }}>\n 2. 본 약관에서 사용하는 용어의 정의는 본 조제 1항에서 정하는 것을 제외하고는 관계 법령에서 정하는 바에 의합니다. 관계 법령에서\n 정하지 않는 것은 일반적인 상 관례에 의합니다.\n </h5>\n </div>\n\n <div className='context-block'>\n <h3>제 3조(약관의 효력 및 변경)</h3>\n <h5>1.</h5>\n <h6>\n 약관은 애플리케이션 소프트웨어 및 해당 애플리케이션과 웹사이트의 모든 패치, 업데이트, 업그레이드 또는 새로운 버전에 적용되며, 가장\n 최신 버전이 모든 기존 버전에 우선합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 본 약관은 서비스 이용계약의 성격상 회사의 웹사이트 또는 서비스 이용을 위한 애플리케이션 내에 본 약관을 명시하고, 이용자가\n 애플리케이션을 설치 및 실행 혹은 웹사이트 열람과 동시에 효력이 발생합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>회사는 관계 법령 또는 상관습에 위배되지 않는 범위에서 본 약관을 개정할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사는 관련 법령의 변경이나 이용자의 권리 및 의무사항, 서비스 등을 개선하기 위해 본 약관을 변경할 수 있으며, 변경된 경우에 약관의\n 내용과 적용일을 정하여, 적용일 7일 전 회사 공식 홈페이지나 공식 블로그, 제공하는 애플리케이션 등을 통해 이용자에게 고지하고\n 적용일부터 효력이 발생합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 이용자는 변경된 약관에 대해 거부할 권리가 있습니다. 본 약관의 변경에 대해 이의가 있는 이용자는 서비스 이용을 중단하고 이용을\n 해지(탈퇴 및 삭제)할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>\n 회사가 본 조 4항에 따라 변경된 약관을 공시 또는 고지하면서 이용자가 기간 내의 의사표시를 하지 않으면 변경된 약관에 동의한 것으로\n 간주합니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 4조(약관 외 준칙)</h3>\n <h5>1.</h5>\n <h6>\n 회사는 필요한 경우 특정 서비스에 관하여 적용될 사항을 위해 개별 약관이나 이용 정책을 정하여 운영할 수 있으며, 해당 내용은 홈페이지\n 등을 통해 공지합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 본 약관에 규정되지 않은 사항에 대해서는 관련 법령 또는 개별 약관, 이용 정책, 서비스 이용 화면을 통하여 제시된 개별 이용 조건(이용\n 요금 등, 이하 “개별계약“이라고 합니다)에서 정한 바에 따릅니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 본 약관과 개별 약관, 개별 계약의 내용이 충돌할 경우 본 약관에 별도의 규정이 없는 한 개별 계약 또는 개별 약관에서 정한 바에 따릅니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회원은 서비스 이용 시 개별 계약 또는 개별 약관의 내용을 확인하여야 하며, 이를 확인하지 않아 발생한 손해에 대해 회사는 책임을\n 부담하지 않습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 5조(이용 계약의 성립)</h3>\n <h5>1.</h5>\n <h6>\n 이용 계약은 이용자가 본 이용 약관에 대한 동의 또는 회사의 애플리케이션을 다운로드 받거나 실행하여 이용하는 경우, 그리고 웹사이트\n 회원 가입을 완료한 경우 이 약관에 동의한 것으로 간주합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>이용자는 동의하지 않는 경우 애플리케이션이나 웹사이트 계정 로그아웃 및 삭제와 함께 이를 철회할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 제 1항에 따른 회원 가입 신청에 대해 승낙함을 원칙으로 합니다. 다만, 다음 각 호의 경우 회사는 회원 가입 신청을 승낙하지 않거나\n 사후에 회원 계약을 해지할 수 있습니다.\n </h6>\n\n <div className='info'>\n <p className='title'>신청자가 본 약관 위반 등의 사유로 이전에 회원 자격이 상실 또는 회원 계약이 해지되었던 경우</p>\n <p className='title'>자신의 귀책으로 이용 정지를 당한 회원이 그 이용 정지 기간 중에 이용 계약을 임의 해지하고 재신청을 하는 경우</p>\n <p className='title'>본 약관에 위배되거나 위법 또는 사회상규상 부당한 가입 신청임이 확인된 경우</p>\n <p className='title'>허위의 정보를 기재한 경우, 회사가 제시하는 내용을 기재하지 않은 경우 또는 오기 등이 있는 경우</p>\n <p className='title'>미성년자 등 법령상 행위 무능력자인 경우</p>\n <p className='title'>기타 신청자의 귀책 사유로 인하여 승낙이 불가능하거나 기타 회사가 정한 제반 사항을 위반한 자의 신청</p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 서비스 신청자가 대리인일 경우, 해당 서비스 수혜자에 대한 모든 정보는 사실에 근거하여 제공되어야 하며, 허위 사실 기재 시 발생하는\n 모든 민형사상 책임은 신청자에게 있습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 6조(회원 계약의 해제 및 해지 등)</h3>\n <h5>1.</h5>\n <h6>\n 회원은 언제든지 회원 계약의 해지를 신청할 수 있으며, 회사는 관련 법령에서 정하는 바에 따라 이를 즉시 처리하여야 합니다. 다만,\n 회원에게 미수금이 있을 경우에는 미수금에 대한 결제를 완료한 이후에 해지 신청이 가능합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원이 회원 계약을 해지할 경우, 회사는 관련 법령 개인정보처리방침 또는 내부관리 계획 등에 따라 회원 정보를 보유하는 경우를\n 제외하고는 해지 즉시 회원의 모든 정보를 삭제합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회원 계약 해지로 인해 발생한 불이익에 대한 책임은 회원 본인이 부담해야 하며, 회사는 회원에게 부가적으로 제공한 각종 무상 혜택을\n 회수할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사가 회원 계약을 해지하는 경우 회사는 회원에게 해지 사유를 밝혀 해지 의사를 통지합니다. 이 경우 회사는 해지를 하기 전에 상당한\n 기간을 정하여 회원에게 이의 신청의 기회를 부여합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>회원 계약이 회사에 의해 해지되는 경우 회원의 재이용 신청에 대해 회사는 승낙을 거절할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>\n 회원의 귀책 사유로 인해 회원 계약이 해지됨으로써 발생한 손해는 당해 회원이 부담하여야 하며, 회사는 관련 법령에 규정이 없는 한 책임을\n 부담하지 않습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 7조(서비스 내용)</h3>\n <h5>1.</h5>\n <h6>회사가 제공하는 병원 동행 서비스의 내용은 다음과 같습니다.</h6>\n <div className='info'>\n <p className='title'>\n <span className='bold'>병원 동행 Pro 서비스 : </span>응급 상황에 처하지는 않았으나 정기적, 혹은 비정기적으로 의료 기관에 방문해\n 적절한 조치를 받아야 하는 고객을 위한 서비스.\n </p>\n <p className='title'>\n <span className='bold'>병원 동행 Basic 서비스 & 수면내시경 보호자 서비스 :</span>보호자 동행이 법적 의무는 아니나 보호자가 없을\n 경우 시술이 어려운 수면 내시경 등과 같은 의료 조치를 받아야 하는 고객을 위한 보호자 대행 서비스.\n </p>\n <p className='title'>\n <span className='bold'>병원 동행 서비스 제공을 위한 메이트 알선(중개) 서비스 : </span>회원의 서비스 이용 요청 시 적격 자격을\n 갖춘 인원을 회사가 직접 선별하고 교육한 후, 프리랜서로 등록된 인력이 병원 동행 서비스를 위한 동행자를 알선 받을 수 있도록\n 중개해주는 서비스.\n </p>\n\n <p className='title'>\n <span className='bold'>고객 소유 자가용 대리 운전 서비스 : </span>회원의 요청에 따라 알선된 메이트가 고객 소유의 자가용을 운행해\n 병원과 자택을 이동하는 서비스\n </p>\n <p className='title'>\n <span className='bold'>택시 등 여객자동차 운송 중개 서비스 :</span>회원의 요청에 따라 알선된 메이트가 택시 등 여객자동차\n 운송사업자의 운송 수단을 호출하여 동행할 수 있도록 중개해주는 서비스.\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>회사는 제1항의 각 호의 서비스 이외에도 추가적인 서비스를 개발하여 회원에게 제공할 수 있습니다.</h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사가 제공하는 서비스와 플랫폼(웹사이트 포함)의 사용은 무료입니다. 단, 회사가 제공한 서비스를 통해 메이트 알선을 포함한 병원 동행\n 서비스가 제공되는 경우 사용자는 해당 서비스에 대한 이용 요금을 지불할 의무를 가집니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사는 회원과 메이트 사이의 병원 동행 서비스 혹은 메이트 알선 계약 및 회원과 여객자동차 운송사업자 사이의 운송 계약 체결을 중개하고\n 제 8조 1항에 명시된 ‘병원 동행 서비스 비용’을 수취하는 회사입니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>회사의 메이트는 고객에게 어떠한 형태의 의료 서비스나 치료, 구급차 등의 의료 운송 서비스를 제공하지 않습니다.</h6>\n </div>\n\n <div className='context-block'>\n <h3>제 8조(이용 요금 등)</h3>\n <h5>1.</h5>\n <h6>\n 위드메이트 서비스 이용 요금은 ‘병원 동행 서비스 비용’으로 구성되어 있습니다. 단, 상황에 따라 이동 중에 발생하는 운송 교통 비용이\n 고객 본인 부담으로 발생할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회사는 이용 요금을 애플리케이션 혹은 웹사이트 내의 예약하기 페이지에 게시하거나, 예약 완료 시에 별도로 회원에게 안내합니다. 다만\n 최종 이용 요금은 다양한 변수에 따라서 서비스 종료 후 추가 부과가 될 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 메이트가 회원이 지정한 출발지에 도착하여 회원에게 도착을 안내하였음에도 회원이 사전 연락 없이 일정 시간(20분) 이내에 나타나지\n 아니하거나 계약을 취소하는 경우 회사는 제 9조에 명시된 취소 수수료를 회원에게 부과할 수 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n [병원 동행 Pro] 서비스 이용 옵션 중 ‘고객 소유의 자차 운행’을 선택한 경우 예약일에 맞춰 본인의 차량 보험사가 제공하는 ‘임시 운전자\n 특약’에 가입을 해야 합니다. 이때 발생하는 보험 비용은 고객 본인 부담이며, 임시 운전자 특약에 가입을 하지 않고 메이트에게 운전을\n 위임하여 사고가 발생한 경우 모든 책임은 고객 본인에게 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 서비스와 관련하여 발생한 미납경비, 손해배상 등 회원의 회사에 대한 채무가 모두 정산될 때까지 해당 회원의 서비스 사용이 중지되며, 그\n 채무가 일정기간 계속하여 변제되지 않을 경우에는 해당 회원의 회원자격이 박탈될 수 있습니다. 서비스 사용 중지 또는 회원자격 박탈에\n 대한 판단 기준은 회사의 약관 및 이용정책에 근거합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>\n 회원이 본 약관 및 위 각 조항을 준수하지 않았을 경우, 회사는 본 약관 및 이용 정책에 따라 손해배상 금액 등 각종 수수료를 부과하는 것\n 외에 계약을 해지할 수 있는 권리를 가집니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>7.</h5>\n <h6>\n 회사는 본 서비스와 관련하여 발생한 미납경비, 손해배상 등 회원의 회사에 대한 채무가 정산되지 않을 경우 회원을 상대로 보전처분,\n 본안소송제기, 강제집행절차의 착수 등 채무 변제를 위한 법적 조치에 들어갈 수 있습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 9조(계약 등의 취소)</h3>\n <h5>1. 회원이 정상적으로 매칭된 병원 동행 서비스 계약을 취소 및 변경하는 경우에는 아래와 같이 수수료가 발생합니다.</h5>\n\n <div className='info'>\n <p className='title'>\n <span className='bold'>서비스 예약 날짜 기준 48시간 이내 변경 및 취소</span>수수료 없이 변경 & 취소 가능\n </p>\n <p className='title'>\n <span className='bold'>서비스 예약 전날 18:00 이전 변경 및 취소</span>취소 시 수수료 10,000원 발생. 단, 메이트와 변경 협의 성공\n 시에는 수수료 부과 X 수수료 부과 X\n </p>\n <p className='title'>\n <span className='bold'>당일 예약 변경 및 취소</span>취소 시 수수료 15,000원 발생. 단, 메이트와 변경 협의 성공 시에는 수수료 부과\n X\n </p>\n <p className='title'>\n <span className='bold'>서비스 시작 2시간 전 이내 변경 및 취소</span>서비스 수수료 20,000원 발생. 단, 메이트와 변경 협의 성공\n 시에는 수수료 부과 X 수수료 부과 X\n </p>\n <p className='title'>\n <span className='bold'>노쇼(No-Show)의 경우</span>회원 자격 정지 및 민/형사상 책임 소지를 물을 수 있음\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>\n 2. 회사가 서비스 계약을 취소하는 경우 회원에게 사유를 설명하고 이용요금 전액을 청구하지 아니하며, 회원이 입은 피해에 대한 보상을\n 협의하고 지급합니다.\n </h5>\n\n <h5 style={{ marginTop: '48px' }}>\n 3. 서비스 수혜자의 상태(건강 이상, 인지능력 저하 등)에 따른 현장 판단으로 서비스가 수행되지 못한 경우에도, 이용자는 당일 취소\n 수수료를 부담할 수 있습니다.\n </h5>\n </div>\n\n <div className='context-block'>\n <h3>제 10조(서비스 제공 밎 중단)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 서비스를 주 5일 (월~금), 1일 10시간 (오전 9시~오후 7시) 제공함을 원칙으로 합니다. 특수 예약에 대해서는 검토 후 해당 시간\n 외에도 서비스를 제공할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회사는 서비스의 제공에 필요한 경우 정기 점검을 실시할 수 있으며, 정기 점검 시간은 플랫폼(웹사이트 포함)의 서비스 제공 화면에 공지한\n 바에 따릅니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 파산 또는 회생 절차 개시 등 정상적인 영업 활동이 곤란한 경우 또는 회사의 영업상 필요한 경우 서비스 내용을 변경하거나 서비스를\n 종료할 수 있습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>회사는 다음 각 호의 경우 당해 서비스의 전부 또는 일부의 제공을 중단하거나 제한할 수 있습니다.</h6>\n\n <div className='info'>\n <p className='title'>\n 천재지변, 전쟁, 폭동, 화재, 파업 등 쟁의행위, 정부기관의 통제, 테러, 해킹, DDOS, 기타 회사의 합리적인 노력으로 제어할 수 없는\n 사유가 발생하거나 발생할 우려가 있는 경우\n </p>\n <p className='title'>기간통신사업자로부터 전기통신서비스가 제공되지 않은 경우</p>\n <p className='title'>서비스용 설비의 장애 및 정기 점검, 보수점검, 교체 또는 고장, 통신의 두절 등의 사유가 발생한 경우</p>\n <p className='title'>서비스가 제3자와의 제휴를 통하여 제공되는 경우에 당해 제휴사업자의 사정에 따라 변경되거나 중지되는 경우</p>\n <p className='title'>기타 서비스의 원활한 운영을 현저히 저해하는 사유가 발생한 경우</p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 본 조 제3항, 제4항의 사유로 서비스 내용이 변경 또는 중단되는 경우, 회사는 그로 인해 회원이 입은 손해에 대하여 고의 또는 중과실이\n 없는 한 배상하지 않습니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>회사는 본 조 상기된 사유가 발생한 경우 최대한 빠른 시간 내에 서비스를 재개하도록 최선의 노력을 다합니다.</h6>\n </div>\n\n <div className='context-block'>\n <h3>제 11조(서비스의 변경)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 상당한 이유가 있는 경우에 운영상, 기술상의 필요에 따라 제공하고 있는 전부 또는 일부의 서비스를 변경할 수 있습니다. 다만,\n 변경된 내용이 중대하거나 회원에게 불리한 경우에는 회사가 해당 서비스를 제공받는 회원에게 통지합니다.\n </h6>\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회사는 전항에 따른 서비스 변경에 대한 동의를 거절한 회원에 대하여는 해당 서비스의 제공을 중지하거나 회원 이용 계약을 해지할 수\n 있습니다. 이 때 회원 역시 회원 계약을 종료할 권한을 가집니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 12조(회원에 대한 서비스 이용 제한 등)</h3>\n\n <h5>1.</h5>\n <h6>회사는 다음 각 호에 해당하는 경우 회원에 대하여 서비스 제공을 제한하거나 중지할 수 있습니다.</h6>\n <div className='info'>\n <p className='title'>\n 폭언, 폭행, 그 밖에 적정 범위를 벗어난 신체적ㆍ정신적 고통을 유발하는 행위를 통해, 회원이 서비스의 정상적인 운영을 방해한 경우\n </p>\n <p className='title'>\n 법정 감염병 환자, 법정 감염병 의사 환자, 감염병 병원체보유자 등, 환자가 각종 매개체를 통해 메이트에게 질병을 전염 및 유발할\n 것으로 우려되는 경우\n </p>\n <p className='title'>회원이 타인의 명의를 도용하여 회원가입을 한 경우</p>\n <p className='title'>\n 이용 요금을 지급하지 아니하거나 이용 요금을 결제함에 있어서 타인 명의 결제 도용, 전화번호 도용 등 불법적인 방법을 사용한 경우\n </p>\n <p className='title'>\n 불법프로그램의 제공 및 운영 방해, 정보통신망법을 위반한 불법 통신 및 해킹, 악성프로그램의 배포, 접속 권한 초과 행위 등과 같이\n 회원이 관련 법령을 위반한 경우\n </p>\n <p className='title'>회원이 계속해서 1년 이상 로그인하지 않는 경우</p>\n <p className='title'>\n 서비스 수혜자의 상태가 다음에 해당하는 경우:\n <br />\n <p style={{ paddingLeft: '20px' }}>· 거동이 불가능하거나 현저히 떨어지는 경우</p>\n <p style={{ paddingLeft: '20px' }}>· 인지장애가 의심 또는 확인된 경우 (경중 불문, 서비스 제공 불가)</p>\n <p style={{ paddingLeft: '20px' }}>\n · 위 사실을 은폐하거나 허위로 신청한 경우: 서비스 즉시 중단 및 법적 조치 대상이 될 수 있음\n </p>\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회사는 사안에 따라 사전 또는 사후 통지하며, 보호자의 진술, 병원 소견, 메이트의 현장 판단 등을 토대로 제한 여부를 결정할 수 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 서비스 수혜자 또는 보호자의 사전 고지 의무 위반 여부를 확인하기 위해 필요한 경우 의학적 소견서나 병원 진료 정보를 요청할 수\n 있으며, 협조하지 않을 경우 서비스 제공이 제한될 수 있습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 13조(개인정보의 관리 및 변경)</h3>\n\n <h6>\n 이용자는 본 서비스의 이용을 위해 자신의 개인 정보를 성실히 관리해야 하며, 개인정보에 변동사항이 있을 경우 이를 변경해야 합니다. 본\n 서비스를 이용하면서 이용자의 개인정보 변경이 지연되거나 누락, 이용자에 의해 유출되어 발생하는 손해는 이용자의 책임으로 합니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 14조(정보의 제공 및 광고의 게재)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 회원이 서비스 이용 중 필요하다고 인정되는 다양한 정보를 서비스 내 공지사항 또는 서비스 화면, 메시지, 전자우편 등의 방법으로\n 회원에게 제공할 수 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>회사는 서비스의 운영과 관련하여 서비스 화면 등에 광고를 게재할 수 있습니다.</h6>\n </div>\n\n <div className='context-block'>\n <h3>제 15조(회사의 의무)</h3>\n\n <h5>1.</h5>\n <h6>회사는 관련법과 본 약관의 금지하는 행위를 하지 않으며, 계속적이고 안정적인 서비스를 제공하기 위하여 최선을 다하여 노력합니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>회사는 이용자의 개인정보 보호를 위한 보안 의무에 최선을 다합니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 이용자로부터 제기되는 의견이나 불만이 정당하고 객관적으로 인정될 경우에는 적절한 절차를 거쳐 즉시 처리하여야 합니다. 다만,\n 즉시 처리가 불가한 경우에는 이용자에게 그 사유와 처리 일정을 통보하여야 합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회사가 제공하는 서비스로 인하여 회원에게 손해가 발생한 경우 그러한 손해가 회사의 고의나 과실에 기해 발생한 경우에 한하여 회사에서\n 책임을 부담합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>회사는 정보통신망법, 통신비밀보호법, 전기통신사업법 등 서비스의 운영, 유지와 관련 있는 법령을 준수합니다.</h6>\n </div>\n\n <div className='context-block'>\n <h3>제 16조(회원의 의무)</h3>\n\n <h5>1.</h5>\n <h6>\n 회원은 최종 요금 등의 서비스 조건을 확인한 후 이용 요청을 하여야 하고, 제 8조 2항에 따라 서비스 종료 이후 추가 요금이 발생할 수\n 있다는 사실을 인지해야 합니다. 서비스 조건을 확인하지 않고 이용 요청을 하여 발생한 손실, 손해에 대한 책임은 회원 본인이 부담하여야\n 합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원은 본 약관 및 회사가 서비스와 관련하여 고지하는 내용을 준수하여야 하며, 약관 및 고지 내용을 위반하거나 이행하지 아니하여\n 발생하는 모든 손실, 손해에 대하여 책임을 부담합니다. 이용 요청과 관련하여 회원이 입력한 정보 및 그 정보와 관련하여 발생한 책임과\n 불이익은 전적으로 회원이 부담하여야 합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회원은 택시 혹은 승합자동차의 대여 및 이동 서비스 이용 시 반드시 본인 명의의 결제수단을 사용하여야 하며, 타인의 결제 수단을 임의로\n 사용해서는 안 됩니다. 타인의 결제수단을 임의로 사용함으로써 발생하는 회사, 결제 수단의 적법한 소유자, 전자결제대행 또는 이동서비스\n 제공자 등의 손실과 손해에 대한 모든 책임은 회원에게 있습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>\n 회원은 회사가 서비스를 안전하게 제공할 수 있도록 회사에 협조하여야 하며, 회사가 회원의 본 약관 위반행위를 발견하여 회원에게 해당\n 위반행위에 대하여 소명을 요청할 경우 회원은 회사의 요청에 적극 응하여야 합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 회원은 분쟁이 발생한 경우 분쟁의 해결을 위하여 성실히 임하여야 하며, 분쟁 해결에 대한 회원의 불성실로 인하여 이동 서비스 제공자 또는\n 회사에 손해가 발생한 경우 회원은 이에 대한 책임을 부담하여야 합니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 17조(회원의 금지 행위)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 서비스의 신뢰성을 제고하고 안전한 거래가 이뤄질 수 있도록 회원에게 특정한 행위를 금지하며 이를 금지 행위로 규정하고 있습니다.\n 금지 행위의 항목은 수시로 갱신될 수 있으며 항목 추가 및 변경 시 별도로 고지하지 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원이 위드메이트 서비스로 중개 받은 메이트 또는 기타 운송 수단 탑승 중 메이트, 차량, 혹은 제 3자에 대하여 손해를 입혔을 경우 회원은\n 이를 배상하여야 하며 구체적인 금액은 아래와 같습니다. 이에 관하여 제휴사의 기사 알선 포함 승합자동차 대여 서비스 이용약관에서 정한\n 사항이 있다면 그에 따릅니다.\n </h6>\n <div className='info'>\n <p className='title'>\n <span className='bold'>메이트를 폭행하거나 정신적인 피해를 끼친 경우 :</span>치료비 전액 배상 및 영업손실비\n </p>\n <p className='title'>\n <span className='bold'>차량을 오염시킨 경우: </span>30만원 이내에서 세차 실비 및 영업손실비\n </p>\n <p className='title'>\n <span className='bold'>차량 및 차내 기물 파손 비용:</span> 원상 복구 비용 및 영업손실비\n </p>\n <p className='title'>\n <span className='bold'>목적지 도착 후 하차 거부:</span>경찰서 등의 인계 시까지의 운임 및 영업손실비\n </p>\n <p className='title'>\n <span className='bold'>분실물 발견 후 배달 요청 :</span>배차 중지 후 분실물 배달을 위한 영업손실비\n </p>\n </div>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>\n 회사는 회원이 본 조의 금지행위를 하는 경우 서비스 이용을 제한할 수 있으며, 이 경우 발생하는 모든 책임은 회원이 부담합니다. 회사는\n 필요한 경우 회원의 금지 행위 사실을 관련 정부기관 또는 사법기관에 통지할 수 있습니다.\n </h6>\n </div>\n\n <div className='context-block'>\n <h3>제 18조(책임 제한)</h3>\n\n <h5>1.</h5>\n <h6>\n 회사는 회원과 메이트 간, 회원과 운송사업자 간 거래를 중개하는 시스템의 운영 관리를 제공하며, 회원, 메이트, 운송사업자를 대리하지\n 않습니다. 회원과 메이트, 그리고 운송사업자 사이에 성립된 거래에 따라 회원 또는 메이트, 혹은 운송사업자가 제공한 정보에 대한 책임은\n 회원과 메이트, 그리고 운송사업자가 부담합니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>\n 회원이 자신의 개인 정보 및 계정 등을 타인에게 제공하거나, 회원의 관리 소홀로 유출됨으로써 발생하는 피해에 대해서 책임을 부담하지\n 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>3.</h5>\n <h6>회사는 회원의 귀책 사유로 인한 서비스 이용의 장애에 대하여는 책임을 지지 않습니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>4.</h5>\n <h6>회사는 회원이 서비스와 관련하여 게재한 정보, 자료, 사실의 신뢰도, 정확성 등의 내용에 관하여는 책임을 부담하지 않습니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>5.</h5>\n <h6>\n 회사는 서비스간 회원의 귀책 사유로 발생한 메이트와의 갈등(물리적 폭행, 언어 폭력, 부적절한 신체 접촉 등)으로 인해 발생한 피해에\n 대해서 책임을 부담하지 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>6.</h5>\n <h6>\n 회사는 관계 법령의 변경, 천재지변, 디도스(DDOS)공격, IDC 장애, 기간통신사업자의 회선 장애 또는 이에 준하는 불가항력으로 인하여\n 서비스를 제공할 수 없는 경우에는 서비스 제공에 관한 책임이 면제됩니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>7.</h5>\n <h6>\n 회사는 회원의 서비스 이용과 직접적으로 관련이 없는 분쟁에 관여하지 않으며, 회원과 운전용역 제공자 및 운송사업자 또는 회원과 제3자\n 간의 분쟁을 포함하여 도난, 폭행, 성범죄 등에 대해서는 회사의 과실이 없는 한 책임을 부담하지 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>8.</h5>\n <h6>\n 회사는 스마트기기 환경으로 인하여 발생하는 제반 문제 또는 회사의 귀책 사유가 없는 네트워크 환경으로 인하여 발생하는 문제에 대해서\n 책임을 지지 않습니다.\n </h6>\n\n <h5 style={{ marginTop: '48px' }}>9.</h5>\n <h6>\n 회사는 메이트의 현장 상황 판단(서비스 거부 포함)에 따라 불가피하게 서비스가 중단된 경우, 고의 또는 중대한 과실이 없는 한 책임을\n 부담하지 않습니다.\n </h6>\n </div>\n\n <div className='context-block' style={{ marginBottom: '100px' }}>\n <h3>제 19조(분쟁의 해결)</h3>\n\n <h5>1.</h5>\n <h6>본 약관에 명시되지 않은 사항이 관계 법령에 규정되어 있을 경우에는 해당 규정에 따릅니다.</h6>\n\n <h5 style={{ marginTop: '48px' }}>2.</h5>\n <h6>서비스 이용으로 발생한 분쟁에 대해 소송이 제기되는 경우 법령에 정한 절차에 따른 법원을 관할 법원으로 합니다.</h6>\n </div>\n\n <div className='context-block'>\n <div className='privacy-justify'>\n <p className='version'>개인정보 처리방법 버전 번호 : v.1.2</p>\n <p className='date'>제정일자 : 2021년 12월 20일</p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\nexport default TermsComponent;\n","import React from 'react';\nimport { connect } from 'react-redux';\n\n// component\nimport TermsStyledContainer from './terms.styled';\nimport Terms from './terms';\n\nclass TermsContainer extends React.PureComponent {\n render() {\n return (\n <TermsStyledContainer component={this.props.isComponent || undefined}>\n <Terms {...this.props} />\n </TermsStyledContainer>\n );\n }\n}\n\nconst mapStateToProps = ({}) => ({});\nconst mapDispatchToProps = dispatch => ({});\nexport default connect(mapStateToProps, mapDispatchToProps)(TermsContainer);\n","import React, { useState } from \"react\";\nimport styled from 'styled-components';\nimport { message, Button } from 'antd';\nimport { DivisionLine } from '../../Components/Common/input';\nimport { Checkbox } from 'antd';\n\nconst DepartmentComponent = () => {\n const department_data = [\n { id: 1, name: \"가정의학과\" },\n { id: 2, name: \"내과\" },\n { id: 3, name: \"마취통증의학과\" },\n { id: 4, name: \"방사선종양학과\" },\n { id: 5, name: \"병리과\" },\n { id: 6, name: \"산부인과\" },\n { id: 7, name: \"성형외과\" },\n { id: 8, name: \"신경과\" },\n { id: 9, name: \"신경외과\" },\n { id: 9, name: \"안과\" },\n { id: 9, name: \"영상의학과\" },\n { id: 9, name: \"외과\" },\n { id: 9, name: \"응급의학과\" },\n { id: 9, name: \"이비인후과\" },\n { id: 9, name: \"임상약리학과\" },\n { id: 9, name: \"재할의학과\" },\n { id: 9, name: \"정신건강의학과\" },\n { id: 9, name: \"정형외과\" },\n { id: 9, name: \"중환자의학과\" },\n { id: 9, name: \"진단검사의학과\" },\n { id: 9, name: \"피부과\" },\n { id: 9, name: \"핵의학과\" },\n { id: 9, name: \"흉부외과\" },\n ];\n\n const [isChecked, setIsChecked] = useState(false); //체크 여부\n const [checkedItems, setCheckedItems] = useState(new Set());//체크된 요소들\n\n const checkHandler = ({ target }) => {\n setIsChecked(!isChecked);\n checkedItemHandler(target.parentNode, target.value, target.checked);\n };\n\n const checkedItemHandler = (box, id, isChecked) => {\n if (isChecked) { //체크 되었을때\n checkedItems.add(id); //체크시 삽입\n setCheckedItems(checkedItems); //체크 요소 넣어주기\n\n } else if (!isChecked && checkedItems.has(id)) { //체크가 안되었고, id가 있을때(클릭 2번시)\n checkedItems.delete(id); //체크 두번시 삭제\n setCheckedItems(checkedItems);\n }\n\n console.log(checkedItems);\n return checkedItems;\n };\n\n return (\n <div className='department-container'>\n <div className='inner-container' style={{ display: 'flex', justifyContent: 'center' }}>\n <div className='department-form' style={{ border: '1px solid lightgray', borderRadius: '7px', width: '900px', marginTop: '40px', paddingTop: '80px', backgroundColor: 'white' }}>\n <div className='department-title'>\n <h1 style={{ textAlign: 'center' }}>진료(치료) 받는 과 선택</h1>\n </div>\n <DivisionLine /><DivisionLine />\n <div className=\"contStyle\" style={{ padding: '20px' }}>\n {department_data.map((item) => (\n <label key={item.id} className=\"innerBox\" style={{ display: 'flex', justifyContent: 'center' }}>\n <div style={{ display: 'flex' }}>\n <Checkbox\n value={item.name}\n onChange={(e) => checkHandler(e)}\n style={{ fontSize: '20px' }}\n >\n {item.name}\n </Checkbox>\n </div>\n </label>\n ))}\n </div>\n <DivisionLine />\n <hr style={{ textAlgn: 'center', width: '840px', color: 'gray' }} />\n\n <div className='form' style={{ textAlign: 'center' }}>\n <Button type='primary' style={{ borderRadius: '4px', marginTop: '20px', backgroundColor: 'gray' }}\n onClick={() => {\n this.props.history.push('/user/mypage/profile');\n }}\n >\n 등록\n </Button>\n \n <Button type='primary' style={{ borderRadius: '4px', marginTop: '20px' }}\n onClick={() => {\n this.props.history.push('/');\n }}\n >\n 취소\n </Button>\n </div>\n <DivisionLine />\n </div>\n </div>\n </div>\n );\n};\n\nexport default DepartmentComponent;\n\nconst Departments = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n line-height: 44px;\n\n > span {\n display: inline-block;\n cursor: pointer;\n\n flex: 1;\n height: 100%;\n border-radius: 4px;\n border: 1px solid #e9e9e9;\n\n text-align: center;\n color: rgba(0, 0, 0, 0.7);\n font-size: 14px;\n letter-spacing: -0.2px;\n\n margin-right: 8px;\n }\n\n > span.active {\n background-color: #3bc1ff;\n color: white;\n }\n\n > span:last-child {\n margin-right: 0px;\n }\n`;","import React from 'react';\nimport { NavLink } from 'react-router-dom';\nimport { Popover } from 'antd';\n// lib\nimport { USER } from '../../../Lib/variables';\n\nexport default class NavComponent extends React.PureComponent {\n state = {\n menu: false,\n };\n\n onClose = () => {\n const { pathname } = this.props.location;\n if (pathname === '/' && window.innerWidth <= 768) {\n const main = document.querySelector('.order-menu-wrapper');\n main.style.display = 'none';\n }\n };\n\n componentDidUpdate = prevProps => {\n const { pathname: prevPath } = prevProps.location;\n const { pathname } = this.props.location;\n if (prevPath !== pathname) {\n this.setState({ menu: false });\n }\n };\n\n // payment test\n onMobileMenuHandler = () => {\n this.setState({ menu: !this.state.menu });\n };\n\n render() {\n // const { id, name, userType, ticket } = this.props.auth;\n // const { name, userType } = this.props.auth;\n const id = localStorage.getItem('id');\n const userType = localStorage.getItem('userType');\n\n return (\n <div className='nav-container'>\n <div className='nav-inner'>\n <div className='logo'>\n <NavLink exact to='/' activeClassName='active' lang='en' onClick={this.onClose}>\n <img src='https://s3.ap-northeast-2.amazonaws.com/withmate.photo/withmate_new_logo.png' alt='logo' />\n </NavLink>\n </div>\n <div className='nav'>\n <div className='mobile-menu'>\n <span onClick={this.onMobileMenuHandler}>\n <i className='fas fa-bars' />\n </span>\n </div>\n <ul className={`nav-items ${this.state.menu ? 'active' : ''}`}>\n <li className='item'>\n <NavLink lang='kr' exact to='/' className='nav-item' activeClassName='active'>\n 메인\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item'>\n <NavLink lang='kr' exact to='/nemt/service' className='nav-item' activeClassName='active'>\n 위드메이트 소개\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item'>\n <NavLink lang='en' exact to='/review/list' className='nav-item' activeClassName='active'>\n 이용후기\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item'>\n <NavLink lang='en' exact to='/newsEvent/list' className='nav-item' activeClassName='active'>\n 소식 보기\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item'>\n <NavLink lang='en' exact to='/faq' className='nav-item' activeClassName='active'>\n FAQ\n <span className='underline'></span>\n </NavLink>\n </li>\n {!id ? (\n <>\n <li className='item item-login'>\n <NavLink lang='kr' exact to='/user/login' className='nav-item block login'>\n 로그인\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item item-register'>\n <NavLink lang='kr' exact to='/user/mainRegister' className='nav-item block register'>\n 회원가입\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item item-apply'>\n <NavLink lang='kr' exact to='/mate/apply' className='nav-item block apply'>\n 메이트 지원\n <span className='underline'></span>\n </NavLink>\n </li>\n </>\n ) : (\n <>\n <li className='item item-name'>\n <NavLink\n lang='kr'\n to={userType === USER ? '/user/mypage' : '/user/mate/mypage'}\n className='nav-item'\n activeClassName='active'\n >\n 마이페이지\n <span className='underline'></span>\n </NavLink>\n </li>\n\n <li className='item item-logout'>\n <NavLink lang='kr' exact to='/user/logout' className='nav-item' activeClassName='active'>\n 로그아웃\n <span className='underline'></span>\n </NavLink>\n </li>\n </>\n )}\n </ul>\n </div>\n </div>\n </div>\n );\n }\n}\n","import styled from 'styled-components';\nimport { borderColor, mainBoldColor, mainColor, fontSize, sizeHandler } from '../../../theme';\nconst NavStyledContainer = styled.div`\n .nav-container {\n width: 100vw;\n height: 56px;\n background-color: white;\n border-bottom: 1px solid ${borderColor};\n position: fixed;\n top: 0px;\n left: 0px;\n z-index: 10;\n\n .nav-inner {\n display: flex;\n flex-direction: row;\n max-width: 1120px;\n height: 100%;\n margin: 0 auto;\n position: relative;\n\n .logo {\n width: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n\n a {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n img {\n width: 80%;\n }\n }\n\n .nav {\n flex: 1;\n padding-right: 12px;\n\n .mobile-menu {\n display: none;\n }\n\n ul.nav-items {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n padding: 0px;\n padding-left: 32px;\n\n li.item {\n padding-left: 13px;\n padding-right: 13px;\n position: relative;\n \n > a {\n font-size: 13px;\n line-height: 21px;\n }\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.item-apply {\n padding-left: 0px;\n padding-right: 0px;\n\n margin-left: 12px;\n\n .underline {\n bottom: -12px;\n }\n }\n\n &.item-login {\n padding-left: 0px;\n padding-right: 0px;\n margin-left: 12px;\n\n .underline {\n bottom: -12px;\n }\n }\n\n &.item-register {\n padding-left: 0px;\n padding-right: 0px;\n\n margin-left: 12px;\n\n .underline {\n bottom: -12px;\n }\n }\n\n &.item-logout {\n border-left: 1px solid #e6e6e6;\n }\n\n &.item-name {\n border-left: 1px solid #e6e6e6;\n border-right: 1px solid #e6e6e6;\n }\n\n @media (max-width: 1080px) {\n padding-left: 8px;\n padding-right: 8px;\n\n > a {\n font-size: 13px;\n line-height: 18px;\n }\n }\n\n @media (max-width: 900px) {\n padding-left: 6px;\n padding-right: 6px;\n\n > a {\n font-size: 12px;\n line-height: 18px;\n }\n }\n }\n\n .tickets {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.18px;\n color: #606060;\n }\n\n .nav-item {\n font-weight: bold;\n font-size: 12px;\n color: #606060;\n\n &.block {\n padding: 9.25px 30px;\n \n line-height: 18px;\n text-align: center;\n border: 1px solid ${mainColor}\n font-weight: bold;\n border-radius: 2px;\n }\n\n &.login, &.register {\n color: ${mainColor};\n }\n\n &.apply {\n background-color: ${mainColor};\n color: white;\n }\n\n @media (max-width: 1080px) {\n &.block {\n padding: 8px 24px;\n }\n }\n\n @media (max-width: 900px) {\n &.block {\n padding: 6px 18px;\n }\n }\n }\n\n .active {\n color: ${mainColor};\n font-weight: bold;\n\n .underline {\n display: inline-block;\n position: absolute;\n bottom: -18.5px;\n left: 0px;\n width: 100%;\n height: 3px;\n background-color: ${mainColor};\n }\n }\n }\n\n \n\n @media (max-width: 768px) {\n padding-right: 0px;\n \n .mobile-menu {\n height: 100%;\n width: 100%;\n display: block;\n position: relative;\n\n span {\n position: absolute;\n right: 32px;\n top: 16px;\n cursor: pointer;\n color: ${mainColor};\n\n svg {\n font-size: ${fontSize.b20};\n }\n }\n }\n\n ul.nav-items {\n display: none;\n\n li.item {\n \n \n &.item-logout {\n border-left: 0px;\n }\n \n &.item-name {\n border-left: 0px;\n border-right: 0px;\n }\n }\n }\n\n ul.nav-items.active {\n position: absolute;\n background-color: white;\n z-index: 9999;\n top: 56px;\n left: 0px;\n width: 100%;\n height: auto;\n display: block;\n padding: 0px;\n padding: 0px 12px;\n\n li.item {\n width: 100%;\n min-height: 40px;\n margin: 0;\n border-bottom: 1px solid ${borderColor};\n background-color: white;\n color: #606060;\n\n &.item-login {\n margin-left: 0px;\n }\n \n &.item-register {\n margin-left: 0px;\n }\n\n a {\n display: inline-block;\n width: 100%;\n text-align: center;\n line-height: 40px;\n // color: #606060;\n }\n }\n\n .nav-item {\n &.block {\n margin: 6px 0px;\n line-height: 32px;\n }\n }\n\n .active .underline {\n height: 0px;\n }\n }\n }\n }\n }\n }\n`;\n\nexport default NavStyledContainer;\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\n\n// component\nimport Nav from './nav';\n\n// styles\nimport NavStyledContainer from './nav.styled';\n\n// actions\n// import {} from '../../Redux/Modules/';\n\nclass NavContainer extends React.PureComponent {\n render() {\n return (\n <NavStyledContainer>\n <Nav {...this.props} />\n </NavStyledContainer>\n );\n }\n}\n\nexport default withRouter(NavContainer);\n","import React from 'react';\nimport { NavLink } from 'react-router-dom';\nimport { Popover } from 'antd';\n// lib\nimport { USER } from '../../../Lib/variables';\n\nexport default class NavComponent extends React.PureComponent {\n state = {\n menu: false,\n };\n\n onClose = () => {\n const { pathname } = this.props.location;\n if (pathname === '/' && window.innerWidth <= 768) {\n const main = document.querySelector('.order-menu-wrapper');\n main.style.display = 'none';\n }\n };\n\n componentDidUpdate = prevProps => {\n const { pathname: prevPath } = prevProps.location;\n const { pathname } = this.props.location;\n if (prevPath !== pathname) {\n this.setState({ menu: false });\n }\n };\n\n // payment test\n onMobileMenuHandler = () => {\n this.setState({ menu: !this.state.menu });\n };\n\n render() {\n // const { id, name, userType, ticket } = this.props.auth;\n // const { name, userType } = this.props.auth;\n const id = localStorage.getItem('id');\n const userType = localStorage.getItem('userType');\n\n return (\n <div className='nav-container'>\n <div className='nav-inner'>\n <div className='logo'>\n <NavLink exact to='/360F' activeClassName='active' lang='en' onClick={this.onClose}>\n <img src='/assets/images/collaboration/withmate_metlife_main.png' style={{ width: '240px' }} alt='logo' />\n </NavLink>\n </div>\n <div className='nav'>\n <div className='mobile-menu'>\n <span onClick={this.onMobileMenuHandler}>\n <i className='fas fa-bars' />\n </span>\n </div>\n <ul className={`nav-items ${this.state.menu ? 'active' : ''}`}>\n <li className='item'>\n <NavLink lang='kr' exact to='/360F' className='nav-item' activeClassName='active'>\n 메인\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item'>\n <NavLink lang='kr' exact to='/360F/nemt/service' className='nav-item' activeClassName='active'>\n 위드메이트 소개\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item'>\n <NavLink lang='en' exact to='/360F/review/list' className='nav-item' activeClassName='active'>\n 이용후기\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item'>\n <NavLink lang='en' exact to='/360F/newsEvent/list' className='nav-item' activeClassName='active'>\n 소식 보기\n <span className='underline'></span>\n </NavLink>\n </li>\n <li className='item'>\n <NavLink lang='en' exact to='/360F/faq' className='nav-item' activeClassName='active'>\n FAQ\n <span className='underline'></span>\n </NavLink>\n </li>\n </ul>\n </div>\n </div>\n </div>\n );\n }\n}\n","import styled from 'styled-components';\nimport { borderColor, mainBoldColor, mainColor, fontSize, sizeHandler } from '../../../theme';\nconst NavStyledContainer = styled.div`\n .nav-container {\n width: 100vw;\n height: 56px;\n background-color: white;\n border-bottom: 1px solid ${borderColor};\n position: fixed;\n top: 0px;\n left: 0px;\n z-index: 10;\n\n .nav-inner {\n display: flex;\n flex-direction: row;\n max-width: 1120px;\n height: 100%;\n margin: 0 auto;\n position: relative;\n\n .logo {\n width: auto;\n display: flex;\n align-items: center;\n justify-content: center;\n\n a {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n img {\n width: 80%;\n }\n }\n\n .nav {\n flex: 1;\n padding-right: 12px;\n\n .mobile-menu {\n display: none;\n }\n\n ul.nav-items {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-end;\n padding: 0px;\n padding-left: 32px;\n\n li.item {\n padding-left: 13px;\n padding-right: 13px;\n position: relative;\n \n > a {\n font-size: 13px;\n line-height: 21px;\n }\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n &.item-apply {\n padding-left: 0px;\n padding-right: 0px;\n\n margin-left: 12px;\n\n .underline {\n bottom: -12px;\n }\n }\n\n &.item-login {\n padding-left: 0px;\n padding-right: 0px;\n margin-left: 12px;\n\n .underline {\n bottom: -12px;\n }\n }\n\n &.item-register {\n padding-left: 0px;\n padding-right: 0px;\n\n margin-left: 12px;\n\n .underline {\n bottom: -12px;\n }\n }\n\n &.item-logout {\n border-left: 1px solid #e6e6e6;\n }\n\n &.item-name {\n border-left: 1px solid #e6e6e6;\n border-right: 1px solid #e6e6e6;\n }\n\n @media (max-width: 1080px) {\n padding-left: 8px;\n padding-right: 8px;\n\n > a {\n font-size: 13px;\n line-height: 18px;\n }\n }\n\n @media (max-width: 900px) {\n padding-left: 6px;\n padding-right: 6px;\n\n > a {\n font-size: 12px;\n line-height: 18px;\n }\n }\n }\n\n .tickets {\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n letter-spacing: -0.18px;\n color: #606060;\n }\n\n .nav-item {\n font-weight: bold;\n font-size: 12px;\n color: #606060;\n\n &.block {\n padding: 9.25px 30px;\n \n line-height: 18px;\n text-align: center;\n border: 1px solid ${mainColor}\n font-weight: bold;\n border-radius: 2px;\n }\n\n &.login, &.register {\n color: ${mainColor};\n }\n\n &.apply {\n background-color: ${mainColor};\n color: white;\n }\n\n @media (max-width: 1080px) {\n &.block {\n padding: 8px 24px;\n }\n }\n\n @media (max-width: 900px) {\n &.block {\n padding: 6px 18px;\n }\n }\n }\n\n .active {\n color: ${mainColor};\n font-weight: bold;\n\n .underline {\n display: inline-block;\n position: absolute;\n bottom: -18.5px;\n left: 0px;\n width: 100%;\n height: 3px;\n background-color: ${mainColor};\n }\n }\n }\n\n \n\n @media (max-width: 768px) {\n padding-right: 0px;\n \n .mobile-menu {\n height: 100%;\n width: 100%;\n display: block;\n position: relative;\n\n span {\n position: absolute;\n right: 32px;\n top: 16px;\n cursor: pointer;\n color: ${mainColor};\n\n svg {\n font-size: ${fontSize.b20};\n }\n }\n }\n\n ul.nav-items {\n display: none;\n\n li.item {\n \n \n &.item-logout {\n border-left: 0px;\n }\n \n &.item-name {\n border-left: 0px;\n border-right: 0px;\n }\n }\n }\n\n ul.nav-items.active {\n position: absolute;\n background-color: white;\n z-index: 9999;\n top: 56px;\n left: 0px;\n width: 100%;\n height: auto;\n display: block;\n padding: 0px;\n padding: 0px 12px;\n\n li.item {\n width: 100%;\n min-height: 40px;\n margin: 0;\n border-bottom: 1px solid ${borderColor};\n background-color: white;\n color: #606060;\n\n &.item-login {\n margin-left: 0px;\n }\n \n &.item-register {\n margin-left: 0px;\n }\n\n a {\n display: inline-block;\n width: 100%;\n text-align: center;\n line-height: 40px;\n // color: #606060;\n }\n }\n\n .nav-item {\n &.block {\n margin: 6px 0px;\n line-height: 32px;\n }\n }\n\n .active .underline {\n height: 0px;\n }\n }\n }\n }\n }\n }\n`;\n\nexport default NavStyledContainer;\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\n\n// component\nimport Nav from './nav';\n\n// styles\nimport NavStyledContainer from './nav.styled';\n\n// actions\n// import {} from '../../Redux/Modules/';\n\nclass NavContainer extends React.PureComponent {\n render() {\n return (\n <NavStyledContainer>\n <Nav {...this.props} />\n </NavStyledContainer>\n );\n }\n}\n\nexport default withRouter(NavContainer);\n","import React from 'react';\nimport { NavLink } from 'react-router-dom';\nimport { MobileBr } from '../../../Pages/Guide/guide.styled';\n\nexport default class FooterComponent extends React.PureComponent {\n render() {\n const { location } = this.props.history;\n const { pathname } = this.props.location;\n const darkMode =\n pathname === '/' || pathname === '/user/mate/pending' || pathname === '/faq' || pathname === '/company' || pathname.indexOf('/user') !== -1;\n\n return (\n <div className={`footer-container ${darkMode ? 'darkmode' : ''}`}>\n <div className='inner-container'>\n <div className='default-info-wrapper'>\n <div className='right'>\n <p>2019 Withmate Org, All rights reserved.</p>\n </div>\n <div className='policy'>\n {location.pathname.startsWith('/360F') ? (\n <>\n <NavLink to='/360F/policy/terms'>이용약관</NavLink>\n <NavLink to='/360F/policy/privacy'>개인정보 처리방침</NavLink>\n </>\n ) : (\n <>\n <NavLink to='/policy/terms'>이용약관</NavLink>\n <NavLink to='/policy/privacy'>개인정보 처리방침</NavLink>\n </>\n )}\n {/* <a\n onClick={() => {\n window.open('https://www.notion.so/FAQ-cfe01db37c67472086b414a044ed6370', '_blank');\n }}\n >\n 메이트 매뉴얼\n </a> */}\n <MobileBr />\n <MobileBr />\n <a style={{ marginLeft: '70px' }}></a>\n <a href='https://blog.naver.com/PostList.naver?blogId=pond909' name='naver-blog' target='_blank' rel='noreferrer noopener'>\n <img\n style={{ border: '0px currentColor', width: '30px', verticalAlign: 'top' }}\n alt='네이버 블로그'\n src='/assets/images/icons/naverblog_icon.png'\n loading='lazy'\n />\n </a>\n <a\n href='https://www.facebook.com/%EC%9C%84%EB%93%9C%EB%A9%94%EC%9D%B4%ED%8A%B8-%EB%B3%91%EC%9B%90%EB%8F%99%ED%96%89%EC%84%9C%EB%B9%84%EC%8A%A4-103107278930429'\n name='facebook'\n target='_blank'\n rel='noreferrer noopener'\n style={{ marginLeft: '-15px' }}\n >\n <img\n style={{ border: '0px currentColor', width: '30px', verticalAlign: 'top' }}\n alt='페이스북'\n src='/assets/images/icons/facebook_icon.png'\n loading='lazy'\n />\n </a>\n <a\n href='https://www.instagram.com/withmate_official'\n name='naver-blog'\n target='_blank'\n rel='noreferrer noopener'\n style={{ marginLeft: '-15px' }}\n >\n <img\n style={{ border: '0px currentColor', width: '30px', verticalAlign: 'top' }}\n alt='인스타그램'\n src='/assets/images/icons/instagram_icon.png'\n loading='lazy'\n />\n </a>\n </div>\n </div>\n\n <div className='footer-info'>\n <div className='info-block'>\n <div className='row-wrapper'>\n <p className='infoTitle'>회사 정보</p>\n <p className='content'></p>\n </div>\n <div className='row-wrapper'>\n <p className='title'>법인명</p>\n <p className='content'>㈜블루카멜</p>\n </div>\n <div className='row-wrapper'>\n <p className='title'>대표자</p>\n <p className='content'>지승배</p>\n </div>\n <div className='row-wrapper'>\n <p className='title'>사업자 등록번호</p>\n <p className='content'>153-88-00622</p>\n </div>\n <div className='row-wrapper'>\n <p className='title'>통신판매업 신고번호</p>\n <p className='content'>2021-서울 서대문-2081</p>\n </div>\n </div>\n <div className='info-block'>\n <div className='row-wrapper'>\n <p className='contactTitle'>연락처</p>\n <p className='content'></p>\n </div>\n <div className='row-wrapper address'>\n <p className='title'>주소</p>\n <p className='content'>서울시 서대문구 경기대로 11길 26-6 우진빌딩 비동 203호</p>\n </div>\n <div className='row-wrapper'>\n <p className='title'>전화번호</p>\n <p className='content'>070-4300-9075</p>\n </div>\n <div className='row-wrapper'>\n <p className='title'>이메일</p>\n <p className='content'>ceo@withmate.kr</p>\n </div>\n <div className='row-wrapper2' />\n </div>\n </div>\n </div>\n </div>\n );\n }\n}\n","import styled from 'styled-components';\nimport { fontSize, mainColor, bgDarkColor, sizeHandler } from '../../../theme';\n\nconst FooterStyledContainer = styled.div`\n .footer-container {\n background-color: #f9f9f9;\n border-top: 1px solid #e6e6e6;\n\n .inner-container {\n padding-top: 52px;\n padding-bottom: 52px;\n\n .default-info-wrapper {\n display: flex;\n\n .right {\n flex: 1;\n\n p {\n font-size: ${sizeHandler(16)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n }\n\n .policy {\n flex: 1;\n text-align: center;\n\n a {\n font-size: ${sizeHandler(12)};\n font-weight: bold;\n letter-spacing: -0.26px;\n color: rgba(0, 0, 0, 0.7);\n text-decoration: underline;\n margin-right: 32px;\n }\n }\n }\n\n .footer-info {\n display: flex;\n align-items: center;\n\n .info-block {\n margin-top: 40px;\n flex: 1;\n margin-right: 20px;\n\n .row-wrapper2 {\n height: 42px;\n line-height: 42px;\n display: flex;\n borderColor: rgba(41 41 41);\n }\n\n .row-wrapper {\n height: 42px;\n line-height: 42px;\n border-bottom: 1px solid #e6e6e6;\n display: flex;\n\n &.address {\n height: 42px;\n }\n\n p {\n &.title {\n width: 140px;\n font-size: ${sizeHandler(10)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n &.infoTitle {\n width: 140px;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n &.contactTitle {\n width: 140px;\n font-size: ${sizeHandler(14)};\n font-weight: bold;\n color: rgba(0, 0, 0, 0.7);\n }\n\n &.content {\n flex: 1;\n font-size: ${sizeHandler(12)};\n letter-spacing: -0.26px;\n color: rgba(0, 0, 0, 0.7);\n }\n\n }\n }\n }\n }\n\n @media (max-width: 1120px) {\n padding-left: 16px;\n padding-right: 16px;\n }\n\n @media (max-width: 768px) {\n\t\t.info-block .row-wrapper {\n\t\t min-height: 42px;\n\t\t height: auto !important;\n\t\t line-height: 24px !important;\n\t\t}\n\n .default-info-wrapper {\n flex-direction: column;\n\n .right {\n margin-bottom: 12px;\n }\n\n .policy {\n text-align: left;\n\n a {\n font-size: ${sizeHandler(10)};\n }\n }\n }\n\n .footer-info {\n flex-direction: column;\n\n .info-block {\n margin-right: 0px;\n width: 100%;\n\n .row-wrapper {\n p {\n &.content {\n font-size: ${sizeHandler(10)};\n }\n }\n }\n }\n }\n }\n }\n }\n\n .footer-container.darkmode {\n background-color: #292929;\n\n .inner-container {\n .default-info-wrapper {\n .right {\n p {\n color: #e6e6e6;\n }\n }\n\n .policy {\n a {\n color: #e6e6e6;\n }\n }\n }\n\n .footer-info {\n .info-block {\n .row-wrapper {\n border-bottom: 1px solid #606060;\n\n p {\n &.title {\n color: #ffffff;\n }\n\n &.content {\n color: #a7a7a7;\n }\n\n &.infoTitle {\n color: #ffffff;\n }\n\n &.contactTitle {\n color: #ffffff;\n }\n }\n }\n }\n }\n }\n }\n`;\n\nexport default FooterStyledContainer;\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\n\n// component\nimport Footer from './footer';\n\n// styles\nimport FooterStyledContainer from './footer.styled';\n\nclass FooterContainer extends React.PureComponent {\n render() {\n return (\n <FooterStyledContainer>\n <Footer {...this.props} />\n </FooterStyledContainer>\n );\n }\n}\n\nexport default withRouter(FooterContainer);\n","import React from 'react';\nimport { Switch, Route, withRouter } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport AOS from 'aos';\nimport { message, Spin } from 'antd';\nimport Modal from 'react-modal';\n\nimport ScrollTop from './Lib/utils';\nimport axios from './Lib/axios';\n\n// styles\nimport './Styles';\nimport 'aos/dist/aos.css';\n// antd-styles > set in /config-overrides.js\n// import 'antd/dist/antd.css';\n\n// components\nimport Home from './Pages/Home';\nimport Auth from './Pages/Auth';\n\n// 개인정보 수집 및 이용 동의 약관\nimport Privacy from './Pages/Policy/Privacy';\nimport Terms from './Pages/Policy/Terms';\nimport Marketing from './Pages/Policy/Marketing';\nimport EssentialNormal from './Pages/Policy/Essential/Normal';\nimport EssentialSensitive from './Pages/Policy/Essential/Sensitive';\nimport SelectiveNormal from './Pages/Policy/Selective/Normal';\nimport SelectiveSensitive from './Pages/Policy/Selective/Sensitive';\nimport Advertisement from './Pages/Policy/Advertisement';\n\nimport Company from './Pages/Company';\nimport FAQ from './Pages/Faq';\nimport Product from './Pages/Product';\n\nimport LongTermCare from './Pages/LongtermCare/longTermCare';\nimport Success from './Pages/Success/success';\nimport SManual from './Pages/Manual/Service/service';\nimport PManual from './Pages/Manual/Platform/platform';\nimport EduVideo from './Pages/Manual/MateEduVideo/eduVideo';\n\nimport NewsEvent from './Pages/NewsEvent';\n\nimport ReviewAdd from './Pages/Review/Add';\nimport ReviewList from './Pages/Review/List';\nimport ReviewMylist from './Pages/Review/MyList';\nimport MateReady from './Pages/Apply/Ready';\nimport MateApplyForm from './Pages/Apply/Form';\nimport MateApplyForm_v2 from './Pages/Apply/MateApplyForm';\nimport Nemt from './Pages/Guide';\nimport Guide from './Pages/Nemt';\nimport Reserve from './Pages/Reserve';\n\n// MetLife\nimport MetLife from './Pages/MetLife/MetLifeLanding';\n// import MetLifeReserve from './Pages/MetLife/Reserve';\nimport MetLifeNemt from './Pages/MetLife/MetLifeGuide';\nimport MetLifeReviewList from './Pages/MetLife/Review';\nimport MetLifeNewsEvent from './Pages/MetLife/NewsEvent';\nimport MetLifeFAQ from './Pages/MetLife/Faq';\nimport MetLifePrivacy from './Pages/MetLife/MetLifePolicy/Privacy';\nimport MetLifeTerms from './Pages/MetLife/MetLifePolicy/Terms';\n\nimport Department from './Pages/Big5Department/department';\n\nimport NotFound from './Pages/NotFound';\n// import Test from './Pages/Test';\n// import { FreeModal } from './Components/modal';\nimport { CardPopup, EventPopup, ManagerPopup, MetlifePopup, NoticePopup } from './Components/modal';\n\n// templates\nimport Nav from './Components/Templates/Nav';\nimport MetLifeNav from './Components/Templates/MetLifeNav';\nimport Footer from './Components/Templates/Footer';\n\nimport { editAuth, checkAuth } from './Reducer/Modules/auth';\nimport { MATE } from './Lib/variables';\nModal.setAppElement('#root');\n\nclass App extends React.PureComponent {\n componentDidMount = async () => {\n AOS.init();\n\n const id = localStorage.getItem('id');\n const userType = localStorage.getItem('userType');\n\n if (id && userType) {\n const { data } = await axios.get(`/v1/user/${id}/${userType}`);\n\n if (data && data._id) {\n this.props.editAuth({ type: 'id', value: data._id });\n this.props.editAuth({ type: 'userType', value: userType });\n this.props.editAuth({ type: 'name', value: data.name });\n this.props.editAuth({ type: 'photo', value: data.photo });\n this.props.editAuth({ type: 'contact', value: data.contact });\n this.props.checkAuth({ id, userType });\n\n localStorage.setItem('id', data._id);\n localStorage.setItem('photo', data.photo);\n localStorage.setItem('name', data.name);\n localStorage.setItem('contact', data.contact);\n }\n }\n };\n\n render() {\n const { location } = this.props.history;\n const { userType, allowed } = this.props.auth;\n\n if (userType === MATE && allowed === false) {\n if (location.pathname === '/user/mate/mypage' || location.pathname === '/user/mate/mypage/history' || location.pathname === '/')\n this.props.history.push('/user/mate/pending');\n }\n\n return (\n <div id='app-container' className='app-container'>\n {location.pathname.startsWith('/360F') ? <MetLifeNav {...this.props} /> : <Nav {...this.props} />}\n <ScrollTop>\n <div className='main-area'>\n <Switch>\n <Route exact path='/' component={Home} />\n <Route exact path='/main/step1' component={Home} />\n <Route exact path='/main/step2' component={Home} />\n <Route exact path='/main/step3' component={Home} />\n <Route exact path='/reserve' component={Reserve} />\n <Route path='/reserve/:step' component={Reserve} />\n <Route path='/user' component={Auth} />\n <Route path='/product' component={Product} />\n <Route exact path='/faq' component={FAQ} />\n <Route exact path='/company' component={Company} />\n\n <Route exact path='/policy/privacy' component={Privacy} />\n <Route exact path='/policy/terms' component={Terms} />\n <Route exact path='/policy/marketing' component={Marketing} />\n <Route exact path='/policy/essential/normal' component={EssentialNormal} />\n <Route exact path='/policy/essential/sensitive' component={EssentialSensitive} />\n <Route exact path='/policy/selective/normal' component={SelectiveNormal} />\n <Route exact path='/policy/selective/sensitive' component={SelectiveSensitive} />\n <Route exact path='/policy/advertisement' component={Advertisement} />\n\n <Route exact path='/mate/apply' component={MateReady} />\n <Route exact path='/apply/form' component={MateApplyForm_v2} />\n <Route exact path='/mateApply/form' component={MateApplyForm} />\n\n <Route exact path='/review/list' component={ReviewList} />\n <Route exact path='/review/own/usage/list' component={ReviewMylist} />\n <Route exact path='/review/edit/:reserveId' component={ReviewAdd} />\n\n <Route exact path='/longTermCare' component={LongTermCare} />\n <Route exact path='/success' component={Success} />\n <Route exact path='/service/manual' component={SManual} />\n <Route exact path='/platform/manual' component={PManual} />\n <Route exact path='/mateEducation/manual' component={EduVideo} />\n\n <Route path='/NewsEvent' component={NewsEvent} />\n\n {/* MetLife */}\n <Route exact path='/360F' component={MetLife} />\n <Route path='/360F/nemt/service' component={MetLifeNemt} />\n <Route exact path='/360F/review/list' component={MetLifeReviewList} />\n <Route path='/360F/NewsEvent' component={MetLifeNewsEvent} />\n <Route exact path='/360F/faq' component={MetLifeFAQ} />\n <Route exact path='/360F/policy/privacy' component={MetLifePrivacy} />\n <Route exact path='/360F/policy/terms' component={MetLifeTerms} />\n\n <Route exact path='/department' component={Department} />\n\n {/* <Route path='/service/guide' component={Guide} /> */}\n <Route path='/nemt/service' component={Nemt} />\n\n <Route component={NotFound} />\n </Switch>\n </div>\n </ScrollTop>\n <Footer />\n {this.props.app.loading ? (\n <div id='loading'>\n <Spin size='large' />\n </div>\n ) : null}\n {/* <FreeModal /> */}\n {/* <NoticePopup /> */}\n {/* <CardPopup /> */}\n {/* <ManagerPopup /> */}\n {/* {location.pathname === '/' ? <EventPopup /> : null} */}\n {location.pathname === '/360F' ? <MetlifePopup /> : null}\n </div>\n );\n }\n}\n\nconst mapStateToProps = ({ auth, app }) => ({\n auth,\n app,\n});\n\nconst mapDispatchToProps = dispatch => ({\n editAuth: ({ type, value }) => dispatch(editAuth({ type, value })),\n checkAuth: ({ id, userType }) => dispatch(checkAuth({ id, userType })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(App));\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import { createStore, combineReducers, applyMiddleware } from 'redux';\nimport thunk from 'redux-thunk';\n\n// reducers\nimport auth from './Modules/auth';\nimport app from './Modules/app';\nimport review from './Modules/review';\nimport newsEvent from './Modules/newsEvent';\n\nconst reducers = combineReducers({ app, auth, review, newsEvent });\nconst store = createStore(reducers, applyMiddleware(thunk));\nexport default store;\n","import 'react-app-polyfill/ie9';\nimport 'react-app-polyfill/stable';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport { Provider } from 'react-redux';\nimport store from './Reducer';\n\nReactDOM.render(\n <Provider store={store}>\n <BrowserRouter>\n <App />\n </BrowserRouter>\n </Provider>,\n document.getElementById('root'),\n);\n\nserviceWorker.unregister();\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAABBCAYAAACka/qvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAABGpSURBVHhe7Z0JXJTV+sd/MzAzyCIoYICmpmWJRdgipWaalmuh95/Sza3MrspVUa9LplGZe7graprX7X8NtyyvS4gL5orgggsaKYIpILsO6zAz9z3vnIGZYbZ3Fpjx834/n/PheZ533mGb55znPOc55xUoGcDDw2MVdnMkuUKB48m3EJeQghsZ2TiTeode0U/71gEY0f8NtG/1FN4LC0YjNzG9wsPj+NjckQoflSJmewKOJKWxDlRWUUWvmIerixAtA5pi3rhwdGz3NJ5nHIuHx9GxiSPlF0sx+MsNOHX5T1TLFdRqO4L8vbFv8Vi8HtyaWnh4HAurHWnOxgPYfjgJ6fceUot9aOLljmOxk/BCqwC4SUTUysPjGFjsSAfPXEP/yWuoZh7vS6rQ7kE+BqMUAUVlEBdK6RVt5BJXXGrRDKmVAuxt2RwXq7UdZ0HkQHwxsjfVeHgaHoscadD0ddj/eyrkCtO3NoISryorsOJhJgIzC6iVG+U+7vhXm+fwi6sn824q4uaPRvhbL0MidqUWHp6Gg5MjFT0uQ+vwWXhUWkEthvEXyLE/4yZaPiymFttQ2dgNEcEvIUkhhkAgwMWtMxHa7ml6lYenYRDSryZJy8jB32asN+lEAqZNK83DqVupNnciguRRBX5OTkEXVMJFqUCPyGWoklXTqzw8DYNZI9Jv526gT9QqqhmmlUiJk8kXIKqUUYudYUaksZ1exkEXL4z/sDuWTR5ML/Dw1C9mOZJX90mQlldSTT9DZSX4KuMOGheXUUv9oBQK8GZYGLLkLig4EoOmjT3oFR6e+sOoI+2Iv4CJS3ay60SGaCWU4fu8v9D19gNqqcUl0A/uUz+B+LUOEDFN4O5Gr+hBLkd1ehbkdx/g0ayVkF9Nh5JDyJbbyA2dQ17Bw2Mr4OkuoVYenvrBqCMF9Z+B7PxHVNPPzwW3EXY7h2oqBK6uEL3eAd4bvoFrh7bUaj7KajlKl25F5a/HUXX6MrWaZnVoOwjGjMC3/xgAF6HZ0z8eHqvR60jFj8vw2bxt2Hvc+Id4X8EddLqdTTVA6O0J35Ob4RrSjlpsQJUMsuu3UdhvHBQ5ptPnm15qi/UBzyArfim18PDYH73d9szYfSadyAtKLScS9wxD06MbbetEBLEIoo4vsO8NVxdqNMyItAyMzLmLu9mWrVnx8FhCnRHpfl4xWgyYSTX9RCgeY+G1NEgqZJC8/za85k+E6MXn6FX7opSW4WGbvlDkFVGLfqZ0DME70WPx+cCu1MLDYz/qjEhr95ykkmEm3s1knYjgvWpmvTkRQeDpzjquKaKys7Bn23+pxsNjX7RGJJLiJqluY3StLsXOi5chYEKup4pOQeDeiF6pX+SZD1D86VeoOn6BWvQgFCAreRfCOto43OTh0UFrRIo7kkIlw3wuZeYeAgHcwns0mBMRXFoFoUlcDCMYyc4plEjZ9DNVeHjsR82IRJILw77ehHIjVQleUOBW0ln4Jf8E0avB1NqwKLLzkBvUk2p1UboKESQzP4XOw2MJNd351oPnjDoRIUgph8BN7DBORBAG+kPc7VWq1UVQrcC11HSqPfnk5eXh8KFDbDt/7hy1alNcXFzTuFJWVmbxveYik8lqfocL58+zui4VFRUoLS1lW3U1t1pLuVxec29VFbcd3IZgRyQFEwK5vBlJTfrxgBI70q7h3a1z4DbwHWp1HCr+m4ii9ydQTZvitkEIOBCLJs+3oRbLmffddygqUmUMY5ZyW6siH4iZM2ZQTft+4gBR48dTzTQrV6+Gn78/1Wq5cf065s6Zw8rBwcGY/fXXrKzJ56NGsR8iwn/i4tiv5rJwwQKkXlaN8LOjoxHcoQMrq8m8e5dK3PD184Onpycra/4tQkJDMWHiRHh4aJd+rYuNxcnERIhEIowaPRpvd+9Or5gm8cQJrF+7lpUN/Y24wo5ImWYsdLYQytHGRQ5J787U4lhI3gljKyr00TgrF6XHk6hmHQ9zc/Hg/n22WYL6Xkvvd3SWxsRY1K4zHYAzwzrSV+v2s4ox+kuL4e/jDUEjI/VyDQip42sav45q2ghlcoiXbKeaY0JKmvyZEcZYE4ttf7LSxxERnJp6NDIEGU0saRXl5fQduPP48WO972moSZnX2xo2tCOb9TJzCqlJP+sV+Yh4uQO8N35DLQ4IE6Jmu4YCesoHSbo+oNJ0VtIUJOQg/wwC17CIhHYjhw2jWt37Tc07Vq1YgbQbN1jZVqGdNegL7UYz762PcmZuRfJarkwopq9D+JS5r0tX1eI5+fuaG9oR3N3dOXUyMmZOVSpVFWLbKrRjHcmVmR+Z2jZ+VJ6Pt2KjIer0ErU4Jo8nfw/p8m1U0yZQmUoly9F0JGuxZn5iK0fqxmFuQbiamoqiQlWnq8+RDEFGM4Knlxd+2LiRlQ3B1ZGswWZzJLIIa87ZC8JmTSBo6k01x8UtojeEvj5U00aeVVsb+KSQnp7OTp7VLS0tjV4xj1GffcapNW/Rgt5pPiTzpsYeYZUjICx6ZN5GPKGPF4R+TajmuIjeCDEYfpau5TYCOAPnzpxhM1DqtmfXLnrFPEpKSjg1OcdUM2HDDz9QScXpU6eoZD0kazdm3Dh2dDe3kdfbGmF6Vi4VjVPgWX9VDOUVVcgpKGFbtVxOreZjKD2vuGvbEUnfP8lY27Ld8RIeJITi0tRzNC5I6XxETSITkpXZYI7mSAgPnr1GReOszq5ARbn9tpFvOXAW7t2iIAgbB/e3oxDY7wu2iTqPZ21B/Wbg4s0s+moz8HKnQi2ymxlUenIYzMw9Ytevr2lRU6bQK45BQnw8lVCTELjGzLNWrVzJyk8KwuLHpo/WItxlXldsZhjIBXIC0Jkrt/Hpd9tQXml4lTm74BHCRi3CoOnr9SXl6iBq25JKtShz8qn05ODm5gYfH5+a5kUXNR0BUkFw+PBhVpZIJBjy0UesTEj/4w8qWQf5HknMHOynHTvMbskXjBQ6W4ig+7ilyhMp5v1Sf+sRij0Lx1DNegqKSxE04AvOx2k1koiQHx8DdyNPrCj9fjMeTdeuPLBFCpyEN/ZKf5vCVlk7Y2zbsgWHDh6kGvefUZOYxYtxMUX19x46fDj6DxiglTHcxHwv0hHo4pRZO/rVLH6/fJtKtmFo9CaLzqQjNYGRi3cYfdKFa3DdciBlVT0dE8bDclMjgxjKOAShPfPBVXPq99+p5PxwGpHIyabSE8uNjgTmUlhShqf6TrP46RVikSvmjf0AU4e9Sy3ayC7fRFGvzyEvKKEWFdauJWmOSDNmGt9JrAsJQ0gvraa+R6QVy5axVQDGICVQ+fm1IbA560RjIyPh5+dHNRUKhQLD/v53qgGbt21j50jXrl7F/LlzWRt570nMnE5dY6fGnBEp4cgR/JlufTGyf7Nm+L8PP6Sa5XByJEKvTi/gyKooqlnGzcwcvD5yocmz8syhNHGFXsdWPCxE8ZCpqExMphYVtnQka+HqSP/Zvh13bquigvFRUeycSBdjjhQ5ZoxdqrbnL1qE1q21H7lDKre3bt7Myh0Yh5kVHc3KpLphqMZc6aWQEMycNYtqKsxxJEeDU2hHSEi6aVE4psnQ6H/bxIkIX679hUrakNo7gU7mziVAu9d0Nj5m5lfEMUjT50SOxG80yUDo+W5t1ECiGs15ka2SDg2NYGJMnHLlzuNUNY9GEjG+GNEb0aP7UYt5FJaU4oNpa3H6im3nWsrzqpJ4XYo/mY3yLb9SjZk3vfgs/K/upZplPHjwADIje1g0t0ksYHpqY7TS6cUJZNRRzx0GDxmCHj0Nb1rUh7XJBltA9geNGDqUanVH3tQrV9i6QUNJB2Mj0v2//kJ2tu0rVAICAtDiacsfxiBYtuOocvIybqvhBCHTs2Tsm8s+ptIc5MxcqNOoRdzWgsxEfjYWQiE5vl8bXUcSvxEC37P2XRRV15QRLMl4/bhhA44mJLDy8JEj0bcft86KbFRTh54k5aw7d6kPyBaRqXQ9i8x/fvjxR1ZWQ7KXy5cswaVLl1h92PDh6DdgACsTjDnS7t27sZdj9YY5kFHzs9GjqcYdYe+w9lTkhoKJdVuFz0L3ccuwetcJFJRI61QhSMsqcDT5FqKW7oRr53/axYkIRy/cpJJxXB284NYWkAl98+bN2WbIiTS3RVjTyOinSw4zWqgXW0kYF0kdQhN1WY8asrbj7Aibels3iUu8+AcmxMRh4LT1mLZyL36Kv4D4czfYSoWxi3ag1z+XY2Uct9CRK6SUSBdlRSWUpdp7XESvWNZp8JhPSkoK7t27x8qtn3kGoR07srIuXo0bU0kVCurbTu5MCGTVcqWIGS2cGfIYTPI4TE3kf+WgaNBkyJJre81A+WWm6+CcX+EE6anVNERoZw4L58+nEneyMjNrMn/6tlFo/v6GUvRqYletwilawPpm586YEKXKBlubtSP3z/32W/Yr2RD57dy5dk/OsPuRvHpMZsMwZ0WfI1XfzGDPcKj+szactCb1TdLO5MANU6gn+gTyQTNFm7ZttSba9eFI1mDszAaulRuk6mHtmjVs0oH8DVavXctu0nNaR3pvwkocSeK2j8WR2PDlMIwO70I1FRW741E0eCrVAJeWgWiW+RvVuEOycZYe7GEM3TUYTUcKHzgQ73DM2ulCFhxtiTFHImtEJCNHatlycnMxa/ZsesUw586eRWFhIXr36QMXF9XZ7k7rSIu3xWPGauc9SHH/kkgM6KqdSJDOWYfHX8dSDZD07oKmh/Wnyc2hIRzJFlgSXhrDmCOpIQ6VkZGBNm1Mn9pEqj3UDqTGaR2prEIGj7dNn6ftqMjOrIarzj8jP3QwZFdusbKwSWPGidZB1OlFVrcEUlpjzQEdhiCTbkOhnS1oCEeyFmd0JHbm7e4mYhVnRdeJCPL7tRsWxW+9Apd2rahmGV5eXmyYZOum6UQ8zgs7IhEhdncipjPhXamNSnfqi8E9X8XO+doLacrqauSIXqEaECi7ZNazlXhMQ05aVZ9OSjoBe3UE6swgWRcj30PIMdtKTgkipwWR+xprpNrtRc1PF/Hua2gd6Es152H68LrV37Kztdk5AXk4M+9ENoNk1UiYRJo9R1P19yDfj6sTETw8Pdn768OJCDU/oa+3B36Nsf2hEPYkyM8Hr7XXDtlk51NRPPxLqqme38TDY2+0XL1Ncz+InKj37tXpeSrVUnksiX12khrJe455xDLPk0WdMTMtrv6rhS1h3rhwbI7+hGq1SL9RpbgFbhJ4fjUWQiffOsHjHNRxpLYt/OHl4diZJFLn/a+Pe0GgU/CtyC2o2U4u7tMFHpNqS/l5eOyJ3lncnb3fofcbjvMMJF12LvgHJOK6T57Ie7Y/lYAme5aSilyq8fDYF72O5OfjiXUzPqaa4xHeLYRKtShKpFBIy9iTgtwjIyCwc3EqD48mBj9trYN8sX/JOAT41k/60Bz6dX4Rmb/Mq5MQqYw/g1z/bqzsd/1neK/RPgOAh8fe1CzIGuLYhVvoOX451RoW4kT6duTmBYejOi0Dos4vw/fkFgiMPaCZh8cOmHQkQnrWQzw/5Bu2GLGhKEpYAh89xxAXD5qE8n3HIOoSCr9TW6mVh6d+Mavrfq5lM0RF9NA7wbc3xHnWTPtIrxPJH+SxTiQmld2/rqJWHp76x6wRSQ15KTlKa0e87c9O1sf04e9h0fhBVNOmOGIayvcmwOv7KfCcNJxaeXgaBk6ORCBPQO8/ZQ0SktIsPiXVFJ6NJDi9cRpCnm1OLdpUX7mFvNDBkPRhRqJDlu8x4uGxFZwdSRMyMk1atgvkYWWyau7PMdLE26MRhvXtxG7Q6/Om/j0u5PTUysOnUPb/B+F7YDVg4CnmPDz1jVWOREjLyMGB01cx99+HUCK1bONboJ83Vk6JwIc99Z84o6ZoYBTkf96Db8pPEEisP3+ch8dWWO1IupDR6fb9POQVSXH22h08ktYeGCIWubCFsR3btYS3pxubxCCPxTeGsrIK1Wl3IEv9A+4jPqBWHh7HwuaOZGuqEpOhLKuApK/q0fE8PI6IwzsSD4/jA/wPFZzHtRyodc4AAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/login_bg.9bab868b.png\";","module.exports = __webpack_public_path__ + \"static/media/checkpoint.e82ce0ca.png\";","const req = require.context('./', true, /\\.scss$/);\nreq.keys().forEach(req);\n","var map = {\n\t\"./index.scss\": 846\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 845;"],"sourceRoot":""}