@funhub/platform 0.1.13 → 0.1.15
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/detail/check-ok.mjs +2 -0
- package/dist/assets/icons/share/share-link.mjs +2 -0
- package/dist/biz.d.mts +9 -1
- package/dist/biz.mjs +1 -1
- package/dist/common.d.mts +3 -1
- package/dist/common.mjs +1 -1
- package/dist/components/biz/business/banner/index.d.mts +3 -0
- package/dist/components/biz/business/banner/variants/basic-banner/defaults/default-props.mjs +1 -1
- package/dist/components/biz/business/banner/variants/basic-banner/defaults/mock-data.mjs +2 -0
- package/dist/components/biz/business/banner/variants/basic-banner/index.d.mts +4 -1
- package/dist/components/biz/business/banner/variants/basic-banner/index.mjs +1 -1
- package/dist/components/biz/business/banner/variants/basic-banner/inspector-schema.d.mts +32 -0
- package/dist/components/biz/business/banner/variants/basic-banner/inspector-schema.mjs +2 -0
- package/dist/components/biz/business/banner/variants/basic-banner/material.d.mts +21 -0
- package/dist/components/biz/business/banner/variants/basic-banner/material.mjs +2 -0
- package/dist/components/biz/business/banner/variants/basic-banner/server.d.mts +19 -0
- package/dist/components/biz/business/banner/variants/basic-banner/server.mjs +2 -0
- package/dist/components/biz/business/comment/comment-input.mjs +1 -1
- package/dist/components/biz/business/detail/detail-info-tags.mjs +2 -0
- package/dist/components/biz/business/detail/detail-info-title.mjs +2 -0
- package/dist/components/biz/business/detail/detail-introduction.mjs +1 -1
- package/dist/components/biz/business/detail/detail-operate.mjs +1 -1
- package/dist/components/biz/business/detail/materials/registry.d.mts +61 -0
- package/dist/components/biz/business/detail/materials/registry.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/client.d.mts +14 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/client.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/index.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/material.d.mts +4 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/material.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/schema.d.mts +14 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/schema.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/server.d.mts +11 -0
- package/dist/components/biz/business/detail/materials/video-detail-actions/server.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/client.d.mts +18 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/client.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/index.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/material.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/material.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/schema.d.mts +17 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/schema.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/server.d.mts +11 -0
- package/dist/components/biz/business/detail/materials/video-detail-info/server.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/client.d.mts +12 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/client.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/index.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/material.d.mts +4 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/material.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/schema.d.mts +14 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/schema.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/server.d.mts +11 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title/server.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/client.d.mts +16 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/client.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/index.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/material.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/material.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/schema.d.mts +17 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/schema.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/server.d.mts +11 -0
- package/dist/components/biz/business/detail/materials/video-detail-info-title-tags-episodes/server.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/client.d.mts +16 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/client.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/index.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/material.d.mts +4 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/material.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/schema.d.mts +14 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/schema.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/server.d.mts +11 -0
- package/dist/components/biz/business/detail/materials/video-detail-player/server.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/client.d.mts +11 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/client.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/index.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/material.d.mts +5 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/material.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/schema.d.mts +36 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/schema.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/server.d.mts +11 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/server.mjs +2 -0
- package/dist/components/biz/business/detail/materials/video-detail-recommend/utils.mjs +2 -0
- package/dist/components/biz/business/index.d.mts +3 -0
- package/dist/components/biz/business/index.mjs +1 -1
- package/dist/components/biz/example/button/client.d.mts +8 -0
- package/dist/components/biz/example/button/client.mjs +2 -0
- package/dist/components/biz/example/button/index.d.mts +5 -0
- package/dist/components/biz/example/button/material.d.mts +22 -0
- package/dist/components/biz/example/button/material.mjs +2 -0
- package/dist/components/biz/example/button/schema.d.mts +38 -0
- package/dist/components/biz/example/button/schema.mjs +2 -0
- package/dist/components/biz/example/button/server.d.mts +8 -0
- package/dist/components/biz/example/button/server.mjs +2 -0
- package/dist/components/biz/example/button/variants.mjs +2 -0
- package/dist/components/biz/utils/transformers/data.d.mts +3 -3
- package/dist/components/common/app-context/index.d.mts +19 -0
- package/dist/components/common/app-context/index.mjs +2 -0
- package/dist/components/common/app-context/provider.mjs +2 -0
- package/dist/components/common/cards/mini-three-card.d.mts +4 -1
- package/dist/components/common/cards/mini-three-card.mjs +1 -1
- package/dist/components/common/collection-popup/collection-create-modal.mjs +2 -0
- package/dist/components/common/collection-popup/index.mjs +1 -1
- package/dist/components/common/image-crop-modal/image-crop-modal.mjs +2 -2
- package/dist/components/common/intl-provider.d.mts +25 -0
- package/dist/components/common/intl-provider.mjs +2 -0
- package/dist/components/common/list/post-list/post-list.mjs +1 -1
- package/dist/components/common/list/video-list/video-list.mjs +1 -1
- package/dist/components/common/picker/gender-picker/gender-picker.d.mts +8 -2
- package/dist/components/common/picker/gender-picker/gender-picker.mjs +1 -1
- package/dist/components/common/picker/picker-drawer/picker-drawer.mjs +1 -1
- package/dist/components/common/share-popup/share-popup.d.mts +42 -0
- package/dist/components/common/share-popup/share-popup.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/login/agreement-dialog.mjs +2 -0
- package/dist/components/pages/login/forgot.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 +2 -2
- package/dist/components/pages/profile/_components/tabs/collect-tab/client.mjs +2 -0
- package/dist/components/pages/profile/_components/tabs/collect-tab/server.mjs +2 -0
- package/dist/components/pages/profile/_components/tabs/history-tab/client.mjs +2 -0
- package/dist/components/pages/profile/_components/tabs/history-tab/server.mjs +2 -0
- package/dist/components/pages/profile/_components/tabs/like-tab/client.mjs +2 -0
- package/dist/components/pages/profile/_components/tabs/like-tab/server.mjs +2 -0
- package/dist/components/pages/profile/_components/tabs/publish-tab/client.mjs +2 -0
- package/dist/components/pages/profile/_components/tabs/publish-tab/server.mjs +2 -0
- package/dist/components/pages/profile/_components/user-profile-container/client.mjs +2 -0
- package/dist/components/pages/profile/_components/user-profile-header/client.mjs +2 -0
- package/dist/components/pages/profile/_components/user-profile-header/server.mjs +2 -0
- package/dist/components/pages/profile/_components/user-profile-header/user-profile-avatar.mjs +2 -0
- package/dist/components/pages/profile/_components/user-profile-header/user-profile-cover-background.mjs +2 -0
- package/dist/components/pages/profile/_components/user-profile-main/server.mjs +2 -0
- package/dist/components/pages/profile/_components/user-profile-main/shell.mjs +2 -0
- package/dist/components/pages/profile/{client.d.mts → layout.d.mts} +4 -3
- package/dist/components/pages/profile/layout.mjs +2 -0
- package/dist/components/pages/profile/page.d.mts +3 -3
- package/dist/components/pages/profile/page.mjs +1 -1
- package/dist/components/pages/profile/utils.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/index.d.mts +1 -0
- package/dist/components/pages/video-detail/page.d.mts +4 -1
- package/dist/components/pages/video-detail/page.mjs +1 -1
- package/dist/components/pages/video-detail/video-detail-client.d.mts +13 -0
- package/dist/components/pages/video-detail/video-detail-client.mjs +1 -1
- package/dist/components/ui/alert-dialog.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/popup.mjs +1 -1
- package/dist/components/ui/sheet.d.mts +7 -1
- package/dist/components/ui/sheet.mjs +1 -1
- package/dist/hooks/app-context.d.mts +20 -0
- package/dist/hooks/app-context.mjs +2 -0
- package/dist/hooks/get-app-context.d.mts +19 -0
- package/dist/hooks/get-app-context.mjs +2 -0
- package/dist/hooks/use-app-context/index.d.mts +14 -0
- package/dist/hooks/use-app-context/index.mjs +2 -0
- package/dist/hooks/use-content-operate.mjs +1 -1
- package/dist/hooks.d.mts +4 -1
- package/dist/hooks.mjs +1 -1
- package/dist/i18n/locales/en.mjs +1 -1
- package/dist/i18n/locales/zh-CN.mjs +1 -1
- package/dist/i18n.d.mts +5 -1
- package/dist/i18n.mjs +1 -1
- package/dist/materials.d.mts +4 -0
- package/dist/materials.mjs +2 -0
- package/dist/pages.d.mts +2 -1
- package/dist/service/generated/client.d.mts +1 -1
- package/dist/service/generated/tanstack.d.mts +1 -1
- package/dist/utils/schema/index.d.mts +4 -0
- package/dist/utils/schema/inspector.d.mts +117 -0
- package/dist/utils/schema/material.d.mts +46 -0
- package/dist/utils/schema/material.mjs +2 -0
- package/dist/utils/schema/schema.d.mts +105 -0
- package/dist/utils/schema/schema.mjs +2 -0
- package/dist/utils/schema/utils.d.mts +17 -0
- package/dist/utils/schema/utils.mjs +2 -0
- package/dist/utils/share-manager.mjs +1 -1
- package/dist/utils.d.mts +6 -2
- package/dist/utils.mjs +1 -1
- package/package.json +5 -1
- package/dist/assets/icons/share/share-collect-sel.mjs +0 -2
- package/dist/assets/icons/share/share-collect.mjs +0 -2
- package/dist/assets/icons/share/share-qq.mjs +0 -2
- package/dist/assets/icons/share/share-wechat.mjs +0 -2
- package/dist/assets/icons/share/share-wecircle.mjs +0 -2
- package/dist/components/biz/business/detail/detail-guess-like.mjs +0 -2
- package/dist/components/biz/business/detail/detail-popular-comments.mjs +0 -2
- package/dist/components/biz/business/detail/detail-tabs.mjs +0 -2
- package/dist/components/pages/profile/_components/tabs/collect-tab/collect-tab.mjs +0 -2
- package/dist/components/pages/profile/_components/tabs/history-tab/history-tab.mjs +0 -2
- package/dist/components/pages/profile/_components/tabs/like-tab/like-tab.mjs +0 -2
- package/dist/components/pages/profile/_components/tabs/publish-tab/publish-tab.mjs +0 -2
- package/dist/components/pages/profile/_components/user-profile-cover-background.mjs +0 -2
- package/dist/components/pages/profile/_components/user-profile-header.mjs +0 -2
- package/dist/components/pages/profile/_components/user-profile-main.mjs +0 -2
- package/dist/components/pages/profile/client.mjs +0 -2
- package/dist/components/ui/legacy/avatar.mjs +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{pUserSendEmailCode as
|
|
2
|
+
"use client";import{Button as e}from"../../ui/button.mjs";import{pUserSendEmailCode as t,pUserSendResetPasswordEmailCode as n,pUserVerifyEmailCode as r,pUserVerifyForgetEmailCode as i,pUserVerifyResetPasswordEmailCode as a}from"../../../service/generated/client.mjs";import{Box as o}from"../../ui/box.mjs";import{Text as s}from"../../ui/text.mjs";import{useLoginModalStore as c}from"../../../store/modules/login-modal-store.mjs";import{useUserId as l}from"../../../hooks/use-auth.mjs";import{LeftArrowIcon as u}from"../../../assets/icons/left-arrow-icon.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{useTranslations as v}from"next-intl";function y(e){let[t,n]=e.split(`@`);return!t||!n?e:`${t.slice(0,3)}***${t.length>3?t.slice(-1):``}@${n}`}function b(b){let x=v(`components.pages.login`),{email:S,onClose:C,onPassword:w}=b,{verifyStep:T}=c(),[E,D]=h([,,,,,,].fill(``)),[O,k]=h(0),[A,j]=h(!1),[M,N]=h(60),[P,F]=h(!1),[I,L]=h(``),R=m(null),z=l(),B=p(()=>y(S),[S]),V=d(async()=>T===`reset-password`?await a({user_id:z,email_code:E.join(``)}):T===`forgot-password`?await i({email:S,email_code:E.join(``)}):await r({email:S,email_code:E.join(``)}),[T,E,z,S]),H=p(()=>E.every(e=>e!==``)&&!A,[E,A]);f(()=>{if(M<=0)return;let e=setInterval(()=>{N(e=>e-1)},1e3);return()=>clearInterval(e)},[M]),f(()=>{R.current?.focus()},[]);let U=d(e=>{let t=e.target.value.replace(/\D/g,``);if(t.length===0)return;let n=[...E],r=t.split(``),i=O;for(let e of r)i<6&&(n[i]=e,i++);D(n),k(Math.min(i,5)),L(``)},[E,O]),W=d(e=>{if(e.key===`Backspace`){e.preventDefault();let t=[...E];E[O]?t[O]=``:O>0&&(t[O-1]=``,k(O-1)),D(t),L(``)}else e.key===`ArrowLeft`&&O>0?k(O-1):e.key===`ArrowRight`&&O<5&&k(O+1)},[E,O]),G=d(e=>{k(e),R.current?.focus()},[]);async function K(){if(!(M>0||P))try{F(!0),T===`reset-password`?await n({user_id:z}):await t({email:S}),N(60),L(``)}finally{F(!1)}}async function q(){if(H)try{j(!0),await V(),w?.(S)}catch(e){L(e.message??x(`verify.invalidCode`))}finally{j(!1)}}return _(o,{className:`min-h-screen w-full h-full bg-bg1 text-text1 flex flex-col`,children:[_(o,{className:`flex justify-between items-center h-[60px] px-[16px]`,children:[g(e,{type:`button`,onClick:C,"aria-label":x(`verify.back`),className:`cursor-pointer bg-transparent !p-0 !px-0 !py-0`,children:g(u,{className:`w-[16px] h-[16px] text-text1/80`,"aria-hidden":`true`,focusable:`false`})}),g(s,{className:`text-[14px] text-text2`})]}),_(o,{className:`px-[24px] flex flex-col mt-[15px]`,children:[_(o,{className:`flex flex-col`,children:[g(s,{className:`text-[24px] leading-[32px] font-bold`,children:x(`verify.title`)}),_(o,{className:`mt-[12px] flex items-center`,children:[_(s,{className:`text-[14px] leading-[14px] text-text1/80`,children:[x(`verify.sentTo`),` `,B]}),g(e,{type:`button`,onClick:K,disabled:M>0||P,className:`ml-[8px] rounded-[19px] !px-[8px] !py-[8px] text-[12px] leading-[12px] cursor-pointer bg-line1 text-text1/80 disabled:cursor-not-allowed`,children:M>0?x(`verify.resend`,{countdown:M}):x(`verify.resend`)})]})]}),_(`form`,{className:`mt-[38px]`,onSubmit:e=>{e.preventDefault(),q()},children:[_(o,{className:`h-14 sm:h-16 md:h-20 relative`,children:[g(`input`,{ref:R,type:`text`,inputMode:`numeric`,pattern:`[0-9]*`,value:``,onChange:U,onKeyDown:W,className:`absolute opacity-0 pointer-events-none w-full h-full border-none outline-none bg-transparent text-base`,autoComplete:`one-time-code`}),g(o,{className:`w-full flex justify-between items-center`,children:E.map((e,t)=>g(o,{onClick:()=>G(t),className:`
|
|
3
3
|
w-14 h-14 sm:w-16 sm:h-16 md:w-20 md:h-20 rounded-xl border-2 flex items-center justify-center cursor-pointer transition-all duration-200
|
|
4
4
|
${t===O?`border-theme3 bg-theme3`:`border-transparent bg-bg2`}
|
|
5
|
-
`,children:g(
|
|
5
|
+
`,children:g(s,{className:`select-none font-semibold text-2xl sm:text-3xl leading-none text-text1`,children:e})},t))})]}),g(o,{className:`h-[22px] mt-[16px] mb-[22px] ml-[12px] text-[14px] text-theme5`,children:I}),g(e,{type:`submit`,disabled:!H,className:`w-full h-[60px] !rounded-[30px] !text-[18px] font-bold leading-[26px] bg-theme6 disabled:bg-theme6/40 disabled:text-text3 active:opacity-90 !px-0 !py-0`,children:x(A?`verify.verifying`:`verify.nextStep`)})]})]})]})}export{b as Verify};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{Button as e}from"../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../store/modules/user-store.mjs";import{gCommunityGetSubscribedCollections as n,gCommunityGetUserCollections as r,gInteractionListCollects as i,pInteractionBatchDeleteCollects as a}from"../../../../../../service/generated/client.mjs";import{Box as o}from"../../../../../ui/box.mjs";import{Checkbox as ee}from"../../../../../ui/checkbox.mjs";import{Tabs as s,TabsList as c,TabsTrigger as l}from"../../../../../ui/tabs.mjs";import{Text as te}from"../../../../../ui/text.mjs";import{useMutation as ne,usePaginated as u,useUpdateRequest as re}from"../../../../../../hooks/query/use-query.mjs";import{useAppContext as ie}from"../../../../../../hooks/use-app-context/index.mjs";import{AddIcon as ae}from"../../../../../common/icons/add.mjs";import{CollectionList as oe}from"../../../../../common/list/collection-list/collection-list.mjs";import{PostList as se}from"../../../../../common/list/post-list/post-list.mjs";import{VideoList as ce}from"../../../../../common/list/video-list/video-list.mjs";import{useEffect as d,useMemo as f,useState as p}from"react";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{toast as g}from"sonner";import{useTranslations as le}from"next-intl";import _ from"dayjs";import ue from"next/link";import{parseAsString as v,useQueryState as y}from"nuqs";const b={video:1,post:2};function de(e,t){if(!e)return e;let n=0,r=e.pages.map(e=>({page:e,filteredList:(e.data?.list??w).filter(e=>{let r=e?.id??``,i=t.has(r);return i&&(n+=1),!i})}));return{...e,pages:r.map(({page:e,filteredList:t})=>{if(!e.data)return e;let r=typeof e.data.total==`number`?Math.max(0,e.data.total-n):e.data.total;return{...e,data:{...e.data,list:t,total:r}}})}}function x(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function fe(e,t){let n=t[e.content_id||``]?.create_time,r=x(e);return{id:e.content_id||``,title:e.content||``,coverImage:r,publishTime:_(n).toDate().getTime()}}function pe(e,t){let n=t[e.id||``]?.create_time;return{is_more_link:e.is_more_link,id:e.id||``,title:e.name||``,coverImage:e.img_x||``,duration:0,authorName:e.up_user||e.source_username||``,viewCount:0,publishTime:_(n).toDate().getTime()}}function S(e){let t=x(e);return{contentType:e.source_type,id:e.content_id,title:e.title||e.content,coverImage:t,isVideo:!1,isMovie:!1}}function C(e){let t=(e.contents??[]).slice(0,3).map(S);return{id:e.collection_id||``,title:e.title||``,contentCount:e.content_count??t.length,contents:t}}const w=[],me=[`video`,`post`,`collection`],he=[`created`,`subscribed`];function T({userId:_,showCreateAction:x=!1,queryKeyPrefix:S,isMine:T=!1}){let E=le(`components.pages.profile.components.tabs`),D=ie()===`renderer`,O=S??[],[k,A]=y(`collectTab`,v.withDefault(`video`)),[j,M]=y(`collectCollectionTab`,v.withDefault(`created`)),N=f(()=>me.includes(k)?k:`video`,[k]),P=f(()=>he.includes(j)?j:`created`,[j]),[F,I]=p(!1),[L,R]=p(()=>new Set),{userId:ge,userInfo:_e}=t(),z=_||ge||_e?.userId||``,ve=re();async function B(e,t){if(!z)return{data:{list:[],total:0}};let n=await i({user_id:z,folder_id:``,content_type:t,page:e,page_size:10}),r=n.data.collect_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},a=t===b.video?(n.data?.video_infos??[]).map(e=>pe(e,r)):(n.data?.post_infos??[]).map(e=>fe(e,r));return{data:{list:a,total:n.data?.total??a.length}}}let V=u({key:[...O,`user-collect-video`,z],initialPageParam:1,async queryFn(e){return B(e,b.video)},options:{staleTime:0,enabled:D},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),H=u({key:[...O,`user-collect-post`,z],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return B(e,b.post)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}});async function ye(e){if(!z)return{data:{list:[],total:0}};let t=await r({page:e,user_id:_,page_size:10}),n=t.data?.data?.collections??[];return{data:{list:n.map(C),total:t.data?.data?.total??n.length}}}async function be(e){if(!z)return{data:{list:[],total:0}};let t=(await n({page:e,user_id:_,page_size:10})).data?.data,r=t?.collections??[];return{data:{list:r.map(C),total:t?.total??r.length}}}let U=u({key:[...O,`user-collection-created`,z],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return ye(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),W=u({key:[...O,`user-collection-subscribed`,z],initialPageParam:1,options:{staleTime:0,enabled:D},async queryFn(e){return be(e)},getNextPageParam(e,t){if((e?.data?.list||[]).length!==0)return t.length+1}}),G=f(()=>V.data?.pages.flatMap(e=>e.data?.list??w)??w,[V.data]),K=f(()=>H.data?.pages.flatMap(e=>e.data?.list??w)??w,[H.data]),xe=f(()=>U.data?.pages.flatMap(e=>e.data?.list??w)??w,[U.data]),Se=f(()=>W.data?.pages.flatMap(e=>e.data?.list??w)??w,[W.data]),Ce=N===`video`?G:N===`post`?K:w,q=new Set(Ce.map(e=>e.id)),J=N===`video`?V:H,Y=P===`created`?U:W,we=P===`created`?xe:Se,X=N===`video`,Te=[...O,`user-collect-video`,z],Ee=[...O,`user-collect-post`,z],{mutateAsync:De,isPending:Z}=ne(async e=>await a({app_id:0,user_id:z,folder_id:``,content_type:X?1:2,content_ids:e})),Oe=()=>{I(!F),R(new Set)};d(()=>{R(new Set),N===`collection`&&I(!1)},[N]),d(()=>{k!==N&&A(N)},[N,k,A]),d(()=>{j!==P&&M(P)},[P,j,M]);let Q=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ke=()=>{L.size===q.size&&q.size>0?R(new Set):R(new Set(q))},Ae=async()=>{if(!(L.size===0||Z)){if(!z){g.error(E(`collectTab.pleaseLogin`));return}try{let e=Array.from(L),t=await De(e);if(t.code===0){g.success(E(`collectTab.uncollectedSuccess`));let t=new Set(e);ve(X?Te:Ee,e=>de(e,t)),R(new Set),I(!1)}else g.error(t.message||E(`collectTab.uncollectFailed`))}catch(e){console.error(`取消收藏失败`,e),g.error(E(`collectTab.operationFailed`))}}},$=async()=>{if(D){if(N===`collection`){await Y.fetchNextPage();return}await J.fetchNextPage()}};return h(o,{children:[h(o,{className:`flex justify-between items-center`,children:[m(s,{value:N,onValueChange:e=>{A(e)},children:h(c,{variant:`tag`,children:[m(l,{value:`video`,className:`text-sm`,children:E(`collectTab.video`)}),m(l,{value:`post`,className:`text-sm`,children:E(`collectTab.posts`)}),m(l,{value:`collection`,className:`text-sm`,children:E(`collectTab.collections`)})]})}),N===`collection`?h(o,{className:`flex items-center gap-2 h-6.25`,children:[m(s,{value:P,onValueChange:e=>{M(e)},children:h(c,{variant:`segment`,children:[m(l,{value:`created`,className:`text-sm`,children:E(`collectTab.created`)}),m(l,{value:`subscribed`,className:`text-sm`,children:E(`collectTab.subscribed`)})]})}),x&&m(ue,{href:`/collection/create`,className:`flex items-center justify-center rounded-full bg-bg2 p-1.5`,children:m(ae,{})})]}):T&&m(`button`,{onClick:Oe,className:`text-sm text-text3 h-6.25`,children:E(F?`collectTab.cancel`:`collectTab.edit`)})]}),m(o,{className:`pt-2`,children:N===`video`?m(ce,{list:G,showVideoProgress:!1,loading:J.isFetching,hasMore:J.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q}):N===`post`?m(se,{list:K,loading:J.isFetching,hasMore:J.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q}):m(oe,{list:we,loading:Y.isFetching,hasMore:Y.hasNextPage??!1,loadMore:$,emptyText:E(P===`created`?`collectTab.noCreatedCollections`:`collectTab.noSubscribedCollections`)})}),F&&N!==`collection`&&h(o,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[h(o,{className:`flex items-center gap-2`,children:[m(ee,{checked:L.size===q.size&&q.size>0,onCheckedChange:ke}),m(te,{className:`text-sm text-text1`,children:E(`collectTab.selectAll`)})]}),m(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Z,onClick:Ae,children:E(Z?`collectTab.processing`:`collectTab.delete`)})]})]})}export{T as CollectTab};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
import{gCommunityGetSubscribedCollections as e,gCommunityGetUserCollections as t,gInteractionListCollects as n}from"../../../../../../service/generated/client.mjs";import{HydrationBoundary as r}from"../../../../../../hooks/query/hydration-boundary.mjs";import{defaultPageSize as i}from"../../../utils.mjs";import{CollectTab as a}from"./client.mjs";import{jsx as o}from"react/jsx-runtime";import s from"dayjs";function c({queryKeyPrefix:e,targetUserId:t,resolvedCollectTab:n,resolvedCollectCollectionTab:r,authConfig:i}){if(!t)return[];if(n===`collection`)return[{type:`infinite`,queryKey:r===`subscribed`?[...e,`user-collection-subscribed`,t]:[...e,`user-collection-created`,t],async queryFn(e){return r===`subscribed`?f({targetUserId:t,page:e,authConfig:i}):d({targetUserId:t,page:e,authConfig:i})},initialPageParam:1,getNextPageParam(){}}];let a=n===`post`;return[{type:`infinite`,queryKey:a?[...e,`user-collect-post`,t]:[...e,`user-collect-video`,t],async queryFn(e){return u({targetUserId:t,page:e,contentType:a?2:1,authConfig:i})},initialPageParam:1,getNextPageParam(){}}]}function l({prefetch:e,resolvedCollectTab:t=`video`,resolvedCollectCollectionTab:n=`created`,authConfig:i,...s}){return o(r,{prefetch:e??c({queryKeyPrefix:s.queryKeyPrefix??[],targetUserId:s.userId,resolvedCollectTab:t,resolvedCollectCollectionTab:n,authConfig:i}),children:o(a,{...s})})}async function u({targetUserId:e,page:t,contentType:r,authConfig:a}){let o=await n({user_id:e,folder_id:``,content_type:r,page:t,page_size:i},a),s=o.data.collect_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},c=r===1?(o.data?.video_infos??[]).map(e=>h(e,s)):(o.data?.post_infos??[]).map(e=>m(e,s));return{data:{list:c,total:o.data?.total??c.length}}}async function d({targetUserId:e,page:n,authConfig:r}){let a=await t({page:n,user_id:e,page_size:i},r),o=a.data?.data?.collections??[];return{data:{list:o.map(_),total:a.data?.data?.total??o.length}}}async function f({targetUserId:t,page:n,authConfig:r}){let a=(await e({page:n,user_id:t,page_size:i},r)).data?.data,o=a?.collections??[];return{data:{list:o.map(_),total:a?.total??o.length}}}function p(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function m(e,t){let n=t[e.content_id||``]?.create_time,r=p(e);return{id:e.content_id||``,title:e.content||``,coverImage:r,publishTime:s(n).toDate().getTime()}}function h(e,t){let n=t[e.id||``]?.create_time;return{is_more_link:e.is_more_link,id:e.id||``,title:e.name||``,coverImage:e.img_x||``,duration:0,authorName:e.up_user||e.source_username||``,viewCount:0,publishTime:s(n).toDate().getTime()}}function g(e){let t=p(e);return{contentType:e.source_type,id:e.content_id,title:e.title||e.content,coverImage:t,isVideo:!1,isMovie:!1}}function _(e){let t=(e.contents??[]).slice(0,3).map(g);return{id:e.collection_id||``,title:e.title||``,contentCount:e.content_count??t.length,contents:t}}export{l as CollectTabServer};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{Button as e}from"../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../store/modules/user-store.mjs";import{pInteractionBatchClearBrowse as n}from"../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../ui/checkbox.mjs";import{Tabs as a,TabsList as o,TabsTrigger as s}from"../../../../../ui/tabs.mjs";import{Text as c}from"../../../../../ui/text.mjs";import{useMutation as ee,usePaginated as l,useUpdateRequest as u}from"../../../../../../hooks/query/use-query.mjs";import{useAppContext as d}from"../../../../../../hooks/use-app-context/index.mjs";import{PostList as f}from"../../../../../common/list/post-list/post-list.mjs";import{VideoList as p}from"../../../../../common/list/video-list/video-list.mjs";import{getHistoryData as m,likeContentType as h}from"../../../utils.mjs";import{useEffect as g,useMemo as te,useState as _}from"react";import{jsx as v,jsxs as y}from"react/jsx-runtime";import{toast as b}from"sonner";import{useTranslations as x}from"next-intl";import{parseAsString as S,useQueryState as ne}from"nuqs";function C(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n.title||n.text||``,coverImage:n.cover_image_thumbnail||n.cover_image||n.cover_horizontal_image_thumbnail||void 0,publishTime:r}}function w(e){let{detail:t,content_play_progress:n}=e,{user_info:r,info:i,statics_cnt:a,publish_time:o,parent_content_info:s}=t;return{is_more_link:i.is_more_link,id:e.id,title:i.title||i.text||i.name||``,coverImage:i.cover_image_thumbnail||i.cover_image||i.cover_horizontal_image_thumbnail||``,duration:i.video_duration,progress:n?.percent??0,seriesNum:n?.series_num,authorName:r.name,viewCount:a.browse_cnt,publishTime:o,type:s?.type}}function T(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}const E=[`video`,`post`];function D({targetUserId:D,queryKeyPrefix:O}){let k=x(`components.pages.profile.components.tabs`),A=d()===`renderer`,j=O??[],[M,N]=ne(`historyTab`,S.withDefault(`video`)),P=te(()=>E.includes(M)?M:`video`,[M]),[F,I]=_(!1),[L,R]=_(()=>new Set),z=t(e=>e.userId),B=u(),V=[...j,`user-history-video`],H=[...j,`user-history-post`],U=l({key:V,initialPageParam:1,async queryFn(e){return m({targetUserId:D,page:e,contentType:h.video})},options:{staleTime:0,enabled:A},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=l({key:H,initialPageParam:1,async queryFn(e){return m({targetUserId:D,page:e,contentType:h.post})},options:{staleTime:0,enabled:A},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),G=P===`video`?U:W,K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(w))??[],q=W.data?.pages.flatMap(e=>(e.data?.list??[]).map(C))??[],J=P===`video`?K:q,Y=new Set(J.map(e=>e.id)),X=P===`video`,{mutateAsync:re,isPending:Z}=ee(async e=>await n({app_id:0,user_id:z,content_type:e.contentType,content_ids:e.contentIds})),ie=()=>{I(!F),R(new Set)};g(()=>{R(new Set)},[P]),g(()=>{M!==P&&N(P)},[P,M,N]);let Q=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ae=()=>{L.size===Y.size&&Y.size>0?R(new Set):R(new Set(Y))},oe=async()=>{if(!(L.size===0||Z)){if(!z){b.error(k(`historyTab.pleaseLogin`));return}try{let e=Array.from(L),t=await re({contentIds:e,contentType:X?1:2});if(t.code===0){b.success(k(`historyTab.historyDeletedSuccess`));let t=new Set(e);B(X?V:H,e=>T(e,t,e=>e.id)),R(new Set),I(!1)}else b.error(t.message||k(`historyTab.deleteFailed`))}catch(e){console.error(`删除浏览记录失败`,e),b.error(k(`historyTab.operationFailed`))}}},$=async()=>{A&&await G.fetchNextPage()};return y(r,{children:[y(r,{className:`flex justify-between items-center`,children:[v(a,{value:P,onValueChange:e=>{N(e)},children:y(o,{variant:`tag`,children:[v(s,{value:`video`,className:`text-sm`,children:k(`historyTab.video`)}),v(s,{value:`post`,className:`text-sm`,children:k(`historyTab.posts`)})]})}),v(`button`,{onClick:ie,className:`text-sm text-text3`,children:k(F?`historyTab.cancel`:`historyTab.edit`)})]}),v(r,{className:`pt-2`,children:P===`video`?v(p,{showVideoProgress:!0,list:K,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q}):v(f,{list:q,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q})}),F&&y(r,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[y(r,{className:`flex items-center gap-2`,children:[v(i,{checked:L.size===Y.size&&Y.size>0,onCheckedChange:ae}),v(c,{className:`text-sm text-text1`,children:k(`historyTab.selectAll`)})]}),v(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Z,onClick:oe,children:k(Z?`historyTab.processing`:`historyTab.delete`)})]})]})}export{D as HistoryTab};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
import{HydrationBoundary as e}from"../../../../../../hooks/query/hydration-boundary.mjs";import{getHistoryData as t,likeContentType as n}from"../../../utils.mjs";import{HistoryTab as r}from"./client.mjs";import{jsx as i}from"react/jsx-runtime";function a({queryKeyPrefix:e,targetUserId:r,resolvedHistoryTab:i,authConfig:a}){if(!r)return[];let o=i===`post`;return[{type:`infinite`,queryKey:o?[...e,`user-history-post`]:[...e,`user-history-video`],async queryFn(e){return t({targetUserId:r,page:e,contentType:o?n.post:n.video,authConfig:a})},initialPageParam:1,getNextPageParam(){}}]}function o({prefetch:t,resolvedHistoryTab:n=`video`,authConfig:o,...s}){return i(e,{prefetch:t??a({queryKeyPrefix:s.queryKeyPrefix??[],targetUserId:s.targetUserId,resolvedHistoryTab:n,authConfig:o}),children:i(r,{...s})})}export{o as HistoryTabServer};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{Button as e}from"../../../../../ui/button.mjs";import{useUserStore as t}from"../../../../../../store/modules/user-store.mjs";import{pInteractionUnifiedBatchLikeDislike as n}from"../../../../../../service/generated/client.mjs";import{Box as r}from"../../../../../ui/box.mjs";import{Checkbox as i}from"../../../../../ui/checkbox.mjs";import{Tabs as a,TabsList as o,TabsTrigger as s}from"../../../../../ui/tabs.mjs";import{Text as c}from"../../../../../ui/text.mjs";import{useMutation as l,usePaginated as u,useUpdateRequest as d}from"../../../../../../hooks/query/use-query.mjs";import{useAppContext as ee}from"../../../../../../hooks/use-app-context/index.mjs";import{PostList as f}from"../../../../../common/list/post-list/post-list.mjs";import{VideoList as te}from"../../../../../common/list/video-list/video-list.mjs";import{getLikeData as p,likeContentType as m}from"../../../utils.mjs";import{useEffect as h,useMemo as g,useState as _}from"react";import{jsx as v,jsxs as y}from"react/jsx-runtime";import{toast as b}from"sonner";import{useTranslations as x}from"next-intl";import{parseAsString as ne,useQueryState as S}from"nuqs";function C(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}function w(e){let{detail:t}=e,{info:n,publish_time:r}=t;return{id:e.id,title:n?.name||n?.text||n?.content||``,coverImage:n?.cover_image_thumbnail||n?.cover_image||n?.cover_horizontal_image_thumbnail||``,publishTime:r??0}}function T(e){let{detail:t}=e,{user_info:n,info:r,statics_cnt:i,publish_time:a,parent_content_info:o}=t;return{id:e.id,is_more_link:r?.is_more_link||!1,title:r?.name||r?.text||r?.content||``,coverImage:r?.cover_image_thumbnail||r?.cover_image||r?.cover_horizontal_image_thumbnail||``,duration:r?.video_duration??0,progress:e.content_play_progress?.percent??0,seriesNum:e.content_play_progress?.series_num,authorName:n?.name||``,viewCount:i?.browse_cnt??0,publishTime:a??0,type:o?.type}}const E=[`video`,`post`];function D({targetUserId:D,queryKeyPrefix:re,isMine:O=!1}){let k=x(`components.pages.profile.components.tabs`),A=ee()===`renderer`,j=re??[],[M,N]=S(`likeTab`,ne.withDefault(`video`)),P=g(()=>E.includes(M)?M:`video`,[M]),[F,I]=_(!1),[L,R]=_(()=>new Set),z=t(e=>e.userId),B=d(),V=[...j,`user-like-video`],H=[...j,`user-like-post`],U=u({key:V,initialPageParam:1,async queryFn(e){return p({targetUserId:D,page:e,contentType:m.video})},options:{staleTime:0,enabled:A},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),W=u({key:H,options:{staleTime:0,enabled:A},initialPageParam:1,async queryFn(e){return p({targetUserId:D,page:e,contentType:m.post})},getNextPageParam(e,t){if(!((e?.data?.list??[]).length===0||e?.data?.total===0))return t.length+1}}),G=P===`video`?U:W,K=U.data?.pages.flatMap(e=>(e.data?.list??[]).map(T))??[],q=W.data?.pages.flatMap(e=>(e.data?.list??[]).map(w))??[],J=P===`video`?K:q,Y=new Set(J.map(e=>e.id)),X=P===`video`,{mutateAsync:ie,isPending:Z}=l(async e=>await n({app_id:0,user_id:z,action:`cancel_like`,content_ids:e,content_type:X?1:2})),ae=()=>{I(!F),R(new Set)};h(()=>{R(new Set)},[P]),h(()=>{M!==P&&N(P)},[P,M,N]);let Q=e=>{R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},oe=()=>{L.size===Y.size&&Y.size>0?R(new Set):R(new Set(Y))},se=async()=>{if(!(L.size===0||Z)){if(!z){b.error(k(`likeTab.pleaseLogin`));return}try{let e=Array.from(L),t=await ie(e);if(t.code===0){b.success(k(`likeTab.unlikedSuccess`));let t=new Set(e);B(X?V:H,e=>C(e,t,e=>e.id)),R(new Set),I(!1)}else b.error(t.message||k(`likeTab.unlikeFailed`))}catch(e){console.error(`取消点赞失败`,e),b.error(k(`likeTab.operationFailed`))}}},$=async()=>{A&&await G.fetchNextPage()};return y(r,{children:[y(r,{className:`flex justify-between items-center`,children:[v(a,{value:P,onValueChange:e=>{N(e)},children:y(o,{variant:`tag`,children:[v(s,{value:`video`,className:`text-sm`,children:k(`likeTab.video`)}),v(s,{value:`post`,className:`text-sm`,children:k(`likeTab.posts`)})]})}),O&&v(`button`,{onClick:ae,className:`text-sm text-text3`,children:k(F?`likeTab.cancel`:`likeTab.edit`)})]}),v(r,{className:`pt-2`,children:P===`video`?v(te,{list:K,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,showVideoProgress:!1,onToggleSelection:Q}):v(f,{list:q,loading:G.isFetching,hasMore:G.hasNextPage??!1,loadMore:$,isEditMode:F,selectedIds:L,onToggleSelection:Q})}),F&&y(r,{style:{bottom:`calc(56px + env(safe-area-inset-bottom, 0px))`},className:`flex fixed z-10 left-0 w-full items-center justify-between px-3 py-2 bg-bg1 `,children:[y(r,{className:`flex items-center gap-2`,children:[v(i,{checked:L.size===Y.size&&Y.size>0,onCheckedChange:oe}),v(c,{className:`text-sm text-text1`,children:k(`likeTab.selectAll`)})]}),v(e,{className:`rounded-full py-2.5 h-auto px-6.5`,variant:L.size>0?`default`:`outline`,disabled:L.size===0||Z,onClick:se,children:k(Z?`likeTab.processing`:`likeTab.delete`)})]})]})}export{D as LikeTab};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
import{HydrationBoundary as e}from"../../../../../../hooks/query/hydration-boundary.mjs";import{getLikeData as t,likeContentType as n}from"../../../utils.mjs";import{LikeTab as r}from"./client.mjs";import{jsx as i}from"react/jsx-runtime";function a({queryKeyPrefix:e,targetUserId:r,resolvedLikeTab:i}){if(!r)return[];let a=i===`post`;return[{type:`infinite`,queryKey:a?[...e,`user-like-post`]:[...e,`user-like-video`],async queryFn(e){return t({targetUserId:r,page:e,contentType:a?n.post:n.video})},initialPageParam:1,getNextPageParam(){}}]}function o({prefetch:t,resolvedLikeTab:n=`video`,...o}){return i(e,{prefetch:t??a({queryKeyPrefix:o.queryKeyPrefix??[],targetUserId:o.targetUserId,resolvedLikeTab:n}),children:i(r,{...o})})}export{o as LikeTabServer};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{pCommunityDeleteContent as e}from"../../../../../../service/generated/client.mjs";import{useDeleteRequest as t,useMutation as n,usePaginated as r,useUpdateRequest as i}from"../../../../../../hooks/query/use-query.mjs";import{useAppContext as a}from"../../../../../../hooks/use-app-context/index.mjs";import{DeleteConfirmDialog as o}from"../../../../../common/delete-confirm-dialog/delete-confirm-dialog.mjs";import{UserActivityList as s}from"../../../../../common/list/user-activity-list/user-activity-list.mjs";import{getPublishData as c}from"../../../utils.mjs";import{useState as l}from"react";import{Fragment as u,jsx as d,jsxs as f}from"react/jsx-runtime";import{toast as p}from"sonner";import{useTranslations as m}from"next-intl";function h(e,t,n){if(!e)return e;let r=0,i=e.pages.map(e=>({page:e,filteredList:(e.data?.list??[]).filter(e=>{let i=n(e)??``,a=t.has(i);return a&&(r+=1),!a})}));return{...e,pages:i.map(({page:e,filteredList:t})=>{if(!e.data)return e;let n=typeof e.data.total==`number`?Math.max(0,e.data.total-r):e.data.total;return{...e,data:{...e.data,list:t,total:n}}})}}function g({targetUserId:g,queryKeyPrefix:_,isMine:v=!1}){let y=m(`components.pages.profile.components.tabs`),b=a()===`renderer`,x=_??[],S=t(),C=i(),[w,T]=l(null),{mutateAsync:E,isPending:D}=n(async t=>await e({content_id:t})),{data:O,isFetching:k,fetchNextPage:A,hasNextPage:j}=r({key:[...x,`user-publish`],initialPageParam:1,async queryFn(e){return c({targetUserId:g,page:e})},options:{staleTime:0,enabled:b},getNextPageParam(e,t){let n=e?.data||{},r=n.list||[];if(typeof n.has_more==`boolean`)return n.has_more?t.length+1:void 0;if(!(r.length===0||n.total===0))return t.length+1}}),M=O?.pages.flatMap(e=>(e?.data||{}).list||[])??[];function N(e){T(e)}function P(){T(null)}async function F(){if(!(!w||D))try{await E(w);let e=new Set([w]);C([...x,`user-publish`],t=>h(t,e,e=>e.content_id)),p.success(y(`publishTab.deleteSuccess`)),T(null)}catch(e){console.error(`删除内容失败`,e),p.error(y(`publishTab.deleteFailed`))}}let I=M.map(e=>({...e,isDeleting:D&&w===e.content_id,onDelete:()=>N(e.content_id??``)})),L=async()=>{b&&await A()};function R(){S([...x,`user-publish`]),S(x)}function z(e){console.log(`分享到微信:`,e)}function B(e){console.log(`分享到QQ:`,e)}function V(e){console.log(`分享到朋友圈:`,e)}return f(u,{children:[d(s,{list:I,loading:k,hasMore:j,loadMore:L,canEdit:v,showGroupHeaders:!1,emptyText:y(`publishTab.emptyText`),onActionSuccess:R,onShareWeChat:z,onShareQQ:B,onShareMoments:V}),d(o,{open:!!w,onOpenChange:e=>!e&&P(),onCancel:P,onConfirm:F,isConfirming:D})]})}export{g as PublishTab};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
import{HydrationBoundary as e}from"../../../../../../hooks/query/hydration-boundary.mjs";import{getPublishData as t}from"../../../utils.mjs";import{PublishTab as n}from"./client.mjs";import{jsx as r}from"react/jsx-runtime";function i({queryKeyPrefix:e,targetUserId:n}){return n?[{type:`infinite`,queryKey:[...e,`user-publish`],async queryFn(e){return t({targetUserId:n,page:e})},initialPageParam:1,getNextPageParam(){}}]:[]}function a({prefetch:t,...a}){return r(e,{prefetch:t??i({queryKeyPrefix:a.queryKeyPrefix??[],targetUserId:a.targetUserId}),children:r(n,{...a})})}export{a as PublishTabServer};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{cn as e}from"../../../../../utils/cn.mjs";import{useUserStore as t}from"../../../../../store/modules/user-store.mjs";import{Box as n}from"../../../../ui/box.mjs";import{useLoginModalStore as r}from"../../../../../store/modules/login-modal-store.mjs";import{useEffect as i,useMemo as a,useRef as o}from"react";import{jsx as s}from"react/jsx-runtime";import{useRouter as c}from"next/navigation";import{parseAsString as l,useQueryState as u}from"nuqs";function d({id:d,cookieUserId:f,className:p,children:m}){let h=c(),g=o(null),_=o(!1),v=r(e=>e.isOpen),y=t(e=>e.isLogin),b=t(e=>e.token),x=t(e=>e.userId),S=(y||!!b)&&!!(x||f),C=f||x,w=d==null||!!d&&!!C&&d===C,T=w?C:d?String(d):void 0,[E]=u(`tab`,l.withDefault(`collect`)),D=a(()=>{let e=w?[`collect`,`publish`,`like`,`history`]:[`collect`,`publish`,`like`];return E&&e.includes(E)?E:e[0]},[w,E]),O=a(()=>`profile-scroll:${T||(w?`mine`:`guest`)}:${D}`,[w,D,T]);return i(()=>{if(v&&!S){_.current=!0;return}!v&&_.current&&(_.current=!1,S&&h.refresh())},[S,v,h]),i(()=>{if(typeof window>`u`)return;let e=g.current;if(!e)return;let t=window.sessionStorage.getItem(O),n=t?Number(t):0;Number.isFinite(n)&&n>0&&requestAnimationFrame(()=>{e.scrollTo({top:n})})},[O]),i(()=>{if(typeof window>`u`)return;let e=g.current;if(!e)return;let t=!1,n=()=>{t||(t=!0,requestAnimationFrame(()=>{window.sessionStorage.setItem(O,String(e.scrollTop)),t=!1}))};return e.addEventListener(`scroll`,n,{passive:!0}),()=>{e.removeEventListener(`scroll`,n)}},[O]),s(n,{ref:g,className:e(`profile-container w-full bg-bg1 flex flex-col h-full overflow-y-auto`,p),children:m})}export{d as UserProfileContainer};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{cn as e}from"../../../../../utils/cn.mjs";import{Button as t}from"../../../../ui/button.mjs";import{useUserStore as n}from"../../../../../store/modules/user-store.mjs";import{gUserGetUserInfo as r,gUserViewUserInfo as i,pInteractionFollow as a,pInteractionUnfollow as o}from"../../../../../service/generated/client.mjs";import{Box as s}from"../../../../ui/box.mjs";import{Skeleton as c}from"../../../../ui/skeleton.mjs";import{Text as l}from"../../../../ui/text.mjs";import{useDeleteRequest as u,useMutation as d,useRequest as f,useUpdateRequest as p}from"../../../../../hooks/query/use-query.mjs";import{useAppContext as m}from"../../../../../hooks/use-app-context/index.mjs";import{useLoginModalStore as h}from"../../../../../store/modules/login-modal-store.mjs";import{LeftArrowIcon as g}from"../../../../common/icons/left-arrow.mjs";import{SettingIcon as _}from"../../../../common/icons/setting.mjs";import{UserProfileAvatar as v}from"./user-profile-avatar.mjs";import{UserProfileCoverBackground as y}from"./user-profile-cover-background.mjs";import{useMemo as b}from"react";import{jsx as x,jsxs as S}from"react/jsx-runtime";import{toast as C}from"sonner";import{useTranslations as w}from"next-intl";import T from"next/link";import{useRouter as E}from"next/navigation";const D=`https://guadd-sg-ccs-sing-dev.s3.ap-southeast-1.amazonaws.com/default/default_avatar.png`,O=`/images/mine/img_mine_head_bg.png`;function ee({userId:e,currentUserId:n,isFollowing:r}){let i=w(`components.pages.profile`),{open:s}=h(),c=u(),l=p(),{mutateAsync:f,isPending:m}=d(async e=>a(e)),{mutateAsync:g,isPending:_}=d(async e=>o(e)),v=m||_;async function y(){if(!v){if(!n){s();return}try{if(r){let t=await g({app_id:0,follower_id:n,followee_id:e});t.code===0?(C.success(i(`client.unfollowSuccess`)),b(!1),c([`check-follow`,e]),c([`user-profile`,`profile`,e])):C.error(t.message||i(`client.unfollowFailed`))}else{let t=await f({app_id:0,follower_id:n,followee_id:e});t.code===0?(C.success(i(`client.followSuccess`)),b(!0),c([`check-follow`,e]),c([`user-profile`,`profile`,e])):C.error(t.message||i(`client.followFailed`))}}catch(e){console.error(`关注操作失败`,e),C.error(i(`client.operationFailed`))}}}function b(t){l([`user-profile`,`profile`,e],e=>!e||!e.data?e:{...e,data:{...e.data,is_following:t}})}return x(t,{variant:r?`outline`:`default`,className:`rounded-full disabled:opacity-100`,onClick:y,disabled:v,children:i(v?`client.processing`:r?`client.followed`:`client.follow`)})}function te({showBackButton:t=!0,className:n}){return S(s,{className:e(`flex flex-col relative`,n),children:[S(s,{className:`absolute top-0 p-3 z-10 flex items-center justify-between w-full`,children:[x(c,{className:e(`w-4 h-4 rounded-sm bg-muted`,{invisible:!t})}),x(c,{className:`w-4 h-4 rounded-sm bg-muted`})]}),x(s,{className:`h-33.75`,children:x(c,{className:`h-full w-full rounded-none bg-white/10`})}),S(s,{className:`flex-1 px-3`,children:[S(s,{className:`relative flex justify-end`,children:[x(c,{className:`!absolute bottom-3 left-0 w-22 h-22 rounded-full animate-none`}),S(s,{className:`flex divide-x divide-text1/5 py-4`,children:[S(s,{className:`px-4 flex flex-col items-center gap-1`,children:[x(c,{className:`w-8 h-4`}),x(c,{className:`w-10 h-3`})]}),S(s,{className:`px-4 flex flex-col items-center gap-1`,children:[x(c,{className:`w-8 h-4`}),x(c,{className:`w-10 h-3`})]}),S(s,{className:`px-4 flex flex-col items-center gap-1`,children:[x(c,{className:`w-8 h-4`}),x(c,{className:`w-10 h-3`})]})]})]}),S(s,{className:`flex items-center justify-between gap-1`,children:[x(c,{className:`h-6 w-26`}),x(c,{className:`h-9 w-20 rounded-full`})]}),x(c,{className:`h-4 w-2/3 mt-2`})]})]})}function k({id:a,showBackButton:o=!0,requireLogin:c=!1,cookieToken:u,cookieUserId:d,isEditorPreview:p=!1,className:C}){let k=w(`components.pages.profile`),A=w(`components.pages.profile.components`),ne=m(),j=p||ne===`editor`,re=!j,ie=E(),{open:M}=h(),{isLogin:N,userId:P,token:F}=n(),I=u||F,L=d||P,R=N||!!I,z=R&&!!L,B=a==null||!!a&&!!L&&a===L,ae=!B&&!!a,V=B?[`user-profile`,`mine`]:[`user-profile`,`profile`,a],{data:H}=f(j?[`editor-preview`,...V]:V,()=>a?i({target_user_id:a,user_id:L||a}):r({user_id:a||L}),{staleTime:0,enabled:re&&(!!a||!!L)}),U=b(()=>{let e=H?H.data:void 0;return e?{userId:e.user_id,isFollowing:e.is_following||!1,name:e.nick_name||`User${a??``}`,avatar:e.avatar||D,followingCnt:e.following_count??0,followersCnt:e.follower_count??0,likeCnt:e.like_count??0,signature:e.signature||``,background:e.bg_image||O}:{}},[a,H]),W=c&&B&&!z,G=!z&&ae,K=B&&z&&!W,q=!z,oe={name:k(`client.welcomeToPlanet`),description:k(`client.exploreAdventures`),avatar:D,followingCnt:0,followersCnt:0,likeCnt:0,background:O};function J(){M()}function se(){ie.back()}function Y(e){!B||R||(e.preventDefault(),e.stopPropagation(),M())}let ce=W?x(t,{className:`rounded-full`,size:`lg`,onClick:J,children:k(`client.loginNow`)}):G?x(t,{className:`rounded-full`,size:`lg`,onClick:J,children:k(`client.follow`)}):z?B?x(T,{href:`/edit`,children:x(t,{variant:`outline`,className:`rounded-full`,children:k(`client.editProfile`)})}):x(ee,{userId:a||``,currentUserId:L,isFollowing:U?.isFollowing}):x(t,{className:`rounded-full`,size:`lg`,onClick:J,children:k(`client.loginNow`)}),X=W?oe:U,Z=X.name||``,Q=X.description||X.signature||``,le=X.followingCnt??0,$=X.followersCnt??0,ue=X.likeCnt??0,de=X.avatar||``;return j?x(te,{showBackButton:o,className:C}):S(s,{className:e(`flex flex-col relative`,C),children:[S(s,{className:`absolute top-0 p-3 z-10 flex items-center justify-between w-full`,children:[x(`button`,{onClick:se,className:e({invisible:!o}),children:x(g,{className:`w-4 h-4`})}),x(T,{href:`/settings`,className:e({invisible:!B}),children:x(_,{})})]}),x(y,{isMine:K,src:X.background,onUnauthorizedClick:q?J:void 0}),S(s,{className:`flex-1 px-3`,children:[S(s,{className:`relative flex justify-end`,children:[x(v,{isMine:K,src:de,alt:Z||`avatar`,onUnauthorizedClick:q?J:void 0}),S(s,{className:`flex divide-x divide-text1/5 py-4`,children:[x(T,{href:B?`/followed`:`/followed?user_id=${X.userId}`,onClick:Y,children:S(s,{className:`px-4 flex flex-col items-center`,children:[x(l,{className:`font-bold text-base`,children:le}),x(l,{className:`font-normal text-sm text-text1/66`,children:A(`userProfileHeader.follow`)})]})}),x(T,{href:B?`/fans`:`/fans?user_id=${X.userId}`,onClick:Y,children:S(s,{className:`px-4 flex flex-col items-center`,children:[x(l,{className:`font-bold text-base`,children:$}),x(l,{className:`font-normal text-sm text-text1/66`,children:A(`userProfileHeader.fans`)})]})}),S(s,{className:`px-4 flex flex-col items-center`,children:[x(l,{className:`font-bold text-base`,children:ue}),x(l,{className:`font-normal text-sm text-text1/66`,children:A(`userProfileHeader.likesReceived`)})]})]})]}),S(s,{className:`flex items-center justify-between gap-1`,children:[x(l,{as:`p`,className:`text-text1 text-xl line-clamp-2 font-bold`,children:Z}),ce]}),Q&&x(l,{as:`p`,className:`text-sm py-1 line-clamp-3 text-text1/66`,children:Q})]})]})}export{k as UserProfileHeaderClient};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
import{gUserGetUserInfo as e,gUserViewUserInfo as t}from"../../../../../service/generated/client.mjs";import{getAppContextResolved as n}from"../../../../../hooks/get-app-context.mjs";import{HydrationBoundary as r}from"../../../../../hooks/query/hydration-boundary.mjs";import{UserProfileHeaderClient as i}from"./client.mjs";import{jsx as a}from"react/jsx-runtime";function o({id:n,currentUserId:r,token:i,authConfig:a}){return n||r&&i?[{queryKey:n==null||r&&n===r?[`user-profile`,`mine`]:[`user-profile`,`profile`,n],async queryFn(){return n==null?e({user_id:r},a):t({target_user_id:n,user_id:r||n},a)}}]:[]}async function s({token:e=``,currentUserId:t=``,authConfig:s,...c}){if((await n()).value===`editor`)return a(i,{...c,isEditorPreview:!0});let l=o({id:c.id,currentUserId:t,token:e,authConfig:s});return l.length===0?a(i,{...c}):a(r,{prefetch:l,children:a(i,{...c})})}export{s as UserProfileHeader};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{cn as e}from"../../../../../utils/cn.mjs";import{useUserStore as t}from"../../../../../store/modules/user-store.mjs";import{pUserEditUserInfo as n}from"../../../../../service/generated/client.mjs";import{uploadFile as r}from"../../../../../utils/upload-file.mjs";import{Avatar as i,AvatarFallback as a,AvatarImage as o}from"../../../../ui/avatar.mjs";import{Dialog as s,DialogContent as c}from"../../../../ui/dialog.mjs";import{useDeleteRequest as l}from"../../../../../hooks/query/use-query.mjs";import{ImageCropModal as u}from"../../../../common/image-crop-modal/image-crop-modal.mjs";import{useRef as d,useState as f}from"react";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";import{toast as g}from"sonner";const _=`https://guadd-sg-ccs-sing-dev.s3.ap-southeast-1.amazonaws.com/default/default_avatar.png`,v=[`image/jpeg`,`image/png`];function y(e){let t=e.name.toLowerCase(),n=e.type.toLowerCase();return v.includes(n)||/\.(?:jpg|jpeg|png)$/i.test(t)}function b({isMine:v,src:b,alt:x,onUnauthorizedClick:S}){let C=d(null),{userId:w,setUserInfo:T,userInfo:E}=t(),D=l(),[O,k]=f(!1),[A,j]=f(!1),[M,N]=f(``),[P,F]=f(!1);function I(){if(!P){if(v){k(!0);return}S?.()}}function L(){M&&(URL.revokeObjectURL(M),N(``))}function R(){k(!1)}function z(){P||C.current?.click()}function B(e){let t=e.target.files?.[0];if(t){if(!y(t)){g.error(`仅支持 JPG/JPEG/PNG 格式`),e.target&&(e.target.value=``);return}N(URL.createObjectURL(t)),j(!0),e.target&&(e.target.value=``)}}async function V(e){if(!w){g.error(`请先登录后再试`);return}try{F(!0);let t=await r(new File([e],`avatar.jpg`,{type:`image/jpeg`}),1);await n({user_id:String(w),avatar:t.objectKey}),T({...E,avatar:t.objectKey}),D([`user-profile`,`mine`]),D([`user-edit-info`,String(w)]),k(!1),j(!1),g.success(`更换完成`)}catch(e){console.error(`上传头像失败`,e),g.error(`头像上传失败,请稍后再试`)}finally{L(),F(!1)}}function H(){j(!1),L()}return h(p,{children:[v||S?m(`button`,{type:`button`,className:`!absolute bottom-3 left-0 cursor-pointer focus-within:outline-none`,onClick:I,children:h(i,{className:`w-22 h-22`,children:[m(o,{src:b||_,alt:x||`avatar`}),m(a,{})]})}):h(i,{className:`!absolute bottom-3 left-0 w-22 h-22`,children:[m(o,{src:b||_,alt:x||`avatar`}),m(a,{})]}),m(s,{open:O,onOpenChange:R,children:m(c,{showCloseButton:!1,className:`bg-black !m-0 !p-0 !fixed !inset-0 !w-screen !h-screen !max-w-none !rounded-none !top-0 !left-0 !translate-x-0 !translate-y-0 !transform-none z-[9999] !pointer-events-auto`,children:h(`div`,{className:`relative flex h-full w-full flex-col items-center justify-center`,children:[m(`button`,{type:`button`,className:`absolute left-0 top-0 flex h-14 w-14 items-center justify-center text-white transition-colors hover:text-white/80 focus-within:outline-none`,onClick:R,children:m(`svg`,{className:`w-4 h-4`,xmlns:`http://www.w3.org/2000/svg`,fill:`currentColor`,viewBox:`0 0 16 16`,children:m(`path`,{d:`M14.55.2a.889.889 0 0 1 1.25 1.25l-.06.067L9.255 8l6.483 6.482.06.069a.888.888 0 0 1-1.25 1.25l-.067-.062L8 9.256l-6.482 6.483A.888.888 0 1 1 .26 14.482L6.742 8 .26 1.517.2 1.45A.888.888 0 0 1 1.45.2l.067.062 6.482 6.482L14.482.261l.068-.062Z`})})}),h(i,{className:`w-50 h-50`,children:[m(o,{src:b||_,alt:x||`avatar`}),m(a,{})]}),h(`button`,{type:`button`,className:e(`absolute bottom-8 left-0 right-0 mx-auto flex w-[366px] max-w-[90%] items-center justify-between rounded-3xl bg-white/10 px-3 py-3 transition-colors hover:bg-white/20`,`active:scale-95`),onClick:z,disabled:P,children:[m(`span`,{className:`text-base font-medium text-white`,children:P?`上传中...`:`更换头像`}),h(`svg`,{className:`w-6 h-6 text-white`,xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,children:[m(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z`}),m(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 13a3 3 0 11-6 0 3 3 0 016 0z`})]})]})]})})}),m(`input`,{ref:C,type:`file`,accept:`.jpg,.jpeg,.png,image/jpeg,image/png`,className:`hidden`,onChange:B}),m(u,{open:A,onClose:H,imageSrc:M,onConfirm:V})]})}export{b as UserProfileAvatar};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{useUserStore as e}from"../../../../../store/modules/user-store.mjs";import{pUserUploadUserBgImage as t}from"../../../../../service/generated/client.mjs";import{uploadFile as n}from"../../../../../utils/upload-file.mjs";import{Image as r}from"../../../../ui/image.mjs";import{Box as i}from"../../../../ui/box.mjs";import{useDeleteRequest as a}from"../../../../../hooks/query/use-query.mjs";import{BackgroundPreviewModal as o}from"../../../../common/background-preview-modal/background-preview-modal.mjs";import{showImageCrop as s}from"../../../../common/image-crop/show-image-crop.mjs";import{useState as c}from"react";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";import{toast as f}from"sonner";const p=[`image/jpeg`,`image/png`];function m(e){let t=e.name.toLowerCase(),n=e.type.toLowerCase();return p.includes(n)||/\.(?:jpg|jpeg|png)$/i.test(t)}function h({isMine:p,src:h,onUnauthorizedClick:g}){let _=`/images/mine/img_mine_head_bg.png`,{userId:v,setUserInfo:y,userInfo:b}=e(),x=a(),[S,C]=c(!1),[w,T]=c(!1);return d(l,{children:[u(i,{className:`h-33.75`,children:u(i,{className:`relative h-full w-full`,onClick:()=>{if(p){S||T(!0);return}g?.()},children:u(r,{alt:`cover background`,fill:!0,objectFit:`cover`,className:`pointer-events-none`,src:h||_})})}),u(o,{open:w,onClose:()=>{T(!1)},bgUrl:h||_,onUpload:async()=>{try{let e=document.createElement(`input`);e.type=`file`,e.accept=`.jpg,.jpeg,.png,image/jpeg,image/png`;let r=await new Promise((t,n)=>{e.onchange=e=>{let r=e.target.files?.[0];r?t(r):n(Error(`未选择文件`))},e.oncancel=()=>n(Error(`用户取消`)),e.click()});if(!m(r)){f.error(`仅支持 JPG/JPEG/PNG 格式`);return}C(!0);let i=await n(await s(r,{aspectRatio:430/256,cropShape:`rect`,quality:.92,maxWidth:1920,maxHeight:1920}),1);await t({user_id:String(v),bg_image:i.objectKey}),y({...b,bg_image:i.objectKey}),x([`user-profile`,`mine`]),T(!1),f.success(`更换完成`)}catch(e){console.error(`上传背景图失败`,e),e instanceof Error&&e.message!==`用户取消`&&f.error(`背景图上传失败,请稍后再试`)}finally{C(!1)}}})]})}export{h as UserProfileCoverBackground};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
import{gUserViewUserInfo as e}from"../../../../../service/generated/client.mjs";import{getAppContextResolved as t}from"../../../../../hooks/get-app-context.mjs";import{CollectTabServer as n}from"../tabs/collect-tab/server.mjs";import{HistoryTabServer as r}from"../tabs/history-tab/server.mjs";import{LikeTabServer as i}from"../tabs/like-tab/server.mjs";import{PublishTabServer as a}from"../tabs/publish-tab/server.mjs";import{UserProfileMainShell as o}from"./shell.mjs";import{jsx as s}from"react/jsx-runtime";function c({isMine:e,tab:t}){let n=e?[`collect`,`publish`,`like`,`history`]:[`collect`,`publish`,`like`];return t&&n.includes(t)?t:n[0]}function l(e,t,n){return e&&t.includes(e)?e:n}function u(e,t){return e&&(t===`collect`||t===`like`)}async function d({id:d,showCreateAction:f=!1,requireLogin:p=!1,cookieToken:m,cookieUserId:h,className:g,token:_=``,currentUserId:v=``,authConfig:y,tab:b,likeTab:x,historyTab:S,collectTab:C,collectCollectionTab:w}){let T=(await t()).value===`editor`,E=_||m||``,D=v||h||``,O=!!E,k=d==null||!!D&&d===D,A=!k&&!!d,j=k?D:d?String(d):void 0,M=k?[`user-profile`,`mine`]:[`user-profile`,`profile`,d],N=c({isMine:k,tab:b}),P=`content`;if(p&&k&&!O&&(P=`login-required`),!T&&P===`content`&&u(A,N)){let t=(await e({target_user_id:String(d),user_id:D||String(d)},y))?.data??{},n=Number(t.collections_open??1)>0,r=Number(t.like_open??1)>0;N===`collect`&&!n&&(P=`privacy-collect`),N===`like`&&!r&&(P=`privacy-like`)}let F=T?[]:void 0,I=null;if(P===`content`)switch(N){case`publish`:I=s(a,{isMine:k,targetUserId:j,queryKeyPrefix:M,prefetch:F});break;case`like`:I=s(i,{isMine:k,targetUserId:j,queryKeyPrefix:M,resolvedLikeTab:l(x,[`video`,`post`],`video`),prefetch:F});break;case`history`:I=s(r,{targetUserId:j,queryKeyPrefix:M,resolvedHistoryTab:l(S,[`video`,`post`],`video`),authConfig:y,prefetch:F});break;default:I=s(n,{isMine:k,userId:j,showCreateAction:f&&k,queryKeyPrefix:M,resolvedCollectTab:l(C,[`video`,`post`,`collection`],`video`),resolvedCollectCollectionTab:l(w,[`created`,`subscribed`],`created`),authConfig:y,prefetch:F});break}return s(o,{isMine:k,renderMode:P,className:g,children:I})}export{d as UserProfileMain};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{cn as e}from"../../../../../utils/cn.mjs";import{Button as t}from"../../../../ui/button.mjs";import{Box as n}from"../../../../ui/box.mjs";import{EmptyState as r}from"../../../../ui/empty.mjs";import{Tabs as i,TabsList as a,TabsTrigger as o}from"../../../../ui/tabs.mjs";import{Text as s}from"../../../../ui/text.mjs";import{useLoginModalStore as c}from"../../../../../store/modules/login-modal-store.mjs";import{useEffect as l,useMemo as u}from"react";import{jsx as d,jsxs as f}from"react/jsx-runtime";import{useTranslations as p}from"next-intl";import{parseAsString as m,useQueryState as h}from"nuqs";const g=[`collect`,`publish`,`like`,`history`],_=[`collect`,`publish`,`like`];function v(e){return e?g:_}function y(e,t){let n=v(t);return n.includes(e)?e:n[0]}function b({isMine:g,renderMode:_,className:b,children:x}){let S=p(`components.pages.profile`),{open:C}=c(),w=v(g),[T,E]=h(`tab`,m.withDefault(`collect`)),D=u(()=>y(T,g),[g,T]);l(()=>{T!==D&&E(D,{shallow:!1})},[D,E,T]);let O={collect:S(`client.collect`),publish:S(`client.publish`),like:S(`client.like`),history:S(`client.history`)},k=x;return _===`login-required`?k=f(n,{className:`flex gap-4 flex-col items-center justify-center py-10 text-center`,children:[d(s,{className:`text-base text-text1`,children:S(`client.loginToView`)}),d(t,{size:`lg`,variant:`secondary`,onClick:C,children:S(`client.loginNow`)})]}):_===`privacy-collect`?k=d(r,{type:`no-content`,text:S(`client.collectionNotPublic`)}):_===`privacy-like`&&(k=d(r,{type:`no-content`,text:S(`client.likeNotPublic`)})),f(n,{className:e(b),children:[d(n,{className:`border-b bg-bg1 sticky z-10 top-0 border-text1/5 h-10`,children:d(i,{value:D,onValueChange:e=>{E(e,{shallow:!1})},className:`w-fit`,children:d(a,{variant:`default`,className:`inline-flex h-9`,children:w.map(e=>d(o,{value:e,className:`p-2.5 !text-base !w-fit data-active:!text-lg data-active:font-bold`,children:O[e]},e))})})}),d(`div`,{className:`p-2`,children:k})]})}export{b as UserProfileMainShell};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
|
|
2
|
+
import { PropsWithChildren } from "react";
|
|
2
3
|
import "react/jsx-runtime";
|
|
3
4
|
|
|
4
|
-
//#region components/pages/profile/
|
|
5
|
-
interface
|
|
5
|
+
//#region components/pages/profile/layout.d.ts
|
|
6
|
+
interface UserProfilePageProps {
|
|
6
7
|
/** 用户 ID */
|
|
7
8
|
id?: string;
|
|
8
9
|
/** 是否显示创建入口 */
|
|
@@ -29,4 +30,4 @@ interface UserProfilePageClientProps {
|
|
|
29
30
|
cookieUserId?: string;
|
|
30
31
|
}
|
|
31
32
|
//#endregion
|
|
32
|
-
export {
|
|
33
|
+
export { UserProfilePageProps };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
|
|
2
|
+
"use client";import{UserProfileContainer as e}from"./_components/user-profile-container/client.mjs";import{jsx as t}from"react/jsx-runtime";function n({id:n,cookieUserId:r,className:i,children:a}){return t(e,{id:n,cookieUserId:r,className:i,children:a})}export{n as UserProfilePageLayout};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
|
|
2
|
-
import {
|
|
2
|
+
import { UserProfilePageProps } from "./layout.mjs";
|
|
3
3
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
4
|
|
|
5
5
|
//#region components/pages/profile/page.d.ts
|
|
6
|
-
interface
|
|
6
|
+
interface UserProfilePageComponentProps extends UserProfilePageProps {
|
|
7
7
|
/** 文档展示占位字段,不参与实际渲染。 */
|
|
8
8
|
className?: string;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
11
|
* 用户资料页服务端组件。
|
|
12
12
|
*/
|
|
13
|
-
declare function UserProfilePage(props:
|
|
13
|
+
declare function UserProfilePage(props: UserProfilePageComponentProps): Promise<react_jsx_runtime0.JSX.Element>;
|
|
14
14
|
//#endregion
|
|
15
15
|
export { UserProfilePage };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
import{
|
|
2
|
+
import{UserProfileHeader as e}from"./_components/user-profile-header/server.mjs";import{UserProfileMain as t}from"./_components/user-profile-main/server.mjs";import{UserProfilePageLayout as n}from"./layout.mjs";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{cookies as a}from"next/headers";async function o(o){let{className:s,id:c,showCreateAction:l,showBackButton:u,requireLogin:d,tab:f,likeTab:p,historyTab:m,collectTab:h,collectCollectionTab:g}=o,_=await a(),v=_.get(`token`)?.value||``,y=_.get(`userId`)?.value||``,b={};v&&(b.Authorization=`Bearer ${v}`),y&&(b[`X-User-Id`]=y);let x=Object.keys(b).length>0?{headers:b}:void 0;return i(n,{id:c,cookieUserId:y,className:s,children:[r(e,{id:c,showBackButton:u,requireLogin:d,cookieToken:v,cookieUserId:y,token:v,currentUserId:y,authConfig:x}),r(t,{id:c,showCreateAction:l,requireLogin:d,cookieToken:v,cookieUserId:y,token:v,currentUserId:y,authConfig:x,tab:f,likeTab:p,historyTab:m,collectTab:h,collectCollectionTab:g})]})}export{o as UserProfilePage};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
import{gCommunityGetContentList as e,gInteractionGetBrowseList as t,gInteractionGetLikeList as n}from"../../../service/generated/client.mjs";import r from"dayjs";const i=10,a={video:1,post:2};function o(e
|
|
2
|
+
import{gCommunityGetContentList as e,gInteractionGetBrowseList as t,gInteractionGetLikeList as n}from"../../../service/generated/client.mjs";import r from"dayjs";const i=10,a={video:1,post:2};function o(e){if(e.cover_image)return e.cover_image;let t=``;return e.medias?.find(e=>e?(!e.is_video&&!t&&e.media_url&&(t=e.media_url),!!e.cover_image):!1)?.cover_image||t}function s(e,t){let n=e.name,i=r(t?t?.[e.content_id||``]?.create_time:e.create_time).toDate().getTime(),a=o(e);return{id:e.content_id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.author?.nickname,avatar:e.author?.avatar},info:{name:n,content_id:e.content_id,user_id:e.user_id,content:e.content,tags:e.tags,cover_image:a,like_count:e.like_count,dislike_count:e.dislike_count,comment_count:e.comment_count,share_count:e.share_count,view_count:e.view_count,create_time:e.create_time,update_time:e.update_time,author:e.author?{user_id:e.author.user_id,username:e.author.username,nickname:e.author.nickname,avatar_url:e.author.avatar}:void 0},statics_cnt:{browse_cnt:e.view_count||0},publish_time:i,parent_content_info:{type:0}}}}function c(e,t){let n=e.is_more_link,i=r(t?t?.[e.id||``]?.create_time:e.show_at).toDate().getTime();return{id:e.id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.source_username||e.up_user||e.director||e.actor,avatar:void 0},info:{is_more_link:n,name:e.name,content_id:e.id,content:e.description,tags:e.tags?.map(e=>e.name).filter(e=>!!e),cover_image:e.img_y||e.img_x,create_time:e.show_at},statics_cnt:{browse_cnt:0},publish_time:i,parent_content_info:{type:0}}}}function l(e,t){let n=e.name,i=e.is_more_link,a=t[e.content_id||``].browse_time,s=r(a).toDate().getTime(),c=o(e);return{id:e.content_id||``,content_play_progress:{percent:0,series_num:0},detail:{user_info:{name:e.author?.nickname,avatar:e.author?.avatar},info:{is_more_link:i,name:n||e.content,title:n||e.content,content_id:e.content_id,user_id:e.user_id,content:e.content,tags:e.tags,cover_image:c,like_count:e.like_count,dislike_count:e.dislike_count,comment_count:e.comment_count,share_count:e.share_count,view_count:e.view_count,create_time:e.create_time,update_time:e.update_time,author:e.author?{user_id:e.author.user_id,username:e.author.username,nickname:e.author.nickname,avatar_url:e.author.avatar}:void 0},statics_cnt:{browse_cnt:e.view_count||0},publish_time:s,parent_content_info:{type:0}}}}function u(e,t){let n=e.is_more_link,i=t[e.id||``].browse_time,a=r(i).toDate().getTime(),o=e?.duration||0,s=t[e.id||``]?.browse_duration||0,c=Number(t[e.id||``]?.browse_episode),l=0,u=0;return Number.isNaN(c)||(l=c),o&&s&&(u=Math.min(100,Math.floor(s/o*100))),{id:e.id||``,content_play_progress:{percent:u,series_num:l},detail:{user_info:{name:e.source_username||e.up_user||e.director||e.actor,avatar:void 0},info:{is_more_link:n,name:e.name,content_id:e.id,content:e.description,tags:e.tags?.map(e=>e.name).filter(e=>!!e),cover_image:e.img_y||e.img_x,create_time:e.show_at},statics_cnt:{browse_cnt:0},publish_time:a,parent_content_info:{type:0}}}}async function d({targetUserId:t,page:n,pageSize:r=10}){if(!t)return{data:{list:[],total:0}};let i=await e({user_id:t,page:n,page_size:r}),a=i.data?.data?.contents??[];return{data:{list:a,total:i.data?.data?.total??a.length,has_more:i.data?.data?.has_more?!0:void 0}}}async function f({targetUserId:e,page:t,contentType:r,pageSize:i=10}){if(!e)return{data:{list:[],total:0}};let o=await n({user_id:e,page:t,content_type:r,page_size:i}),l=o.data.like_infos?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},u=r===a.post?(o.data?.post_infos??[]).map(e=>s(e,l)):(o.data?.video_infos??[]).map(e=>c(e,l)),d=o.data?.has_more?!0:void 0;return{data:{list:u,total:o.data?.total??u.length,has_more:d}}}async function p({targetUserId:e,page:n,contentType:r,pageSize:i=10,authConfig:o}){if(!e)return{data:{list:[],total:0}};let s=await t({user_id:e,page:n,page_size:i,content_type:r},o),c=s.data.records?.reduce((e,t)=>(t.content_id&&(e[t.content_id]=t),e),{})||{},d=r===a.post?(s.data?.post_infos??[]).map(e=>l(e,c)):(s.data?.video_infos??[]).map(e=>u(e,c)),f=s.data?.has_more?!0:void 0;return{data:{list:d,total:s.data?.total??d.length,has_more:f}}}export{i as defaultPageSize,p as getHistoryData,f as getLikeData,d as getPublishData,a as likeContentType};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{Button as e}from"../../../ui/button.mjs";import{hashPassword as t}from"../../../../utils/common.mjs";import{useUserStore as n}from"../../../../store/modules/user-store.mjs";import{pUserResetPassword as r,pUserSendResetPasswordEmailCode as i,pUserVerifyResetPasswordEmailCode as a}from"../../../../service/generated/client.mjs";import{Box as o}from"../../../ui/box.mjs";import{Drawer as s,DrawerContent as c,DrawerDescription as l,DrawerHeader as u,DrawerTitle as d}from"../../../ui/drawer.mjs";import{Text as f}from"../../../ui/text.mjs";import p from"../../../ui/legacy/button.mjs";import
|
|
2
|
+
"use client";import{Button as e}from"../../../ui/button.mjs";import{hashPassword as t}from"../../../../utils/common.mjs";import{useUserStore as n}from"../../../../store/modules/user-store.mjs";import{pUserResetPassword as r,pUserSendResetPasswordEmailCode as i,pUserVerifyResetPasswordEmailCode as a}from"../../../../service/generated/client.mjs";import{Box as o}from"../../../ui/box.mjs";import{Drawer as s,DrawerContent as c,DrawerDescription as l,DrawerHeader as u,DrawerTitle as d}from"../../../ui/drawer.mjs";import{Text as f}from"../../../ui/text.mjs";import p from"../../../ui/legacy/button.mjs";import{EyeIcon as m}from"../../../../assets/icons/eye-icon.mjs";import{EyeOffIcon as h}from"../../../../assets/icons/eye-off-icon.mjs";import{HeaderNav as g}from"../../../common/header-nav/client.mjs";import _ from"../../../ui/legacy/input.mjs";import{useEffect as v,useRef as y,useState as b}from"react";import{jsx as x,jsxs as S}from"react/jsx-runtime";import{toast as C}from"sonner";import{useTranslations as w}from"next-intl";function T(T){let E=w(`components.pages.settings.components`),{open:D,onOpenChange:O}=T,k=n(e=>e.userInfo),[A,j]=b(``),M=A.length!==6,N=y(null),[P,F]=b(60),[I,L]=b(!1);async function R(){if(I)return;let e=C.loading(E(`resetPasswordDrawer.sending`));try{let t=await i({user_id:k?.user_id});t.code===0?(C.success(E(`resetPasswordDrawer.codeSentSuccess`),{id:e}),L(!0),F(60)):C.error(t.message||E(`resetPasswordDrawer.sendFailed`),{id:e})}catch(t){console.error(t),C.error(E(`resetPasswordDrawer.sendFailed`),{id:e})}}function z(){H(e=>e===1?e:e+1)}async function B(){let e=C.loading(E(`resetPasswordDrawer.verifying`));try{let t=await a({user_id:k?.user_id,email_code:A});t.code===0?(C.success(E(`resetPasswordDrawer.verifySuccess`),{id:e}),z()):C.error(t.message||E(`resetPasswordDrawer.verifyFailed`),{id:e})}catch(t){console.error(t),C.error(E(`resetPasswordDrawer.verifyFailed`),{id:e})}}v(()=>{if(I)return N.current=setInterval(()=>{F(e=>e<=1?(N.current&&clearInterval(N.current),L(!1),60):e-1)},1e3),()=>{N.current&&clearInterval(N.current)}},[I]);let[V,H]=b(0),[U,W]=b({password:``,confirmPassword:``}),[G,K]=b(!1),[q,J]=b(!1),[Y,X]=b(!1),Z=G||U.password.length<6||U.password.length>18||U.confirmPassword.length<6||U.confirmPassword.length>18||U.password!==U.confirmPassword;async function Q(){if(Z)return;let e=C.loading(E(`resetPasswordDrawer.submitting`));try{K(!0);let n=await r({user_id:k?.user_id,password:t(U.password)});n.code===0?(C.success(E(`resetPasswordDrawer.passwordResetSuccess`),{id:e}),W({password:``,confirmPassword:``}),j(``),O(!1)):C.error(n.message||E(`resetPasswordDrawer.resetFailed`),{id:e})}catch(t){console.error(t),C.error(E(`resetPasswordDrawer.resetFailed`),{id:e})}finally{K(!1)}}let $=S(o,{className:`p-6`,children:[x(o,{children:S(f,{className:`text-text2`,children:[E(`resetPasswordDrawer.boundEmailNotice`),x(f,{className:`dark:text-white text-white`,children:k?.email}),E(`resetPasswordDrawer.verifyHint`)]})}),S(o,{className:`mt-6 space-y-6`,children:[S(o,{className:`flex relative items-center px-2 rounded-[50px] h-16.5 bg-line1 border border-line1`,children:[x(_,{value:A,onChange:e=>j(e)}),x(e,{variant:`link`,disabled:I,onClick:R,children:I?`${P}s ${E(`resetPasswordDrawer.resendAfter`)}`:E(`resetPasswordDrawer.sendCode`)})]}),x(p,{onClick:B,disabled:M,className:`w-full h-15 !rounded-[30px] !text-[18px] font-bold leading-6.5 bg-theme6 disabled:bg-theme6/40 disabled:text-text3 active:opacity-90 !px-0 !py-0`,children:E(`resetPasswordDrawer.verifyEmailButton`)})]})]}),ee=S(o,{className:`p-6`,children:[x(o,{children:x(f,{className:`text-text2`,children:E(`resetPasswordDrawer.setNewPasswordHint`)})}),S(o,{className:`mt-6 space-y-6`,children:[S(o,{className:`flex relative items-center px-2 rounded-[50px] h-16.5 bg-line1 border border-line1`,children:[x(_,{value:U.password,onChange:e=>W(t=>({...t,password:e})),placeholder:E(`resetPasswordDrawer.passwordPlaceholder`),type:q?`text`:`password`,autoComplete:`new-password`,autoCorrect:`off`,autoCapitalize:`none`,spellCheck:!1,"data-lpignore":`true`,"data-1p-ignore":`true`,"data-form-type":`other`,className:`pr-10`}),x(`button`,{type:`button`,onClick:()=>J(!q),className:`absolute right-4 top-1/2 -translate-y-1/2 text-text2 hover:text-text1 transition-colors`,children:x(q?h:m,{className:`w-5 h-5`})})]}),S(o,{className:`flex relative items-center px-2 rounded-[50px] h-16.5 bg-line1 border border-line1`,children:[x(_,{value:U.confirmPassword,onChange:e=>W(t=>({...t,confirmPassword:e})),placeholder:E(`resetPasswordDrawer.confirmPasswordPlaceholder`),type:Y?`text`:`password`,autoComplete:`new-password`,autoCorrect:`off`,autoCapitalize:`none`,spellCheck:!1,"data-lpignore":`true`,"data-1p-ignore":`true`,"data-form-type":`other`,className:`pr-10`}),x(`button`,{type:`button`,onClick:()=>X(!Y),className:`absolute right-4 top-1/2 -translate-y-1/2 text-text2 hover:text-text1 transition-colors`,children:x(Y?h:m,{className:`w-5 h-5`})})]}),x(p,{onClick:Q,disabled:Z,className:`w-full h-15 !rounded-[30px] !text-[18px] font-bold leading-6.5 bg-theme6 disabled:bg-theme6/40 disabled:text-text3 active:opacity-90 !px-0 !py-0`,children:E(G?`resetPasswordDrawer.submitting`:`resetPasswordDrawer.resetPassword`)})]})]});return S(s,{open:D,onOpenChange:O,direction:`right`,handleOnly:!0,children:[S(u,{className:`hidden`,children:[x(d,{children:E(`resetPasswordDrawer.title`)}),x(l,{children:E(`resetPasswordDrawer.title`)})]}),S(c,{className:`!w-full`,children:[x(g,{onBack:()=>O(!1),title:E(`resetPasswordDrawer.title`)}),V===0&&$,V===1&&ee]})]})}export{T as ResetPasswordDrawer};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{cn as e}from"../../../../utils/cn.mjs";import{Button as t}from"../../../ui/button.mjs";import{
|
|
2
|
+
"use client";import{cn as e}from"../../../../utils/cn.mjs";import{Button as t}from"../../../ui/button.mjs";import{AlertDialog as n,AlertDialogAction as r,AlertDialogCancel as i,AlertDialogContent as a,AlertDialogDescription as ee,AlertDialogFooter as o,AlertDialogHeader as s}from"../../../ui/alert-dialog.mjs";import{useUserStore as c}from"../../../../store/modules/user-store.mjs";import{gUserGetUserPrivacySettings as l,pUserUserPrivacySettings as u}from"../../../../service/generated/client.mjs";import{Box as d}from"../../../ui/box.mjs";import{List as f}from"../../../ui/list.mjs";import{Switch as p}from"../../../ui/switch.mjs";import{useDeleteRequest as m,useRequest as h}from"../../../../hooks/query/use-query.mjs";import{useLoginModalStore as g}from"../../../../store/modules/login-modal-store.mjs";import{locales as _,persistLocalePreference as v}from"../../../../i18n.mjs";import{HeaderNav as y}from"../../../common/header-nav/client.mjs";import{ResetPasswordDrawer as b}from"./reset-password-drawer.mjs";import{useEffect as x,useRef as S,useState as C}from"react";import{jsx as w,jsxs as T}from"react/jsx-runtime";import{useLocale as te,useTranslations as E}from"next-intl";import ne from"next/link";function D(e){return{collection:Number(e?.collections_open??0)>0,follower:Number(e?.follower_open??0)>0,following:Number(e?.following_open??0)>0,like:Number(e?.like_open??0)>0}}function O(e){return{collections_open:e.collection?1:0,follower_open:e.follower?1:0,following_open:e.following?1:0,like_open:e.like?1:0}}function k({className:k}={}){let A=E(`components.pages.settings.components`),j=te(),{open:M}=g(),N=c(e=>e.isLogin),P=c(e=>e.token),F=c(e=>e.logout),I=c(e=>e.userId),L=(N||!!P)&&!!I,R=D(),[z,B]=C(R),V=S(R),[H,U]=C(!1),[W,G]=C(!1),K=m(),q=[`user-privacy-settings`,I],J=j===`zh-CN`?`en`:`zh-CN`,Y=_.find(e=>e.code===J)?.name||J,{data:X}=h(q,()=>l({user_id:I}),{enabled:!!I}),Z=X?.data;x(()=>{if(!Z)return;let e=D(Z);B(e),V.current=e},[Z]),x(()=>{V.current=z},[z]);async function re(e){let t=await u({user_id:I,...O(e)});if(t.code!==0)throw Error(t.message||`隐私设置更新失败`);K(q)}async function Q(e,t){let n=V.current,r={...n,[e]:t};B(r);try{await re(r)}catch(e){console.error(`update settings failed:`,e),B(n)}}let ie=m();function ae(){ie([`user-profile`,`mine`]),F(),window.location.href=`/`}function oe(e){G(e)}function se(){G(!0)}function ce(){G(!1)}function le(){G(!1),ae()}function $(e){U(e)}function ue(){if(!L){M();return}U(!0)}function de(e){L||(e.preventDefault(),e.stopPropagation(),M())}function fe(){v(J),window.location.reload()}function pe(e){Q(`collection`,e)}function me(e){Q(`like`,e)}function he(e){Q(`following`,e)}function ge(e){Q(`follower`,e)}return T(d,{className:e(k),children:[w(y,{className:`!bg-bg2`,title:A(`settings.title`)}),w(b,{open:H,onOpenChange:$}),T(d,{className:`flex flex-col gap-2 `,children:[w(f,{className:`bg-bg2 py-2`,children:w(ne,{href:`/feedback`,onClick:de,children:w(f.Item,{title:A(`settings.feedbackTitle`),arrow:!0})})}),w(f,{className:`bg-bg2 py-2`,children:w(f.Item,{title:A(`settings.resetPasswordTitle`),arrow:!0,onClick:ue})}),w(f,{className:`bg-bg2 py-2`,children:w(f.Item,{title:A(`settings.languageTitle`),extra:T(t,{size:`sm`,variant:`outline`,onClick:fe,children:[A(`settings.switchTo`),` `,Y]})})}),L?T(f,{className:`bg-bg2 py-2`,children:[w(f.Item,{title:A(`settings.privacySettingsTitle`),extra:T(`span`,{className:`text-xs`,children:[A(`settings.whenOff`),`,`,A(`settings.listPrivateHint`)]})}),w(f.Item,{className:`pl-8 mt-2`,title:A(`settings.collectionsTitle`),extra:w(p,{checked:z.collection,onCheckedChange:pe})}),w(f.Item,{className:`pl-8`,title:A(`settings.like`),extra:w(p,{checked:z.like,onCheckedChange:me})}),w(f.Item,{className:`pl-8`,title:A(`settings.follow`),extra:w(p,{checked:z.following,onCheckedChange:he})}),w(f.Item,{className:`pl-8`,title:A(`settings.followersTitle`),extra:w(p,{checked:z.follower,onCheckedChange:ge})})]}):null]}),H||!L?null:w(d,{className:`fixed bottom-0 w-full left-0`,children:w(t,{className:`h-auto text-base py-4 w-full`,variant:`secondary`,onClick:se,children:A(`settings.button`)})}),w(n,{open:W,onOpenChange:oe,children:T(a,{size:`sm`,children:[w(s,{children:w(ee,{children:A(`settings.logoutConfirmMessage`)})}),T(o,{children:[w(i,{onClick:ce,children:A(`settings.cancel`)}),w(r,{onClick:le,children:A(`settings.confirm`)})]})]})})]})}export{k as Settings};
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
|
|
2
|
+
import { VideoDetailMaterialConfig } from "./video-detail-client.mjs";
|
|
2
3
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
4
|
|
|
4
5
|
//#region components/pages/video-detail/page.d.ts
|
|
5
6
|
declare function VideoDetailPage({
|
|
6
7
|
params,
|
|
7
|
-
isWebView
|
|
8
|
+
isWebView,
|
|
9
|
+
materialConfig
|
|
8
10
|
}: {
|
|
9
11
|
params: Promise<{
|
|
10
12
|
level: string[];
|
|
11
13
|
}>;
|
|
12
14
|
isWebView?: boolean;
|
|
15
|
+
materialConfig?: VideoDetailMaterialConfig[];
|
|
13
16
|
}): Promise<react_jsx_runtime0.JSX.Element>;
|
|
14
17
|
//#endregion
|
|
15
18
|
export { VideoDetailPage };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
import{
|
|
2
|
+
import{gContentGetVideoDetail as e}from"../../../service/generated/client.mjs";import{HydrationBoundary as t}from"../../../hooks/query/hydration-boundary.mjs";import{normalizeEpisodeNumber as n,warmupProcessM3u8Auto as r}from"../../common/video-player/process-m3u8-cache.mjs";import{revalidate as i}from"../../../constants/revalidate.mjs";import{DetailStructuredData as a}from"../../biz/business/detail/detail-structured-data.mjs";import o from"./video-detail-client.mjs";import{Fragment as s,jsx as c,jsxs as l}from"react/jsx-runtime";async function u({params:u,isWebView:d=!1,materialConfig:f}){let{level:p}=await u,m=p?.[0]||``,h=p.findIndex(e=>e===`episode`),g=n(h>=0?p?.[h+1]:void 0,1),_=null,v=null;if(m){_=await e({id:m},{revalidate:i.TIME});let t=_?.data?.video;t&&typeof t==`object`&&(await r(t.links,g),v={...t,mid:t.mid||t.id||``,content_type:0,episode_cnt:t.links?.length||0})}return l(s,{children:[v&&c(a,{information:v,detailId:m}),c(t,{prefetch:m&&_?[{queryKey:[`video-detail`,m],queryFn:()=>Promise.resolve(_)}]:[],children:c(o,{detailId:m,isWebView:d,materialConfig:f})})]})}export{u as default};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
import { videoDetailMaterials } from "../../biz/business/detail/materials/registry.mjs";
|
|
3
|
+
import "react/jsx-runtime";
|
|
4
|
+
|
|
5
|
+
//#region components/pages/video-detail/video-detail-client.d.ts
|
|
6
|
+
type VideoDetailMaterialName = keyof typeof videoDetailMaterials;
|
|
7
|
+
interface VideoDetailMaterialConfig {
|
|
8
|
+
id: string;
|
|
9
|
+
componentName: VideoDetailMaterialName;
|
|
10
|
+
props?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { VideoDetailMaterialConfig };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{cn as e}from"../../../utils/cn.mjs";import t from"../../../utils/get-res-url.mjs";import{decryptImageToUint8Array as n}from"../../../utils/decrypt-image-client.mjs";import{gContentGetAppChannels as r,
|
|
2
|
+
"use client";import{cn as e}from"../../../utils/cn.mjs";import t from"../../../utils/get-res-url.mjs";import{decryptImageToUint8Array as n}from"../../../utils/decrypt-image-client.mjs";import{gContentGetAppChannels as r,gContentGetVideoDetail as i,pInteractionBrowse as a}from"../../../service/generated/client.mjs";import{uint8ArrayToBase64 as o}from"../../../utils/uint8.mjs";import{EmptyState as s}from"../../ui/empty.mjs";import{useRequest as c}from"../../../hooks/query/use-query.mjs";import{useKeepAliveEffect as l,useKeepAliveState as u}from"../../common/keep-scroll-position/index.mjs";import{apiCollectClick as d}from"../../../utils/api-collect.mjs";import{batchQueryContentInteractions as f}from"../../../hooks/use-content-operate.mjs";import{queryKey as ee}from"../../../constants/query-key.mjs";import te from"../../biz/business/search-bar/variants/detail-search-bar/index.mjs";import{resolveMaterialProps as p,videoDetailMaterials as m}from"../../biz/business/detail/materials/registry.mjs";import{DetailHero as ne}from"../../biz/business/detail/video-hero.mjs";import{Fragment as re,useCallback as h,useEffect as g,useMemo as _}from"react";import{Fragment as v,jsx as y,jsxs as b}from"react/jsx-runtime";import{useTranslations as x}from"next-intl";import{useParams as ie,useSearchParams as S}from"next/navigation";const C=[{id:`detail-info`,componentName:`video-detail-info`,props:{}},{id:`detail-actions`,componentName:`video-detail-actions`,props:{}},{id:`detail-recommend`,componentName:`video-detail-recommend`,props:{rows:2}}];function w({detailId:d,initialInformation:w,isWebView:T=!1,materialConfig:E}){let D=x(`components.pages.videoDetail`),O=ie(),ae=S(),k=O.level,A=Array.isArray(k)?k:typeof k==`string`?[k]:[],j=A.findIndex(e=>e===`episode`),M=j>=0?A[j+1]:A[2],N=Math.max(1,Number(M)||1),[P,F]=u(`detail-current-series-num-${d}`,N);g(()=>{F(N)},[d,N,F]);let I=Math.max(0,P-1),{data:L}=c(_(()=>[`video-detail`,d],[d]),async()=>d?await i({id:d}):null,{enabled:!!d}),R=_(()=>{let e=L?.data?.video;return!e||typeof e!=`object`?null:{...e,content_type:1,episode_cnt:e.links?.length||0}},[L?.data?.video]),oe=w??R??null,[z,B]=u(`detail-information-${d}`,oe),V=z?.links?.[I]?.id||``,{data:H,isFetching:U,isFetchedAfterMount:W,isSuccess:G}=c(_(()=>[`detail-interaction`,z?.id,z?.content_type,V,P],[V,P,z?.content_type,z?.id]),async()=>!z?.id||typeof z.content_type!=`number`?null:await f([z.id],1),{enabled:T?!1:!!z?.id,staleTime:0,refetchOnMount:`always`,refetchOnWindowFocus:!1}),K=_(()=>{if(!W||U||!G)return 0;let e=H?.interaction_list?.[0]?.browse_record,t=Number(e?.browse_duration||0);if(!Number.isFinite(t)||t<=0)return 0;let n=String(e?.browse_episode||``).trim();if(!n)return t;let r=Number.parseInt(n,10);return Number.isNaN(r)?0:r===P?t:0},[P,H,W,U,G]),[se,ce]=u(`info-detail-active-tab-${d}`,`video`),[q,J]=u(`info-detail-comment-add-count-${d}`,0),[Y,le]=u(`info-detail-comment-total-${d}`,void 0),X=h(async e=>{let t=String(d||``).trim();if(!t)return;let n=e.browse_episode||P,r=Date.now(),i=String(e.browse_key||r);try{await a({app_id:0,content_type:1,content_id:t,browse_duration:Number(e.browse_duration||0),browse_episode:String(n),browse_key:i,browse_page_ts:r})}catch(e){console.error(`上报播放进度失败:`,e)}},[P,d]);g(()=>{!z&&R&&B(R),window.video={[d]:z},window.getVideoInfoAsync=async()=>{let e=z?.links?.[I]?.m3u8_url||``,r=e?`${process.env.NEXT_PUBLIC_API_BASE}/api/content/processM3u8?url=${encodeURIComponent(`${t()}/m3f/${e}`)}`:``,i=z?.img_y||z?.img_x||z?.preview_images?.[0]||``,a=``,s=await n(i);return s&&(a=o(s.bytes)),{poster:a,src:r,title:z?.name||``}},window.getVideoBrowseRecordAsync=async()=>{let e=await f([d],1);return e?.interaction_list?.[0]?e.interaction_list[0].browse_record:null},window.reportVideoBrowse=X},[d,I,z,R,B,X]),g(()=>{if(!H?.interaction_list?.[0])return;let e=H.interaction_list[0];B(t=>{if(!t)return t;let n=t.static?.like_cnt,r=typeof n==`number`?n:Number(n||0),i=!!e.is_liked&&r===0;return{...t,like:e.is_liked||!1,dislike:e.is_disliked||!1,collect:e.is_collected||!1,static:i?{...t.static||{},like_cnt:1}:t.static}})},[H,B]);let Z=h(e=>{B(t=>t&&{...t,...e})},[B]);l(()=>{z?.id&&z.id},[z?.id],`detail-page-report-${d}`),g(()=>{!z||typeof window>`u`||window.sensors?.track?.(`detail_page_view`,{object_id:z.id||d,author_id:z.up_user,object_type:z.content_type,object_category:z.content_type,object_tags:z.tags?.map(e=>e.name),block_id:``,page_source:window.location?.pathname||``})},[d,z]),g(()=>{J(0)},[V,J]),_(()=>(typeof Y==`number`?Y:0)+q,[q,Y]);let ue=h(()=>{},[!1,ce]);h(()=>{J(e=>e+1)},[J]),g(()=>{},[!1,ue,z?.id,ae]);let Q=h(e=>{if(T){let t=encodeURIComponent(z?.name||``),n=`/webview/${z?.id}/${t}/episode/${e}`;window.location.href=n}else F(e)},[z?.id,z?.name,T,F]),$=z?.status===`1`,{data:de}=c([ee.CHANNEL],()=>r()),fe=de?.data?.list||[],pe=_(()=>{if(E!==void 0){let e=new Map(C.map(e=>[e.componentName,e]));return E.map(t=>{let n=e.get(t.componentName);return{...n,...t,props:{...n?.props??{},...t.props??{}}}})}return C},[E]),me=h(e=>{if(!z)return null;let t=m[e.componentName];if(!t)return null;let n=t.component,r=p(t,e.props);if(!r.isValid)return y(`div`,{children:`组件配置错误`});let i={};return e.componentName.startsWith(`video-detail-info`)&&(i.information=z,i.currentSeriesNum=P,i.onEpisodeChange=Q,i.isShow=!0),e.componentName===`video-detail-actions`&&(i.information=z,i.onUpdate=Z),e.componentName===`video-detail-recommend`&&(i.detailId=d),y(n,{...r.props,...i})},[P,d,Q,Z,z,!0]);return b(`div`,{className:`w-full min-h-screen bg-bg2 text-text1 ${T?``:`pt-11`}`,children:[!T&&y(`div`,{className:`fixed bg-black top-0 left-0 right-0 z-[1000]`,children:y(te,{data:{list:fe}})}),y(`div`,{className:`mx-auto w-full max-w-[840px] pb-6`,children:b(v,{children:[z&&!$&&y(s,{type:`no-content`,text:D(`videoDetailClient.videoUnavailable`)}),z&&$&&b(v,{children:[!T&&y(ne,{isVideo:!0,information:z,episodeIndex:I,resumeProgressSeconds:K}),y(`div`,{id:`selectPopupPosition`,className:`w-full`}),!1,b(`div`,{className:e(`w-full`,!1),children:[pe.map(e=>y(re,{children:me(e)},e.id)),!1]}),!1]}),!z&&y(s,{type:`no-content`,text:D(`videoDetailClient.videoDeleted`)})]})})]})}export{w as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{cn as e}from"../../utils/cn.mjs";import{Button as t}from"./button.mjs";import"react";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{AlertDialog as i}from"@base-ui/react/alert-dialog";function a({...e}){return n(i.Root,{"data-slot":`alert-dialog`,...e})}function o({...e}){return n(i.Trigger,{"data-slot":`alert-dialog-trigger`,...e})}function s({...e}){return n(i.Portal,{"data-slot":`alert-dialog-portal`,...e})}function c({className:t,...r}){return n(i.Backdrop,{"data-slot":`alert-dialog-overlay`,className:e(`data-[open]:animate-in data-[closed]:animate-out data-[closed]:fade-out-0 data-[open]:fade-in-0 bg-black/10 duration-100 backdrop-blur fixed inset-0 isolate z-[10000]`,t),...r})}function l({className:t,size:a=`default`,...o}){return r(s,{children:[n(c,{}),n(`div`,{className:`fixed inset-0 z-[10000] flex items-center justify-center`,children:n(i.Popup,{"data-slot":`alert-dialog-content`,"data-size":a,className:e(`data-[open]:animate-in data-[closed]:animate-out data-[closed]:fade-out-0 data-[open]:fade-in-0 data-[closed]:zoom-out-95 data-[open]:zoom-in-95 bg-background
|
|
2
|
+
"use client";import{cn as e}from"../../utils/cn.mjs";import{Button as t}from"./button.mjs";import"react";import{jsx as n,jsxs as r}from"react/jsx-runtime";import{AlertDialog as i}from"@base-ui/react/alert-dialog";function a({...e}){return n(i.Root,{"data-slot":`alert-dialog`,...e})}function o({...e}){return n(i.Trigger,{"data-slot":`alert-dialog-trigger`,...e})}function s({...e}){return n(i.Portal,{"data-slot":`alert-dialog-portal`,...e})}function c({className:t,...r}){return n(i.Backdrop,{"data-slot":`alert-dialog-overlay`,className:e(`data-[open]:animate-in data-[closed]:animate-out data-[closed]:fade-out-0 data-[open]:fade-in-0 bg-black/10 duration-100 backdrop-blur fixed inset-0 isolate z-[10000]`,t),...r})}function l({className:t,size:a=`default`,...o}){return r(s,{children:[n(c,{}),n(`div`,{className:`fixed inset-0 z-[10000] flex items-center justify-center`,children:n(i.Popup,{"data-slot":`alert-dialog-content`,"data-size":a,className:e(`data-[open]:animate-in data-[closed]:animate-out data-[closed]:fade-out-0 data-[open]:fade-in-0 data-[closed]:zoom-out-95 data-[open]:zoom-in-95 bg-background gap-4 rounded-xl p-4 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm group/alert-dialog-content grid w-full outline-none focus:outline-none focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0`,t),...o})})]})}function u({className:t,...r}){return n(`div`,{"data-slot":`alert-dialog-header`,className:e(`grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-[data-slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-[data-slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-[data-slot=alert-dialog-media]:grid-rows-[auto_1fr]`,t),...r})}function d({className:t,...r}){return n(`div`,{"data-slot":`alert-dialog-footer`,className:e(`border-text1/10 -mx-4 -mb-4 rounded-b-xl border-t p-4 flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end`,t),...r})}function f({className:t,...r}){return n(`div`,{"data-slot":`alert-dialog-media`,className:e(`bg-muted mb-2 inline-flex w-10 h-10 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 [&>svg:not([class*='w-']):not([class*='h-'])]:w-6 [&>svg:not([class*='w-']):not([class*='h-'])]:h-6`,t),...r})}function p({className:t,...r}){return n(i.Title,{"data-slot":`alert-dialog-title`,className:e(`text-sm font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-[data-slot=alert-dialog-media]/alert-dialog-content:col-start-2`,t),...r})}function m({className:t,...r}){return n(i.Description,{"data-slot":`alert-dialog-description`,className:e(`text-muted-foreground [&>a]:hover:text-foreground text-sm text-balance md:text-pretty [&>a]:underline [&>a]:underline-offset-3`,t),...r})}function h({className:r,...i}){return n(t,{"data-slot":`alert-dialog-action`,className:e(`focus:outline-none focus:ring-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0`,r),...i})}function g({className:r,variant:a=`outline`,size:o=`default`,...s}){return n(i.Close,{"data-slot":`alert-dialog-cancel`,className:e(`focus:outline-none focus:ring-0 focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0`,r),render:n(t,{variant:a,size:o}),...s})}export{a as AlertDialog,h as AlertDialogAction,g as AlertDialogCancel,l as AlertDialogContent,m as AlertDialogDescription,d as AlertDialogFooter,u as AlertDialogHeader,f as AlertDialogMedia,c as AlertDialogOverlay,s as AlertDialogPortal,p as AlertDialogTitle,o as AlertDialogTrigger};
|
|
@@ -6,7 +6,7 @@ import * as class_variance_authority_types0 from "class-variance-authority/types
|
|
|
6
6
|
//#region components/ui/badge.d.ts
|
|
7
7
|
/** badgeVariants 工具定义。 */
|
|
8
8
|
declare const badgeVariants: (props?: ({
|
|
9
|
-
variant?: "
|
|
9
|
+
variant?: "default" | "destructive" | "secondary" | "outline" | "ghost" | "link" | null | undefined;
|
|
10
10
|
} & class_variance_authority_types0.ClassProp) | undefined) => string;
|
|
11
11
|
/** Badge 组件。 */
|
|
12
12
|
declare function Badge({
|
|
@@ -7,7 +7,7 @@ import * as class_variance_authority_types0 from "class-variance-authority/types
|
|
|
7
7
|
//#region components/ui/button.d.ts
|
|
8
8
|
/** buttonVariants 工具定义。 */
|
|
9
9
|
declare const buttonVariants: (props?: ({
|
|
10
|
-
variant?: "
|
|
10
|
+
variant?: "default" | "destructive" | "secondary" | "outline" | "ghost" | "link" | null | undefined;
|
|
11
11
|
size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
|
|
12
12
|
} & class_variance_authority_types0.ClassProp) | undefined) => string;
|
|
13
13
|
/** Button 组件属性。 */
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
|
-
import
|
|
4
|
+
import Image from "next/image";
|
|
5
5
|
|
|
6
6
|
//#region components/ui/image.d.ts
|
|
7
7
|
/** BaseImageProps 属性定义。 */
|
|
8
|
-
type BaseImageProps = Omit<React.ComponentPropsWithoutRef<typeof
|
|
8
|
+
type BaseImageProps = Omit<React.ComponentPropsWithoutRef<typeof Image>, 'className' | 'src' | 'alt' | 'width' | 'height' | 'loading' | 'priority' | 'fill' | 'style'>;
|
|
9
9
|
type CommonImageProps = BaseImageProps & {
|
|
10
10
|
/** 图片地址,支持普通 URL、默认资源路径和加密地址。 */src: string; /** 图片替代文本。 */
|
|
11
11
|
alt?: string; /** 图片类名。 */
|
|
@@ -27,6 +27,6 @@ type ImagePropsWithSize = CommonImageProps & {
|
|
|
27
27
|
/** ImageProps 属性定义。 */
|
|
28
28
|
type ImageProps = ImagePropsWithFill | ImagePropsWithSize;
|
|
29
29
|
/** 图片组件:支持 bnc 解密、默认资源域名拼接与错误占位。 */
|
|
30
|
-
declare function Image(props: ImageProps): react_jsx_runtime0.JSX.Element;
|
|
30
|
+
declare function Image$1(props: ImageProps): react_jsx_runtime0.JSX.Element;
|
|
31
31
|
//#endregion
|
|
32
|
-
export { BaseImageProps, CommonImageProps, Image, ImageProps, ImagePropsWithFill, ImagePropsWithSize };
|
|
32
|
+
export { BaseImageProps, CommonImageProps, Image$1 as Image, ImageProps, ImagePropsWithFill, ImagePropsWithSize };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
"use client";import{cn as e}from"../../utils/cn.mjs";import{Sheet as t,SheetContent as n,SheetHeader as r,SheetTitle as i}from"./sheet.mjs";import{useState as a}from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c({title:c,children:l,open:u,onOpenChange:d,showCloseButton:f=!0,side:p=`bottom`,className:m}){let[
|
|
2
|
+
"use client";import{cn as e}from"../../utils/cn.mjs";import{Sheet as t,SheetContent as n,SheetHeader as r,SheetTitle as i}from"./sheet.mjs";import{useState as a}from"react";import{jsx as o,jsxs as s}from"react/jsx-runtime";function c({title:c,children:l,open:u,onOpenChange:d,showCloseButton:f=!0,side:p=`bottom`,className:m,overlayClassName:h,overlayForceRender:g,portalContainer:_}){let[v,y]=a(!1),b=u!==void 0;return o(t,{open:b?u:v,onOpenChange:e=>{b||y(e),d?.(e)},children:s(n,{side:p,showCloseButton:f,className:e(`!border-0`,m),overlayClassName:h,overlayForceRender:g,portalContainer:_,closeButtonClassName:`!border-0`,children:[c&&o(r,{children:o(i,{children:c})}),l&&o(`div`,{className:`flex-1 overflow-y-auto`,children:l})]})})}export{c as default};
|
|
@@ -42,7 +42,10 @@ type SheetContentProps = Dialog.Popup.Props & {
|
|
|
42
42
|
finalFocus?: Dialog.Popup.Props['finalFocus']; /** 抽屉弹出方向。 */
|
|
43
43
|
side?: 'top' | 'right' | 'bottom' | 'left'; /** 是否显示右上角关闭按钮。 */
|
|
44
44
|
showCloseButton?: boolean; /** 关闭按钮类名。 */
|
|
45
|
-
closeButtonClassName?: string;
|
|
45
|
+
closeButtonClassName?: string; /** 遮罩层类名。 */
|
|
46
|
+
overlayClassName?: string; /** 遮罩层是否强制渲染。 */
|
|
47
|
+
overlayForceRender?: boolean; /** Portal 挂载容器。 */
|
|
48
|
+
portalContainer?: Dialog.Portal.Props['container'];
|
|
46
49
|
};
|
|
47
50
|
/** SheetTrigger 组件属性。 */
|
|
48
51
|
type SheetTriggerProps = Dialog.Trigger.Props & {
|
|
@@ -91,6 +94,9 @@ declare function SheetContent({
|
|
|
91
94
|
side,
|
|
92
95
|
showCloseButton,
|
|
93
96
|
closeButtonClassName,
|
|
97
|
+
overlayClassName,
|
|
98
|
+
overlayForceRender,
|
|
99
|
+
portalContainer,
|
|
94
100
|
...props
|
|
95
101
|
}: SheetContentProps): react_jsx_runtime0.JSX.Element;
|
|
96
102
|
/** SheetHeader 组件。 */
|