文件操作 - get-design-build.js
返回文件管理
返回主菜单
删除本文件
文件: /home/www/public/wp-content/plugins/extendify/src/AutoLaunch/fetchers/get-design-build.js
编辑文件内容
import { uploadLogo } from '@auto-launch/fetchers/get-logo'; import { getThemeVariation } from '@auto-launch/fetchers/get-variation'; import { getDesignBuildShape, getLogoShape, getPluginsShape, getStyleShape, } from '@auto-launch/fetchers/shape'; import { fetchWithTimeout, retryTwice, setStatus, } from '@auto-launch/functions/helpers'; import { updateOption } from '@auto-launch/functions/wp'; import { useLaunchDataStore } from '@auto-launch/state/launch-data'; import { AI_HOST } from '@constants'; import { digest } from '@shared/api/digest'; import { __ } from '@wordpress/i18n'; import { mutate } from 'swr'; const fallback = null; const headers = { 'Content-Type': 'application/json' }; export const handleDesignBuild = async ({ urlParams }) => { const buildId = urlParams?.['build-id']; if (!buildId) return fallback; // translators: this is for a action log UI. Keep it short setStatus(__('Loading your design', 'extendify-local')); const url = `${AI_HOST}/api/design/${encodeURIComponent(buildId)}`; const response = await retryTwice(() => fetchWithTimeout(url, { headers }), ).catch((error) => { return { ok: false, statusText: error.message, status: 0 }; }); if (!response?.ok) { digest({ error: { message: response.statusText, name: 'FetchError', status: response.status, }, details: { source: 'auto-launch', caller: 'handleDesignBuild' }, }); return fallback; } try { const parsed = getDesignBuildShape.parse(await response.json()); // Stash the site profile const profile = parsed.siteProfile; await updateOption('extendify_site_profile', JSON.stringify(profile)); mutate('siteProfile', { siteProfile: profile }, false); // Stash the site style and variation const style = parsed.siteStyle; const fonts = style.fonts?.heading || style.fonts?.body ? style.fonts : null; const variation = await getThemeVariation( { slug: style.colorPalette, fonts }, { fallback: true }, ); const siteStyle = { ...style, variation }; await updateOption('extendify_site_style', siteStyle); await updateOption('extendify_animation_settings', { type: style.animation ?? 'fade', speed: 'medium', }); mutate('siteStyle', getStyleShape.parse({ siteStyle }), false); // Stash the plugins const sitePlugins = parsed.selectedPlugins; mutate('sitePlugins', getPluginsShape.parse({ sitePlugins }), false); // Stash the logo await uploadLogo(parsed.logoUrl); mutate('siteLogo', getLogoShape.parse({ logoUrl: parsed.logoUrl }), false); const designBuild = { buildId, ...parsed, siteProfile: profile, siteStyle }; // Spreading it here sets it for other state values we override return { designBuild, ...designBuild }; } catch (e) { digest({ error: e, details: { source: 'auto-launch', caller: 'handleDesignBuild::parsing' }, }); console.error('handleDesignBuild:', e); // Drop the build-id so downstream checks (e.g. skipDescription) fallback useLaunchDataStore.setState((s) => ({ urlParams: { ...s.urlParams, 'build-id': '' }, })); return fallback; } }; // Prepend the design build hero; flagged so it skips content regeneration. export const applyDesignBuildHero = (patterns, designBuild) => { if (!designBuild?.patternCode) return patterns; return [ { name: designBuild.patternId, code: designBuild.patternCode, patternTypes: ['hero-header'], contentGenerated: true, }, ...patterns, ]; }; // Reorder pages to match the design build's page order; extras fall to the end. export const applyDesignBuildOrder = (pages, designBuild) => { const order = designBuild?.pages?.map((p) => p.slug) ?? []; if (!order.length) return pages; return [ ...order.map((slug) => pages.find((t) => t.slug === slug)).filter(Boolean), ...pages.filter((t) => !order.includes(t.slug)), ]; }; // Tag non-hero patterns with their aligned design build page slug/name. // For single-page sites mainly export const applyDesignBuildNav = (patterns, designBuild) => { const pages = designBuild?.pages ?? []; if (!pages.length) return patterns; let i = 0; return patterns.map((pattern) => { if (pattern.patternTypes?.includes('hero-header')) return pattern; const page = pages[i++]; if (!page) return pattern; return { ...pattern, navSlug: page.slug, navLabel: page.name }; }); };
修改文件时间
将文件时间修改为当前时间的前一年
删除文件