Add task template suggestions for quick task creation

- Add TaskTemplate model with category grouping support
- Add TaskTemplateApi for fetching templates from backend
- Add TaskSuggestionDropdown component for Android task form
- Add TaskTemplatesBrowserSheet for browsing all templates
- Add TaskSuggestionsView and TaskTemplatesBrowserView for iOS
- Update DataManager to cache task templates
- Update APILayer with template fetch and search methods
- Update TaskFormView (iOS) with template suggestions
- Update AddTaskDialog (Android) with template suggestions
- Update onboarding task view to use templates

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-12-05 09:06:58 -06:00
parent fd8f6d612c
commit 771f5d2bd3
15 changed files with 1585 additions and 83 deletions
+97 -33
View File
@@ -101,6 +101,9 @@
}
}
}
},
"%lld tasks" : {
},
"%lld/%lld tasks selected" : {
"localizations" : {
@@ -112,6 +115,10 @@
}
}
},
"•" : {
"comment" : "A separator between different pieces of information in a text.",
"isCommentAutoGenerated" : true
},
"• 10K+ homeowners" : {
},
@@ -4231,6 +4238,9 @@
"Back to Login" : {
"comment" : "A button label that takes the user back to the login screen.",
"isCommentAutoGenerated" : true
},
"Browse Task Templates" : {
},
"By: %@" : {
"comment" : "A line in the checkout view displaying the name of the contractor who completed a task.",
@@ -4264,6 +4274,9 @@
"Check your spam folder if you don't see it" : {
"comment" : "A description below the \"Send New Code\" button, instructing the user to check their spam folder if they haven't received the verification code.",
"isCommentAutoGenerated" : true
},
"Choose from common home maintenance tasks or create your own below" : {
},
"Choose your plan" : {
@@ -17360,6 +17373,14 @@
"comment" : "A description displayed when a user has no tasks.",
"isCommentAutoGenerated" : true
},
"No Templates Available" : {
"comment" : "A message indicating that there are no task templates available.",
"isCommentAutoGenerated" : true
},
"No Templates Found" : {
"comment" : "A message displayed when no task templates match a search query.",
"isCommentAutoGenerated" : true
},
"or" : {
},
@@ -17714,6 +17735,28 @@
}
}
},
"profile_contact_support" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Contact Support"
}
}
}
},
"profile_contact_support_subtitle" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Get help with your account"
}
}
}
},
"profile_edit_profile" : {
"extractionState" : "manual",
"localizations" : {
@@ -19372,39 +19415,6 @@
}
}
},
"profile_support" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Support"
}
}
}
},
"profile_contact_support" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Contact Support"
}
}
}
},
"profile_contact_support_subtitle" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Get help with your account"
}
}
}
},
"profile_subscription" : {
"extractionState" : "manual",
"localizations" : {
@@ -19470,6 +19480,17 @@
}
}
},
"profile_support" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Support"
}
}
}
},
"profile_task_assigned" : {
"extractionState" : "manual",
"localizations" : {
@@ -21228,6 +21249,9 @@
"Property #%d" : {
"comment" : "A fallback text that appears when the associated residence ID is not found in the user's residences. The placeholder number is replaced with the actual residence ID.",
"isCommentAutoGenerated" : true
},
"Quick Start" : {
},
"Re-enter new password" : {
@@ -24385,6 +24409,10 @@
},
"Save your home to your account" : {
},
"Search templates..." : {
"comment" : "A placeholder text for a search bar in the task templates browser.",
"isCommentAutoGenerated" : true
},
"Send New Code" : {
"comment" : "A button label that allows a user to request a new verification code.",
@@ -24566,6 +24594,10 @@
},
"Take your home management\nto the next level" : {
},
"Task Templates" : {
"comment" : "The title of the view that lists all predefined task templates.",
"isCommentAutoGenerated" : true
},
"Tasks" : {
"comment" : "A label displayed above the list of task categories.",
@@ -25221,6 +25253,10 @@
}
}
},
"tasks_browse_templates" : {
"comment" : "Text for browsing task templates.",
"isCommentAutoGenerated" : true
},
"tasks_cancel" : {
"extractionState" : "manual",
"localizations" : {
@@ -27496,6 +27532,10 @@
}
}
},
"tasks_no_templates_found" : {
"comment" : "Text displayed when no task templates are found.",
"isCommentAutoGenerated" : true
},
"tasks_none" : {
"extractionState" : "manual",
"localizations" : {
@@ -28471,6 +28511,14 @@
}
}
},
"tasks_result" : {
"comment" : "A singular label for a result in a list. E.g. \"1 result\", \"2 results\".",
"isCommentAutoGenerated" : true
},
"tasks_results" : {
"comment" : "Plural form of \"result\".",
"isCommentAutoGenerated" : true
},
"tasks_scheduling" : {
"extractionState" : "manual",
"localizations" : {
@@ -28536,6 +28584,10 @@
}
}
},
"tasks_search_templates" : {
"comment" : "Title of a screen that allows users to search for task templates.",
"isCommentAutoGenerated" : true
},
"tasks_select_category" : {
"extractionState" : "manual",
"localizations" : {
@@ -29316,6 +29368,10 @@
}
}
},
"tasks_try_different_search" : {
"comment" : "Text to prompt the user to try a different search query when no task templates are found.",
"isCommentAutoGenerated" : true
},
"tasks_unarchive" : {
"extractionState" : "manual",
"localizations" : {
@@ -29511,11 +29567,19 @@
}
}
},
"Templates will appear here once loaded" : {
"comment" : "A description text displayed when there are no task templates available.",
"isCommentAutoGenerated" : true
},
"That's Perfect!" : {
},
"The Smith Residence" : {
},
"Try a different search term" : {
"comment" : "A description below the \"No Templates Found\" message in the search results section of the task templates browser.",
"isCommentAutoGenerated" : true
},
"Try Again" : {
"comment" : "A button label that says \"Try Again\".",