Skip to main content
Version: 5.2

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)? = nil

4.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.0

4.X

PreferencesDietProtocol.content(params: PreferencesDietParameters)
``
where
```swift
PreferencesDietParameters {
public let dietsTag: [CheckableTag]
public let onTogglePreference: (String) -> Void
}
Equipment

3.X

Added in 4.0

4.X

PreferencesEquipmentProtocol.content(params: PreferencesEquipmentParameters)

where

PreferencesEquipmentParameters {
public let equipmentsTag: [CheckableTag]
public let onTogglePreference: (String) -> Void
}
Guest

3.X

Added in 4.0

4.X

PreferencesGuestProtocol.content(params: PreferencesGuestParameters)

where

PreferencesGuestParameters {
public let guests: Int?
public let onGuestChanged: (Int) -> Void
}
Ingredients

3.X

Added in 4.0

4.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.0

4.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.0

4.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.0

4.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
}