Files
mealie/frontend/composables/use-default-activity.ts

64 lines
1.8 KiB
TypeScript

import type { Activity, I18n, TranslationResult } from "~/lib/api/types/activity";
import { ActivityKey } from "~/lib/api/types/activity";
export const DEFAULT_ACTIVITY = "/g/home" as const;
type ActivityRegistry = {
recipes: Activity;
mealplanner: Activity;
shopping_list: Activity;
};
const selectableActivities: ActivityRegistry = {
recipes: {
key: ActivityKey.RECIPES,
route: groupSlug => groupSlug ? `/g/${groupSlug}` : DEFAULT_ACTIVITY,
label: i18n => i18n.t("general.recipes"),
},
mealplanner: {
key: ActivityKey.MEALPLANNER,
route: () => "/household/mealplan/planner/view",
label: i18n => i18n.t("meal-plan.meal-planner"),
},
shopping_list: {
key: ActivityKey.SHOPPING_LIST,
route: () => "/shopping-lists",
label: i18n => i18n.t("shopping-list.shopping-lists"),
},
};
function getDefaultActivityRoute(activityKey?: ActivityKey, groupSlug?: string): string {
if (!activityKey) {
return DEFAULT_ACTIVITY;
}
const route = selectableActivities[activityKey]?.route ?? (() => DEFAULT_ACTIVITY);
return route(groupSlug);
}
function getDefaultActivityLabels(i18n: I18n): TranslationResult[] {
return Object.values(selectableActivities).map(
({ label }) => label(i18n),
);
}
function getActivityKey(i18n: I18n, target: TranslationResult = ""): ActivityKey | undefined {
return Object.values(selectableActivities)
.find(({ label }) => label(i18n) === target)?.key;
}
function getActivityLabel(i18n: I18n, target?: ActivityKey): TranslationResult {
return Object.values(selectableActivities)
.find(({ key }) => key === target)
?.label(i18n) ?? "";
}
export default function useDefaultActivity() {
return {
selectableActivities,
getDefaultActivityRoute,
getDefaultActivityLabels,
getActivityKey,
getActivityLabel,
};
}