import { isObject } from '../utils/object'; /** * 将 Directus 返回的 Homepage 数据转换为 HomepageView 视图模型 * * @param raw: 原始的 Homepage 数据 * @returns 转换后的 HomepageView 对象 * * @example * const view = toHomepageView(rawHomepage); */ export function toHomepageView(raw: Homepage): HomepageView { const carousel = (raw.carousel ?? []) .filter(isObject) .map((item) => item.directus_files_id) .filter(isObject) .map((file) => file.id); const products = (raw.recommend_products ?? []) .filter(isObject) .map((item) => { const trans = item.translations?.[0]; const cover = isObject(item.cover) ? item.cover.id : ''; return { id: item.id, name: trans?.name ?? '', summary: trans?.summary ?? '', cover: cover, } satisfies HomepageProductView; }); const solutions = (raw.recommend_solutions ?? []) .filter(isObject) .map((item) => { const trans = item.translations?.[0]; const cover = isObject(item.cover) ? item.cover.id : ''; return { id: item.id, title: trans?.title ?? '', summary: trans?.summary ?? '', cover: cover, } satisfies HomepageSolutionView; }); return { id: raw.id, carousel: carousel ?? [], recommendProducts: products ?? [], recommendSolutions: solutions ?? [], }; }