mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-08-02 20:15:24 +02:00
Feature/shopping lists second try (#927)
* generate types * use generated types * ui updates * init button link for common styles * add links * setup label views * add delete confirmation * reset when not saved * link label to foods and auto set when adding to shopping list * generate types * use inheritence to manage exception handling * fix schema generation and add test for open_api generation * add header to api docs * move list consilidation to service * split list and list items controller * shopping list/list item tests - PARTIAL * enable recipe add/remove in shopping lists * generate types * linting * init global utility components * update types and add list item api * fix import cycle and database error * add container and border classes * new recipe list component * fix tests * breakout item editor * refactor item editor * update bulk actions * update input / color contrast * type generation * refactor controller dependencies * include food/unit editor * remove console.logs * fix and update type generation * fix incorrect type for column * fix postgres error * fix delete by variable * auto remove refs * fix typo
This commit is contained in:
parent
f794208862
commit
92cf97e401
66 changed files with 2556 additions and 685 deletions
|
@ -49,6 +49,7 @@ export interface CheckAppConfig {
|
|||
emailReady?: boolean;
|
||||
ldapReady?: boolean;
|
||||
baseUrlSet?: boolean;
|
||||
isUpToDate?: boolean;
|
||||
}
|
||||
export interface ChowdownURL {
|
||||
url: string;
|
||||
|
@ -141,11 +142,21 @@ export interface CreateIngredientUnit {
|
|||
export interface IngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
id: number;
|
||||
}
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface CreateIngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
}
|
||||
export interface RecipeStep {
|
||||
id?: string;
|
||||
|
|
|
@ -23,8 +23,8 @@ export interface ReadCookBook {
|
|||
slug?: string;
|
||||
position?: number;
|
||||
categories?: CategoryBase[];
|
||||
id: number;
|
||||
groupId: string;
|
||||
id: number;
|
||||
}
|
||||
export interface RecipeCategoryResponse {
|
||||
name: string;
|
||||
|
@ -98,11 +98,21 @@ export interface CreateIngredientUnit {
|
|||
export interface IngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
id: number;
|
||||
}
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface CreateIngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
}
|
||||
export interface RecipeStep {
|
||||
id?: string;
|
||||
|
@ -163,8 +173,8 @@ export interface RecipeCookBook {
|
|||
slug?: string;
|
||||
position?: number;
|
||||
categories: RecipeCategoryResponse[];
|
||||
id: number;
|
||||
groupId: string;
|
||||
id: number;
|
||||
}
|
||||
export interface SaveCookBook {
|
||||
name: string;
|
||||
|
@ -180,5 +190,6 @@ export interface UpdateCookBook {
|
|||
slug?: string;
|
||||
position?: number;
|
||||
categories?: CategoryBase[];
|
||||
groupId: string;
|
||||
id: number;
|
||||
}
|
||||
|
|
|
@ -6,13 +6,7 @@
|
|||
*/
|
||||
|
||||
export type EventCategory = "general" | "recipe" | "backup" | "scheduled" | "migration" | "group" | "user";
|
||||
export type DeclaredTypes = "General" | "Discord" | "Gotify" | "Pushover" | "Home Assistant";
|
||||
export type GotifyPriority = "low" | "moderate" | "normal" | "high";
|
||||
|
||||
export interface Discord {
|
||||
webhookId: string;
|
||||
webhookToken: string;
|
||||
}
|
||||
export interface Event {
|
||||
id?: number;
|
||||
title: string;
|
||||
|
@ -20,40 +14,10 @@ export interface Event {
|
|||
timeStamp?: string;
|
||||
category?: EventCategory & string;
|
||||
}
|
||||
export interface EventNotificationIn {
|
||||
id?: number;
|
||||
name?: string;
|
||||
type?: DeclaredTypes & string;
|
||||
general?: boolean;
|
||||
recipe?: boolean;
|
||||
backup?: boolean;
|
||||
scheduled?: boolean;
|
||||
migration?: boolean;
|
||||
group?: boolean;
|
||||
user?: boolean;
|
||||
notificationUrl?: string;
|
||||
}
|
||||
export interface EventNotificationOut {
|
||||
id?: number;
|
||||
name?: string;
|
||||
type?: DeclaredTypes & string;
|
||||
general?: boolean;
|
||||
recipe?: boolean;
|
||||
backup?: boolean;
|
||||
scheduled?: boolean;
|
||||
migration?: boolean;
|
||||
group?: boolean;
|
||||
user?: boolean;
|
||||
}
|
||||
export interface EventsOut {
|
||||
total: number;
|
||||
events: Event[];
|
||||
}
|
||||
export interface Gotify {
|
||||
hostname: string;
|
||||
token: string;
|
||||
priority?: GotifyPriority & string;
|
||||
}
|
||||
export interface TestEvent {
|
||||
id?: number;
|
||||
testUrl?: string;
|
||||
|
|
|
@ -179,8 +179,16 @@ export interface GroupEventNotifierUpdate {
|
|||
export interface IngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
id: number;
|
||||
}
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface IngredientUnit {
|
||||
name: string;
|
||||
description?: string;
|
||||
|
@ -188,11 +196,6 @@ export interface IngredientUnit {
|
|||
abbreviation?: string;
|
||||
id: number;
|
||||
}
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface ReadGroupPreferences {
|
||||
privateGroup?: boolean;
|
||||
firstDayOfWeek?: number;
|
||||
|
@ -218,6 +221,59 @@ export interface ReadWebhook {
|
|||
groupId: string;
|
||||
id: number;
|
||||
}
|
||||
export interface RecipeSummary {
|
||||
id?: number;
|
||||
userId?: string;
|
||||
groupId?: string;
|
||||
name?: string;
|
||||
slug?: string;
|
||||
image?: unknown;
|
||||
recipeYield?: string;
|
||||
totalTime?: string;
|
||||
prepTime?: string;
|
||||
cookTime?: string;
|
||||
performTime?: string;
|
||||
description?: string;
|
||||
recipeCategory?: RecipeTag[];
|
||||
tags?: RecipeTag[];
|
||||
tools?: RecipeTool[];
|
||||
rating?: number;
|
||||
orgURL?: string;
|
||||
recipeIngredient?: RecipeIngredient[];
|
||||
dateAdded?: string;
|
||||
dateUpdated?: string;
|
||||
}
|
||||
export interface RecipeTag {
|
||||
name: string;
|
||||
slug: string;
|
||||
}
|
||||
export interface RecipeTool {
|
||||
name: string;
|
||||
slug: string;
|
||||
id?: number;
|
||||
onHand?: boolean;
|
||||
}
|
||||
export interface RecipeIngredient {
|
||||
title?: string;
|
||||
note?: string;
|
||||
unit?: IngredientUnit | CreateIngredientUnit;
|
||||
food?: IngredientFood | CreateIngredientFood;
|
||||
disableAmount?: boolean;
|
||||
quantity?: number;
|
||||
referenceId?: string;
|
||||
}
|
||||
export interface CreateIngredientUnit {
|
||||
name: string;
|
||||
description?: string;
|
||||
fraction?: boolean;
|
||||
abbreviation?: string;
|
||||
}
|
||||
export interface CreateIngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
}
|
||||
export interface SaveInviteToken {
|
||||
usesLeft: number;
|
||||
groupId: string;
|
||||
|
@ -236,9 +292,6 @@ export interface SetPermissions {
|
|||
canInvite?: boolean;
|
||||
canOrganize?: boolean;
|
||||
}
|
||||
/**
|
||||
* Create Shopping List
|
||||
*/
|
||||
export interface ShoppingListCreate {
|
||||
name?: string;
|
||||
}
|
||||
|
@ -253,8 +306,12 @@ export interface ShoppingListItemCreate {
|
|||
unit?: IngredientUnit;
|
||||
foodId?: number;
|
||||
food?: IngredientFood;
|
||||
recipeId?: number;
|
||||
labelId?: string;
|
||||
recipeReferences?: ShoppingListItemRecipeRef[];
|
||||
}
|
||||
export interface ShoppingListItemRecipeRef {
|
||||
recipeId: number;
|
||||
recipeQuantity: number;
|
||||
}
|
||||
export interface ShoppingListItemOut {
|
||||
shoppingListId: string;
|
||||
|
@ -267,38 +324,55 @@ export interface ShoppingListItemOut {
|
|||
unit?: IngredientUnit;
|
||||
foodId?: number;
|
||||
food?: IngredientFood;
|
||||
recipeId?: number;
|
||||
labelId?: string;
|
||||
recipeReferences?: ShoppingListItemRecipeRefOut[];
|
||||
id: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
}
|
||||
/**
|
||||
* Create Shopping List
|
||||
*/
|
||||
export interface ShoppingListItemRecipeRefOut {
|
||||
recipeId: number;
|
||||
recipeQuantity: number;
|
||||
id: string;
|
||||
shoppingListItemId: string;
|
||||
}
|
||||
export interface ShoppingListItemUpdate {
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
isFood?: boolean;
|
||||
note?: string;
|
||||
quantity?: number;
|
||||
unitId?: number;
|
||||
unit?: IngredientUnit;
|
||||
foodId?: number;
|
||||
food?: IngredientFood;
|
||||
labelId?: string;
|
||||
recipeReferences?: ShoppingListItemRecipeRef[];
|
||||
id: string;
|
||||
}
|
||||
export interface ShoppingListOut {
|
||||
name?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
listItems?: ShoppingListItemOut[];
|
||||
recipeReferences: ShoppingListRecipeRefOut[];
|
||||
}
|
||||
export interface ShoppingListRecipeRefOut {
|
||||
id: string;
|
||||
shoppingListId: string;
|
||||
recipeId: number;
|
||||
recipeQuantity: number;
|
||||
recipe: RecipeSummary;
|
||||
}
|
||||
/**
|
||||
* Create Shopping List
|
||||
*/
|
||||
export interface ShoppingListSave {
|
||||
name?: string;
|
||||
groupId: string;
|
||||
}
|
||||
/**
|
||||
* Create Shopping List
|
||||
*/
|
||||
export interface ShoppingListSummary {
|
||||
name?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
/**
|
||||
* Create Shopping List
|
||||
*/
|
||||
export interface ShoppingListUpdate {
|
||||
name?: string;
|
||||
groupId: string;
|
||||
|
|
|
@ -5,55 +5,30 @@
|
|||
/* Do not modify it by hand - just update the pydantic models and then re-run the script
|
||||
*/
|
||||
|
||||
export interface IngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
id: number;
|
||||
}
|
||||
export interface MultiPurposeLabelCreate {
|
||||
name: string;
|
||||
color?: string;
|
||||
}
|
||||
export interface MultiPurposeLabelOut {
|
||||
name: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
shoppingListItems?: ShoppingListItemOut[];
|
||||
foods?: IngredientFood[];
|
||||
}
|
||||
export interface ShoppingListItemOut {
|
||||
shoppingListId: string;
|
||||
checked?: boolean;
|
||||
position?: number;
|
||||
isFood?: boolean;
|
||||
note?: string;
|
||||
quantity?: number;
|
||||
unitId?: number;
|
||||
unit?: IngredientUnit;
|
||||
foodId?: number;
|
||||
food?: IngredientFood;
|
||||
recipeId?: number;
|
||||
labelId?: string;
|
||||
id: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
}
|
||||
export interface IngredientUnit {
|
||||
name: string;
|
||||
description?: string;
|
||||
fraction?: boolean;
|
||||
abbreviation?: string;
|
||||
id: number;
|
||||
}
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface MultiPurposeLabelSave {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
}
|
||||
export interface MultiPurposeLabelUpdate {
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface MultiPurposeLabelUpdate {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
|
|
|
@ -115,11 +115,21 @@ export interface CreateIngredientUnit {
|
|||
export interface IngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
id: number;
|
||||
}
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface CreateIngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
}
|
||||
export interface SavePlanEntry {
|
||||
date: string;
|
||||
|
|
|
@ -41,6 +41,14 @@ export interface CategoryIn {
|
|||
export interface CreateIngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
}
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface CreateIngredientUnit {
|
||||
name: string;
|
||||
|
@ -73,6 +81,9 @@ export interface CreateRecipeByUrlBulk {
|
|||
export interface DeleteRecipes {
|
||||
recipes: string[];
|
||||
}
|
||||
export interface ExportBase {
|
||||
recipes: string[];
|
||||
}
|
||||
export interface ExportRecipes {
|
||||
recipes: string[];
|
||||
exportType?: ExportTypes & string;
|
||||
|
@ -88,6 +99,8 @@ export interface IngredientConfidence {
|
|||
export interface IngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
id: number;
|
||||
}
|
||||
/**
|
||||
|
@ -304,3 +317,7 @@ export interface SlugResponse {}
|
|||
export interface TagIn {
|
||||
name: string;
|
||||
}
|
||||
export interface UnitFoodBase {
|
||||
name: string;
|
||||
description?: string;
|
||||
}
|
||||
|
|
|
@ -10,3 +10,7 @@ export interface ErrorResponse {
|
|||
error?: boolean;
|
||||
exception?: string;
|
||||
}
|
||||
export interface SuccessResponse {
|
||||
message: string;
|
||||
error?: boolean;
|
||||
}
|
||||
|
|
8
frontend/types/api-types/static.ts
Normal file
8
frontend/types/api-types/static.ts
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
/**
|
||||
/* This file was automatically generated from pydantic models by running pydantic2ts.
|
||||
/* Do not modify it by hand - just update the pydantic models and then re-run the script
|
||||
*/
|
||||
|
||||
export interface _Master_ {}
|
|
@ -165,11 +165,21 @@ export interface CreateIngredientUnit {
|
|||
export interface IngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
id: number;
|
||||
}
|
||||
export interface MultiPurposeLabelSummary {
|
||||
name: string;
|
||||
color?: string;
|
||||
groupId: string;
|
||||
id: string;
|
||||
}
|
||||
export interface CreateIngredientFood {
|
||||
name: string;
|
||||
description?: string;
|
||||
labelId?: string;
|
||||
label?: MultiPurposeLabelSummary;
|
||||
}
|
||||
export interface ResetPassword {
|
||||
token: string;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue