mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 02:03:35 -04:00 
			
		
		
		
	* extended query filter to accept nested tables * decoupled timeline api from recipe slug * modified frontend to use simplified events api * fixed nested loop index ghosting * updated existing tests * gave mypy a snack * added tests for nested queries * fixed "last made" render error * decoupled recipe timeline from dialog * removed unused props * tweaked recipe get_all to accept ids * created group global timeline added new timeline page to sidebar reformatted the recipe timeline added vertical option to recipe card mobile * extracted timeline item into its own component * fixed apploader centering * added paginated scrolling to recipe timeline * added sort direction config fixed infinite scroll on dialog fixed hasMore var not resetting during instantiation * added sort direction to user preferences * updated API docs with new query filter feature * better error tracing * fix for recipe not found response * simplified recipe crud route for slug/id added test for fetching by slug/id * made query filter UUID validation clearer * moved timeline menu option below shopping lists --------- Co-authored-by: Hayden <64056131+hay-kot@users.noreply.github.com>
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Ref, useContext } from "@nuxtjs/composition-api";
 | |
| import { useLocalStorage } from "@vueuse/core";
 | |
| 
 | |
| export interface UserPrintPreferences {
 | |
|   imagePosition: string;
 | |
|   showDescription: boolean;
 | |
|   showNotes: boolean;
 | |
| }
 | |
| 
 | |
| export enum ImagePosition {
 | |
|   hidden = "hidden",
 | |
|   left = "left",
 | |
|   right = "right",
 | |
| }
 | |
| 
 | |
| export interface UserRecipePreferences {
 | |
|   orderBy: string;
 | |
|   orderDirection: string;
 | |
|   filterNull: boolean;
 | |
|   sortIcon: string;
 | |
|   useMobileCards: boolean;
 | |
| }
 | |
| 
 | |
| export interface UserShoppingListPreferences {
 | |
|   viewByLabel: boolean;
 | |
| }
 | |
| 
 | |
| export interface UserTimelinePreferences {
 | |
|   orderDirection: string;
 | |
| }
 | |
| 
 | |
| export function useUserPrintPreferences(): Ref<UserPrintPreferences> {
 | |
|   const fromStorage = useLocalStorage(
 | |
|     "recipe-print-preferences",
 | |
|     {
 | |
|       imagePosition: "left",
 | |
|       showDescription: true,
 | |
|       showNotes: true,
 | |
|     },
 | |
|     { mergeDefaults: true }
 | |
|     // we cast to a Ref because by default it will return an optional type ref
 | |
|     // but since we pass defaults we know all properties are set.
 | |
|   ) as unknown as Ref<UserPrintPreferences>;
 | |
| 
 | |
|   return fromStorage;
 | |
| }
 | |
| 
 | |
| export function useUserSortPreferences(): Ref<UserRecipePreferences> {
 | |
|   const { $globals } = useContext();
 | |
| 
 | |
|   const fromStorage = useLocalStorage(
 | |
|     "recipe-section-preferences",
 | |
|     {
 | |
|       orderBy: "name",
 | |
|       orderDirection: "asc",
 | |
|       filterNull: false,
 | |
|       sortIcon: $globals.icons.sortAlphabeticalAscending,
 | |
|       useMobileCards: false,
 | |
|     },
 | |
|     { mergeDefaults: true }
 | |
|     // we cast to a Ref because by default it will return an optional type ref
 | |
|     // but since we pass defaults we know all properties are set.
 | |
|   ) as unknown as Ref<UserRecipePreferences>;
 | |
| 
 | |
|   return fromStorage;
 | |
| }
 | |
| 
 | |
| 
 | |
| export function useShoppingListPreferences(): Ref<UserShoppingListPreferences> {
 | |
|   const fromStorage = useLocalStorage(
 | |
|     "shopping-list-preferences",
 | |
|     {
 | |
|       viewByLabel: false,
 | |
|     },
 | |
|     { mergeDefaults: true }
 | |
|     // we cast to a Ref because by default it will return an optional type ref
 | |
|     // but since we pass defaults we know all properties are set.
 | |
|   ) as unknown as Ref<UserShoppingListPreferences>;
 | |
| 
 | |
|   return fromStorage;
 | |
| }
 | |
| 
 | |
| export function useTimelinePreferences(): Ref<UserTimelinePreferences> {
 | |
|   const fromStorage = useLocalStorage(
 | |
|     "timeline-preferences",
 | |
|     {
 | |
|       orderDirection: "asc",
 | |
|     },
 | |
|     { mergeDefaults: true }
 | |
|     // we cast to a Ref because by default it will return an optional type ref
 | |
|     // but since we pass defaults we know all properties are set.
 | |
|   ) as unknown as Ref<UserTimelinePreferences>;
 | |
| 
 | |
|   return fromStorage;
 | |
| }
 |