Updated View Templates
Catalog
Recipe Card
3.X
recipeCardTemplate: ((Recipe?, Bool, Bool, Bool, @escaping () -> Void, @escaping () -> Void) -> AnyView)?4.X
CatalogRecipeCardProtocol.content(params: CatalogRecipeCardParameters)where
CatalogRecipeCardParameters {
public var recipeCardDimensions: CGSize
public var recipe: Recipe
public var recipePrice: Double
public var numberOfGuests: Int
public var isCurrentlyInBasket: Bool
public var onAddToBasket: (String) -> Void
public var onShowRecipeDetails: (String) -> Void
}
Recipe Card Loading
3.X
recipeCardLoadingViewTemplate: (() -> AnyView)?4.X
RecipeCardLoadingProtocol.content(params: RecipeCardLoadingParameters)where
RecipeCardLoadingParameters {
public let recipeCardDimensions: CGSize
}
Catalog Loading
3.X
catalogLoadingViewTemplate: ((String) -> AnyView)?4.X
LoadingProtocol.content(params: BaseLoadingParameters)where
BaseLoadingParameters {/* empty */}
Catalog Empty
3.X
catalogEmptyViewTemplate: (() -> AnyView)?4.X
EmptyProtocol.content(params: BaseEmptyParameters)where
BaseEmptyParameters {
public let onOptionalCallback: (() -> Void)?
}```
Catalog Search
3.X
catalogSearchViewTemplate: ((@escaping () -> Void, @escaping () -> Void) -> AnyView)?4.X
SearchProtocol.content(params: SearchParameters)where
SearchParameters {
public let searchText: `Binding<String>`
public let onApply: () -> Void
}
Catalog Recipe No Results
3.X
catalogRecipePageNoResultsViewTemplate: ((String, (() -> Void)?, Bool) -> AnyView)?4.X
CatalogRecipesListNoResultsProtocol.content(params:CatalogRecipesListNoResultsParameters)where
CatalogRecipesListNoResultsParameters {
public let catalogContent: CatalogContent
public let searchText: String
public let onNoResultsRedirect: () -> Void
}```
Catalog Package Row
3.X
catalogPackageRowTemplate: ((CatalogPackage, @escaping (CatalogPackage) -> Void) -> AnyView)?4.X
Removed
Catalog Header
3.X
catalogViewHeaderTemplate: (((() -> Void)?) -> AnyView)?4.X
Removed
Catalog Toolbar
3.X
catalogViewToolbarTemplate: ((Bool, Bool, @escaping () -> Void, @escaping () -> Void,
@escaping () -> Void, @escaping () -> Void, @escaping () -> Void
) -> AnyView)?4.X
CatalogToolbarProtocol.content(params: CatalogToolbarParameters)where
CatalogToolbarParameters {
public let usesPreferences: Bool
public let onFiltersTapped: () -> Void
public let onSearchTapped: () -> Void
public let onFavoritesTapped: () -> Void
public let onPreferencesTapped: () -> Void
}
My Meal Button
3.X
public var myMealButtonEmptyViewTemplate: (() -> AnyView)?4.X
MealsInBasketButtonSuccessProtocol.content(params: MealsInBasketButtonSuccessParameters)where
MealsInBasketButtonSuccessParameters {
public let mealsCount: Int
public let onNavigateToMyMeals: () -> Void
}
Recipes List Title
3.X
recipesListTitleTemplate: ((CatalogPageTitleTemplateParameters) -> AnyView)?4.X
BaseTitleProtocol.content(params: TitleParameters)where
TitleParameters {
public let title: String
public let subtitle: String?
}```
Recipes Category List Title
3.X
recipesListCategoryTitleTemplate: ((CatalogPageTitleTemplateParameters) -> AnyView)?4.X
BaseTitleProtocol.content(params: TitleParameters)where
TitleParameters {
public let title: String
public let subtitle: String?
}```
Recipes Search Title
3.X
recipesListSearchTitleTemplate: ((CatalogPageTitleTemplateParameters) -> AnyView)?4.X
BaseTitleProtocol.content(params: TitleParameters)where
TitleParameters {
public let title: String
public let subtitle: String?
}```
Recipe Modal
3.X
recipeModalTemplate: ((String, RecipeCardVM, Binding<Bool>, Bool, @escaping () -> Void) -> AnyView)? = nil4.X
Removed
Filters
Filters View
3.X
catalogFiltersViewTemplate: AnyView?4.X
Removed
Section
3.X
catalogFiltersSectionTemplate: ((String, Array<CatalogFilterOptions>, @escaping (CatalogFilterOptions) -> Void) -> AnyView)?4.X
FiltersSectionProtocol.content(params: FiltersSectionParameters)where
FiltersSectionParameters {
public let title: String
public let filters: [CatalogFilterOptions]
public let onFilterSelected: (CatalogFilterOptions) -> Void
}
Row
3.X
catalogFilterRowTemplate: ((CatalogFilterOptions, @escaping (CatalogFilterOptions) -> Void) -> AnyView)?4.X
Removed
Favorites
Success
3.X
favoritesSuccessViewTemplate: (([Recipe], @escaping () -> Void) -> AnyView)?4.X
Removed
Empty
3.X
favoritesEmptyViewTemplate: ((@escaping () -> Void) -> AnyView)?4.X
EmptyProtocol.content(params: BaseEmptyParameters)where
BaseEmptyParameters {
public let onOptionalCallback: (() -> Void)?
}```
My Meals
Action Column
3.X
myMealsActionColumnTemplate: ((MyMealsActionColumnTemplateParameters) -> AnyView)?4.X
Removed
Loading
3.X
myMealsLoadingViewTemplate: (() -> AnyView)?4.X
LoadingProtocol.content(params: BaseLoadingParameters)where
BaseLoadingParameters {/* empty */}
Empty
3.X
myMealsEmptyViewTemplate: ((@escaping () -> Void) -> AnyView)?4.X
EmptyProtocol.content(params: BaseEmptyParameters)where
BaseEmptyParameters {
public let onOptionalCallback: (() -> Void)?
}```
Preferences
We have moved to using individual protocols for each section of the Preferences Page
Loading
3.X
preferencesLoadingViewTemplate: (() -> AnyView)?4.X
LoadingProtocol.content(params: BaseLoadingParameters)where
BaseLoadingParameters {/* empty */}
Success
3.X
preferencesSuccessViewTemplate: ((Int, [CheckableTag], [CheckableTag], [CheckableTag], Int, @escaping (Int) -> Void,
@escaping (CheckableTag) -> Void, @escaping () -> Void, @escaping () -> Void, @escaping () -> Void) -> AnyView)?4.X
Removed
List
3.X
preferencesListViewTemplate: ((String, String, [CheckableTag], @escaping (CheckableTag) -> Void) -> AnyView)?4.X
Removed
List Item
3.X
preferenceListItemViewTemplate: ((CheckableTag, @escaping (CheckableTag) -> Void) -> AnyView)?4.X
Removed
Tags List
3.X
preferencesTagsListViewTemplate: ((String, String, [CheckableTag], GeometryProxy,
@escaping (CheckableTag) -> Void, @escaping () -> Void) -> AnyView)?4.X
Removed
Add Tag
3.X
addTagViewTemplate: ((@escaping () -> Void) -> AnyView)?4.X
Removed
Tag View
3.X
preferencesTagViewTemplate: ((CheckableTag, @escaping (CheckableTag) -> Void) -> AnyView)?4.X
Removed
Footer
3.X
preferencesFooterView: ((@escaping () -> Void, @escaping () -> Void, Int) -> AnyView)?4.X
PreferencesFooterProtocol.content(params: PreferencesFooterParameters)where
PreferencesFooterParameters {
public let recipesFound: Int?
public let onApplied: () -> Void
public let onClosed: () -> Void
}
Search
3.X
preferencesSearchViewTemplate: ((PreferencesSearchVM, @escaping () -> Void) -> AnyView)?4.X
SearchProtocol.content(params: SearchParameters)where
SearchParameters {
public let searchText: `Binding<String>`
public let onApply: () -> Void
}
Here are some new Templates:
Diet
3.X
Added in 4.04.X
PreferencesDietProtocol.content(params: PreferencesDietParameters)
``
where
```swift
PreferencesDietParameters {
public let dietsTag: [CheckableTag]
public let onTogglePreference: (String) -> Void
}
Equipment
3.X
Added in 4.04.X
PreferencesEquipmentProtocol.content(params: PreferencesEquipmentParameters)where
PreferencesEquipmentParameters {
public let equipmentsTag: [CheckableTag]
public let onTogglePreference: (String) -> Void
}
Guest
3.X
Added in 4.04.X
PreferencesGuestProtocol.content(params: PreferencesGuestParameters)where
PreferencesGuestParameters {
public let guests: Int?
public let onGuestChanged: (Int) -> Void
}
Ingredients
3.X
Added in 4.04.X
PreferencesIngredientsProtocol.content(params: PreferencesIngredientsParameters)where
PreferencesIngredientsParameters {
public let ingredientsTag: [CheckableTag]
public let geometry: GeometryProxy
public let onTogglePreference: (String) -> Void
public let onGoToSearch: () -> Void
}
Item Selector
Current Product
3.X
currentProductTemplate: ( (_: BasketPreviewLine) -> AnyView )?4.X
ItemSelectorSelectedProductProtocol.content(params: ItemSelectorSelectedProductParameters)where
ItemSelectorSelectedProductParameters {
public let product: Item
public let onSeeItemDetails: (String) -> Void
}
Product Options
3.X
productOptionListTemplate: ( (_: [BasketPreviewLine], (BasketPreviewLine, Int) -> Void) -> AnyView )?
4.X
ItemSelectorOptionProductsProtocol.content(params: ItemSelectorOptionProductsParameters)where
ItemSelectorOptionProductsParameters {
public let products: [Item]
public let onItemSelected: (Item) -> Void
public let onSeeItemDetails: (String) -> Void
}
Loading
3.X
itemSelectorLoadingViewTemplate: ( () -> AnyView )?4.X
LoadingProtocol.content(params: BaseLoadingParameters)where
BaseLoadingParameters {/* empty */}
Recipe Details
Title
3.X
recipeDetailsTitleBarTemplate: ((Bool, String) -> AnyView)?4.X
Removed
Header
3.X
recipeDetailsHeaderTemplate: ((String?, String, Int, String, Binding<Bool>,
Bool, String) -> AnyView)?4.X
RecipeDetailsHeaderProtocol.content(params: RecipeDetailsHeaderParameters)where
RecipeDetailsHeaderParameters {
public let mediaURL: String?
public let title: String
public let difficulty: Int
public let totalTime: String
public let preparationTime: String
public let cookingTime: String
public let restingTime: String
public let isLikeEnabled: Bool
public let recipeId: String
public let recipeGuests: Int
public let currentGuests: Int
public let guestUpdating: Bool
public let isForMealPlanner: Bool
public let tags: [RecipeDetailTags]
public let onRecipeDetailsClosed: () -> Void
public let onUpdateGuests: (Int) -> Void
}
Ingredients
3.X
recipeDetailsIngredientsViewTemplate: (([Ingredient], Int, Int, Bool,
@escaping (Int) -> Void) -> AnyView )?4.X
RecipeDetailsIngredientsProtocol.content(params: RecipeDetailsIngredientsParameters)where
RecipeDetailsIngredientsParameters {
public let ingredients: [Ingredient]
public let recipeGuests: Int
public let currentGuests: Int
}
Steps
3.X
recipeDetailStepsViewTemplate: (([RecipeStep]) -> AnyView )?4.X
RecipeDetailsStepsProtocol.content(params: RecipeDetailsStepsParameters)where
RecipeDetailsStepsParameters {
public let activeStep: `Binding<Int>`
public let steps: `[RecipeStep]`
Footer
3.X
recipeDetailFooterTemplate: ((_: Recipe, _: Int, _: Bool, _: @escaping () -> Void,
_: @escaping () -> Void) -> AnyView )?4.X
RecipeDetailsFooterProtocol.content(params: RecipeDetailsFooterParameters)where
RecipeDetailsFooterParameters {
public let totalPriceOfProductsAdded: Double
public let totalPriceOfProductsAddedPerGuest: Double
public let recipeStickerPrice: Double
public let numberOfGuests: Int
public let priceStatus: ComponentUiState
public let ingredientsStatus: IngredientStatus
public let isAddingAllIngredients: Bool
public let cookOnlyMode: Bool
public let currentSelectedTab: SelectedControlPage
public let callToAction: () -> Void
}
Products have moved to The Recipe Details
Added Product
3.X
Added in 4.04.X
RecipeDetailsAddedProductProtocol.content(params: RecipeDetailsAddedProductParameters)where
RecipeDetailsAddedProductParameters {
public let data: RecipeProductData
public let updatingQuantity: Bool
public let onDeleteProduct: () -> Void
public let onChangeProduct: () -> Void
public let updateProductQuantity: (Int) -> Void
}
Unadded Product
3.X
Added in 4.04.X
RecipeDetailsUnaddedProductProtocol.content(params: RecipeDetailsUnaddedProductParameters)where
RecipeDetailsUnaddedProductParameters {
public let data: RecipeProductData
public let onAddProduct: () -> Void
public let onIgnoreProduct: () -> Void
public let onChooseProduct: () -> Void
}```
Ignored Product
3.X
Added in 4.04.X
RecipeDetailsIgnoredProductProtocol.content(params: RecipeDetailsIgnoredProductParameters)where
RecipeDetailsIgnoredProductParameters {
public let ingredientName: String
public let ingredientQuantity: String?
public let ingredientUnit: String?
public let guestsCount: Int
public let defaultRecipeGuest: Int
public let onChooseProduct: () -> Void
}