import { buildPublicWorkStagePath } from '../../routing/appPageRoutes'; import type { SelectionStage } from '../platform-entry/platformEntryTypes'; const MINI_PROGRAM_WEB_VIEW_PAGE_PATH = '/pages/web-view/index'; const MINI_PROGRAM_PUBLIC_WORK_DETAIL_PATH = '/works/detail'; export type PublishShareModalPayload = { title: string; publicWorkCode: string; stage: SelectionStage; workTypeLabel?: string | null; coverImageSrc?: string | null; fallbackCoverImageSrc?: string | null; }; export function buildPublishShareUrl(payload: PublishShareModalPayload) { const sharePath = buildPublicWorkStagePath( payload.stage, payload.publicWorkCode, ); return typeof window === 'undefined' ? sharePath : new URL(sharePath, window.location.origin).href; } export function buildMiniProgramPublishSharePath( payload: PublishShareModalPayload, basePath = MINI_PROGRAM_WEB_VIEW_PAGE_PATH, ) { const [path = MINI_PROGRAM_WEB_VIEW_PAGE_PATH, rawSearch = ''] = basePath.split('?'); const params = new URLSearchParams(rawSearch); const publicWorkCode = payload.publicWorkCode.trim(); if (!params.has('targetPath')) { params.set('targetPath', MINI_PROGRAM_PUBLIC_WORK_DETAIL_PATH); } if (publicWorkCode && !params.has('work')) { params.set('work', publicWorkCode); } const queryString = params.toString(); return queryString ? `${path}?${queryString}` : path; } export function buildPublishShareCopyUrl( payload: PublishShareModalPayload, options: { miniProgramRuntime?: boolean } = {}, ) { return options.miniProgramRuntime ? buildMiniProgramPublishSharePath(payload) : buildPublishShareUrl(payload); } export function buildPublishShareText(payload: PublishShareModalPayload) { const publicWorkCode = payload.publicWorkCode.trim(); const title = payload.title.trim() || '我的作品'; return `邀请你来玩《${title}》\n作品号:${publicWorkCode}\n${buildPublishShareUrl({ ...payload, publicWorkCode, title, })}`; } export function buildPublishShareCardFileName( payload: Pick, ) { const title = payload.title.trim() || '我的作品'; const publicWorkCode = payload.publicWorkCode.trim() || 'share'; const safeTitle = Array.from(title) .filter((char) => !/[\\/:*?"<>|]/u.test(char)) .join('') .replace(/\s+/gu, '-') .slice(0, 28) .trim(); return `${safeTitle || '我的作品'}-${publicWorkCode}.png`; }