demographics changes; prompted actions rework#167
Conversation
- take trial opt in into account - coditionally optional fields - rework state reporting a bit
demographics would always get shown for a brief moment upon launch while the account details still were being loaded
PSchmiedmayer
left a comment
There was a problem hiding this comment.
Thank you for all the work here @lukaskollmer 🚀
We would need to also resolve the CI issues (UI tests + Package tests) and should test the general PR workflow in this organization including codecov and others.
| .padding(.top, 4) | ||
| .padding(.bottom, -8) | ||
| if let timeRange = score.timeRange, score.scoreAvailable { | ||
| // - For e.g. Sleep, we might prefer this saying "Today, 7:00" instead of just "7:00" which it would show currently |
There was a problem hiding this comment.
Transform this into an GitHub issue?
There was a problem hiding this comment.
Nice setup here with the additional prompts!
There was a problem hiding this comment.
Good to auto-translate the keys to Spanish as well.
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThe PR updates demographics consent and field handling, adds prompted-action digest and state filtering UI, introduces SensorKit authorization observation, and replaces color-scheme-derived foreground styling with semantic text-label styles. ChangesOnboarding and demographics data flow
Prompted actions and SensorKit
Semantic text-label styling
Maintenance
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
MyHeartCounts/Account/Demographics/DemographicsButton.swift (1)
25-46: 🩺 Stability & Availability | 🟡 MinorAdd a Close/Cancel action when drag dismissal is disabled.
DemographicsButton(allowDragToDismiss: false)inMyHeartCounts/Utils/Debug Stuff/DebugForm.swift:44can leave the sheet with no exit path: drag-to-dismiss is blocked, and the only toolbar action stays disabled untilisCompletebecomes true. Add an always-available Close/Cancel button, or don’t disable confirm when dismissal is already blocked.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@MyHeartCounts/Account/Demographics/DemographicsButton.swift` around lines 25 - 46, The sheet in DemographicsButton currently has no escape path when allowDragToDismiss is false because the toolbar dismissal action stays disabled until isComplete is true; update the sheet content in DemographicsButton so there is always an available Close/Cancel action, or adjust the existing primary toolbar button logic so dismissal is not blocked when drag-to-dismiss is disabled. Use the existing sheet setup, isPresentingSheet state, and the toolbar Button inside NavigationStack to locate and fix the behavior.
🧹 Nitpick comments (2)
MyHeartCounts/Account/Demographics/DemographicsData.swift (1)
264-326: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueRemove the commented-out
Field2implementation.This ~60-line commented-out alternative property-wrapper is dead code and adds noise. If it's kept intentionally for a future migration, a short TODO referencing a tracking issue would be clearer than retaining the full block.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@MyHeartCounts/Account/Demographics/DemographicsData.swift` around lines 264 - 326, Remove the commented-out Field2 property-wrapper block from the DemographicsData extension, since it is dead code and clutters the file. Update the DemographicsData extension to keep only the active implementation, and if this is meant to be revisited later, replace the full commented block with a brief TODO comment that references the relevant tracking item.MyHeartCounts/Account/Demographics/DemographicsLayout.swift (1)
172-176: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueComorbidities label color won't reflect the completion state.
This row still uses the
isEmpty:-basedNavigationLinkLabelinitializer, which only produces.red/.secondary. Since\.comorbiditiesis now conditionally required (isRequired: didOptInToTrial), an incomplete-but-optional state here will render red rather than the.orangeused elsewhere viacompletionState. Consider passingcompletionStatefor visual consistency.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@MyHeartCounts/Account/Demographics/DemographicsLayout.swift` around lines 172 - 176, The Comorbidities row in DemographicsLayout still uses the `NavigationLinkLabel(_:isEmpty:value:)` path, so it only maps to red/secondary and ignores the new required-vs-optional completion styling. Update the Comorbidities label to use `completionState` instead of `isEmpty`, matching the pattern used by other fields so `\.comorbidities` reflects `.orange` when incomplete but optional and the correct state when `didOptInToTrial` makes it required. Use the `NavigationLinkLabel` initializer and the surrounding completion-state logic in `DemographicsLayout` to locate the change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@MyHeartCounts/Account/AccountSheet.swift`:
- Around line 74-82: The account digest is rendered unconditionally in
accountSheetExtraContent, which can show a misleading “all set” state before
enrollment is ready. Move PromptedActionsDigest(context: .viewAll) inside the
existing enrollment check in accountSheetExtraContent so it only appears when
enrollments.first exists, alongside the Study Participation and data processing
sections.
In `@MyHeartCounts/Account/Demographics/DemographicsAccountKeys.swift`:
- Around line 149-156: The ukPostcode account key is changing its persisted id,
which would orphan existing saved data. Update DemographicsAccountKeys so the
ukPostcode property keeps the old account key identifier as a compatibility
alias, or add a migration/backfill path that maps existing ukPostcodePrefix
values to the new ukPostcode field before switching names.
In `@MyHeartCounts/Home` Tab/Prompted Actions/MHCPromptedActions.swift:
- Around line 44-50: The prompted action state logic in MHCPromptedActions
should not keep SensorKit requests pending after the user has already responded.
Update the status decision in the prompted actions path so that once no sensor
authorization is .notDetermined, the action returns .completed instead of
remaining .pending, and leave any denied-specific handling to SensorKitButton;
use the sensorAuthStates check in the relevant returned branch to locate the
change.
- Around line 133-135: The prompted action currently calls
UIApplication.shared.open with a String literal, which is not the expected type.
Update the open call in MHCPromptedActions (the closure that handles the message
action) to construct a URL from "message://" first and pass that URL to
UIApplication.shared.open, keeping the existing behavior but using the correct
API signature.
In `@MyHeartCounts/Home` Tab/Prompted Actions/PromptedActionsDigest.swift:
- Around line 232-239: The sheet dismissal logic in PromptedActionsDigest’s
onChange handler is watching actions.isEmpty, but actions is backed by .all so
it won’t reflect when the rendered pending list becomes empty. Update the change
observation to use the pending/rendered list source instead of actions, and keep
the dismissal Task/dismiss() flow the same so the sheet closes as soon as the
last visible pending action is gone.
In `@MyHeartCounts/SensorKit/SensorAccessPermissions.swift`:
- Around line 81-83: The authStatus mutation in SensorAuthStatusObserver’s
sensorReader(_:didChange:) callback should be dispatched onto the MainActor
before assignment, since it is SwiftUI-observed state and the callback has no
main-thread guarantee. Update the implementation so the authStatus property is
only set from the main actor, using the sensorReader(_:didChange:) method as the
entry point for the fix.
In `@MyHeartCounts/SensorKit/SensorKitButton.swift`:
- Around line 28-35: Scope the authorization checks in SensorKitButton to the
sensors this UI actually manages instead of relying on the default
SensorAccessPermissions set; update the use of sensorAccessPermissions in the
AsyncButton action and any AccountSheet-related gating to reference the same
explicit SensorKit.mhcSensors scope. Ensure isFullyUndetermined and
numAuthorized are evaluated against the managed sensor set so the button and
sheet state stay aligned with the sensors this row labels and enables.
- Around line 45-48: The management sheet is not wired to the new observable
permissions model, so rows that depend on authorization status won’t refresh
while the sheet stays open. Update the sheet content in SensorKitButton’s
NavigationStack to pass or create SensorAccessPermissions and thread it into
SensorKitSheet and its row-building path in makeRow(for:), replacing any direct
downstream reads of authorization state so permission changes update the visible
rows immediately.
---
Outside diff comments:
In `@MyHeartCounts/Account/Demographics/DemographicsButton.swift`:
- Around line 25-46: The sheet in DemographicsButton currently has no escape
path when allowDragToDismiss is false because the toolbar dismissal action stays
disabled until isComplete is true; update the sheet content in
DemographicsButton so there is always an available Close/Cancel action, or
adjust the existing primary toolbar button logic so dismissal is not blocked
when drag-to-dismiss is disabled. Use the existing sheet setup,
isPresentingSheet state, and the toolbar Button inside NavigationStack to locate
and fix the behavior.
---
Nitpick comments:
In `@MyHeartCounts/Account/Demographics/DemographicsData.swift`:
- Around line 264-326: Remove the commented-out Field2 property-wrapper block
from the DemographicsData extension, since it is dead code and clutters the
file. Update the DemographicsData extension to keep only the active
implementation, and if this is meant to be revisited later, replace the full
commented block with a brief TODO comment that references the relevant tracking
item.
In `@MyHeartCounts/Account/Demographics/DemographicsLayout.swift`:
- Around line 172-176: The Comorbidities row in DemographicsLayout still uses
the `NavigationLinkLabel(_:isEmpty:value:)` path, so it only maps to
red/secondary and ignores the new required-vs-optional completion styling.
Update the Comorbidities label to use `completionState` instead of `isEmpty`,
matching the pattern used by other fields so `\.comorbidities` reflects
`.orange` when incomplete but optional and the correct state when
`didOptInToTrial` makes it required. Use the `NavigationLinkLabel` initializer
and the surrounding completion-state logic in `DemographicsLayout` to locate the
change.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: ee7a7d5f-415f-4654-8718-e3ccf06e815c
📒 Files selected for processing (38)
MyHeartCounts/Account/AccountSheet.swiftMyHeartCounts/Account/Demographics/ComorbiditiesPicker.swiftMyHeartCounts/Account/Demographics/DemographicsAccountKeys.swiftMyHeartCounts/Account/Demographics/DemographicsButton.swiftMyHeartCounts/Account/Demographics/DemographicsData.swiftMyHeartCounts/Account/Demographics/DemographicsForm.swiftMyHeartCounts/Account/Demographics/DemographicsLayout.swiftMyHeartCounts/Account/Demographics/DemographicsSingleSelectionValuePicker.swiftMyHeartCounts/Account/Demographics/NHSNumber.swiftMyHeartCounts/Account/Demographics/RaceEthnicityPicker.swiftMyHeartCounts/Account/Demographics/StageOfChangePicker.swiftMyHeartCounts/Heart Health Dashboard/DetailedHealthStatsView.swiftMyHeartCounts/Heart Health Dashboard/HeartHealthDashboard.swiftMyHeartCounts/Home Tab/HomeTab.swiftMyHeartCounts/Home Tab/Prompted Actions/MHCPromptedActions.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedAction.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedActionButton.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedActionsDigest.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedActionsQuery.swiftMyHeartCounts/Modules/DeferredConfigLoading.swiftMyHeartCounts/News Tab/NewsTab.swiftMyHeartCounts/Onboarding/Consent+MHC.swiftMyHeartCounts/Onboarding/Consent.swiftMyHeartCounts/Onboarding/FinalEnrollmentStep.swiftMyHeartCounts/Onboarding/HealthRecordPermissions.swiftMyHeartCounts/Onboarding/OnboardingFlow.swiftMyHeartCounts/Onboarding/Screening/Components/IsFromRegion.swiftMyHeartCounts/Onboarding/Screening/ScreeningDataCollection.swiftMyHeartCounts/Onboarding/Screening/SingleChoiceScreeningComponent.swiftMyHeartCounts/Onboarding/USRegionPicker.swiftMyHeartCounts/Resources/Localizable.xcstringsMyHeartCounts/SensorKit/SensorAccessPermissions.swiftMyHeartCounts/SensorKit/SensorKitButton.swiftMyHeartCounts/Utils/Debug Stuff/DebugForm.swiftMyHeartCounts/Utils/SwiftUI/LabeledButton.swiftMyHeartCounts/Utils/SwiftUI/ListSelectionSheet.swiftMyHeartCounts/Utils/SwiftUI/NavigationLink.swiftMyHeartCounts/Utils/SwiftUI/TextLabelForegroundColor.swift
💤 Files with no reviewable changes (1)
- MyHeartCounts/Home Tab/Prompted Actions/PromptedActionButton.swift
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@MyHeartCounts/Account/Demographics/DemographicsSingleSelectionValue.swift`:
- Around line 59-87: The header section in
DemographicsSingleSelectionPicker.body should not be gated by checking `header
is EmptyView`, because a conditional `@ViewBuilder` can still produce a
non-EmptyView type while rendering nothing. Update the picker to decide header
presence explicitly in `init(selection:header:)` or by storing an optional/flag
for the header, and then only emit the header `Section` when that explicit state
says a header exists. Keep the rendering logic in `body` and `makeRow(for:)`
unchanged aside from replacing the type check with this explicit condition.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: b8716190-d9a4-411b-8f1a-2877261f7cb7
📒 Files selected for processing (11)
MyHeartCounts/Account/Demographics/DemographicsAccountKeys.swiftMyHeartCounts/Account/Demographics/DemographicsData.swiftMyHeartCounts/Account/Demographics/DemographicsLayout.swiftMyHeartCounts/Account/Demographics/DemographicsSingleSelectionValue.swiftMyHeartCounts/Account/Demographics/EducationStatus.swiftMyHeartCounts/Account/Demographics/HouseholdIncome.swiftMyHeartCounts/Account/Demographics/LatinoStatus.swiftMyHeartCounts/Account/Demographics/ReferralOption.swiftMyHeartCounts/Resources/Localizable.xcstringsMyHeartCounts/Utils/Debug Stuff/DebugForm.swiftMyHeartCounts/Utils/MenuIndicator.swift
✅ Files skipped from review due to trivial changes (1)
- MyHeartCounts/Utils/MenuIndicator.swift
🚧 Files skipped from review as they are similar to previous changes (4)
- MyHeartCounts/Utils/Debug Stuff/DebugForm.swift
- MyHeartCounts/Account/Demographics/DemographicsAccountKeys.swift
- MyHeartCounts/Account/Demographics/DemographicsData.swift
- MyHeartCounts/Account/Demographics/DemographicsLayout.swift
PSchmiedmayer
left a comment
There was a problem hiding this comment.
Looks solid; good to also see the referral source in place 🚀
There was a problem hiding this comment.
🧹 Nitpick comments (1)
MyHeartCountsShared/Package.swift (1)
15-16: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAvoid tracking an unreleased fork branch for the Spezi dependency before merge. Pinning Spezi to the
lukas/local-preferences-resetbranch on theSchmiedmayerLabfork makes builds non-reproducible (the branch HEAD can move or be deleted/force-pushed) and ties this PR to unreleased upstream work. Resolve to a tagged release or commit-pinned.revision(...)before merging, and confirm theLocalPreferencesStoreAPIs used inSetupTestEnvironment.swiftare available in that pin.
MyHeartCountsShared/Package.swift#L15-L16: replace thebranch:requirement with a released version range or a.revision("…")pin once the upstream change lands.MyHeartCounts.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved#L233-L234: regenerate the pin so it reflects the tagged/commit-pinned state rather than a moving branch.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@MyHeartCountsShared/Package.swift` around lines 15 - 16, Replace the moving Spezi branch dependency with a reproducible pin: update MyHeartCountsShared/Package.swift at the anchor site to use a released version range or a commit-pinned .revision(...) instead of branch: "lukas/local-preferences-reset", and then regenerate MyHeartCounts.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved so it records the same tagged/commit-pinned Spezi state; also verify the LocalPreferencesStore APIs referenced from SetupTestEnvironment.swift are available in that chosen pin.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@MyHeartCountsShared/Package.swift`:
- Around line 15-16: Replace the moving Spezi branch dependency with a
reproducible pin: update MyHeartCountsShared/Package.swift at the anchor site to
use a released version range or a commit-pinned .revision(...) instead of
branch: "lukas/local-preferences-reset", and then regenerate
MyHeartCounts.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
so it records the same tagged/commit-pinned Spezi state; also verify the
LocalPreferencesStore APIs referenced from SetupTestEnvironment.swift are
available in that chosen pin.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: aeae501a-7acb-4e80-a301-6823e2e39ca1
📒 Files selected for processing (10)
MyHeartCounts.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolvedMyHeartCounts/Heart Health Dashboard/Health Dashboard/HealthDashboard+SleepAnalysis.swiftMyHeartCounts/Heart Health Dashboard/HeartHealthDashboard.swiftMyHeartCounts/Home Tab/Prompted Actions/MHCPromptedActions.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedAction.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedActionsDigest.swiftMyHeartCounts/Modules/SetupTestEnvironment.swiftMyHeartCountsShared/Package.swiftMyHeartCountsUITests/BasicAppUsage.swiftMyHeartCountsUITests/PromptedActionsTests.swift
💤 Files with no reviewable changes (1)
- MyHeartCountsUITests/BasicAppUsage.swift
🚧 Files skipped from review as they are similar to previous changes (4)
- MyHeartCounts/Heart Health Dashboard/HeartHealthDashboard.swift
- MyHeartCounts/Home Tab/Prompted Actions/MHCPromptedActions.swift
- MyHeartCounts/Home Tab/Prompted Actions/PromptedActionsDigest.swift
- MyHeartCounts/Home Tab/Prompted Actions/PromptedAction.swift
|
Caution Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted. Error details |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
MyHeartCounts/Home Tab/Prompted Actions/MHCPromptedActions.swift (1)
61-70: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winConsider reusing a shared
HKHealthStoreinstance.
HKHealthStore()is instantiated fresh every time this action's state is recomputed. Given this is now a state-driven observable model likely re-evaluated on re-renders, reusing a single store instance (e.g. via the existingHealthKitmodule/dependency) avoids repeated store initialization overhead.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@MyHeartCounts/Home` Tab/Prompted Actions/MHCPromptedActions.swift around lines 61 - 70, The clinical-records prompted action is creating a new HKHealthStore inside the enableClinicalRecords state closure on every recomputation, which is unnecessary work in a frequently re-evaluated observable model. Update MHCPromptedActions so this closure reuses a shared HKHealthStore instance from the existing HealthKit dependency/module instead of instantiating HKHealthStore() inline, while keeping the supportsHealthRecords() check in the same state evaluation path.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@MyHeartCounts/Modules/SetupTestEnvironment.swift`:
- Around line 140-147: The dependency checks in SetupTestEnvironment set-up are
swallowing failures by logging and returning, which lets setUp() finish
successfully even when login/enrollment never happened. Update the guards in the
setup flow to throw an error instead of returning so failure propagates through
setup and configure() cannot report .done incorrectly; use the existing
accountService/account and studyManager checks in SetupTestEnvironment to locate
the fix.
In `@MyHeartCountsShared/Sources/MyHeartCountsShared/Prompted`
Actions/PromptedAction+IDs.swift:
- Around line 42-45: The public constants in PromptedAction+IDs are missing
documentation, causing SwiftLint’s missing_docs check to fail. Add brief doc
comments to each public static let in PromptedAction+IDs (sensorKit,
clinicalRecords, verifyAccountEmail, and completeDemographics) so the
identifiers remain unchanged but CI passes.
- Around line 22-38: The Codable path for PromptedAction.ID is crashing on
malformed input because init(from:) delegates to the precondition-based String
initializer. Update PromptedAction.ID’s decoding logic so it validates the
decoded String against Self.pattern and throws a DecodingError (for example in
init(from decoder:)) instead of calling the precondition initializer; keep the
existing init<S: StringProtocol> for trusted construction, but make decoding
fail gracefully for invalid persisted values.
---
Nitpick comments:
In `@MyHeartCounts/Home` Tab/Prompted Actions/MHCPromptedActions.swift:
- Around line 61-70: The clinical-records prompted action is creating a new
HKHealthStore inside the enableClinicalRecords state closure on every
recomputation, which is unnecessary work in a frequently re-evaluated observable
model. Update MHCPromptedActions so this closure reuses a shared HKHealthStore
instance from the existing HealthKit dependency/module instead of instantiating
HKHealthStore() inline, while keeping the supportsHealthRecords() check in the
same state evaluation path.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 5c2baaae-a7ae-4e94-92ed-01db5b8009fd
📒 Files selected for processing (15)
.github/workflows/build-and-test.yml.github/workflows/static-analysis.ymlMyHeartCounts/Account/AccountSheet.swiftMyHeartCounts/Account/Demographics/DemographicsForm.swiftMyHeartCounts/Home Tab/Prompted Actions/MHCPromptedActions.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedAction.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedActionsDigest.swiftMyHeartCounts/Home Tab/Prompted Actions/PromptedActionsQuery.swiftMyHeartCounts/Modules/SetupTestEnvironment.swiftMyHeartCountsShared/Package.swiftMyHeartCountsShared/Sources/MyHeartCountsShared/Prompted Actions/PromptedAction+IDs.swiftMyHeartCountsShared/Sources/MyHeartCountsShared/Prompted Actions/PromptedActionsFilter.swiftMyHeartCountsUITests/MHCTestCase.swiftMyHeartCountsUITests/OtherTests.swiftMyHeartCountsUITests/PromptedActionsTests.swift
🚧 Files skipped from review as they are similar to previous changes (6)
- MyHeartCountsUITests/PromptedActionsTests.swift
- MyHeartCounts/Account/Demographics/DemographicsForm.swift
- MyHeartCounts/Home Tab/Prompted Actions/PromptedActionsQuery.swift
- MyHeartCounts/Home Tab/Prompted Actions/PromptedAction.swift
- MyHeartCounts/Home Tab/Prompted Actions/PromptedActionsDigest.swift
- MyHeartCounts/Account/AccountSheet.swift
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
PSchmiedmayer
left a comment
There was a problem hiding this comment.
Thanks for all the work here 🚀
demographics changes; prompted actions rework
♻️ Current situation & Problem
⚙️ Release Notes
📚 Documentation
no
✅ Testing
no
Code of Conduct & Contributing Guidelines
By creating and submitting this pull request, you agree to follow our Code of Conduct and Contributing Guidelines:
Summary by CodeRabbit