65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import type { Language } from '@/domain/language/entities';
|
|
import type { MenuItem } from '@/domain/menu/entities';
|
|
import type { OrderLine } from '@/domain/shared/order-line';
|
|
import { getMenuItemById } from '@/infrastructure/menu/static-menu-data';
|
|
import {
|
|
getCategoryName as resolveCategoryName,
|
|
getMenuItemInclusionNote as resolveMenuItemInclusionNote,
|
|
} from '@/presentation/i18n/menu/category-names';
|
|
import { getMenuItemName as resolveItemName } from '@/presentation/i18n/menu/item-names';
|
|
import type { TranslationBundle } from '@/presentation/i18n/translations';
|
|
|
|
type MenuTextBundle = TranslationBundle & {
|
|
menuDescriptions?: Record<string, string>;
|
|
};
|
|
|
|
export function getMenuItemName(
|
|
lang: Language,
|
|
item: Pick<MenuItem, 'id' | 'name'>,
|
|
): string {
|
|
return resolveItemName(lang, item.id, item.name);
|
|
}
|
|
|
|
export function getMenuItemDescription(
|
|
lang: Language,
|
|
t: TranslationBundle,
|
|
item: Pick<MenuItem, 'id' | 'description'>,
|
|
): string {
|
|
const bundle = t as MenuTextBundle;
|
|
return (
|
|
bundle.menuDescriptions?.[item.id] ??
|
|
(lang === 'en' ? item.description : undefined) ??
|
|
item.description ??
|
|
''
|
|
);
|
|
}
|
|
|
|
export function getCategoryName(
|
|
lang: Language,
|
|
categoryId: string,
|
|
fallback: string,
|
|
): string {
|
|
return resolveCategoryName(lang, categoryId, fallback);
|
|
}
|
|
|
|
export function getMenuItemInclusionNote(lang: Language, categoryId: string): string | undefined {
|
|
return resolveMenuItemInclusionNote(lang, categoryId);
|
|
}
|
|
|
|
export function localizeMenuItem(
|
|
lang: Language,
|
|
t: TranslationBundle,
|
|
item: MenuItem,
|
|
): MenuItem {
|
|
return {
|
|
...item,
|
|
name: getMenuItemName(lang, item),
|
|
description: getMenuItemDescription(lang, t, item),
|
|
};
|
|
}
|
|
|
|
export function localizeOrderLineName(lang: Language, line: OrderLine): string {
|
|
const menuItem = getMenuItemById(line.id);
|
|
if (!menuItem) return line.name;
|
|
return getMenuItemName(lang, menuItem);
|
|
} |