{"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","chatroomLink","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","_window$TiaraTracker","tiaraInstance","TiaraTracker","getInstance","setSection","pageMeta","setPage","track","Sentry","TiaraTrackUtils","trackClick","click","event","_window$TiaraTracker2","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","_window$TiaraTracker3","eventMeta","tiaraTrackClick","customProps","actionKind","_window$TiaraTracker4","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.12b00e70.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_PROXY_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_PROXY_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 const chatroomLink = isChatBot\n ? `/talk/bot/${profile?.profileId}`\n : `/${profile?.profileId}/chat`;\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_PROXY_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_PROXY_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[]) =>\n 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) =>\n 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_PROXY_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":""}