Commit Graph

59 Commits

Author SHA1 Message Date
501434bd0e Redesign ingredient list with swipe-to-add grocery action and add-all button
Remove checkbox icons and tap-to-select state from ingredient items. Replace
with bullet points and a small green cart indicator for items already in the
grocery list. Add a full-width "Add All to Grocery List" / "Remove from
Grocery List" button below ingredients. Swipe right on individual ingredients
shows a rounded green/red cart icon to add/remove single items.

Add DE/ES/FR translations for new grocery list button strings.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 03:44:00 +01:00
1536174586 Redesign recipe creation and edit view with Form-based layout and URL import
Replace the single "+" button with a 2-option menu (Create New Recipe / Import
from URL) across RecipeTabView, RecipeListView, and AllRecipesListView. Add
ImportURLSheet for server-side recipe import with loading and error states.

Completely redesign edit mode to use a native Form layout with inline editing
for all sections (metadata, duration, ingredients, instructions, tools,
nutrition) instead of the previous sheet-based EditableListView approach. Move
delete action from edit toolbar to view mode context menu. Add recipe image
display to the edit form.

Refactor RecipeListView and AllRecipesListView to use closure-based callbacks
instead of Binding<Bool> for the create/import actions. Add preloadedRecipeDetail
support to RecipeView.ViewModel for imported recipes.

Add DE/ES/FR translations for all new UI strings.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 03:29:20 +01:00
98c82dc537 Add Apple Reminders integration for grocery list with local mapping persistence
Introduce a GroceryListManager facade that delegates to either the existing
in-app GroceryList or a new RemindersGroceryStore backed by EventKit. Users
choose the mode in Settings; when Reminders mode is active the Grocery List
tab is hidden. Recipe-to-reminder grouping uses a local mapping file
(reminder_mappings.data) instead of polluting the reminder's notes field,
with automatic pruning when reminders are deleted externally.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 02:54:52 +01:00
6824dbea6b Fix settings page dismissing immediately by replacing multiple isPresented navigation destinations with value-based NavigationPath
The settings view was being popped immediately after push because multiple
navigationDestination(isPresented:) modifiers on the same view caused SwiftUI
to reset bindings when appState published changes. Replaced with a single
navigationDestination(for: SidebarDestination.self) using an explicit
NavigationStack(path:). Also fixed @ObservedObject -> @StateObject on
SettingsView.ViewModel, added AllRecipesListView/AllRecipesCategoryCardView,
and added translations for new strings.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 02:20:38 +01:00
c8ddb098d1 Redesign search tab, add category cards, recent recipes, and complete German translations
Overhaul SearchTabView with search history, empty/no-results states, and dynamic
navigation title. Extract CategoryCardView and RecentRecipesSection into standalone
views. Update RecipeTabView, RecipeListView, RecipeCardView, and MainView for the
modernized UI. Add all 12 missing German translations in Localizable.xcstrings.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 01:47:16 +01:00
7c824b492e Modernize networking layer and fix category navigation and recipe list bugs
Network layer:
- Replace static CookbookApi protocol with instance-based CookbookApiProtocol
  using async/throws instead of tuple returns
- Refactor ApiRequest to use URLComponents for proper URL encoding, replace
  print statements with OSLog, and return typed NetworkError cases
- Add structured NetworkError variants (httpError, connectionError, etc.)
- Remove global cookbookApi constant in favor of injected dependency on AppState
- Delete unused RecipeEditViewModel, RecipeScraper, and Scraper playground

Data & model fixes:
- Add custom Decodable for RecipeDetail with safe fallbacks for malformed JSON
- Make Category Hashable/Equatable use only `name` so NavigationSplitView
  selection survives category refreshes with updated recipe_count
- Return server-assigned ID from uploadRecipe so new recipes get their ID
  before the post-upload refresh block executes

View updates:
- Refresh both old and new category recipe lists after upload when category
  changes, mapping empty recipeCategory to "*" for uncategorized recipes
