@funhub/platform 0.2.15 → 0.2.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/icons/marquee-enter.mjs +2 -0
- package/dist/biz.d.mts +1 -5
- package/dist/biz.mjs +1 -1
- package/dist/components/biz/basics/fullscreen-feed/runtime/client.mjs +1 -1
- package/dist/components/biz/basics/fullscreen-feed/runtime/user-action.mjs +1 -1
- package/dist/components/biz/basics/logo/variants/basic-logo/runtime/client.mjs +1 -1
- package/dist/components/biz/business/advertisement/popup-ad/client.mjs +1 -1
- package/dist/components/biz/business/banner/variants/basic-banner/runtime/client.mjs +1 -1
- package/dist/components/biz/business/banner-carousel/client.mjs +1 -1
- package/dist/components/biz/business/card-grid/variants/card-grid-2x3-infinite/runtime/client.mjs +1 -1
- package/dist/components/biz/business/card-grid/variants/card-grid-3x3-infinite/runtime/client.mjs +1 -1
- package/dist/components/biz/business/channel-list/client.mjs +1 -1
- package/dist/components/biz/business/comment/comment-input.mjs +3 -3
- package/dist/components/biz/business/comment/comment-item.mjs +1 -1
- package/dist/components/biz/business/comment/comment-list.mjs +1 -1
- package/dist/components/biz/business/comment/reply-detail.mjs +1 -1
- package/dist/components/biz/business/detail/shared/detail-operate.mjs +1 -1
- package/dist/components/biz/business/detail/shared/editor-preview.mjs +1 -1
- package/dist/components/biz/business/detail/shared/runtime-context-provider.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-actions/client.mjs +1 -1
- package/dist/components/biz/business/detail/video-detail-player/schema.d.mts +1 -1
- package/dist/components/biz/business/detail/video-detail-recommend/shared.mjs +1 -1
- package/dist/components/biz/business/header-search/header-avatar-logo-search/client.mjs +1 -1
- package/dist/components/biz/business/header-search/shared/avatar.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-base.mjs +1 -1
- package/dist/components/biz/business/home-recommend/shared/home-recommend-play-count.mjs +1 -1
- package/dist/components/biz/business/image-text-recommend/client.mjs +1 -1
- package/dist/components/biz/business/index.d.mts +0 -5
- package/dist/components/biz/business/large-feature-grid/card-item.mjs +1 -1
- package/dist/components/biz/business/large-feature-grid/material.d.mts +1 -1
- package/dist/components/biz/business/marquee/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/material.d.mts +1 -1
- package/dist/components/biz/business/profile/profile-header/user-profile-avatar.mjs +1 -1
- package/dist/components/biz/business/profile/profile-header/user-profile-cover-background.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/shell.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/collect-tab/video-waterfall.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/history-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.d.mts +2 -0
- package/dist/components/biz/business/profile/profile-main/tabs/like-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/tabs/publish-tab/client.mjs +1 -1
- package/dist/components/biz/business/profile/profile-main/utils.mjs +1 -1
- package/dist/components/biz/business/search-history/client.mjs +1 -1
- package/dist/components/biz/business/search-input/client.mjs +1 -1
- package/dist/components/biz/business/tab-bar/client.mjs +1 -1
- package/dist/components/biz/business/text-recommend/client.mjs +1 -1
- package/dist/components/biz/renderer/renderer.d.mts +1 -1
- package/dist/components/biz/utils/transformers/card-grid.mjs +1 -1
- package/dist/components/common/blocked-dialog/blocked-dialog.mjs +1 -1
- package/dist/components/common/collection-popup/create-collection-sheet.mjs +1 -1
- package/dist/components/common/collection-popup/index.mjs +1 -1
- package/dist/components/common/follow-button/index.mjs +1 -1
- package/dist/components/common/info-card/card-header.mjs +1 -1
- package/dist/components/common/list/post-list/post-list.mjs +1 -1
- package/dist/components/common/list/user-activity-list/user-activity-list-actions.mjs +1 -1
- package/dist/components/common/list/user-activity-list/user-activity-list-item.mjs +1 -1
- package/dist/components/common/list/video-list/video-list-item.mjs +1 -1
- package/dist/components/common/list/video-list/video-list.mjs +1 -1
- package/dist/components/common/popup-video/index.mjs +1 -1
- package/dist/components/common/series-episodes/index.mjs +1 -1
- package/dist/components/common/share-popup/share-content.mjs +1 -1
- package/dist/components/common/tab-bar/index.mjs +1 -1
- package/dist/components/common/top-nav-bar/client.mjs +1 -1
- package/dist/components/common/video-player/video-blind-ad-overlay.mjs +1 -1
- package/dist/components/common/video-player/video-preroll-ad-overlay.mjs +1 -1
- package/dist/components/pages/(follow)/_components/interaction-tabs/index.mjs +1 -1
- package/dist/components/pages/collection-add/page.mjs +1 -1
- package/dist/components/pages/collection-create/form.mjs +1 -1
- package/dist/components/pages/collection-detail/_components/collection-detail-video-card.mjs +1 -1
- package/dist/components/pages/collection-detail/detail.mjs +1 -1
- package/dist/components/pages/edit/page.mjs +1 -1
- package/dist/components/pages/feedback/_components/feedback-form.mjs +1 -1
- package/dist/components/pages/fullscreen-feed/page.mjs +1 -1
- package/dist/components/pages/login/forgot.mjs +1 -1
- package/dist/components/pages/login/index.mjs +1 -1
- package/dist/components/pages/login/login-client.mjs +1 -1
- package/dist/components/pages/login/password.mjs +1 -1
- package/dist/components/pages/login/register.mjs +1 -1
- package/dist/components/pages/login/reset-password.mjs +1 -1
- package/dist/components/pages/login/verify.mjs +1 -1
- package/dist/components/pages/post-detail/post-detail-client.mjs +1 -1
- package/dist/components/pages/publish/components/header.mjs +1 -1
- package/dist/components/pages/publish/hooks/use-file-upload.mjs +1 -1
- package/dist/components/pages/publish/page-client.mjs +1 -1
- package/dist/components/pages/search/page-client.mjs +1 -1
- package/dist/components/pages/search/search-result/search-user.mjs +1 -1
- package/dist/components/pages/search/search-result/shared.mjs +1 -1
- package/dist/components/pages/search/top-header.mjs +1 -1
- package/dist/components/pages/search-result/page-client.mjs +1 -1
- package/dist/components/pages/search-result/search-user.mjs +1 -1
- package/dist/components/pages/search-result/search-video-info.mjs +1 -1
- package/dist/components/pages/search-result/shared.mjs +1 -1
- package/dist/components/pages/search-result/top-header.mjs +1 -1
- package/dist/components/pages/settings/_components/reset-password-drawer.mjs +1 -1
- package/dist/components/pages/settings/_components/settings.mjs +1 -1
- package/dist/components/pages/video-detail/video-detail-client.mjs +1 -1
- package/dist/components/pages/video-list/video-list-client.mjs +1 -1
- package/dist/components/pages/video-list/video-list-recommend-item.mjs +1 -1
- package/dist/components/pages/video-list/video-list-skeleton.mjs +1 -1
- package/dist/components/ui/badge.d.mts +1 -1
- package/dist/components/ui/button.d.mts +1 -1
- package/dist/components/ui/image.d.mts +4 -4
- package/dist/components/ui/sonner.d.mts +1 -1
- package/dist/components/ui/sonner.mjs +1 -1
- package/dist/hooks/use-browse-report.d.mts +13 -0
- package/dist/hooks/use-browse-report.mjs +1 -1
- package/dist/hooks/use-content-operate.mjs +1 -1
- package/dist/i18n/locales/en.mjs +1 -1
- package/dist/i18n/locales/zh-CN.mjs +1 -1
- package/dist/materials.d.mts +1 -2
- package/dist/materials.mjs +1 -1
- package/dist/types/safe-information.d.mts +2 -0
- package/dist/utils/common.d.mts +9 -1
- package/dist/utils/common.mjs +1 -1
- package/dist/utils/schema/material.d.mts +1 -1
- package/dist/utils.d.mts +2 -2
- package/dist/utils.mjs +1 -1
- package/package.json +1 -1
- package/dist/components/biz/business/hot-recommend/client.d.mts +0 -17
- package/dist/components/biz/business/hot-recommend/client.mjs +0 -2
- package/dist/components/biz/business/hot-recommend/index.d.mts +0 -5
- package/dist/components/biz/business/hot-recommend/material.d.mts +0 -25
- package/dist/components/biz/business/hot-recommend/material.mjs +0 -2
- package/dist/components/biz/business/hot-recommend/schema.d.mts +0 -24
- package/dist/components/biz/business/hot-recommend/schema.mjs +0 -2
- package/dist/components/biz/business/hot-recommend/server.d.mts +0 -11
- package/dist/components/biz/business/hot-recommend/server.mjs +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{cn as e}from"../../../../utils/cn.mjs";import{debounceFun as t,getCurrentSecondTime as n,parseTextAtUserIds as r,replaceAtUserElement as i}from"../../../../utils/common.mjs";import{useUserStore as a}from"../../../../store/modules/user-store.mjs";import{gCommunityGetComments as o,pCommunityCreateComment as s,pCommunityDislikeComment as c,pCommunityLikeComment as l}from"../../../../service/generated/client.mjs";import{Box as u}from"../../../ui/box.mjs";import{InfiniteScroll as ee}from"../../../ui/infinite-scroll.mjs";import{Text as d}from"../../../ui/text.mjs";import{useLoginModalStore as te}from"../../../../store/modules/login-modal-store.mjs";import{useDeleteRequest as ne}from"../../../../hooks/query/use-query.mjs";import{useLikeDislike as re}from"../../../../hooks/use-like-dislike.mjs";import{useKeepAliveEffect as ie,useKeepAliveState as f}from"../../../common/keep-scroll-position/index.mjs";import{isMobileIOS as ae}from"../../../../utils/tools.mjs";import{MediaPreview as oe}from"../../../common/media-preview/index.mjs";import{mapApiCommentToComment as p}from"../../../../types/safe-comment.mjs";import se from"../../../../assets/icons/common/solid-arrow.mjs";import ce from"./comment-input.mjs";import{CommentItem as le}from"./comment-item.mjs";import ue from"./reply-detail.mjs";import{memo as m,useCallback as h,useEffect as de,useMemo as g,useRef as fe,useState as pe}from"react";import{Fragment as me,jsx as _,jsxs as v}from"react/jsx-runtime";import{toast as he}from"sonner";import{useTranslations as ge}from"next-intl";const _e=t(e=>{e()},0),ve=t(e=>{e()},10),ye=t(e=>{try{l({comment_id:e.id,is_like:e.like_flag!==`1`},{revalidate:!1})}catch(e){console.error(`点赞评论失败:`,e)}},200),be=t(e=>{try{c({comment_id:e.id,is_dislike:e.like_flag!==`2`},{revalidate:!1})}catch(e){console.error(`点踩评论失败:`,e)}},200);function xe(e){if(e==null)return 0;let t=typeof e==`number`?e:Number(e);if(!Number.isNaN(t)&&t>0)return t>0xe8d4a51000?Math.floor(t/1e3):Math.floor(t);let n=Date.parse(String(e));return Number.isNaN(n)?0:Math.floor(n/1e3)}function y(e,t,n){let r=[];return Array.isArray(n)&&n.length>0?(n.forEach(e=>{let t=!!e?.is_video,n=String(e?.media_url||``),i=String(e?.cover_image||``);!n&&!i||r.push({cover_image:i,cover_image_thumbnail:i,cover_image_radio:1,cover_image_resolution:String(e?.cover_image_resolution||``),image_url:t?``:n,image_thumbnail:t?``:n,image_radio:1,image_resolution:String(e?.image_resolution||``),is_video:t,resolution:String(e?.video_resolution||``),video_duration:Number(e?.video_duration||0),video_url:t?n:``,video_size:Number(e?.video_size||0),video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r):(e?.length&&e.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:e,image_thumbnail:e,image_radio:1,image_resolution:``,is_video:!1,resolution:``,video_duration:0,video_url:``,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),t?.length&&t.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:``,image_thumbnail:``,image_radio:1,image_resolution:``,is_video:!0,resolution:``,video_duration:0,video_url:e,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r)}function Se(e){let t=typeof e.reply_count==`number`?e.reply_count:0,n=Array.isArray(e.sub_comments)?e.sub_comments.length:0,r=t>0?t:n,i=e.is_liked?`1`:e.is_dislike?`2`:`0`,a=b(e.mentioned_users),o=a.length>0?a:Ce(e.content||``),s=String(e.comment_id??e.id??``),c=typeof e.like_count==`number`?e.like_count:0,l=e.is_liked&&c===0?1:c;return p({id:s,reply_cnt:r.toString(),like_cnt:l,dislike_cnt:0,created_at:xe(e.create_time),text:e.content||``,type:`4`,like_flag:i,user_id:e.user_id||``,user_name:e.user?.nickname||e.user?.username||``,avatar:e.user?.avatar_url||``,files:[],at_users:o,nine_grid_content_info:y(e?.images,e?.videos,e?.medias),is_follow:!1})}function b(e){return Array.isArray(e)?e.map(e=>({user_id:e.user_id||``,name:e.nickname||e.username||``,avatar:e.avatar_url||``,birthday:``,signature:e.signature||``})):[]}function Ce(e){if(!e)return[];let t=new Map,n=/<span[^>]*class=['"]mention['"][^>]*data-id=['"]([^'"]+)['"][^>]*>@([^<]*)<\/span>/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]?String(r[1]):``,n=(r[2]?String(r[2]):``).replace(/^@/,``)||e;!e||t.has(e)||t.set(e,{user_id:e,name:n,avatar:``,birthday:``,signature:``})}if(t.size>0)return Array.from(t.values());let i=/<@_user>(\w+)<\/@_user>/g;for(;(r=i.exec(e))!==null;){let e=r[1]?String(r[1]):``;!e||t.has(e)||t.set(e,{user_id:e,name:e,avatar:``,birthday:``,signature:``})}return Array.from(t.values())}function we(e){return!Array.isArray(e)||e.length===0?[]:e.map(e=>{let t=!!e.is_video,n=t?String(e.video_url||``):String(e.image_url||e.cover_image||``),r=String(e.cover_image||e.image_url||``);return{media_url:n,is_video:t,image_resolution:String(e.image_resolution||``),cover_image:r,cover_image_resolution:String(e.cover_image_resolution||``),video_resolution:String(e.resolution||``),video_duration:Number(e.video_duration||0),video_size:Number(e.video_size||0)}}).filter(e=>!!e.media_url)}const x=m(({information:t,listQueryKey:c,contentId:l,contentType:m,isShow:xe=!0,isClickLoad:y=!1,initialComments:b,initialTotal:x,initialHasMore:S,addCommentCount:Te,onCommentAdded:Ee,onRequireLogin:C,onTotalChange:w,onReplyDetailVisibleChange:T,className:De})=>{let{userInfo:E,userId:Oe,isLogin:D}=a(),{open:ke}=te(),O=ge(`components.biz.business.comment`),Ae=Te??Ee??(()=>{});function je(e){if(!e)return``;if(Array.isArray(e))return String(e[0]||``);if(typeof e==`object`){if(Object.prototype.hasOwnProperty.call(e,`comment_id`))return String(e.comment_id??``);if(Array.isArray(e.data))return String(e.data[0]||``)}return``}let k=h(()=>{C?C():ke()},[C,ke]),A=y?5:20,j=g(()=>b?.length?b.map(Se):[],[b]),M=b!==void 0||typeof x==`number`||typeof S==`boolean`,Me=g(()=>typeof S==`boolean`?S:typeof x==`number`?j.length<x:M?j.length===0?!1:j.length>=A:!0,[M,S,j.length,x,A]),[N,P]=f(`info-detail-comment-list-${l}`,j),[F,I]=f(`info-detail-comment-list-has-more-${l}`,Me),[L,Ne]=f(`info-comment-detail-page-${l}`,j.length>0?2:1),[Pe,R]=f(`info-detail-comment-list-loading-${l}`,!1),[z,B]=f(`info-detail-selected-comment-${l}`,p({id:``,user_id:``})),[V,H]=f(`info-detail-reply-detail-visible-${l}`,!1),[U,W]=pe(!1),G=fe(null),K=h(e=>{typeof window>`u`||window.dispatchEvent(new CustomEvent(`funhub:comment-reply-detail-visible-change`,{detail:{visible:e}}))},[]);de(()=>{K(V),T?.(V)},[K,T,V]),de(()=>()=>{K(!1),T?.(!1)},[K,T]);let q=g(()=>Pe||F&&N.length===0?O(`commentList.loading`):N.length>0&&!F?O(`commentList.noMore`):N.length===0&&!F?O(`commentList.emptyPrompt`):``,[N.length,F,Pe,O]),Fe=g(()=>U?`回复@${z.user_name}`:``,[U,z.user_name]),{getLikedListData:Ie,getDislikedListData:J}=re(),Le=h(()=>{P(e=>e.map(e=>e.id===z.id?{...e,reply_cnt:(Number(e.reply_cnt||0)+1).toString()}:e)),B(e=>({...e,reply_cnt:(Number(e.reply_cnt||0)+1).toString()}))},[z.id,P,B]),Y=h(async()=>{if(l)try{let e=await o({content_id:l,page:L,page_size:A,sort_by:`latest`});if(e.code!==0)throw Error(e.message||O(`commentList.fetchCommentsFailed`));let t=(e.data?.data?.comments??[]).map(Se),n=e.data?.data?.total??0;L===1&&w&&w(n),((e.data?.data?.has_more??!1)===!1||t.length<A)&&I(!1),P(e=>{let n=new Set(e.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e,...r]}),Ne(L+1)}catch(e){console.error(`获取评论列表失败:`,e),I(!1)}},[l,L,A,P,I,Ne]),X=h(async()=>{R(!0);try{await Y()}catch(e){console.error(`获取评论列表失败:`,e)}R(!1)},[Y,R]);ie(()=>{y&&!M&&X()},[M,y,X],`info-detail-comment-initial-load-more-${l}`),ie(()=>{!M||!w||typeof x==`number`&&w(x)},[M,x,w],`info-detail-comment-initial-total-${l}`);function Re(){_e(()=>{W(!1)})}async function ze({text:e,imageVideoInfoList:t}){try{if(!D)return k(),{success:!1,message:O(`commentList.loginRequired`)};let a=E?.userId||E?.user_id||Oe||``;if(!a)return k(),{success:!1,message:O(`commentList.loginRequired`)};let o=E?.nick_name||E?.nickname||E?.name||E?.user_name||E?.username||``,c=E?.avatar||E?.avatar_url||``,u=we(t),ee=r(e),d=await s({content_id:l,content:i(e),medias:u,mentioned_users:ee,source_type:m===`video`?1:2},{revalidate:!1});if(d.code===0){let r=je(d.data);if(!r||r===`0`)return{success:!1,message:O(`commentList.publishCommentFailed`)};let i=Ce(e),s=p({text:e,id:r,avatar:c,user_id:a,user_name:o,like_cnt:d.data?.like_count??0,created_at:n(),nine_grid_content_info:t,at_users:i});return P(e=>[s,...e]),{success:!0}}else return{success:!1,message:d.message||O(`commentList.publishCommentFailed`)}}catch(e){return console.error(e),{success:!1,message:O(`commentList.publishCommentFailed`)}}}let Z=h(async({text:e,imageVideoInfoList:t,callback:n})=>{try{if(!D)return k(),{success:!1,message:O(`commentList.loginRequired`)};if(!z?.id||z.id===`0`)return{success:!1,message:O(`commentList.invalidReplyTarget`)};let a=we(t),o=r(e),c=await s({content_id:l,content:i(e),medias:a,mentioned_users:o,parent_id:z.id,source_type:m===`video`?1:2},{revalidate:!1});if(c.code!==0)return{success:!1,message:c.message||O(`commentList.publishReplyFailed`)};P(e=>e.map(e=>e.id===z.id?{...e,reply_cnt:(Number(e.reply_cnt)+1).toString()}:e));let u=je(c.data);return!u||u===`0`?{success:!1,message:O(`commentList.publishReplyFailed`)}:(n?.(u),{success:!0})}catch(e){return console.error(`发布回复评论失败:`,e),{success:!1,message:O(`commentList.publishReplyFailed`)}}},[l,m,D,k,z.id,P,O]);async function Be({text:e,imageVideoInfoList:t}){let n=e=>e.success?e:(he.error(e.message||O(`commentList.publishCommentFailed`)),{...e,toastHandled:!0});if(U){let r=await Z({text:e,imageVideoInfoList:t,callback:e=>{}});return W(!1),n(r)}else{let r=await ze({text:e,imageVideoInfoList:t});return r.success&&Ae(),W(!1),n(r)}}let Q=h(e=>{B(e),ae()&&G.current?.focus(),ve(()=>{W(!0),G.current?.focus()})},[B]),$=h(e=>{B(e),H(!0)},[H,B]),Ve=h(e=>{if(e.reply_cnt===`0`){Q(e);return}$(e)},[Q,$]),He=h(e=>{if(!D){C?.();return}P(Ie(N,e.id)),ye(e)},[N,Ie,D,C,P]),Ue=h(e=>{if(!D){C?.();return}e.like_flag!==`2`&&he.message(O(`commentList.dislikeHint`)),P(J(N,e.id)),be(e)},[N,J,D,C,P,O]),We=ne();function Ge(){c&&We(c),H(!1)}return v(me,{children:[v(u,{className:e(`w-full pb-[60px]`,De),children:[N.map((e,t)=>_(le,{comment:e,onReply:Q,onViewReplies:$,onReplyAction:Ve,onLike:He,onDislike:Ue,isLogin:D,onRequireLogin:k},`${e.id}-${t}-comment`)),xe&&_(ee,{loadMore:async()=>{await Y()},hasMore:F,initialLoad:!y&&N.length===0&&F!==!1}),y&&v(u,{className:`w-full my-[8px]`,children:[!q&&v(u,{className:`w-[fit-content] h-[42px] flex items-center justify-center mx-[auto]`,onClick:()=>{X()},children:[_(d,{className:`text-text3 text-[14px]`,children:O(`commentList.viewMore`)}),_(se,{className:`w-[8px] h-[auto] ml-[4px] text-text3`})]}),q&&_(u,{className:`w-full h-[42px] flex items-center justify-center`,children:_(d,{className:`text-text3 text-[12px]`,children:q})})]}),_(ce,{placeholder:Fe,onPublish:({text:e,imageVideoInfoList:t})=>Be({text:e,imageVideoInfoList:t}),onInputBlur:Re,onRequireLogin:k,ref:G})]}),_(ue,{visible:V,comment:z,information:t,contentType:m,onClose:Ge,onReplyComment:Z,onReplyAdded:Le,onRequireLogin:k},z.id),_(oe,{})]})});export{x as default};
|
|
2
|
+
"use client";import{debounceFun as e,getCurrentSecondTime as t,parseTextAtUserIds as n,replaceAtUserElement as r}from"../../../../utils/common.mjs";import{cn as i}from"../../../../utils/cn.mjs";import{useUserStore as a}from"../../../../store/modules/user-store.mjs";import{gCommunityGetComments as o,pCommunityCreateComment as s,pCommunityDislikeComment as c,pCommunityLikeComment as l}from"../../../../service/generated/client.mjs";import{Box as u}from"../../../ui/box.mjs";import{InfiniteScroll as ee}from"../../../ui/infinite-scroll.mjs";import{Text as d}from"../../../ui/text.mjs";import{useLoginModalStore as te}from"../../../../store/modules/login-modal-store.mjs";import{useDeleteRequest as ne}from"../../../../hooks/query/use-query.mjs";import{useLikeDislike as re}from"../../../../hooks/use-like-dislike.mjs";import{useKeepAliveEffect as ie,useKeepAliveState as f}from"../../../common/keep-scroll-position/index.mjs";import{isMobileIOS as ae}from"../../../../utils/tools.mjs";import{MediaPreview as oe}from"../../../common/media-preview/index.mjs";import{mapApiCommentToComment as p}from"../../../../types/safe-comment.mjs";import se from"../../../../assets/icons/common/solid-arrow.mjs";import ce from"./comment-input.mjs";import{CommentItem as le}from"./comment-item.mjs";import ue from"./reply-detail.mjs";import{toast as m}from"sonner";import{memo as h,useCallback as g,useEffect as de,useMemo as _,useRef as fe,useState as pe}from"react";import{Fragment as me,jsx as v,jsxs as y}from"react/jsx-runtime";import{useTranslations as he}from"next-intl";const ge=e(e=>{e()},0),_e=e(e=>{e()},10),ve=e(e=>{try{l({comment_id:e.id,is_like:e.like_flag!==`1`},{revalidate:!1})}catch(e){console.error(`点赞评论失败:`,e)}},200),ye=e(e=>{try{c({comment_id:e.id,is_dislike:e.like_flag!==`2`},{revalidate:!1})}catch(e){console.error(`点踩评论失败:`,e)}},200);function be(e){if(e==null)return 0;let t=typeof e==`number`?e:Number(e);if(!Number.isNaN(t)&&t>0)return t>0xe8d4a51000?Math.floor(t/1e3):Math.floor(t);let n=Date.parse(String(e));return Number.isNaN(n)?0:Math.floor(n/1e3)}function b(e,t,n){let r=[];return Array.isArray(n)&&n.length>0?(n.forEach(e=>{let t=!!e?.is_video,n=String(e?.media_url||``),i=String(e?.cover_image||``);!n&&!i||r.push({cover_image:i,cover_image_thumbnail:i,cover_image_radio:1,cover_image_resolution:String(e?.cover_image_resolution||``),image_url:t?``:n,image_thumbnail:t?``:n,image_radio:1,image_resolution:String(e?.image_resolution||``),is_video:t,resolution:String(e?.video_resolution||``),video_duration:Number(e?.video_duration||0),video_url:t?n:``,video_size:Number(e?.video_size||0),video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r):(e?.length&&e.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:e,image_thumbnail:e,image_radio:1,image_resolution:``,is_video:!1,resolution:``,video_duration:0,video_url:``,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),t?.length&&t.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:``,image_thumbnail:``,image_radio:1,image_resolution:``,is_video:!0,resolution:``,video_duration:0,video_url:e,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r)}function xe(e){let t=typeof e.reply_count==`number`?e.reply_count:0,n=Array.isArray(e.sub_comments)?e.sub_comments.length:0,r=t>0?t:n,i=e.is_liked?`1`:e.is_dislike?`2`:`0`,a=x(e.mentioned_users),o=a.length>0?a:Se(e.content||``),s=String(e.comment_id??e.id??``),c=typeof e.like_count==`number`?e.like_count:0,l=e.is_liked&&c===0?1:c;return p({id:s,reply_cnt:r.toString(),like_cnt:l,dislike_cnt:0,created_at:be(e.create_time),text:e.content||``,type:`4`,like_flag:i,user_id:e.user_id||``,user_name:e.user?.nickname||e.user?.username||``,avatar:e.user?.avatar_url||``,files:[],at_users:o,nine_grid_content_info:b(e?.images,e?.videos,e?.medias),is_follow:!1})}function x(e){return Array.isArray(e)?e.map(e=>({user_id:e.user_id||``,name:e.nickname||e.username||``,avatar:e.avatar_url||``,birthday:``,signature:e.signature||``})):[]}function Se(e){if(!e)return[];let t=new Map,n=/<span[^>]*class=['"]mention['"][^>]*data-id=['"]([^'"]+)['"][^>]*>@([^<]*)<\/span>/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]?String(r[1]):``,n=(r[2]?String(r[2]):``).replace(/^@/,``)||e;!e||t.has(e)||t.set(e,{user_id:e,name:n,avatar:``,birthday:``,signature:``})}if(t.size>0)return Array.from(t.values());let i=/<@_user>(\w+)<\/@_user>/g;for(;(r=i.exec(e))!==null;){let e=r[1]?String(r[1]):``;!e||t.has(e)||t.set(e,{user_id:e,name:e,avatar:``,birthday:``,signature:``})}return Array.from(t.values())}function Ce(e){return!Array.isArray(e)||e.length===0?[]:e.map(e=>{let t=!!e.is_video,n=t?String(e.video_url||``):String(e.image_url||e.cover_image||``),r=String(e.cover_image||e.image_url||``);return{media_url:n,is_video:t,image_resolution:String(e.image_resolution||``),cover_image:r,cover_image_resolution:String(e.cover_image_resolution||``),video_resolution:String(e.resolution||``),video_duration:Number(e.video_duration||0),video_size:Number(e.video_size||0)}}).filter(e=>!!e.media_url)}const S=h(({information:e,listQueryKey:c,contentId:l,contentType:h,isShow:be=!0,isClickLoad:b=!1,initialComments:x,initialTotal:S,initialHasMore:C,addCommentCount:we,onCommentAdded:Te,onRequireLogin:w,onTotalChange:T,onReplyDetailVisibleChange:E,className:Ee})=>{let{userInfo:D,userId:De,isLogin:O}=a(),{open:Oe}=te(),k=he(`components.biz.business.comment`),ke=we??Te??(()=>{});function Ae(e){if(!e)return``;if(Array.isArray(e))return String(e[0]||``);if(typeof e==`object`){if(Object.prototype.hasOwnProperty.call(e,`comment_id`))return String(e.comment_id??``);if(Array.isArray(e.data))return String(e.data[0]||``)}return``}let A=g(()=>{w?w():Oe()},[w,Oe]),j=b?5:20,M=_(()=>x?.length?x.map(xe):[],[x]),N=x!==void 0||typeof S==`number`||typeof C==`boolean`,je=_(()=>typeof C==`boolean`?C:typeof S==`number`?M.length<S:N?M.length===0?!1:M.length>=j:!0,[N,C,M.length,S,j]),[P,F]=f(`info-detail-comment-list-${l}`,M),[I,L]=f(`info-detail-comment-list-has-more-${l}`,je),[R,Me]=f(`info-comment-detail-page-${l}`,M.length>0?2:1),[Ne,z]=f(`info-detail-comment-list-loading-${l}`,!1),[B,V]=f(`info-detail-selected-comment-${l}`,p({id:``,user_id:``})),[H,U]=f(`info-detail-reply-detail-visible-${l}`,!1),[W,G]=pe(!1),K=fe(null),q=g(e=>{typeof window>`u`||window.dispatchEvent(new CustomEvent(`funhub:comment-reply-detail-visible-change`,{detail:{visible:e}}))},[]);de(()=>{q(H),E?.(H)},[q,E,H]),de(()=>()=>{q(!1),E?.(!1)},[q,E]);let J=_(()=>Ne||I&&P.length===0?k(`commentList.loading`):P.length>0&&!I?k(`commentList.noMore`):P.length===0&&!I?k(`commentList.emptyPrompt`):``,[P.length,I,Ne,k]),Pe=_(()=>W?`回复@${B.user_name}`:``,[W,B.user_name]),{getLikedListData:Fe,getDislikedListData:Ie}=re(),Le=g(()=>{F(e=>e.map(e=>e.id===B.id?{...e,reply_cnt:(Number(e.reply_cnt||0)+1).toString()}:e)),V(e=>({...e,reply_cnt:(Number(e.reply_cnt||0)+1).toString()}))},[B.id,F,V]),Y=g(async()=>{if(l)try{let e=await o({content_id:l,page:R,page_size:j,sort_by:`latest`});if(e.code!==0)throw Error(e.message||k(`commentList.fetchCommentsFailed`));let t=(e.data?.data?.comments??[]).map(xe),n=e.data?.data?.total??0;R===1&&T&&T(n),((e.data?.data?.has_more??!1)===!1||t.length<j)&&L(!1),F(e=>{let n=new Set(e.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e,...r]}),Me(R+1)}catch(e){console.error(`获取评论列表失败:`,e),L(!1)}},[l,R,j,F,L,Me]),X=g(async()=>{z(!0);try{await Y()}catch(e){console.error(`获取评论列表失败:`,e)}z(!1)},[Y,z]);ie(()=>{b&&!N&&X()},[N,b,X],`info-detail-comment-initial-load-more-${l}`),ie(()=>{!N||!T||typeof S==`number`&&T(S)},[N,S,T],`info-detail-comment-initial-total-${l}`);function Re(){ge(()=>{G(!1)})}async function ze({text:e,imageVideoInfoList:i}){try{if(!O)return A(),{success:!1,message:k(`commentList.loginRequired`)};let a=D?.userId||D?.user_id||De||``;if(!a)return A(),{success:!1,message:k(`commentList.loginRequired`)};let o=D?.nick_name||D?.nickname||D?.name||D?.user_name||D?.username||``,c=D?.avatar||D?.avatar_url||``,u=Ce(i),ee=n(e),d=await s({content_id:l,content:r(e),medias:u,mentioned_users:ee,source_type:h===`video`?1:2},{revalidate:!1});if(d.code===0){let n=Ae(d.data);if(!n||n===`0`)return{success:!1,message:k(`commentList.publishCommentFailed`)};let r=Se(e),s=p({text:e,id:n,avatar:c,user_id:a,user_name:o,like_cnt:d.data?.like_count??0,created_at:t(),nine_grid_content_info:i,at_users:r});return F(e=>[s,...e]),{success:!0}}else return{success:!1,message:d.message||k(`commentList.publishCommentFailed`)}}catch(e){return console.error(e),{success:!1,message:k(`commentList.publishCommentFailed`)}}}let Z=g(async({text:e,imageVideoInfoList:t,callback:i})=>{try{if(!O)return A(),{success:!1,message:k(`commentList.loginRequired`)};if(!B?.id||B.id===`0`)return{success:!1,message:k(`commentList.invalidReplyTarget`)};let a=Ce(t),o=n(e),c=await s({content_id:l,content:r(e),medias:a,mentioned_users:o,parent_id:B.id,source_type:h===`video`?1:2},{revalidate:!1});if(c.code!==0)return{success:!1,message:c.message||k(`commentList.publishReplyFailed`)};F(e=>e.map(e=>e.id===B.id?{...e,reply_cnt:(Number(e.reply_cnt)+1).toString()}:e));let u=Ae(c.data);return!u||u===`0`?{success:!1,message:k(`commentList.publishReplyFailed`)}:(i?.(u),{success:!0})}catch(e){return console.error(`发布回复评论失败:`,e),{success:!1,message:k(`commentList.publishReplyFailed`)}}},[l,h,O,A,B.id,F,k]);async function Be({text:e,imageVideoInfoList:t}){let n=e=>e.success?e:(m.error(e.message||k(`commentList.publishCommentFailed`)),{...e,toastHandled:!0});if(W){let r=await Z({text:e,imageVideoInfoList:t,callback:e=>{}});return G(!1),n(r)}else{let r=await ze({text:e,imageVideoInfoList:t});return r.success&&ke(),G(!1),n(r)}}let Q=g(e=>{V(e),ae()&&K.current?.focus(),_e(()=>{G(!0),K.current?.focus()})},[V]),$=g(e=>{V(e),U(!0)},[U,V]),Ve=g(e=>{if(e.reply_cnt===`0`){Q(e);return}$(e)},[Q,$]),He=g(e=>{if(!O){w?.();return}F(Fe(P,e.id)),ve(e)},[P,Fe,O,w,F]),Ue=g(e=>{if(!O){w?.();return}e.like_flag!==`2`&&m.message(k(`commentList.dislikeHint`)),F(Ie(P,e.id)),ye(e)},[P,Ie,O,w,F,k]),We=ne();function Ge(){c&&We(c),U(!1)}return y(me,{children:[y(u,{className:i(`w-full pb-[60px]`,Ee),children:[P.map((e,t)=>v(le,{comment:e,onReply:Q,onViewReplies:$,onReplyAction:Ve,onLike:He,onDislike:Ue,isLogin:O,onRequireLogin:A},`${e.id}-${t}-comment`)),be&&v(ee,{loadMore:async()=>{await Y()},hasMore:I,initialLoad:!b&&P.length===0&&I!==!1}),b&&y(u,{className:`w-full my-[8px]`,children:[!J&&y(u,{className:`w-[fit-content] h-[42px] flex items-center justify-center mx-[auto]`,onClick:()=>{X()},children:[v(d,{className:`text-text3 text-[14px]`,children:k(`commentList.viewMore`)}),v(se,{className:`w-[8px] h-[auto] ml-[4px] text-text3`})]}),J&&v(u,{className:`w-full h-[42px] flex items-center justify-center`,children:v(d,{className:`text-text3 text-[12px]`,children:J})})]}),v(ce,{placeholder:Pe,onPublish:({text:e,imageVideoInfoList:t})=>Be({text:e,imageVideoInfoList:t}),onInputBlur:Re,onRequireLogin:A,ref:K})]}),v(ue,{visible:H,comment:B,information:e,contentType:h,onClose:Ge,onReplyComment:Z,onReplyAdded:Le,onRequireLogin:A},B.id),v(oe,{})]})});export{S as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{cn as e}from"../../../../utils/cn.mjs";import{debounceFun as t,getCurrentSecondTime as n,parseTextAtUserIds as r,replaceAtUserElement as i}from"../../../../utils/common.mjs";import{useFollowIdsState as a}from"../../../../store/modules/follow-ids-store.mjs";import{useUserStore as o}from"../../../../store/modules/user-store.mjs";import{gCommunityGetComments as s,pCommunityCreateComment as c,pCommunityDislikeComment as l,pCommunityLikeComment as u,pInteractionFollow as d,pInteractionUnfollow as f}from"../../../../service/generated/client.mjs";import{checkFollowStatus as p}from"../../../../utils/follow-service.mjs";import{useRouter as m}from"../../../../utils/use-compatible-router.mjs";import{Image as h}from"../../../ui/image.mjs";import{Dialog as g,DialogContent as _}from"../../../ui/dialog.mjs";import{InfiniteScroll as v}from"../../../ui/infinite-scroll.mjs";import{useLikeDislike as y}from"../../../../hooks/use-like-dislike.mjs";import{useKeepAliveState as b}from"../../../common/keep-scroll-position/index.mjs";import x from"../../../../assets/icons/close.mjs";import S from"../../../../assets/icons/common/follow_sel.mjs";import C from"../../../../assets/icons/common/follow_user.mjs";import{UnfollowConfirmDialog as w}from"../../../common/follow-button/unfollow-confirm-dialog.mjs";import T from"../../../../assets/icons/detail/give_like.mjs";import E from"../../../../assets/icons/detail/give_like_sel.mjs";import D from"./comment-input.mjs";import O from"../../../../assets/icons/detail/un_like.mjs";import k from"../../../../assets/icons/detail/un_like_sel.mjs";import{CommentMedia as A}from"./comment-media.mjs";import{CommentRichText as j}from"./comment-rich-text.mjs";import{TimeDisplay as M}from"./time-display.mjs";import{CommentItem as N}from"./comment-item.mjs";import{mapApiReplayToReplay as P}from"../../../../types/safe-replay.mjs";import{memo as F,useCallback as I,useEffect as L,useMemo as R,useRef as z,useState as B}from"react";import{Fragment as V,jsx as H,jsxs as U}from"react/jsx-runtime";import{toast as W}from"sonner";import{useTranslations as G}from"next-intl";function K(e){if(e==null)return 0;let t=typeof e==`number`?e:Number(e);if(!Number.isNaN(t)&&t>0)return t>0xe8d4a51000?Math.floor(t/1e3):Math.floor(t);let n=Date.parse(String(e));return Number.isNaN(n)?0:Math.floor(n/1e3)}function q(e,t,n){let r=[];return Array.isArray(n)&&n.length>0?(n.forEach(e=>{let t=!!e?.is_video,n=String(e?.media_url||``),i=String(e?.cover_image||``);!n&&!i||r.push({cover_image:i,cover_image_thumbnail:i,cover_image_radio:1,cover_image_resolution:String(e?.cover_image_resolution||``),image_url:t?``:n,image_thumbnail:t?``:n,image_radio:1,image_resolution:String(e?.image_resolution||``),is_video:t,resolution:String(e?.video_resolution||``),video_duration:Number(e?.video_duration||0),video_url:t?n:``,video_size:Number(e?.video_size||0),video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r):(e?.length&&e.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:e,image_thumbnail:e,image_radio:1,image_resolution:``,is_video:!1,resolution:``,video_duration:0,video_url:``,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),t?.length&&t.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:``,image_thumbnail:``,image_radio:1,image_resolution:``,is_video:!0,resolution:``,video_duration:0,video_url:e,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r)}function J(e){let t=X(e.mentioned_users),n=t.length>0?t:Z(e.content||``);return{id:String(e.comment_id??e.id??``),user_name:e.user?.nickname||e.user?.username||``,text:e.content||``,type:`4`,files:[],at_users:n,cover_image:``,nine_grid_content_info:q(e?.images,e?.videos,e?.medias)}}function Y(e,t){let n=e.is_liked?`1`:e.is_dislike?`2`:`0`,r=X(e.mentioned_users),i=r.length>0?r:Z(e.content||``),a=String(e.comment_id??e.id??``),o=typeof e.like_count==`number`?e.like_count:0,s=P({id:a,like_cnt:(e.is_liked&&o===0?1:o).toString(),dislike_cnt:(e.dislike_count||0).toString(),created_at:K(e.create_time),text:e.content||``,type:`4`,like_flag:n,user_id:e.user_id||``,user_name:e.user?.nickname||e.user?.username||``,avatar:e.user?.avatar_url||``,reply_cnt:(e.reply_count||0).toString(),nine_grid_content_info:q(e?.images,e?.videos,e?.medias),at_users:i,parent_reply:void 0});return t&&(s.parent_reply=J(t)),s}function X(e){return Array.isArray(e)?e.map(e=>({user_id:e.user_id||``,name:e.nickname||e.username||``,avatar:e.avatar_url||``,birthday:``,signature:e.signature||``})):[]}function Z(e){if(!e)return[];let t=new Map,n=/<span[^>]*class=['"]mention['"][^>]*data-id=['"]([^'"]+)['"][^>]*>@([^<]*)<\/span>/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]?String(r[1]):``,n=(r[2]?String(r[2]):``).replace(/^@/,``)||e;!e||t.has(e)||t.set(e,{user_id:e,name:n,avatar:``,birthday:``,signature:``})}if(t.size>0)return Array.from(t.values());let i=/<@_user>(\w+)<\/@_user>/g;for(;(r=i.exec(e))!==null;){let e=r[1]?String(r[1]):``;!e||t.has(e)||t.set(e,{user_id:e,name:e,avatar:``,birthday:``,signature:``})}return Array.from(t.values())}function ee(e){return!Array.isArray(e)||e.length===0?[]:e.map(e=>{let t=!!e.is_video,n=t?String(e.video_url||``):String(e.image_url||e.cover_image||``),r=String(e.cover_image||e.image_url||``);return{media_url:n,is_video:t,image_resolution:String(e.image_resolution||``),cover_image:r,cover_image_resolution:String(e.cover_image_resolution||``),video_resolution:String(e.resolution||``),video_duration:Number(e.video_duration||0),video_size:Number(e.video_size||0)}}).filter(e=>!!e.media_url)}function Q(e,t){let n=[];return e.forEach(e=>{n.push(Y(e,t)),e.sub_comments?.length&&n.push(...Q(e.sub_comments,e))}),n}function $(e){let t=Number(e)||0;return t>=1e4?`${(t/1e4).toFixed(1)}w`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}const te=t((e,t,n)=>{try{if(!e?.id)return;u({comment_id:e.id,is_like:e.like_flag!==`1`},{revalidate:!1})}catch(e){console.error(`点赞回复失败:`,e)}},200),ne=t((e,t,n)=>{try{if(!e?.id)return;l({comment_id:e.id,is_dislike:e.like_flag!==`2`},{revalidate:!1})}catch(e){console.error(`点踩回复失败:`,e)}},200),re=F(({comment:e,updateFollow:t,onRequireLogin:n})=>{let{userInfo:r,userId:i,isLogin:a}=o(),s=r?.userId||r?.user_id||i||``;return H(`div`,{className:`w-full bg-bg1`,children:H(N,{comment:e,variant:`light`,isLogin:a,onRequireLogin:n,rightSlot:R(()=>!!s&&String(s)===String(e.user_id||``),[e.user_id,s])?H(V,{}):H(ie,{userId:e.user_id,hasFollow:e.is_follow,onChange:t,onRequireLogin:n}),showReplyButton:!1})})});function ie({userId:t,hasFollow:n=!1,onChange:r,onRequireLogin:i}){let s=G(`components.biz.business.comment`),{isLogin:c,userInfo:l,userId:u}=o(),{followIds:p}=a(),[m,h]=B(n),[g,_]=B(!1),v=l?.userId||l?.user_id||u||``,y=R(()=>!!v&&String(v)===String(t||``),[t,v]),b=R(()=>n||p.includes(t),[p,n,t]);L(()=>{h(b)},[b]);let x=I(async()=>{try{if(!v||!t||t===`0`){W.error(s(`replyDetail.loginRequired`));return}if(m){let e=await f({follower_id:String(v),followee_id:t});if(e.code!==0){W.error(e.message||s(`replyDetail.unfollowFailed`));return}}else{let e=await d({follower_id:String(v),followee_id:t});if(e.code!==0){W.error(e.message||s(`replyDetail.followFailed`));return}}window.sensors?.track(`detail_follow_click`,{object_id:``,action:m?`取消关注`:`关注`,author_id:t}),sessionStorage.setItem(`user_page_refresh`,`1`)}catch(e){console.error(`关注或取消关注失败:`,e),W.error(s(m?`replyDetail.unfollowFailed`:`replyDetail.followFailed`));return}let e=!m;r?.(e),h(e);let{followIds:n,setFollowIds:i}=a.getState(),o=new Set(n);e?o.add(t):o.delete(t),i(Array.from(o))},[t,m,r,v,s]),T=I(()=>{if(!c){i?.();return}if(m){_(!0);return}x()},[x,m,c,i]);function E(){_(!1),x()}function D(){_(!1)}return y||!t||t===`0`?null:U(V,{children:[H(`div`,{className:e(`h-[28px] rounded-[14px] px-[8px] border border-solid cursor-pointer flex items-center justify-center`,m?`border-text3`:`border-theme5`),onClick:T,children:m?U(V,{children:[H(S,{className:`w-[12px] h-[12px] text-text3 shrink-0`}),H(`span`,{className:`text-text3 text-[12px] leading-[18px] ml-[4px] shrink-0`,children:s(`replyDetail.followed`)})]}):U(V,{children:[H(C,{className:`block w-[12px] h-[12px] text-theme5 shrink-0`}),H(`span`,{className:`block text-theme5 text-[12px] leading-[18px] ml-[4px] shrink-0`,children:s(`replyDetail.follow`)})]})}),H(w,{open:g,onOpenChange:_,onCancel:D,onConfirm:E})]})}const ae=t(e=>{e()},0);function oe(e,t,n,r){let i=z(!1);L(()=>{i.current=!1},[r]),L(()=>{let r=e.current;if(!r)return;!i.current&&t>0&&(r.scrollTop=t,i.current=!0);let a=()=>{i.current=!0,n(r.scrollTop)};return r.addEventListener(`scroll`,a,{passive:!0}),()=>r.removeEventListener(`scroll`,a)},[e,n,t,r])}const se=F(({commentId:e,informationId:t,handleReplyComment:n,onReplyListUpdate:r})=>{let i=G(`components.biz.business.comment`),[a,o]=b(`replay-detail-list-${e}`,[]),[c,l]=b(`replay-detail-has-more-${e}`,!0),[u,d]=b(`replay-detail-page-${e}`,1),{getLikedListData:f,getDislikedListData:p}=y(),m=z(!1),h=I(async()=>{if(!(!e||!t)&&!m.current){m.current=!0;try{let n=await s({content_id:t,parent_id:e,page:u,page_size:20,sort_by:`latest`});if(n.code!==0)throw Error(n.message||i(`replyDetail.fetchRepliesFailed`));let r=n.data?.data?.comments??[],a=Q(r);((n.data?.data?.has_more??!1)===!1||r.length<20)&&l(!1),o(e=>{let t=new Set(e.map(e=>e.id)),n=a.filter(e=>!t.has(e.id));return[...e,...n]}),a.length>0&&d(u+1)}catch(e){console.error(`获取回复列表失败:`,e),l(!1)}finally{m.current=!1}}},[e,t,u,o,l,d,i]),g=I(e=>{o(t=>[e,...t])},[o]);L(()=>{r(g)},[r,g]),L(()=>{e&&t&&(o(e=>e.length===0?e:[]),l(e=>e===!0?e:!0),d(e=>e===1?e:1))},[e,t,o,l,d]);let _=I(n=>{o(e=>f(e,n.id)),te(n,t,e)},[e,f,t,o]),x=I(n=>{n.like_flag!==`2`&&W.message(i(`replyDetail.dislikeHint`)),o(e=>p(e,n.id)),ne(n,t,e)},[e,p,t,o,i]),[S,C]=b(`replay-detail-scroll-top-${e}`,0),w=z(null);oe(w,S,C,e),L(()=>{!e||!t||a.length===0&&c&&h()},[e,t,h,a.length,c]);let T=I(async()=>{await h()},[h]);return U(`div`,{ref:w,className:`w-full pb-[66px]`,children:[a.map((e,t)=>H(ce,{replyItem:e,replyComment:n,onLikeReply:_,onDislikeReply:x},`${e.id}-${t}`)),H(v,{loadMore:T,hasMore:c})]})});function ce({replyItem:e,replyComment:t,onLikeReply:n,onDislikeReply:r}){let i=G(`components.biz.business.comment`),a=m(),o=e.status===`0`;function s(){n?.(e)}function c(){r?.(e)}function l(){t(e)}return U(`div`,{className:`p-[16px] flex flex-col`,children:[U(`div`,{className:`flex flex-row justify-between`,children:[U(`button`,{type:`button`,className:`flex flex-row items-center text-left`,onClick:()=>{a.push(`/profile/${e.user_id}`)},children:[H(`div`,{className:`w-[38px] h-[38px] rounded-full overflow-hidden relative bg-bg2`,children:e.avatar&&H(h,{src:e.avatar,fill:!0,objectFit:`cover`,alt:`avatar`})}),U(`div`,{className:`ml-[12px] flex flex-col`,children:[H(`span`,{className:`text-text2 text-[14px] leading-[14px] max-w-[180px] text-ellipsis overflow-hidden whitespace-nowrap`,children:e.user_name}),H(`span`,{className:`mt-[8px] text-text3 text-[12px] leading-[12px]`,children:H(M,{timestamp:e.created_at})})]})]}),o?H(`div`,{className:`px-[8px] py-[4px] bg-text3/10 rounded-[12px]`,children:H(`span`,{className:`text-text3 text-[12px] leading-[12px]`,children:i(`replyDetail.underReview`)})}):U(`div`,{className:`flex flex-row items-center`,children:[U(`div`,{className:`px-[4px] flex flex-col items-center`,onClick:s,children:[e.like_flag===`1`?H(E,{className:`w-[14px] h-[14px]`}):H(T,{className:`w-[14px] h-[14px] text-text3`}),H(`span`,{className:`mt-[4px] text-text3 text-[12px] leading-[12px]`,children:e.like_cnt===`0`?i(`replyDetail.like`):$(e.like_cnt)})]}),U(`div`,{className:`ml-[12px] px-[4px] flex flex-col items-center`,onClick:c,children:[e.like_flag===`2`?H(k,{className:`w-[14px] h-[14px]`}):H(O,{className:`w-[14px] h-[14px] text-text3`}),H(`span`,{className:`mt-[4px] text-text3 text-[12px] leading-[12px]`,children:e.dislike_cnt===`0`?i(`replyDetail.dislike`):$(e.dislike_cnt)})]})]})]}),U(`div`,{className:`mt-[4px] pl-[50px] flex flex-col`,children:[e.text&&H(j,{className:`text-text1 text-[14px] leading-[22px] break-all`,text:e.text,atUsers:e.at_users}),H(A,{list:e.nine_grid_content_info,disabled:o,hasText:!!e.text,playerId:e.id}),e.parent_reply&&e.parent_reply.text&&U(V,{children:[U(`div`,{className:`mt-[4px] flex flex-row items-center text-[14px] leading-[22px] relative pl-[8px]`,children:[H(`div`,{className:`w-[2px] h-full bg-line1 mr-[8px] absolute left-0 top-0 bottom-0 m-auto`}),U(`span`,{className:`text-theme1`,children:[e.parent_reply.user_name,`:`,e.parent_reply.text&&H(`span`,{className:`text-text1`,children:H(j,{text:e.parent_reply.text,atUsers:e.parent_reply.at_users})})]})]}),H(`div`,{className:`mt-1`,children:H(A,{list:e.parent_reply.nine_grid_content_info,disabled:o,hasText:!!e.parent_reply.text,playerId:e.parent_reply.id})})]}),H(`div`,{className:`mt-[4px] w-[fit-content] h-[30px] px-[12px] text-text1 text-[14px] leading-[22px] flex flex-row items-center bg-bg1 rounded-[15px]`,onClick:l,children:H(`span`,{children:i(`replyDetail.reply`)})})]})]})}function le({comment:e,information:t,contentType:s,visible:l,onClose:u,onReplyComment:d,onReplyAdded:f,onRequireLogin:m}){let h=G(`components.biz.business.comment`),v=z(null),[y,b]=B(()=>P({})),[S,C]=B(!1),{userInfo:w,userId:T}=o(),{followIds:E,setFollowIds:O}=a(),k=w?.userId||w?.user_id||T||``,A=w?.name||w?.nick_name||w?.nickname||w?.user_name||``,j=w?.avatar||w?.avatar_url||``,M=z({commentId:``,userId:``});function N(e){if(!e)return``;if(Array.isArray(e))return String(e[0]||``);if(typeof e==`object`){if(Object.prototype.hasOwnProperty.call(e,`comment_id`))return String(e.comment_id??``);if(Array.isArray(e.data))return String(e.data[0]||``)}return``}L(()=>{l&&(!k||!e.user_id||e.user_id!==`0`&&String(k)!==String(e.user_id)&&(M.current.commentId===e.id&&M.current.userId===k||(M.current={commentId:e.id,userId:k},(async()=>{let t=await p({app_id:0,follower_id:k,followee_ids:[e.user_id]});if(!t.success||!t.data?.is_following_map)return;let n=!!t.data.is_following_map[e.user_id];e.is_follow=n;let r=new Set(E);n?r.add(e.user_id):r.delete(e.user_id),O(Array.from(r))})())))},[e,E,k,O,l]);let F=I(e=>{b(e),setTimeout(()=>{C(!0),v.current?.focus()},10)},[]);function R(){ae(()=>{C(!1)})}async function V({text:e,imageVideoInfoList:t}){let n=e=>e.success?e:(W.error(e.message||h(`replyDetail.publishReplyFailed`)),{...e,toastHandled:!0});if(S){let r=await q({text:e,imageVideoInfoList:t});return C(!1),n(r)}else{let r=await K({text:e,imageVideoInfoList:t});return C(!1),n(r)}}async function K({text:e,imageVideoInfoList:t}){return await d?.({text:e,imageVideoInfoList:t,callback:r=>{let i=Z(e);if(!r||r===`0`)return;let a=P({id:r,user_id:k,user_name:A,avatar:j,text:e,created_at:n(),type:`4`,nine_grid_content_info:t,at_users:i});J?.(a)}})??{success:!0}}async function q({text:e,imageVideoInfoList:a}){if(!y?.id||y.id===`0`)return{success:!1,message:h(`replyDetail.invalidReplyTarget`)};let o=ee(a),l=r(e),u=s===`video`?1:2;try{let r=await c({content_id:t.id,content:i(e),medias:o,mentioned_users:l,parent_id:y.id,source_type:u},{revalidate:!1});if(r.code!==0)return{success:!1,message:r.message||h(`replyDetail.publishReplyFailed`)};let s=N(r.data);if(!s||s===`0`)return{success:!1,message:h(`replyDetail.publishReplyFailed`)};let d=P({id:s,user_id:k,user_name:A,avatar:j,text:e,created_at:n(),type:`4`,nine_grid_content_info:a,at_users:Z(e)});return d.parent_reply=y,J?.(d),f?.(),{success:!0}}catch(e){return console.error(`发布回复回复失败:`,e),{success:!1,message:h(`replyDetail.publishReplyFailed`)}}}let[J,Y]=B(null),X=I(e=>{Y(()=>e)},[]),Q=S?`回复@${y.user_name}`:``;function $(e){e||u()}return H(g,{open:l,onOpenChange:$,children:U(_,{showCloseButton:!1,className:`fixed left-0 right-0 bottom-0 top-[84px] z-[1000] h-auto w-full max-w-none translate-x-0 translate-y-0 rounded-none bg-bg2 p-0 text-text1 !flex !flex-col !gap-0`,children:[U(`div`,{className:`w-full h-[60px] bg-bg1 flex items-center justify-center relative`,children:[H(`button`,{type:`button`,className:`w-[48px] focus-within:outline-none focus-within:border-none focus-within:ring-0 h-full flex items-center justify-center absolute left-0 top-0`,onClick:u,children:H(x,{className:`w-[16px] h-[16px] text-text1`})}),H(`span`,{className:`text-[18px] font-bold`,children:h(`replyDetail.commentDetail`)})]}),U(`div`,{className:`flex-1 min-h-0 w-full overflow-y-auto bg-bg2`,children:[H(re,{comment:e,updateFollow:t=>{e.is_follow=t},onRequireLogin:m}),H(se,{commentId:e.id,informationId:t.id,handleReplyComment:F,onReplyListUpdate:X}),H(D,{placeholder:Q,onInputBlur:R,onPublish:V,onRequireLogin:m,ref:v})]})]})})}export{le as default};
|
|
2
|
+
"use client";import{debounceFun as e,formatCompactCount as t,getCurrentSecondTime as n,parseTextAtUserIds as r,replaceAtUserElement as i}from"../../../../utils/common.mjs";import{cn as a}from"../../../../utils/cn.mjs";import{useFollowIdsState as o}from"../../../../store/modules/follow-ids-store.mjs";import{useUserStore as s}from"../../../../store/modules/user-store.mjs";import{gCommunityGetComments as c,pCommunityCreateComment as l,pCommunityDislikeComment as u,pCommunityLikeComment as d,pInteractionFollow as f,pInteractionUnfollow as p}from"../../../../service/generated/client.mjs";import{checkFollowStatus as m}from"../../../../utils/follow-service.mjs";import{useRouter as h}from"../../../../utils/use-compatible-router.mjs";import{Image as g}from"../../../ui/image.mjs";import{Dialog as _,DialogContent as v}from"../../../ui/dialog.mjs";import{InfiniteScroll as y}from"../../../ui/infinite-scroll.mjs";import{useLikeDislike as b}from"../../../../hooks/use-like-dislike.mjs";import{useKeepAliveState as x}from"../../../common/keep-scroll-position/index.mjs";import S from"../../../../assets/icons/close.mjs";import C from"../../../../assets/icons/common/follow_sel.mjs";import w from"../../../../assets/icons/common/follow_user.mjs";import{UnfollowConfirmDialog as T}from"../../../common/follow-button/unfollow-confirm-dialog.mjs";import E from"../../../../assets/icons/detail/give_like.mjs";import D from"../../../../assets/icons/detail/give_like_sel.mjs";import O from"./comment-input.mjs";import k from"../../../../assets/icons/detail/un_like.mjs";import A from"../../../../assets/icons/detail/un_like_sel.mjs";import{CommentMedia as j}from"./comment-media.mjs";import{CommentRichText as M}from"./comment-rich-text.mjs";import{TimeDisplay as N}from"./time-display.mjs";import{CommentItem as P}from"./comment-item.mjs";import{mapApiReplayToReplay as F}from"../../../../types/safe-replay.mjs";import{toast as I}from"sonner";import{memo as L,useCallback as R,useEffect as z,useMemo as B,useRef as V,useState as H}from"react";import{Fragment as U,jsx as W,jsxs as G}from"react/jsx-runtime";import{useTranslations as K}from"next-intl";function q(e){if(e==null)return 0;let t=typeof e==`number`?e:Number(e);if(!Number.isNaN(t)&&t>0)return t>0xe8d4a51000?Math.floor(t/1e3):Math.floor(t);let n=Date.parse(String(e));return Number.isNaN(n)?0:Math.floor(n/1e3)}function J(e,t,n){let r=[];return Array.isArray(n)&&n.length>0?(n.forEach(e=>{let t=!!e?.is_video,n=String(e?.media_url||``),i=String(e?.cover_image||``);!n&&!i||r.push({cover_image:i,cover_image_thumbnail:i,cover_image_radio:1,cover_image_resolution:String(e?.cover_image_resolution||``),image_url:t?``:n,image_thumbnail:t?``:n,image_radio:1,image_resolution:String(e?.image_resolution||``),is_video:t,resolution:String(e?.video_resolution||``),video_duration:Number(e?.video_duration||0),video_url:t?n:``,video_size:Number(e?.video_size||0),video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r):(e?.length&&e.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:e,image_thumbnail:e,image_radio:1,image_resolution:``,is_video:!1,resolution:``,video_duration:0,video_url:``,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),t?.length&&t.forEach(e=>{r.push({cover_image:``,cover_image_thumbnail:``,cover_image_radio:1,cover_image_resolution:``,image_url:``,image_thumbnail:``,image_radio:1,image_resolution:``,is_video:!0,resolution:``,video_duration:0,video_url:e,video_size:0,video_codec_info:{hls_info:[],video_codec_deal:!1}})}),r)}function Y(e){let t=Z(e.mentioned_users),n=t.length>0?t:Q(e.content||``);return{id:String(e.comment_id??e.id??``),user_name:e.user?.nickname||e.user?.username||``,text:e.content||``,type:`4`,files:[],at_users:n,cover_image:``,nine_grid_content_info:J(e?.images,e?.videos,e?.medias)}}function X(e,t){let n=e.is_liked?`1`:e.is_dislike?`2`:`0`,r=Z(e.mentioned_users),i=r.length>0?r:Q(e.content||``),a=String(e.comment_id??e.id??``),o=typeof e.like_count==`number`?e.like_count:0,s=F({id:a,like_cnt:(e.is_liked&&o===0?1:o).toString(),dislike_cnt:(e.dislike_count||0).toString(),created_at:q(e.create_time),text:e.content||``,type:`4`,like_flag:n,user_id:e.user_id||``,user_name:e.user?.nickname||e.user?.username||``,avatar:e.user?.avatar_url||``,reply_cnt:(e.reply_count||0).toString(),nine_grid_content_info:J(e?.images,e?.videos,e?.medias),at_users:i,parent_reply:void 0});return t&&(s.parent_reply=Y(t)),s}function Z(e){return Array.isArray(e)?e.map(e=>({user_id:e.user_id||``,name:e.nickname||e.username||``,avatar:e.avatar_url||``,birthday:``,signature:e.signature||``})):[]}function Q(e){if(!e)return[];let t=new Map,n=/<span[^>]*class=['"]mention['"][^>]*data-id=['"]([^'"]+)['"][^>]*>@([^<]*)<\/span>/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]?String(r[1]):``,n=(r[2]?String(r[2]):``).replace(/^@/,``)||e;!e||t.has(e)||t.set(e,{user_id:e,name:n,avatar:``,birthday:``,signature:``})}if(t.size>0)return Array.from(t.values());let i=/<@_user>(\w+)<\/@_user>/g;for(;(r=i.exec(e))!==null;){let e=r[1]?String(r[1]):``;!e||t.has(e)||t.set(e,{user_id:e,name:e,avatar:``,birthday:``,signature:``})}return Array.from(t.values())}function ee(e){return!Array.isArray(e)||e.length===0?[]:e.map(e=>{let t=!!e.is_video,n=t?String(e.video_url||``):String(e.image_url||e.cover_image||``),r=String(e.cover_image||e.image_url||``);return{media_url:n,is_video:t,image_resolution:String(e.image_resolution||``),cover_image:r,cover_image_resolution:String(e.cover_image_resolution||``),video_resolution:String(e.resolution||``),video_duration:Number(e.video_duration||0),video_size:Number(e.video_size||0)}}).filter(e=>!!e.media_url)}function $(e,t){let n=[];return e.forEach(e=>{n.push(X(e,t)),e.sub_comments?.length&&n.push(...$(e.sub_comments,e))}),n}const te=e((e,t,n)=>{try{if(!e?.id)return;d({comment_id:e.id,is_like:e.like_flag!==`1`},{revalidate:!1})}catch(e){console.error(`点赞回复失败:`,e)}},200),ne=e((e,t,n)=>{try{if(!e?.id)return;u({comment_id:e.id,is_dislike:e.like_flag!==`2`},{revalidate:!1})}catch(e){console.error(`点踩回复失败:`,e)}},200),re=L(({comment:e,updateFollow:t,onRequireLogin:n})=>{let{userInfo:r,userId:i,isLogin:a}=s(),o=r?.userId||r?.user_id||i||``;return W(`div`,{className:`w-full bg-bg1`,children:W(P,{comment:e,variant:`light`,isLogin:a,onRequireLogin:n,rightSlot:B(()=>!!o&&String(o)===String(e.user_id||``),[e.user_id,o])?W(U,{}):W(ie,{userId:e.user_id,hasFollow:e.is_follow,onChange:t,onRequireLogin:n}),showReplyButton:!1})})});function ie({userId:e,hasFollow:t=!1,onChange:n,onRequireLogin:r}){let i=K(`components.biz.business.comment`),{isLogin:c,userInfo:l,userId:u}=s(),{followIds:d}=o(),[m,h]=H(t),[g,_]=H(!1),v=l?.userId||l?.user_id||u||``,y=B(()=>!!v&&String(v)===String(e||``),[e,v]),b=B(()=>t||d.includes(e),[d,t,e]);z(()=>{h(b)},[b]);let x=R(async()=>{try{if(!v||!e||e===`0`){I.error(i(`replyDetail.loginRequired`));return}if(m){let t=await p({follower_id:String(v),followee_id:e});if(t.code!==0){I.error(t.message||i(`replyDetail.unfollowFailed`));return}}else{let t=await f({follower_id:String(v),followee_id:e});if(t.code!==0){I.error(t.message||i(`replyDetail.followFailed`));return}}window.sensors?.track(`detail_follow_click`,{object_id:``,action:m?`取消关注`:`关注`,author_id:e}),sessionStorage.setItem(`user_page_refresh`,`1`)}catch(e){console.error(`关注或取消关注失败:`,e),I.error(i(m?`replyDetail.unfollowFailed`:`replyDetail.followFailed`));return}let t=!m;n?.(t),h(t);let{followIds:r,setFollowIds:a}=o.getState(),s=new Set(r);t?s.add(e):s.delete(e),a(Array.from(s))},[e,m,n,v,i]),S=R(()=>{if(!c){r?.();return}if(m){_(!0);return}x()},[x,m,c,r]);function E(){_(!1),x()}function D(){_(!1)}return y||!e||e===`0`?null:G(U,{children:[W(`div`,{className:a(`h-[28px] rounded-[14px] px-[8px] border border-solid cursor-pointer flex items-center justify-center`,m?`border-text3`:`border-theme5`),onClick:S,children:m?G(U,{children:[W(C,{className:`w-[12px] h-[12px] text-text3 shrink-0`}),W(`span`,{className:`text-text3 text-[12px] leading-[18px] ml-[4px] shrink-0`,children:i(`replyDetail.followed`)})]}):G(U,{children:[W(w,{className:`block w-[12px] h-[12px] text-theme5 shrink-0`}),W(`span`,{className:`block text-theme5 text-[12px] leading-[18px] ml-[4px] shrink-0`,children:i(`replyDetail.follow`)})]})}),W(T,{open:g,onOpenChange:_,onCancel:D,onConfirm:E})]})}const ae=e(e=>{e()},0);function oe(e,t,n,r){let i=V(!1);z(()=>{i.current=!1},[r]),z(()=>{let r=e.current;if(!r)return;!i.current&&t>0&&(r.scrollTop=t,i.current=!0);let a=()=>{i.current=!0,n(r.scrollTop)};return r.addEventListener(`scroll`,a,{passive:!0}),()=>r.removeEventListener(`scroll`,a)},[e,n,t,r])}const se=L(({commentId:e,informationId:t,handleReplyComment:n,onReplyListUpdate:r})=>{let i=K(`components.biz.business.comment`),[a,o]=x(`replay-detail-list-${e}`,[]),[s,l]=x(`replay-detail-has-more-${e}`,!0),[u,d]=x(`replay-detail-page-${e}`,1),{getLikedListData:f,getDislikedListData:p}=b(),m=V(!1),h=R(async()=>{if(!(!e||!t)&&!m.current){m.current=!0;try{let n=await c({content_id:t,parent_id:e,page:u,page_size:20,sort_by:`latest`});if(n.code!==0)throw Error(n.message||i(`replyDetail.fetchRepliesFailed`));let r=n.data?.data?.comments??[],a=$(r);((n.data?.data?.has_more??!1)===!1||r.length<20)&&l(!1),o(e=>{let t=new Set(e.map(e=>e.id)),n=a.filter(e=>!t.has(e.id));return[...e,...n]}),a.length>0&&d(u+1)}catch(e){console.error(`获取回复列表失败:`,e),l(!1)}finally{m.current=!1}}},[e,t,u,o,l,d,i]),g=R(e=>{o(t=>[e,...t])},[o]);z(()=>{r(g)},[r,g]),z(()=>{e&&t&&(o(e=>e.length===0?e:[]),l(e=>e===!0?e:!0),d(e=>e===1?e:1))},[e,t,o,l,d]);let _=R(n=>{o(e=>f(e,n.id)),te(n,t,e)},[e,f,t,o]),v=R(n=>{n.like_flag!==`2`&&I.message(i(`replyDetail.dislikeHint`)),o(e=>p(e,n.id)),ne(n,t,e)},[e,p,t,o,i]),[S,C]=x(`replay-detail-scroll-top-${e}`,0),w=V(null);oe(w,S,C,e),z(()=>{!e||!t||a.length===0&&s&&h()},[e,t,h,a.length,s]);let T=R(async()=>{await h()},[h]);return G(`div`,{ref:w,className:`w-full pb-[66px]`,children:[a.map((e,t)=>W(ce,{replyItem:e,replyComment:n,onLikeReply:_,onDislikeReply:v},`${e.id}-${t}`)),W(y,{loadMore:T,hasMore:s})]})});function ce({replyItem:e,replyComment:n,onLikeReply:r,onDislikeReply:i}){let a=K(`components.biz.business.comment`),o=h(),s=e.status===`0`;function c(){r?.(e)}function l(){i?.(e)}function u(){n(e)}return G(`div`,{className:`p-[16px] flex flex-col`,children:[G(`div`,{className:`flex flex-row justify-between`,children:[G(`button`,{type:`button`,className:`flex flex-row items-center text-left`,onClick:()=>{o.push(`/profile/${e.user_id}`)},children:[W(`div`,{className:`w-[38px] h-[38px] rounded-full overflow-hidden relative bg-bg2`,children:e.avatar&&W(g,{src:e.avatar,fill:!0,objectFit:`cover`,alt:`avatar`})}),G(`div`,{className:`ml-[12px] flex flex-col`,children:[W(`span`,{className:`text-text2 text-[14px] leading-[14px] max-w-[180px] text-ellipsis overflow-hidden whitespace-nowrap`,children:e.user_name}),W(`span`,{className:`mt-[8px] text-text3 text-[12px] leading-[12px]`,children:W(N,{timestamp:e.created_at})})]})]}),s?W(`div`,{className:`px-[8px] py-[4px] bg-text3/10 rounded-[12px]`,children:W(`span`,{className:`text-text3 text-[12px] leading-[12px]`,children:a(`replyDetail.underReview`)})}):G(`div`,{className:`flex flex-row items-center`,children:[G(`div`,{className:`px-[4px] flex flex-col items-center`,onClick:c,children:[e.like_flag===`1`?W(D,{className:`w-[14px] h-[14px]`}):W(E,{className:`w-[14px] h-[14px] text-text3`}),W(`span`,{className:`mt-[4px] text-text3 text-[12px] leading-[12px]`,children:e.like_cnt===`0`?a(`replyDetail.like`):t(e.like_cnt)})]}),G(`div`,{className:`ml-[12px] px-[4px] flex flex-col items-center`,onClick:l,children:[e.like_flag===`2`?W(A,{className:`w-[14px] h-[14px]`}):W(k,{className:`w-[14px] h-[14px] text-text3`}),W(`span`,{className:`mt-[4px] text-text3 text-[12px] leading-[12px]`,children:e.dislike_cnt===`0`?a(`replyDetail.dislike`):t(e.dislike_cnt)})]})]})]}),G(`div`,{className:`mt-[4px] pl-[50px] flex flex-col`,children:[e.text&&W(M,{className:`text-text1 text-[14px] leading-[22px] break-all`,text:e.text,atUsers:e.at_users}),W(j,{list:e.nine_grid_content_info,disabled:s,hasText:!!e.text,playerId:e.id}),e.parent_reply&&e.parent_reply.text&&G(U,{children:[G(`div`,{className:`mt-[4px] flex flex-row items-center text-[14px] leading-[22px] relative pl-[8px]`,children:[W(`div`,{className:`w-[2px] h-full bg-line1 mr-[8px] absolute left-0 top-0 bottom-0 m-auto`}),G(`span`,{className:`text-theme1`,children:[e.parent_reply.user_name,`:`,e.parent_reply.text&&W(`span`,{className:`text-text1`,children:W(M,{text:e.parent_reply.text,atUsers:e.parent_reply.at_users})})]})]}),W(`div`,{className:`mt-1`,children:W(j,{list:e.parent_reply.nine_grid_content_info,disabled:s,hasText:!!e.parent_reply.text,playerId:e.parent_reply.id})})]}),W(`div`,{className:`mt-[4px] w-[fit-content] h-[30px] px-[12px] text-text1 text-[14px] leading-[22px] flex flex-row items-center bg-bg1 rounded-[15px]`,onClick:u,children:W(`span`,{children:a(`replyDetail.reply`)})})]})]})}function le({comment:e,information:t,contentType:a,visible:c,onClose:u,onReplyComment:d,onReplyAdded:f,onRequireLogin:p}){let h=K(`components.biz.business.comment`),g=V(null),[y,b]=H(()=>F({})),[x,C]=H(!1),{userInfo:w,userId:T}=s(),{followIds:E,setFollowIds:D}=o(),k=w?.userId||w?.user_id||T||``,A=w?.name||w?.nick_name||w?.nickname||w?.user_name||``,j=w?.avatar||w?.avatar_url||``,M=V({commentId:``,userId:``});function N(e){if(!e)return``;if(Array.isArray(e))return String(e[0]||``);if(typeof e==`object`){if(Object.prototype.hasOwnProperty.call(e,`comment_id`))return String(e.comment_id??``);if(Array.isArray(e.data))return String(e.data[0]||``)}return``}z(()=>{c&&(!k||!e.user_id||e.user_id!==`0`&&String(k)!==String(e.user_id)&&(M.current.commentId===e.id&&M.current.userId===k||(M.current={commentId:e.id,userId:k},(async()=>{let t=await m({app_id:0,follower_id:k,followee_ids:[e.user_id]});if(!t.success||!t.data?.is_following_map)return;let n=!!t.data.is_following_map[e.user_id];e.is_follow=n;let r=new Set(E);n?r.add(e.user_id):r.delete(e.user_id),D(Array.from(r))})())))},[e,E,k,D,c]);let P=R(e=>{b(e),setTimeout(()=>{C(!0),g.current?.focus()},10)},[]);function L(){ae(()=>{C(!1)})}async function B({text:e,imageVideoInfoList:t}){let n=e=>e.success?e:(I.error(e.message||h(`replyDetail.publishReplyFailed`)),{...e,toastHandled:!0});if(x){let r=await q({text:e,imageVideoInfoList:t});return C(!1),n(r)}else{let r=await U({text:e,imageVideoInfoList:t});return C(!1),n(r)}}async function U({text:e,imageVideoInfoList:t}){return await d?.({text:e,imageVideoInfoList:t,callback:r=>{let i=Q(e);if(!r||r===`0`)return;let a=F({id:r,user_id:k,user_name:A,avatar:j,text:e,created_at:n(),type:`4`,nine_grid_content_info:t,at_users:i});J?.(a)}})??{success:!0}}async function q({text:e,imageVideoInfoList:o}){if(!y?.id||y.id===`0`)return{success:!1,message:h(`replyDetail.invalidReplyTarget`)};let s=ee(o),c=r(e),u=a===`video`?1:2;try{let r=await l({content_id:t.id,content:i(e),medias:s,mentioned_users:c,parent_id:y.id,source_type:u},{revalidate:!1});if(r.code!==0)return{success:!1,message:r.message||h(`replyDetail.publishReplyFailed`)};let a=N(r.data);if(!a||a===`0`)return{success:!1,message:h(`replyDetail.publishReplyFailed`)};let d=F({id:a,user_id:k,user_name:A,avatar:j,text:e,created_at:n(),type:`4`,nine_grid_content_info:o,at_users:Q(e)});return d.parent_reply=y,J?.(d),f?.(),{success:!0}}catch(e){return console.error(`发布回复回复失败:`,e),{success:!1,message:h(`replyDetail.publishReplyFailed`)}}}let[J,Y]=H(null),X=R(e=>{Y(()=>e)},[]),Z=x?`回复@${y.user_name}`:``;function $(e){e||u()}return W(_,{open:c,onOpenChange:$,children:G(v,{showCloseButton:!1,className:`fixed left-0 right-0 bottom-0 top-[84px] z-[1000] h-auto w-full max-w-none translate-x-0 translate-y-0 rounded-none bg-bg2 p-0 text-text1 !flex !flex-col !gap-0`,children:[G(`div`,{className:`w-full h-[60px] bg-bg1 flex items-center justify-center relative`,children:[W(`button`,{type:`button`,className:`w-[48px] focus-within:outline-none focus-within:border-none focus-within:ring-0 h-full flex items-center justify-center absolute left-0 top-0`,onClick:u,children:W(S,{className:`w-[16px] h-[16px] text-text1`})}),W(`span`,{className:`text-[18px] font-bold`,children:h(`replyDetail.commentDetail`)})]}),G(`div`,{className:`flex-1 min-h-0 w-full overflow-y-auto bg-bg2`,children:[W(re,{comment:e,updateFollow:t=>{e.is_follow=t},onRequireLogin:p}),W(se,{commentId:e.id,informationId:t.id,handleReplyComment:P,onReplyListUpdate:X}),W(O,{placeholder:Z,onInputBlur:L,onPublish:B,onRequireLogin:p,ref:g})]})]})})}export{le as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{pCommunityMoveCollectionContent as t}from"../../../../../service/generated/client.mjs";import{trackPageClick as n}from"../../../../../utils/tracking.mjs";import{Box as r}from"../../../../ui/box.mjs";import{Text as i}from"../../../../ui/text.mjs";import{useLoginModalStore as a}from"../../../../../store/modules/login-modal-store.mjs";import{useDeleteRequest as o}from"../../../../../hooks/query/use-query.mjs";import s from"../../../../common/interaction-animations.module.mjs";import c from"../../../../common/collection-popup/index.mjs";import l from"../../../../common/share-popup/share-popup.mjs";import{useInteractionAnimation as u}from"../../../../../hooks/use-interaction-animation.mjs";import{useContentOperate as ee}from"../../../../../hooks/use-content-operate.mjs";import te from"../../../../../assets/icons/detail/check-ok.mjs";import{useCallback as d,useEffect as f,useMemo as p,useRef as m,useState as h}from"react";import{jsx as g,jsxs as _}from"react/jsx-runtime";import{toast as v}from"sonner";import{usePathname as y,useSearchParams as b}from"next/navigation";import{useTranslations as x}from"next-intl";function S({className:e}){return g(`svg`,{viewBox:`0 0 24 21`,fill:`none`,className:e,children:g(`path`,{d:`M21.2121 6.89394C21.2121 4.25805 19.0753 2.12121 16.4394 2.12121C14.8261 2.12121 13.3991 2.92114 12.5336 4.15024C12.3349 4.4321 12.0115 4.59976 11.6667 4.59976C11.3218 4.59976 10.9984 4.4321 10.7997 4.15024C9.93421 2.92114 8.50725 2.12121 6.89394 2.12121C4.25804 2.12121 2.12121 4.25805 2.12121 6.89394C2.12121 9.40321 3.62133 11.9321 5.72562 14.0572C7.68391 16.0348 10.0088 17.5016 11.6667 18.137C13.3246 17.5016 15.6494 16.0348 17.6077 14.0572C19.712 11.9321 21.2121 9.40321 21.2121 6.89394ZM23.3333 6.89394C23.3333 10.2178 21.3863 13.2566 19.1158 15.5497C16.8347 17.8533 14.0447 19.5915 12.0012 20.2706C11.7841 20.3428 11.5493 20.3428 11.3321 20.2706C9.28858 19.5915 6.4986 17.8533 4.21757 15.5497C1.94701 13.2566 0 10.2178 0 6.89394C0 3.08654 3.08652 0 6.89394 0C8.74758 0 10.4287 0.733771 11.6667 1.92235C12.9047 0.733771 14.5858 0 16.4394 0C20.2468 0 23.3333 3.08654 23.3333 6.89394Z`,fill:`currentColor`})})}function C({className:e}){return g(`svg`,{viewBox:`0 0 24 21`,fill:`none`,className:e,children:g(`path`,{d:`M23.3333 6.89394C23.3333 10.2178 21.3863 13.2566 19.1158 15.5497C16.8347 17.8533 14.0447 19.5915 12.0012 20.2706C11.7841 20.3428 11.5493 20.3428 11.3321 20.2706C9.28858 19.5915 6.4986 17.8533 4.21757 15.5497C1.94701 13.2566 0 10.2178 0 6.89394C0 3.08654 3.08652 0 6.89394 0C8.74758 0 10.4287 0.733771 11.6667 1.92235C12.9047 0.733771 14.5858 0 16.4394 0C20.2468 0 23.3333 3.08654 23.3333 6.89394Z`,fill:`currentColor`})})}function w({className:e}){return g(`svg`,{viewBox:`0 0 24 23`,fill:`none`,className:e,children:g(`path`,{d:`M11.6636 2.65236e-06C12.0673 -0.000898131 12.437 0.227705 12.6165 0.589326L15.6522 6.70732L22.4258 7.69539C22.8246 7.75364 23.1564 8.03302 23.2813 8.41625C23.4062 8.79955 23.3021 9.22064 23.0141 9.50272L18.0882 14.3261L19.2585 21.0292C19.3281 21.4283 19.1639 21.8323 18.836 22.0701C18.5077 22.3079 18.072 22.3385 17.7143 22.1478L11.6657 18.9226L5.61917 22.1478C5.26131 22.3386 4.82579 22.3082 4.49748 22.0701C4.16923 21.832 4.00582 21.4276 4.07595 21.0282L5.25356 14.3271L0.319396 9.50376C0.0308898 9.2217 -0.0728394 8.79987 0.0521809 8.41625C0.177201 8.03266 0.509448 7.7533 0.90872 7.69539L7.71753 6.70732L10.7139 0.593469L10.7884 0.464005C10.9835 0.177012 11.3103 0.000910321 11.6636 2.65236e-06ZM9.37675 8.14386C9.22265 8.45841 8.92279 8.6767 8.57614 8.72697L3.33644 9.48615L7.1365 13.2013C7.38683 13.446 7.50059 13.799 7.43996 14.1438L6.54096 19.2509L11.1675 16.7859L11.2866 16.731C11.5714 16.6219 11.8921 16.6405 12.1649 16.7859L16.7946 19.253L15.9028 14.1427C15.8428 13.7988 15.9559 13.4467 16.2052 13.2023L20.0001 9.48511L14.7967 8.72697C14.4525 8.67672 14.155 8.46057 14.0002 8.14904L11.6719 3.45827L9.37675 8.14386Z`,fill:`currentColor`})})}function T({className:e}){return g(`svg`,{viewBox:`0 0 24 23`,fill:`none`,className:e,children:g(`path`,{d:`M11.6636 2.65236e-06C12.0673 -0.000898131 12.437 0.227705 12.6165 0.589326L15.6522 6.70732L22.4258 7.69539C22.8246 7.75364 23.1564 8.03302 23.2813 8.41625C23.4062 8.79955 23.3021 9.22064 23.0141 9.50272L18.0882 14.3261L19.2585 21.0292C19.3281 21.4283 19.1639 21.8323 18.836 22.0701C18.5077 22.3079 18.072 22.3385 17.7143 22.1478L11.6657 18.9226L5.61917 22.1478C5.26131 22.3386 4.82579 22.3082 4.49748 22.0701C4.16923 21.832 4.00582 21.4276 4.07595 21.0282L5.25356 14.3271L0.319396 9.50376C0.0308898 9.2217 -0.0728394 8.79987 0.0521809 8.41625C0.177201 8.03266 0.509448 7.7533 0.90872 7.69539L7.71753 6.70732L10.7139 0.593469L10.7884 0.464005C10.9835 0.177012 11.3103 0.000910321 11.6636 2.65236e-06Z`,fill:`currentColor`})})}function E({className:e}){return g(`svg`,{viewBox:`0 0 24 24`,fill:`none`,className:e,children:g(`path`,{d:`M11.7968 0.0846035C12.212 -0.0873746 12.69 0.00771373 13.0078 0.325488L23.0077 10.3254C23.22 10.5377 23.3375 10.8271 23.3332 11.1273C23.3288 11.4272 23.2029 11.7123 22.9849 11.9183L12.985 21.3627C12.6625 21.6673 12.1901 21.7509 11.7827 21.5754C11.3753 21.3998 11.1111 20.9991 11.1111 20.5554V15.6216C8.22953 15.9648 6.08879 17.6095 4.58982 19.3391C3.74967 20.3085 3.13167 21.2821 2.7246 22.0148C2.52173 22.38 2.37311 22.6823 2.27646 22.8894C2.22828 22.9927 2.19344 23.0722 2.17121 23.1238C2.16011 23.1495 2.15201 23.169 2.14734 23.1802C2.1451 23.1856 2.14372 23.1893 2.143 23.191C1.94502 23.6852 1.42342 23.9699 0.900603 23.8692C0.377728 23.7684 0 23.3102 0 22.7776C0 17.9877 0.696606 13.8374 2.60632 10.8582C4.41013 8.04448 7.21019 6.40446 11.1111 6.14686V1.11107C11.1111 0.661725 11.3817 0.256615 11.7968 0.0846035ZM13.3333 7.22216C13.3333 7.8358 12.8358 8.33326 12.2222 8.33326C8.37436 8.33326 5.97849 9.71592 4.47697 12.0583C3.44269 13.6719 2.79177 15.8074 2.46852 18.4168C2.60946 18.2401 2.75584 18.061 2.91014 17.8829C4.8356 15.6613 7.89407 13.3332 12.2222 13.3332C12.8358 13.3332 13.3333 13.8307 13.3333 14.4443V17.9773L20.6282 11.0882L13.3333 3.79335V7.22216Z`,fill:`currentColor`})})}function D({mode:D=`renderer`,information:k,onUpdate:A}){let j=D===`editor`||!k?.id||k.id.startsWith(`preview-`),M=`${y()}?${b()?.toString()||``}`,N=m(M),P=x(`components.biz.business.detail`),F=u(),[I,L]=h(!1),[R,z]=h(!1),B=m(0),V=m(0),H=e(e=>e.userId),U=e(e=>e.isLogin),W=o();f(()=>{N.current!==M&&(l.clear(),N.current=M)},[M]),f(()=>()=>{l.clear()},[]);let G=d(()=>{H&&(W([`user-profile`,`mine`,H,`user-like-video`]),W([`user-profile`,`mine`,H,`user-like-post`]),W([`user-profile`,`mine`,H,`user-collect-video`,H]),W([`user-profile`,`mine`,H,`user-collect-post`,H]))},[W,H]),{likeAnimation:K,handleLikeOperate:q,handleDefaultCollectionOperate:J,handleShareOperate:Y}=ee({id:k.id,isLike:k.like||!1,isDislike:k.dislike||!1,isCollect:k.collect||!1,likeCnt:O(k.static?.like_cnt),dislikeCnt:O(k.static?.dislike_cnt),contentType:1,prefetchDefaultCollection:!j,animationClasses:{like:s.likeShakeAnimation,dislike:s.dislikeShakeAnimation}}),X=d(e=>{A?.({...e})},[A]),re=d(async()=>{if(I)return;if(!U){a.getState().open();return}let e=Date.now();if(e-B.current<300)return;B.current=e,n(`page_video_detail`,`详情页`,null,`detail_like`,{object_id:k.id}),L(!0);let t=k.like||!1,r=k.dislike||!1,i=O(k.static?.like_cnt),o=O(k.static?.dislike_cnt),s=!t,c=Math.max(0,i+(s?1:-1)),l=s?!1:r,u=s&&r?Math.max(0,o-1):o;X({like:s,dislike:l,static:{...k.static,like_cnt:c,dislike_cnt:u}});try{let e=await q();if(!e){X({like:t,dislike:r,static:{...k.static,like_cnt:i,dislike_cnt:o}});return}X({like:e.isLike,dislike:e.isDislike??l,static:{...k.static,like_cnt:e.likeCnt,dislike_cnt:e.dislikeCnt??u}}),G(),v.success(e.isLike?P(`detailOperate.likeSuccess`):P(`detailOperate.unlikeSuccess`)),window.sensors?.track?.(`detail_like_click`,{object_id:k.id,action:e.isLike?`点赞`:`取消点赞`,like_count:e.likeCnt})}catch(e){console.error(`点赞操作失败:`,e),v.error(P(`detailOperate.likeFailed`))}finally{L(!1)}},[q,k,G,I,U,P,X]),Z=p(()=>k.id,[k.id]),ie=d(()=>{n(`page_video_detail`,`详情页`,null,`detail_share`,{object_id:k.id}),Y(({isCollect:e})=>{X({collect:e})},Z)},[Y,Z,X,k.id]),Q=d(()=>{c.show({mode:`select`,onCollect:async e=>{try{let n=await t({new_collection_id:e,content_id:k.id});if(n.code!==0)throw Error(n.message||P(`detailOperate.collectFailed`));X({collect:!0}),G(),v.success(P(`detailOperate.modifyCollectionSuccess`))}catch(e){console.error(`修改收藏夹失败:`,e),v.error(P(`detailOperate.collectFailed`))}}})},[k.id,G,P,X]),$=d(e=>{let t=e||P(`detailOperate.defaultCollection`);v.custom(e=>_(`div`,{className:`flex items-center justify-between gap-[16px] px-[16px] py-[12px] rounded-[12px] bg-black text-white shadow-lg min-w-[280px]`,children:[_(`div`,{className:`flex items-center gap-[10px]`,children:[g(`div`,{className:`w-[24px] h-[24px] rounded-full bg-white flex items-center justify-center`,children:g(te,{className:`w-[14px] h-[14px]`})}),_(`div`,{className:`flex items-center gap-[6px]`,children:[g(`span`,{className:`text-[14px] leading-[20px]`,children:P(`detailOperate.collectAdded`)}),g(`span`,{className:`text-[14px] leading-[20px] font-semibold`,children:t})]})]}),g(`button`,{type:`button`,className:`text-[14px] text-theme5 font-semibold`,onClick:()=>{v.dismiss(e),Q()},children:P(`detailOperate.modifyCollection`)})]}))},[Q,P]),ae=d(async()=>{if(R)return;if(!U){a.getState().open();return}let e=Date.now();if(e-V.current<300)return;V.current=e,n(`page_video_detail`,`详情页`,null,`detail_collect`,{object_id:k.id});let t=k.collect||!1,r=!t;z(!0),X({collect:r}),r&&F.trigger(s.likeShakeAnimation),window.sensors?.track?.(`detail_fav_click`,{object_id:k.id,action:t?`取消收藏`:`收藏`});try{let e=await J({currentCollect:t,onUpdate:({isCollect:e})=>{X({collect:e})}});if(!e?.success){X({collect:t}),v.error(e?.message||P(`detailOperate.collectFailed`));return}X({collect:e.isCollect??r}),G(),window.sensors?.track?.(`detail_fav_click`,{object_id:k.id,action:e.isCollect?`收藏`:`取消收藏`}),!t&&e.isCollect&&$(e.collectionTitle),t&&e.isCollect===!1&&v.success(P(`detailOperate.uncollectSuccess`))}catch(e){X({collect:t}),console.error(`收藏操作失败:`,e),v.error(e?.message||P(`detailOperate.collectFailed`))}finally{z(!1)}},[F,J,k.id,k.collect,G,R,U,$,P,X]);return _(r,{className:`mt-[16px] flex h-[52px] w-full items-center justify-between px-[48px] ${j?`pointer-events-none`:``}`,children:[_(r,{className:`flex h-full w-[43px] flex-col items-center justify-center gap-[2px] ${I?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:re,children:[k.like?g(C,{className:`size-[28px] text-[#FF5D8F] ${K.animationClass}`}):g(S,{className:`size-[28px] text-white`}),g(i,{className:`text-center text-[14px] leading-[22px] ${k.like?`text-[#FF5D8F]`:`text-white`}`,children:k.static?k.static.like_cnt===0?P(`detailOperate.like`):ne(k.static?.like_cnt):P(`detailOperate.like`)})]}),_(r,{className:`flex h-full w-[43px] flex-col items-center justify-center gap-[2px] ${R?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:ae,children:[k.collect?g(T,{className:`size-[28px] text-[#FFC039] ${F.animationClass}`}):g(w,{className:`size-[28px] text-white`}),g(i,{className:`text-center text-[14px] leading-[22px] text-white`,children:P(`detailOperate.collection`)})]}),_(r,{className:`flex h-full w-[43px] flex-col items-center justify-center gap-[2px] cursor-pointer`,onClick:ie,children:[g(E,{className:`size-[28px] text-white`}),g(i,{className:`text-center text-[14px] leading-[22px] text-white`,children:P(`detailOperate.share`)})]})]})}function ne(e){let t=Number(e||0);return Number.isNaN(t)||t<=0?`0`:t>=1e4?`${(t/1e4).toFixed(1)}w`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function O(e){if(e==null)return 0;if(typeof e==`number`)return e;let t=Number(e);return Number.isNaN(t)?0:t}export{D as DetailOperate};
|
|
2
|
+
"use client";import{formatCompactCount as e}from"../../../../../utils/common.mjs";import{useUserStore as t}from"../../../../../store/modules/user-store.mjs";import{pCommunityMoveCollectionContent as n}from"../../../../../service/generated/client.mjs";import{trackPageClick as r}from"../../../../../utils/tracking.mjs";import{Box as i}from"../../../../ui/box.mjs";import{Text as a}from"../../../../ui/text.mjs";import{useLoginModalStore as o}from"../../../../../store/modules/login-modal-store.mjs";import{useDeleteRequest as s}from"../../../../../hooks/query/use-query.mjs";import c from"../../../../common/interaction-animations.module.mjs";import l from"../../../../common/collection-popup/index.mjs";import u from"../../../../common/share-popup/share-popup.mjs";import{useInteractionAnimation as ee}from"../../../../../hooks/use-interaction-animation.mjs";import{useContentOperate as d}from"../../../../../hooks/use-content-operate.mjs";import te from"../../../../../assets/icons/detail/check-ok.mjs";import{toast as f}from"sonner";import{useCallback as p,useEffect as m,useMemo as h,useRef as g,useState as _}from"react";import{usePathname as v,useSearchParams as ne}from"next/navigation";import{jsx as y,jsxs as b}from"react/jsx-runtime";import{useTranslations as x}from"next-intl";function re({className:e}){return y(`svg`,{viewBox:`0 0 24 21`,fill:`none`,className:e,children:y(`path`,{d:`M21.2121 6.89394C21.2121 4.25805 19.0753 2.12121 16.4394 2.12121C14.8261 2.12121 13.3991 2.92114 12.5336 4.15024C12.3349 4.4321 12.0115 4.59976 11.6667 4.59976C11.3218 4.59976 10.9984 4.4321 10.7997 4.15024C9.93421 2.92114 8.50725 2.12121 6.89394 2.12121C4.25804 2.12121 2.12121 4.25805 2.12121 6.89394C2.12121 9.40321 3.62133 11.9321 5.72562 14.0572C7.68391 16.0348 10.0088 17.5016 11.6667 18.137C13.3246 17.5016 15.6494 16.0348 17.6077 14.0572C19.712 11.9321 21.2121 9.40321 21.2121 6.89394ZM23.3333 6.89394C23.3333 10.2178 21.3863 13.2566 19.1158 15.5497C16.8347 17.8533 14.0447 19.5915 12.0012 20.2706C11.7841 20.3428 11.5493 20.3428 11.3321 20.2706C9.28858 19.5915 6.4986 17.8533 4.21757 15.5497C1.94701 13.2566 0 10.2178 0 6.89394C0 3.08654 3.08652 0 6.89394 0C8.74758 0 10.4287 0.733771 11.6667 1.92235C12.9047 0.733771 14.5858 0 16.4394 0C20.2468 0 23.3333 3.08654 23.3333 6.89394Z`,fill:`currentColor`})})}function ie({className:e}){return y(`svg`,{viewBox:`0 0 24 21`,fill:`none`,className:e,children:y(`path`,{d:`M23.3333 6.89394C23.3333 10.2178 21.3863 13.2566 19.1158 15.5497C16.8347 17.8533 14.0447 19.5915 12.0012 20.2706C11.7841 20.3428 11.5493 20.3428 11.3321 20.2706C9.28858 19.5915 6.4986 17.8533 4.21757 15.5497C1.94701 13.2566 0 10.2178 0 6.89394C0 3.08654 3.08652 0 6.89394 0C8.74758 0 10.4287 0.733771 11.6667 1.92235C12.9047 0.733771 14.5858 0 16.4394 0C20.2468 0 23.3333 3.08654 23.3333 6.89394Z`,fill:`currentColor`})})}function ae({className:e}){return y(`svg`,{viewBox:`0 0 24 23`,fill:`none`,className:e,children:y(`path`,{d:`M11.6636 2.65236e-06C12.0673 -0.000898131 12.437 0.227705 12.6165 0.589326L15.6522 6.70732L22.4258 7.69539C22.8246 7.75364 23.1564 8.03302 23.2813 8.41625C23.4062 8.79955 23.3021 9.22064 23.0141 9.50272L18.0882 14.3261L19.2585 21.0292C19.3281 21.4283 19.1639 21.8323 18.836 22.0701C18.5077 22.3079 18.072 22.3385 17.7143 22.1478L11.6657 18.9226L5.61917 22.1478C5.26131 22.3386 4.82579 22.3082 4.49748 22.0701C4.16923 21.832 4.00582 21.4276 4.07595 21.0282L5.25356 14.3271L0.319396 9.50376C0.0308898 9.2217 -0.0728394 8.79987 0.0521809 8.41625C0.177201 8.03266 0.509448 7.7533 0.90872 7.69539L7.71753 6.70732L10.7139 0.593469L10.7884 0.464005C10.9835 0.177012 11.3103 0.000910321 11.6636 2.65236e-06ZM9.37675 8.14386C9.22265 8.45841 8.92279 8.6767 8.57614 8.72697L3.33644 9.48615L7.1365 13.2013C7.38683 13.446 7.50059 13.799 7.43996 14.1438L6.54096 19.2509L11.1675 16.7859L11.2866 16.731C11.5714 16.6219 11.8921 16.6405 12.1649 16.7859L16.7946 19.253L15.9028 14.1427C15.8428 13.7988 15.9559 13.4467 16.2052 13.2023L20.0001 9.48511L14.7967 8.72697C14.4525 8.67672 14.155 8.46057 14.0002 8.14904L11.6719 3.45827L9.37675 8.14386Z`,fill:`currentColor`})})}function oe({className:e}){return y(`svg`,{viewBox:`0 0 24 23`,fill:`none`,className:e,children:y(`path`,{d:`M11.6636 2.65236e-06C12.0673 -0.000898131 12.437 0.227705 12.6165 0.589326L15.6522 6.70732L22.4258 7.69539C22.8246 7.75364 23.1564 8.03302 23.2813 8.41625C23.4062 8.79955 23.3021 9.22064 23.0141 9.50272L18.0882 14.3261L19.2585 21.0292C19.3281 21.4283 19.1639 21.8323 18.836 22.0701C18.5077 22.3079 18.072 22.3385 17.7143 22.1478L11.6657 18.9226L5.61917 22.1478C5.26131 22.3386 4.82579 22.3082 4.49748 22.0701C4.16923 21.832 4.00582 21.4276 4.07595 21.0282L5.25356 14.3271L0.319396 9.50376C0.0308898 9.2217 -0.0728394 8.79987 0.0521809 8.41625C0.177201 8.03266 0.509448 7.7533 0.90872 7.69539L7.71753 6.70732L10.7139 0.593469L10.7884 0.464005C10.9835 0.177012 11.3103 0.000910321 11.6636 2.65236e-06Z`,fill:`currentColor`})})}function se({className:e}){return y(`svg`,{viewBox:`0 0 24 24`,fill:`none`,className:e,children:y(`path`,{d:`M11.7968 0.0846035C12.212 -0.0873746 12.69 0.00771373 13.0078 0.325488L23.0077 10.3254C23.22 10.5377 23.3375 10.8271 23.3332 11.1273C23.3288 11.4272 23.2029 11.7123 22.9849 11.9183L12.985 21.3627C12.6625 21.6673 12.1901 21.7509 11.7827 21.5754C11.3753 21.3998 11.1111 20.9991 11.1111 20.5554V15.6216C8.22953 15.9648 6.08879 17.6095 4.58982 19.3391C3.74967 20.3085 3.13167 21.2821 2.7246 22.0148C2.52173 22.38 2.37311 22.6823 2.27646 22.8894C2.22828 22.9927 2.19344 23.0722 2.17121 23.1238C2.16011 23.1495 2.15201 23.169 2.14734 23.1802C2.1451 23.1856 2.14372 23.1893 2.143 23.191C1.94502 23.6852 1.42342 23.9699 0.900603 23.8692C0.377728 23.7684 0 23.3102 0 22.7776C0 17.9877 0.696606 13.8374 2.60632 10.8582C4.41013 8.04448 7.21019 6.40446 11.1111 6.14686V1.11107C11.1111 0.661725 11.3817 0.256615 11.7968 0.0846035ZM13.3333 7.22216C13.3333 7.8358 12.8358 8.33326 12.2222 8.33326C8.37436 8.33326 5.97849 9.71592 4.47697 12.0583C3.44269 13.6719 2.79177 15.8074 2.46852 18.4168C2.60946 18.2401 2.75584 18.061 2.91014 17.8829C4.8356 15.6613 7.89407 13.3332 12.2222 13.3332C12.8358 13.3332 13.3333 13.8307 13.3333 14.4443V17.9773L20.6282 11.0882L13.3333 3.79335V7.22216Z`,fill:`currentColor`})})}function S({mode:S=`renderer`,information:E,onUpdate:D}){let O=S===`editor`||!E?.id||E.id.startsWith(`preview-`),k=`${v()}?${ne()?.toString()||``}`,A=g(k),j=x(`components.biz.business.detail`),M=ee(),N=h(()=>w(E),[E]),P=h(()=>T(E),[E]),[F,I]=_(!1),[L,R]=_(!1),z=g(0),B=g(0),V=t(e=>e.userId),H=t(e=>e.isLogin),U=s();m(()=>{A.current!==k&&(u.clear(),A.current=k)},[k]),m(()=>()=>{u.clear()},[]);let W=p(()=>{V&&(U([`user-profile`,`mine`,V,`user-like-video`]),U([`user-profile`,`mine`,V,`user-like-post`]),U([`user-profile`,`mine`,V,`user-collect-video`,V]),U([`user-profile`,`mine`,V,`user-collect-post`,V]))},[U,V]),{likeAnimation:G,handleLikeOperate:K,handleDefaultCollectionOperate:q,handleShareOperate:J}=d({id:E.id,isLike:E.like||!1,isDislike:E.dislike||!1,isCollect:!!E.collect||!1,likeCnt:w(E),dislikeCnt:C(E.static?.dislike_cnt),contentType:1,prefetchDefaultCollection:!O,animationClasses:{like:c.likeShakeAnimation,dislike:c.dislikeShakeAnimation}}),Y=p(e=>{D?.({...e})},[D]),X=p(async()=>{if(F)return;if(!H){o.getState().open();return}let e=Date.now();if(e-z.current<300)return;z.current=e,r(`page_video_detail`,`详情页`,null,`detail_like`,{object_id:E.id}),I(!0);let t=E.like||!1,n=E.dislike||!1,i=w(E),a=C(E.static?.dislike_cnt),s=!t,c=Math.max(0,i+(s?1:-1)),l=s?!1:n,u=s&&n?Math.max(0,a-1):a;Y({like:s,dislike:l,like_count:c,static:{...E.static,dislike_cnt:u}});try{let e=await K();if(!e){Y({like:t,dislike:n,like_count:i,static:{...E.static,dislike_cnt:a}});return}Y({like:e.isLike,dislike:e.isDislike??l,like_count:e.likeCnt,static:{...E.static,dislike_cnt:e.dislikeCnt??u}}),W(),f.success(e.isLike?j(`detailOperate.likeSuccess`):j(`detailOperate.unlikeSuccess`)),window.sensors?.track?.(`detail_like_click`,{object_id:E.id,action:e.isLike?`点赞`:`取消点赞`,like_count:e.likeCnt})}catch(e){console.error(`点赞操作失败:`,e),f.error(j(`detailOperate.likeFailed`))}finally{I(!1)}},[K,E,W,F,H,j,Y]),Z=h(()=>E.id,[E.id]),ce=p(()=>{r(`page_video_detail`,`详情页`,null,`detail_share`,{object_id:E.id}),J(({isCollect:e})=>{Y({collect:e})},Z)},[J,Z,Y,E.id]),Q=p(()=>{l.show({mode:`select`,onCollect:async e=>{try{let t=await n({new_collection_id:e,content_id:E.id});if(t.code!==0)throw Error(t.message||j(`detailOperate.collectFailed`));Y({collect:!0}),W(),f.success(j(`detailOperate.modifyCollectionSuccess`))}catch(e){console.error(`修改收藏夹失败:`,e),f.error(j(`detailOperate.collectFailed`))}}})},[E.id,W,j,Y]),$=p(e=>{let t=e||j(`detailOperate.defaultCollection`);f.custom(e=>b(`div`,{className:`flex items-center justify-between gap-[16px] px-[16px] py-[12px] rounded-[12px] bg-black text-white shadow-lg min-w-[280px]`,children:[b(`div`,{className:`flex items-center gap-[10px]`,children:[y(`div`,{className:`w-[24px] h-[24px] rounded-full bg-white flex items-center justify-center`,children:y(te,{className:`w-[14px] h-[14px]`})}),b(`div`,{className:`flex items-center gap-[6px]`,children:[y(`span`,{className:`text-[14px] leading-[20px]`,children:j(`detailOperate.collectAdded`)}),y(`span`,{className:`text-[14px] leading-[20px] font-semibold`,children:t})]})]}),y(`button`,{type:`button`,className:`text-[14px] text-theme5 font-semibold`,onClick:()=>{f.dismiss(e),Q()},children:j(`detailOperate.modifyCollection`)})]}))},[Q,j]),le=p(async()=>{if(L)return;if(!H){o.getState().open();return}let e=Date.now();if(e-B.current<300)return;B.current=e,r(`page_video_detail`,`详情页`,null,`detail_collect`,{object_id:E.id});let t=E.collect||!1,n=!t,i=T(E),a=Math.max(0,i+(n?1:-1));R(!0),Y({collect:n,collect_count:a}),n&&M.trigger(c.likeShakeAnimation),window.sensors?.track?.(`detail_fav_click`,{object_id:E.id,action:t?`取消收藏`:`收藏`});try{let e=await q({currentCollect:t,onUpdate:({isCollect:e})=>{Y({collect:e})}});if(!e?.success){Y({collect:t,collect_count:i}),f.error(e?.message||j(`detailOperate.collectFailed`));return}Y({collect:e.isCollect??n,collect_count:a}),W(),window.sensors?.track?.(`detail_fav_click`,{object_id:E.id,action:e.isCollect?`收藏`:`取消收藏`}),!t&&e.isCollect&&$(e.collectionTitle),t&&e.isCollect===!1&&f.success(j(`detailOperate.uncollectSuccess`))}catch(e){Y({collect:t,collect_count:i}),console.error(`收藏操作失败:`,e),f.error(e?.message||j(`detailOperate.collectFailed`))}finally{R(!1)}},[M,q,E,W,L,H,$,j,Y]);return b(i,{className:`mt-[16px] flex h-[52px] w-full items-center justify-between px-[48px] ${O?`pointer-events-none`:``}`,children:[b(i,{className:`flex h-full w-[43px] flex-col items-center justify-center gap-[2px] ${F?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:X,children:[E.like?y(ie,{className:`size-[28px] text-[#FF5D8F] ${G.animationClass}`}):y(re,{className:`size-[28px] text-white`}),y(a,{className:`text-center text-[14px] leading-[22px] ${E.like?`text-[#FF5D8F]`:`text-white`}`,children:N>0?e(N):j(`detailOperate.like`)})]}),b(i,{className:`flex h-full w-[43px] flex-col items-center justify-center gap-[2px] ${L?`opacity-50 cursor-not-allowed`:`cursor-pointer`}`,onClick:le,children:[E.collect?y(oe,{className:`size-[28px] text-[#FFC039] ${M.animationClass}`}):y(ae,{className:`size-[28px] text-white`}),y(a,{className:`text-center text-[14px] leading-[22px] ${E.collect?`text-[#FFC039]`:`text-white`}`,children:P>0?e(P):j(`detailOperate.collection`)})]}),b(i,{className:`flex h-full w-[43px] flex-col items-center justify-center gap-[2px] cursor-pointer`,onClick:ce,children:[y(se,{className:`size-[28px] text-white`}),y(a,{className:`text-center text-[14px] leading-[22px] text-white`,children:j(`detailOperate.share`)})]})]})}function C(e){if(e==null)return 0;if(typeof e==`number`)return e;let t=Number(e);return Number.isNaN(t)?0:t}function w(e){return C(e.like_count)}function T(e){return C(e.collect_count)}export{S as DetailOperate};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
const e=`/static/components-thumb/items_cover.png`,t=[{id:`tag-1`,name:`标签`,group:`类型`},{id:`tag-2`,name:`标签`,group:`类型`},{id:`tag-3`,name:`标签`,group:`类型`}],n=Array.from({length:6}).map((e,t)=>({id:`episode-${t+1}`,name:`第${t+1}集`,preview_m3u8_url:``,m3u8_url:``})),r={id:`preview-detail`,mid:`preview-detail`,name:`电影名称电影名称电影名称电影名称电影名称`,img_x:e,img_y:e,preview_images:[e],description:`简介文案,简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案。`,score:`9.6`,is_more_link:`y`,update_status:`1`,tags:t,links:n,content_type:0,play_count:123,episode_cnt:n.length,like:!1,dislike:!1,collect:!1,
|
|
2
|
+
const e=`/static/components-thumb/items_cover.png`,t=[{id:`tag-1`,name:`标签`,group:`类型`},{id:`tag-2`,name:`标签`,group:`类型`},{id:`tag-3`,name:`标签`,group:`类型`}],n=Array.from({length:6}).map((e,t)=>({id:`episode-${t+1}`,name:`第${t+1}集`,preview_m3u8_url:``,m3u8_url:``})),r={id:`preview-detail`,mid:`preview-detail`,name:`电影名称电影名称电影名称电影名称电影名称`,img_x:e,img_y:e,preview_images:[e],description:`简介文案,简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案简介文案。`,score:`9.6`,is_more_link:`y`,update_status:`1`,tags:t,links:n,content_type:0,play_count:123,episode_cnt:n.length,like:!1,dislike:!1,collect:!1,like_count:0,collect_count:0,static:{dislike_cnt:0}};function i(e=6){let t=Math.max(1,Math.floor(e));return Array.from({length:t}).map((e,t)=>({...r,id:`preview-recommend-${t+1}`,name:`猜你喜欢 ${t+1}`,play_count:8e3+t*873,img_type:t%3==1?`long`:`short`}))}export{i as buildEditorPreviewRecommendList,r as editorPreviewInformation};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{gContentGetVideoDetail as e}from"../../../../../service/generated/client.mjs";import{useRouter as t}from"../../../../../utils/use-compatible-router.mjs";import{buildVideoPlayerSrc as n}from"../../../../common/video-player/process-m3u8-cache.mjs";import{notifyBridgeEpisodeChanged as r}from"../../../../../utils/login-modal-bridge.mjs";import{useRequest as i}from"../../../../../hooks/query/use-query.mjs";import{useKeepAliveState as a}from"../../../../common/keep-scroll-position/index.mjs";import{createContext as o,use as s,useCallback as c,useEffect as l,useMemo as u}from"react";import{
|
|
2
|
+
"use client";import{gContentGetVideoDetail as e}from"../../../../../service/generated/client.mjs";import{useRouter as t}from"../../../../../utils/use-compatible-router.mjs";import{buildVideoPlayerSrc as n}from"../../../../common/video-player/process-m3u8-cache.mjs";import{notifyBridgeEpisodeChanged as r}from"../../../../../utils/login-modal-bridge.mjs";import{useRequest as i}from"../../../../../hooks/query/use-query.mjs";import{useKeepAliveState as a}from"../../../../common/keep-scroll-position/index.mjs";import{createContext as o,use as s,useCallback as c,useEffect as l,useMemo as u}from"react";import{useParams as d}from"next/navigation";import{jsx as f}from"react/jsx-runtime";const p=o(void 0),m=`funhub:video-detail-episode-sync`;function h(e,t){let n=String(e||``).split(`/`).filter(Boolean),r=n.findIndex(e=>e===`video`||e===`webview`);return r<0?!1:n[r+1]===t}function g(e){let t=Math.floor(Number(e)||1);return t>0?t:1}function _(e){typeof window>`u`||window.dispatchEvent(new CustomEvent(m,{detail:e}))}function v(e){return e.type===m&&e instanceof CustomEvent}function y(e,t){if(!(!e&&!t))return{information:e?.information??t?.information,currentSeriesNum:e?.currentSeriesNum??t?.currentSeriesNum,onEpisodeChange:e?.onEpisodeChange??t?.onEpisodeChange,onUpdateInformation:e?.onUpdateInformation??t?.onUpdateInformation,detailId:e?.detailId??t?.detailId,episodeIndex:e?.episodeIndex??t?.episodeIndex,resumeProgressSeconds:e?.resumeProgressSeconds??t?.resumeProgressSeconds,isShow:e?.isShow??t?.isShow,isWebView:e?.isWebView??t?.isWebView,isInformationLoading:e?.isInformationLoading??t?.isInformationLoading,isInformationResolved:e?.isInformationResolved??t?.isInformationResolved,playerRef:e?.playerRef??t?.playerRef}}function b({value:e,children:t}){let n=s(p);return f(p,{value:u(()=>y(n,e)??e,[n,e]),children:t})}function x(){let e=s(p),t=e!==void 0&&e.onEpisodeChange===void 0,n=S({enabled:e===void 0||e.onEpisodeChange===void 0||e.detailId===void 0||e.currentSeriesNum===void 0||e.episodeIndex===void 0||e.isInformationLoading===void 0||e.isInformationResolved===void 0,shouldRequestInformation:t||!e?.information});return u(()=>{let r=y(e,n);return r&&(e&&n&&t?{...r,information:n.information??r.information,currentSeriesNum:n.currentSeriesNum??r.currentSeriesNum,episodeIndex:n.episodeIndex??r.episodeIndex,onEpisodeChange:n.onEpisodeChange??r.onEpisodeChange,isInformationLoading:n.isInformationLoading??r.isInformationLoading,isInformationResolved:n.isInformationResolved??r.isInformationResolved}:r)},[e,n,t])}function S(o){let{enabled:s,shouldRequestInformation:f}=o,p=d(),y=t(),b=p.level,x=Array.isArray(b)?b:typeof b==`string`?[b]:[],S=x[0]||``,C=x.findIndex(e=>e===`episode`),w=C>=0?x[C+1]:x[2],T=Math.max(1,Number(w)||1),[E,D]=a(`video-detail-material-series-num-${S}`,T);l(()=>{D(T)},[T,D]),l(()=>{if(!S||typeof window>`u`)return;let e=e=>{if(!v(e))return;let t=e.detail;if(!t||t.detailId!==S)return;let n=g(t.seriesNum);D(e=>e===n?e:n)};return window.addEventListener(m,e),()=>{window.removeEventListener(m,e)}},[S,D]);let O=c(e=>{if(!S)return;let t=g(e);D(t),_({detailId:S,seriesNum:t})},[S,D]),k=Math.max(1,Number(E)||1),A=Math.max(0,k-1),j=x[1]||``,M=typeof window<`u`&&window.isWebView===!0,{data:N,isPending:P,isFetching:F,isError:I,isSuccess:L}=i([`video-detail`,S],async()=>S?await e({id:S}):null,{enabled:s&&f&&!!S}),R=u(()=>{let e=N?.data?.video;if(!(!e||typeof e!=`object`))return{...e,content_type:1,episode_cnt:e.links?.length||0}},[N?.data?.video]),z=c(e=>{let t=Math.max(1,Math.floor(Number(e)||1));if(!S||typeof window>`u`)return;let i=`/${M?`webview`:`video`}/${S}/${encodeURIComponent(j)}/episode/${t}`,{search:a,hash:o,pathname:s}=window.location,c=`${s}${a}${o}`,l=`${i}${a}${o}`,u=h(s,S);if(c!==l){if(M){let e=R?.links?.[Math.max(0,t-1)],i=n(String(e?.m3u8_url||e?.preview_m3u8_url||``).trim());r({poster:String(R?.img_y||R?.img_x||R?.preview_images?.[0]||``).trim(),src:i,title:String(R?.title||R?.name||``).trim(),contentId:S,episode:t}),k!==t&&O(t);return}u&&typeof window.history?.replaceState==`function`?(window.history.replaceState(window.history.state,``,l),O(t)):y.replace(l,{scroll:!1});return}k!==t&&O(t)},[k,S,R?.img_x,R?.img_y,R?.links,R?.name,R?.preview_images,R?.title,M,j,y,O]);if(l(()=>{let e=Array.isArray(R?.links)?R.links.length:0;e<=0||k<=e||z(1)},[k,R?.links,z]),s)return{information:R,currentSeriesNum:k,onEpisodeChange:z,detailId:S,episodeIndex:A,resumeProgressSeconds:0,isShow:!0,isWebView:M,isInformationLoading:f?!!S&&!R&&(P||F):!1,isInformationResolved:!S||!!R||!f||I||L}}export{b as VideoDetailMaterialRuntimeProvider,x as useVideoDetailMaterialRuntimeContext};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{useRequest as e}from"../../../../../hooks/query/use-query.mjs";import{batchQueryContentInteractions as t}from"../../../../../hooks/use-content-operate.mjs";import{DetailOperate as n}from"../shared/detail-operate.mjs";import{editorPreviewInformation as r}from"../shared/editor-preview.mjs";import{useVideoDetailMaterialRuntimeContext as i}from"../shared/runtime-context-provider.mjs";import{useCallback as a,useEffect as o,useRef as s,useState as c}from"react";import{jsx as l}from"react/jsx-runtime";function u({mode:u=`renderer`}){let d=i(),f=d?.information,p=d?.onUpdateInformation,m=u===`editor`,h=u===`renderer`,g=m,_=g?r:f,[v,y]=c(_),b=s(_),x=s(``),S=s(!1);o(()=>{y(_)},[_]);let C=p?_:v;o(()=>{b.current=C},[C]);let w=h&&!!_?.id,{data:T}=e([`video-detail-actions-interaction`,_?.id],async()=>_?.id?await t([_.id],1):null,{enabled:w,staleTime:0,refetchOnMount:`always`,refetchOnWindowFocus:!1}),E=a(e=>{if(!g){if(S.current=!0,p){p(e);return}y(t=>{if(!t)return t;let n=e.static?{...t.static||{},...e.static||{}}:t.static;return{...t,...e,static:n}})}},[p,g]);return o(()=>{if(S.current)return;let e=T?.interaction_list?.[0],t=b.current;if(!e||!t)return;let n=`${e.is_liked?1:0}-${e.is_disliked?1:0}-${e.is_collected?1:0}`;if(x.current===n)return;x.current=n;let r=e.is_liked||!1,i=e.is_disliked||!1,a=e.is_collected||!1,o=!!t.like,s=!!t.dislike,c=!!t.collect,l=t.
|
|
2
|
+
"use client";import{useRequest as e}from"../../../../../hooks/query/use-query.mjs";import{batchQueryContentInteractions as t}from"../../../../../hooks/use-content-operate.mjs";import{DetailOperate as n}from"../shared/detail-operate.mjs";import{editorPreviewInformation as r}from"../shared/editor-preview.mjs";import{useVideoDetailMaterialRuntimeContext as i}from"../shared/runtime-context-provider.mjs";import{useCallback as a,useEffect as o,useRef as s,useState as c}from"react";import{jsx as l}from"react/jsx-runtime";function u({mode:u=`renderer`}){let d=i(),f=d?.information,p=d?.onUpdateInformation,m=u===`editor`,h=u===`renderer`,g=m,_=g?r:f,[v,y]=c(_),b=s(_),x=s(``),S=s(!1);o(()=>{y(_)},[_]);let C=p?_:v;o(()=>{b.current=C},[C]);let w=h&&!!_?.id,{data:T}=e([`video-detail-actions-interaction`,_?.id],async()=>_?.id?await t([_.id],1):null,{enabled:w,staleTime:0,refetchOnMount:`always`,refetchOnWindowFocus:!1}),E=a(e=>{if(!g){if(S.current=!0,p){p(e);return}y(t=>{if(!t)return t;let n=e.static?{...t.static||{},...e.static||{}}:t.static;return{...t,...e,static:n}})}},[p,g]);return o(()=>{if(S.current)return;let e=T?.interaction_list?.[0],t=b.current;if(!e||!t)return;let n=`${e.is_liked?1:0}-${e.is_disliked?1:0}-${e.is_collected?1:0}`;if(x.current===n)return;x.current=n;let r=e.is_liked||!1,i=e.is_disliked||!1,a=e.is_collected||!1,o=!!t.like,s=!!t.dislike,c=!!t.collect,l=t.like_count,u=typeof l==`number`?l:Number(l||0),d=u;!r&&u>0?d=Math.max(0,u-1):o===r?r&&u===0&&(d=1):d=Math.max(0,u+(r?1:-1));let f=d!==u;o===r&&s===i&&c===a&&!f||E({like:r,dislike:i,collect:a,...f?{like_count:d}:{}})},[E,T]),C?l(`div`,{className:g?`pointer-events-none`:void 0,children:l(n,{mode:u,information:C,onUpdate:E})}):null}export{u as VideoDetailActionsClient};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
2
|
import { InferSchemaProps } from "../../../../../utils/schema/schema.mjs";
|
|
3
3
|
import "../../../../../utils.mjs";
|
|
4
|
-
import { ReactNode } from "react";
|
|
5
4
|
import * as zod from "zod";
|
|
5
|
+
import { ReactNode } from "react";
|
|
6
6
|
import * as zod_v4_core0 from "zod/v4/core";
|
|
7
7
|
|
|
8
8
|
//#region components/biz/business/detail/video-detail-player/schema.d.ts
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{gContentGetGuessYouLikeVideos as
|
|
2
|
+
"use client";import{formatCompactCount as e}from"../../../../../utils/common.mjs";import{gContentGetGuessYouLikeVideos as t,pContentBatchGetVideoDetail as n}from"../../../../../service/generated/client.mjs";import{useRequest as r}from"../../../../../hooks/query/use-query.mjs";import{useKeepAliveState as i}from"../../../../common/keep-scroll-position/index.mjs";import{normalizeRecommendBadgeUrl as a}from"../../../../common/list/waterfall-recommend/recommend-badge-style.mjs";import{useCardDecoration as o}from"../../../../../hooks/use-card-decoration.mjs";import{buildEditorPreviewRecommendList as s}from"../shared/editor-preview.mjs";import{useVideoDetailMaterialRuntimeContext as ee}from"../shared/runtime-context-provider.mjs";import{applyPlayCountDelta as c,clampColumns as l,limitRecommendDisplayList as te,mergeManualAndPool as ne,normalizeRecommendRuntimeProps as re,resolveRows as ie}from"./utils.mjs";import{useCallback as ae,useEffect as u,useMemo as d,useState as oe}from"react";function f({rows:f,columns:p,smartTagEnabled:m,smartTagIds:h,title:ge,showPlayCount:v,playCountDelta:y,showEpisode:_e,enableInfinite:ve,items:ye,mode:b=`renderer`}){let x=ee()?.detailId||``,be=b===`editor`,S=be,{getVerticalHoCoverImageUrl:C,getTitleText:w}=o(),T=d(()=>re({smartTagEnabled:m,smartTagIds:h,enableInfinite:ve,items:ye}),[ve,ye,m,h]),E=T.smartTagEnabled,D=T.smartTagIds,O=d(()=>T.items??[],[T.items]),k=T.enableInfinite&&!be,A=!E,j=k&&E&&!S,xe=ie(f,k),M=l(p),N=xe*M,P=Math.max(1,N),F=d(()=>[`video-detail-recommend`,x||`unknown`,P,D.join(`,`)].join(`:`),[x,P,D]),[Se,I]=i(`${F}:pool`,[]),[L,R]=i(`${F}:cursor`,void 0),[z,B]=i(`${F}:has-more`,!1),[V,H]=oe(!1),U=d(()=>s(N),[N]),{data:W,isFetching:Ce,isPending:we}=r([`video-detail-recommend`,x,j?`paged`:`all`,P,D.join(`,`)],async()=>S?null:await t({cursor:L,page_size:P,tags:D}),{enabled:!S&&E,refetchOnMount:`always`}),G=d(()=>S?U:se(W?.data?.videos),[W?.data?.videos,U,S]);u(()=>{if(!j){H(!1),R(void 0);return}I(e=>{if(!G.length)return e;if(!e.length)return G;let t=[...G],n=new Set(G.map(e=>e.id).filter(Boolean));return e.forEach(e=>{(!e.id||!n.has(e.id))&&(t.push(e),e.id&&n.add(e.id))}),t});let e=ue(W?.data);R(e);let t=e?!0:le(W?.data?.videos,P);B(e=>e||t),H(!1)},[W?.data,G,P,B,R,I,j]);let K=j?Se:G,q=d(()=>A?Array.from(new Set(O.map(e=>g(e.contentId)).filter(Boolean))):[],[O,A]),{data:Te,isFetching:Ee,isPending:De}=r([`video-detail-recommend-manual-details`,q.join(`,`)],async()=>{if(!q.length)return[];let e=await n({ids:q});return(Array.isArray(e.data?.videos)?e.data.videos:[]).map(e=>ce(e))},{enabled:q.length>0,refetchOnMount:`always`}),Oe=d(()=>A?new Set(O.map(e=>g(e.contentId)).filter(Boolean)):new Set,[O,A]),ke=d(()=>S?K:K.filter(e=>!Oe.has(e.id)),[K,S,Oe]),J=d(()=>{if(!A||!O.length)return[];let e=new Map;return K.forEach(t=>{let n=g(t.id);n&&e.set(n,t)}),(Te||[]).forEach(t=>{let n=g(t.id);n&&e.set(n,t)}),O.map((t,n)=>{let r=S?U[n%Math.max(1,U.length)]:pe(t,n),i=g(t.contentId),o=typeof t.coverUrl==`string`?t.coverUrl.trim():``,s=e.get(i)??{...r,id:i||r.id||`preview-manual-${n+1}`,name:r.name||`猜你喜欢 ${n+1}`,img_y:o||r.img_y,img_x:o||r.img_x},ee=t.titleMode===`custom`?t.title:w(s),c=t.coverMode===`content`?C(s)||o:o||C(s),l=a(t.badge_url);return{info:{...s,name:ee||s.name,img_y:c||s.img_y,img_x:c||s.img_x,badge_url:l||_(s)},config:{showPlayCount:t.showPlayCount,playCountDelta:t.playCountDelta,showEpisode:t.showEpisode}}}).filter(Boolean)},[U,K,w,C,S,Te,O,A]),Y=d(()=>ke.map(e=>({info:e})),[ke]),Ae=A&&O.length>0,je=d(()=>Ae?J:ne(J,Y,N),[Ae,J,N,Y]),Me=d(()=>{if(j||k){if(!J.length)return Y;let e=new Set(J.map(e=>e.info.id).filter(Boolean));return J.concat(Y.filter(t=>!e.has(t.info.id)))}return je},[je,J,Y,k,j]),X=d(()=>te(Me,N,k),[N,Me,k]),Z=z&&X.length>0?Math.max(0,X.length-4):-1,Q=Z>=0?`${F}:${Z}`:``,Ne=String(ge||``).trim(),$=ae(async()=>{if(!(!j||!z||V)){H(!0);try{let e=await t({cursor:L,page_size:P,tags:D}),n=Array.isArray(e.data?.videos)?e.data.videos:[],r=ue(e.data),i=se(n),a=0;I(e=>{let t=new Set(e.map(e=>e.id).filter(Boolean)),n=[...e];return i.forEach(e=>{(!e.id||!t.has(e.id))&&(n.push(e),e.id&&t.add(e.id))}),a=n.length-e.length,n}),R(r),B((r?!0:le(n,P))&&a>0)}catch(e){console.error(`猜你喜欢分页加载失败`,e),B(!1)}finally{H(!1)}}},[z,V,L,P,D,B,R,I,j]);u(()=>{if(!Q||!z||V||!j)return;let e=document.querySelector(`[data-detail-recommend-trigger="${Q}"]`);if(!(e instanceof HTMLElement))return;let t=new IntersectionObserver(e=>{e[0]?.isIntersecting&&!V&&$()});return t.observe(e),()=>{t.disconnect()}},[$,z,V,j,Q]);let Pe=!S&&(V||E&&(Ce||we)||q.length>0&&(Ee||De));return{uiItems:d(()=>X.map((t,n)=>{let r=v!==!1&&(t.config?.showPlayCount??!0),i=Number(t.config?.playCountDelta??y??0),a=t.config?.showEpisode??_e;return{sourceIndex:n,info:t.info,title:w(t.info),coverUrl:C(t.info),badgeImageUrl:_(t.info),detailPath:b===`renderer`?fe(t.info):``,playCountText:e(c(t.info.play_count||0,i)),videoInfoText:de(t.info),showPlayCount:r,showEpisode:a,score:me(t.info.score),cardKind:he(t.info)}}),[X,w,C,b,y,_e,v]),shouldShowLoading:Pe,isPreview:S,resolvedColumns:M,resolvedModuleTitle:Ne,triggerIndex:Z,triggerMarker:Q}}function p(e){let t=e.is_more_link?`y`:`n`;return{id:e.video_id||``,mid:``,name:e.name||``,cat_id:``,cat_name:``,status:`1`,status_text:``,create_time:``,content_type:e.content_type,episode_cnt:e.episode_count||0,show_at:e.show_at??``,position:``,img_type:e.img_type??``,img_x:e.img_x??``,img_y:e.img_y??``,img_width:``,img_height:``,play_count:e.play_count,preview_images:[],duration:String(e.duration??``),score:String(e.score??``),is_more_link:t,update_status:String(e.update_status??``),description:e.description??``,language:``,director:``,actor:``,area:``,issue_date:``,publisher:``,series:``,number:``,tags:[],source_tags:e.source_tags??``,source_actor:[],links:Array.isArray(e.episodes)?e.episodes.map(e=>({id:e.id??``,name:e.name??``,preview_m3u8_url:e.preview_m3u8_url??``,m3u8_url:e.m3u8_url??``})):[],money:``,up_user:``,source_username:``,task_id:``,file_status:``}}function se(e){return Array.isArray(e)?e.map(e=>p(e)):[]}function ce(e){let t=String(e?.id||e?.mid||e?.video_id||``),n=e?.is_more_link===`y`?`y`:`n`,r=Array.isArray(e?.links)?e.links.map(e=>({id:String(e?.id||``),name:String(e?.name||``),preview_m3u8_url:String(e?.preview_m3u8_url||``),m3u8_url:String(e?.m3u8_url||``)})):[],i=Array.isArray(e?.video_episodes)?e.video_episodes.length:0,a=Number(e?.episode_cnt||i||r.length||0);return{id:t,mid:String(e?.mid||t),name:String(e?.name||``),cat_id:String(e?.cat_id||``),cat_name:String(e?.cat_name||``),status:String(e?.status||`1`),status_text:String(e?.status_text||``),create_time:String(e?.create_time||``),content_type:e?.content_type,episode_cnt:Number.isFinite(a)?a:0,show_at:String(e?.show_at||``),position:String(e?.position||``),img_type:String(e?.img_type||``),img_x:String(e?.img_x||``),img_y:String(e?.img_y||``),img_width:String(e?.img_width||``),img_height:String(e?.img_height||``),play_count:Number(e?.play_count??e?.browse_count??0),preview_images:Array.isArray(e?.preview_images)?e.preview_images:[],duration:String(e?.duration||``),score:String(e?.score||``),is_more_link:n,update_status:String(e?.update_status||``),description:String(e?.description||``),language:String(e?.language||``),director:String(e?.director||``),actor:String(e?.actor||``),area:String(e?.area||``),issue_date:String(e?.issue_date||``),publisher:String(e?.publisher||``),series:String(e?.series||``),number:String(e?.number||``),tags:Array.isArray(e?.tags)?e.tags:[],source_tags:String(e?.source_tags||``),source_actor:Array.isArray(e?.source_actor)?e.source_actor:[],links:r,money:String(e?.money||``),up_user:String(e?.up_user||``),source_username:String(e?.source_username||``),task_id:String(e?.task_id||``),file_status:String(e?.file_status||``)}}function le(e,t){if(!Array.isArray(e)||e.length===0)return!1;let n=e[0];if(typeof n?.has_more==`boolean`)return n.has_more;let r=Number(n?.total??0);return Number.isFinite(r)&&r>0?r>t:e.length>=t}function ue(e){let t=e?.cursor;return typeof t==`string`&&t.trim()?t:void 0}function de(e){if(m(e)){let t=Number(e.episode_cnt||e.links?.length||0);return t>0?`全${t}集`:``}return h(Number(e.duration||0))}function m(e){return e.is_more_link===`y`}function h(e){if(!Number.isFinite(e)||e<=0)return``;let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`}function fe(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id}/${t}/episode/1`}function g(e){return typeof e==`string`?e.trim():``}function _(e){return a(e.badge_url)}function pe(e,t){let n=g(e.contentId)||`manual-${t+1}`,r=typeof e.coverUrl==`string`?e.coverUrl.trim():``,i=typeof e.title==`string`?e.title.trim():``,a=typeof e.description==`string`?e.description.trim():``;return{id:n,mid:n,name:i||`猜你喜欢 ${t+1}`,cat_id:``,cat_name:``,status:`1`,status_text:``,create_time:``,content_type:1,episode_cnt:0,show_at:``,position:``,img_type:``,img_x:r,img_y:r,img_width:``,img_height:``,play_count:0,preview_images:[],duration:``,score:``,is_more_link:`n`,update_status:``,description:a,language:``,director:``,actor:``,area:``,issue_date:``,publisher:``,series:``,number:``,tags:[],source_tags:``,source_actor:[],links:[],money:``,up_user:``,source_username:``,task_id:``,file_status:``}}function me(e){let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return t>10&&t<=100?t/10:Math.min(t,10)}function he(e){return String(e.img_type??``).trim().toLowerCase()===`long`?`short`:`tall`}export{f as useVideoDetailRecommendData};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{
|
|
2
|
+
"use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{gContentGetRecommendSearchList as t}from"../../../../../service/generated/client.mjs";import{Button as n}from"../../../../ui/button.mjs";import{Image as r}from"../../../../ui/image.mjs";import{Avatar as i,AvatarFallback as a,AvatarImage as o}from"../../../../ui/avatar.mjs";import{Box as s}from"../../../../ui/box.mjs";import{Text as c}from"../../../../ui/text.mjs";import{useLoginModalStore as l}from"../../../../../store/modules/login-modal-store.mjs";import{useRequest as u}from"../../../../../hooks/query/use-query.mjs";import d from"../../../../../assets/icons/common/header-menu.mjs";import f from"../../../../../assets/icons/common/header-search-icon.mjs";import{headerAvatarLogoSearchInspectorDefaultProps as p}from"./schema.mjs";import{useMemo as m}from"react";import{jsx as h,jsxs as g}from"react/jsx-runtime";import _ from"next/link";import{useShallow as v}from"zustand/react/shallow";function y(){let{isLogin:t,userInfo:r}=e(v(e=>({isLogin:e.isLogin,userInfo:e.userInfo}))),c=l(e=>e.open),u=h(s,{className:`relative flex h-[38px] w-[38px] items-center justify-center rounded-full bg-white/20`,children:h(s,{className:`flex h-[32px] w-[32px] items-center justify-center overflow-hidden rounded-full border-2 border-white/20 bg-[#2A1C18]`,children:g(i,{className:`h-full w-full`,children:[h(o,{src:r?.avatar_url||r?.avatar||void 0,alt:`用户头像`,className:`object-cover`}),h(a,{className:`bg-[radial-gradient(circle_at_35%_30%,#f4b1ad_0%,#915f72_42%,#3b2442_100%)]`})]})})});return t?h(_,{href:`/user/mine`,"aria-label":`打开个人主页`,className:`shrink-0`,children:u}):h(n,{onClick:c,"aria-label":`登录`,className:`m-0 inline-flex h-auto w-auto shrink-0 bg-transparent p-0 hover:bg-transparent`,children:u})}function b({isEditor:n}){let{userInfo:r}=e(v(e=>({userInfo:e.userInfo}))),i=r?.user_id||`guest`,{data:a}=u([`header-search-hot-keyword`,i],()=>t({user_id:i}),{enabled:!n}),o=m(()=>{let e=(a?.data?.recommend_list??[])[0]?.title;return typeof e==`string`&&e.trim()?e.trim():`请输入搜索关键字`},[a]);return h(_,{href:`/search`,"aria-label":`打开搜索页`,className:`flex h-[34px] flex-1 items-center justify-center overflow-hidden rounded-full bg-black/40 px-[14px] backdrop-blur-[2px]`,children:g(s,{className:`flex h-[20px] items-center gap-[4px] text-white/50`,children:[h(f,{className:`h-[20px] w-[20px] shrink-0`,"aria-hidden":!0}),h(c,{as:`span`,className:`block text-[14px] leading-none text-white/50`,children:o})]})})}function x({logoHref:e,logoSrc:t}){return h(_,{href:e,"aria-label":`打开功能菜单`,className:`flex h-[24px] w-[24px] shrink-0 items-center justify-center text-white`,children:t?h(s,{className:`relative h-[24px] w-[24px] overflow-hidden rounded-full`,children:h(r,{src:t,alt:`menu`,fill:!0,sizes:`24px`,className:`object-cover`})}):h(d,{className:`h-[24px] w-[24px]`})})}function S(e){let{mode:t=`renderer`,...n}=e,r=t===`editor`,{logoSrc:i,logoHref:a}={...p,...n};return g(s,{as:`header`,className:r?`flex items-center justify-between gap-[12px] px-[16px] pt-[8px] pb-[16px] pointer-events-none`:`flex items-center justify-between gap-[12px] px-[16px] pt-[8px] pb-[16px]`,children:[h(y,{}),h(b,{isEditor:r}),h(x,{logoSrc:i,logoHref:a})]})}export{S as HeaderAvatarLogoSearchClient};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{
|
|
2
|
+
"use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{Button as t}from"../../../../ui/button.mjs";import{Avatar as n,AvatarFallback as r,AvatarImage as i}from"../../../../ui/avatar.mjs";import{Box as a}from"../../../../ui/box.mjs";import{useLoginModalStore as o}from"../../../../../store/modules/login-modal-store.mjs";import{jsx as s,jsxs as c}from"react/jsx-runtime";import l from"next/link";import{useShallow as u}from"zustand/react/shallow";function d(){let{isLogin:d,userInfo:f}=e(u(e=>({isLogin:e.isLogin,userInfo:e.userInfo}))),p=o(e=>e.open),m=s(a,{className:`relative flex h-[38px] w-[38px] items-center justify-center rounded-full bg-white/20`,children:s(a,{className:`flex h-[32px] w-[32px] items-center justify-center overflow-hidden rounded-full border-2 border-white/20 bg-[#2A1C18]`,children:c(n,{className:`h-full w-full`,children:[s(i,{src:f?.avatar_url||f?.avatar||void 0,alt:`用户头像`,className:`object-cover`}),s(r,{className:`bg-[radial-gradient(circle_at_35%_30%,#f4b1ad_0%,#915f72_42%,#3b2442_100%)]`})]})})});return d?s(l,{href:`/user/mine`,"aria-label":`打开个人主页`,className:`shrink-0`,children:m}):s(t,{onClick:p,"aria-label":`登录`,className:`m-0 inline-flex h-auto w-auto shrink-0 bg-transparent p-0 hover:bg-transparent`,children:m})}export{d as UserAvatar};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{pContentGetNewstVideoList as e,pContentGetPopularVideoList as t}from"../../../../../service/generated/client.mjs";import{trackAdClick as n,trackAdImpression as r,trackAppPageView as i,trackPageClick as a,trackRecommendListClick as o}from"../../../../../utils/tracking.mjs";import{Image as s}from"../../../../ui/image.mjs";import{Box as c}from"../../../../ui/box.mjs";import{Text as l}from"../../../../ui/text.mjs";import u from"../../../../ui/loading.mjs";import ee from"../../../../ui/link.mjs";import{useGridFirstRowHeight as d,useWaterfallFirstRowHeight as te}from"../../../../../hooks/use-first-row-height.mjs";import{useMinDurationLoading as ne}from"../../../../../hooks/use-min-duration-loading.mjs";import re from"../../../../../assets/icons/common/right_arrow.mjs";import f from"../../../../../assets/icons/common/right_arrow_thin.mjs";import ie from"../../../../../assets/icons/detail/video_flag.mjs";import{isFeedAdItem as p}from"../../advertisement/feed-ad/index.mjs";import{RECOMMEND_BADGE_IMAGE_CLASS_NAME as m,RECOMMEND_TOP_LEFT_BADGE_WRAPPER_CLASS_NAME as ae,normalizeRecommendBadgeUrl as h}from"../../../../common/list/waterfall-recommend/recommend-badge-style.mjs";import{WATERFALL_SHORT_CARD_ASPECT_RATIO as g,WATERFALL_TALL_CARD_ASPECT_RATIO as oe,buildWaterfallRecommendLegacyDisplay as _}from"../../../../common/list/waterfall-recommend/waterfall-recommend-display.mjs";import{WaterfallRecommend as v}from"../../../../common/list/waterfall-recommend/waterfall-recommend.mjs";import{HOME_RECOMMEND_DEFAULT_GRID_COLUMNS as se,HOME_RECOMMEND_DEFAULT_GRID_ROWS as y,HOME_RECOMMEND_DEFAULT_PLAY_COUNT_DELTA as ce,HOME_RECOMMEND_DEFAULT_SHOW_EPISODE as le,HOME_RECOMMEND_DEFAULT_SHOW_PLAY_COUNT as ue,HOME_RECOMMEND_DEFAULT_TITLE as de,HOME_RECOMMEND_MAX_GRID_COLUMNS as fe,HOME_RECOMMEND_MAX_GRID_ROWS as pe}from"./home-recommend-default-config.mjs";import{buildHomeRecommendHeatText as b,resolveHomeRecommendBrowseCount as x}from"./home-recommend-play-count.mjs";import{HOME_RECOMMEND_CARD_CONFIG_FIELD as me}from"./home-recommend-preview.mjs";import{isHomeRecommendLatestSortRule as he}from"./home-recommend-smart-layout.mjs";import{limitPopularVideoPageItems as ge}from"./home-recommend-smart-tag.mjs";import{enrichHomeRecommendItemsWithVideoDetails as _e}from"./home-recommend-video-detail.mjs";import{useCallback as S,useEffect as C,useLayoutEffect as ve,useMemo as w,useRef as T,useState as E}from"react";import{Fragment as ye,jsx as D,jsxs as O}from"react/jsx-runtime";const be={backgroundImage:`var(--gradient-card-mask-medium)`},xe={},Se={list:[]},k=new Map,A=[];function Ce(e){if(e)return k.get(e)}function we(e,t){if(!e||(k.has(e)||A.push(e),k.set(e,{items:[...t.items],cursor:t.cursor}),A.length<=120))return;let n=A.shift();n&&k.delete(n)}function Te({variant:s,props:ie=xe,data:m=Se,mode:ae=`renderer`}){let h=ae===`editor`,{list:g,title:oe,cursor:_}=m,b=w(()=>Array.isArray(g)?g:[],[g]),x=w(()=>Array.isArray(m.icons)?m.icons:[],[m.icons]),{rows:me,columns:be,moreLink:k,title:A,showPlayCount:Te,playCountDelta:De,showEpisode:Oe,enableInfinite:Me,items:j,smartLayout:M}=ie,N=M?.enabled===!0,P=N&&he(M?.sortRule),F=Me===!0&&N,I=!h&&F&&b.length>=16,L=w(()=>N||!Array.isArray(j)?``:j.map(e=>String(e?.contentId||``).trim()).filter(Boolean).join(`,`),[N,j]),[R,Ne]=E(0),[Pe,z]=E(b),[Le,ze]=E(x),[Be,B]=E(()=>typeof _==`string`?_:void 0),[Ve,He]=E(!1),Ue=T(null),We=T(null),Ge=T(null),Ke=T([]),V=T({left:null,right:null}),qe=T(null),Je=T(!1),Ye=T(new Set),H=T(new Map),Xe=T(!1),U=T(``),{isLoading:Ze,show:Qe,hide:$e}=ne(600),et=Ae(me,y,pe),W=Ae(be,se,fe),G=F?16:s===`grid`?et*W:16,K=w(()=>[s,(()=>{if(!N||!M)return`manual:${L}`;if(P)return`smart:newest:${M.tagIds.join(`,`)}:${M.catIds.join(`,`)}`;let e=String(M.sortRule??``);return`smart:popular:${M.tagIds.join(`,`)}:${M.catIds.join(`,`)}:sr:${e}`})(),String(G)].join(`|`),[N,L,G,M,P,s]);C(()=>{z(b),ze(x),B(typeof _==`string`?_:void 0)},[_,x,b]);let tt=et*W,nt=h&&s===`grid`,q=nt?Pe.slice(0,tt):Pe,J=nt?Le.slice(0,tt):Le,rt=s===`waterfall`?6:4,it=q.length>0?Math.max(0,q.length-rt):-1,at=!!Be;C(()=>{if(h)return;let e=q.filter(e=>p(e)).map(e=>e.ad?.ad_code||``).filter(Boolean).join(`,`);e&&r({page_key:`home`,page_name:`首页`,ad_slot_key:`home_feed`,ad_slot_name:`信息流广告`,ad_id:e,ad_type:`feed`})},[q.length,h]);let ot=S(e=>{let t=e.ad?.ad_code||``;t&&n({page_key:`home`,page_name:`首页`,ad_slot_key:`home_feed`,ad_slot_name:`信息流广告`,ad_id:t,ad_type:`feed`})},[]),Y=A&&A.trim()||oe||de;C(()=>{if(h)return;let e=qe.current;if(!e)return;let t=new IntersectionObserver(e=>{e[0]?.isIntersecting&&!Je.current&&(Je.current=!0,i({page_key:`home`,page_name:`首页`,current_page_key:Y,current_page_name:Y}),t.disconnect())},{threshold:.5});return t.observe(e),()=>{t.disconnect()}},[h,Y,q.length]),C(()=>{let e=H.current;return()=>{e.forEach(e=>e.disconnect()),e.clear()}},[]);let st=S(e=>{let t=e.id||``;!t||Ye.current.has(t)||(Ye.current.add(t),i({page_key:`home`,page_name:`首页`,current_page_key:t,current_page_name:e.name||``}))},[]),ct=S((e,t)=>{if(p(e)){ot(e);return}o({page_key:`home`,page_name:`首页`,recommend_id:Y}),a(`home`,`首页`,t,e.name||e.id||``)},[ot,Y]);function lt(){o({page_key:`home`,page_name:`首页`,recommend_id:Y,recommend_trace_info:`更多`})}let X=Te??ue,Z=Number(De??ce),Q=Oe??le,ut=`flex-1 min-w-0 text-[18px] leading-[24px] font-medium line-clamp-1 text-text2`,dt=s===`grid`?f:h?re:f,ft=ke(k),pt=(s===`waterfall`||!F)&&!!ft,mt=pt?ft:``,ht=s===`grid`?`flex size-[24px] shrink-0 items-center justify-center ${h?`opacity-100`:`opacity-50`}`:`ml-[8px] flex size-[24px] shrink-0 items-center justify-center ${h?`opacity-100`:`opacity-50`}`,gt=`size-[16px] text-text1`,_t=d({enabled:!h&&s===`grid`,containerRef:We,firstRowItemRef:Ke,columns:W,itemsCount:q.length,deps:[s]}),vt=te({enabled:!h&&s===`waterfall`,containerRef:Ue,firstRowRef:V,deps:[s,q.length]}),yt=s===`grid`?_t:vt,bt=S(async()=>{if(h||U.current===K)return;let e=Ce(K);if(e){z(e.items),N&&B(e.cursor);return}if(N||L){U.current=K;try{if(Qe(),!N){if(!L)return;let e=await _e(b);z(e),we(K,{items:e});return}if(!M)return;let e=await t({page_size:G,tags:M.tagIds.length>0?M.tagIds:void 0,cat_ids:M.catIds.length>0?M.catIds:void 0},{cache:`no-store`}),n=ge(e.data?.videos,G),r=e.data?.cursor;z(n),B(r),we(K,{items:n,cursor:r})}catch(e){console.error(`推荐位刷新首屏失败(client)`,e)}finally{U.current===K&&(U.current=``),$e()}}},[$e,b,h,N,L,K,G,Qe,M]);C(()=>{bt()},[bt]);let xt=S(async()=>{let n=Be;if(!(!I||!n||Xe.current)){Xe.current=!0,He(!0);try{if(!M)return;let r={cursor:n,page_size:G,tags:M.tagIds.length>0?M.tagIds:void 0,cat_ids:M.catIds.length>0?M.catIds:void 0},i=P?await e(r):await t(r),a=Array.isArray(i.data?.videos)?i.data.videos:[],o=i.data?.cursor;a.length>0&&z(e=>e.concat(a)),B(e=>{if(!(!a.length||!o))return o===e?void 0:o})}catch(e){console.error(`推荐位加载下一页失败(client)`,e),B(void 0)}finally{Xe.current=!1,He(!1)}}},[Be,G,I,M,P]);C(()=>{let e=Ge.current;if(!e||!I||!at)return;let t=new IntersectionObserver(e=>{!e[0]?.isIntersecting||Ve||xt()},{root:null,threshold:0});return t.observe(e),()=>{t.disconnect()}},[xt,at,Ve,q.length,G,I,it]),ve(()=>{let e=Ue.current;if(!e||s!==`waterfall`)return;let t=()=>{let t=e.clientWidth||0;Ne(t>0?(t-15)/2:0)};t();let n=new ResizeObserver(t);return n.observe(e),()=>{n.disconnect()}},[s]);let $=w(()=>s===`waterfall`?Ie(q,J,R):{left:[],right:[]},[R,J,q,s]),St=w(()=>s===`waterfall`?{left:$.left.map(e=>Fe(e,X,Z,Q)),right:$.right.map(e=>Fe(e,X,Z,Q))}:{left:[],right:[]},[Z,Q,X,s,$.left,$.right]);if(C(()=>{s===`waterfall`&&($.left.length||(V.current.left=null),$.right.length||(V.current.right=null))},[s,$.left.length,$.right.length]),!q.length)return null;let Ct=!h&&Ze,wt=!h&&Ve,Tt=yt>0?yt/2:160;return O(c,{ref:qe,className:`w-full mt-[16px]`,children:[s===`grid`&&O(c,{className:`flex items-center justify-between pl-[16px] pr-0 mb-[16px]`,children:[D(l,{className:ut,children:Y}),pt&&D(ee,{href:mt,"aria-label":`更多`,className:ht,onClick:lt,children:D(dt,{className:gt})})]}),s===`grid`&&O(c,{ref:We,className:`relative flex w-full flex-wrap items-start gap-[16px] px-[16px]`,children:[q.map((e,t)=>{let n=J[t],r=je(e);return D(`div`,{ref:e=>{t===it&&(Ge.current=e),t<W&&(Ke.current[t]=e)},className:`w-[calc((100%-16px)/2)]`,children:D(Ee,{item:e,icon:n,index:t,showPlayCount:X&&(r?.showPlayCount??!0),playCountDelta:r?.playCountDelta??Z,showEpisode:r?.showEpisode??Q,widthStyle:{width:`100%`},onContentClick:ct,onContentView:st})},Re(e,t))}),Ct&&D(c,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),Ct&&D(c,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:Tt},"aria-hidden":!0,children:D(u,{size:`large`,showLabel:!1,className:`text-theme5`})})]}),s===`waterfall`&&D(v,{title:Y,moreHref:mt||void 0,onMoreClick:lt,moreIcon:pt?D(dt,{className:gt}):void 0,titleClassName:ut,moreLinkClassName:ht,columns:St,containerClassName:`relative flex w-full gap-[15px] px-[16px]`,getItemRef:({item:e,column:t,columnIndex:n})=>r=>{let{sourceIndex:i}=e;i===it&&(Ge.current=r),n===0&&(V.current[t]=r);let a=H.current.get(i);if(a&&(a.disconnect(),H.current.delete(i)),r&&!h){let e=q[i];if(e&&!p(e)){let t=new IntersectionObserver(n=>{n[0]?.isIntersecting&&(st(e),t.disconnect(),H.current.delete(i))},{threshold:.5});t.observe(r),H.current.set(i,t)}}},overlay:Ct?O(ye,{children:[D(c,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),D(c,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:Tt},"aria-hidden":!0,children:D(u,{size:`large`,showLabel:!1,className:`text-theme5`})})]}):void 0,onItemClick:e=>{let t=q[e.sourceIndex];t&&(p(t)?ot(t):(o({page_key:`home`,page_name:`首页`,recommend_id:Y}),a(`home`,`首页`,null,t.name||t.id||``)))}}),wt&&D(c,{className:`w-full flex justify-center py-[12px]`,children:D(u,{size:`medium`,showLabel:!1,className:`text-theme5`})})]})}function Ee({item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:s,onContentView:c}){return D(De,{item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:s,onContentView:c})}function De({item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:u,onContentView:d}){let te=T(null),ne=M(e),re=ne===`short`?g:oe,f=N(e,ne),v=e.name||e?.title||``,se=e.id?Oe(e):`#`,y=_({title:v,badgeImageUrl:z(e,t,n),episodeText:L(e,a),heatText:r?b(x(e),i):``,score:F(e.score)}),ce=h(y.topLeftBadgeImageUrl);return C(()=>{let t=te.current;if(!t||!d||p(e))return;let n=new IntersectionObserver(t=>{t[0]?.isIntersecting&&(d(e),n.disconnect())},{threshold:.5});return n.observe(t),()=>{n.disconnect()}},[e,d]),D(ee,{href:se,className:`block w-full`,onClick:t=>u?.(e,t),style:o,children:O(ye,{children:[O(c,{className:`relative w-full overflow-hidden rounded-[8px] bg-bg3`,style:{aspectRatio:re},children:[f&&D(s,{src:f,alt:v||`推荐封面`,fill:!0,objectFit:`cover`,className:`object-cover object-top`}),D(c,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:be,"aria-hidden":!0}),ce&&D(c,{className:ae,children:D(s,{src:ce,alt:`角标`,width:96,height:18,className:m})}),y.topRightScoreText&&D(l,{as:`span`,className:`absolute right-[8px] top-[8px] z-10 shrink-0 text-[14px] leading-[22px] font-semibold text-[#FFC24B]`,children:y.topRightScoreText}),O(c,{className:`absolute left-[8px] right-[8px] bottom-[8px] z-10 flex items-end justify-between gap-[8px]`,children:[D(c,{className:`flex min-w-0 items-center gap-[4px]`,children:y.bottomLeftHeatText&&O(ye,{children:[D(ie,{className:`h-[16px] w-[16px] shrink-0 text-white`}),D(l,{as:`span`,className:`min-w-0 truncate text-[14px] leading-[20px] text-white`,children:y.bottomLeftHeatText})]})}),y.bottomRightEpisodeText&&D(l,{as:`span`,className:`shrink-0 text-[14px] leading-[20px] text-white`,children:y.bottomRightEpisodeText})]})]}),D(c,{className:`mt-[8px] overflow-hidden`,children:D(l,{as:`h3`,className:`line-clamp-2 text-[16px] leading-[22px] text-[--color-text-white80]`,children:y.title})})]})})}function Oe(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id||``}/${t}/episode/1`}function ke(e){return e?e.trim():``}function Ae(e,t,n){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.min(n,Math.floor(r))}function je(e){return e[me]}function Me(e){return typeof e==`string`?e:``}function j(e){return typeof e==`string`?e.trim():``}function M(e){return j(e.img_type).toLowerCase()===`long`?`short`:`tall`}function N(e,t){return t===`short`?e.img_x||e.img_y||e?.coverUrl:e.img_y||e.img_x||e?.coverUrl}function P(e,t){return(e.tags?.map(e=>e.name).filter(Boolean).join(` · `)??``)||(t?I(e,!0):``)}function F(e){let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return t>10&&t<=100?t/10:Math.min(t,10)}function I(e,t){return t?R(e)||Pe(Number(e.duration||0)):``}function L(e,t){return t?R(e):``}function R(e){if(!Ne(e))return``;let t=e.update_status===`0`,n=Number(e.episode_cnt||e.links?.length||0);return n>0?`${t?`更新至`:`全`}${n}集`:``}function Ne(e){if(Number(e.type??0)===2)return!0;let t=Number(e.episode_cnt||e.links?.length||0);return Number.isFinite(t)&&t>1}function Pe(e){if(!Number.isFinite(e)||e<=0)return``;let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`}function z(e,t,n){return Me(e.badge_url)||Me(t?.material_url)||``}function Fe(e,t,n,r){let i=M(e.item),a=N(e.item,i),o=e.item.name||e.item?.title||``,s=e.item.id?Oe(e.item):`#`,c=z(e.item,e.icon,e.index),l=I(e.item,r),u=P(e.item,r),ee=t?b(x(e.item),n):``,d=F(e.item.score);return{key:Re(e.item,e.index),sourceIndex:e.index,href:s,cardKind:i,coverUrl:a,title:o,badgeImageUrl:c,episodeText:l,metaPrimaryText:u,heatText:ee,score:d}}function Ie(e,t,n){let r=[],i=[],a=n<=0,o=0,s=0;return e.forEach((e,c)=>{let l=t[c];if(a){c%2==0?r.push({item:e,icon:l,index:c}):i.push({item:e,icon:l,index:c});return}let u=Le(n,e);o<=s?(r.push({item:e,icon:l,index:c}),o+=u):(i.push({item:e,icon:l,index:c}),s+=u)}),{left:r,right:i}}function Le(e,t){return e?(M(t)===`tall`?216:142)+16:0}function Re(e,t){return e.id?`home-recommend-${e.id}-${t}`:`home-recommend-${t}`}export{Te as default};
|
|
2
|
+
"use client";import{pContentGetNewstVideoList as e,pContentGetPopularVideoList as t}from"../../../../../service/generated/client.mjs";import{trackAdClick as n,trackAdImpression as r,trackAppPageView as i,trackPageClick as a,trackRecommendListClick as o}from"../../../../../utils/tracking.mjs";import{Image as s}from"../../../../ui/image.mjs";import{Box as c}from"../../../../ui/box.mjs";import{Text as l}from"../../../../ui/text.mjs";import u from"../../../../ui/loading.mjs";import ee from"../../../../ui/link.mjs";import{useGridFirstRowHeight as d,useWaterfallFirstRowHeight as te}from"../../../../../hooks/use-first-row-height.mjs";import{useMinDurationLoading as ne}from"../../../../../hooks/use-min-duration-loading.mjs";import re from"../../../../../assets/icons/common/right_arrow.mjs";import ie from"../../../../../assets/icons/common/right_arrow_thin.mjs";import ae from"../../../../../assets/icons/detail/video_flag.mjs";import{isFeedAdItem as f}from"../../advertisement/feed-ad/index.mjs";import{RECOMMEND_BADGE_IMAGE_CLASS_NAME as p,RECOMMEND_TOP_LEFT_BADGE_WRAPPER_CLASS_NAME as oe,normalizeRecommendBadgeUrl as m}from"../../../../common/list/waterfall-recommend/recommend-badge-style.mjs";import{WATERFALL_TALL_CARD_ASPECT_RATIO as h,buildWaterfallRecommendLegacyDisplay as se}from"../../../../common/list/waterfall-recommend/waterfall-recommend-display.mjs";import{WaterfallRecommend as g}from"../../../../common/list/waterfall-recommend/waterfall-recommend.mjs";import{HOME_RECOMMEND_DEFAULT_GRID_COLUMNS as ce,HOME_RECOMMEND_DEFAULT_GRID_ROWS as le,HOME_RECOMMEND_DEFAULT_PLAY_COUNT_DELTA as ue,HOME_RECOMMEND_DEFAULT_SHOW_EPISODE as de,HOME_RECOMMEND_DEFAULT_SHOW_PLAY_COUNT as fe,HOME_RECOMMEND_DEFAULT_TITLE as pe,HOME_RECOMMEND_MAX_GRID_COLUMNS as me,HOME_RECOMMEND_MAX_GRID_ROWS as he}from"./home-recommend-default-config.mjs";import{buildHomeRecommendHeatText as _,resolveHomeRecommendBrowseCount as v}from"./home-recommend-play-count.mjs";import{HOME_RECOMMEND_CARD_CONFIG_FIELD as y}from"./home-recommend-preview.mjs";import{isHomeRecommendLatestSortRule as ge}from"./home-recommend-smart-layout.mjs";import{limitPopularVideoPageItems as _e}from"./home-recommend-smart-tag.mjs";import{enrichHomeRecommendItemsWithVideoDetails as ve}from"./home-recommend-video-detail.mjs";import{useCallback as b,useEffect as x,useLayoutEffect as ye,useMemo as S,useRef as C,useState as w}from"react";import{Fragment as be,jsx as T,jsxs as E}from"react/jsx-runtime";const xe={backgroundImage:`var(--gradient-card-mask-medium)`},Se={},Ce={list:[]},D=new Map,O=[];function we(e){if(e)return D.get(e)}function Te(e,t){if(!e||(D.has(e)||O.push(e),D.set(e,{items:[...t.items],cursor:t.cursor}),O.length<=120))return;let n=O.shift();n&&D.delete(n)}function Ee({variant:s,props:ae=Se,data:p=Ce,mode:oe=`renderer`}){let m=oe===`editor`,{list:h,title:se,cursor:_}=p,v=S(()=>Array.isArray(h)?h:[],[h]),y=S(()=>Array.isArray(p.icons)?p.icons:[],[p.icons]),{rows:xe,columns:D,moreLink:O,title:Ee,showPlayCount:Oe,playCountDelta:k,showEpisode:A,enableInfinite:Me,items:j,smartLayout:M}=ae,N=M?.enabled===!0,P=N&&ge(M?.sortRule),F=Me===!0&&N,I=!m&&F&&v.length>=16,L=S(()=>N||!Array.isArray(j)?``:j.map(e=>String(e?.contentId||``).trim()).filter(Boolean).join(`,`),[N,j]),[R,Ne]=w(0),[z,B]=w(v),[Le,Re]=w(y),[ze,V]=w(()=>typeof _==`string`?_:void 0),[Be,Ve]=w(!1),He=C(null),Ue=C(null),We=C(null),Ge=C([]),H=C({left:null,right:null}),Ke=C(null),qe=C(!1),Je=C(new Set),U=C(new Map),Ye=C(!1),W=C(``),{isLoading:Xe,show:Ze,hide:Qe}=ne(600),$e=Ae(xe,le,he),G=Ae(D,ce,me),K=F?16:s===`grid`?$e*G:16,q=S(()=>[s,(()=>{if(!N||!M)return`manual:${L}`;if(P)return`smart:newest:${M.tagIds.join(`,`)}:${M.catIds.join(`,`)}`;let e=String(M.sortRule??``);return`smart:popular:${M.tagIds.join(`,`)}:${M.catIds.join(`,`)}:sr:${e}`})(),String(K)].join(`|`),[N,L,K,M,P,s]);x(()=>{B(v),Re(y),V(typeof _==`string`?_:void 0)},[_,y,v]);let et=$e*G,tt=m&&s===`grid`,J=tt?z.slice(0,et):z,nt=tt?Le.slice(0,et):Le,rt=s===`waterfall`?6:4,it=J.length>0?Math.max(0,J.length-rt):-1,at=!!ze;x(()=>{if(m)return;let e=J.filter(e=>f(e)).map(e=>e.ad?.ad_code||``).filter(Boolean).join(`,`);e&&r({page_key:`home`,page_name:`首页`,ad_slot_key:`home_feed`,ad_slot_name:`信息流广告`,ad_id:e,ad_type:`feed`})},[J.length,m]);let ot=b(e=>{let t=e.ad?.ad_code||``;t&&n({page_key:`home`,page_name:`首页`,ad_slot_key:`home_feed`,ad_slot_name:`信息流广告`,ad_id:t,ad_type:`feed`})},[]),Y=Ee&&Ee.trim()||se||pe;x(()=>{if(m)return;let e=Ke.current;if(!e)return;let t=new IntersectionObserver(e=>{e[0]?.isIntersecting&&!qe.current&&(qe.current=!0,i({page_key:`home`,page_name:`首页`,current_page_key:Y,current_page_name:Y}),t.disconnect())},{threshold:.5});return t.observe(e),()=>{t.disconnect()}},[m,Y,J.length]),x(()=>{let e=U.current;return()=>{e.forEach(e=>e.disconnect()),e.clear()}},[]);let st=b(e=>{let t=e.id||``;!t||Je.current.has(t)||(Je.current.add(t),i({page_key:`home`,page_name:`首页`,current_page_key:t,current_page_name:e.name||``}))},[]),ct=b((e,t)=>{if(f(e)){ot(e);return}o({page_key:`home`,page_name:`首页`,recommend_id:Y}),a(`home`,`首页`,t,e.name||e.id||``)},[ot,Y]);function lt(){o({page_key:`home`,page_name:`首页`,recommend_id:Y,recommend_trace_info:`更多`})}let X=Oe??fe,Z=Number(k??ue),Q=A??de,ut=`flex-1 min-w-0 text-[18px] leading-[24px] font-medium line-clamp-1 text-text2`,dt=s===`grid`?ie:m?re:ie,ft=ke(O),pt=(s===`waterfall`||!F)&&!!ft,mt=pt?ft:``,ht=s===`grid`?`flex size-[24px] shrink-0 items-center justify-center ${m?`opacity-100`:`opacity-50`}`:`ml-[8px] flex size-[24px] shrink-0 items-center justify-center ${m?`opacity-100`:`opacity-50`}`,gt=`size-[16px] text-text1`,_t=d({enabled:!m&&s===`grid`,containerRef:Ue,firstRowItemRef:Ge,columns:G,itemsCount:J.length,deps:[s]}),vt=te({enabled:!m&&s===`waterfall`,containerRef:He,firstRowRef:H,deps:[s,J.length]}),yt=s===`grid`?_t:vt,bt=b(async()=>{if(m||W.current===q)return;let e=we(q);if(e){B(e.items),N&&V(e.cursor);return}if(N||L){W.current=q;try{if(Ze(),!N){if(!L)return;let e=await ve(v);B(e),Te(q,{items:e});return}if(!M)return;let e=await t({page_size:K,tags:M.tagIds.length>0?M.tagIds:void 0,cat_ids:M.catIds.length>0?M.catIds:void 0},{cache:`no-store`}),n=_e(e.data?.videos,K),r=e.data?.cursor;B(n),V(r),Te(q,{items:n,cursor:r})}catch(e){console.error(`推荐位刷新首屏失败(client)`,e)}finally{W.current===q&&(W.current=``),Qe()}}},[Qe,v,m,N,L,q,K,Ze,M]);x(()=>{bt()},[bt]);let xt=b(async()=>{let n=ze;if(!(!I||!n||Ye.current)){Ye.current=!0,Ve(!0);try{if(!M)return;let r={cursor:n,page_size:K,tags:M.tagIds.length>0?M.tagIds:void 0,cat_ids:M.catIds.length>0?M.catIds:void 0},i=P?await e(r):await t(r),a=Array.isArray(i.data?.videos)?i.data.videos:[],o=i.data?.cursor;a.length>0&&B(e=>e.concat(a)),V(e=>{if(!(!a.length||!o))return o===e?void 0:o})}catch(e){console.error(`推荐位加载下一页失败(client)`,e),V(void 0)}finally{Ye.current=!1,Ve(!1)}}},[ze,K,I,M,P]);x(()=>{let e=We.current;if(!e||!I||!at)return;let t=new IntersectionObserver(e=>{!e[0]?.isIntersecting||Be||xt()},{root:null,threshold:0});return t.observe(e),()=>{t.disconnect()}},[xt,at,Be,J.length,K,I,it]),ye(()=>{let e=He.current;if(!e||s!==`waterfall`)return;let t=()=>{let t=e.clientWidth||0;Ne(t>0?(t-15)/2:0)};t();let n=new ResizeObserver(t);return n.observe(e),()=>{n.disconnect()}},[s]);let $=S(()=>s===`waterfall`?Fe(J,nt,R):{left:[],right:[]},[R,nt,J,s]),St=S(()=>s===`waterfall`?{left:$.left.map(e=>Pe(e,X,Z,Q)),right:$.right.map(e=>Pe(e,X,Z,Q))}:{left:[],right:[]},[Z,Q,X,s,$.left,$.right]);if(x(()=>{s===`waterfall`&&($.left.length||(H.current.left=null),$.right.length||(H.current.right=null))},[s,$.left.length,$.right.length]),!J.length)return null;let Ct=!m&&Xe,wt=!m&&Be,Tt=yt>0?yt/2:160;return E(c,{ref:Ke,className:`w-full mt-[16px]`,children:[s===`grid`&&E(c,{className:`flex items-center justify-between pl-[16px] pr-0 mb-[16px]`,children:[T(l,{className:ut,children:Y}),pt&&T(ee,{href:mt,"aria-label":`更多`,className:ht,onClick:lt,children:T(dt,{className:gt})})]}),s===`grid`&&E(c,{ref:Ue,className:`relative flex w-full flex-wrap items-start gap-[16px] px-[16px]`,children:[J.map((e,t)=>{let n=nt[t],r=je(e);return T(`div`,{ref:e=>{t===it&&(We.current=e),t<G&&(Ge.current[t]=e)},className:`w-[calc((100%-16px)/2)]`,children:T(De,{item:e,icon:n,index:t,showPlayCount:X&&(r?.showPlayCount??!0),playCountDelta:r?.playCountDelta??Z,showEpisode:r?.showEpisode??Q,widthStyle:{width:`100%`},onContentClick:ct,onContentView:st})},Ie(e,t))}),Ct&&T(c,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),Ct&&T(c,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:Tt},"aria-hidden":!0,children:T(u,{size:`large`,showLabel:!1,className:`text-theme5`})})]}),s===`waterfall`&&T(g,{title:Y,moreHref:mt||void 0,onMoreClick:lt,moreIcon:pt?T(dt,{className:gt}):void 0,titleClassName:ut,moreLinkClassName:ht,columns:St,containerClassName:`relative flex w-full gap-[15px] px-[16px]`,getItemRef:({item:e,column:t,columnIndex:n})=>r=>{let{sourceIndex:i}=e;i===it&&(We.current=r),n===0&&(H.current[t]=r);let a=U.current.get(i);if(a&&(a.disconnect(),U.current.delete(i)),r&&!m){let e=J[i];if(e&&!f(e)){let t=new IntersectionObserver(n=>{n[0]?.isIntersecting&&(st(e),t.disconnect(),U.current.delete(i))},{threshold:.5});t.observe(r),U.current.set(i,t)}}},overlay:Ct?E(be,{children:[T(c,{className:`absolute inset-0 z-10 bg-black/15 backdrop-blur-[1px] dark:bg-white/10`,"aria-hidden":!0}),T(c,{className:`absolute left-1/2 -translate-x-1/2 -translate-y-1/2 z-20 pointer-events-none`,style:{top:Tt},"aria-hidden":!0,children:T(u,{size:`large`,showLabel:!1,className:`text-theme5`})})]}):void 0,onItemClick:e=>{let t=J[e.sourceIndex];t&&(f(t)?ot(t):(o({page_key:`home`,page_name:`首页`,recommend_id:Y}),a(`home`,`首页`,null,t.name||t.id||``)))}}),wt&&T(c,{className:`w-full flex justify-center py-[12px]`,children:T(u,{size:`medium`,showLabel:!1,className:`text-theme5`})})]})}function De({item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:s,onContentView:c}){return T(Oe,{item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:s,onContentView:c})}function Oe({item:e,icon:t,index:n,showPlayCount:r,playCountDelta:i,showEpisode:a,widthStyle:o,onContentClick:u,onContentView:d}){let te=C(null),ne=M(e,j(e)),re=e.name||e?.title||``,ie=e.id?k(e):`#`,g=se({title:re,badgeImageUrl:z(e,t,n),episodeText:I(e,a),heatText:r?_(v(e),i):``,score:P(e.score)}),ce=m(g.topLeftBadgeImageUrl);return x(()=>{let t=te.current;if(!t||!d||f(e))return;let n=new IntersectionObserver(t=>{t[0]?.isIntersecting&&(d(e),n.disconnect())},{threshold:.5});return n.observe(t),()=>{n.disconnect()}},[e,d]),T(ee,{href:ie,className:`block w-full`,onClick:t=>u?.(e,t),style:o,children:E(be,{children:[E(c,{className:`relative w-full overflow-hidden rounded-[8px] bg-bg3`,style:{aspectRatio:h},children:[ne&&T(s,{src:ne,alt:re||`推荐封面`,fill:!0,objectFit:`cover`,className:`object-cover object-top`}),T(c,{className:`pointer-events-none absolute inset-0 rounded-[8px]`,style:xe,"aria-hidden":!0}),ce&&T(c,{className:oe,children:T(s,{src:ce,alt:`角标`,width:96,height:18,className:p})}),g.topRightScoreText&&T(l,{as:`span`,className:`absolute right-[8px] top-[8px] z-10 shrink-0 text-[14px] leading-[22px] font-semibold text-[#FFC24B]`,children:g.topRightScoreText}),E(c,{className:`absolute left-[8px] right-[8px] bottom-[8px] z-10 flex items-end justify-between gap-[8px]`,children:[T(c,{className:`flex min-w-0 items-center gap-[4px]`,children:g.bottomLeftHeatText&&E(be,{children:[T(ae,{className:`h-[16px] w-[16px] shrink-0 text-white`}),T(l,{as:`span`,className:`min-w-0 truncate text-[14px] leading-[20px] text-white`,children:g.bottomLeftHeatText})]})}),g.bottomRightEpisodeText&&T(l,{as:`span`,className:`shrink-0 text-[14px] leading-[20px] text-white`,children:g.bottomRightEpisodeText})]})]}),T(c,{className:`mt-[8px] h-[44px] overflow-hidden`,children:T(l,{as:`h3`,className:`line-clamp-2 text-[16px] leading-[22px] text-[--color-text-white80]`,children:g.title})})]})})}function k(e){let t=encodeURIComponent(e.name||``);return`/video/${e.id||``}/${t}/episode/1`}function ke(e){return e?e.trim():``}function Ae(e,t,n){let r=Number(e);return!Number.isFinite(r)||r<=0?t:Math.min(n,Math.floor(r))}function je(e){return e[y]}function A(e){return typeof e==`string`?e:``}function Me(e){return typeof e==`string`?e.trim():``}function j(e){return Me(e.img_type).toLowerCase()===`long`?`short`:`tall`}function M(e,t){return t===`short`?e.img_x||e.img_y||e?.coverUrl:e.img_y||e.img_x||e?.coverUrl}function N(e,t){return(e.tags?.map(e=>e.name).filter(Boolean).join(` · `)??``)||(t?F(e,!0):``)}function P(e){let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return t>10&&t<=100?t/10:Math.min(t,10)}function F(e,t){return t?L(e)||Ne(Number(e.duration||0)):``}function I(e,t){return t?L(e):``}function L(e){if(!R(e))return``;let t=e.update_status===`0`,n=Number(e.episode_cnt||e.links?.length||0);return n>0?`${t?`更新至`:`全`}${n}集`:``}function R(e){if(Number(e.type??0)===2)return!0;let t=Number(e.episode_cnt||e.links?.length||0);return Number.isFinite(t)&&t>1}function Ne(e){if(!Number.isFinite(e)||e<=0)return``;let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`}function z(e,t,n){return A(e.badge_url)||A(t?.material_url)||``}function Pe(e,t,n,r){let i=j(e.item),a=M(e.item,i),o=e.item.name||e.item?.title||``,s=e.item.id?k(e.item):`#`,c=z(e.item,e.icon,e.index),l=F(e.item,r),u=N(e.item,r),ee=t?_(v(e.item),n):``,d=P(e.item.score);return{key:Ie(e.item,e.index),sourceIndex:e.index,href:s,cardKind:i,coverUrl:a,title:o,badgeImageUrl:c,episodeText:l,metaPrimaryText:u,heatText:ee,score:d}}function Fe(e,t,n){let r=[],i=[],a=n<=0,o=0,s=0;return e.forEach((e,c)=>{let l=t[c];if(a){c%2==0?r.push({item:e,icon:l,index:c}):i.push({item:e,icon:l,index:c});return}let u=B(n,e);o<=s?(r.push({item:e,icon:l,index:c}),o+=u):(i.push({item:e,icon:l,index:c}),s+=u)}),{left:r,right:i}}function B(e,t){return e?(j(t)===`tall`?216:142)+16:0}function Ie(e,t){return e.id?`home-recommend-${e.id}-${t}`:`home-recommend-${t}`}export{Ee as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
function
|
|
2
|
+
import{formatCompactCount as e}from"../../../../../utils/common.mjs";function t(e){let t=e.static,n=Number(t?.browse_cnt??t?.browse_count??0);return!Number.isFinite(n)||n<0?0:n}function n(t){return!Number.isFinite(t)||t<=0?`0`:e(t)}function r(e,t){let r=Number(e||0),i=Number(t||0);return!Number.isFinite(r)||!Number.isFinite(i)?`0`:n(Math.max(0,r+i))}export{r as buildHomeRecommendHeatText,t as resolveHomeRecommendBrowseCount};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import e from"../../../../utils/get-res-url.mjs";import{pContentBatchGetVideoDetail as
|
|
2
|
+
"use client";import{formatCompactCount as e}from"../../../../utils/common.mjs";import t from"../../../../utils/get-res-url.mjs";import{pContentBatchGetVideoDetail as n,pContentGetNewstVideoList as r,pContentGetPopularVideoList as i}from"../../../../service/generated/client.mjs";import{pContentBatchGetVideoDetailKey as a,pContentGetNewstVideoListKey as o,pContentGetPopularVideoListKey as s}from"../../../../service/generated/tanstack.mjs";import{Image as c}from"../../../ui/image.mjs";import{Box as l}from"../../../ui/box.mjs";import{Text as u}from"../../../ui/text.mjs";import{IMAGE_TEXT_RECOMMEND_FIXED_BATCH_SIZE as d,buildImageTextRecommendRemoteMap as f,getImageTextRecommendFixedIds as ee,resolveImageTextRecommendVideoId as te}from"../../../../hooks/image-text-recommend.mjs";import{useRequest as p}from"../../../../hooks/query/use-query.mjs";import{normalizeHomeRecommendSmartLayout as ne}from"../home-recommend/shared/home-recommend-smart-layout.mjs";import re from"../../../../assets/images/frame.mjs";import ie from"../../../../assets/images/subscript.mjs";import{buildImageTextSmartListBody as m,resolveImageTextSmartListKind as ae}from"./shared/query.mjs";import{useCallback as h,useEffect as g,useMemo as _,useRef as oe,useState as v}from"react";import{Fragment as se,jsx as y,jsxs as b}from"react/jsx-runtime";import{useTranslations as ce}from"next-intl";import le from"next/link";const x=[];function S(e){return typeof e==`string`?e:e.src}function ue(e,n){if(!e||!e.trim())return S(n);if(e.startsWith(`http`)||e.startsWith(`//`)||e.startsWith(`data:`))return e;let r=t();return r?`${r}${e.startsWith(`/`)?e:`/${e}`}`:e}function C(e){if(e==null)return``;let t=e;return t.img_y||t.media?.img_y||``}function w(e){return e==null?``:e.name||``}function T(e,t=!1){let n=e,r=t?n.type:n.content_type;return typeof r==`number`?r:n.is_more_link===!0||Number(n.episode_cnt||n.episode_count||n.episodes?.length||n.links?.length||0)>1?2:1}function E(e){if(!Number.isFinite(e)||e<=0)return``;let t=Math.floor(e),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=e=>String(e).padStart(2,`0`);return n>0?`${a(n)}:${a(r)}:${a(i)}`:`${a(r)}:${a(i)}`}function D(e,t){let n=e,r=n?.links?.length??0;if(!Number.isFinite(r)||r<=0)return``;let i=n.update_status;return t(r,i===0||i===`0`)}function de(e,t,n){return e?T(e,n)===2&&t?D(e,t):E(Number(e.duration??e.detail?.duration??0)):``}function fe(e,t){if(!(e??``).trim())return``;let n=encodeURIComponent((t??``).trim()||``);return`/video/${e.trim()}/${n}/episode/1`}function pe(t,n){if(!t)return``;let r=t,i=n?Number(r.static?.browse_count??0):Number(r.browse_count??0);return!Number.isFinite(i)||i<=0?``:e(i)}function me(){let e=new Date,t=new Date(e);return t.setHours(24,0,0,0),t.getTime()-e.getTime()}function O(e){let{title:t,items:T=x,commonPlayCount:E,commonEpisodes:D,layout:O,mode:k=`renderer`}=e,A=ce(`components.biz.business.imageTextRecommend`),j=k===`renderer`,M=k===`editor`,[N,P]=v({}),[F,I]=v([]),[L,R]=v(0),[z,B]=v(void 0),V=oe(null),H=_(()=>ne(O),[O]),U=H?.enabled===!0,W=_(()=>ae(H?.sortRule),[H?.sortRule]),G=T?.length??0,K=_(()=>ee(T,U),[U,T]),q=_(()=>K.slice(0,d),[K]),J=_(()=>{if(H?.enabled)return m(H,{targetCount:G})},[H,G]),{data:Y}=p(_(()=>!J||!U?[`image-text-recommend`,`smart-idle`]:W===`newest`?o(J):s(J),[J,U,W]),async()=>!J||!U?{data:{videos:[],cursor:``}}:W===`newest`?r(J):i(J),{enabled:j&&!M&&U&&T.length>0&&!!J,staleTime:1/0}),{data:X}=p(a({ids:q}),()=>n({ids:q}),{enabled:j&&!M&&!U&&q.length>0,staleTime:1/0}),Z=_(()=>U&&G>d?Math.ceil(G/d):K.length>0?Math.ceil(K.length/d):0,[U,G,K.length]),Q=h((e,t)=>A(t?`updatedTo`:`allEpisodes`,{count:e}),[A]),he=h(async(e,t)=>{if(e.length===0)return;let r=f((await n({ids:e})).data?.videos??[]);P(e=>t?{...e,...r}:r)},[]);g(()=>{if(M)return;if(U){let e=Y?.data?.videos??[];G>d?(I(e.slice(0,d)),B(Y?.data?.cursor),R(e.length>0?1:0)):(I(e.slice(0,G)),R(0)),P({});return}if(q.length===0){P({}),I([]),R(0),B(void 0);return}let e=X?.data?.videos??[];P(f(e)),I([]),B(void 0),R(e.length>0?1:0)},[M,U,Y,X,q,G]),g(()=>{if(M||Z<1||L<1||L>=Z)return;let e=V.current;if(!e)return;let t=new IntersectionObserver(e=>{let[t]=e;if(!t?.isIntersecting)return;let n=L;if(U&&H){let e=m(H,{targetCount:G,cursor:z,pageSize:d});(W===`newest`?r:i)(e).then(e=>{let t=e.data?.videos??[];I(e=>[...e,...t.slice(0,d)]),B(e.data?.cursor),R(n+1)}).catch(()=>{})}else{let e=n*d,t=K.slice(e,e+d);t.length>0&&(he(t,!0),R(n+1))}},{root:null,rootMargin:`0px`,threshold:0});return t.observe(e),()=>t.disconnect()},[M,U,H,W,K,L,Z,G,z,he]),g(()=>{if(M||!U||!H||G<=0)return;let e=H,t,n=!1;function a(){t=window.setTimeout(()=>{let t=m(e,{targetCount:G,pageSize:Math.max(20,G*10)});(W===`newest`?r:i)(t).then(e=>{n||I((e.data?.videos??[]).slice(0,G))}).catch(()=>{n||I([])}).finally(()=>{n||a()})},me())}return a(),()=>{n=!0,t!==void 0&&window.clearTimeout(t)}},[M,U,H,W,G]);let $=_(()=>!T||T.length===0?x:M?T:U&&G>d?T.slice(0,F.length):T,[T,M,U,G,F.length]),ge=_(()=>$.length?$.map((e,t)=>{let n=String(e?.contentId??``).trim(),r=U?F[t]:n?N[n]:void 0,i=U?r?w(r):(e?.title??``).trim():(e?.title??``).trim()||(r?w(r):``),a=(e?.cover??``).trim(),o=U?C(r)||a:a||(e?.useVideoPoster?C(r):``),s=U&&String(r?.description??r?.content_description??``).trim()||(e?.contentDescription??``).trim(),c=de(r,Q,U),l=pe(r,U);return{...e,contentId:n||(r?te(r):``),title:i,cover:o,contentDescription:s,episodeOrDurationText:c,playCountText:l}}):x,[Q,U,$,N,F]);if(!T||T.length===0)return null;let _e=L>=1&&L<Z?U?F.length-2:L*d-2:-1;return b(l,{className:M?`bg-bg1 px-3 py-3 pointer-events-none`:`bg-bg1 px-3 py-3`,children:[t&&y(l,{className:`mb-3 flex items-center justify-between`,children:y(u,{className:`text-[18px] font-bold text-text1 leading-[26px]`,children:t})}),y(l,{className:`flex overflow-x-auto pb-2 scrollbar-hide space-x-2`,children:ge.map((e,t)=>{let n=E||(e.showPlayCount??!1),r=(e.playCountText??``).trim(),i=r!==``,a=D||(e.showEpisodes??!1),o=(e.episodeOrDurationText??``).trim(),s=a&&o!==``,d=k===`renderer`?fe(e.contentId??``,e.title??``):``,f=b(se,{children:[b(l,{className:`relative rounded-lg overflow-hidden bg-bg2 w-[116px] h-[134px]`,children:[M||e.cover?y(c,{src:ue(e.cover,re),alt:e.title??``,fill:!0,className:`object-cover`}):y(l,{className:`w-full h-full flex items-center justify-center`,children:y(u,{className:`text-text3 text-xs`,children:A(`noCover`)})}),!U&&(e.badge??``).trim()?y(l,{className:`absolute top-0 right-0 w-8 h-8`,children:y(c,{src:(e.badge??``).trim()||S(ie),alt:``,fill:!0,sizes:`32px`,className:`object-contain object-right-top`,unoptimized:!0})}):null,b(l,{className:`absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent pb-1 pt-3 px-1 flex justify-between items-center gap-1`,children:[y(l,{className:`flex items-center min-w-0 shrink`,children:n&&i?b(l,{className:`flex items-center gap-1 rounded bg-overlay px-1 py-0`,children:[y(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`10`,viewBox:`0 0 12 10`,fill:`none`,className:`shrink-0`,"aria-hidden":!0,children:y(`path`,{d:`M7.56 5.18437L5.013 6.56737C4.893 6.63337 4.761 6.66937 4.638 6.66937C4.269 6.66937 4.002 6.38737 4.002 5.99737V3.28237C4.002 2.89237 4.269 2.61037 4.638 2.61037C4.764 2.61037 4.893 2.64637 5.013 2.70937L7.572 4.09237C7.803 4.21837 7.938 4.41637 7.938 4.63237C7.938 4.85137 7.8 5.05537 7.56 5.18437ZM9.807 9.27637L2.133 8.52937C0.954 8.52937 0 7.57537 0 6.39637V2.79937C0 1.62037 0.954 0.666368 2.133 0.666368L9.81 0.000367165C10.989 0.000367165 11.943 0.954367 11.943 2.13337V7.14337C11.9422 7.70935 11.7168 8.25188 11.3163 8.65181C10.9158 9.05174 10.373 9.27637 9.807 9.27637ZM10.875 2.13337C10.875 1.99351 10.8475 1.85502 10.7939 1.72581C10.7404 1.5966 10.662 1.47919 10.5631 1.3803C10.4642 1.2814 10.3468 1.20296 10.2176 1.14944C10.0883 1.09591 9.94986 1.06837 9.81 1.06837L2.133 1.73437C1.99314 1.73437 1.85465 1.76191 1.72544 1.81544C1.59623 1.86896 1.47883 1.9474 1.37993 2.0463C1.28104 2.14519 1.20259 2.2626 1.14907 2.39181C1.09555 2.52102 1.068 2.65951 1.068 2.79937V6.39637C1.068 6.67882 1.1802 6.94971 1.37993 7.14944C1.57966 7.34916 1.85054 7.46137 2.133 7.46137L9.807 8.20837C9.94686 8.20837 10.0853 8.18082 10.2146 8.1273C10.3438 8.07378 10.4612 7.99533 10.5601 7.89644C10.659 7.79754 10.7374 7.68014 10.7909 7.55093C10.8445 7.42171 10.872 7.28323 10.872 7.14337V2.13337H10.875Z`,fill:`white`})}),y(u,{className:`text-white text-[12px] leading-[20px]`,children:r})]}):null}),y(l,{className:`flex items-center shrink-0`,children:s?y(u,{className:`text-white text-[12px] leading-[20px]`,children:o}):null})]})]}),y(l,{className:`mt-2 py-2`,children:y(u,{className:`text-[16px] text-text1 font-bold leading-[24px] line-clamp-1`,children:e.title})})]});return y(l,{ref:t===_e?V:void 0,className:`flex-shrink-0 w-[116px]`,children:d?y(le,{href:d,className:`block`,children:f}):f},t)})})]})}export{O as ImageTextRecommendClient};
|
|
@@ -78,11 +78,6 @@ import { schema as schema$11 } from "./home-recommend/home-recommend-waterfall/s
|
|
|
78
78
|
import { HomeRecommendWaterfall } from "./home-recommend/home-recommend-waterfall/server.mjs";
|
|
79
79
|
import { homeRecommendWaterfallMaterial } from "./home-recommend/home-recommend-waterfall/material.mjs";
|
|
80
80
|
import "./home-recommend/index.mjs";
|
|
81
|
-
import { hotRecommendInspectorPropsSchema } from "./hot-recommend/schema.mjs";
|
|
82
|
-
import { HotRecommendClient, HotRecommendProps } from "./hot-recommend/client.mjs";
|
|
83
|
-
import { HotRecommendServer } from "./hot-recommend/server.mjs";
|
|
84
|
-
import { hotRecommendMaterial } from "./hot-recommend/material.mjs";
|
|
85
|
-
import "./hot-recommend/index.mjs";
|
|
86
81
|
import { imageTextRecommendInspectorPropsSchema } from "./image-text-recommend/schema.mjs";
|
|
87
82
|
import { ImageTextRecommendClient, ImageTextRecommendProps } from "./image-text-recommend/client.mjs";
|
|
88
83
|
import { ImageTextRecommendServer } from "./image-text-recommend/server.mjs";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
import{
|
|
2
|
+
import{formatCompactCount as e}from"../../../../utils/common.mjs";import{Image as t}from"../../../ui/image.mjs";import{Box as n}from"../../../ui/box.mjs";import{Text as r}from"../../../ui/text.mjs";import i from"../../../ui/link.mjs";import a from"../../../../assets/icons/view.mjs";import{Fragment as o,jsx as s,jsxs as c}from"react/jsx-runtime";function l(t){let n=Number(t||0);return Number.isNaN(n)||n<=0?``:e(n)}function u({data:e}){return e?s(n,{className:`flex flex-col gap-[12px]`,children:(Array.isArray(e)?e:[e]).map((e,u)=>{if(!e||typeof e!=`object`)return null;let{id:d,title:f,desc:p,cover:m,tagImageUrl:h,showEpisode:g,episodeText:_,showPlayCount:v,play_count:y}=e,b=f||``,x=d?`/video/${d}/${b?encodeURIComponent(b):``}`:`#`,S=_==null?``:String(_).trim(),C=(g??!0)&&S!==``,w=v??!0,T=l(y)||`0`;return s(n,{children:s(i,{href:x,className:`block`,children:c(n,{className:`relative h-[204px] w-full overflow-hidden rounded-[8px] bg-[rgba(6,3,20,0.5)]`,children:[c(n,{className:`relative h-[134px] w-full overflow-hidden rounded-t-[8px]`,children:[m&&s(t,{src:m,alt:b||`封面`,fill:!0,objectFit:`cover`}),h&&String(h).trim()&&s(n,{className:`absolute left-[16px] top-[12px]`,children:s(n,{className:`inline-flex items-center justify-center rounded-[4px] px-[4px] py-[4px]`,style:{background:`linear-gradient(90deg, #CA3FE9 0%, #9756E3 100%)`},children:s(t,{src:String(h),alt:``,width:75,height:14,className:`h-[14px] w-auto object-contain`})})}),c(n,{className:`absolute bottom-[12px] left-[16px] right-[16px] flex items-center justify-between`,children:[s(n,{className:`flex items-center gap-[4px]`,children:w&&c(o,{children:[s(a,{className:`size-[22px] text-white opacity-80`}),s(r,{className:`text-[14px] leading-[20px] text-white`,children:T})]})}),C&&s(r,{className:`text-[14px] leading-[20px] text-white`,children:S})]})]}),s(n,{className:`px-[16px] pt-[12px]`,children:c(n,{className:`flex flex-col gap-[2px]`,children:[s(r,{className:`line-clamp-1 text-[16px] font-medium leading-[22px] text-white`,children:b}),p&&s(r,{className:`line-clamp-1 text-[14px] leading-[20px] text-white/50`,children:p})]})})]})})},d||b||`large-grid-item-${u}`)})}):null}export{u as LargeGridItemClient};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
2
|
import { DefineMaterialOption, MaterialCategory } from "../../../../utils/schema/material.mjs";
|
|
3
3
|
import "../../../../utils.mjs";
|
|
4
|
-
import * as react from "react";
|
|
5
4
|
import * as zod from "zod";
|
|
5
|
+
import * as react from "react";
|
|
6
6
|
import * as zod_v4_core0 from "zod/v4/core";
|
|
7
7
|
|
|
8
8
|
//#region components/biz/business/large-feature-grid/material.d.ts
|