{"version":3,"sources":["images/thumb_noimg_335x335.png","state/modules/home/types.ts","state/modules/home/constants.ts","state/modules/home/reducers.ts","utils/useragentUtil.ts","state/modules/index.ts","views/components/ScrollToTop/index.tsx","state/modules/home/schemas.ts","state/modules/home/selectors.ts","state/modules/home/actions.ts","state/modules/home/operations.ts","views/components/ContentWrapper/index.tsx","utils/imageUtils.ts","views/components/ProfileImage/index.tsx","utils/numberFormat.ts","views/components/ProfileVerificationBadge/VerificationBadge.tsx","views/components/ProfileVerificationBadge/index.tsx","views/components/ProfileHeader/index.tsx","views/components/EmptyPost/index.tsx","utils/timeAgoInWords.ts","utils/tiaraNewHelper.ts","views/components/Post/PostProfileHeader.tsx","utils/deviceUtils.ts","views/components/Post/PostCounterBar.tsx","utils/nl2br.tsx","utils/urlUtil.tsx","utils/getImageUrl.ts","views/components/ImageHolder/index.tsx","views/components/Post/media/ImageView.tsx","views/components/Post/feed_media/ImageFeedView.tsx","views/components/Post/media/LinkImage.tsx","views/components/Post/media/LinkView.tsx","views/components/Post/media/CardImageHolder.tsx","views/components/Post/media/CardView.tsx","views/components/Post/feed_media/FeedCard.tsx","views/components/Post/feed_media/CardFeedView.tsx","utils/dateFormat.ts","views/components/Post/media/CouponCardView.tsx","views/components/Post/media/VideoPlayer.tsx","views/components/Post/media/VideoView.tsx","views/components/Post/feed_media/VideoFeedView.tsx","utils/postUtil.ts","views/components/Post/PostContent.tsx","views/components/Post/ProfileBanner.tsx","views/components/Post/PostAgeCover.tsx","views/components/Post/index.tsx","views/components/FeedFooter/index.tsx","views/components/Feed/index.tsx","models/Profile.ts","views/components/Tab/index.tsx","utils/openWithApp.ts","views/components/OpenAppButton/index.tsx","views/components/Gnb/index.tsx","utils/tiaraHelper.ts","models/LeverageTemplate.ts","views/components/HomeTab/HomeTabHeader.tsx","views/components/HomeTab/ModuleNotice.tsx","views/components/HomeTab/ModuleCoupon.tsx","utils/timeUtil.ts","views/components/HomeTab/ModuleSimplePost.tsx","views/components/HomeTab/ModuleChat.tsx","views/components/HomeTab/ModuleChatKeyword.tsx","views/components/HomeTab/HomeTabInfoItem.tsx","views/components/HomeTab/HomeTabCall2ActionButton.tsx","views/components/HomeTab/ModuleProfileInfo.tsx","views/components/HomeTab/ModuleBusinessInfo.tsx","utils/useScript.ts","views/components/HomeTab/StaticMap.tsx","views/components/HomeTab/ModuleMap.tsx","views/components/HomeTab/index.tsx","views/pages/bridges/MobileBridgePage.tsx","views/pages/bridges/DefaultMobileBridgePage.tsx","views/pages/OnlyMobileErrorPage.tsx","views/pages/BottomSheet.tsx","views/components/AddFriendDoneLayer/index.tsx","views/components/BlockFriendLayer/index.tsx","views/components/ProfileCompletedLayer/index.tsx","views/components/UrlCopyLayer/index.tsx","views/pages/ProfilePage.tsx","views/pages/PostArchivePage.tsx","views/components/Post/comment/CommentItem.tsx","views/components/Post/comment/CommnetList.tsx","views/components/Post/PostActionBar.tsx","views/components/CompletedLayer/index.tsx","views/pages/PostPage.tsx","views/components/ErrorContent/index.tsx","views/pages/ErrorPage.tsx","views/pages/CouponPage.tsx","views/pages/BridgePage.tsx","views/pages/SDKErrorPage.tsx","views/pages/CouponBookPage.tsx","views/components/Modal/BaseModal.tsx","views/components/Modal/ShareModal.tsx","views/containers/ModalRoot/index.tsx","views/components/Modal/CommentModal.tsx","views/components/Modal/LikeModal.tsx","views/components/Modal/ProfileImageModal.tsx","views/components/Modal/AgeAuthAlertModal.tsx","views/components/Modal/AddFriendModal.tsx","views/components/Modal/BlockFriendModal.tsx","views/components/Modal/KrewPrivateProfileModal.tsx","views/components/Toast/BottomToast.tsx","views/layouts/Home.tsx","views/App.tsx","serviceWorker.js","index.tsx","utils/sentryHelper.ts","state/store.ts","routes.tsx"],"names":["module","exports","SHARE","COMMENT","LIKE","AGE_AUTH","ADD_FRIEND","IMAGE_TYPE","direction","iosInstallUrl","androidInstallUrl","ADULT_AUTH_VALID_TYPE","enableES5","entitiesReducer","produce","draft","action","_Object$keys","type","types","merge","entities","profiles","profileId","posts","hasNext","items","push","result","Object","keys","forEach","key","assign","comments","postId","previousDirection","get","newDirection","concat","realtime","initModalState","modalType","modalProps","initUAState","userAgent","navigator","vendor","window","opera","UAParser","getResult","getUseragent","home","combineReducers","modal","modalReducer","state","useragent","useragentReducer","error","errorReducer","undefined","rootReducer","ScrollToTop","pathname","useLocation","useEffect","scrollTo","video","schema","Entity","image","link","profile","profileImage","coverImage","idAttribute","comment","coupon","winImage","entryImage","card","medium","verticalCard","couponCard","Union","post","author","media","connection","hometab","entitiesSelector","getPost","createSelector","postSelector","match","params","denormalize","postSchema","profileSelector","encodedProfileId","getProfile","profileSchema","getProfilePosts","map","getProfileConnections","connectionSelector","id","connections","entries","filter","getProfileHomeTab","hometabSelector","_entities$hometab$rec","_entities$hometab","recent","homeTab","showModal","homeTypes","hideModal","fetchRealtimeSuccess","cid","client","axios","create","baseURL","process","withCredentials","fetchProfile","dispatch","then","_camelized$posts$item","camelized","camelizeKeys","data","normalized","normalize","connectionSchema","hometabSchema","fetchProfileSuccess","catch","response","status","code","fetchProfileFailure","fetchPost","fetchPostRequest","fetchPostSuccess","_error$response","_error$response$data","location","href","fetchPostFailure","fetchPosts","opts","fetchPostsRequest","queryString","stringify","_camelized$items","normalizedPosts","fetchPostsSuccess","fetchPostsFailure","fetchComments","fetchCommentsRequest","profildId","fetchCommentsSuccess","commentSchema","fetchCommentsFailure","fetchRealtime","fetchRealtimeRequest","realtimeSchema","fetchRealtimeFailure","ContentWrapper","children","accessbility","fillPage","React","createElement","Fragment","className","role","style","maxWidth","content","getSquircleThumbnailUrl","url","encodeURIComponent","startsWith","getValidUrl","getImageUrl","imgUrl","replace","isGif","fileName","indexOf","ProfileImage","sizeType","imageUrl","isVertical","height","width","src","position","left","right","top","bottom","margin","minHeight","minWidth","alt","numberWithCommas","number","toString","BusinessBadge","viewBottomSheet","onClick","e","cursor","ProfileVerificationBadge","isOfficial","VerificationBadge","ProfileHeader","onShowModal","layerCode","statusMessage","friendCount","verificationType","isChatBot","clickProfileImage","useCallback","ev","preventDefault","showAdditionalBtn","setShowAdditionalBtn","useState","currentPage","blockFriendlink","spamReportUrl","Link","to","name","target","rel","data-tiara-layer","classnames","ico_chatting","ico_chatbot","isFriend","getFormattedStatusMessage","previewStatusMessage","length","substring","split","item","index","display","openSpamReportLink","loginRedirectUrl","open","copyUrl","hiddenUrl","document","value","body","appendChild","select","execCommand","removeChild","EmptyPost","spamLevel","desc","timeAgoInWords","timeAgo","now","Date","diff","getTime","Math","floor","year","getFullYear","month","getMonth","date","getDate","am","getHours","hour","hourTwoDigit","minTwoDigit","getMinutes","useTiaraPage","actionName","page","section","trackPage","tiaraInstance","TiaraTracker","getInstance","setSection","pageMeta","setPage","track","Sentry","TiaraTrackUtils","trackClick","click","event","getClickInfo","_clickInfo$click","_clickInfo$click2","_clickInfo$click3","_clickInfo$click4","_clickInfo$click5","clickInfo","posx","posy","copy","click_url","isEmpty","trackEvent","setUrl","PostProfileHeader","isFeed","profilePath","postPath","authorName","pinned","publishedAt","layer1","layer2","layer3","origin","CopyToClipboard","text","onCopy","toast","getOsName","device","deviceOS","isMobile","isIOS","PostCountBar","permalink","commentable","unlisted","likeCount","commentCount","shareCount","isAdultChannel","isAdultPost","adultOnly","isBlinded","mobile","useSelector","_post$author","isPC","blindType","_post$author2","_post$author3","alert","nl2br","removeEmpty","splitByNewLine","t","lengthOfSplitByNewLine","idx","linkify","contents","v","ImageHolder","noFrame","containerSize","setContainerSize","calculateSize","containers","useRef","current","containerRect","parentNode","getBoundingClientRect","largeUrl","backgroundStyle","backgroundColor","avg","zIndex","ref","ImageView","caption","useMemo","tv","ImageFeedView","images","tiaraClickHandler","firstImage","isSquare","isHorizontal","styleNumber","viewStyle","backgroundImage","LinkImage","imageType","LinkView","head","classNames","card_scrab2","card_scrab3","requestedUrl","title","description","host","CardImageHolder","viewType","cardWidth","cardHeight","noGifBlur","containerStyle","setContainerStyle","container","ratio","calculateImageSize","parentContainer","parentRect","addEventListener","removeEventListener","maxHeight","Number","overflow","textAlign","verticalAlign","background","backgroundSize","WebkitFilter","MozFilter","OFilter","opacity","CardView","button","useRouteMatch","card_btn","getButtonHref","originalLink","_ref","test","FeedCard","isMultiple","isLast","moreCount","borderRadius","tviewType","CardFeedView","cards","maxCardSize","pageSize","prefetchSize","setCurrentPage","cardListWidth","setCardListWidth","viewCards","take","drop","cardSize","min","hasPrev","isFirstPage","isLastPage","prevBtnClicked","nextBtnClicked","containerWidth","hasCoupon","some","marginLeft","viewCardLength","size","isEmtpy","ordNum","hide","dotFormat","anyDate","wordFormat","CouponCardView","coupdonCard","entryStartAt","entryEndAt","VideoPlayer","parentContainerRect","videoSrc","includes","frameBorder","scrolling","allowFullScreen","allow","VideoView","VideoFeedView","isPlaying","setIsPlaying","thumbnailStyle","isLive","handlePlayButtonClicked","thumbnail","isBlindContentType","isBlindTemporaryType","isBlindPostContentOnly","PostContentText","blindedAt","PostContent","textStyle","setTextStyle","hasMoreView","isEmptyMedia","titleContainer","textContainer","calculateTextStyle","nonMedia","TEXT_LINE_HEIGHT","titleContainerWidth","textContainerWidth","textContainerHeight","nonText","join","getDescription","trim","textLineNumber","isTitleOver","isTextOver","textHeight","isBlind","paddingTop","_post$author5","clickIdx","MAX_CARD_SIZE","PAGE_SIZE","PREFETCH_SIZE","_post$author4","renderFeedMedia","_post$media","console","renderMedia","ProfileBanner","hasProfileImage","hasStatusMessage","currentUrl","substr","lastIndexOf","PostAgeCover","validType","ageAuthUrl","authInfo","loginPath","renderCoverFeedView","returnUrl","renderCoverDetailView","PostCard","sortIdx","wrap_post","wrap_post_first","FeedFooter","Feed","TabType","Call2ActionType","Tab","tab","changeTab","openWithApp","osCode","scheme","customUrl","packageName","appStoreUrl","useIntent","intentUrl","customScheme","clickedAt","toLocaleLowerCase","search","setTimeout","OpenAppButton","postArchive","installUrl","schemeHost","Gnb","ifTiaraExists","fn","args","initTiara","options","svcDomain","deployment","init","useTiara","setTiaraPage","tiaraTrackPage","onTiaraTrackClick","eventMeta","tiaraTrackClick","customProps","actionKind","LeverageTabModuleType","HomeTabHeader","header","outerNodeMode","_header$title","ModuleNotice","_module$contents$","slideIndex","setSlideIndex","refSlideNotice","settings","dots","arrows","infinite","speed","slidesToShow","slidesToScroll","afterChange","Slider","_item$media","_item$media2","_item$media3","_image","_image2","_item$title","_item$description","_item$title2","_item$title3","_item$description2","_item$description3","isVideo","isLink","_item$media4","_item$media4$video","_item$media5","_item$media5$link","draggable","_refSlideNotice$curre","slickPrev","_refSlideNotice$curre2","slickNext","ModuleCoupon","_module$contents$2","refSlideCoupon","Array","couponBook","renderCoupon","_item$image","startAt","moment","isDownloaded","usedStartAt","endAt","usedEndAt","handleClickCoupon","_useragent$result","_useragent$result$os","os","idStr","format","renderCouponBook","_useragent$result2","_useragent$result2$os","handleClickCouponBook","count","_refSlideCoupon$curre","_refSlideCoupon$curre2","convertToTime","time","timeArr","slice","ModuleSimplePost","sortBy","_post$media2","_post$media3","_post$media4","_post$media8","_post$media8$video","_post$media9","_post$title","_post$media10","_post$media10$link","isCard","_post$media5","_post$media5$video","_post$media6","_post$media6$video","_post$media7","_post$media7$link","imgNoImg","seconds","ts","utc","duration","asMilliseconds","durationFormat","shortWeekdays","ModuleChat","chat","isConsultableNow","startTime","endTime","kstHHmm","timeVal","startTimeVal","endTimeVal","timeStatement","chatSingleTime","weekFlags","weeks","wk","chatWeekTime","timeGroups","timeGroup","daysAlias","days","dayHeader","dayContent","day","dayNum","chatTime","hasSingleTime","hasWeekTime","chatOn","kstTime","tz","kstDayIdx","String","botStartMessage","consultFlag","ModuleChatKeyword","refSlideChatKeyword","itemKeywords","keywords","_sortBy","k","keyword","_data$idx","handleOpenChat","encodedMessage","_refSlideChatKeyword$","_refSlideChatKeyword$2","HomeTabInfoItem","info","_info$link","_info$description","_info$title","_info$link2","_info$link3","_info$link4","_info$description2","linkType","isCharged","HomeTabCall2ActionButton","handleClickAction","_link$urls","_link$urls2","urls","web","qr_code","app","membership","_link$urls3","_link$urls4","_link$urls5","_link$urls6","_link$urls7","androidInstall","iosInstall","executeUrl","androidExecute","iosExecute","splited","_link$urls8","more","order","store","shopping_mall","ModuleProfileInfo","_module$header","infos","call2action","ModuleBusinessInfo","showInfo","setShowInfo","active","useScript","setStatus","script","querySelector","getAttribute","async","setAttribute","setAttributeFromEvent","_script","setStateFromEvent","StaticMap","show","x","y","refStaticMap","daum","maps","load","mapOption","center","LatLng","level","marker","log","connect","props","_state$home","bindActionCreators","homeOperations","ModuleMap","_placeInfo$address","_placeInfo$address2","placeInfo","localCid","isSite","localName","address","getRealtimeLabel","_realtime$currentPeri","isOpen","isHoliday","holiday","statusLabel","secondsUtilOpen","period","currentPeriod","matchedTime","_realtime$currentPeri2","_realtime$currentPeri3","_realtime$currentPeri6","_realtime$currentPeri7","_realtime$currentPeri4","_realtime$currentPeri5","timeName","currentDayOfWeek","timeSE","handleClickPlaceInfo","handleClickKakaoMap","handleClickKakaoNavi","_useragent$result3","_useragent$result3$os","HomeTab","renderHomeTab","ltm","renderItem","leverageTagModule","Module","notice","commerce","simple_post","keyword_chat","text_info","business","MobileBridgePage","onTalkExec","DefaultMobileBridgePage","windowHeight","setWindowHeight","innerHeight","OnlyMobileErrorPage","BottomSheet","verificationGuide","msg","AddFriendDoneLayer","marginTop","friendAt","layer","getElementById","dimmedLayer","parseInt","protocol","hostname","BlockFriendLayer","today","ProfileCompletedLayer","completedLayer","UrlCopyLayer","homeSelectors","ProfilePage","_params$completedLaye","openBottomSheet","setOpenBottomSheet","copyUrlVisibility","setCopyUrlVisibility","debouncedHandleScroll","debounce","scrollNode","scrollingElement","documentElement","scrollHeight","scrollTop","offsetHeight","_last$sort","_last","since","last","sort","setTab","homeDefaultTab","parse","_params$bridge","defaultContents","bridge","isArray","isForAdult","isAdult","PostArchivePage","CommentItem","hiddenProfile","createdAt","_author$nickname","nickname","profileImageUrl","hasEmoticons","color","uri","URI","err","CommentList","_post$comments","_post$comments2","fetchDirection","_head","getScrollYPosition","PostActionBar","visibility","setVisibility","useScrollPosition","effect","dependencies","useLayoutEffect","handleScroll","currentPosition","previousYPosition","currentYPosition","isShow","scrollY","numberFormat","CompletedLayer","clickBtn","PostPage","completed","isBlindPost","isBlindContentOnly","isAgeCovered","ErrorContent","ErrorPage","CouponPage","_match$params","_match$params2","couponId","BridgePage","SDKErrorPage","CouponBookPage","_window","_window$location","ids","couponIds","Modal","setAppElement","defaultStyle","overlay","BaseModal","renderTitle","renderContent","isButtonInside","onRequestClose","rest","ShareModal","onHideModal","contentLabel","openFbShare","MODAL_COMPONENTS","CommentModal","LikeModal","ProfileImageModal","MAX_WIDTH","innerWidth","border","AgeAuthAlertModal","isUnder19","isNotFound","isUnauthorized","getModalMessage","profileName","goToLogout","loginPage","goToLogin","goToAgeAuth","AddFriendModal","BlockFriendModal","KrewPrivateProfileModal","osName","ModalRoot","SpecificModal","BottomToaster","Toaster","reverseOrder","gutter","containerClassName","toastOptions","resolveValue","message","HomeLayout","App","router","Boolean","REDUX_INITIAL_DATA","initSentry","sentryDsn","phase","toLowerCase","isSandbox","dsn","environment","debug","beforeSend","hint","exceptionMsg","ignoreErrors","reduxStore","initialState","middleware","applyMiddleware","thunk","enhancer","createStore","configureStore","ReactDOM","render","ReduxProvider","BrowserRouter","Switch","Route","exact","path","component","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.c1c05461.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","export default {\n SHOW_MODAL: 'ROCKET-WEB/HOME/SHOW_MODAL',\n HIDE_MODAL: 'ROCKET-WEB/HOME/HIDE_MODAL',\n FETCH_PROFILE_REQUEST: 'ROCKET-WEB/HOME/FETCH_PROFILE_REQUEST',\n FETCH_PROFILE_SUCCESS: 'ROCKET-WEB/HOME/FETCH_PROFILE_SUCCESS',\n FETCH_PROFILE_FAILURE: 'ROCKET-WEB/HOME/FETCH_PROFILE_FAILURE',\n FETCH_POST_REQUEST: 'ROCKET-WEB/HOME/FETCH_POST_REQUEST',\n FETCH_POST_SUCCESS: 'ROCKET-WEB/HOME/FETCH_POST_SUCCESS',\n FETCH_POST_FAILURE: 'ROCKET-WEB/HOME/FETCH_POST_FAILURE',\n FETCH_POSTS_REQUEST: 'ROCKET-WEB/HOME/FETCH_POSTS_REQUEST',\n FETCH_POSTS_SUCCESS: 'ROCKET-WEB/HOME/FETCH_POSTS_SUCCESS',\n FETCH_POSTS_FAILURE: 'ROCKET-WEB/HOME/FETCH_POSTS_FAILURE',\n FETCH_COMMENTS_REQUEST: 'FETCH_COMMENT_REQUEST',\n FETCH_COMMNETS_SUCCESS: 'FETCH_COMMNETS_SUCCESS',\n FETCH_COMMNETS_FAILURE: 'FETCH_COMMNETS_FAILURE',\n FETCH_REALTIME_REQUEST: 'FETCH_REALTIME_REQUEST',\n FETCH_REALTIME_SUCCESS: 'FETCH_REALTIME_SUCCESS',\n FETCH_REALTIME_FAILURE: 'FETCH_REALTIME_FAILURE'\n};\n","export const PROFILE_IMAGE = 'PROFILE_IMAGE';\n\n// Modal Type\nexport const SHARE = 'MODAL_TYPE_SHARE';\nexport const COMMENT = 'MODAL_TYPE_COMMENT';\nexport const LIKE = 'MODAL_TYPE_LIKE';\nexport const AGE_AUTH = 'MODAL_TYPE_AGE_AUTH';\nexport const ADD_FRIEND = 'MODAL_TYPE_ADD_FRIEND';\nexport const BLOCK_FRIEND = 'MODAL_TYPE_BLOCK_FRIEND';\nexport const KREW_PRIVATE_PROFILE = 'MODAL_TYPE_KREW_PRIVATE_PROFILE';\n\nexport const PUBLIC_INSTITUTION = 'PUBLIC_INSTITUTION';\n\nexport const BUSINESS = 'BUSINESS';\nexport const ACTION_TYPE = {\n TALKSTORE: 'talkstore',\n STORE: 'store',\n TEL: 'tel'\n};\nexport const ACTION_BUTTON = {\n participate: { class: 'party', label: '참여하기' },\n tel: { class: 'call', label: '전화하기' },\n coupon: { class: 'coupon', label: '쿠폰받기' },\n video: { class: 'video', label: '동영상보기' },\n more: { class: 'examine', label: '더 알아보기' },\n donate: { class: 'gift', label: '기부하기' },\n inquiry: { class: 'detail', label: '문의하기' },\n web: { class: 'web', label: '웹사이트' },\n game: { class: 'game', label: '게임하기' },\n openchat: { class: 'chat', label: '오픈채팅' },\n app: { class: 'app', label: '앱 사용하기' },\n buy: { class: 'buy', label: '구매하기' },\n reserve: { class: 'reserve', label: '예약하기' },\n subscribe: { class: 'join', label: '가입하기' },\n order: { class: 'order', label: '주문하기' },\n talkorder: { class: 'talkorder', label: '톡 주문하기' },\n music: { class: 'music', label: '음악듣기' },\n store: { class: 'store', label: '스토어' },\n talkstore: { class: 'talkstore', label: '톡 스토어' },\n cafe: { class: 'cafe', label: '공식카페' },\n hospital: { class: 'hospital', label: '병원가기' },\n membership: { class: 'membership', label: '멤버십' }\n};\nexport const IMAGE_TYPE = {\n big: 'big',\n small: 'small',\n none: 'none'\n};\nexport const direction = {\n forward: 'forward',\n backward: 'backward'\n};\n\nexport const iosInstallUrl = 'https://itunes.apple.com/kr/app/id362057947';\nexport const androidInstallUrl =\n 'https://play.google.com/store/apps/details?id=com.kakao.talk&hl=ko';\n\nexport const ADULT_AUTH_VALID_TYPE = {\n UNAUTHORIZED: 'unauthorized',\n UNAUTHORIZED_AGE: 'unauthorized_age',\n VERIFIED: 'verified',\n NOT_FOUND: 'not_found',\n LOWER_AGE_LIMIT: 'lower_age_limit'\n};\n","import { combineReducers } from 'redux';\nimport produce, { enableES5 } from 'immer';\nimport get from 'lodash/get';\nimport merge from 'lodash/merge';\nimport types from 'state/modules/home/types';\nimport { direction } from 'state/modules/home/constants';\nimport { getUseragent } from 'utils/useragentUtil';\n\nenableES5();\n\nconst entitiesReducer = produce((draft = {}, action) => {\n switch (action.type) {\n case types.FETCH_PROFILE_SUCCESS:\n case types.FETCH_POST_SUCCESS:\n merge(draft, action.entities);\n break;\n case types.FETCH_POSTS_SUCCESS:\n draft.profiles[action.profileId].posts.hasNext = action.hasNext;\n draft.profiles[action.profileId].posts.items.push(...action.result);\n Object.keys(action.entities)?.forEach(key => {\n // \"posts\", \"links\", \"videos\", \"images\", \"cards\", \"coupons\", \"couponCards\", ...\n draft[key] = Object.assign(draft[key] || {}, action.entities[key]);\n });\n break;\n case types.FETCH_COMMNETS_SUCCESS:\n const comments = draft.posts[action.postId].comments;\n const previousDirection = get(comments, 'direction', direction.backward);\n const newDirection = action.direction;\n if (previousDirection !== newDirection) {\n comments.direction = newDirection;\n comments.items = [];\n draft.comments = {};\n }\n comments.items =\n comments.direction === direction.forward\n ? comments.items.concat(action.result)\n : action.result.concat(comments.items);\n comments.hasNext = action.hasNext;\n draft.comments = Object.assign(draft.comments, action.entities.comments);\n break;\n case types.FETCH_REALTIME_SUCCESS:\n draft.realtime = action.result;\n break;\n default:\n return draft;\n }\n\n return draft;\n});\n\nconst initModalState = {\n modalType: '',\n modalProps: {}\n};\n\nconst modalReducer = (state = initModalState, action: any) => {\n switch (action.type) {\n case types.SHOW_MODAL:\n return {\n modalType: action.modalType,\n modalProps: action.modalProps\n };\n case types.HIDE_MODAL:\n return initModalState;\n default:\n return state;\n }\n};\nconst initUAState = {\n result: getUseragent()\n};\nconst useragentReducer = (state = initUAState) => {\n return { ...state };\n};\n\nconst errorReducer = (state = { error: undefined }, { error }: any) => {\n if (error) {\n return { error };\n }\n\n return state;\n};\n\nconst home = combineReducers({\n entities: entitiesReducer,\n modal: modalReducer,\n useragent: useragentReducer,\n error: errorReducer\n});\n\nexport default home;\n","import { UAParser } from 'ua-parser-js';\n\nexport function getUseragent() {\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\n const parser = new UAParser(userAgent);\n const parseredUseragent = parser.getResult();\n return parseredUseragent;\n}\n","// export { default as home } from './home';\nimport {combineReducers} from 'redux';\nimport home from './home/reducers';\n\nconst rootReducer = combineReducers({\n home\n});\n\nexport type RootState = ReturnType;\nexport default rootReducer;\n","import { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport default function ScrollToTop() {\n const { pathname } = useLocation();\n\n useEffect(() => {\n window.scrollTo(0, 0);\n }, [pathname]);\n\n return null;\n};\n","import { schema } from 'normalizr';\n\nexport const video = new schema.Entity('videos');\nexport const image = new schema.Entity('images');\nexport const link = new schema.Entity('links');\n\nexport const profile = new schema.Entity(\n 'profiles',\n {\n profileImage: image,\n coverImage: image\n },\n { idAttribute: 'profileId' }\n);\n\nexport const comment = new schema.Entity('comments');\n\nexport const coupon = new schema.Entity('coupons', {\n winImage: image,\n entryImage: image\n});\n\nexport const card = new schema.Entity('cards', {\n medium: image\n});\n\nexport const verticalCard = new schema.Entity('verticalCards', {\n medium: image\n});\n\nexport const couponCard = new schema.Entity('couponCards', {\n coupon: coupon\n});\n\nexport const medium = new schema.Union(\n {\n couponCard,\n verticalCard,\n card,\n image,\n link,\n video\n },\n 'type'\n);\n\nexport const post = new schema.Entity('posts', {\n author: profile,\n media: [medium],\n comments: { items: [comment] }\n});\n\nexport const connection = new schema.Entity(\n 'connections',\n {},\n { idAttribute: 'connectionId' }\n);\n\nexport const hometab = new schema.Entity(\n 'hometab',\n {},\n { idAttribute: () => 'recent' }\n);\n\nexport const realtime = new schema.Entity(\n 'realtime',\n {},\n { idAttribute: 'id' }\n);\n","import { createSelector } from 'reselect';\nimport { denormalize } from 'normalizr';\nimport { RouteChildrenProps } from 'react-router';\n\nimport { profile as profileSchema, post as postSchema } from './schemas';\nimport { RootState } from '..';\nimport { Connection } from 'models/Connection';\n\nconst entitiesSelector = (state: RootState) => state.home.entities;\n\ninterface PostSelectParams {\n postId?: string;\n}\n\nconst postSelector = (\n { home: { entities } }: RootState,\n { match }: RouteChildrenProps\n) => {\n const postId = match?.params.postId;\n if (!postId) return null;\n return entities.posts && entities.posts[postId];\n};\n\nconst getPost = createSelector(\n entitiesSelector,\n postSelector,\n (entities, post) => {\n if (post) {\n return denormalize(post, postSchema, entities);\n }\n return null;\n }\n);\n\ninterface ProfileSelectParams {\n encodedProfileId?: string;\n}\n\nconst profileSelector = (\n { home: { entities } }: RootState,\n { match }: RouteChildrenProps\n) => {\n const encodedProfileId = match?.params.encodedProfileId;\n if (!encodedProfileId) return null;\n return (\n entities.profiles && encodedProfileId && entities.profiles[encodedProfileId]\n );\n};\n\ninterface ConnectionSelectParams {\n encodedProfileId?: string;\n}\n\nconst connectionSelector = (\n { home: { entities } }: RootState,\n { match }: RouteChildrenProps\n) => {\n const encodedProfileId = match?.params.encodedProfileId;\n if (!encodedProfileId) return null;\n const profile =\n entities &&\n entities.profiles &&\n encodedProfileId &&\n entities.profiles[encodedProfileId];\n if (!profile || !profile.id) return [];\n const filtered =\n entities.connections &&\n Object.entries(entities.connections)\n .map(([key, connection]) => connection)\n .filter(connection => connection.profileId === profile.id);\n return filtered;\n};\n\nconst hometabSelector = (\n { home: { entities } }: RootState,\n { match }: RouteChildrenProps\n) => {\n const encodedProfileId = match?.params.encodedProfileId;\n if (!encodedProfileId) return null;\n const profile =\n entities &&\n entities.profiles &&\n encodedProfileId &&\n entities.profiles[encodedProfileId];\n if (!profile || !profile.id) return [];\n return entities.hometab?.recent ?? {};\n};\n\nconst getProfile = createSelector(\n entitiesSelector,\n profileSelector,\n (entities, profile) => {\n return denormalize(profile, profileSchema, entities);\n }\n);\n\nconst getProfilePosts = createSelector(\n entitiesSelector,\n profileSelector,\n (entities, profile) => {\n if (profile && profile.posts) {\n return profile.posts.items.map((postId: number) =>\n denormalize(entities.posts[`${postId}`], postSchema, entities)\n );\n }\n return [];\n }\n);\n\nconst getProfileConnections = createSelector(\n connectionSelector,\n connections => connections\n);\n\nconst getProfileHomeTab = createSelector(hometabSelector, homeTab => homeTab);\n\nexport default {\n getPost,\n getProfile,\n getProfilePosts,\n getProfileHomeTab,\n getProfileConnections\n};\n","import { homeTypes } from '.';\n\nexport function showModal(modalType: any, modalProps: any) {\n return {\n type: homeTypes.SHOW_MODAL,\n modalType,\n modalProps\n };\n}\n\nexport function hideModal() {\n return {\n type: homeTypes.HIDE_MODAL\n };\n}\n\nexport function fetchProfileRequest() {\n return {\n type: homeTypes.FETCH_PROFILE_REQUEST\n };\n}\n\nexport function fetchProfileSuccess({ entities }: any) {\n return {\n type: homeTypes.FETCH_PROFILE_SUCCESS,\n entities\n };\n}\n\nexport function fetchProfileFailure(error: any) {\n return {\n type: homeTypes.FETCH_PROFILE_FAILURE,\n error\n };\n}\n\nexport function fetchPostRequest(profileId: string, postId: number) {\n return {\n type: homeTypes.FETCH_POST_REQUEST,\n profileId,\n postId\n };\n}\n\nexport function fetchPostSuccess(\n profileId: string,\n postId: number,\n { result, entities }: any\n) {\n return {\n type: homeTypes.FETCH_POST_SUCCESS,\n profileId,\n postId,\n result,\n entities\n };\n}\n\nexport function fetchPostFailure(\n profileId: string,\n postId: number,\n error: any\n) {\n return {\n type: homeTypes.FETCH_POST_FAILURE,\n profileId,\n postId,\n error\n };\n}\n\nexport function fetchPostsRequest(profileId: string, opts: any) {\n return {\n type: homeTypes.FETCH_POSTS_REQUEST,\n profileId,\n opts\n };\n}\n\nexport function fetchPostsSuccess(\n profileId: string,\n { entities, result }: any,\n hasNext: boolean\n) {\n return {\n type: homeTypes.FETCH_POSTS_SUCCESS,\n profileId,\n entities,\n result,\n hasNext\n };\n}\n\nexport function fetchPostsFailure(profileId: string, error: any) {\n return {\n type: homeTypes.FETCH_POSTS_FAILURE,\n profileId,\n error\n };\n}\n\nexport function fetchCommentsRequest(profileId: string, postId: number) {\n return {\n type: homeTypes.FETCH_COMMENTS_REQUEST,\n profileId,\n postId\n };\n}\n\nexport function fetchCommentsSuccess(\n profildId: string,\n postId: number,\n direction: string,\n hasNext: boolean,\n { result, entities }: any\n) {\n return {\n type: homeTypes.FETCH_COMMNETS_SUCCESS,\n profildId,\n postId,\n direction,\n hasNext,\n result,\n entities\n };\n}\n\nexport function fetchCommentsFailure(\n profileId: string,\n postId: number,\n error: any\n) {\n return {\n type: homeTypes.FETCH_COMMNETS_FAILURE,\n profileId,\n postId,\n error\n };\n}\n\nexport function fetchRealtimeRequest(cid: string) {\n return {\n type: homeTypes.FETCH_REALTIME_REQUEST,\n cid\n };\n}\n\nexport function fetchRealtimeSuccess(cid: string, { entities, result }: any) {\n return {\n type: homeTypes.FETCH_REALTIME_SUCCESS,\n cid,\n entities,\n result\n };\n}\n\nexport function fetchRealtimeFailure(cid: string, error: any) {\n return {\n type: homeTypes.FETCH_REALTIME_FAILURE,\n cid,\n error\n };\n}\n","import axios from 'axios';\nimport { camelizeKeys } from 'humps';\nimport { Pageable } from 'models/Common';\nimport { Connection } from 'models/Connection';\nimport { LeverageTab } from 'models/LeverageTemplate';\nimport { Realtime } from 'models/Local';\nimport { Post } from 'models/Post';\nimport { Profile } from 'models/Profile';\nimport { normalize } from 'normalizr';\nimport queryString from 'query-string';\nimport {\n fetchProfileRequest,\n fetchProfileSuccess,\n fetchProfileFailure,\n fetchPostRequest,\n fetchPostSuccess,\n fetchPostFailure,\n fetchPostsRequest,\n fetchPostsSuccess,\n fetchPostsFailure,\n fetchCommentsRequest,\n fetchCommentsSuccess,\n fetchCommentsFailure,\n fetchRealtimeRequest,\n fetchRealtimeSuccess,\n fetchRealtimeFailure,\n showModal\n} from 'state/modules/home/actions';\nimport {\n profile as profileSchema,\n post as postSchema,\n comment as commentSchema,\n connection as connectionSchema,\n hometab as hometabSchema,\n realtime as realtimeSchema\n} from 'state/modules/home/schemas';\nimport { KREW_PRIVATE_PROFILE } from './constants';\n\nconst client = axios.create({\n baseURL: process.env.REACT_APP_API_BASE_URL,\n withCredentials: true\n});\n\ninterface WebProfileResponse {\n profile: Profile;\n posts: Pageable;\n connections: Connection[];\n hometab: LeverageTab;\n}\n\nconst fetchProfile = (profileId: string) => (dispatch: any) => {\n dispatch(fetchProfileRequest());\n return client\n .get(`/web/profiles/${profileId}`)\n .then(result => {\n const camelized = (camelizeKeys(\n result.data\n ) as object) as WebProfileResponse;\n camelized.posts.items?.forEach(post => {\n post.author = camelized.profile;\n });\n const normalized: any = normalize(camelized, {\n connections: [connectionSchema],\n profile: profileSchema,\n posts: { items: [postSchema] },\n hometab: hometabSchema\n });\n normalized.entities.profiles[profileId].posts = normalized.result.posts;\n dispatch(fetchProfileSuccess(normalized));\n })\n .catch(error => {\n if (\n error &&\n error.response &&\n error.response.status === 400 &&\n error.response.data.code === -201000\n ) {\n dispatch(showModal(KREW_PRIVATE_PROFILE, { profileId }));\n }\n\n dispatch(fetchProfileFailure(error));\n });\n};\n\nconst fetchPost = (profileId: string, postId: number) => (dispatch: any) => {\n dispatch(fetchPostRequest(profileId, postId));\n return client\n .get(`/web/profiles/${profileId}/posts/${postId}`)\n .then(result => {\n return dispatch(\n fetchPostSuccess(\n profileId,\n postId,\n normalize(camelizeKeys(result.data), postSchema)\n )\n );\n })\n .catch(error => {\n if (\n error &&\n error.response &&\n error.response.status === 400 &&\n error.response.data.code === -201000\n ) {\n dispatch(showModal(KREW_PRIVATE_PROFILE, { profileId, postId }));\n } else if (error?.response?.data?.code === -110000) {\n window.location.href = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/login?continue=${window.location.href}`;\n }\n\n dispatch(fetchPostFailure(profileId, postId, error));\n });\n};\n\nconst fetchPosts = (profileId: string, opts: any = {}) => (dispatch: any) => {\n dispatch(fetchPostsRequest(profileId, opts));\n return client\n .get(`/web/profiles/${profileId}/posts?${queryString.stringify(opts)}`)\n .then(result => {\n const camelized = (camelizeKeys(result.data) as object) as Pageable;\n camelized.items?.forEach((post: any) => {\n post.author = profileId;\n });\n const normalizedPosts = normalize(camelized.items, [postSchema]);\n return dispatch(\n fetchPostsSuccess(profileId, normalizedPosts, camelized.hasNext)\n );\n })\n .catch(error => {\n dispatch(fetchPostsFailure(profileId, error));\n });\n};\n\nconst fetchComments = (profileId: string, postId: number, opts: any = {}) => (\n dispatch: any\n) => {\n dispatch(fetchCommentsRequest(profileId, postId));\n return client\n .get(\n `/web/profiles/${profileId}/posts/${postId}/comments?${queryString.stringify(\n opts\n )}`\n )\n .then(result => {\n const comments = (camelizeKeys(result.data) as object) as Pageable<\n Comment\n >;\n return dispatch(\n fetchCommentsSuccess(\n profileId,\n postId,\n opts.direction,\n comments.hasNext,\n normalize(comments.items, [commentSchema])\n )\n );\n })\n .catch(error => dispatch(fetchCommentsFailure(profileId, postId, error)));\n};\n\nconst fetchRealtime = (cid: string) => (dispatch: any) => {\n dispatch(fetchRealtimeRequest(cid));\n return client\n .get(`/web/local/${cid}/realtime`)\n .then(result => {\n if (typeof result.data != 'object') {\n return dispatch(fetchRealtimeSuccess(cid, { result: null }));\n }\n const camelized = (camelizeKeys(result.data) as object) as Realtime;\n const normalized: any = normalize(camelized, {\n realtime: realtimeSchema\n });\n return dispatch(fetchRealtimeSuccess(cid, normalized));\n })\n .catch(error => dispatch(fetchRealtimeFailure(cid, error)));\n};\n\nexport default {\n fetchProfile,\n fetchPost,\n fetchPosts,\n fetchComments,\n fetchRealtime\n};\n","import React from 'react';\ninterface Accessbility {\n content: string;\n}\ninterface Props {\n accessbility: Accessbility;\n fillPage?: boolean;\n}\nconst ContentWrapper: React.FC> = ({\n children,\n accessbility = {},\n fillPage\n}) => (\n <>\n \n
\n {accessbility.content && (\n

\n {accessbility.content}\n

\n )}\n {children}\n
\n \n \n);\n\nexport default ContentWrapper;\n","import get from 'lodash/get';\nimport { Image } from 'models/Medium';\n\nexport function getSquircleThumbnailUrl(url: string | undefined) {\n return url\n ? `https://img1.daumcdn.net/thumb/C100x100.mplusfriend/?fname=${encodeURIComponent(\n getValidUrl(url)\n )}`\n : url;\n}\n\nexport function getValidUrl(url: string) {\n return url.startsWith('//') ? 'https:'.concat(url) : url;\n}\n\nexport function getImageUrl(imgUrl: string) {\n // image 가 http일 경우 https 만 허용하는 브라우저에서는 깨져보이기 때문에 처리\n // 추후에 서버에서 https 로 내려주는 방식으로 수정해야 함.\n return imgUrl.replace(/^http:\\/\\//i, '//');\n}\n\nexport const isGif = (image: Image) => {\n const fileName = get(image, 'filename');\n return fileName && fileName.indexOf('.gif') > 0;\n};\n","import { Image } from 'models/Medium';\nimport React from 'react';\nimport { getSquircleThumbnailUrl } from 'utils/imageUtils';\nimport get from 'lodash/get';\n\ninterface Props {\n image: Image;\n sizeType?: 'default' | 'small';\n}\nconst ProfileImage: React.FC = ({ image, sizeType = 'small' }) => {\n const imageUrl = get(image, `${sizeType}Url`);\n const isVertical = image.height > image.width;\n\n return (\n \n );\n}\n\nexport default ProfileImage;\n","export default function numberWithCommas(number: number) {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n","import React from 'react';\n\ninterface Props {\n viewBottomSheet: Function;\n}\n\nconst BusinessBadge: React.FC = ({ viewBottomSheet }) => {\n return (\n viewBottomSheet(e)}\n style={{cursor: 'pointer'}}\n >\n 공식채널\n \n )\n};\n\nexport default BusinessBadge;\n","import React from 'react';\nimport { PUBLIC_INSTITUTION, BUSINESS } from 'state/modules/home/constants';\nimport VerificationBadge from './VerificationBadge';\n\ninterface Props {\n type: string;\n isOfficial: boolean;\n viewBottomSheet: Function;\n}\nconst ProfileVerificationBadge: React.FC = ({ type, isOfficial, viewBottomSheet }) => {\n if (type === BUSINESS || isOfficial || type === PUBLIC_INSTITUTION) {\n return ;\n }\n return null;\n};\n\nexport default ProfileVerificationBadge;\n","import React, { Fragment, useCallback, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport classnames from 'classnames';\nimport {\n ADD_FRIEND,\n BLOCK_FRIEND,\n PROFILE_IMAGE\n} from 'state/modules/home/constants';\nimport ProfileImage from 'views/components/ProfileImage';\nimport numberWithCommas from 'utils/numberFormat';\nimport ProfileVerificationBadge from 'views/components/ProfileVerificationBadge';\nimport { Profile } from 'models/Profile';\nimport { Connection } from 'models/Connection';\n\ninterface Props {\n profile: Profile;\n onShowModal: Function;\n connections: Array;\n device?: object;\n viewBottomSheet: Function;\n layerCode: Function;\n}\n\nconst ProfileHeader: React.FC = ({\n profile,\n onShowModal,\n viewBottomSheet,\n layerCode\n}) => {\n const {\n profileImage,\n statusMessage,\n friendCount,\n verificationType,\n isChatBot,\n isOfficial\n } = profile;\n\n const copyUrl = () => {\n const hiddenUrl = document.createElement('textarea');\n hiddenUrl.value = window.location.href;\n document.body.appendChild(hiddenUrl);\n hiddenUrl.select();\n document.execCommand('copy');\n document.body.removeChild(hiddenUrl);\n setShowAdditionalBtn(!showAdditionalBtn);\n layerCode('copyurl');\n };\n\n const clickProfileImage = useCallback(\n ev => {\n ev.preventDefault();\n onShowModal(PROFILE_IMAGE, { profileImage });\n },\n [profileImage, onShowModal]\n );\n\n const getFormattedStatusMessage = () => {\n if (!statusMessage) {\n return null;\n }\n\n let previewStatusMessage = statusMessage;\n if (previewStatusMessage.length > 55) {\n previewStatusMessage = previewStatusMessage\n .substring(0, 55)\n .concat('...');\n }\n\n return previewStatusMessage.split('\\n').map((item, index) => (\n \n {item}\n
\n
\n ));\n };\n\n const openSpamReportLink = () => {\n const loginRedirectUrl = spamReportUrl;\n const logoutRedirectUrl = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/login?continue=`;\n setShowAdditionalBtn(!showAdditionalBtn);\n window.open(\n `${process.env.REACT_APP_API_BASE_URL}/web/profiles/${profile?.profileId}/logincheck?logoutRedirectUrl=${logoutRedirectUrl}&loginRedirectUrl=${loginRedirectUrl}`,\n '_blank'\n );\n };\n\n const [showAdditionalBtn, setShowAdditionalBtn] = useState(false);\n const currentPage = window.location.href;\n const link = `/${profile?.profileId}/friend_direct`;\n const blockFriendlink = `/${profile?.profileId}/friend_block?returl=${currentPage}%3FcompletedLayer=blockfriend`;\n const spamReportUrl = window.location.href + '/spam_report';\n\n return (\n
\n

\n 프로필 본문영역\n

\n
\n 메인 프로필\n
\n
\n \n \n 프로필 사진 보기\n \n
\n
\n
\n {profile.name}\n \n
\n \n 친구 {numberWithCommas(friendCount)}\n \n
\n
\n
\n \n \n \n {profile.isFriend && (\n \n onShowModal(BLOCK_FRIEND, { profile, blockFriendlink })\n }\n >\n 채널차단\n \n )}\n {!profile.isFriend && (\n onShowModal(ADD_FRIEND, { profile, link })}\n >\n 채널추가\n \n )}\n
\n

{getFormattedStatusMessage()}

\n
\n setShowAdditionalBtn(!showAdditionalBtn)}\n >\n 더보기\n \n \n
    \n
  • \n openSpamReportLink()}\n >\n 신고하기\n \n
  • \n
  • \n copyUrl()}\n >\n URL 복사하기\n \n
  • \n
\n
\n
\n \n
\n
\n
\n \n );\n};\n\nexport default ProfileHeader;\n","import { Profile } from 'models/Profile';\nimport React from 'react';\n\ninterface Props {\n profile: Profile;\n}\nconst EmptyPost: React.FC = ({ profile }) => {\n const { spamLevel } = profile;\n const desc =\n spamLevel === 5\n ? '운영정책에 의해 제재된 프로필로 모든 소식이 블라인드되었습니다.'\n : spamLevel === 6\n ? '권리침해신고에 의해 임시조치된 프로필로 모든 소식이 블라인드되었습니다.'\n : '아직 작성된 소식이 없습니다.';\n\n return (\n
\n

{desc}

\n
\n );\n};\n\nexport default EmptyPost;\n","export default function timeAgoInWords(timeAgo: Date) {\n const now = new Date();\n const diff = now.getTime() - timeAgo.getTime();\n\n if (diff < (60 * 1000)) {\n return '방금';\n }\n\n if (diff < (60 * 60 * 1000)) {\n return `${Math.floor(diff / (60 * 1000))}분 전`;\n }\n\n if (diff < (24 * 60 * 60 * 1000)) {\n return `${Math.floor(diff / (60 * 60 * 1000))}시간 전`;\n }\n\n const year = timeAgo.getFullYear();\n const month = timeAgo.getMonth() + 1;\n const date = timeAgo.getDate();\n const am = timeAgo.getHours() < 12 || timeAgo.getHours() === 24 ? '오전' : '오후';\n const hour = am === '오전' ? timeAgo.getHours() % 12 : timeAgo.getHours() % 12 || 12;\n const hourTwoDigit = hour < 10 ? '0' + hour : hour;\n const minTwoDigit = timeAgo.getMinutes() < 10 ? '0' + timeAgo.getMinutes() : timeAgo.getMinutes();\n\n if (year === now.getFullYear()) {\n return `${month}월 ${date}일 ${am} ${hourTwoDigit}:${minTwoDigit}`;\n }\n\n return `${year}년 ${month}월 ${date}일 ${am} ${hourTwoDigit}:${minTwoDigit}`;\n}\n","import { useEffect } from 'react';\nimport * as Sentry from '@sentry/browser';\nimport { isEmpty } from 'lodash';\n\nexport interface TiaraTrackPageParam {\n profileId: string | undefined;\n actionName: string;\n page: string;\n pageMeta?: TiaraPageMetaParam;\n section?: string;\n}\n\nexport interface TiaraTrackEventParam {\n actionName: string;\n page: string;\n pageMeta?: TiaraPageMetaParam;\n click?: TiaraClickParam;\n section?: string;\n}\n\nexport interface TiaraPageMetaParam {\n id: string | undefined;\n}\n\nexport interface TiaraClickParam {\n layer1: string;\n layer2?: string;\n layer3?: string;\n ordNum?: number;\n copy?: string | undefined;\n click_url?: string | undefined;\n}\n\nconst trackPage = ({\n profileId,\n actionName,\n page,\n section\n}: TiaraTrackPageParam) => {\n try {\n const tiaraInstance = window.TiaraTracker.getInstance();\n if (tiaraInstance) {\n if (section) {\n tiaraInstance.setSection(section);\n }\n if (\n profileId &&\n 'pageMeta' in tiaraInstance &&\n typeof tiaraInstance.pageMeta === 'function'\n ) {\n tiaraInstance.pageMeta({ id: profileId });\n }\n tiaraInstance\n .trackPage(actionName)\n .setPage(page)\n .track();\n }\n } catch (error) {\n Sentry.captureException(error);\n }\n};\n\nexport const useTiaraPage = ({\n profileId,\n actionName,\n page,\n section\n}: TiaraTrackPageParam) => {\n useEffect(() => {\n if (profileId) {\n trackPage({ profileId, actionName, page, section });\n }\n }, [profileId, actionName, page, section]);\n};\n\nexport const TiaraTrackUtils = {\n trackClick: (\n { actionName, page, pageMeta, click, section }: TiaraTrackEventParam,\n event?:\n | React.MouseEvent\n | React.MouseEvent\n | React.MouseEvent\n | MouseEvent\n ) => {\n try {\n const tiaraInstance = window.TiaraTracker.getInstance();\n if (tiaraInstance) {\n if (section) {\n tiaraInstance.setSection(section);\n }\n if (\n pageMeta &&\n 'pageMeta' in tiaraInstance &&\n typeof tiaraInstance.pageMeta === 'function'\n ) {\n tiaraInstance.pageMeta(pageMeta);\n }\n if (\n click &&\n 'click' in tiaraInstance &&\n typeof tiaraInstance.click === 'function' &&\n window.TiaraTracker &&\n 'getClickInfo' in window.TiaraTracker &&\n typeof window.TiaraTracker.getClickInfo === 'function'\n ) {\n const clickInfo = window.TiaraTracker.getClickInfo(event);\n tiaraInstance.click({\n posx: clickInfo.click?.posx,\n posy: clickInfo.click?.posy,\n copy: clickInfo.click?.copy,\n click_url: isEmpty(clickInfo.click?.click_url)\n ? undefined\n : clickInfo.click?.click_url,\n ...click\n });\n }\n tiaraInstance\n .setPage(page)\n .trackEvent(actionName)\n .setUrl(window.location.href)\n .track();\n }\n } catch (error) {\n Sentry.setExtras({ page, actionName });\n Sentry.captureException(error);\n }\n }\n};\n","import React, { useState } from 'react';\nimport ProfileImage from '../ProfileImage';\nimport timeAgoInWords from '../../../utils/timeAgoInWords';\nimport { Link } from 'react-router-dom';\nimport get from 'lodash/get';\nimport { Post } from 'models/Post';\nimport CopyToClipboard from 'react-copy-to-clipboard';\nimport { toast } from 'react-hot-toast';\nimport { TiaraTrackUtils } from '../../../utils/tiaraNewHelper';\n\ninterface Props {\n post: Post;\n isFeed: boolean;\n profilePath: string;\n postPath: string;\n layerCode: Function;\n}\n\nconst PostProfileHeader: React.FC = ({\n post,\n isFeed,\n profilePath,\n postPath,\n layerCode\n}) => {\n const profileImage = get(post, 'author.profileImage');\n const authorName = get(post, 'author.name');\n const [showAdditionalBtn, setShowAdditionalBtn] = useState(false);\n const currentUrl = window.location.href;\n const encodedProfileId = currentUrl.split('/')[3];\n const openSpamReportLink = () => {\n const postId = post.id;\n const spamReportUrl = `/${encodedProfileId}/spam_report/${postId}`;\n const loginRedirectUrl = window.location.origin + spamReportUrl;\n const logoutRedirectUrl = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/login?continue=`;\n setShowAdditionalBtn(!showAdditionalBtn);\n window.open(\n `${process.env.REACT_APP_API_BASE_URL}/web/profiles/${encodedProfileId}/logincheck?logoutRedirectUrl=${logoutRedirectUrl}&loginRedirectUrl=${loginRedirectUrl}`,\n '_blank'\n );\n };\n\n return (\n
\n {post.pinned && (\n \n 핀 소식\n \n )}\n
\n \n \n \n
\n
\n \n \n {authorName}\n \n \n \n \n {timeAgoInWords(new Date(post.publishedAt))}\n \n \n
\n
\n {\n setShowAdditionalBtn(!showAdditionalBtn);\n TiaraTrackUtils.trackClick({\n actionName: '포스트더보기_클릭',\n page: isFeed ? 'post_archive' : 'post',\n pageMeta: { id: encodedProfileId },\n click: {\n layer1: 'post_header',\n layer2: 'post_more'\n }\n });\n }}\n >\n 더보기\n \n \n
    \n
  • \n {\n TiaraTrackUtils.trackClick({\n actionName: '포스트_신고하기_클릭',\n page: isFeed ? 'post_archive' : 'post',\n pageMeta: { id: encodedProfileId },\n click: {\n layer1: 'post_header',\n layer2: 'post_more',\n layer3: 'post_report'\n }\n });\n openSpamReportLink();\n }}\n >\n 신고하기\n \n
  • \n
  • \n {\n toast('URL을 복사하였습니다.');\n setShowAdditionalBtn(!showAdditionalBtn);\n }}\n >\n {\n TiaraTrackUtils.trackClick({\n actionName: '포스트_URL복사_클릭',\n page: isFeed ? 'post_archive' : 'post',\n pageMeta: { id: encodedProfileId },\n click: {\n layer1: 'post_header',\n layer2: 'post_more',\n layer3: 'post_url_copy'\n }\n });\n }}\n >\n URL 복사하기\n \n \n
  • \n