- Raise deployment target to iOS 18, adopt new SwiftUI API conventions
- Clean up alerts, onboarding views, and settings

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 00:47:28 +01:00
VincentMeilinger
6ae9926c41 Code cleanup, translations, show empty categories 2024-03-26 18:13:24 +01:00
VincentMeilinger
d201690332 UI bug fixes (regarding recipe servings adjustment) 2024-03-22 14:31:45 +01:00
VincentMeilinger
7b59c79222 Number formatting settings, recipe ingredient amount calculation 2024-03-20 08:53:58 +01:00
VincentMeilinger
054e222d8e Adjustable recipe ingredient amount 2024-03-18 09:09:49 +01:00
VincentMeilinger
eae72eb0ce Basic ingredient amount adjustment 2024-03-11 20:07:50 +01:00
VincentMeilinger
31a796e8a4 Added localization for success alerts 2024-03-10 16:06:47 +01:00
VincentMeilinger
2c749754f4 Bug fixes and UI polish 2024-03-10 11:56:51 +01:00
VincentMeilinger
dbe626d595 Bug fixes and UI polish 2024-03-07 19:09:39 +01:00
VincentMeilinger
11359e11d4 Recipe edit view polish 2024-03-05 21:42:02 +01:00
VincentMeilinger
b5dbaad9aa Recipe edit UI polish 2024-03-05 08:39:06 +01:00
VincentMeilinger
597477544d Creating and updating recipes works in the new edit view 2024-03-04 11:58:16 +01:00
VincentMeilinger
aa45bbdbd8 Improved Recipe Editing 2024-03-01 17:35:12 +01:00
VincentMeilinger
650df2b67e Updated Duration Picker during Recipe Editing 2024-03-01 15:32:04 +01:00
VincentMeilinger
744ea76a34 Updated RecipeView 2024-03-01 14:17:24 +01:00
VincentMeilinger
d3e0366ce6 New Recipe Edit View 2024-02-18 12:25:18 +01:00
VincentMeilinger
05aff9e43e Login Procedure updated (login via in-app browser) 2024-02-04 16:48:51 +01:00
VincentMeilinger
a6bd25ce3b Code cleanup 2024-02-03 17:51:51 +01:00
VincentMeilinger
93d97ef4dd Localization updates 2024-01-25 23:23:37 +01:00
VincentMeilinger
ba4df088a0 reverted timer in recipe detail for now 2024-01-25 23:07:18 +01:00
VincentMeilinger
48d3da1964 Improved Grocery List 2024-01-24 19:23:59 +01:00
VincentMeilinger
931364c57c Added tabs and a grocery list 2024-01-23 19:02:04 +01:00
VincentMeilinger
c0314abbf7 Timer push notifications 2024-01-11 21:28:12 +01:00
VincentMeilinger
c6c60faf01 Timer plays sound when expired 2024-01-11 20:55:18 +01:00
VincentMeilinger
b069555950 Added a timer view 2024-01-11 11:16:32 +01:00
VincentMeilinger
772ee6b0e0 'Keep Screen Awake'-Setting, Acknowledge used libraries 2024-01-11 10:12:59 +01:00
VincentMeilinger
eb3f11cd17 Version 1.7.1 (updated translations) 2024-01-11 09:40:18 +01:00
VincentMeilinger
d180b96ed8 New app icon and recipe sharing options (pdf and plain text) 2024-01-10 17:52:34 +01:00
VincentMeilinger
3bcf104a5d Search for keywords 2024-01-08 11:24:01 +01:00
Vincent Meilinger
2ed664857b users can now choose between http and https 2024-01-07 17:10:47 +01:00
Vincent Meilinger
5c7ff578c7 Server protocol update (unfinished) 2024-01-06 21:28:52 +01:00
Vicnet
bb68b29bdf Release Candidate Version 1.6 2023-12-15 13:43:56 +01:00
Vicnet
a3fc891d0a Better file caching and update management 2023-12-14 14:11:56 +01:00
Vicnet
899dc20e55 Merged onboarding-flow into main 2023-12-10 11:22:17 +01:00
VincentM
642c31b2af Revert "Merge updated onboarding view" 2023-12-10 11:00:12 +01:00
VincentM
32ea911368 Merge branch 'download-rework' into api-update 2023-12-10 10:56:04 +01:00
Vicnet
22eeb8362d Updated Login Flow 2023-11-29 17:44:10 +01:00
Vicnet
23e1a665df Simpler api endpoints are now integrated into the MainViewModel 2023-11-16 17:53:30 +01:00
Vicnet
17678dea5f Small bug fixes 2023-11-11 15:07:26 +01:00
Vicnet
ccf2612ad4 Spanish localization update 2023-11-11 12:46:11 +01:00
Vicnet
fa00078e5b German localization update 2023-11-11 12:42:26 +01:00
Vicnet
46401edfb9 French localization update 2023-11-11 12:31:00 +01:00
Vicnet
63730732b6 Created RecipeEditViewModel to cleanup RecipeEditView 2023-11-11 12:11:13 +01:00
Vicnet
13b025771c Improved date handling (DurationComponents) 2023-11-11 11:11:08 +01:00
Vicnet
1598d24b00 Improvec scraper error handling, Improved scraper 2023-11-10 16:57:41 +01:00