{"version":3,"sources":["webpack://@lemon8/web-sharing/./client/components/cta-modal/atom.ts","webpack://@lemon8/web-sharing/./client/components/cta-modal/index.tsx","webpack://@lemon8/web-sharing/./client/components/fallback-page-helmet/index.tsx","webpack://@lemon8/web-sharing/./client/components/load-more/util.ts","webpack://@lemon8/web-sharing/./client/components/load-more/index.tsx","webpack://@lemon8/web-sharing/./client/utils/active/schema.ts","webpack://@lemon8/web-sharing/./client/utils/active/use-fb-active-url.ts","webpack://@lemon8/web-sharing/./client/utils/build-sharing-url.ts","webpack://@lemon8/web-sharing/./client/utils/cta/use-cta-directly.ts","webpack://@lemon8/web-sharing/./client/utils/cta/use-cta-by-modal.ts","webpack://@lemon8/web-sharing/./client/utils/cta/use-cta-by-modal-callback.ts","webpack://@lemon8/web-sharing/./client/utils/event.ts","webpack://@lemon8/web-sharing/./shared/constant/click-position.ts","webpack://@lemon8/web-sharing/./shared/constant/loaders.ts","webpack://@lemon8/web-sharing/./shared/constant/page-type.ts","webpack://@lemon8/web-sharing/./shared/models/article/article-detail.ts","webpack://@lemon8/web-sharing/./shared/utils/page-traffic-util.ts","webpack://@lemon8/web-sharing/./shared/utils/root-traffic-util.ts"],"names":["$CTAModal","atomWithReset","CTAModal","modelStatus","useAtomValue","close","useResetAtom","t","useTranslation","useEffect","window","Tea","current_position","clickPosition","page_click_id","clickId","handleClickConfirm","useCallback","click_result","onConfirm","handleClickCancel","onCancel","visibleCls","useMemo","shown","Boolean","hidden","modalContent","variant","jsxs","className","children","jsx","Button","size","ButtonSize","title","onClick","titleColor","Colors","cls","FallbackPageHelmet","Fragment","UI","scrollY","pageYOffset","document","body","scrollTop","documentElement","offset","el","type","getBoundingClientRect","left","top","width","height","pageXOffset","PREFIX","props","render","loadData","initList","showEnd","loadingText","endText","placeholder","isEnd","alwaysShowLoading","distanceToLoad","isLoading","setIsLoading","useState","dataList","setDataList","listRef","useRef","timerRef","listDom","doLoadMore","then","res","data","list","finally","scrollLoadMore","current","clearTimeout","setTimeout","innerHeight","addEventListener","passive","capture","renderBottomText","renderPlaceholder","length","concat","ref","isArticleSchemaBuildingProps","input","pageType","isVideoSchemaBuildingProps","isUserSchemaBuildingProps","isCategorySchemaBuildingProps","isHashtagSchemaBuildingProps","isPOISchemaBuildingProps","isSearchSchemaBuildingProps","buildSearchSchema","query","baseUrl","tab","inputClickType","logExtra","search_page_from","search_from","previous_page_name","encodeURIComponent","JSON","stringify","buildSchema","protocol","host","params","URLSearchParams","group_id","groupId","authorId","set","user_id","userId","channel_id","String","categoryId","hashtag_id","hashtagId","poi_id","poiId","Error","append","pid","toString","SHARING_FB_PID","useFBActiveUrl","schemaOption","versions","$ABTest","rootTraffic","$RootTraffic","pageTraffic","$SharingPageLevelTraffic","schema","_objectSpread","schemaURL","URL","searchParams","traffic_type","trafficPid","is_from_wap","_t","sharerToken","share_platform","sharePlatform","RootTrafficUtil","PageTrafficUtil","$SharingUrlBuilder","atom","get","enterHref","isSharingTest","region","$Locale","enterHrefObj","path","url","pathname","search","e","useSharingUrlBuilder","useSharingUrl","buildSharingUrl","useCTADirectly","preventDefault","sendClickEvent","useCTADirectlyCallback","setCTAModal","useSetAtom","useCTAByModal","NoOperation","useCTAByModalCallback","sendCTAShowEvent","pageModule","currentPosition","current_page_module","sendRelatedPostShowEvent","mediaId","articleClass","rank","media_id","article_class","toLowerCase","EClickPosition","Loaders","User","UserPostsLoadmore","UserRelatedUserLoadmore","Article","ArticleRelatedLoadmore","ArticleCommentsLoadmore","ArticleCommentRepliesLoadmore","POI","POIPostsLoadmore","Hashtag","HashtagPostsLoadmore","EPageType","PageTypeUtils","fromUrl","startsWith","match","segmentCount","split","filter","ECommentPermission","EArticleClass","EArticleUnavailableReason","ArticleDetailUtil","isAvailable","article","getCoverImage","imageList","largeImage","getPageIdFromTraffic","traffic","getEnterPageExtra","enter_page_type","enter_page_id","getShareContentExtra","share_content_type","enterPageName","share_content_id","enterPageId"],"mappings":"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","file":"637-65aa7ddcc02db158ceb5.js","sourcesContent":["import { atomWithReset } from 'jotai/utils';\nimport { EClickPosition } from 'shared/constant';\n\ntype TCTAModel =\n | false\n | {\n variant: 'primary' | 'v2';\n clickPosition: EClickPosition;\n clickId?: string;\n onConfirm: () => void;\n onCancel: () => void;\n };\n\nexport const $CTAModal = atomWithReset(false);\n","import { FC, useCallback, useEffect, useMemo } from 'react';\nimport cls from 'classnames';\nimport { Button, ButtonSize, Colors } from '@lemon8/design';\nimport { useAtomValue } from 'jotai';\nimport { $CTAModal } from './atom';\nimport { useResetAtom } from 'jotai/utils';\nimport { useTranslation } from 'react-i18next';\n\nimport './style.scss';\n\nexport * from './atom';\n\nexport const CTAModal: FC = () => {\n const modelStatus = useAtomValue($CTAModal);\n const close = useResetAtom($CTAModal);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (!modelStatus) {\n return;\n }\n\n window.Tea('wap_pop_window_show', {\n current_position: modelStatus.clickPosition,\n page_click_id: modelStatus.clickId,\n });\n }, [modelStatus]);\n\n const handleClickConfirm = useCallback(() => {\n if (!modelStatus) {\n return;\n }\n window.Tea('wap_pop_window_click', {\n current_position: modelStatus.clickPosition,\n page_click_id: modelStatus.clickId,\n click_result: 'install',\n });\n\n modelStatus.onConfirm();\n close();\n }, [modelStatus, close]);\n\n const handleClickCancel = useCallback(() => {\n if (!modelStatus) {\n return;\n }\n\n window.Tea('wap_pop_window_click', {\n current_position: modelStatus.clickPosition,\n page_click_id: modelStatus.clickId,\n click_result: 'cancel',\n });\n\n modelStatus.onCancel();\n close();\n }, [modelStatus, close]);\n\n const visibleCls = useMemo(\n () => ({\n shown: Boolean(modelStatus),\n hidden: !modelStatus,\n }),\n [modelStatus],\n );\n\n const modalContent = useMemo(() => {\n if (!modelStatus) {\n return null;\n }\n\n if (modelStatus.variant === 'primary') {\n return (\n
\n
\n
{t('sharing_popup_text')}
\n \n \n
\n );\n } else {\n return (\n
\n

{t('landing_postDetail_fullCaption_modal_title')}

\n

{t('landing_postDetail_fullCaption_modal_desc')}

\n \n \n
\n );\n }\n }, [modelStatus]);\n\n return (\n
\n
\n
\n
{modalContent}
\n
\n
\n );\n};\n","import { FC } from 'react';\n\nexport const FallbackPageHelmet: FC = () => {\n return <>;\n};\n","const UI = {\n scrollY() {\n const theScrollY =\n window.scrollY ||\n window.pageYOffset ||\n document.body.scrollTop ||\n // @ts-ignore\n document.documentElement.scrollTop;\n return theScrollY;\n },\n\n offset(el: any, type?: string) {\n if (!el || typeof el.getBoundingClientRect !== 'function') {\n return 0;\n }\n\n const { left, top, width, height } = el.getBoundingClientRect();\n\n switch (type) {\n case 'top':\n return top + window.pageYOffset;\n\n case 'left':\n return left + window.pageXOffset;\n\n case 'height':\n return height;\n\n case 'width':\n return width;\n\n default:\n return {\n height,\n width,\n top: top + window.pageYOffset,\n left: left + window.pageXOffset,\n };\n }\n },\n};\n\nexport default UI;\nexport const { scrollY, offset } = UI;\n","import { FC, useState, useEffect, useCallback, useRef } from 'react';\nimport UI from './util';\n\nimport './style.scss';\n\nconst PREFIX = 'ui-mobile-load-more';\n\ninterface IProps {\n /** 加载数据函数,返回Promise */\n loadData: () => Promise<{\n data: any[];\n }>;\n /** 渲染数据列表函数,参数为数据列表 */\n render: (param: any[]) => any;\n /** 当前列表是否已经结束 */\n isEnd?: boolean;\n /** 占位符 */\n placeholder?: any;\n /** 结束时是否展示结束文案 */\n showEnd?: boolean;\n /** 初始列表 */\n initList?: any[];\n /** 容器类名 */\n className?: string;\n /** 结束文案,或者可以自定义dom结构 */\n endText?: any;\n /** 加载文案, 或者可以自定义dom结构 */\n loadingText?: any;\n /** 在未结束的情况下是否一直显示loading样式 */\n alwaysShowLoading?: boolean;\n /** 距离底部开始加载的距离 */\n distanceToLoad?: number;\n}\n\nconst LoadMore: FC = (props) => {\n const {\n render,\n loadData,\n className = '',\n initList = [],\n showEnd = true,\n loadingText = 'loading',\n endText = 'No More Results',\n placeholder = null,\n isEnd = false,\n alwaysShowLoading = false,\n distanceToLoad = 0,\n } = props;\n\n const [isLoading, setIsLoading] = useState(false);\n const [dataList, setDataList] = useState(initList);\n\n const listRef = useRef(null);\n const timerRef = useRef(null);\n\n const listDom = render(dataList);\n\n const doLoadMore = useCallback(() => {\n setIsLoading(true);\n loadData()\n .then((res: { data: any[] }) => {\n const { data } = res;\n setDataList((list) => [...list, ...data]);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }, [loadData]);\n\n const scrollLoadMore = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n }\n\n if (isEnd) {\n return;\n }\n\n const { height, top } = UI.offset(listRef.current);\n\n timerRef.current = setTimeout(() => {\n if (!isLoading && height + top <= window.innerHeight + UI.scrollY() + (distanceToLoad || 0)) {\n doLoadMore();\n }\n }, 200);\n }, [isLoading, isEnd, doLoadMore]);\n\n useEffect(() => {\n document.addEventListener('touchmove', scrollLoadMore);\n document.addEventListener('scroll', scrollLoadMore, { passive: false, capture: true });\n\n return () => {\n document.addEventListener('touchmove', scrollLoadMore);\n document.addEventListener('scroll', scrollLoadMore, { passive: false, capture: true });\n };\n }, [scrollLoadMore]);\n\n const renderBottomText = (): JSX.Element | null => {\n if (isLoading || (!isEnd && alwaysShowLoading)) {\n return
{loadingText}
;\n }\n if (isEnd && showEnd) {\n return
{endText}
;\n }\n return null;\n };\n\n const renderPlaceholder = (): JSX.Element | null => {\n if (isLoading || dataList.length > 0 || (!isEnd && alwaysShowLoading)) {\n return null;\n }\n return placeholder;\n };\n\n return (\n
\n
\n {listDom}\n
\n
{renderBottomText()}
\n
{renderPlaceholder()}
\n
\n );\n};\n\nexport default LoadMore;\n","interface CommonSchemaBuildingProps {\n pageType: string;\n pid: string;\n}\n\ninterface DetailSchemaBuildingProps extends CommonSchemaBuildingProps {\n groupId: string;\n authorId?: string;\n}\n\ninterface ArticleSchemaBuildingProps extends DetailSchemaBuildingProps {\n pageType: 'article';\n}\n\nconst isArticleSchemaBuildingProps = (input: CommonSchemaBuildingProps): input is ArticleSchemaBuildingProps =>\n input.pageType === 'article';\n\ninterface VideoSchemaBuildingProps extends DetailSchemaBuildingProps {\n pageType: 'video';\n}\n\nconst isVideoSchemaBuildingProps = (input: CommonSchemaBuildingProps): input is VideoSchemaBuildingProps =>\n input.pageType === 'video';\n\nexport interface UserSchemaBuildingProps extends CommonSchemaBuildingProps {\n pageType: 'user';\n userId: string;\n}\n\nconst isUserSchemaBuildingProps = (input: CommonSchemaBuildingProps): input is UserSchemaBuildingProps =>\n input.pageType === 'user';\n\ninterface CategorySchemaBuildingProps extends CommonSchemaBuildingProps {\n pageType: 'feed';\n categoryId: number;\n}\n\nconst isCategorySchemaBuildingProps = (input: CommonSchemaBuildingProps): input is CategorySchemaBuildingProps =>\n input.pageType === 'feed';\n\nexport interface HashtagSchemaBuildingProps extends CommonSchemaBuildingProps {\n pageType: 'hashtag';\n hashtagId: string;\n}\n\nconst isHashtagSchemaBuildingProps = (input: CommonSchemaBuildingProps): input is HashtagSchemaBuildingProps =>\n input.pageType === 'hashtag';\n\nexport interface POISchemaBuildingProps extends CommonSchemaBuildingProps {\n pageType: 'poi';\n poiId: string;\n}\n\nconst isPOISchemaBuildingProps = (input: CommonSchemaBuildingProps): input is POISchemaBuildingProps =>\n input.pageType === 'poi';\n\nexport interface SearchSchemaBuildingProps extends CommonSchemaBuildingProps {\n pageType: 'search';\n query: string;\n}\n\nconst isSearchSchemaBuildingProps = (input: CommonSchemaBuildingProps): input is SearchSchemaBuildingProps =>\n input.pageType === 'search';\n\nconst buildSearchSchema = (props: SearchSchemaBuildingProps): string => {\n const { query } = props;\n\n const baseUrl =\n 'sslocal://lynxview?channel=search_v2&trans_status_bar=1&enter_anim=search_alpha&exit_anim=search_alpha&business_type=search&bundle=result_page%2Ftemplate.js';\n\n const data = {\n query,\n tab: 0,\n inputClickType: 'open',\n logExtra: {\n query,\n search_page_from: 'search_page_general',\n search_from: 'seo_click',\n previous_page_name: 'seo',\n },\n };\n\n return `${baseUrl}&business_data=${encodeURIComponent(JSON.stringify(data))}`;\n};\n\nexport type DeepLinkBuildingProps =\n | ArticleSchemaBuildingProps\n | VideoSchemaBuildingProps\n | UserSchemaBuildingProps\n | CategorySchemaBuildingProps\n | HashtagSchemaBuildingProps\n | POISchemaBuildingProps\n | SearchSchemaBuildingProps;\n\nexport const buildSchema = (props: DeepLinkBuildingProps): string => {\n // 唤活到搜索\n if (isSearchSchemaBuildingProps(props)) {\n return buildSearchSchema(props);\n }\n\n let protocol = 'snssdk2657:';\n let host = 'unknown';\n let params: URLSearchParams;\n\n // if (__BUILD_TYPE__ !== 'online') {\n // protocol = 'snssdk2657test:';\n // }\n\n if (isArticleSchemaBuildingProps(props)) {\n host = 'article_detail_page';\n params = new URLSearchParams({\n group_id: props.groupId,\n });\n if (props.authorId) {\n params.set('media_id', props.authorId);\n }\n } else if (isVideoSchemaBuildingProps(props)) {\n host = 'video_detail';\n params = new URLSearchParams({\n group_id: props.groupId,\n });\n if (props.authorId) {\n params.set('media_id', props.authorId);\n }\n } else if (isUserSchemaBuildingProps(props)) {\n host = 'user_profile';\n params = new URLSearchParams({\n user_id: props.userId,\n });\n } else if (isCategorySchemaBuildingProps(props)) {\n host = 'main';\n params = new URLSearchParams({\n tab: 'home',\n channel_id: String(props.categoryId),\n });\n } else if (isHashtagSchemaBuildingProps(props)) {\n host = 'hashtag';\n params = new URLSearchParams({\n hashtag_id: props.hashtagId,\n });\n } else if (isPOISchemaBuildingProps(props)) {\n host = 'poi_landing_page';\n params = new URLSearchParams({\n poi_id: props.poiId,\n });\n } else {\n throw new Error('unexcepted schema target');\n }\n\n // append common params\n params.append('pid', props.pid);\n\n return `${protocol}//${host}?${params.toString()}`;\n};\n","import { $ABTest } from '@lemon8/web-app-shared/atom';\nimport { DeepLinkBuildingProps, buildSchema } from './schema';\nimport { PageTrafficUtil } from 'shared/utils';\nimport { $SharingPageLevelTraffic, $RootTraffic } from 'shared/atoms';\nimport { useAtomValue } from 'jotai';\nimport { useMemo } from 'react';\nimport { RootTrafficUtil } from 'shared/utils/root-traffic-util';\n\nexport const SHARING_FB_PID = 'share_al_fb';\n\nexport const useFBActiveUrl = (schemaOption: DeepLinkBuildingProps): string => {\n const { versions } = useAtomValue($ABTest);\n const rootTraffic = useAtomValue($RootTraffic);\n const pageTraffic = useAtomValue($SharingPageLevelTraffic);\n\n return useMemo(() => {\n const schema = buildSchema({\n ...schemaOption,\n });\n\n const schemaURL = new URL(schema);\n\n schemaURL.searchParams.set('pid', SHARING_FB_PID);\n schemaURL.searchParams.set('ab_version', versions);\n\n schemaURL.searchParams.set(\n 'amp_extra',\n JSON.stringify({\n traffic_type: rootTraffic.trafficPid,\n is_from_wap: 0,\n\n // share_user_id: rootTraffic.sharerUid,\n // share_device_id: rootTraffic.sharerDid,\n // share_time: rootTraffic.shareTime,\n _t: rootTraffic.sharerToken,\n share_platform: rootTraffic.sharePlatform || null,\n\n // share content extra\n ...RootTrafficUtil.getShareContentExtra(rootTraffic),\n\n // enter page extra\n ...PageTrafficUtil.getEnterPageExtra(pageTraffic),\n }),\n );\n\n return schemaURL.toString();\n }, [versions, rootTraffic, pageTraffic, schemaOption]);\n};\n","import { $Locale } from '@lemon8/web-app-shared/atom';\nimport { atom, useAtomValue } from 'jotai';\nimport { $RootTraffic } from 'shared/atoms';\nimport { useMemo } from 'react';\n\nconst $SharingUrlBuilder = atom((get) => {\n const { sharePlatform, enterHref, sharerToken, isSharingTest } = get($RootTraffic);\n const { region } = get($Locale);\n const enterHrefObj = new URL(enterHref);\n\n return (path: string): string => {\n try {\n const url = new URL(path, enterHrefObj);\n\n if (isSharingTest) {\n url.searchParams.set('sharing_test', '1');\n }\n\n url.searchParams.set('_r', '1');\n url.searchParams.set('_t', sharerToken);\n url.searchParams.set('region', region);\n // url.searchParams.set('mid', sharerUid);\n // url.searchParams.set('did', sharerDid);\n // url.searchParams.set('share_time', shareTime);\n url.searchParams.set('share_platform', sharePlatform);\n\n return `${url.pathname}${url.search}`;\n } catch (e) {\n // TODO emit error\n return '';\n }\n };\n});\n\nexport const useSharingUrlBuilder = () => useAtomValue($SharingUrlBuilder);\n\n/**\n * @param url pathname + search\n */\nexport const useSharingUrl = (url: string) => {\n const buildSharingUrl = useSharingUrlBuilder();\n\n return useMemo(() => {\n return buildSharingUrl(url);\n }, [buildSharingUrl, url]);\n};\n","import { EClickPosition } from 'shared/constant';\nimport { SyntheticEvent, useCallback } from 'react';\nimport { sendClickEvent } from '~/utils/event';\nimport { useSetAtom } from 'jotai/index';\nimport { $CTAModal } from '~/components/cta-modal';\n\ninterface IUseCTADirectlyProps {\n clickPosition: EClickPosition;\n clickId?: string;\n onClick: () => void;\n}\n\ntype TCTADirectly = (e?: SyntheticEvent) => void;\n\nexport const useCTADirectly = (props: IUseCTADirectlyProps): TCTADirectly => {\n const { clickPosition, clickId, onClick } = props;\n\n return useCallback(\n (e?: SyntheticEvent) => {\n // 1. prevent default event behaviour\n e?.preventDefault();\n\n // 2. click position\n sendClickEvent({\n clickPosition,\n clickId,\n });\n\n // 3. call click\n onClick();\n },\n [clickPosition, clickId, onClick],\n );\n};\n\ninterface IUseCTADirectlyCallbackProps

{\n clickPosition: (params: P) => EClickPosition;\n clickId?: (params: P) => string;\n onClick: (params: P) => void;\n}\n\ntype TCTADirectlyCallback

= (params: P) => (e?: SyntheticEvent) => void;\n\nexport const useCTADirectlyCallback =

(props: IUseCTADirectlyCallbackProps

): TCTADirectlyCallback

=> {\n const { clickPosition, clickId, onClick } = props;\n\n const setCTAModal = useSetAtom($CTAModal);\n\n return useCallback(\n (params: P) => (e?: SyntheticEvent) => {\n // 1. prevent default event behaviour\n e?.preventDefault();\n\n // 2. click position\n sendClickEvent({\n clickPosition: clickPosition(params),\n clickId: clickId?.(params),\n });\n\n // 3. call on click\n onClick(params);\n },\n [clickPosition, clickId, onClick, setCTAModal],\n );\n};\n","import { EClickPosition } from 'shared/constant';\nimport { useSetAtom } from 'jotai/index';\nimport { $CTAModal } from '~/components/cta-modal';\nimport { SyntheticEvent, useCallback } from 'react';\nimport { sendClickEvent } from '~/utils/event';\nimport { NoOperation } from '@lemon8/web-app-shared/util';\n\ninterface IUseCTAByModalProps {\n variant?: 'primary' | 'v2';\n clickPosition: EClickPosition;\n clickId?: string;\n onConfirm: () => void;\n onCancel?: () => void;\n}\n\ntype TCTAByModal = (e?: SyntheticEvent) => void;\n\nexport const useCTAByModal = (props: IUseCTAByModalProps): TCTAByModal => {\n const { variant = 'primary', clickPosition, clickId, onCancel = NoOperation, onConfirm } = props;\n\n const setCTAModal = useSetAtom($CTAModal);\n\n return useCallback(\n (e?: SyntheticEvent) => {\n // 1. prevent default event behaviour\n e?.preventDefault();\n\n // 2. click position\n sendClickEvent({\n clickPosition,\n clickId,\n });\n\n // 3. show cta model\n setCTAModal({\n variant,\n clickPosition,\n clickId,\n onConfirm,\n onCancel,\n });\n },\n [clickPosition, clickId, onConfirm, onCancel, setCTAModal],\n );\n};\n","import { EClickPosition } from 'shared/constant';\nimport { useSetAtom } from 'jotai/index';\nimport { $CTAModal } from '~/components/cta-modal';\nimport { SyntheticEvent, useCallback } from 'react';\nimport { sendClickEvent } from '~/utils/event';\n\ninterface IUseCTAByModalCallbackProps

{\n variant: 'primary' | 'v2';\n clickPosition: (params: P) => EClickPosition;\n clickId?: (params: P) => string;\n onConfirm: (params: P) => void;\n onCancel?: (params: P) => void;\n}\n\ntype TCTAByModalCallback

= (params: P) => (e?: SyntheticEvent) => void;\n\nexport const useCTAByModalCallback =

(props: IUseCTAByModalCallbackProps

): TCTAByModalCallback

=> {\n const { variant, clickPosition, clickId, onCancel, onConfirm } = props;\n\n const setCTAModal = useSetAtom($CTAModal);\n\n return useCallback(\n (params: P) => (e?: SyntheticEvent) => {\n // 1. prevent default event behaviour\n e?.preventDefault();\n\n // 2. click position\n sendClickEvent({\n clickPosition: clickPosition(params),\n clickId: clickId?.(params),\n });\n\n // 3. show cta model\n setCTAModal({\n variant,\n clickPosition: clickPosition(params),\n clickId: clickId?.(params),\n onConfirm: () => onConfirm(params),\n onCancel: () => onCancel?.(params),\n });\n },\n [clickPosition, clickId, onConfirm, onCancel, setCTAModal],\n );\n};\n","import { EClickPosition } from 'shared/constant';\nimport { EPageModule } from 'shared/constant/page-module';\nimport { EArticleClass } from 'shared/models/article';\n\nexport const sendClickEvent = (props: { clickPosition: EClickPosition; clickId?: string }): void => {\n const { clickPosition, clickId } = props;\n window.Tea('wap_click', {\n current_position: clickPosition,\n page_click_id: clickId || null,\n });\n};\n\nexport const sendCTAShowEvent = (props: { pageModule: EPageModule; currentPosition: EClickPosition }): void => {\n const { pageModule, currentPosition } = props;\n\n window.Tea('wap_cta_show', {\n current_page_module: pageModule,\n current_position: currentPosition,\n });\n};\n\nexport const sendRelatedPostShowEvent = (props: {\n pageModule: EPageModule;\n clickPosition: EClickPosition;\n groupId: string;\n mediaId: string;\n articleClass: EArticleClass;\n rank: number;\n}): void => {\n const { pageModule, clickPosition, groupId, mediaId, articleClass, rank } = props;\n window.Tea('wap_related_post_show', {\n current_page_module: pageModule,\n current_position: clickPosition,\n group_id: groupId,\n media_id: mediaId,\n article_class: articleClass.toLowerCase(),\n rank,\n });\n};\n","export enum EClickPosition {\n /** Common begins */\n TopBarLogo = 'top_bar_logo',\n TopBarDownload = 'top_bar_download',\n BottomButton = 'bottom_button',\n\n RelatedPostTitle = 'related_post_title',\n RelatedPost = 'related_post',\n RelatedPostSeeMore = 'related_post_see_more',\n /** Common ends */\n\n /** Article begins */\n MainHashtag = 'main_hashtag',\n MainContentPOI = 'main_content_poi',\n MainContentMentionedUser = 'main_content_mentioned_user',\n MainContentReadmore = 'main_content_readmore',\n MainInnerLink = 'main_inner_link',\n MainPOI = 'main_poi',\n MainAuthor = 'main_author',\n MainSearchAnchor = 'main_search_anchor',\n MainFollowButton = 'main_follow_button',\n MainVideoSeeMore = 'main_video_see_more',\n MainVideoInterception = 'main_video_interception',\n MainGalleryImage = 'main_gallery_image',\n MainGalleryInterception = 'main_gallery_interception',\n MainFavoriteIcon = 'main_favorite_icon',\n MainLikeIcon = 'main_like_icon',\n MainCommentIcon = 'main_comment_icon',\n MainShareIcon = 'main_share_icon',\n\n EndRecommend = 'end_recommend',\n EndSeeMore = 'end_see_more',\n\n CommentAuthor = 'comment_author',\n CommentReply = 'comment_reply',\n CommentDigg = 'comment_digg',\n CommentImage = 'comment_image',\n CommentMentionedUser = 'comment_mentioned_user',\n CommentSeeMore = 'comment_see_more',\n CommentReplySeeMore = 'comment_reply_see_more',\n /** Article ends */\n\n /** User begins **/\n UserFollowing = 'user_following',\n UserFans = 'user_fans',\n UserLikes = 'user_likes',\n AuthorFollowButton = 'author_follow_button',\n AuthorPrivateLetter = 'author_private_letter',\n AuthorTriangularArrow = 'author_triangular_arrow',\n AuthorPost = 'author_post',\n\n RelatedUser = 'related_user',\n /** User ends */\n\n /** POI begins */\n RelatedAddress = 'related_address',\n RelatedPhone = 'related_phone',\n /** POI ends */\n}\n","export const Loaders = {\n User: {\n UserPostsLoadmore: 'user-posts-loadmore',\n UserRelatedUserLoadmore: 'user-related-user-loadmore',\n },\n Article: {\n ArticleRelatedLoadmore: 'article-related-loadmore',\n ArticleCommentsLoadmore: 'article-comments-loadmore',\n ArticleCommentRepliesLoadmore: 'article-comment-replies-loadmore',\n },\n POI: {\n POIPostsLoadmore: 'poi-posts-loadmore',\n },\n Hashtag: {\n HashtagPostsLoadmore: 'hashtag-posts-loadmore',\n },\n};\n","export enum EPageType {\n Gallery = 'gallery',\n VIDEO = 'video',\n USER = 'user',\n USER_FOLLOW = 'user_follow',\n USER_TOPIC = 'user_topic',\n POI = 'poi',\n HASHTAG = 'hashtag',\n}\n\nexport const PageTypeUtils = {\n fromUrl: (url: string): EPageType | null => {\n const { pathname } = new URL(url);\n\n if (pathname.startsWith('/poi')) {\n return EPageType.POI;\n }\n if (pathname.startsWith('/topic')) {\n return EPageType.HASHTAG;\n }\n if (pathname.match(/^\\/[^\\/]+\\/follow/)) {\n return EPageType.USER_FOLLOW;\n }\n if (pathname.match(/^\\/[^\\/]+\\/topic/)) {\n return EPageType.USER_TOPIC;\n }\n\n // legacy article-i\n if (pathname.match(/^\\/article\\/i\\d+/)) {\n return EPageType.Gallery;\n }\n\n // legacy user-share\n if (pathname.match(/^\\/user\\/\\d+\\/share/)) {\n return EPageType.USER;\n }\n\n const segmentCount = pathname.split('/').filter(Boolean).length;\n if (segmentCount === 1) {\n return EPageType.USER;\n }\n if (segmentCount === 2) {\n return EPageType.Gallery;\n }\n\n return null;\n },\n};\n","import { IImage, IVideo } from 'shared/models/media';\nimport { IUserAuthInfo } from 'shared/models/user-auth-info';\n\nexport enum ECommentPermission {\n All = 0, // 显示评论区\n Follower = 1, // 粉丝可评论\n Self = 2, // 自己可评论\n Disable = 3, // 不可评论,不显示评论区\n Friend = 4, // 好友可评论\n}\n\nexport interface GalleryLabelType {\n direction: string;\n id: string;\n imageIndex: number;\n name: string;\n type: string;\n xPct: number;\n yPct: number;\n}\n\nexport enum EArticleClass {\n GALLERY = 'Gallery',\n VIDEO = 'Video',\n ARTICLE = 'Article',\n}\n\nexport interface IIllegalInfo {\n warningLabel: string;\n warningLabelType: number;\n}\n\nexport interface IArticleDetail {\n groupId: string;\n templateId?: string;\n imprId?: string;\n\n // author\n author: {\n userId: string;\n avatar: string;\n authInfo: IUserAuthInfo;\n nickName: string;\n linkName: string;\n };\n\n // content\n articleClass: EArticleClass;\n\n title: string;\n content: string;\n shortContent: string;\n\n // content publish time\n publishTime: number;\n modifyTime?: number;\n\n // interaction\n readCount: number;\n diggCount: number;\n favoriteCount: number;\n commentCount: number;\n\n // legacy hashtag\n forumList?: {\n id: string;\n name: string;\n }[];\n\n // poi\n locationInfo?: {\n poiId: string;\n poiName: string;\n poiArea?: string;\n };\n\n // search after read\n relatedQuery?: string;\n\n // privacy & safety\n isOnlyFollow: boolean;\n commentPermission: ECommentPermission;\n illegalInfo?: IIllegalInfo;\n}\n\nexport interface IVideoArticleDetail extends IArticleDetail {\n articleClass: EArticleClass.VIDEO;\n largeImage: IImage;\n video: IVideo & { encryptedUrl?: string; ocr?: string[] };\n}\n\nexport interface IGalleryArticleDetail extends IArticleDetail {\n articleClass: EArticleClass.GALLERY;\n imageList: IImage[];\n galleryLabels: GalleryLabelType[];\n}\n\nexport interface IRichArticleDetail extends IArticleDetail {\n articleClass: EArticleClass.ARTICLE;\n largeImage: IImage;\n}\n\nexport type TArticleDetail = IVideoArticleDetail | IGalleryArticleDetail | IRichArticleDetail;\n\nexport enum EArticleUnavailableReason {\n NOT_FOUND = 'not_found',\n PRIVATE_ACCOUNT = 'private_account',\n SERVER_ERROR = 'server_error',\n}\n\nexport interface IArticleUnavailableDetail {\n groupId: string;\n unavailableReason: EArticleUnavailableReason;\n}\n\nexport const ArticleDetailUtil = {\n isAvailable: (article: TArticleDetail | IArticleUnavailableDetail): article is TArticleDetail => {\n return !('unavailableReason' in article);\n },\n getCoverImage: (article: TArticleDetail): IImage => {\n switch (article.articleClass) {\n case EArticleClass.GALLERY:\n return article.imageList[0];\n case EArticleClass.ARTICLE:\n case EArticleClass.VIDEO:\n default:\n return article.largeImage;\n }\n },\n};\n","import { TPageLevelTraffic } from 'shared/atoms';\nimport { EPageType } from 'shared/constant/page-type';\n\nexport const PageTrafficUtil = {\n getPageIdFromTraffic: (traffic: TPageLevelTraffic): string => {\n switch (traffic.pageType) {\n case EPageType.Gallery:\n case EPageType.VIDEO:\n return traffic.groupId;\n case EPageType.HASHTAG:\n return traffic.hashtagId;\n case EPageType.POI:\n return traffic.poiId;\n case EPageType.USER:\n default:\n return traffic.userId;\n }\n },\n\n getEnterPageExtra: (traffic: TPageLevelTraffic): Record => {\n switch (traffic.pageType) {\n case EPageType.Gallery:\n return {\n enter_page_type: EPageType.Gallery,\n enter_page_id: traffic.groupId,\n };\n case EPageType.VIDEO:\n return {\n enter_page_type: EPageType.VIDEO,\n enter_page_id: traffic.groupId,\n };\n case EPageType.HASHTAG:\n return {\n enter_page_type: EPageType.HASHTAG,\n enter_page_id: traffic.hashtagId,\n };\n case EPageType.POI:\n return {\n enter_page_type: EPageType.POI,\n enter_page_id: traffic.poiId,\n };\n case EPageType.USER:\n default:\n return {\n enter_page_type: EPageType.USER,\n enter_page_id: traffic.userId,\n };\n }\n },\n};\n","import { ISharingRootTraffic } from 'shared/atoms';\n\nexport const RootTrafficUtil = {\n getShareContentExtra: (traffic: ISharingRootTraffic) => {\n return {\n share_content_type: traffic.enterPageName,\n share_content_id: traffic.enterPageId || null,\n };\n },\n};\n"],"sourceRoot":""}