mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-30 17:53:31 -04:00 
			
		
		
		
	
		
			
	
	
		
			64 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			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, | ||
|  |   }; | ||
|  | } |