Files
jinshen-website/app/models/mappers/homepageMapper.ts
R2m1liA 06ab63b8e5
All checks were successful
deploy to server / build-and-deploy (push) Successful in 3m9s
fix: 暂时解决首页切换语言时无法正常载入的问题
- 首页切换语言时当Translations为空时fallback为默认值
2025-11-06 13:08:19 +08:00

58 lines
1.6 KiB
TypeScript

/**
* 将 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<HomepageFile>)
.map((item) => item.directus_files_id)
.filter((item) => typeof item === 'string');
const products = (raw.recommend_products ?? [])
.filter(isObject<Product>)
.map((item) => {
const cover = isObject<DirectusFile>(item.cover)
? item.cover.id
: item.cover;
console.log(
'Has empty array in product translations:',
item.translations.length === 0
);
const trans = item.translations?.[0] ?? { name: '', summary: '' };
return {
id: item.id,
name: trans.name,
summary: trans.summary,
cover: cover,
} satisfies HomepageProductView;
});
const solutions = (raw.recommend_solutions ?? [])
.filter(isObject<Solution>)
.map((item) => {
const cover = isObject<DirectusFile>(item.cover)
? item.cover.id
: item.cover;
const trans = item.translations?.[0] ?? { title: '', summary: '' };
return {
id: item.id,
title: trans.title,
summary: trans.summary,
cover: cover,
} satisfies HomepageSolutionView;
});
return {
id: raw.id,
carousel: carousel ?? [],
recommendProducts: products ?? [],
recommendSolutions: solutions ?? [],
};
}