\n
\n
\n \n );\n};\n\nexport default PostProfileHeader;\n","import get from 'lodash/get';\n\nexport function getOsName(device: any) {\n if (isIOS(device)) {\n return 'iOS';\n }\n\n return get(device, 'os.name', null);\n}\n\nfunction isIOS(device: any) {\n const deviceOS = get(device, 'os.name', null);\n return deviceOS === 'iOS' || (deviceOS === 'Mac OS' && isMobile(device)); // ** ios >= 13부터 iPad의 ua는 os = Mac OS & type = mobile로 내려줌 (https://developer.apple.com/forums/thread/119186)\n}\n\nexport function isMobile(device: any) {\n if (get(device, 'device.type') === 'mobile') {\n return true;\n } else if (get(device, 'device.model') === 'iPad') {\n return true;\n } else if (get(device, 'device.type') === 'tablet') {\n return true;\n }\n return false;\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport get from 'lodash/get';\nimport numberWithCommas from 'utils/numberFormat';\nimport { SHARE, COMMENT, LIKE } from 'state/modules/home/constants';\nimport { Post } from 'models/Post';\nimport { RootState } from 'state/modules';\nimport { isMobile } from 'utils/deviceUtils';\nimport { TiaraTrackUtils } from '../../../utils/tiaraNewHelper';\n\ninterface Props {\n post: Post;\n onShowModal: Function;\n isFeed: boolean;\n}\n\nconst PostCountBar: React.FC = ({ post, onShowModal, isFeed }) => {\n const {\n author,\n permalink,\n commentable,\n unlisted,\n likeCount,\n commentCount,\n shareCount\n } = post;\n const isAdultChannel = get(author, 'isAdult');\n const isAdultPost = post.adultOnly;\n const isBlinded = get(post, 'blindType', false);\n\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n const mobile = isMobile(useragent);\n\n return (\n
\n
\n {\n onShowModal(LIKE, { post, isPC: !mobile });\n TiaraTrackUtils.trackClick({\n actionName: '좋아요_클릭',\n page: isFeed ? 'post_archive' : 'post',\n pageMeta: { id: post?.author?.profileId },\n click: {\n layer1: 'post_action',\n layer2: 'like'\n }\n });\n }}\n >\n 좋아요\n {(!post.blindType || post.blindType === '') && likeCount > 0\n ? numberWithCommas(likeCount)\n : 0}\n \n {commentable && (\n {\n onShowModal(COMMENT, { post, isPC: !mobile });\n TiaraTrackUtils.trackClick({\n actionName: '댓글_클릭',\n page: isFeed ? 'post_archive' : 'post',\n pageMeta: { id: post?.author?.profileId },\n click: {\n layer1: 'post_action',\n layer2: 'reply'\n }\n });\n }}\n >\n 댓글\n {(!post.blindType || post.blindType === '') && commentCount > 0\n ? numberWithCommas(commentCount)\n : 0}\n \n )}\n {!unlisted && !isAdultChannel && (\n {\n TiaraTrackUtils.trackClick({\n actionName: '공유_클릭',\n page: isFeed ? 'post_archive' : 'post',\n pageMeta: { id: post?.author?.profileId },\n click: {\n layer1: 'post_action',\n layer2: 'share'\n }\n });\n isBlinded\n ? alert('운영정책에 의해 제한된 게시물입니다.')\n : isAdultPost\n ? alert('공유할 수 없는 소식입니다.')\n : onShowModal(SHARE, { post, permalink });\n }}\n >\n \n \n 공유{' '}\n {isBlinded ? 0 : shareCount > 0 && numberWithCommas(shareCount)}\n \n \n )}\n
\n
\n );\n};\n\nexport default PostCountBar;\n","import { isEmpty } from 'lodash';\nimport React from 'react';\n\nexport default function nl2br(text: string = '', removeEmpty = false) {\n if (typeof text === 'undefined' || !text) {\n return '';\n }\n\n let splitByNewLine = text.split('\\n');\n if (removeEmpty) {\n splitByNewLine = splitByNewLine.filter(t => !isEmpty(t));\n }\n const lengthOfSplitByNewLine = splitByNewLine.length;\n return splitByNewLine.map((e, idx) => ({e}{ idx !== (lengthOfSplitByNewLine - 1) ?
: null}
));\n}\n\n","import { Content } from 'models/Common';\nimport React from 'react';\nimport nl2br from './nl2br';\n\nexport const URL_REGEX = /((http|https|ftp):\\/\\/)?(www\\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\\.[a-z]{2,4}\\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/i;\n\nexport function hasUrlString(str: string) {\n if (!str) return false;\n\n const result = str.match(URL_REGEX);\n return !!(result && result.length > 0);\n}\n\nexport function getUrlString(str: string) {\n if (!str) return false;\n const result = str.match(URL_REGEX);\n return !result ? [] : result;\n}\n\nexport function linkify(contents: string | Content[]) {\n if (typeof contents === 'string') {\n return {nl2br(contents)};\n }\n\n return contents.map((e, idx) => {\n const { t, v } = e;\n if (t === 'link') {\n const url =\n v.startsWith('http://') || v.startsWith('https://') ? v : `http://${v}`;\n return (\n \n {nl2br(v)}\n \n );\n }\n return {nl2br(v)};\n });\n}\n\nexport function isBizpluginUrl(url: string): boolean {\n return /:\\/\\/bizplugin/.test(url);\n}\n","export default function getImageUrl(imgUrl: string) {\n // image 가 http일 경우 https 만 허용하는 브라우저에서는 깨져보이기 때문에 처리\n // 추후에 서버에서 https 로 내려주는 방식으로 수정해야 함.\n return imgUrl.replace(/^http:\\/\\//i, '//');\n};\n","import { Image } from 'models/Medium';\nimport React, { CSSProperties, useEffect, useRef, useState } from 'react';\nimport getImageUrl from 'utils/getImageUrl';\nimport { isGif } from 'utils/imageUtils';\ninterface Size {\n width: number | string;\n height: number | string;\n}\ninterface Props {\n image: Image;\n style?: CSSProperties;\n noFrame?: boolean;\n}\nconst ImageHolder: React.FC = ({ image, style, noFrame = false }) => {\n const [containerSize, setContainerSize] = useState({\n width: '100%',\n height: 'auto'\n });\n\n useEffect(() => {\n calculateSize();\n }, []);\n\n const containers = useRef(null);\n const calculateSize = () => {\n if (!containers.current) return;\n const container = containers.current.parentNode as HTMLDivElement;\n const containerRect = container.getBoundingClientRect();\n\n setContainerSize({\n width: containerRect.width,\n height: 'auto'\n });\n };\n\n const { url, largeUrl } = image;\n const backgroundStyle = {\n width: !containerSize.width ? '100%' : containerSize.width,\n height: containerSize.height,\n backgroundColor: image.avg,\n zIndex: -10\n };\n\n if (isGif(image)) {\n return (\n
\n \n {!noFrame && }\n GIF\n
\n );\n }\n\n return (\n
\n \n {!noFrame && }\n
\n );\n};\n\nexport default ImageHolder;\n","import { PostImage } from 'models/Medium';\nimport React, {useMemo} from 'react';\nimport ImageHolder from 'views/components/ImageHolder';\n\ninterface Props {\n image: PostImage\n}\nconst ImageView: React.FC = ({ image }) => {\n const caption = useMemo(() => {\n if (!image || !image.caption) {\n return null;\n }\n return image.caption.map((tv, idx) => (\n \n {tv.v}\n \n ));\n }, [image]);\n\n return (\n
\n
\n \n \n
\n {caption}\n
\n );\n};\n\nexport default ImageView;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport ImageHolder from 'views/components/ImageHolder';\nimport { getImageUrl } from 'utils/imageUtils';\nimport { Image } from 'models/Medium';\n\n// 투명 이미지\nconst IMG_BOX =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVQAAAFUCAYAAAB7ksS1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZGRjcyRkQwQjdDMTFFN0E4NjdEMThGMDI0Mjk4ODciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZGRjcyRkUwQjdDMTFFN0E4NjdEMThGMDI0Mjk4ODciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpERkZGNzJGQjBCN0MxMUU3QTg2N0QxOEYwMjQyOTg4NyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpERkZGNzJGQzBCN0MxMUU3QTg2N0QxOEYwMjQyOTg4NyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqUix+0AAAOJSURBVHja7NQxAQAACMMwwL/nIQLOREKPdpIC4G4kADBUAEMFMFQADBXAUAEMFcBQATBUAEMFMFQADBXAUAEMFcBQATBUAEMFMFQAQwXAUAEMFcBQATBUAEMFMFQAQwXAUAEMFcBQAQwVAEMFMFQAQwXAUAEMFcBQAQwVAEMFMFQAQwXAUAEMFcBQAQwVAEMFMFQAQwUwVAAMFcBQAQwVAEMFMFQAQwUwVAAMFcBQAQwVwFABMFQAQwUwVAAMFcBQAQwVwFABMFQAQwUwVABDBcBQAQwVwFABMFQAQwUwVABDBcBQAQwVwFABMFQAQwUwVABDBcBQAQwVwFABDBUAQwUwVABDBcBQAQwVwFABDBUAQwUwVABDBTBUAAwVwFABDBUAQwUwVABDBTBUAAwVwFABDBXAUAEwVABDBTBUAAwVwFABDBXAUAEwVABDBTBUAAwVwFABDBXAUAEwVABDBTBUAEMFwFABDBXAUAEwVABDBTBUAEMFwFABDBXAUAEMFQBDBTBUAEMFwFABDBXAUAEMFQBDBTBUAEMFwFABDBXAUAEMFQBDBTBUAEMFMFQADBXAUAEMFQBDBTBUAEMFMFQADBXAUAEMFcBQATBUAEMFMFQADBXAUAEMFcBQATBUAEMFMFQAQwXAUAEMFcBQATBUAEMFMFQAQwXAUAEMFcBQATBUAEMFMFQAQwXAUAEMFcBQAQwVAEMFMFQAQwXAUAEMFcBQAQwVAEMFMFQAQwUwVAAMFcBQAQwVAEMFMFQAQwUwVAAMFcBQAQwVwFABMFQAQwUwVAAMFcBQAQwVwFABMFQAQwUwVAAMFcBQAQwVwFABMFQAQwUwVABDBcBQAQwVwFABMFQAQwUwVABDBcBQAQwVwFABDBUAQwUwVABDBcBQAQwVwFABDBUAQwUwVABDBTBUCQAMFcBQAQwVAEMFMFQAQwUwVAAMFcBQAQwVAEMFMFQAQwUwVAAMFcBQAQwVwFABMFQAQwUwVAAMFcBQAQwVwFABMFQAQwUwVABDBcBQAQwVwFABMFQAQwUwVABDBcBQAQwVwFABMFQAQwUwVABDBcBQAQwVwFABDBUAQwUwVABDBcBQAQwVwFABDBUAQwUwVABDBTBUAAwVwFABDBUAQwUwVABDBTBUAAwVwFABDBXAUAEwVABDBTBUAAwVwFABDBXAUAEwVABDBTBUAAwV4M8KMAARGwWlni2legAAAABJRU5ErkJggg==';\n\ninterface Props {\n images: Image[];\n postPath: string;\n tiaraClickHandler?: Function;\n}\nconst ImageFeedView: React.FC = ({\n images,\n postPath,\n tiaraClickHandler\n}) => {\n const firstImage = images[0];\n const isSquare = firstImage.width === firstImage.height;\n const isHorizontal = firstImage.width > firstImage.height;\n\n if (images.length === 1) {\n return (\n
\n
\n
\n {\n if (tiaraClickHandler) {\n tiaraClickHandler(1);\n }\n }}\n >\n \n \n
\n
\n
\n );\n } else {\n const styleNumber = images.length > 4 ? 4 : images.length;\n const viewStyle = () => {\n if (isSquare) {\n return images.length >= 4\n ? `card_square`\n : `card_box${styleNumber}_rect`;\n } else if (!isHorizontal) {\n return 'card_vertical';\n }\n return '';\n };\n return (\n
\n
\n \"\"\n
    \n {images.map((image, index) => {\n if (index >= 4) {\n return null;\n }\n return (\n
  • \n {\n if (tiaraClickHandler) {\n tiaraClickHandler(index + 1);\n }\n }}\n >\n \n 이미지 보기\n \n {index === 3 && images.length > 4 ? (\n \n {`+${images.length - 4}`}\n 개 더보기\n \n ) : (\n ''\n )}\n
\n \n \n );\n })}\n \n
\n \n );\n }\n};\n\nexport default ImageFeedView;\n","import React from 'react';\nimport ImageHolder from 'views/components/ImageHolder';\nimport { IMAGE_TYPE } from 'state/modules/home/constants';\nimport { Image } from 'models/Medium';\nimport { isEmpty } from 'lodash';\n\ninterface Props {\n image?: Image;\n imageType: string;\n}\nconst LinkImage: React.FC = ({ image, imageType }) => {\n if (isEmpty(image) ) {\n return null;\n }\n if (imageType === IMAGE_TYPE.big) {\n return (\n
\n \n
\n );\n } else if (imageType === IMAGE_TYPE.small) {\n return (\n
\n \n
\n );\n }\n\n return null;\n};\n\nexport default LinkImage;\n","import React from 'react';\nimport head from 'lodash/head';\nimport isEmpty from 'lodash/isEmpty';\nimport classNames from 'classnames';\nimport LinkImage from './LinkImage';\nimport { IMAGE_TYPE } from 'state/modules/home/constants';\nimport { Image, LinkScrap } from 'models/Medium';\n\ninterface Props {\n type: string;\n link: LinkScrap;\n tiaraClickHandler?: Function;\n}\nconst LinkView: React.FC = ({ type, link, tiaraClickHandler }) => {\n let imageType = IMAGE_TYPE.none;\n if (!isEmpty(link.images)) {\n imageType =\n head(link.images)!.width > 350 && head(link.images)!.height > 140\n ? IMAGE_TYPE.big\n : IMAGE_TYPE.small;\n }\n\n return (\n \n {\n if (tiaraClickHandler) tiaraClickHandler();\n }}\n >\n \n
\n {link.title}\n {link.description && link.description !== '' ? (\n

{link.description}

\n ) : null}\n {link.host}\n
\n \n \n );\n};\n\nexport default LinkView;\n","import React, { useRef, useState, useEffect, CSSProperties } from 'react';\nimport get from 'lodash/get';\nimport getImageUrl from 'utils/getImageUrl';\nimport { isGif } from 'utils/imageUtils';\nimport { Image } from 'models/Medium';\n\ninterface Props {\n image: Image;\n viewType?: 'vertical' | string;\n cardWidth?: number;\n cardHeight?: number;\n maxWidth?: number;\n noFrame?: boolean;\n noGifBlur?: boolean;\n}\nconst CardImageHolder: React.FC = ({\n image,\n viewType,\n cardWidth,\n cardHeight,\n maxWidth,\n noFrame,\n noGifBlur\n}) => {\n const [containerStyle, setContainerStyle] = useState({\n width: 520,\n height: 520\n });\n const container = useRef(null);\n const ratio = get(image, 'width') / get(image, 'height');\n\n useEffect(() => {\n const calculateImageSize = () => {\n if (!container.current) return;\n const parentContainer = container.current.parentNode as HTMLElement;\n if (!parentContainer) return;\n const parentRect = parentContainer.getBoundingClientRect();\n if (isGif(image)) {\n setContainerStyle({\n width: cardWidth ? cardWidth : parentRect.width,\n height: cardHeight ? cardHeight : parentRect.height\n });\n } else {\n setContainerStyle({\n width: cardWidth ? cardWidth : parentRect.width,\n height: viewType === 'vertical' ? 'auto' : parentRect.width\n });\n }\n };\n\n calculateImageSize();\n window.addEventListener('resize', calculateImageSize);\n\n return () => window.removeEventListener('resize', calculateImageSize);\n }, [image, viewType, cardWidth, cardHeight]);\n\n return (\n \n {isGif(image) && !noGifBlur ? (\n
\n \n \n
\n ) : null}\n 1.0 ? 'auto' : '100%',\n height: ratio > 1.0 ? '100%' : 'auto',\n\n minWidth: '100%',\n minHeight: '100%',\n\n left: '-1000%',\n right: '-1000%',\n top: '-1000%',\n bottom: '-1000%'\n }\n : {\n width: '100%',\n height: 'auto'\n }\n }\n />\n {isGif(image) && noGifBlur && GIF}\n {!noFrame && }\n \n );\n};\n\nexport default CardImageHolder;\n","import React from 'react';\nimport classNames from 'classnames';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport { isBizpluginUrl, linkify } from 'utils/urlUtil';\nimport CardImageHolder from 'views/components/Post/media/CardImageHolder';\nimport { useRouteMatch } from 'react-router-dom';\nimport { isMobile } from 'utils/deviceUtils';\nimport { RootState } from 'state/modules';\nimport { useSelector } from 'react-redux';\n\ninterface Props {\n card: any; // TODO: 카드 모델로 바꾸자\n}\nconst CardView: React.FC = ({ card }) => {\n const { title, contents, button, medium, viewType } = card;\n const match = useRouteMatch();\n\n const mobile = isMobile(\n useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n )\n );\n\n const getButtonHref = () => {\n if (get(button, 'linkType') === 'phone') return null;\n const originalLink = get(button, 'linkTo');\n if (!mobile && isBizpluginUrl(originalLink)) {\n return `${window.location.origin}/${\n (match?.params as any)?.encodedProfileId\n }/bridge?type=none`;\n }\n return originalLink;\n };\n\n return (\n \n
\n \n
\n {title}\n {!isEmpty(contents) ? (\n
{linkify(contents)}
\n ) : null}\n
\n
\n \n );\n};\n\nexport default CardView;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport CardImageHolder from 'views/components/Post/media/CardImageHolder';\n\ninterface Props {\n card: any;\n postPath: string;\n isMultiple?: boolean;\n isLast?: boolean;\n moreCount?: number;\n tiaraClickHandler?: Function;\n}\nconst FeedCard: React.FC = ({ card, postPath, isMultiple, isLast, moreCount, tiaraClickHandler }) => {\n return (\n
\n {\n if (tiaraClickHandler) tiaraClickHandler();\n }}>\n
\n
\n {isMultiple ? (\n \n ) : (\n \n )}\n {isMultiple && isLast && (\n \n {`+${moreCount}`}\n 개 더보기\n \n )}\n
\n
\n \n {isMultiple && isLast\n ? '컨텐츠 더보기'\n : card.type === 'couponCard'\n ? card.coupon.title\n : card.title}\n \n
\n
\n \n
\n );\n};\n\nexport default FeedCard;\n","import React, { useState, useMemo, useRef, useEffect } from 'react';\nimport head from 'lodash/head';\nimport take from 'lodash/take';\nimport drop from 'lodash/drop';\nimport size from 'lodash/size';\nimport isEmtpy from 'lodash/isEmpty';\nimport some from 'lodash/some';\nimport classNames from 'classnames';\nimport FeedCard from 'views/components/Post/feed_media/FeedCard';\nimport { TiaraTrackUtils } from '../../../../utils/tiaraNewHelper';\n\ninterface Props {\n cards: any;\n postPath: string;\n maxCardSize: number;\n pageSize: number;\n prefetchSize: number;\n profileId: string;\n}\nconst CardFeedView: React.FC = ({\n cards,\n postPath,\n maxCardSize,\n pageSize,\n prefetchSize,\n profileId\n}) => {\n const [currentPage, setCurrentPage] = useState(0);\n const [cardListWidth, setCardListWidth] = useState(0);\n\n const viewCards = useMemo(\n () =>\n take(\n drop(take(cards, maxCardSize), currentPage * pageSize - 1),\n pageSize + prefetchSize * 2\n ),\n [currentPage, cards, maxCardSize, pageSize, prefetchSize]\n );\n\n const cardSize = Math.min(cards.length, maxCardSize);\n const hasPrev = currentPage > 0;\n const hasNext = (currentPage + 1) * 2 < cardSize;\n const isFirstPage = !hasPrev;\n const isLastPage = !hasNext;\n\n const prevBtnClicked = () => {\n setCurrentPage(currentPage - 1);\n TiaraTrackUtils.trackClick({\n actionName: '카드뷰_좌_이동',\n page: 'post_archive',\n pageMeta: { id: profileId },\n click: {\n layer1: 'post_body',\n layer2: 'move',\n layer3: 'left'\n }\n });\n };\n\n const nextBtnClicked = () => {\n setCurrentPage(currentPage + 1);\n TiaraTrackUtils.trackClick({\n actionName: '카드뷰_우_이동',\n page: 'post_archive',\n pageMeta: { id: profileId },\n click: {\n layer1: 'post_body',\n layer2: 'move',\n layer3: 'right'\n }\n });\n };\n\n const getLeftPosition = (viewCardLength: number) => {\n if (isFirstPage) {\n return 0;\n } else if (isLastPage && viewCardLength > 2) {\n return cardListWidth - 620;\n } else if (isLastPage && cardListWidth < 380 && viewCardLength < 3) {\n return cardListWidth - 425;\n }\n\n return -170;\n };\n\n useEffect(() => {\n if (!container.current) return;\n const containerWidth = container.current.getBoundingClientRect().width;\n setCardListWidth(containerWidth);\n }, []);\n\n const container = useRef(null);\n const hasCoupon = some(cards, card => card.type === 'couponCard');\n if (cards.length === 1) {\n return (\n
\n {\n TiaraTrackUtils.trackClick({\n actionName: '카드뷰_클릭',\n page: 'post_archive',\n pageMeta: { id: profileId },\n click: {\n layer1: 'post_body',\n layer2: 'cardview'\n }\n });\n }}\n >\n \n
\n {hasCoupon && (\n

\n \n 쿠폰이 포함된 컨텐츠입니다.\n

\n )}\n \n );\n } else {\n return (\n
\n
\n \n {!isEmtpy(viewCards) &&\n viewCards.map((card, index) => {\n const moreCount =\n cards.length - Math.min(cards.length, maxCardSize);\n const isLast =\n index + 1 === Math.min(viewCards.length, maxCardSize) &&\n moreCount > 0;\n\n return (\n
  • \n {\n TiaraTrackUtils.trackClick({\n actionName: '카드뷰_클릭',\n page: 'post_archive',\n pageMeta: { id: profileId },\n click: {\n layer1: 'post_body',\n layer2: 'cardview',\n ordNum: index + 1\n }\n });\n }}\n />\n
  • \n );\n })}\n \n
    \n \n 이전\n \n \n 다음\n \n
    \n
    \n {hasCoupon && (\n

    \n \n 쿠폰이 포함된 컨텐츠입니다.\n

    \n )}\n
    \n );\n }\n};\n\nexport default CardFeedView;\n","export function dotFormat(anyDate: number | Date | string) {\n const date = new Date(anyDate);\n const year = date.getFullYear();\n const month =\n date.getMonth() < 9 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1;\n const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate();\n return `${year}.${month}.${day}`;\n}\n\nexport function wordFormat(anyDate: number | Date | string | undefined) {\n if (typeof anyDate !== 'undefined') {\n const date = new Date(anyDate);\n const year = date.getFullYear();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n return `${year}년 ${month}월 ${day}일`;\n }\n}\n","import React from 'react';\nimport { dotFormat } from 'utils/dateFormat';\nimport { linkify } from 'utils/urlUtil';\nimport CardImageHolder from 'views/components/Post/media/CardImageHolder';\n\ninterface Props {\n coupdonCard: any; // TODO: 쿠폰카드 모델로 바꾸자\n}\n\nconst CouponCardView: React.FC = ({ coupdonCard }) => {\n const {\n coupon,\n coupon: { content }\n } = coupdonCard;\n\n return (\n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n {coupon.title}\n {`응모기간 : ${dotFormat(\n coupon.entryStartAt\n )}~${dotFormat(coupon.entryEndAt)}`}\n
    \n
    \n
    \n {linkify(content)}\n
    \n \n 쿠폰응모는 카카오톡 앱에서 할 수 있습니다.\n \n
    \n
    \n
    \n );\n};\n\nexport default CouponCardView;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport get from 'lodash/get';\nimport includes from 'lodash/includes';\nimport { Video } from 'models/Medium';\n\nconst RATIO = 16 / 9;\n\ninterface Props {\n video: Video;\n}\nconst VideoPlayer: React.FC = ({ video }) => {\n const [containerStyle, setContainerStyle] = useState({\n width: 520,\n height: 520 / RATIO\n });\n const container = useRef(null);\n\n useEffect(() => {\n if (!container.current) return;\n\n const calculateSize = () => {\n if (!container.current) return;\n const parentContainer = container.current.parentNode as HTMLElement;\n if (!parentContainer) return;\n const parentContainerRect = parentContainer.getBoundingClientRect();\n setContainerStyle({\n width: parentContainerRect.width,\n height: parentContainerRect.width / RATIO\n });\n };\n\n calculateSize();\n window.addEventListener('resize', calculateSize);\n\n return () => window.removeEventListener('resize', calculateSize);\n }, [container]);\n\n const playPath =\n (includes(get(video, 'playUrl'), 'sandbox')\n ? 'https://sandbox-tv.kakao.com'\n : 'https://tv.kakao.com') + '/embed/player';\n const videoSrc = `${playPath}/${\n !get(video, 'clipLinkId') || get(video, 'clipLinkId') === 0\n ? 'livelink/' + get(video, 'liveLinkId')\n : 'cliplink/' + get(video, 'clipLinkId')\n }?service=kakao_talkplus&play_loc=kakao_talkplus&autoplay=true`;\n return (\n
    \n e.preventDefault()}\n >\n
    \n \n
    \n \n
    \n );\n};\n\nexport default VideoPlayer;\n","import { Video } from 'models/Medium';\nimport React from 'react';\nimport VideoPlayer from 'views/components/Post/media/VideoPlayer';\n\ninterface Props {\n video: Video;\n}\nconst VideoView: React.FC = ({ video }) => {\n return ;\n};\n\nexport default VideoView;\n","import React, { useState, useMemo, useRef, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport get from 'lodash/get';\nimport getImageUrl from 'utils/getImageUrl';\nimport VideoPlayer from 'views/components/Post/media/VideoPlayer';\nimport { Video } from 'models/Medium';\n\nconst RATIO = 16 / 9;\n\ninterface Props {\n video: Video;\n tiaraClickHandler: Function;\n}\nconst VideoFeedView: React.FC = ({ video, tiaraClickHandler }) => {\n const [isPlaying, setIsPlaying] = useState(false);\n const [containerStyle, setContainerStyle] = useState({\n width: 520,\n height: 520 / RATIO\n });\n const thumbnailStyle = useMemo(() => {\n return { width: 'auto', height: containerStyle.height };\n }, [containerStyle]);\n\n const handlePlayButtonClicked = () => {\n setIsPlaying(true);\n if (tiaraClickHandler) {\n tiaraClickHandler();\n }\n };\n\n const container = useRef(null);\n\n useEffect(() => {\n if (!container.current) {\n return;\n }\n const calculateSize = () => {\n if (!container.current) return;\n const parentContainer = container.current.parentNode as HTMLElement;\n if (!parentContainer) return;\n const parentContainerRect = parentContainer.getBoundingClientRect();\n setContainerStyle({\n width: parentContainerRect.width,\n height: parentContainerRect.width / RATIO\n });\n };\n\n calculateSize();\n window.addEventListener('resize', calculateSize);\n\n return () => window.removeEventListener('resize', calculateSize);\n }, [container, isPlaying]);\n\n if (isPlaying) {\n return (\n
    \n \n
    \n );\n }\n\n const isLive = get(video, 'liveLinkId') > 0;\n return (\n
    \n
    \n \n
    \n \n \n
    \n {isLive && LIVE}\n Play\n \n
    \n
    \n );\n};\n\nexport default VideoFeedView;\n","/**\n * 신고조치 되어서 제재된 포스트인지 여부\n * 프로필이 제재되어도 blindType에 값이 들어온다 (B)\n * @param {String} blindType 제재구분\n */\nexport function isBlindPost(blindType = '') {\n return !!blindType.trim();\n}\n\nexport function isBlindContentType(blindType?: string) {\n return 'C' === blindType;\n}\n\nexport function isBlindTemporaryType(blindType?: string) {\n return 'T' === blindType;\n}\n\n/**\n * 포스트 상세의 내용만 제한하는 경우를 구분하기 위해 사용\n * @param {String} blindType 제재구분. C: 본문, T: 임시\n */\nexport function isBlindPostContentOnly(blindType?: string) {\n return isBlindContentType(blindType) || isBlindTemporaryType(blindType);\n}\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { Link } from 'react-router-dom';\nimport head from 'lodash/head';\nimport { linkify } from 'utils/urlUtil';\nimport ImageView from 'views/components/Post/media/ImageView';\nimport ImageFeedView from 'views/components/Post/feed_media/ImageFeedView';\nimport LinkView from 'views/components/Post/media/LinkView';\nimport CardView from 'views/components/Post/media/CardView';\nimport CardFeedView from 'views/components/Post/feed_media/CardFeedView';\nimport CouponCardView from 'views/components/Post/media/CouponCardView';\nimport VideoView from 'views/components/Post/media/VideoView';\nimport VideoFeedView from 'views/components/Post/feed_media/VideoFeedView';\nimport { wordFormat } from 'utils/dateFormat';\nimport {\n isBlindContentType,\n isBlindPostContentOnly,\n isBlindTemporaryType\n} from 'utils/postUtil';\nimport { Post } from 'models/Post';\nimport { Image, LinkScrap, Medium, PostImage, Video } from 'models/Medium';\nimport { TiaraTrackUtils } from '../../../utils/tiaraNewHelper';\n\nconst TEXT_LINE_HEIGHT = 22;\nconst TEXT_LINE_WITH_MEDIA_PC = 2;\nconst TEXT_LINE_NO_MEDIA_PC = 7;\n\ninterface Props {\n type: string;\n post: Post;\n postPath: string;\n}\n\ninterface TextStyle {\n height?: number;\n display: string | undefined;\n overflow: string | undefined;\n hasMoreView: boolean;\n}\n\nconst PostContent: React.FC = ({ type, post, postPath }) => {\n const { title, media } = post;\n const [textStyle, setTextStyle] = useState({\n display: undefined,\n overflow: undefined,\n hasMoreView: false\n });\n\n const getDescription = (post: Post) => {\n return post.contents\n .filter(tv => tv.t !== 'sticker')\n .map(tv => tv.v)\n .join('');\n };\n\n const isEmptyMedia = (media: Medium[]) => {\n return media === undefined || media.length === 0;\n };\n\n const titleContainer = useRef(null);\n const textContainer = useRef(null);\n\n const calculateTextStyle = useCallback(() => {\n if (type === 'feed') {\n const nonMedia = !media || isEmptyMedia(media);\n const maxHeight = nonMedia\n ? TEXT_LINE_HEIGHT * TEXT_LINE_NO_MEDIA_PC\n : TEXT_LINE_HEIGHT * TEXT_LINE_WITH_MEDIA_PC;\n\n if (!titleContainer.current && !textContainer.current) {\n return;\n }\n\n const titleContainerWidth: number = titleContainer.current!.getBoundingClientRect()\n .width;\n const textContainerWidth = textContainer.current!.getBoundingClientRect()\n .width;\n const textContainerHeight = textContainer.current!.getBoundingClientRect()\n .height;\n\n const nonText =\n !linkify(post.contents) || getDescription(post).trim() === '';\n const textLineNumber = textContainerHeight / TEXT_LINE_HEIGHT;\n\n const isTitleOver = textContainerWidth < titleContainerWidth;\n const isTextOver = nonMedia\n ? textLineNumber > TEXT_LINE_NO_MEDIA_PC\n : textLineNumber > TEXT_LINE_WITH_MEDIA_PC;\n\n const textHeight = nonText ? 0 : Math.min(maxHeight, textContainerHeight);\n\n setTextStyle({\n height: textHeight,\n display: textContainerHeight > maxHeight ? 'inline-block' : undefined,\n overflow: textContainerHeight > maxHeight ? 'hidden' : undefined,\n hasMoreView: nonText ? isTitleOver : isTextOver\n });\n }\n }, [type, media, post, titleContainer, textContainer]);\n\n useEffect(() => {\n calculateTextStyle();\n window.addEventListener('resize', calculateTextStyle);\n\n return function cleanup() {\n window.removeEventListener('resize', calculateTextStyle);\n };\n }, [calculateTextStyle]);\n\n const isBlind = isBlindPostContentOnly(post.blindType);\n\n const renderFeedMedia = (post: Post) => {\n if (post.type === 'image') {\n return (\n {\n if (isFeed) {\n TiaraTrackUtils.trackClick({\n actionName: '이미지썸네일_클릭',\n page: 'post_archive',\n pageMeta: { id: post?.author?.profileId },\n click: {\n layer1: 'post_body',\n layer2: 'thumb',\n ordNum: clickIdx\n }\n });\n }\n }}\n />\n );\n }\n if (post.type === 'link') {\n const link = head(post.media)! as LinkScrap;\n return (\n
    \n {' '}\n {\n if (isFeed) {\n TiaraTrackUtils.trackClick({\n actionName: '스크랩url_클릭',\n pageMeta: { id: post?.author?.profileId },\n page: 'post_archive',\n click: {\n layer1: 'post_body',\n layer2: 'scrap_url'\n }\n });\n }\n }}\n />{' '}\n
    \n );\n }\n if (post.type === 'card') {\n const MAX_CARD_SIZE = 6;\n const PAGE_SIZE = 2;\n const PREFETCH_SIZE = 2;\n\n return (\n \n );\n }\n if (post.type === 'video') {\n return (\n {\n if (isFeed) {\n TiaraTrackUtils.trackClick({\n actionName: '영상재생_클릭',\n page: 'post_archive',\n pageMeta: { id: post?.author?.profileId },\n click: {\n layer1: 'post_body',\n layer2: 'play'\n }\n });\n }\n }}\n />\n );\n }\n };\n\n const renderMedia = (post: Post) => {\n let result: JSX.Element[] = [];\n post.media?.forEach((medium, index) => {\n if (!medium) {\n console.error('MEDIUM NOT FOUND!!', post.id, index);\n return null;\n }\n if (medium.type === 'image') {\n result.push();\n }\n if (medium.type === 'link') {\n result.push(\n \n );\n }\n if (medium.type === 'card') {\n result.push();\n }\n if (medium.type === 'couponCard') {\n result.push();\n }\n if (medium.type === 'video') {\n result.push();\n }\n });\n\n return
    {result}
    ;\n };\n\n const isFeed = type && type === 'feed';\n\n return (\n
    \n
    \n \n {isBlind ? '' : title}\n \n {isFeed ? (\n \n \n \n \n {textStyle.hasMoreView && (\n {\n if (isFeed) {\n TiaraTrackUtils.trackClick({\n actionName: '포스트내용_클릭',\n page: 'post_archive',\n pageMeta: { id: post?.author?.profileId },\n click: {\n layer1: 'post_body',\n layer2: 'contents'\n }\n });\n }\n }}\n >\n …더보기\n \n )}\n

    \n ) : (\n

    \n \n

    \n )}\n
    \n {!isBlind &&\n !isEmptyMedia(post.media) &&\n (isFeed ? renderFeedMedia(post) : renderMedia(post))}\n
    \n );\n};\n\nconst PostContentText: React.FC<{ post: Post }> = ({ post }) => {\n const { blindType, blindedAt, contents } = post;\n // 블라인드\n if (isBlindContentType(blindType)) {\n return (\n <>\n 해당 게시글은 카카오톡 채널 운영정책에서 제한하고 있는 내용이 포함되어\n 있음이 신고되어 {`${wordFormat(new Date(blindedAt!))}`}에 블라인드\n 조치되었습니다.\n
    \n
    \n [블라인드 조치 대상]
    \n • 음란성/도박성 등 불법성 게시물
    \n • 청소년 유해물
    \n • 비방/욕설이 포함된 게시물
    \n • 도배(친구신청 및 공유요청 등)게시물
    \n • 단순 광고,홍보성 게시물\n
    \n
    \n 채널은 서비스 운영정책 및 청소년 보호 법률 준수를 위해 게시글이 블라인드\n 될 수 있습니다.\n \n );\n }\n\n // 임시 조치\n if (isBlindTemporaryType(blindType)) {\n return (\n <>\n 해당 게시글은 권리침해신고되어 {`${wordFormat(new Date(blindedAt!))}`}에\n 임시조치되었습니다.\n
    \n
    \n 1. 권리침해 신고글 임시조치 안내
    \n 권리침해신고는 '정보통신망법 제44조의 2(정보의 삭제요청 등)'과 저작권법\n 103조(복제, 전송의 중단)에 의거하여 운영되는 서비스입니다.\n
    \n
    \n 2. 권리침해 신고 대상
    \n • 명예훼손 및 개인정보침해
    \n • 저작권 침해\n
    \n
    \n 권리침해 신고안내 (\n \n http://www.kakao.com/policy/right\n \n )\n \n );\n }\n\n return <>{linkify(contents)};\n};\n\nexport default PostContent;\n","import React, { useState } from 'react';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport numberWithCommas from 'utils/numberFormat';\nimport ProfileImage from 'views/components/ProfileImage';\nimport { Profile } from 'models/Profile';\nimport { Post } from 'models/Post';\nimport {\n ADD_FRIEND,\n BLOCK_FRIEND\n} from '../../../state/modules/home/constants';\nimport { toast } from 'react-hot-toast';\nimport CopyToClipboard from 'react-copy-to-clipboard';\n\ninterface Props {\n profile: Profile;\n post: Post;\n onShowModal: Function;\n layerCode: Function;\n}\n\nconst ProfileBanner: React.FC = ({\n profile,\n post,\n onShowModal,\n layerCode\n}) => {\n const { profileId, profileImage, name, statusMessage } = profile;\n const hasProfileImage = !isEmpty(profileImage);\n const hasStatusMessage =\n statusMessage !== 'undefined' && statusMessage !== '';\n const friendCount = get(profile, 'friendCount', 0);\n const [showAdditionalBtn, setShowAdditionalBtn] = useState(false);\n const link = `/${profileId}/friend_direct?post_id=${post.id}`;\n const currentUrl = window.location.href;\n const blockFriendlink = `/${profile?.profileId}/friend_block?returl=${currentUrl}%3FcompletedLayer=blockfriend`;\n const spamReportUrl =\n currentUrl.substr(0, currentUrl.lastIndexOf('/')) + '/spam_report';\n const openSpamReportLink = () => {\n const loginRedirectUrl = spamReportUrl;\n const logoutRedirectUrl = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/login?continue=`;\n setShowAdditionalBtn(!showAdditionalBtn);\n window.open(\n `${process.env.REACT_APP_API_BASE_URL}/web/profiles/${profile?.profileId}/logincheck?logoutRedirectUrl=${logoutRedirectUrl}&loginRedirectUrl=${loginRedirectUrl}`,\n '_blank'\n );\n };\n\n return (\n
    \n \n
    \n
    \n \n {name}\n \n {hasStatusMessage && (\n {statusMessage}\n )}\n {friendCount > 0 && (\n \n 친구{' '}\n {numberWithCommas(friendCount)}명\n \n )}\n
    \n
    \n
    \n
    \n {post.author.isFriend && (\n \n onShowModal(BLOCK_FRIEND, { profile, blockFriendlink })\n }\n >\n 채널차단\n \n )}\n {!post.author.isFriend && (\n onShowModal(ADD_FRIEND, { profile, link })}\n >\n 채널추가\n \n )}\n
    \n
    \n setShowAdditionalBtn(!showAdditionalBtn)}\n >\n 더보기\n \n \n
      \n
    • \n \n
    • \n
    • \n {\n toast('URL을 복사하였습니다.');\n setShowAdditionalBtn(!showAdditionalBtn);\n }}\n >\n \n \n
    • \n
    \n
    \n
    \n
    \n \n );\n};\n\nexport default ProfileBanner;\n","import React from 'react';\nimport {Post} from 'models/Post';\nimport {ADULT_AUTH_VALID_TYPE} from 'state/modules/home/constants';\nimport get from \"lodash/get\";\n\ninterface Props {\n type: string,\n post: Post\n}\n\nconst PostAgeCover: React.FC = ({ type, post}) => {\n const profile = post.author;\n const isFeed = type === 'feed';\n const validType = get(profile, 'authInfo.validType', 'undefined');\n const ageAuthUrl = get(profile.authInfo, 'ageAuthUrl', '');\n const loginPath = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/login?continue=`;\n\n const renderCoverFeedView = () => {\n if (validType === ADULT_AUTH_VALID_TYPE.UNAUTHORIZED\n || validType === ADULT_AUTH_VALID_TYPE.UNAUTHORIZED_AGE) {\n return (\n
    \n
    \n \n
    \n 연령 확인이 필요합니다 \n

    20세 이상만 확인할 수 있습니다.
    본인인증을 진행해주세요. (최초 1회)

    \n \n
    \n );\n\n } else if (validType === ADULT_AUTH_VALID_TYPE.LOWER_AGE_LIMIT) {\n return (\n
    \n
    \n \n
    \n 연령 제한으로 확인할 수 없습니다 \n

    본인인증 정보 기준
    20세 이상만 확인할 수 있습니다.

    \n \n
    \n );\n\n } else { // not found\n const returnUrl = profile.permalink;\n return (\n
    \n
    \n \n
    \n 로그인 후 이용해주세요 \n

    20세 이상 인증이 필요합니다.

    \n \n
    \n );\n }\n }\n\n const renderCoverDetailView = () => {\n if (validType === ADULT_AUTH_VALID_TYPE.UNAUTHORIZED\n || validType === ADULT_AUTH_VALID_TYPE.UNAUTHORIZED_AGE) {\n return (\n
    \n
    \n \n
    \n 연령 확인이 필요합니다 \n

    20세 이상만 확인할 수 있습니다.
    본인인증을 진행해주세요. (최초 1회)

    \n \n
    \n );\n\n } else if (validType === ADULT_AUTH_VALID_TYPE.LOWER_AGE_LIMIT) {\n return (\n
    \n
    \n \n
    \n 연령 제한으로 확인할 수 없습니다 \n

    본인인증 정보 기준
    20세 이상만 확인할 수 있습니다.

    \n \n
    \n );\n\n } else { // not found\n const returnUrl = post.permalink;\n return (\n
    \n
    \n \n
    \n 로그인 후 이용해주세요 \n

    20세 이상 인증이 필요합니다.

    \n \n
    \n );\n }\n }\n\n return ( isFeed ? renderCoverFeedView() : renderCoverDetailView() );\n};\n\nexport default PostAgeCover;\n","import React from 'react';\nimport classNames from 'classnames';\nimport PostProfileHeader from 'views/components/Post/PostProfileHeader';\nimport PostCountBar from 'views/components/Post/PostCounterBar';\nimport PostContent from 'views/components/Post/PostContent';\nimport ProfileBanner from './ProfileBanner';\nimport { Post } from 'models/Post';\nimport { ADULT_AUTH_VALID_TYPE } from '../../../state/modules/home/constants';\nimport PostAgeCover from 'views/components/Post/PostAgeCover';\nimport {\n isBlindContentType,\n isBlindTemporaryType\n} from '../../../utils/postUtil';\n\ninterface Props {\n type: string;\n post: Post;\n onShowModal: Function;\n layerCode: Function;\n sortIdx?: number;\n}\n\nconst PostCard: React.FC = ({\n type,\n post,\n onShowModal,\n layerCode,\n sortIdx\n}) => {\n const profilePath = `/${post.author.profileId}`;\n const postPath = `/${post.author.profileId}/${post.id}`;\n const isFeed = type === 'feed';\n const blindType = post.blindType;\n const isAgeCovered =\n post.adultOnly &&\n post.author.authInfo.validType !== ADULT_AUTH_VALID_TYPE.VERIFIED;\n // 예외 blind의 경우는 cover view로 노출되면 안됨\n const isNormalView =\n !isAgeCovered ||\n isBlindContentType(blindType) ||\n isBlindTemporaryType(blindType);\n\n const renderCoverView = () => {\n return (\n \n \n \n \n );\n };\n\n const renderContentView = () => {\n return (\n \n \n \n {!isFeed && (\n \n )}\n \n \n );\n };\n return isNormalView ? renderContentView() : renderCoverView();\n};\n\nexport default PostCard;\n","import React from 'react';\n\ninterface Props {\n hasNext: boolean;\n}\nconst FeedFooter: React.FC = ({ hasNext }) => {\n return hasNext ? (\n \n 로딩중입니다.\n \n ) : (\n
    \n Copyright\n 카카오톡 채널\n
    \n );\n};\n\nexport default FeedFooter;\n","import React from 'react';\nimport EmptyPost from 'views/components/EmptyPost';\nimport PostCard from 'views/components/Post';\nimport FeedFooter from 'views/components/FeedFooter';\nimport { Profile } from 'models/Profile';\nimport { Post } from 'models/Post';\n\ninterface Props {\n profile: Profile;\n posts: Post[];\n hasNext: boolean;\n onShowModal: Function;\n layerCode: Function;\n}\n\nconst Feed: React.FC = ({\n profile,\n posts,\n hasNext,\n onShowModal,\n layerCode\n}) => {\n if (posts.length === 0) {\n return ;\n }\n\n return (\n
    \n {posts.map((post, sortIdx) => (\n \n ))}\n \n
    \n );\n};\n\nexport default Feed;\n","// import { TabType } from 'views/components/Tab';\nimport { Image } from './Medium';\n\nexport interface Profile {\n searchable: string; // 'ON';\n coverImage: Image;\n siteUrl: string; // '';\n name: string; // '연서아범';\n permalink: string; // 'http://sandbox-pf.kakao.com/_jzM';\n phone: string; // '';\n postCount: number;\n isAdult: boolean; // false;\n isBlocked: boolean;\n isChatBot: boolean;\n isOfficial: boolean;\n isOpen: boolean;\n friendCount: number; // 26;\n isFriend?: boolean;\n friendAt?: number;\n visible: string; // 'ON';\n profileImage: Image;\n statusMessage: string; // '안녕하세요안녕하세요안녕하세요';\n verificationType: string; // 'NONE';\n verificationGuide: VerificationGuide;\n id: number;\n uuid: string; // '@연서아범2';\n category: ProfileCategory;\n profileBot: ProfileBot;\n profileId: string; // '_xcBxnxah';\n spamLevel: number; // 0;\n businessPartnerInfo?: any;\n email: string;\n address: any;\n call2action?: Call2Action;\n homeDefaultTab: TabType;\n authInfo: AuthInfo;\n isPhoneCharged: boolean;\n // posts\n}\n\nexport enum TabType {\n hometab = 'hometab',\n post = 'post'\n}\n\nexport interface VerificationGuide {\n title: string;\n msg: string;\n metaType: string;\n}\n\nexport interface Call2Action {\n type: Call2ActionType;\n urls?: Call2ActionUrl;\n tel?: string;\n connected?: boolean;\n}\n\nexport enum Call2ActionType {\n more = 'more',\n app = 'app',\n order = 'order',\n store = 'store',\n membership = 'membership',\n qr_code = 'qr_code',\n shopping_mall = 'shopping_mall'\n}\n\nexport interface Call2ActionUrl {\n web: string;\n androidInstall?: string;\n androidExecute?: string;\n iosInstall?: string;\n iosExecute?: string;\n}\n\nexport interface ProfileCategory {\n id: number; // 24060;\n parentId: number; // 24000;\n name: string; // '대학교/대학원';\n createdAt: number; // 1513319059000;\n isActive: boolean; // true;\n isVisible: boolean; // true;\n parentName: string; // '교육';\n}\n\nexport interface ProfileBot {\n id: number; //26081331\n botType: 'kwd' | 'ext';\n isBotBuilder: boolean; // false\n salt: string; // \"1\"\n sendMessageFlag: boolean; // flag\n status: string; // 'R'\n createdAt: number; // 1478096816000\n updatedAt: number; // 1528670570000\n}\n\nexport interface BusinessPartnerInfo {\n identityNumber: string; // '120-86-39351'\n name: string; // '(주) 디엠씨미디어'\n businessItem: string; // '광고마케팅서비스대행및제작, 전자상거래업 외'\n type: string; // 'BUSINESS'\n typeItem: string; // '서비스, 소매'\n zipcode: string; //'06069'\n representativeName: string; //'이준희'\n address: string;\n}\n\nexport interface AuthInfo {\n ageAuthUrl: string; // 'https://auth.kakao.com/ageauths/main.html?auth_level=20&auth_from=pf&return_url=http://pf.kakao.com/_xcBxnxah'\n validType: string;\n}\n","import { TabType } from 'models/Profile';\nimport React from 'react';\nimport { Link } from 'react-router-dom';\n\ninterface Props {\n tab: TabType;\n changeTab: Function;\n}\n\nconst Tab: React.FC = ({ tab, changeTab }) => {\n return (\n
    \n 소식 메뉴\n
      \n
    • \n \n 홈\n \n
    • \n
    • \n \n 소식\n \n
    • \n
    \n
    \n );\n};\n\nexport default Tab;\n","const openWithApp = (\n osCode: string,\n scheme: string,\n customUrl: string,\n packageName: string,\n appStoreUrl: string,\n useIntent: boolean = true\n) => {\n const intentUrl = `intent://${customUrl}#Intent;scheme=${scheme};package=${packageName};end`;\n const customScheme = `${scheme}://${customUrl}`;\n if (osCode === 'Android') {\n window.location.href = useIntent ? intentUrl : customScheme;\n } else if (osCode === 'iOS') {\n const clickedAt = new Date();\n // 카카오톡내에서 실행된 경우 app 이 설치된 것으로 판단하고 appStoreUrl 띄우지 않음\n const uagent = navigator.userAgent.toLocaleLowerCase();\n if (uagent.search('kakaotalk') < 0) {\n setTimeout(function() {\n if (new Date().getTime() - clickedAt.getTime() < 2000) {\n // PFPROJ-306: 톡으로 이동후 다시 appstore로 넘어가는 현상때문에 임시로 주석처리\n //window.location = appStoreUrl;\n }\n }, 1500);\n }\n window.location.href = customScheme;\n } else {\n alert(`지원하지 않는 플랫폼입니다. (${osCode})`);\n }\n};\n\nexport default openWithApp;\n","import React from 'react';\nimport get from 'lodash/get';\nimport openWithApp from 'utils/openWithApp';\nimport { androidInstallUrl, iosInstallUrl } from 'state/modules/home/constants';\nimport { Profile } from 'models/Profile';\nimport { Post } from 'models/Post';\nimport { TiaraTrackUtils } from 'utils/tiaraNewHelper';\n\ninterface Props {\n profile?: Profile;\n post?: Post;\n postArchive?: boolean;\n useragent: any;\n}\nconst OpenAppButton: React.FC = ({\n profile,\n post,\n postArchive,\n useragent\n}) => {\n const deviceOS = get(useragent, ['result', 'os', 'name']);\n const installUrl = deviceOS === 'Android' ? androidInstallUrl : iosInstallUrl;\n const packageName = 'com.kakao.talk';\n let schemeHost = (profile && `plusfriend/home/${profile.id}`) ?? '';\n if (profile && postArchive) {\n schemeHost = `plusfriend/home/${profile.id}/archive?type=posts`;\n } else if (post) {\n schemeHost = `plusfriend/post/${post.author.id}/${post.id}?action=add_channel`;\n }\n const scheme =\n deviceOS === 'Android'\n ? `kakaoplus://${schemeHost}`\n : `${process.env.REACT_APP_PF_CUSTOM_SCHEME}://${schemeHost}`;\n\n return (\n
    \n \n
    \n );\n};\n\nexport default OpenAppButton;\n","import { Post } from 'models/Post';\nimport { Profile } from 'models/Profile';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'state/modules';\nimport OpenAppButton from 'views/components/OpenAppButton';\n\ninterface Props {\n profile?: Profile;\n post?: Post;\n postArchive?: boolean;\n}\nconst Gnb: React.FC = ({ profile, post, postArchive }) => {\n const useragent = useSelector((state: RootState) => state.home.useragent);\n return (\n
    \n

    \n 카카오톡 채널\n

    \n
    \n {(post || profile) && (\n \n )}\n
    \n
    \n );\n};\n\nexport default Gnb;\n","import { useEffect } from 'react';\nimport merge from 'lodash/merge';\n\nconst ifTiaraExists = (fn: Function) => (...args: any[]) => window.TiaraTracker && fn(...args);\n\nconst getDefaultOpions = () => {\n const tiaraPhase =\n process.env.REACT_APP_PHASE === 'sandbox' ? 'dev' : 'production';\n\n return {\n svcDomain: 'pf.kakao.com',\n deployment: tiaraPhase\n };\n};\n\nexport const initTiara = ifTiaraExists((options: any) => {\n const opts = merge(getDefaultOpions(), options);\n window.TiaraTracker.getInstance()\n .init(opts)\n .setSection('webview');\n});\n\nexport const useTiara = ifTiaraExists(({ page }: any) => {\n useEffect(() => {\n setTiaraPage(page);\n tiaraTrackPage(page + '_view');\n }, [page]);\n\n useEffect(() => {\n window.addEventListener('mousedown', onTiaraTrackClick);\n\n return () => window.removeEventListener('mousedown', onTiaraTrackClick);\n });\n\n return;\n});\n\nconst setTiaraPage = (page: any) => window.TiaraTracker.getInstance().setPage(page);\n\nconst tiaraTrackPage = (trackPage: any) => {\n window.TiaraTracker.getInstance()\n .trackPage(trackPage)\n .track();\n};\n\nconst onTiaraTrackClick = (e: any) => {\n const clickInfo = window.TiaraTracker.getClickInfo(e);\n if (!clickInfo) {\n return;\n }\n const { click, eventMeta } = clickInfo;\n if (click.click_url) {\n tiaraTrackClick(click, eventMeta);\n }\n};\n\nconst tiaraTrackClick = (\n click = {},\n eventMeta = {},\n customProps = {},\n actionKind = ''\n) => {\n window.TiaraTracker.getInstance()\n .trackEvent('click')\n .actionKind(actionKind)\n .eventMeta(eventMeta)\n .click(click)\n .customProps(customProps)\n .track();\n};\n","import { Call2Action } from './Profile';\n\nexport enum LeverageTabModuleType {\n banner = 'banner',\n commerce = 'commerce',\n bottom_button = 'bottom_button',\n notice = 'notice',\n coupon = 'coupon',\n simple_post = 'simple_post',\n chat = 'chat',\n keyword_chat = 'keyword_chat',\n map = 'map',\n text_info = 'text_info',\n business = 'business'\n}\n\ninterface LeverageTabContent {\n sort: number;\n}\n\nexport interface LeverageTab {\n items: Array;\n floatingItems: Array;\n kakaoBusinessInfo: any; // TODO\n}\n\nexport interface LeverageTabModule {\n type: LeverageTabModuleType;\n contents: Array; // TODO\n displayCols: number;\n header: LeverageTabHeader;\n buttons: Array;\n}\n\nexport interface LeverageTabHeader {\n title: LeverageTabText;\n button: LeverageTabButton;\n image: LeverageTabImage;\n link: Call2Action;\n}\n\nexport interface LeverageTabItems extends LeverageTabContent {\n items: Array;\n}\n\nexport interface LeverageTabButton extends LeverageTabContent {\n title: LeverageTabText;\n link: LeverageTabLink;\n bgColor: string;\n opacity: number; //0~1.0\n}\n\nexport interface LeverageTabImage {\n imageUrl: string;\n link: LeverageTabLink;\n width: number;\n height: number;\n}\n\nexport interface LeverageTabLink {\n url: string;\n andUrl: string;\n iosUrl: string;\n image: LeverageTabImage;\n host: string;\n type: string;\n}\n\nexport interface LeverageTabText {\n text: string;\n link?: LeverageTabLink;\n isStrike?: boolean;\n isBold?: boolean;\n fontSize?: number;\n fontColor?: string;\n bgColor?: string;\n isCharged?: boolean;\n}\n\nexport interface LeverageTabNotice extends LeverageTabContent {\n postId: number;\n title: LeverageTabText;\n description: LeverageTabText;\n link: LeverageTabLink;\n media: LeverageTabMedia;\n}\n\nexport interface LeverageTabCoupon extends LeverageTabContent {\n id: number;\n status: 'draft' | 'end' | 'upload' | 'fail' | 'done' | 'complete' | 'expired';\n entryStartAt: number;\n entryEndAt: number;\n usedStartAt: number;\n usedEndAt: number;\n isUsed?: boolean;\n isDownloaded?: boolean;\n title: LeverageTabText;\n link: LeverageTabLink;\n image: LeverageTabImage;\n}\n\nexport interface LeverageTabBadge {\n title: string;\n subTitle: string;\n bgColor: string;\n}\n\nexport interface LeverageTabCurrency {\n unit: string; // 원\n position: number;\n}\n\nexport interface LeverageTabPrice {\n amount: number;\n amountPrefix: string;\n amountSuffix: string;\n discountAmount: number;\n discountRate: number;\n}\n\nexport interface LeverageTabMedia {\n type: 'image' | 'video' | 'link' | 'card';\n image: LeverageTabImage;\n link: LeverageTabLink;\n video: LeverageTabVideo;\n count: number;\n}\n\nexport interface LeverageTabVideo {\n duration: number;\n thumbnail: LeverageTabImage;\n playUrl: string;\n isLive: boolean;\n}\n\nexport interface LeverageTabCommerce extends LeverageTabContent {\n title: LeverageTabText;\n link: LeverageTabLink;\n image: LeverageTabImage;\n badge: LeverageTabBadge;\n currency: LeverageTabCurrency;\n price: LeverageTabPrice;\n discountedPrice: LeverageTabPrice;\n buttons: Array;\n}\n\nexport interface LeverageTabSimplePost extends LeverageTabContent {\n id: number;\n uuid: string;\n title: LeverageTabText;\n link: LeverageTabLink;\n media: LeverageTabMedia;\n}\n\nexport interface LeverageTabChat extends LeverageTabContent {\n consultFlag: boolean;\n isChatBot: boolean;\n bizchatFlag: boolean;\n weekFlags: string;\n startAt: string;\n endAt: string;\n botStartMessage: string;\n keywords: Array;\n timeGroups: Array;\n}\n\nexport interface LeverageTabChatKeyword extends LeverageTabContent {\n keyword: string;\n}\n\nexport interface LeverageTabMap extends LeverageTabContent {\n address: LeverageTabText;\n localCid: number;\n localName: string;\n x: number;\n y: number;\n}\n\nexport interface LeverageTabInfo extends LeverageTabContent {\n title: LeverageTabText;\n description: LeverageTabText;\n link: LeverageTabLink;\n}\n\nexport interface ChatTimeGroup {\n daysAlias: string;\n days: string;\n startAt: string;\n endAt: string;\n}\n","import React from 'react';\nimport { LeverageTabHeader } from 'models/LeverageTemplate';\ninterface Props {\n header: LeverageTabHeader;\n children?: any;\n outerNodeMode?: boolean;\n}\nconst HomeTabHeader: React.FC = ({\n header,\n children,\n outerNodeMode = false\n}) => {\n return (\n <>\n
    \n {header?.title?.text}\n {!outerNodeMode && children}\n
    \n {outerNodeMode && children}\n \n );\n};\n\nexport default HomeTabHeader;\n","import React, { useState, useRef } from 'react';\nimport Slider from 'react-slick';\nimport { LeverageTabModule, LeverageTabNotice } from 'models/LeverageTemplate';\nimport { Profile } from 'models/Profile';\nimport HomeTabHeader from './HomeTabHeader';\nimport 'styles/slick.css';\nimport { isEmpty } from 'lodash';\nimport { Link } from 'react-router-dom';\n\nconst DEFAULT_TEXT = '공지사항을 알려드립니다.';\ninterface Props {\n profile: Profile;\n module: LeverageTabModule;\n}\nconst ModuleNotice: React.FC = ({ profile, module }) => {\n const [slideIndex, setSlideIndex] = useState(0);\n const refSlideNotice = useRef(null);\n const items: Array = module?.contents[0]?.items;\n\n const settings = {\n dots: false,\n arrows: false,\n infinite: true,\n speed: 500,\n slidesToShow: 1,\n slidesToScroll: 1,\n afterChange: (index: number) => setSlideIndex(index)\n };\n\n return (\n
    \n \n
    \n
    \n
      \n \n {items.map((item, idx) => {\n const isVideo = item?.media?.type === 'video';\n const isLink = item?.media?.type === 'link';\n let image = item?.media?.image;\n if (isVideo) {\n image = item?.media?.video?.thumbnail;\n } else if (isLink) {\n image = item?.media?.link?.image;\n }\n return (\n
    • \n \n {!!image?.imageUrl && (\n \n {isVideo && (\n 재생\n )}\n \n \n )}\n
      \n

      \n {isEmpty(item?.title?.text) &&\n isEmpty(item?.description?.text) &&\n DEFAULT_TEXT}\n {item?.title?.text}\n {!isEmpty(item?.title?.text) &&\n !isEmpty(item?.description?.text) &&
      }\n {item?.description?.text}\n

      \n
      \n \n
    • \n );\n })}\n
      \n
    \n
    \n {items.length > 1 && (\n
    \n refSlideNotice?.current?.slickPrev()}\n >\n 이전\n \n
    \n {items.map((item, idx) => {\n if (idx === slideIndex) {\n return (\n \n 현재페이지 ${idx + 1}\n \n );\n }\n return (\n \n {idx + 1}\n \n );\n })}\n
    \n refSlideNotice?.current?.slickNext()}\n >\n 다음\n \n
    \n )}\n
    \n
    \n );\n};\n\nexport default ModuleNotice;\n","import React, { useState, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'state/modules';\nimport { androidInstallUrl, iosInstallUrl } from 'state/modules/home/constants';\nimport Slider from 'react-slick';\nimport { LeverageTabModule } from 'models/LeverageTemplate';\nimport { Profile } from 'models/Profile';\nimport moment from 'moment';\nimport HomeTabHeader from './HomeTabHeader';\nimport openWithApp from 'utils/openWithApp';\ninterface Props {\n profile: Profile;\n module: LeverageTabModule;\n}\nconst ModuleCoupon: React.FC = ({ profile, module }) => {\n const [slideIndex, setSlideIndex] = useState(0);\n const refSlideCoupon = useRef(null);\n const useragent = useSelector((state: RootState) => state.home.useragent);\n const items: Array = new Array(...module?.contents[0]?.items);\n const couponBook = module?.contents[0]?.couponBook;\n if (couponBook) {\n items.push(couponBook);\n }\n const settings = {\n dots: false,\n arrows: false,\n infinite: true,\n speed: 500,\n slidesToShow: 1,\n slidesToScroll: 1,\n afterChange: (index: number) => setSlideIndex(index)\n };\n\n const handleClickCoupon = (e: any, id: number) => {\n const deviceOS = useragent?.result?.os?.name || '';\n const isPC = deviceOS !== 'Android' && deviceOS !== 'iOS';\n const idStr = id > 0 ? id.toString() : '';\n if (isPC) {\n alert('PC에서는 사용하실 수 없습니다.\\n모바일에서 확인해 주세요.');\n } else {\n openWithApp(\n deviceOS,\n deviceOS === 'iOS'\n ? process.env.REACT_APP_PF_CUSTOM_SCHEME || 'kakaoplus'\n : 'kakaoplus',\n `plusfriend/coupon/${profile?.id}/${idStr}?from=webhome`,\n process.env.REACT_APP_ANDROID_PACKAGE_NAME || 'com.kakao.talk',\n deviceOS === 'Android' ? androidInstallUrl : iosInstallUrl\n );\n }\n };\n\n const handleClickCouponBook = (e: any) => {\n const deviceOS = useragent?.result?.os?.name || '';\n const isPC = deviceOS !== 'Android' && deviceOS !== 'iOS';\n if (isPC) {\n alert('PC에서는 사용하실 수 없습니다.\\n모바일에서 확인해 주세요.');\n } else {\n openWithApp(\n deviceOS,\n deviceOS === 'iOS'\n ? process.env.REACT_APP_PF_CUSTOM_SCHEME || 'kakaoplus'\n : 'kakaoplus',\n `plusfriend/couponbook/${profile?.id}?from=webhome`,\n process.env.REACT_APP_ANDROID_PACKAGE_NAME || 'com.kakao.talk',\n deviceOS === 'Android' ? androidInstallUrl : iosInstallUrl\n );\n }\n };\n\n const renderCoupon = (item: any, idx: number) => {\n const startAt = moment(\n !item?.isDownloaded ? item?.entryStartAt : item?.usedStartAt\n );\n const endAt = moment(\n !item?.isDownloaded ? item?.entryEndAt : item?.usedEndAt\n );\n return (\n
  • \n handleClickCoupon(e, item?.id)}\n >\n \n \"\"\n \n
    \n {item?.title?.text}\n \n {startAt.format('YYYY.MM.DD')} ~ {endAt.format('YYYY.MM.DD')}\n \n
    \n \n {item?.isDownloaded && 사용하기}\n {!item?.isDownloaded && (\n 쿠폰 받기\n )}\n \n \n
  • \n );\n };\n\n const renderCouponBook = (item: any, idx: number) => {\n return (\n
  • \n handleClickCouponBook(e)}\n >\n
    \n \n 응모 가능한 쿠폰이 {item?.count}개 있습니다.\n \n 지금 바로 쿠폰 혜택을 받아보세요!\n
    \n \n \n \n \n
  • \n );\n };\n\n return (\n
    \n \n
    \n
    \n
      \n \n {items.map((item, idx) => {\n if (item.id) {\n return renderCoupon(item, idx);\n }\n return renderCouponBook(item, idx);\n })}\n \n
    \n
    \n {items.length > 1 && (\n
    \n refSlideCoupon?.current?.slickPrev()}\n >\n 이전\n \n
    \n {items.map((item, idx) => {\n if (idx === slideIndex) {\n return (\n \n 현재페이지 ${idx + 1}\n \n );\n }\n return (\n \n {idx + 1}\n \n );\n })}\n
    \n refSlideCoupon?.current?.slickNext()}\n >\n 다음\n \n
    \n )}\n
    \n
    \n );\n};\n\nexport default ModuleCoupon;\n","import moment from 'moment';\n\nexport function durationFormat(seconds: number) {\n const ts = moment.utc(moment.duration(seconds, 'seconds').asMilliseconds());\n if (seconds > 60 * 60) {\n return ts.format('HH:mm:ss');\n }\n return ts.format('mm:ss');\n}\n\nexport function convertToTime(time: string) {\n if (typeof time !== 'string') {\n return '';\n }\n\n const timeArr = [time.slice(0, 2), time.slice(2, 4)];\n return `${timeArr[0]}:${timeArr[1]}`;\n}\n","import React from 'react';\nimport {\n LeverageTabModule,\n LeverageTabSimplePost\n} from 'models/LeverageTemplate';\nimport { Profile } from 'models/Profile';\nimport HomeTabHeader from './HomeTabHeader';\nimport { durationFormat } from 'utils/timeUtil';\nimport { sortBy } from 'lodash';\nimport { Link } from 'react-router-dom';\nimport getImageUrl from 'utils/getImageUrl';\nimport imgNoImg from 'images/thumb_noimg_335x335.png';\n\ninterface Props {\n profile: Profile;\n module: LeverageTabModule;\n changeTab: Function;\n}\nconst ModuleSimplePost: React.FC = ({ profile, module, changeTab }) => {\n return (\n
    \n \n
      \n {sortBy(module?.contents, 'sort').map((post: LeverageTabSimplePost) => {\n const isVideo = post?.media?.type === 'video';\n const isCard = post?.media?.type === 'card';\n const isLink = post?.media?.type === 'link';\n let image = post?.media?.image;\n let isLive = false;\n if (isVideo) {\n image = post?.media?.video?.thumbnail;\n isLive = post?.media?.video?.isLive;\n } else if (isLink) {\n image = post?.media?.link?.image;\n }\n return (\n
    • \n \n \n {isVideo && !isLive && (\n \n {durationFormat(post?.media?.video?.duration)}\n \n )}\n {isVideo && isLive && (\n LIVE\n )}\n {isCard && (\n {post?.media?.count}\n )}\n \n \n {post?.title?.text}\n {isLink && (\n {post?.media?.link?.host}\n )}\n \n \n
    • \n );\n })}\n
    \n {!!module?.contents && module.contents.length >= 3 && (\n \n 소식 전체보기\n \n )}\n
    \n );\n};\n\nexport default ModuleSimplePost;\n","import React, { useMemo, useCallback } from 'react';\nimport { LeverageTabModule, LeverageTabChat } from 'models/LeverageTemplate';\nimport { Profile } from 'models/Profile';\nimport HomeTabHeader from './HomeTabHeader';\nimport { isEmpty } from 'lodash';\nimport { convertToTime } from 'utils/timeUtil';\nimport moment from 'moment-timezone';\n\nconst shortWeekdays = ['월', '화', '수', '목', '금', '토', '일'];\n\ninterface Props {\n profile: Profile;\n module: LeverageTabModule;\n}\nconst ModuleChat: React.FC = ({ profile, module }) => {\n const chat: LeverageTabChat = module?.contents[0];\n\n const isConsultableNow = (\n startTime: string,\n endTime: string,\n kstHHmm: string\n ) => {\n const timeVal = Number(kstHHmm);\n const startTimeVal = Number(startTime + '00');\n let endTimeVal = Number(endTime + '00');\n if (endTimeVal < startTimeVal || endTimeVal === 0) {\n endTimeVal = 240000;\n }\n // console.log(`on(${timeVal >= startTimeVal && timeVal <= endTimeVal}), current(${timeVal}), start(${startTimeVal}), end(${endTimeVal})`);\n return timeVal >= startTimeVal && timeVal <= endTimeVal;\n };\n\n const timeStatement = (startTime: string, endTime: string) => {\n return `${convertToTime(startTime)}~${convertToTime(\n endTime === '0000' ? '2400' : endTime\n )}`;\n };\n\n const chatSingleTime = useCallback(() => {\n const { weekFlags, startAt, endAt } = chat;\n let weeks;\n if (weekFlags === '1111111') {\n weeks = '매일';\n } else {\n const splitWeeksFlags = weekFlags.split('');\n weeks = splitWeeksFlags\n .map((wk, idx) => {\n if (wk === '1') {\n return shortWeekdays[idx];\n }\n return '';\n })\n .filter(t => !isEmpty(t))\n .join(',');\n }\n const time = timeStatement(startAt, endAt);\n return (\n
      \n
    • \n {weeks}\n {time}\n
    • \n
    \n );\n }, [chat]);\n\n const chatWeekTime = useCallback(() => {\n const { timeGroups } = chat;\n return (\n
      \n {timeGroups.map(timeGroup => {\n const { daysAlias, days, startAt, endAt } = timeGroup;\n let dayHeader;\n if (daysAlias && daysAlias === 'everyday') {\n dayHeader = '매일';\n } else {\n dayHeader = days\n .split(',')\n .map(day => {\n const dayNum = Number(day);\n return dayNum >= 0 && dayNum <= 6 ? shortWeekdays[dayNum] : '';\n })\n .filter(day => !isEmpty(day))\n .join(',');\n }\n\n let dayContent;\n if (startAt && endAt && startAt.length === 4 && endAt.length === 4) {\n dayContent = timeStatement(startAt, endAt);\n }\n return (\n
    • \n {dayHeader}\n {dayContent}\n
    • \n );\n })}\n
    \n );\n }, [chat]);\n\n const chatTime = useMemo(() => {\n const { weekFlags, timeGroups } = chat;\n const hasSingleTime = weekFlags && weekFlags !== '0000000';\n const hasWeekTime = !hasSingleTime && timeGroups;\n\n return (\n (hasSingleTime || hasWeekTime) && (\n
    \n \n {hasSingleTime && chatSingleTime()}\n {hasWeekTime && chatWeekTime()}\n
    \n )\n );\n }, [chat, chatSingleTime, chatWeekTime]);\n\n const chatOn = useMemo(() => {\n const { weekFlags, startAt, endAt, timeGroups } = chat;\n const hasSingleTime = weekFlags && weekFlags !== '0000000';\n const hasWeekTime = !hasSingleTime && timeGroups;\n\n const kstTime = moment()\n .tz('Asia/Seoul')\n .format('e,HHmmss')\n .split(',');\n const kstDayIdx = kstTime[0] === '0' ? 6 : Number(kstTime[0]) - 1; //0 ~ 6 (0 is monday, 6 is sunday)\n const kstHHmm = kstTime[1]; //ex: 090000\n if (\n hasSingleTime &&\n weekFlags.length === 7 &&\n weekFlags[kstDayIdx] === '1'\n ) {\n return isConsultableNow(startAt, endAt, kstHHmm);\n }\n if (hasWeekTime) {\n return timeGroups.some(timeGroup => {\n if (timeGroup.days.indexOf(String(kstDayIdx)) >= 0) {\n return isConsultableNow(timeGroup.startAt, timeGroup.endAt, kstHHmm);\n }\n return false;\n });\n }\n return false;\n }, [chat]);\n\n return (\n
    \n \n
      \n {chat?.isChatBot && (\n
    • \n \n \n
      \n \n 챗봇 채팅\n ON\n \n {chat?.botStartMessage}\n
      \n \n \n
    • \n )}\n {chat?.consultFlag && (\n
    • \n \n \n
      \n \n 상담원 채팅\n {chatOn && ON}\n \n \n 간편하게 채팅으로 문의해보세요.\n \n
      \n {chatTime}\n \n \n
    • \n )}\n
    \n
    \n );\n};\n\nexport default ModuleChat;\n","import React, { useState, useMemo, useRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport Slider from 'react-slick';\nimport { RootState } from 'state/modules';\nimport {\n LeverageTabModule,\n LeverageTabChatKeyword\n} from 'models/LeverageTemplate';\nimport { Profile } from 'models/Profile';\nimport HomeTabHeader from './HomeTabHeader';\nimport { sortBy } from 'lodash';\nimport openWithApp from 'utils/openWithApp';\nimport { androidInstallUrl, iosInstallUrl } from 'state/modules/home/constants';\n\ninterface Props {\n profile: Profile;\n module: LeverageTabModule;\n}\nconst ModuleChatKeyword: React.FC = ({ profile, module }) => {\n const [slideIndex, setSlideIndex] = useState(0);\n const refSlideChatKeyword = useRef(null);\n const useragent = useSelector((state: RootState) => state.home.useragent);\n const itemKeywords: Array =\n module?.contents[0]?.items;\n\n const settings = {\n dots: false,\n arrows: false,\n infinite: true,\n speed: 500,\n slidesToShow: 1,\n slidesToScroll: 1,\n afterChange: (index: number) => setSlideIndex(index)\n };\n\n const isPC = useMemo(() => {\n const deviceOS = useragent?.result?.os?.name;\n return deviceOS !== 'Android' && deviceOS !== 'iOS';\n }, [useragent]);\n\n const handleOpenChat = (e: any, keyword: string) => {\n e.preventDefault();\n if (isPC) {\n window.open(`/${profile.profileId}/chat`, '_blank');\n } else {\n const deviceOS = useragent?.result?.os?.name || '';\n const encodedMessage = encodeURIComponent(keyword);\n openWithApp(\n deviceOS,\n deviceOS === 'iOS'\n ? process.env.REACT_APP_PF_CUSTOM_SCHEME || 'kakaoplus'\n : 'kakaoplus',\n `plusfriend/talk/bot/${profile.id}/${encodedMessage}`,\n 'com.kakao.talk',\n deviceOS === 'Android' ? androidInstallUrl : iosInstallUrl\n );\n }\n };\n\n const keywords: Array> = useMemo(() => {\n const data: Array> = [];\n if (itemKeywords.length > 0) {\n const keywords =\n sortBy(\n itemKeywords?.map(k => k.keyword),\n 'sort'\n ) ?? [];\n let idx = 0;\n keywords?.forEach(keyword => {\n if (!data[idx]) {\n data[idx] = [];\n }\n if (data[idx]?.length === 4) {\n idx = idx + 1;\n data[idx] = [];\n }\n data[idx].push(keyword);\n });\n }\n return data;\n }, [itemKeywords]);\n\n return (\n
    \n \n
    \n
    \n
      \n \n {keywords?.map((item, idx) => {\n return (\n
    • \n
        \n {item?.map((keyword, idx) => {\n return (\n
      • \n handleOpenChat(e, keyword)}\n >\n
        \n {keyword}\n
        \n \n \n
      • \n );\n })}\n
      \n
    • \n );\n })}\n
      \n
    \n
    \n {keywords.length > 1 && (\n
    \n refSlideChatKeyword?.current?.slickPrev()}\n >\n 이전\n \n
    \n {keywords.map((item, idx) => {\n if (idx === slideIndex) {\n return (\n \n 현재페이지 ${idx + 1}\n \n );\n }\n return (\n \n {idx + 1}\n \n );\n })}\n
    \n refSlideChatKeyword?.current?.slickNext()}\n >\n 다음\n \n
    \n )}\n
    \n
    \n );\n};\n\nexport default ModuleChatKeyword;\n","import React from 'react';\nimport { LeverageTabInfo } from 'models/LeverageTemplate';\n\ninterface Props {\n info: LeverageTabInfo;\n}\nconst HomeTabInfoItem: React.FC = ({ info }) => {\n const isLink = !!info?.link;\n const linkType = info?.link?.type;\n const text = info?.description?.text;\n return (\n <>\n
    {info?.title?.text}
    \n
    \n {linkType === 'web' && (\n \n {text}\n \n )}\n {linkType === 'email' && (\n \n {text}\n \n )}\n {linkType === 'tel' && (\n <>\n \n {text}\n \n {info?.description?.isCharged && '(유료) '}\n \n )}\n {!isLink && text}\n
    \n \n );\n};\n\nexport default HomeTabInfoItem;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'state/modules';\nimport { Call2Action, Call2ActionType } from 'models/Profile';\nimport { isEmpty, get } from 'lodash';\n\ninterface Props {\n link: Call2Action;\n}\nconst HomeTabCall2ActionButton: React.FC = ({ link }) => {\n const useragent = useSelector((state: RootState) => state.home.useragent);\n\n const handleClickAction = () => {\n const deviceOS = get(useragent, ['result', 'os', 'name']);\n const isPC = deviceOS !== 'Android' && deviceOS !== 'iOS';\n\n if (isPC) {\n if (!isEmpty(link?.urls?.web)) {\n window.open(link?.urls?.web, '_blank');\n } else {\n if (\n link?.type === Call2ActionType.qr_code ||\n link?.type === Call2ActionType.app ||\n link?.type === Call2ActionType.membership\n ) {\n alert('PC에서는 사용하실 수 없습니다.\\n모바일에서 확인해 주세요.');\n }\n }\n } else {\n const installUrl =\n deviceOS === 'Android'\n ? link?.urls?.androidInstall\n : link?.urls?.iosInstall;\n const executeUrl =\n deviceOS === 'Android'\n ? link?.urls?.androidExecute\n : link?.urls?.iosExecute;\n const splited = executeUrl?.split('://') || ['', ''];\n const intentUrl = `intent://${splited[1]}#Intent;scheme=${splited[0]};end`;\n\n if (!!installUrl) {\n const clickedAt = +new Date();\n setTimeout(() => {\n if (+new Date() - clickedAt < 2000) {\n window.location.href = installUrl;\n }\n }, 1500);\n }\n if (!!executeUrl) {\n window.location.href =\n (deviceOS === 'Android' ? intentUrl : executeUrl) || '';\n } else if (!isEmpty(link?.urls?.web)) {\n window.open(link?.urls?.web, '_blank');\n }\n }\n };\n\n const renderActionButtonLabel = (type: string) => {\n if (type === Call2ActionType.more) {\n return (\n <>\n 더 알아보기\n \n );\n } else if (type === Call2ActionType.app) {\n return (\n <>\n 앱 사용하기\n \n );\n } else if (type === Call2ActionType.order) {\n return (\n <>\n 톡 주문하기\n \n );\n } else if (type === Call2ActionType.store) {\n return (\n <>\n \n 스토어\n \n );\n } else if (type === Call2ActionType.membership) {\n return (\n <>\n \n 멤버십\n \n );\n } else if (type === Call2ActionType.qr_code) {\n return (\n <>\n \n 코드스캔\n \n );\n } else if (type === Call2ActionType.shopping_mall) {\n return (\n <>\n \n 쇼핑몰\n \n );\n }\n return null;\n };\n\n return (\n \n );\n};\n\nexport default HomeTabCall2ActionButton;\n","import React from 'react';\nimport { LeverageTabModule, LeverageTabInfo } from 'models/LeverageTemplate';\nimport { Profile } from 'models/Profile';\nimport HomeTabHeader from './HomeTabHeader';\nimport { sortBy } from 'lodash';\nimport HomeTabInfoItem from './HomeTabInfoItem';\nimport HomeTabCall2ActionButton from './HomeTabCall2ActionButton';\n\ninterface Props {\n profile: Profile;\n module: LeverageTabModule;\n}\nconst ModuleProfileInfo: React.FC = ({ profile, module }) => {\n const infos: Array = sortBy(module?.contents, 'sort');\n\n return (\n
    \n \n {!!profile.call2action ? (\n \n ) : (\n ''\n )}\n \n
    \n {infos?.map((info, idx) => (\n \n ))}\n
    \n
    \n );\n};\n\nexport default ModuleProfileInfo;\n","import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport { LeverageTabModule, LeverageTabInfo } from 'models/LeverageTemplate';\nimport { Profile } from 'models/Profile';\nimport HomeTabHeader from './HomeTabHeader';\nimport { sortBy } from 'lodash';\nimport HomeTabInfoItem from './HomeTabInfoItem';\n\ninterface Props {\n profile: Profile;\n module: LeverageTabModule;\n}\nconst ModuleBusinessInfo: React.FC = ({ profile, module }) => {\n const infos: Array = sortBy(module?.contents, 'sort');\n const [showInfo, setShowInfo] = useState(false);\n\n return (\n
    \n \n setShowInfo(!showInfo)}\n >\n \n 사업자 등록 정보 {showInfo ? '닫기' : '보기'}{' '}\n \n \n \n {!!showInfo && (\n
    \n {infos?.map((info, idx) => (\n \n ))}\n
    \n )}\n
    \n );\n};\n\nexport default ModuleBusinessInfo;\n","import { useEffect, useState } from 'react'\nexport type Status = 'idle' | 'loading' | 'ready' | 'error'\nexport type ScriptElt = HTMLScriptElement | null\n\nfunction useScript(src: string): Status {\n const [status, setStatus] = useState(src ? 'loading' : 'idle')\n useEffect(\n () => {\n if (!src) {\n setStatus('idle')\n return;\n }\n // Fetch existing script element by src\n // It may have been added by another instance of this hook\n let script: ScriptElt = document.querySelector(`script[src=\"${src}\"]`)\n if (!script) {\n // Create script\n script = document.createElement('script')\n script.src = src\n script.async = true\n script.setAttribute('data-status', 'loading')\n // Add script to document body\n document.body.appendChild(script)\n // Store status in attribute on script\n // This can be read by other instances of this hook\n const setAttributeFromEvent = (event: Event) => {\n script?.setAttribute(\n 'data-status',\n event.type === 'load' ? 'ready' : 'error',\n )\n }\n script.addEventListener('load', setAttributeFromEvent)\n script.addEventListener('error', setAttributeFromEvent)\n } else {\n // Grab existing script status from attribute and set to state.\n setStatus(script.getAttribute('data-status') as Status)\n }\n // Script event handler to update status in state\n // Note: Even if the script already exists we still need to add\n // event handlers to update the state for *this* hook instance.\n const setStateFromEvent = (event: Event) => {\n setStatus(event.type === 'load' ? 'ready' : 'error')\n }\n // Add event listeners\n script.addEventListener('load', setStateFromEvent)\n script.addEventListener('error', setStateFromEvent)\n // Remove event listeners on cleanup\n return () => {\n if (script) {\n script.removeEventListener('load', setStateFromEvent)\n script.removeEventListener('error', setStateFromEvent)\n }\n }\n },\n [src], // Only re-run effect if script src changes\n )\n return status\n}\nexport default useScript;\n","import React, { useEffect, useRef } from 'react';\nimport useScript from 'utils/useScript';\ninterface Props {\n show: boolean;\n x: number;\n y: number;\n}\n\nconst StaticMap: React.FC = ({show, x, y}) => {\n const refStaticMap = useRef(null);\n const status = useScript('https://spi.maps.daum.net/imap/map_js_init/v3.js?autoload=false');\n\n useEffect(() => {\n if (refStaticMap && status === 'ready' && show) {\n // @ts-ignore\n const { daum } = window;\n daum.maps.load(() => {\n const mapOption = {\n center: new daum.maps.LatLng(y, x),\n level: 3,\n marker: {\n position: new daum.maps.LatLng(y, x)\n }\n };\n // if (refStaticMap?.current?.firstChild) {\n // refStaticMap?.current?.removeChild(refStaticMap.current.firstChild);\n // }\n const map = new daum.maps.StaticMap(refStaticMap.current, mapOption);\n console.log('static map completed', x, y, map);\n });\n }\n }, [show, x, y, refStaticMap, status]);\n\n return (\n \n );\n};\n\nexport default StaticMap;\n\n","import React, { useEffect, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { homeOperations } from 'state/modules/home';\nimport { LeverageTabModule, LeverageTabMap } from 'models/LeverageTemplate';\nimport { Profile } from 'models/Profile';\nimport HomeTabHeader from './HomeTabHeader';\nimport { RootState } from 'state/modules';\nimport { Realtime } from 'models/Local';\nimport openWithApp from 'utils/openWithApp';\nimport { isEmpty } from 'lodash';\nimport StaticMap from './StaticMap';\ninterface Props {\n profile: Profile;\n module: LeverageTabModule;\n realtime: Realtime;\n fetchRealtime: Function;\n}\nconst ModuleMap: React.FC = ({\n profile,\n module,\n fetchRealtime,\n realtime\n}) => {\n const placeInfo: LeverageTabMap = module?.contents[0];\n const useragent = useSelector((state: RootState) => state.home.useragent);\n\n useEffect(() => {\n if (fetchRealtime && placeInfo?.localCid) {\n fetchRealtime(String(placeInfo?.localCid));\n }\n }, [fetchRealtime, placeInfo]);\n\n const isPC = useMemo(() => {\n const deviceOS = useragent?.result?.os?.name;\n return deviceOS !== 'Android' && deviceOS !== 'iOS';\n }, [useragent]);\n\n const getRealtimeLabel = () => {\n const isOpen = realtime?.open === 'Y';\n const isHoliday = realtime?.holiday === 'Y';\n\n let statusLabel = '';\n if (isOpen && !isHoliday) {\n statusLabel = '영업중';\n } else if (!isOpen && !isHoliday) {\n statusLabel = realtime?.secondsUtilOpen || 0 ? '영업전' : '영업종료';\n } else if (isHoliday) {\n statusLabel = '휴무';\n }\n\n let period = '';\n if (realtime?.currentPeriod?.matchedTime) {\n if (realtime?.currentPeriod?.matchedTime?.timeName === '영업시간') {\n period = `${realtime?.currentDayOfWeek}요일`;\n } else {\n period = realtime?.currentPeriod?.matchedTime?.timeName;\n }\n period = `${period} ${realtime?.currentPeriod?.matchedTime?.timeSE}`;\n }\n if (isEmpty(period)) {\n return statusLabel;\n }\n return `${statusLabel}, ${period}`;\n };\n\n const handleClickPlaceInfo = () => {\n if (!!placeInfo?.localCid) {\n window.open(`https://m.map.kakao.com/scheme/place?id=${placeInfo?.localCid}&infoLevel=2&referrer=TalkChannel&utm_source=T alkChannel`);\n }\n };\n\n const handleClickKakaoMap = () => {\n if (!!placeInfo?.localCid) {\n if (isPC) {\n window.open(`https://map.kakao.com/?itemId=${placeInfo?.localCid}`);\n } else {\n openWithApp(\n useragent?.result?.os?.name || '',\n 'daummaps',\n `look?p=${placeInfo?.y},${placeInfo?.x}&referrer=channelWebHome`,\n 'net.daum.android.map',\n 'https://itunes.apple.com/kr/app/id304608425'\n );\n }\n }\n };\n\n const handleClickKakaoNavi = () => {\n if (!!placeInfo?.localCid) {\n if (isPC) {\n alert('PC에서는 사용하실 수 없습니다.\\n모바일에서 확인해 주세요.');\n } else {\n const name = encodeURIComponent(placeInfo?.localName || '');\n openWithApp(\n useragent?.result?.os?.name || '',\n 'kakaonavi',\n `navigate?coord_type=wgs84&name=${name}&y=${placeInfo?.y}&x=${placeInfo?.x}&key=194c329945a945bfbd19d0121f6b47bb`,\n 'com.locnall.KimGiSa',\n 'https://itunes.apple.com/kr/app/id417698849'\n );\n }\n }\n };\n\n const isSite = !!placeInfo?.localCid;\n return (\n
    \n \n \n {isSite && (\n <>\n
    \n
    \n 위치\n
    \n
    \n {placeInfo?.localName || ''}\n {placeInfo?.address?.text}\n
    \n {realtime && (\n <>\n
    \n 영업시간\n
    \n
    \n {getRealtimeLabel()}\n
    \n \n )}\n
    \n 장소정보\n
    \n
    \n \n 장소 정보 자세히 보기\n \n
    \n
    \n
    \n \n {/* 버튼 press 시 active 클래스 추가 */}\n \n 길찾기\n \n \n {/* 버튼 press 시 active 클래스 추가 */}\n \n 카카오네비\n \n
    \n \n )}\n {!isSite && (\n
    \n
    \n 위치\n
    \n
    \n {placeInfo?.address?.text || ''}\n
    \n
    \n )}\n
    \n );\n};\n\nfunction mapStatetoProps(state: RootState, props: any) {\n const { realtime } = state.home?.entities;\n return {\n realtime\n };\n}\n\nexport default connect(mapStatetoProps, dispatch =>\n bindActionCreators(\n {\n fetchRealtime: homeOperations.fetchRealtime\n },\n dispatch\n )\n)(ModuleMap);\n","import React from 'react';\nimport { Profile } from 'models/Profile';\nimport { sortBy } from 'lodash';\nimport {\n LeverageTab,\n LeverageTabModule,\n LeverageTabModuleType\n} from 'models/LeverageTemplate';\nimport ModuleNotice from './ModuleNotice';\nimport ModuleCoupon from './ModuleCoupon';\nimport ModuleSimplePost from './ModuleSimplePost';\nimport ModuleChat from './ModuleChat';\nimport ModuleChatKeyword from './ModuleChatKeyword';\nimport ModuleProfileInfo from './ModuleProfileInfo';\nimport ModuleBusinessInfo from './ModuleBusinessInfo';\nimport ModuleMap from './ModuleMap';\ninterface Props {\n profile: Profile;\n hometab: LeverageTab;\n changeTab: Function;\n}\nconst HomeTab: React.FC = ({ profile, hometab, changeTab }) => {\n const renderItem = (leverageTagModule: LeverageTabModule, index: number) => {\n let Module: any = undefined;\n if (leverageTagModule.type === LeverageTabModuleType.notice) {\n Module = ModuleNotice;\n } else if (leverageTagModule.type === LeverageTabModuleType.coupon) {\n Module = ModuleCoupon;\n } else if (leverageTagModule.type === LeverageTabModuleType.commerce) {\n // SKIP: 웹홈에서는 미노출\n } else if (leverageTagModule.type === LeverageTabModuleType.simple_post) {\n Module = ModuleSimplePost;\n } else if (leverageTagModule.type === LeverageTabModuleType.chat) {\n Module = ModuleChat;\n } else if (leverageTagModule.type === LeverageTabModuleType.keyword_chat) {\n Module = ModuleChatKeyword;\n } else if (leverageTagModule.type === LeverageTabModuleType.map) {\n Module = ModuleMap;\n } else if (leverageTagModule.type === LeverageTabModuleType.text_info) {\n Module = ModuleProfileInfo;\n } else if (leverageTagModule.type === LeverageTabModuleType.business) {\n Module = ModuleBusinessInfo;\n }\n\n if (!!Module) {\n return (\n \n );\n }\n return null;\n };\n\n const renderHomeTab = () => {\n if (!!hometab?.items) {\n return sortBy(hometab?.items, 'sort')\n ?.map((ltm, idx) => renderItem(ltm, idx))\n .concat(\n
    \n

    \n 이 정보는 채널 운영자가 등록한 정보입니다.\n

    \n Copyright\n 플러스친구\n
    \n );\n }\n\n return

    채널의 정보가 없습니다.

    ;\n };\n\n return (\n
    \n \n {renderHomeTab()}\n
    \n );\n};\n\nexport default HomeTab;\n","import React, { useCallback, useEffect, useMemo } from 'react';\nimport Gnb from 'views/components/Gnb';\nimport { getOsName } from 'utils/deviceUtils';\nimport { Profile } from 'models/Profile';\nimport { androidInstallUrl, iosInstallUrl } from 'state/modules/home/constants';\nimport openWithApp from 'utils/openWithApp';\nimport { RootState } from 'state/modules';\nimport { useSelector } from 'react-redux';\n\ninterface Props {\n profile: Profile;\n url: string;\n}\n\nconst MobileBridgePage: React.FC = ({ profile, url }) => {\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n\n const deviceOS = useMemo(() => {\n return getOsName(useragent);\n }, [useragent]);\n\n const onTalkExec = useCallback(() => {\n const profilePath = `plusfriend/home/${profile.id}?url=` + url;\n const installUrl =\n deviceOS === 'Android' ? androidInstallUrl : iosInstallUrl;\n openWithApp(\n deviceOS,\n deviceOS === 'iOS' \n ? process.env.REACT_APP_PF_CUSTOM_SCHEME || 'kakaoplus'\n : 'kakaoplus',\n profilePath,\n 'com.kakao.talk',\n installUrl\n );\n }, [deviceOS, profile.id, url]);\n\n useEffect(() => {\n onTalkExec();\n }, [onTalkExec, profile.id, url, useragent]);\n\n return (\n <>\n \n
    \n
    \n 채팅 시작\n \n 카카오톡에서 확인 가능한 링크입니다.\n \n

    \n 카카오톡을 설치하거나,\n
    최신 버전으로 업데이트 하신 후 링크를 확인 해주세요.\n

    \n \n 카카오톡 최신버전 설치하기\n \n onTalkExec()}\n >\n 카카오톡에서 시작하기\n \n
    \n
    \n \n );\n};\n\nexport default MobileBridgePage;\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport Gnb from 'views/components/Gnb';\nimport { getOsName } from 'utils/deviceUtils';\nimport { androidInstallUrl, iosInstallUrl } from 'state/modules/home/constants';\nimport openWithApp from 'utils/openWithApp';\nimport { RootState } from 'state/modules';\nimport { useSelector } from 'react-redux';\n\ninterface Props {\n scheme: string;\n}\n\nconst DefaultMobileBridgePage: React.FC = ({ scheme }) => {\n const [windowHeight, setWindowHeight] = useState(window.innerHeight);\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n\n const deviceOS = useMemo(() => {\n return getOsName(useragent);\n }, [useragent]);\n\n const onTalkExec = useCallback(() => {\n const installUrl =\n deviceOS === 'Android' ? androidInstallUrl : iosInstallUrl;\n openWithApp(\n deviceOS,\n deviceOS === 'iOS'\n ? process.env.REACT_APP_PF_CUSTOM_SCHEME || 'kakaoplus'\n : 'kakaoplus',\n scheme,\n 'com.kakao.talk',\n installUrl\n );\n }, [deviceOS, scheme]);\n\n useEffect(() => {\n onTalkExec();\n window.addEventListener('resize', () => {\n setWindowHeight(window.innerHeight);\n });\n\n return window.removeEventListener('resize', () => {});\n }, [onTalkExec, useragent]);\n\n return (\n <>\n \n \n
    \n 채팅 시작\n 카카오톡에서 만나요\n

    \n 해당 채널 정보는 카카오톡 최신 버전에서\n
    이용하실 수 있습니다.\n

    \n onTalkExec()}\n >\n 카카오톡에서 보기\n \n \n 카카오톡 설치하기\n \n
    \n \n \n );\n};\n\nexport default DefaultMobileBridgePage;\n","import React from 'react';\nimport Gnb from 'views/components/Gnb';\n\nconst OnlyMobileErrorPage: React.FC = () => (\n <>\n \n
    \n
    \n \n \n 모바일에서 확인 가능한 링크입니다.\n \n

    주소가 정확한지 다시 한번 확인해주세요.

    \n
    \n
    \n \n);\n\nexport default OnlyMobileErrorPage;\n","import React from 'react';\nimport { Profile } from '../../models/Profile';\n\ninterface Props {\n profile: Profile;\n viewBottomSheet: Function;\n}\n\nconst BottomSheet: React.FC = ({ viewBottomSheet, profile }) => {\n if (profile.verificationType === 'NONE') {\n return <>;\n }\n const title = profile.verificationGuide.title;\n const msg = profile.verificationGuide.msg;\n\n const openSpamReportLink = () => {\n const currentUrl = window.location.href;\n const encodedProfileId = currentUrl.split('/')[3];\n const spamReportUrl = `/${encodedProfileId}/spam_report`;\n const loginRedirectUrl = window.location.origin + spamReportUrl;\n const logoutRedirectUrl = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/login?continue=`;\n window.open(\n `${process.env.REACT_APP_API_BASE_URL}/web/profiles/${encodedProfileId}/logincheck?logoutRedirectUrl=${logoutRedirectUrl}&loginRedirectUrl=${loginRedirectUrl}`,\n '_blank'\n );\n };\n return (\n <>\n
    viewBottomSheet(e)}>
    \n
    \n
    \n {title}\n
    \n
    \n

    {msg}

    \n

    \n 사기 및 사칭이 의심되면\n openSpamReportLink()}\n className=\"link_layer\"\n >\n 신고\n \n 해 주세요.\n

    \n viewBottomSheet(e)}\n >\n 닫기\n \n
    \n
    \n \n );\n};\n\nexport default BottomSheet;\n","import { Profile } from 'models/Profile';\nimport React from 'react';\nimport { wordFormat } from '../../../utils/dateFormat';\n\ninterface Props {\n profile: Profile;\n}\nconst AddFriendDoneLayer: React.FC = ({ profile }) => {\n return (\n
    \n
    \n
    \n
    \n 채널 추가 완료\n

    \n {wordFormat(profile.friendAt)} {profile?.name}\n
    \n 채널을 추가하였습니다.\n

    \n
    \n {\n const layer = window.document.getElementById('completedLayer');\n const dimmedLayer = window.document.getElementById(\n 'dimmedLayer'\n );\n if (!!layer) {\n layer.style.display = 'none';\n }\n if (!!dimmedLayer) {\n dimmedLayer.style.display = 'none';\n }\n\n const currentUrl = window.location.href;\n const encodedProfileId = currentUrl.split(/\\/|\\?/)[3];\n const postId = currentUrl.split(/\\/|\\?/)[4] || '';\n if (postId === '' || !parseInt(postId)) {\n window.location.href =\n window.location.protocol +\n '//' +\n window.location.hostname +\n '/' +\n encodedProfileId;\n } else {\n window.location.href =\n window.location.protocol +\n '//' +\n window.location.hostname +\n '/' +\n encodedProfileId +\n '/' +\n postId;\n }\n }}\n >\n 확인\n \n
    \n
    \n
    \n
    \n );\n};\n\nexport default AddFriendDoneLayer;\n","import { Profile } from 'models/Profile';\nimport React from 'react';\n\ninterface Props {\n profile: Profile;\n}\nconst BlockFriendLayer: React.FC = ({ profile }) => {\n const date = new Date();\n const today =\n date.getFullYear() +\n '년 ' +\n (date.getMonth() + 1) +\n '월 ' +\n date.getDate() +\n '일';\n\n return (\n
    \n
    \n
    \n
    \n 채널 차단 완료\n

    \n {today} {profile?.name}\n
    \n 채널이 차단되었습니다.\n

    \n
    \n {\n const layer = window.document.getElementById('completedLayer');\n const dimmedLayer = window.document.getElementById(\n 'dimmedLayer'\n );\n if (!!layer) {\n layer.style.display = 'none';\n }\n if (!!dimmedLayer) {\n dimmedLayer.style.display = 'none';\n }\n // param 제거\n window.location.href =\n window.location.protocol +\n '//' +\n window.location.hostname +\n window.location.pathname;\n }}\n >\n 확인\n \n
    \n
    \n
    \n
    \n );\n};\n\nexport default BlockFriendLayer;\n","import React from 'react';\nimport { Profile } from '../../../models/Profile';\nimport AddFriendDoneLayer from '../AddFriendDoneLayer';\nimport BlockFriendLayer from '../BlockFriendLayer';\ninterface Props {\n completedLayer: string;\n profile: Profile;\n}\n\nconst ProfileCompletedLayer: React.FC> = ({\n children,\n completedLayer,\n profile\n}) => (\n <>\n {completedLayer === 'blockfriend' && }\n {completedLayer === 'addfrienddone' && (\n \n )}\n \n);\n\nexport default ProfileCompletedLayer;\n","import React from 'react';\nimport { Profile } from '../../../models/Profile';\ninterface Props {\n completedLayer: string;\n profile: Profile;\n}\n\nconst UrlCopyLayer: React.FC> = ({\n children,\n completedLayer,\n profile\n}) => (\n <>\n {completedLayer === 'copyurl' && (\n
    \n
    \n \n
    \n

    \n
    \n URL을 복사하였습니다.\n

    \n
    \n {\n const layer = window.document.getElementById(\n 'completedLayer'\n );\n const dimmedLayer = window.document.getElementById(\n 'dimmedLayer'\n );\n if (!!layer) {\n layer.style.display = 'none';\n }\n if (!!dimmedLayer) {\n dimmedLayer.style.display = 'none';\n }\n // param 제거\n window.location.href =\n window.location.protocol +\n '//' +\n window.location.hostname +\n window.location.pathname;\n }}\n >\n 확인\n \n
    \n
    \n
    \n \n )}\n \n);\n\nexport default UrlCopyLayer;\n","import React, { useEffect, useState, useCallback, useMemo } from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport debounce from 'lodash/debounce';\nimport get from 'lodash/get';\nimport last from 'lodash/last';\nimport { AGE_AUTH, ADULT_AUTH_VALID_TYPE } from 'state/modules/home/constants';\nimport { homeSelectors, homeOperations } from 'state/modules/home';\nimport { showModal } from 'state/modules/home/actions';\nimport ContentWrapper from 'views/components/ContentWrapper';\nimport ProfileHeader from 'views/components/ProfileHeader';\nimport Feed from 'views/components/Feed';\nimport Tab from 'views/components/Tab';\nimport Gnb from 'views/components/Gnb';\nimport { useTiara } from 'utils/tiaraHelper';\nimport { Profile, TabType } from 'models/Profile';\nimport { Post } from 'models/Post';\nimport { Connection } from 'models/Connection';\nimport { RootState } from 'state/modules';\nimport { LeverageTab } from 'models/LeverageTemplate';\nimport HomeTab from 'views/components/HomeTab';\nimport queryString from 'query-string';\nimport { isMobile } from 'utils/deviceUtils';\nimport MobileBridgePage from 'views/pages/bridges/MobileBridgePage';\nimport DefaultMobileBridgePage from 'views/pages/bridges/DefaultMobileBridgePage';\nimport OnlyMobileErrorPage from 'views/pages/OnlyMobileErrorPage';\nimport BottomSheet from './BottomSheet';\nimport ProfileCompletedLayer from '../components/ProfileCompletedLayer';\nimport UrlCopyLayer from '../components/UrlCopyLayer';\n\ninterface Props {\n profileId: string;\n profile: Profile;\n posts: Post[];\n connections: Connection[];\n hometab: LeverageTab;\n onShowModal: Function;\n fetchProfile: Function;\n fetchPosts: Function;\n error: any;\n}\n\nconst ProfilePage: React.FC = ({\n profileId,\n profile,\n posts,\n connections,\n hometab,\n onShowModal,\n fetchProfile,\n fetchPosts,\n error\n}) => {\n const [openBottomSheet, setOpenBottomSheet] = useState(false);\n const [copyUrlVisibility, setCopyUrlVisibility] = useState('none');\n const debouncedHandleScroll = debounce(handleScroll, 500);\n const hasNext = get(profile, ['posts', 'hasNext']);\n const [tab, setTab] = useState(profile?.homeDefaultTab);\n const params = queryString.parse(window.location.search);\n const completedLayer = params?.completedLayer ?? 'none';\n const changeTab = useCallback(\n name => (ev: React.MouseEvent) => {\n ev.preventDefault();\n setTab(name);\n window.scrollTo(0, 0);\n },\n [setTab]\n );\n\n const viewBottomSheet = useCallback(() => {\n setOpenBottomSheet(!openBottomSheet);\n }, [openBottomSheet]);\n\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n\n useTiara({\n page: 'profile'\n });\n\n // 1회만 조회\n useEffect(() => {\n fetchProfile(profileId);\n }, [fetchProfile, profileId]);\n\n useEffect(() => {\n if (!tab) {\n setTab(profile?.homeDefaultTab);\n }\n }, [profile, tab]);\n\n const layerCode = (code: string) => {\n setCopyUrlVisibility(code);\n };\n\n const contents = useMemo(() => {\n const defaultContents = (\n <>\n \n \n \n \n {tab === TabType.post ? (\n \n ) : (\n \n )}\n \n
    \n \n
    \n \n \n \n );\n\n if (!window.location.search) {\n return defaultContents;\n }\n if (!('url' in params) && !('bridge' in params)) {\n return defaultContents;\n }\n const bridge = params?.bridge ?? '';\n let url = Array.isArray(params.url) ? params.url[0] : params.url;\n url = !url ? '' : url!.trim();\n if (isMobile(useragent)) {\n if (bridge === 'kakaoview') {\n return (\n \n );\n }\n return ;\n } else {\n return ;\n }\n }, [\n profile,\n connections,\n onShowModal,\n viewBottomSheet,\n tab,\n changeTab,\n posts,\n hasNext,\n hometab,\n openBottomSheet,\n completedLayer,\n copyUrlVisibility,\n params,\n useragent\n ]);\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n window.addEventListener('scroll', debouncedHandleScroll);\n }\n return () => window.removeEventListener('scroll', debouncedHandleScroll);\n });\n\n useEffect(() => {\n if (!profile) {\n return;\n }\n\n const isForAdult = profile.isAdult;\n const validType = get(\n profile,\n 'authInfo.validType',\n ADULT_AUTH_VALID_TYPE.UNAUTHORIZED\n );\n\n if (isForAdult && validType !== ADULT_AUTH_VALID_TYPE.VERIFIED) {\n onShowModal(AGE_AUTH, { profile });\n }\n }, [profile, onShowModal, profileId]);\n\n if (!profile) {\n if (error?.response?.status === 404) {\n window.location.href = '/';\n }\n return <>;\n }\n\n function handleScroll() {\n const scrollNode = document.scrollingElement\n ? (document.scrollingElement as HTMLElement)\n : document.documentElement;\n const scrollHeight = scrollNode.scrollHeight;\n const scrollTop = scrollNode.scrollTop;\n const offsetHeight = scrollNode.offsetHeight;\n if (\n tab === TabType.post &&\n hasNext &&\n scrollHeight - 2 * offsetHeight < scrollTop\n ) {\n fetchPosts(profileId, { since: last(posts)?.sort ?? undefined });\n }\n }\n\n return <>{contents};\n};\n\nfunction mapStatetoProps(state: RootState, props: any) {\n const {\n home: { error }\n } = state;\n\n const {\n match: {\n params: { encodedProfileId: profileId }\n }\n } = props;\n\n return {\n error: error.error,\n profileId,\n profile: homeSelectors.getProfile(state, props),\n posts: homeSelectors.getProfilePosts(state, props),\n connections: homeSelectors.getProfileConnections(state, props),\n hometab: homeSelectors.getProfileHomeTab(state, props)\n };\n}\n\nexport default connect(mapStatetoProps, dispatch =>\n bindActionCreators(\n {\n onShowModal: showModal,\n fetchProfile: homeOperations.fetchProfile,\n fetchPosts: homeOperations.fetchPosts\n },\n dispatch\n )\n)(ProfilePage);\n","import React, { useEffect, useState, useMemo } from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport debounce from 'lodash/debounce';\nimport get from 'lodash/get';\nimport last from 'lodash/last';\nimport { AGE_AUTH, ADULT_AUTH_VALID_TYPE } from 'state/modules/home/constants';\nimport { homeSelectors, homeOperations } from 'state/modules/home';\nimport { showModal } from 'state/modules/home/actions';\nimport ContentWrapper from 'views/components/ContentWrapper';\nimport Feed from 'views/components/Feed';\nimport Gnb from 'views/components/Gnb';\nimport { useTiaraPage } from 'utils/tiaraNewHelper';\nimport { Profile } from 'models/Profile';\nimport { Post } from 'models/Post';\nimport { RootState } from 'state/modules';\nimport UrlCopyLayer from '../components/UrlCopyLayer';\n\ninterface Props {\n profileId: string;\n profile: Profile;\n posts: Post[];\n onShowModal: Function;\n fetchProfile: Function;\n fetchPosts: Function;\n error: any;\n}\n\nconst PostArchivePage: React.FC = ({\n profileId,\n profile,\n posts,\n onShowModal,\n fetchProfile,\n fetchPosts,\n error\n}) => {\n const [copyUrlVisibility, setCopyUrlVisibility] = useState('none');\n const debouncedHandleScroll = debounce(handleScroll, 500);\n const hasNext = get(profile, ['posts', 'hasNext']);\n\n useTiaraPage({\n profileId,\n actionName: '소식아카이브_조회',\n page: 'post_archive'\n });\n\n // 1회만 조회\n useEffect(() => {\n fetchProfile(profileId);\n }, [fetchProfile, profileId]);\n\n const layerCode = (code: string) => {\n setCopyUrlVisibility(code);\n };\n\n const contents = useMemo(() => {\n const defaultContents = (\n <>\n \n \n \n \n \n \n );\n\n return defaultContents;\n }, [profile, onShowModal, posts, hasNext, copyUrlVisibility]);\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n window.addEventListener('scroll', debouncedHandleScroll);\n }\n return () => window.removeEventListener('scroll', debouncedHandleScroll);\n });\n\n useEffect(() => {\n if (!profile) {\n return;\n }\n\n const isForAdult = profile.isAdult;\n const validType = get(\n profile,\n 'authInfo.validType',\n ADULT_AUTH_VALID_TYPE.UNAUTHORIZED\n );\n\n if (isForAdult && validType !== ADULT_AUTH_VALID_TYPE.VERIFIED) {\n onShowModal(AGE_AUTH, { profile });\n }\n }, [profile, onShowModal, profileId]);\n\n if (!profile) {\n if (error?.response?.status === 404) {\n window.location.href = '/';\n }\n return <>;\n }\n\n function handleScroll() {\n const scrollNode = document.scrollingElement\n ? (document.scrollingElement as HTMLElement)\n : document.documentElement;\n const scrollHeight = scrollNode.scrollHeight;\n const scrollTop = scrollNode.scrollTop;\n const offsetHeight = scrollNode.offsetHeight;\n if (hasNext && scrollHeight - 2 * offsetHeight < scrollTop) {\n fetchPosts(profileId, { since: last(posts)?.sort ?? undefined });\n }\n }\n\n return <>{contents};\n};\n\nfunction mapStatetoProps(state: RootState, props: any) {\n const {\n home: { error }\n } = state;\n\n const {\n match: {\n params: { encodedProfileId: profileId }\n }\n } = props;\n\n return {\n error: error.error,\n profileId,\n profile: homeSelectors.getProfile(state, props),\n posts: homeSelectors.getProfilePosts(state, props)\n };\n}\n\nexport default connect(mapStatetoProps, dispatch =>\n bindActionCreators(\n {\n onShowModal: showModal,\n fetchProfile: homeOperations.fetchProfile,\n fetchPosts: homeOperations.fetchPosts\n },\n dispatch\n )\n)(PostArchivePage);\n","import React from 'react';\nimport isEmpty from 'lodash/isEmpty';\nimport { getSquircleThumbnailUrl } from 'utils/imageUtils';\nimport timeAgoInWords from 'utils/timeAgoInWords';\nimport nl2br from 'utils/nl2br';\nimport URI from 'urijs';\nimport { Comment } from 'models/Post';\n\nconst defaultProfileImageUrl =\n 'data:image/png;base64,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';\nconst hiddenProfileImageUrl =\n 'data:image/png;base64,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';\n\nconst replaceOldKageUrl = (url?: string) =>\n (url || '').replace(/^http:\\/\\/th-p.talk.kakao.co.kr/, '//p.kakaocdn.net');\n\ninterface Props {\n comment: Comment;\n}\n\nconst CommentItem: React.FC = ({\n comment: { author, contents, hiddenProfile, createdAt, status }\n}) => {\n const nickname = author?.nickname ?? '(알수없음)';\n const profileImageUrl = hiddenProfile\n ? hiddenProfileImageUrl\n : getSquircleThumbnailUrl(replaceOldKageUrl(author?.profileImageUrl)) ||\n defaultProfileImageUrl;\n const hasEmoticons = !isEmpty(\n contents.filter(content => content.t === 'sticker')\n );\n\n const renderContent = () => {\n if (status === 'T') {\n return (\n

    \n 해당 댓글은 권리침해 신고되어 임시조치되었습니다.\n
    \n \n 권리침해 신고 안내\n \n

    \n );\n }\n\n if (hasEmoticons) {\n return (\n

    \n (이모티콘이 포함된 댓글은 카카오톡 모바일앱에서 확인할 수 있습니다.)\n

    \n );\n }\n \n return (\n

    \n {contents.map((content, idx) => {\n const type = content?.t;\n const value = content?.v;\n switch (type) {\n case 'hashtag':\n return {value};\n case 'link': {\n let href = '';\n try {\n const uri = new URI(value);\n if (value.indexOf('@') !== -1) {\n uri.protocol('mailto');\n } else if (!uri.protocol()) {\n uri.protocol('http');\n }\n href = uri.toString();\n } catch (err) {\n href = value || '#';\n }\n return (\n \n {value}\n \n );\n }\n default:\n return nl2br(value);\n }\n })}\n

    \n );\n };\n\n return (\n
    \n
    \n \n
    \n
    \n {nickname}\n {timeAgoInWords(new Date(createdAt))}\n {renderContent()}\n
    \n
    \n );\n};\n\nexport default CommentItem;\n","import React from 'react';\nimport head from 'lodash/head';\nimport last from 'lodash/last';\nimport get from 'lodash/get';\nimport { direction, COMMENT } from 'state/modules/home/constants';\nimport CommentItem from 'views/components/Post/comment/CommentItem';\nimport { useSelector } from 'react-redux';\nimport { Post } from 'models/Post';\nimport { RootState } from 'state/modules';\nimport { isMobile } from 'utils/deviceUtils';\n\ninterface Props {\n post: Post;\n fetchComments: Function;\n onShowModal: Function;\n}\nconst CommentList: React.FC = ({ post, fetchComments, onShowModal }) => {\n const useragent = useSelector(\n state => state.home.useragent.result\n );\n const mobile = isMobile(useragent);\n\n const items = post.comments?.items || [];\n const hasNext = post.comments?.hasNext;\n const fetchDirection = get(post.comments, 'direction', direction.backward);\n const getFistComment = () => {\n fetchComments(post.author, post.id, { direction: direction.forward });\n };\n\n return (\n
    \n 댓글영역\n {hasNext && fetchDirection === direction.backward && (\n
    \n \n fetchComments(post.author.profileId, post.id, {\n since: head(items)?.id,\n direction: fetchDirection\n })\n }\n >\n \n \n 이전 댓글\n \n \n getFistComment()}\n >\n \n \n 처음 댓글\n \n \n
    \n )}\n
    \n {!post.commentable && (\n

    댓글을 작성 할 수 없는 소식입니다.

    \n )}\n {post.commentable && items.length === 0 ? (\n

    \n 등록된 댓글이 없습니다.\n
    \n 가장 먼저 댓글을 남겨보세요.\n

    \n ) : (\n items.map((comment, idx) => (\n \n ))\n )}\n
    \n {post.commentable && hasNext && fetchDirection === direction.forward && (\n \n fetchComments(post.author.profileId, post.id, {\n since: last(items)?.id,\n direction: fetchDirection\n })\n }\n >\n \n 댓글 더보기\n \n )}\n {post.commentable && (\n
    \n mobile && onShowModal(COMMENT, { post })}\n style={{ cursor: 'default' }}\n >\n \n \n \n 댓글 입력은 카카오톡 모바일 앱에서 가능합니다.\n \n \n 카카오톡앱에서 댓글 달기\n \n \n \n
    \n )}\n
    \n );\n};\n\nexport default CommentList;\n","import { Post } from 'models/Post';\nimport { useSelector } from 'react-redux';\nimport React, { useRef, useState, useLayoutEffect } from 'react';\nimport { SHARE, COMMENT, LIKE } from 'state/modules/home/constants';\nimport { RootState } from 'state/modules';\nimport numberFormat from 'utils/numberFormat';\nimport { isMobile } from 'utils/deviceUtils';\n\nfunction getScrollYPosition() {\n const target = document.body;\n const position = target.getBoundingClientRect();\n\n return position.top;\n}\n\ninterface ScrollCallbackParams {\n previousYPosition: number;\n currentYPosition: number;\n}\ntype ScrollCallback = (params: ScrollCallbackParams) => void;\n\n// TODO: dependencies 를 ReadonlyArray 타입으로 제공해야 함\nconst useScrollPosition = (effect: ScrollCallback, dependencies: any) => {\n const position = useRef(getScrollYPosition());\n useLayoutEffect(() => {\n const handleScroll = () => {\n const currentPosition = getScrollYPosition();\n\n effect({\n previousYPosition: position.current,\n currentYPosition: currentPosition\n });\n position.current = currentPosition;\n };\n\n window.addEventListener('scroll', handleScroll);\n\n return () => window.removeEventListener('scroll', handleScroll);\n }, [effect, dependencies]);\n};\n\nconst isBottom = () => {\n return window.innerHeight + window.scrollY >= document.body.scrollHeight;\n};\n\ninterface Props {\n post: Post;\n onShowModal: Function;\n}\n\nconst PostActionBar: React.FC = ({\n post,\n post: { commentCount, permalink, shareCount, likeCount },\n onShowModal\n}) => {\n const [visibility, setVisibility] = useState('off');\n\n useScrollPosition(({ previousYPosition, currentYPosition }) => {\n const isShow =\n !isBottom() &&\n (currentYPosition >= 0 || currentYPosition > previousYPosition)\n ? 'on'\n : 'off';\n if (isShow !== visibility) {\n setVisibility(isShow);\n }\n }, [visibility]);\n\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n const mobile = isMobile(useragent);\n\n return (\n
    \n 좋아요, 댓글, 공유 상태바\n onShowModal(LIKE, { post, isPC: !mobile })}\n >\n 좋아요\n {!post.blindType || post.blindType === ''\n ? post.likeCount > 0\n ? numberFormat(likeCount)\n : '좋아요'\n : 0}\n \n post.commentable && onShowModal(COMMENT, { post, isPC: !mobile })}\n >\n 댓글\n {!post.blindType || post.blindType === ''\n ? post.commentCount > 0\n ? numberFormat(commentCount)\n : '댓글'\n : 0}\n \n \n !post.blindType || post.blindType === ''\n ? !post.unlisted && onShowModal(SHARE, { post, permalink })\n : alert('운영정책에 의해 제한된 게시물입니다.')\n }\n >\n 공유\n {!post.blindType || post.blindType === ''\n ? post.shareCount > 0\n ? numberFormat(shareCount)\n : '공유'\n : 0}\n \n
    \n );\n};\n\nexport default PostActionBar;\n","import React from 'react';\nimport { Post } from '../../../models/Post';\nimport AddFriendDoneLayer from '../AddFriendDoneLayer';\nimport { Profile } from '../../../models/Profile';\ninterface Props {\n completedLayer: string;\n post: Post;\n profile: Profile;\n}\n\nconst location = window.location;\nconst clickBtn = () => {\n const layer = window.document.getElementById('completedLayer');\n const dimmedLayer = window.document.getElementById('dimmedLayer');\n if (!!layer) {\n layer.style.display = 'none';\n }\n if (!!dimmedLayer) {\n dimmedLayer.style.display = 'none';\n }\n // param 제거\n location.href =\n location.protocol + '//' + location.hostname + location.pathname;\n};\nconst date = new Date();\nconst today =\n date.getFullYear() +\n '년 ' +\n (date.getMonth() + 1) +\n '월 ' +\n date.getDate() +\n '일';\n\nconst CompletedLayer: React.FC> = ({\n children,\n completedLayer,\n post,\n profile\n}) => (\n <>\n {completedLayer === 'blockfriend' && (\n
    \n
    \n \n
    \n 채널 차단 완료\n

    \n {today} {post.author.name}\n
    \n 채널이 차단되었습니다.\n

    \n
    \n clickBtn()}\n >\n 확인\n \n
    \n
    \n
    \n \n )}\n {completedLayer === 'addfrienddone' && (\n
    \n \n
    \n )}\n \n);\n\nexport default CompletedLayer;\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { connect, useSelector } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport get from 'lodash/get';\nimport { homeOperations, homeSelectors } from 'state/modules/home';\nimport { showModal } from 'state/modules/home/actions';\nimport {\n ADULT_AUTH_VALID_TYPE,\n AGE_AUTH,\n androidInstallUrl,\n iosInstallUrl\n} from 'state/modules/home/constants';\nimport ContentWrapper from 'views/components/ContentWrapper';\nimport PostCard from 'views/components/Post';\nimport CommentList from 'views/components/Post/comment/CommnetList';\nimport Gnb from 'views/components/Gnb';\nimport PostActionBar from 'views/components/Post/PostActionBar';\nimport { useTiara } from 'utils/tiaraHelper';\nimport { isBlindPost, isBlindPostContentOnly } from 'utils/postUtil';\nimport { RootState } from 'state/modules';\nimport { Post } from 'models/Post';\nimport openWithApp from 'utils/openWithApp';\nimport { getOsName, isMobile } from 'utils/deviceUtils';\nimport queryString from 'query-string';\nimport CompletedLayer from '../components/CompletedLayer';\nimport UrlCopyLayer from '../components/UrlCopyLayer';\n\ninterface Props {\n profileId: string;\n postId: number;\n post: Post;\n fetchPost: Function;\n fetchComments: Function;\n onShowModal: Function;\n error: any;\n}\n\nconst PostPage: React.FC = ({\n profileId,\n postId,\n post,\n fetchPost,\n fetchComments,\n onShowModal,\n error\n}) => {\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n\n const params = queryString.parse(window.location.search);\n const completed = params?.completedLayer ?? 'none';\n const [copyUrlVisibility, setCopyUrlVisibility] = useState('none');\n\n useTiara({\n page: 'post'\n });\n\n useEffect(() => {\n fetchPost(profileId, postId);\n }, [fetchPost, profileId, postId]);\n\n useEffect(() => {\n if (!post) {\n return;\n }\n\n if (!window.location.search) {\n return;\n }\n\n const params = queryString.parse(window.location.search);\n if (params.action !== 'add_channel') {\n return;\n }\n\n if (isMobile(useragent)) {\n const deviceOS = getOsName(useragent);\n const postPath = `plusfriend/post/${post.author.id}/${post.id}?action=add_channel`;\n const installUrl =\n deviceOS === 'Android' ? androidInstallUrl : iosInstallUrl;\n openWithApp(\n deviceOS,\n 'kakaoplus',\n postPath,\n 'com.kakao.talk',\n installUrl\n );\n } else {\n window.location.href = `/${profileId}/friend_direct?post_id=${post.id}`;\n return;\n }\n }, [fetchPost, profileId, postId, post, useragent]);\n\n useEffect(() => {\n if (!post) {\n return;\n }\n\n const profile = post.author;\n if (!profile) {\n return;\n }\n\n const isForAdult = profile.isAdult;\n const validType = get(\n profile,\n 'authInfo.validType',\n ADULT_AUTH_VALID_TYPE.UNAUTHORIZED\n );\n if (isForAdult && validType !== ADULT_AUTH_VALID_TYPE.VERIFIED) {\n onShowModal(AGE_AUTH, { profile });\n }\n }, [post, onShowModal, profileId]);\n\n const layerCode = (code: string) => {\n setCopyUrlVisibility(code);\n };\n\n const content = useMemo(() => {\n if (!post) return null;\n\n const profile = post.author;\n if (!profile) {\n return;\n }\n\n const validType = get(\n profile,\n 'authInfo.validType',\n ADULT_AUTH_VALID_TYPE.UNAUTHORIZED\n );\n\n const isBlind = isBlindPost(post.blindType);\n const isBlindContentOnly = isBlindPostContentOnly(post.blindType);\n const isAgeCovered =\n post.adultOnly && validType !== ADULT_AUTH_VALID_TYPE.VERIFIED;\n\n if (isBlind && !isBlindContentOnly) {\n return (\n
    \n

    \n \n 운영정책에 의해 블라인드 된 소식입니다.\n

    \n
    \n );\n }\n\n return (\n
    \n {!isAgeCovered && (\n \n )}\n \n {!isBlind && !isAgeCovered && (\n \n )}\n
    \n );\n }, [fetchComments, onShowModal, post]);\n\n if (!post) {\n if (error?.response?.status === 404) {\n window.location.href = '/';\n }\n return (\n <>\n \n \n );\n }\n return (\n <>\n \n \n {content}\n \n \n \n \n );\n};\n\nfunction mapStateToProps(state: RootState, props: any) {\n const {\n match: {\n params: { encodedProfileId: profileId, postId }\n }\n } = props;\n const {\n home: { error }\n } = state;\n\n return {\n profileId,\n postId: Number(postId),\n post: homeSelectors.getPost(state, props),\n error: error.error\n };\n}\n\nexport default connect(mapStateToProps, dispatch =>\n bindActionCreators(\n {\n onShowModal: showModal,\n fetchPost: homeOperations.fetchPost,\n fetchComments: homeOperations.fetchComments\n },\n dispatch\n )\n)(PostPage);\n","import React from 'react';\nimport nl2br from 'utils/nl2br';\n\ninterface Props {\n title: string;\n description: string;\n}\nconst ErrorContent: React.FC = ({ title, description }) => (\n
    \n \n {title}\n

    \n {nl2br(description)}\n

    \n
    \n);\n\nexport default ErrorContent;\n","import React from 'react';\nimport Gnb from 'views/components/Gnb';\nimport ContentWrapper from 'views/components/ContentWrapper';\nimport ErrorContent from 'views/components/ErrorContent';\n\nconst ErrorPage: React.FC = () => (\n <>\n \n \n \n \n \n);\n\nexport default ErrorPage;\n","import React from 'react';\nimport { RouteChildrenProps } from 'react-router';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'state/modules';\nimport { isMobile } from 'utils/deviceUtils';\nimport OnlyMobileErrorPage from './OnlyMobileErrorPage';\nimport DefaultMobileBridgePage from './bridges/DefaultMobileBridgePage';\n\ninterface CouponParam {\n encodedProfileId?: string;\n couponId?: string;\n}\n\nconst CouponPage: React.FC> = (props) => {\n const {match} = props;\n const encodedProfileId = match?.params?.encodedProfileId;\n const couponId = match?.params?.couponId;\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n\n if (!isMobile(useragent)) {\n return ;\n }\n\n const scheme = `plusfriend/coupon/${encodedProfileId}/${couponId}`;\n return ;\n};\n\nexport default CouponPage;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { RouteChildrenProps } from 'react-router';\nimport { RootState } from 'state/modules';\nimport queryString from 'query-string';\nimport { isMobile } from 'utils/deviceUtils';\nimport DefaultMobileBridgePage from 'views/pages/bridges/DefaultMobileBridgePage';\nimport OnlyMobileErrorPage from 'views/pages/OnlyMobileErrorPage';\nimport ErrorPage from 'views/pages/ErrorPage';\nimport { isEmpty } from 'lodash';\n\ninterface Param {\n encodedProfileId?: string;\n}\n\nconst BridgePage: React.FC> = props => {\n const { match } = props;\n const encodedProfileId = match?.params?.encodedProfileId;\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n\n const params = queryString.parse(window.location.search);\n\n if (!('type' in params)) {\n return ;\n }\n\n if (!isMobile(useragent)) {\n return ;\n }\n\n if (params?.type === 'kakaoview') {\n return (\n \n );\n } else if (params?.type === 'manager') {\n return (\n \n );\n } else if (!isEmpty(params?.type)) {\n return (\n \n );\n }\n\n return ;\n};\n\nexport default BridgePage;\n","import React from 'react';\nimport Gnb from 'views/components/Gnb';\nimport ContentWrapper from 'views/components/ContentWrapper';\nimport ErrorContent from 'views/components/ErrorContent';\n\nconst SDKErrorPage: React.FC = () => (\n <>\n \n \n \n \n \n);\n\nexport default SDKErrorPage;\n","import React from 'react';\nimport { RouteChildrenProps } from 'react-router';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'state/modules';\nimport { isMobile } from 'utils/deviceUtils';\nimport { isEmpty } from 'lodash';\nimport queryString from 'query-string';\nimport OnlyMobileErrorPage from './OnlyMobileErrorPage';\nimport DefaultMobileBridgePage from './bridges/DefaultMobileBridgePage';\nimport ErrorPage from 'views/pages/ErrorPage';\n\ninterface CouponParam {\n encodedProfileId?: string;\n}\n\nconst CouponBookPage: React.FC> = (props) => {\n const {match} = props;\n const encodedProfileId = match?.params?.encodedProfileId;\n const params = queryString.parse(window?.location?.search);\n const {ids} = params;\n\n const useragent = useSelector(\n (state: RootState) => {\n return state.home.useragent.result;\n },\n () => false\n );\n\n if (isEmpty(ids)) {\n return ;\n }\n\n if (!isMobile(useragent)) {\n return ;\n }\n\n let couponIds: Array = [];\n if (typeof ids === 'string') {\n couponIds = ids?.split(',').map(id => parseInt(id)).filter(id => !!id);\n } else if (ids !== null && typeof ids === 'object') {\n couponIds = ids?.map(id => parseInt(id)).filter(id => !!id);\n }\n \n if (!isEmpty(couponIds)) {\n const scheme = `plusfriend/couponbook/${encodedProfileId}?ids=${couponIds.join(',')}&from=web`;\n return ;\n }\n\n return ;\n};\n\nexport default CouponBookPage;\n","import React from 'react';\nimport Modal from 'react-modal';\n\nif (process.env.NODE_ENV !== 'test') Modal.setAppElement('#root');\n\nconst defaultStyle: ReactModal.Styles = {\n content: {\n marginTop: '-98px',\n backgroundColor: 'rgba(255,255,255,1)'\n },\n overlay: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 9998,\n backgroundColor: 'rgba(0,0,0,0.75)'\n }\n};\n\ninterface Props {\n children: any;\n contentLabel: string;\n style?: ReactModal.Styles;\n onRequestClose?: (ev: React.MouseEvent) => void;\n}\nconst BaseModal: React.FC = ({\n children: { renderTitle, renderContent, isButtonInside },\n onRequestClose,\n ...rest\n}) => (\n \n
    \n {renderTitle && {renderTitle()}}\n {renderContent()}\n {!isButtonInside && (\n \n )}\n
    \n \n);\n\nexport default BaseModal;\n","import React from 'react';\nimport CopyToClipboard from 'react-copy-to-clipboard';\nimport KakaoStoryShareButton from 'views/components/KakaoStoryShareButton';\nimport BaseModal from 'views/components/Modal/BaseModal';\n\nconst openFbShare = (url: string) => {\n window.open(\n `http://www.facebook.com/share.php?u=${encodeURIComponent(url)}`,\n '_blank',\n 'menubar=no,status=no,toolbar=no,width=600,height=500'\n );\n};\n\ninterface Props {\n permalink: any;\n device: any;\n onHideModal: (ev: React.MouseEvent) => void;\n}\nconst ShareModal: React.FC = ({ onHideModal, permalink, device }) => {\n return (\n \n {{\n renderTitle: () => (\n \n 카카오톡 채널 소식을\n
    \n SNS에 공유해 보세요.\n
    \n ),\n renderContent: () => (\n
    \n
      \n
    • \n openFbShare(permalink)}\n >\n \n 페이스북\n \n
    • \n
    • \n alert('URL이 복사되었습니다.')}\n >\n \n \n
    • \n
    \n
    \n \n URL 공유시, 아래 주소를 복사하세요.\n \n
    \n {permalink}\n alert('URL이 복사되었습니다.')}\n >\n \n \n
    \n
    \n
    \n )\n }}\n
    \n );\n};\n\nexport default ShareModal;\n","import React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport {\n SHARE,\n PROFILE_IMAGE,\n COMMENT,\n LIKE,\n AGE_AUTH,\n ADD_FRIEND,\n BLOCK_FRIEND,\n KREW_PRIVATE_PROFILE\n} from 'state/modules/home/constants';\nimport { showModal, hideModal } from 'state/modules/home/actions';\nimport ShareModal from 'views/components/Modal/ShareModal';\nimport CommentModal from 'views/components/Modal/CommentModal';\nimport ProfileImageModal from 'views/components/Modal/ProfileImageModal';\nimport LikeModal from 'views/components/Modal/LikeModal';\nimport AgeAuthAlertModal from 'views/components/Modal/AgeAuthAlertModal';\nimport AddFriendModal from 'views/components/Modal/AddFriendModal';\nimport BlockFriendModal from 'views/components/Modal/BlockFriendModal';\nimport KrewPrivateProfileModal from 'views/components/Modal/KrewPrivateProfileModal';\nimport { RootState } from 'state/modules';\n\nconst MODAL_COMPONENTS: any = {\n [SHARE]: ShareModal,\n [COMMENT]: CommentModal,\n [LIKE]: LikeModal,\n [PROFILE_IMAGE]: ProfileImageModal,\n [AGE_AUTH]: AgeAuthAlertModal,\n [ADD_FRIEND]: AddFriendModal,\n [BLOCK_FRIEND]: BlockFriendModal,\n [KREW_PRIVATE_PROFILE]: KrewPrivateProfileModal\n};\n\ninterface Props {\n modalType: string;\n modalProps: any;\n onShowModal: Function;\n onHideModal: Function;\n}\nconst ModalRoot: React.FC = ({\n modalType,\n modalProps,\n onShowModal,\n onHideModal\n}) => {\n if (!modalType) {\n return null;\n }\n const SpecificModal = MODAL_COMPONENTS[modalType];\n return (\n \n );\n};\n\nconst mapStateToProps = (state: RootState) => {\n const {\n home: {\n modal: { modalType, modalProps }\n }\n } = state;\n return {\n modalType: modalType,\n modalProps: modalProps\n };\n};\n\nexport default connect(mapStateToProps, dispatch =>\n bindActionCreators(\n {\n onShowModal: showModal,\n onHideModal: hideModal\n },\n dispatch\n )\n)(ModalRoot);\n","import { Post } from 'models/Post';\nimport React from 'react';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'state/modules';\nimport BaseModal from 'views/components/Modal/BaseModal';\nimport { getOsName } from 'utils/deviceUtils';\nimport 'styles/modal.css';\n\ninterface Props {\n post: Post;\n onHideModal: (ev: React.MouseEvent) => void;\n isPC: boolean;\n}\nconst CommentModal: React.FC = ({ onHideModal, post, isPC = false }) => {\n const useragent = useSelector(\n state => state.home.useragent.result\n );\n const osName = getOsName(useragent);\n const schemeHost = `plusfriend/post/${post.author.id}/${post.id}`;\n const scheme =\n osName === 'Android'\n ? `kakaoplus://${schemeHost}`\n : `${process.env.REACT_APP_PF_CUSTOM_SCHEME}://${schemeHost}`;\n\n return (\n \n {{\n renderTitle: () => (\n \n 댓글 작성은 카카오톡\n
    \n 모바일앱에서 가능합니다.\n
    \n ),\n renderContent: () => {\n if (isPC) {\n return (\n
    \n \n 닫기\n \n
    \n );\n }\n return (\n
    \n \n 닫기\n \n window.open(scheme)}\n >\n 카카오톡앱 열기\n \n
    \n );\n },\n isButtonInside: true\n }}\n
    \n );\n};\n\nexport default CommentModal;\n","import React from 'react';\nimport BaseModal from 'views/components/Modal/BaseModal';\nimport { useSelector } from 'react-redux';\nimport { Post } from 'models/Post';\nimport { RootState } from 'state/modules';\nimport { getOsName } from 'utils/deviceUtils';\nimport 'styles/modal.css';\n\ninterface Props {\n post: Post;\n onHideModal: (ev: React.MouseEvent) => void;\n isPC: boolean;\n}\nconst LikeModal: React.FC = ({ onHideModal, post, isPC = false }) => {\n const useragent = useSelector(\n state => state.home.useragent.result\n );\n const osName = getOsName(useragent);\n const schemeHost = `plusfriend/post/${post.author.id}/${post.id}`;\n const scheme =\n osName === 'Android'\n ? `kakaoplus://${schemeHost}`\n : `${process.env.REACT_APP_PF_CUSTOM_SCHEME}://${schemeHost}`;\n\n return (\n \n {{\n renderTitle: () => (\n \n 소식 좋아요는 카카오톡\n
    \n 모바일앱에서 가능합니다.\n
    \n ),\n renderContent: () => {\n if (isPC) {\n return (\n
    \n \n 닫기\n \n
    \n );\n }\n return (\n
    \n \n 닫기\n \n window.open(scheme)}\n >\n 카카오톡앱 열기\n \n
    \n );\n },\n isButtonInside: true\n }}\n
    \n );\n};\n\nexport default LikeModal;\n","import React from 'react';\nimport BaseModal from './BaseModal';\nimport { getImageUrl } from 'utils/imageUtils';\nimport { Post } from 'models/Post';\nimport { Image } from 'models/Medium';\n\ninterface Props {\n post: Post;\n profileImage: Image;\n coverImage: Image;\n onHideModal: (ev: React.MouseEvent) => void;\n}\nconst ProfileImageModal: React.FC = ({ onHideModal, profileImage, coverImage }) => {\n const MAX_WIDTH = window.innerWidth >= 560 ? 560 : window.innerWidth * 0.7;\n const image = profileImage ? profileImage : coverImage;\n\n const width = image.width < MAX_WIDTH ? image.width : MAX_WIDTH;\n const height =\n image.width < MAX_WIDTH\n ? image.height\n : image.height * (MAX_WIDTH / image.width);\n\n const defaultStyle: ReactModal.Styles = {\n content: {\n position: 'absolute',\n backgroundColor: 'transparent',\n border: 0,\n width: width,\n top: '50%',\n left: '50%',\n marginTop: -(height / 2),\n marginLeft: -(width / 2)\n },\n overlay: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 9998,\n backgroundColor: 'rgba(0,0,0,0.75)',\n width: '100%',\n height: '100%'\n }\n };\n\n return (\n \n {{\n renderContent: () => (\n
    \n
    \n \n
    \n \n 레이어 닫기\n \n
    \n ),\n isButtonInside: true\n }}\n \n );\n};\n\nexport default ProfileImageModal;\n","import React from 'react';\nimport get from 'lodash/get';\nimport BaseModal from 'views/components/Modal/BaseModal';\nimport { ADULT_AUTH_VALID_TYPE } from 'state/modules/home/constants';\nimport { Profile } from 'models/Profile';\n\ninterface Props {\n profile: Profile;\n}\nconst AgeAuthAlertModal: React.FC = ({ profile }) => {\n const validType = get(profile, 'validType', 'undefined');\n const isUnder19 = validType === ADULT_AUTH_VALID_TYPE.LOWER_AGE_LIMIT;\n const isNotFound =\n validType === 'undefined' || validType === ADULT_AUTH_VALID_TYPE.NOT_FOUND;\n const isUnauthorized =\n validType === ADULT_AUTH_VALID_TYPE.UNAUTHORIZED ||\n validType === ADULT_AUTH_VALID_TYPE.UNAUTHORIZED_AGE;\n\n const getModalMessage = () => {\n const profileName = get(profile, 'name');\n if (isUnder19) {\n return (\n <>\n 해당 채널 {profileName}(은)는 청소년에 유해한 정보/컨텐츠 등이\n 포함되어 있을 수 있어 정보통신망 이용촉진및 정보보호 등에 관한 법률 및\n 청소년 보호법에 따라 19세미만의 청소년이 이용할 수 없습니다.\n \n );\n }\n\n if (isNotFound) {\n return (\n <>\n 해당 채널 {profileName}(은)는 청소년에 유해한 정보/컨텐츠 등이\n 포함되어 있을 수 있어 정보통신망 이용촉진및 정보보호 등에 관한 법률 및\n 청소년 보호법에 따라 19세미만의 청소년이 이용할 수 없습니다.\n
    \n 로그인 후 카카오 계정의 본인 확인을 해주세요.\n \n );\n }\n\n if (isUnauthorized) {\n return (\n <>\n 해당 채널 {profileName}(은)는 청소년에 유해한 정보/컨텐츠 등이\n 포함되어 있을 수 있어 정보통신망 이용촉진및 정보보호 등에 관한 법률 및\n 청소년 보호법에 따라 19세미만의 청소년이 이용할 수 없습니다.\n
    \n 카카오 계정의 본인 확인을 해주세요.\n \n );\n }\n };\n\n const goToLogin = () => {\n const returnUrl = profile.permalink;\n window.location.href = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/login?continue=${returnUrl}`;\n };\n\n const goToLogout = () => {\n const returnUrl = profile.permalink;\n const loginPage = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/login?continue=${returnUrl}`;\n window.location.href = `${process.env.REACT_APP_KAKAO_ACCOUNT_URL}/logout?continue=${loginPage}`;\n };\n\n const goToAgeAuth = () => {\n const ageAuthUrl = get(profile, 'authInfo.ageAuthUrl');\n window.location.href = ageAuthUrl;\n };\n\n return (\n \n {{\n renderTitle: () => (\n
    \n \n \n 성인인증이 필요합니다.\n \n
    \n ),\n renderContent: () => (\n
    \n

    {getModalMessage()}

    \n
    \n \n isUnder19\n ? goToLogout()\n : isNotFound\n ? goToLogin()\n : goToAgeAuth()\n }\n >\n \n {isUnder19\n ? '다른 계정으로 로그인'\n : isNotFound\n ? '로그인 하러 가기'\n : '본인인증 하러 가기'}\n \n \n
    \n
    \n ),\n isButtonInside: true\n }}\n
    \n );\n};\n\nexport default AgeAuthAlertModal;\n","import React from 'react';\nimport BaseModal from 'views/components/Modal/BaseModal';\nimport { Profile } from 'models/Profile';\n\ninterface Props {\n profile: Profile;\n link: string;\n onHideModal: (ev: React.MouseEvent) => void;\n}\nconst AddFriendModal: React.FC = ({ profile, link, onHideModal }) => {\n const defaultStyle: ReactModal.Styles = {\n content: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n marginTop: -120\n },\n overlay: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n zIndex: 9998,\n backgroundColor: 'rgba(0,0,0,0.75)',\n width: '100%',\n height: '100%'\n }\n };\n const btnOk = () => {\n window.location.href = link;\n };\n return (\n \n {{\n renderTitle: () => (\n
    \n {profile.name}\n
    \n ),\n renderContent: () => (\n
    \n

    \n 광고와 마케팅 메시지를
    \n 카카오톡으로 받아 볼 수 있습니다.\n

    \n
    \n \n btnOk()}\n >\n \n 채널추가\n \n
    \n
    \n )\n }}\n \n );\n};\n\nexport default AddFriendModal;\n","import React from 'react';\nimport BaseModal from 'views/components/Modal/BaseModal';\nimport { Profile } from 'models/Profile';\n\ninterface Props {\n profile: Profile;\n blockFriendlink: string;\n onHideModal: (ev: React.MouseEvent) => void;\n}\nconst BlockFriendModal: React.FC = ({\n profile,\n blockFriendlink,\n onHideModal\n}) => {\n const defaultStyle: ReactModal.Styles = {\n content: {\n position: 'absolute',\n border: 0,\n top: '50%',\n left: '50%',\n marginTop: -120\n },\n overlay: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 9998,\n backgroundColor: 'rgba(0,0,0,0.75)',\n width: '100%',\n height: '100%'\n }\n };\n return (\n \n {{\n renderTitle: () => (\n
    \n 채널 차단\n
    \n ),\n renderContent: () => (\n
    \n

    채널을 차단하시겠습니까?

    \n
    \n \n {\n window.location.href = blockFriendlink;\n }}\n >\n 차단\n \n
    \n
    \n )\n }}\n \n );\n};\n\nexport default BlockFriendModal;\n","import React from 'react';\nimport { iosInstallUrl, androidInstallUrl } from 'state/modules/home/constants';\nimport BaseModal from 'views/components/Modal/BaseModal';\nimport { useSelector } from 'react-redux';\nimport { RootState } from 'state/modules';\nimport { getOsName } from 'utils/deviceUtils';\n\ninterface Props {\n onHideModal: (ev: React.MouseEvent) => void;\n profileId: String;\n postId: String;\n}\nconst KrewPrivateProfileModal: React.FC = ({\n onHideModal,\n profileId,\n postId\n}) => {\n const useragent = useSelector(\n state => state.home.useragent.result\n );\n const osName = getOsName(useragent);\n const schemeHost = postId\n ? `plusfriend/post/${profileId}/${postId}`\n : `plusfriend/home/${profileId}`;\n const scheme =\n osName === 'Android'\n ? `kakaoplus://${schemeHost}`\n : `${process.env.REACT_APP_PF_CUSTOM_SCHEME}://${schemeHost}`;\n\n return (\n \n {{\n renderTitle: () => 모바일에서 확인 해주세요.,\n renderContent: () => (\n
    \n window.open(scheme)}\n >\n 카카오톡앱 열기\n \n \n window.open(\n osName === 'iOS' ? iosInstallUrl : androidInstallUrl\n )\n }\n >\n 카카오톡앱 설치하기\n \n
    \n )\n }}\n
    \n );\n};\n\nexport default KrewPrivateProfileModal;\n","import React from 'react';\nimport { resolveValue, Toaster } from 'react-hot-toast';\n\nconst BottomToaster = () => {\n return (\n \n {t => (\n
    \n
    {resolveValue(t.message, t)}
    \n
    \n )}\n \n );\n};\n\nexport { BottomToaster };\n","import React from 'react';\nimport ModalRoot from 'views/containers/ModalRoot';\nimport { BottomToaster } from '../components/Toast/BottomToast';\n\nconst HomeLayout: React.FC = ({ children }) => (\n <>\n \n
    \n {children}\n \n \n
    \n \n);\n\nexport default HomeLayout;\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { RootState } from 'state/modules';\nimport HomeLayout from 'views/layouts/Home';\n// import ErrorPage from 'views/pages/ErrorPage';\n\ninterface Props {\n router: any;\n error?: any;\n}\n\nconst App: React.FC = ({ router, error }) => {\n if (error) {\n console.error(error);\n }\n return {router};\n}\n\nexport default connect((state: RootState) => {\n const { error } = state.home.error || {};\n return {\n error\n };\n})(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.0/8 are 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 headers: { 'Service-Worker': 'script' }\n })\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\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import 'core-js/stable';\nimport 'regenerator-runtime/runtime';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport { Provider as ReduxProvider } from 'react-redux';\nimport configureStore from 'state/store';\nimport createRoutes from 'routes';\nimport 'index.css';\nimport App from 'views/App';\nimport * as serviceWorker from 'serviceWorker';\nimport { initTiara } from 'utils/tiaraHelper';\nimport { initSentry } from 'utils/sentryHelper';\nimport * as Sentry from '@sentry/browser';\n\n// initial dummmy data\nwindow.REDUX_INITIAL_DATA = {\n home: {\n entities: {}\n }\n};\n\ninitTiara();\ninitSentry();\n\ntry {\n const reduxStore = configureStore(window.REDUX_INITIAL_DATA);\n\n ReactDOM.render(\n \n {createRoutes()}} />\n ,\n document.getElementById('root')\n );\n} catch (e) {\n console.log('eeeeeee', e);\n if (process.env.REACT_APP_SENTRY_DSN) {\n Sentry.captureException(e);\n }\n}\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import * as Sentry from '@sentry/browser';\nimport get from 'lodash/get';\n\nexport const initSentry = () => {\n const sentryDsn = process.env.REACT_APP_SENTRY_DSN;\n if (!!sentryDsn) {\n const phase = `${process.env.REACT_APP_PHASE}`.toLowerCase();\n const isSandbox = phase === 'sandbox';\n Sentry.init({\n dsn: sentryDsn,\n environment: phase,\n debug: isSandbox,\n beforeSend: (event, hint) => {\n if (!event || !hint) {\n return event;\n }\n\n // const url = get(event, 'request.url', '');\n // const exceptionCode = get(hint, 'originalException.code');\n const exceptionMsg = get(hint, 'originalException.message', '');\n\n if (isSandbox) {\n return null;\n }\n\n if (exceptionMsg.indexOf('checkDomStatus') !== -1) {\n // Cannot read property 'checkDomStatus' of undefined\n return null;\n } else if (exceptionMsg.indexOf('window.appInterfaceUtil.triggerMessage') !== -1) {\n // undefined is not an object (evaluating 'window.appInterfaceUtil.triggerMessage')\n return null;\n }\n\n return event;\n },\n ignoreErrors: [\n 'Unauthorized',\n 'Forbidden',\n ]\n });\n } else {\n console.warn('SENTRY DSN 환경설정이 필요합니다.');\n }\n};\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport thunk from 'redux-thunk';\nimport rootReducer from './modules'; // import all reducers from modules/index.js\n\nexport default function configureStore(initialState = {}) {\n const devTools =\n process.env.NODE_ENV === 'development' &&\n typeof window !== 'undefined' &&\n window.__REDUX_DEVTOOLS_EXTENSION__ &&\n window.__REDUX_DEVTOOLS_EXTENSION__();\n const middleware = applyMiddleware(thunk);\n const enhancer = devTools ? compose(middleware, devTools) : middleware;\n\n return createStore(rootReducer, initialState, enhancer);\n}\n","import React from 'react';\nimport { Route, Switch } from 'react-router';\nimport ScrollToTop from 'views/components/ScrollToTop';\nimport ProfilePage from 'views/pages/ProfilePage';\nimport PostArchivePage from 'views/pages/PostArchivePage';\nimport PostPage from 'views/pages/PostPage';\nimport ErrorPage from 'views/pages/ErrorPage';\nimport CouponPage from 'views/pages/CouponPage';\nimport BridgePage from 'views/pages/BridgePage';\nimport SDKErrorPage from './views/pages/SDKErrorPage';\nimport CouponBookPage from 'views/pages/CouponBookPage';\n\nexport default function createRoutes() {\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n"],"sourceRoot":""}