Files
sell/middlelayer/adapters/Mock/mockdata.ts

94 lines
3.0 KiB
TypeScript

import type { DataAdapter } from "../interface";
import type { PageSeo, Page, Navigation, Product } from "../../types/index";
import { generateMockPageConfig } from "./_cms/mockPageConfig";
import { generateMockPages } from "./_cms/mockPage";
import { generateMockNavigation } from "./_cms/mockNavigation";
import { generateRandomProducts } from "./_cms/mockProducts";
import { PageMapper } from "../../mappers/pageMapper";
import { getTranslations } from "./_i18n/mockTranslations";
import type { TranslationsData } from "./_i18n/mockTranslations";
/**
* Mockdata Adapter - verwendet lokale Mock-Daten
*/
export class MockdataAdapter implements DataAdapter {
async getProducts(limit: number = 4): Promise<Product[]> {
return generateRandomProducts(limit);
}
async getProduct(id: string): Promise<Product | null> {
const products = generateRandomProducts(1);
return products[0] ? { ...products[0], id } : null;
}
async getPage(slug: string, locale?: string): Promise<Page | null> {
// Verwende Locale für locale-spezifische Inhalte
const pages = generateMockPages(locale || "de");
const page = pages[slug];
if (!page) return null;
return PageMapper.fromCms(page);
}
async getPages(locale?: string): Promise<Page[]> {
// Verwende Locale für locale-spezifische Inhalte
const pages = generateMockPages(locale || "de");
return PageMapper.fromCmsArray(Object.values(pages));
}
async getPageSeo(locale?: string): Promise<PageSeo> {
// Verwende Locale für locale-spezifische SEO-Daten
const pageConfig = generateMockPageConfig(locale || "de");
return {
title: pageConfig.seoTitle,
description: pageConfig.seoDescription,
metaRobotsIndex: "index",
metaRobotsFollow: "follow",
};
}
async getNavigation(locale?: string): Promise<Navigation> {
// Verwende Locale für locale-spezifische Navigation
const nav = generateMockNavigation(locale || "de");
const pages = generateMockPages(locale || "de");
// Konvertiere die Links zu NavigationLink-Format
const links = nav.links.map((link: any) => {
// Wenn es eine Page ist (hat slug)
if (link.fields.slug) {
const page = pages[link.fields.slug];
if (page) {
return {
slug: page.slug,
name: page.name,
linkName: page.linkName,
url: page.slug,
icon: page.icon,
newTab: false,
};
}
}
// Wenn es ein Link ist
return {
name: link.fields.name || link.fields.linkName,
linkName: link.fields.linkName,
url: link.fields.url,
icon: link.fields.icon,
newTab: link.fields.newTab || false,
};
});
return {
name: nav.name,
internal: nav.internal,
links: links.filter(Boolean),
};
}
async getTranslations(
locale: string = "de",
namespace?: string
): Promise<TranslationsData> {
return getTranslations(locale, namespace);
}
}