Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
191 commits
Select commit Hold shift + click to select a range
f989fe2
add query
panasetskaya Nov 6, 2025
fc8243f
add basic vm structure and useCase
panasetskaya Nov 6, 2025
be3936b
help center home screen changes
panasetskaya Nov 6, 2025
9218e49
label
panasetskaya Nov 6, 2025
ec0fa1b
PuppyGuideDestination
panasetskaya Nov 6, 2025
897636f
paddings
panasetskaya Nov 7, 2025
95f4165
add PuppyGuideArticle destination and previews
panasetskaya Nov 7, 2025
4c7740b
paddings
panasetskaya Nov 7, 2025
3ab2b34
fonts
panasetskaya Nov 7, 2025
4e4c149
add TextOverflow
panasetskaya Nov 7, 2025
ad59622
fix styles
panasetskaya Nov 7, 2025
a87b718
read label
panasetskaya Nov 7, 2025
362073a
bring into view first variant
panasetskaya Nov 7, 2025
ce1310e
add rating
panasetskaya Nov 7, 2025
5e8e77d
change colors for rating
panasetskaya Nov 7, 2025
88d7d47
lazylist with sticky header
panasetskaya Nov 7, 2025
44547d2
send rating with mutation
panasetskaya Nov 7, 2025
f902556
fix offsets and paddings
panasetskaya Nov 7, 2025
d321199
fix rating
panasetskaya Nov 7, 2025
193d435
fix cache
panasetskaya Nov 7, 2025
0450af2
Remove unnecessary dependencies from feature-flags-public
StylianosGakis Feb 13, 2026
98094b2
Merge feature-flag modules in one KMP compatible one
StylianosGakis Feb 13, 2026
9d029e3
Make data-termination and data-conversations kmp
StylianosGakis Feb 13, 2026
ad5d0b9
Make ui-emergency kmp
StylianosGakis Feb 13, 2026
2f6b4a7
Make navigation-compose-typed kmp
StylianosGakis Feb 13, 2026
32957cc
Make feature-help-center kmp
StylianosGakis Feb 13, 2026
54e5d2e
Make more of feature-help-center kmp
StylianosGakis Feb 16, 2026
de95289
Fallback to simple text for Markdown for iOS
StylianosGakis Feb 16, 2026
4239a29
Export help center feature in umbrella too
StylianosGakis Feb 16, 2026
fe7fe03
Fix identityHashCode for native too
StylianosGakis Feb 16, 2026
4730fa1
Export AccessTokenFetcher properly for iOS
StylianosGakis Feb 16, 2026
11e72ca
WIP Umbrella consumer
StylianosGakis Feb 16, 2026
7dd2a9e
Apply IDE fix to not double-build the Kotlin code when running Umbrella
StylianosGakis Feb 16, 2026
66d87ad
Fix using android specific code in HelpCenter code
StylianosGakis Feb 16, 2026
1a65abb
Commit automatic changes in project.pbxproj
StylianosGakis Feb 16, 2026
ab826ec
Use HedvigText as the fallback for MarkdownText for native
StylianosGakis Feb 16, 2026
052d5b4
Remove unused parameters
StylianosGakis Feb 17, 2026
9a8dd11
WIP
StylianosGakis Feb 17, 2026
4da7c1f
Merge branch 'develop' into feat/help-center-kmp
StylianosGakis Mar 12, 2026
de48f79
Fix using non KMP libs in commonMain
StylianosGakis Mar 12, 2026
50592da
Add bundleId name to the framework
StylianosGakis Mar 12, 2026
eb6a622
Test
StylianosGakis Mar 12, 2026
bd9d99a
Merge branch 'develop' into feat/help-center-kmp
StylianosGakis Mar 12, 2026
a88038e
WIP
StylianosGakis Mar 13, 2026
060c4b2
More work to make umbrella-consumer run
StylianosGakis Mar 31, 2026
6d4a38b
Fix iOS logger
StylianosGakis Apr 1, 2026
51436e5
Small fixes
StylianosGakis Apr 1, 2026
58ba2e0
Molecule needs to run on the Main Thread on native too
StylianosGakis Apr 1, 2026
d5c6b7e
Go edge-to-edge on the iOS app
StylianosGakis Apr 1, 2026
a36a96f
Small umbrella consumer app refactors
StylianosGakis Apr 7, 2026
e161db0
Create umbrella artifact from branch
StylianosGakis Apr 7, 2026
47fcd1d
Add umbrella on push paths
StylianosGakis Apr 7, 2026
0e2f516
Temp insets fix for iOS
StylianosGakis Apr 9, 2026
3847ae7
Make umbrella also have an android target
StylianosGakis Apr 10, 2026
fc62ae0
Delete some unused code
StylianosGakis Apr 10, 2026
dfbfdf0
Try without the otf files
StylianosGakis Apr 13, 2026
d687050
Remove paths since many more paths now are involved in Umbrella
StylianosGakis Apr 13, 2026
f39a826
Update the branch name on the umbrella workflow
StylianosGakis Apr 13, 2026
1645664
Temp delete font files to test the XCFramework without them
StylianosGakis Apr 13, 2026
9677ed8
Revert "Temp delete font files to test the XCFramework without them"
StylianosGakis Apr 13, 2026
18c4bbf
Revert "Try without the otf files"
StylianosGakis Apr 13, 2026
2371d34
Try to call Swift-provided lambda on the main thread
StylianosGakis Apr 13, 2026
f9f36d0
Provide the entire help-center feature in HelpCenterViewController
StylianosGakis Apr 13, 2026
cf326f1
Update umbrella-consumer to the new APIs
StylianosGakis Apr 13, 2026
3a79194
Merge branch 'develop' into bug/untangle-merge
StylianosGakis Apr 14, 2026
833b2ad
Try to delete the redeclarations
StylianosGakis Apr 14, 2026
30423b7
Provide an ImageLoader for iOS too
StylianosGakis Apr 14, 2026
179f2ea
Formatting
StylianosGakis Apr 14, 2026
9ab095b
Fix graph generating task
StylianosGakis Apr 17, 2026
2d6cc92
Update schema
StylianosGakis Apr 17, 2026
7411cb4
Merge branch 'develop' into maker-days/puppy-guide
panasetskaya Apr 20, 2026
19afbcf
Merge branch 'develop' into maker-days/puppy-guide
panasetskaya Apr 20, 2026
209749d
Merge remote-tracking branch 'origin/feat/help-center-kmp' into feat/…
panasetskaya Apr 21, 2026
6526721
finish kmp-ing of puppy guide
panasetskaya Apr 21, 2026
2096f2d
remove log
panasetskaya Apr 22, 2026
02fc74d
change umbrella
panasetskaya Apr 22, 2026
d1a6c3e
add add kmp markdown
panasetskaya Apr 24, 2026
b281f4d
bump markdown version
panasetskaya Apr 27, 2026
a1fee2e
Only pass down the existence of puppy guides or not for Help-Center p…
StylianosGakis Apr 29, 2026
3a8d82b
Make GetPuppyGuideUseCase return a flow
StylianosGakis Apr 29, 2026
f295b10
Add iOS support for Puppy Guide feature
StylianosGakis Apr 29, 2026
200c956
Comment out PuppyGuideQuery for now as it's not deployed
StylianosGakis Apr 29, 2026
6dee309
Make SetArticleRatingUseCase not expose GQL types in the public API
StylianosGakis Apr 29, 2026
360681e
Add clarification in CLAUDE.md to avoid exposing GQL types in public API
StylianosGakis Apr 29, 2026
1d4a0ab
Add back gql files as the schema was published
StylianosGakis Apr 29, 2026
cdb1a85
Add back gql files as the schema was published
StylianosGakis Apr 29, 2026
8c4654b
Remove unnecessary part of multiplatform strings
StylianosGakis Apr 30, 2026
24964d8
Download strings
StylianosGakis Apr 30, 2026
1987d81
Add section about quickly iterating on KMP code in Ugglan locally
StylianosGakis Apr 30, 2026
b45a85f
Merge branch 'refs/heads/develop' into feat/puppy-guide-kmp
StylianosGakis May 5, 2026
84c1350
Make puppy guide screens go edge to edge
StylianosGakis May 5, 2026
8fb2b59
Update schema
StylianosGakis May 5, 2026
dd3876d
Prevent duplicate nav events to puppy guide screen
StylianosGakis May 5, 2026
f8db369
Fix missing deep link overload for native
StylianosGakis May 5, 2026
2787148
Run formatter on puppy guide gradle project
StylianosGakis May 5, 2026
d232a23
remove HARDCODE_RESPONSE
panasetskaya May 6, 2026
c332d6d
Remove redundant compiler args
StylianosGakis May 6, 2026
b9a72aa
Changes to test in umbrella-consumer
StylianosGakis May 6, 2026
0ea7b09
Fix clicking a category twice not scrolling to it again
StylianosGakis May 6, 2026
755cba8
Update to latest CMP rc
StylianosGakis May 6, 2026
77e60af
Update README around umbrella
StylianosGakis May 6, 2026
f41fc8d
Make ArrowLeft actual to ChevronLeft for native
StylianosGakis May 7, 2026
f4fb282
Tidy up README around umbrella
StylianosGakis May 7, 2026
0a30043
Merge branch 'develop' into feat/puppy-guide-kmp
StylianosGakis May 7, 2026
c854910
Make iOS have no ripple indication by default
StylianosGakis May 8, 2026
b12365c
Make custom calls of `ripple` to also Noop on iOS
StylianosGakis May 8, 2026
2e39ed4
Fix noopRipple being exposed as the wrong type
StylianosGakis May 8, 2026
77b337a
Remove debug log
StylianosGakis May 8, 2026
f430c1a
Remove now unused publicly available ViewControllers
StylianosGakis May 8, 2026
c55cca2
Make PuppyTopAppBar a noop for native
StylianosGakis May 11, 2026
8229a1f
Create blockSwipeBackOnIos modifier to fix iOS back gesture taking over
StylianosGakis May 12, 2026
f7d6a69
Create HedvigComposeUIViewController to wrap common requirements for …
StylianosGakis May 12, 2026
000f7d3
Fix puppy guide horizontal scroll problems with blockSwipeBackOnIos
StylianosGakis May 12, 2026
55f316b
Export IosSwipeBackController with design-system-api in Umbrella
StylianosGakis May 12, 2026
85cae64
Make content go under the top app bar on iOS
StylianosGakis May 12, 2026
3b68fe7
Make the sticky bar go only below the top app bar for iOS too
StylianosGakis May 12, 2026
8298ec9
Extract the sticky header offset code
StylianosGakis May 12, 2026
0278074
Fix top padding for puppy article destination too
StylianosGakis May 12, 2026
a178479
Improve rememberStickyHeaderTopInset docs
StylianosGakis May 12, 2026
c61e7ca
Merge branch 'develop' into feat/puppy-guide-kmp
StylianosGakis May 13, 2026
c838fef
Fix wrong import
StylianosGakis May 13, 2026
1ef27f2
Prepare staging release for test session
StylianosGakis May 13, 2026
fa55879
Added offset tracking
sladan-hedvig May 15, 2026
1b01175
Updated umrella
sladan-hedvig May 15, 2026
9ea2129
color changes
panasetskaya May 15, 2026
d30c9d5
Removed branch workflow trigger
sladan-hedvig May 19, 2026
fc7166c
wip
panasetskaya May 19, 2026
be8b4a7
Merge pull request #2941 from HedvigInsurance/feat/puppy-guide-kmp-tr…
StylianosGakis May 19, 2026
89f9c04
Merge remote-tracking branch 'origin/feat/puppy-guide-kmp' into feat/…
panasetskaya May 19, 2026
8e37438
fix colors and block spacing
panasetskaya May 19, 2026
7c365be
fix colors and block spacing
panasetskaya May 19, 2026
666675c
Pass locale in headers in native target
StylianosGakis May 19, 2026
a411d93
Add X64 target for tests
StylianosGakis May 19, 2026
095cdc3
Cleanup auth interceptor being separate on native target
StylianosGakis May 19, 2026
3fec145
Fix sending the wrong `Hedvig-App-Version` for iOS in KMP code
StylianosGakis May 19, 2026
56f48a3
Merge remote-tracking branch 'origin/feat/puppy-guide-kmp' into feat/…
StylianosGakis May 19, 2026
2b5b4a4
haptic WIP
panasetskaya May 20, 2026
8c3e8c6
Remove x64 target as it no longer exists
StylianosGakis May 25, 2026
dcdd347
add haptic, remove iosX64
panasetskaya May 25, 2026
51065fd
Cleanup some leftover code
StylianosGakis May 25, 2026
f04ca89
Fix category scroll not scrolling all the way
StylianosGakis May 25, 2026
7ec0b20
Fix puppy guide cards cutting off text
StylianosGakis May 25, 2026
8271cc8
ktlint
panasetskaya May 26, 2026
619776b
ReadLabel
panasetskaya May 26, 2026
8a6df43
padding
panasetskaya May 26, 2026
9f52dc3
padding
panasetskaya May 26, 2026
4796290
Merge remote-tracking branch 'origin/feat/puppy-guide-kmp' into feat/…
panasetskaya May 26, 2026
6618791
Adjust to the new puppy guide API shape which supports young dogs
StylianosGakis May 26, 2026
848b6de
Merge remote-tracking branch 'origin/feat/puppy-guide-kmp' into feat/…
StylianosGakis May 26, 2026
e263161
Add nav back to list button on unknown article clicked
StylianosGakis May 26, 2026
d18dda5
Add deep links for puppy guide
StylianosGakis May 26, 2026
7485710
Create PuppyScaffold to avoid adding double back arrow on iOS
StylianosGakis May 26, 2026
28be0da
Report an article as read when you've scrolled all the way down
StylianosGakis May 26, 2026
4274556
Make "read" label have a background as per the design
StylianosGakis May 26, 2026
941cb79
migrate to one markdown
panasetskaya May 26, 2026
9e3a13e
fix color
panasetskaya May 26, 2026
d56e8d7
run ktlint
panasetskaya May 26, 2026
3c3105e
Fix reporting read triggering before the content had a chance to appear
StylianosGakis May 26, 2026
29fbd2b
Simplify scroll checks for reporting read
StylianosGakis May 26, 2026
3ba2a45
Merge remote-tracking branch 'origin/feat/puppy-guide-kmp' into feat/…
StylianosGakis May 26, 2026
9f95926
Fix missing modifier
StylianosGakis May 26, 2026
a413ba9
Fix border in dark mode
StylianosGakis May 26, 2026
ff80094
Hide placeholders from a11y
StylianosGakis May 26, 2026
0fefc7c
Adjust UI for puppy guides for young dog and old dog
StylianosGakis May 26, 2026
2df832d
Delete deep link to puppy guide article
StylianosGakis May 27, 2026
01510aa
fillSecondaryTransparent over read articles
panasetskaya May 27, 2026
d8771f6
Adapt iOS API for observePuppyGuideAvailability with young dogs
StylianosGakis May 28, 2026
938a139
Merge remote-tracking branch 'origin/feat/puppy-guide-kmp' into feat/…
StylianosGakis May 28, 2026
0bbc766
link color
panasetskaya May 28, 2026
ddd2809
Fix black overlay on "read" articles being white in dark mode
StylianosGakis May 28, 2026
735a9b2
link color
panasetskaya May 28, 2026
17bc0b7
link color
panasetskaya May 28, 2026
27ac92d
undescore
panasetskaya May 28, 2026
36d3914
Merge branch 'feat/puppy-guide-kmp' into feat/puppy-guide-kmp-one-mar…
panasetskaya May 28, 2026
dcce4bf
Merge pull request #2955 from HedvigInsurance/feat/puppy-guide-kmp-on…
panasetskaya May 28, 2026
3a22789
Fix haptic feedback for iOS
StylianosGakis May 28, 2026
21ecdde
Merge remote-tracking branch 'origin/feat/puppy-guide-kmp' into feat/…
StylianosGakis May 28, 2026
180776b
Merge branch 'feat/puppy-guide-kmp' into feat/puppy-guide-kmp-haptic-…
StylianosGakis May 28, 2026
f662fe9
Move PuppyTopAppBar into jvmAndAndroid target
StylianosGakis May 28, 2026
9ed7ce3
Add a haptic feedback to the puppy guide group pills too
StylianosGakis May 28, 2026
03ad0a7
Merge pull request #2956 from HedvigInsurance/feat/puppy-guide-kmp-ha…
StylianosGakis May 28, 2026
04881a5
no Ellipsis
panasetskaya May 29, 2026
7aa97b0
adjust spacings
panasetskaya May 29, 2026
ebe732d
read label
panasetskaya May 29, 2026
7ea364d
do not merge the valp card in the help center
panasetskaya May 29, 2026
ba59705
image desc
panasetskaya May 29, 2026
92d5443
change ArticleItem audio desc
panasetskaya May 29, 2026
367bf5e
back with EmptyContentDescription for images
panasetskaya May 29, 2026
22011aa
Merge pull request #2957 from HedvigInsurance/feat/puppy-guide-kmp-a11y
panasetskaya May 29, 2026
49de1a9
Download schema
StylianosGakis May 29, 2026
a377c41
Merge branch 'develop' into feat/puppy-guide-kmp
StylianosGakis May 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
branches:
- develop
- feat/manual-charge
- feat/puppy-guide-kmp
workflow_dispatch:

concurrency:
Expand Down
7 changes: 2 additions & 5 deletions .github/workflows/umbrella.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@ on:
push:
branches:
- develop
- makerdays/chat-claim
paths:
- 'app/authlib/**'
- 'app/feature/feature-claim-chat/**'
- 'app/shareddi/**'
- feat/help-center-kmp
- feat/puppy-guide-kmp
workflow_dispatch:

concurrency:
Expand Down
37 changes: 37 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,43 @@ data-{domain}/
- Use cases for business logic
- Room database for local persistence

**Critical architectural rule — never expose GraphQL types in public API:**

GraphQL is an implementation detail of the data layer. Apollo-generated types (anything from the `octopus` package — queries, mutations, fragments, their `.Data` shapes, generated input/enum types, etc.) **must not appear in the signatures of public interfaces, public functions, return types, or public data classes** that other modules consume.

Use cases and repositories should:
1. Run the GraphQL operation internally (`.query(...)`, `.mutation(...)`, `.safeExecute()`, `.safeFlow()`).
2. Map the response into a project-owned type (a plain Kotlin `data class`, sealed type, primitive, or `Unit` if only success/failure matters) before returning.
3. Keep the `octopus.*` import confined to the `internal` impl class only.

This applies even when the GraphQL type happens to be a perfect shape — wrap it. It keeps the rest of the project insulated from schema churn, makes the data source swappable, and prevents GraphQL types from leaking into KMP/iOS-facing APIs where they'd be even more awkward.

Example — wrong:
```kotlin
interface SetArticleRatingUseCase {
// ❌ exposes Apollo-generated type
suspend fun invoke(name: String, rating: Int): Either<ErrorMessage, PuppyGuideEngagementMutation.Data>
}
```

Example — right:
```kotlin
interface SetArticleRatingUseCase {
// ✅ project-owned shape; Unit because callers only care about success/failure
suspend fun invoke(name: String, rating: Int): Either<ErrorMessage, Unit>
}

internal class SetArticleRatingUseCaseImpl(...) : SetArticleRatingUseCase {
override suspend fun invoke(...) = either {
val data = apolloClient.mutation(PuppyGuideEngagementMutation(...)).safeExecute()
.mapLeft { ErrorMessage() }.bind()
ensure(data.puppyGuideEngagement.success) { ErrorMessage() }
}
}
```

When the response carries useful structured data, define a project-owned `data class` next to the use case (or in a shared model file) and map field-by-field in the impl.

## Technology Stack

### UI
Expand Down
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,15 @@ The [android-remove-unused-resources-plugin](https://github.com/irgaly/android-r
plugin is used to achieve this. This will run on CI using [this task](./.github/workflows/unused-resources.yml), but to run locally one can also just do
`./gradlew :app:lint -Prur.lint.onlyUnusedResources`
And then
`./gradlew :app:removeUnusedResourcesDebug`
`./gradlew :app:removeUnusedResourcesDebug`

## Sharing code with iOS via HedvigShared

The `:umbrella` module produces the binary the iOS app consumes for shared KMP code — exported module list in `app/umbrella/build.gradle.kts`. Two distribution paths:

- **Production**: `umbrella.yml` runs `:umbrella:assembleHedvigSharedReleaseXCFramework` and publishes the resulting multi-slice XCFramework as a Swift Package (~25 min round-trip).
- **Local dev**: Ugglan's `scripts/use-local-umbrella.sh` flips its Tuist project so a pre-build phase calls `:umbrella:embedAndSignAppleFrameworkForXcode` from a sibling `android/` checkout on every Xcode build (~5–10s per Kotlin change). See the *Iterating on shared KMP code* section in Ugglan's README.

(`:umbrella:embedAndSignAppleFrameworkForXcode` only works from an Xcode build phase — it reads `CONFIGURATION`, `SDK_NAME`, `ARCHS`, `BUILT_PRODUCTS_DIR` from the env.)

`:umbrella` is `isStatic = true`. Compose Resources you add to shared modules land at `<App>.app/compose-resources/composeResources/...` on iOS via `ugglan/scripts/post-build-action.sh` — that script is the source of truth for the iOS bundle layout.
Original file line number Diff line number Diff line change
Expand Up @@ -917,13 +917,31 @@ Root type expressing the entire flow for members trying to report a new claim.
"""
type ClaimIntent {
id: ID!
"""
The time this was started.
"""
createdAt: DateTime!
"""
All steps that have been taken before the current step. These typically include "current value" data.
WARNING: Only query these once when resuming an old intent, as they can be quite expensive to compute.
They effectively need to perform all the work of rendering every previous step all at once, which we should
generally avoid when going through the flow normally.
"""
previousSteps: [ClaimIntentStep!]!
"""
The current step.
"""
currentStep: ClaimIntentStep
"""
A value between 0.0 and 1.0 that indicates roughly how far along the submission
flow the user has progressed.
"""
progress: Float
"""
A short summary of the contents of this flow. Null when the flow is completely new (typically pre triage).
"""
displayName: String
"""
The created claim of this intent.
Once this value is returned, the intent is effectively over, and no steps
can be produced or interacted with.
Expand Down Expand Up @@ -964,7 +982,7 @@ type ClaimIntentSourceMessage {
text: String!
}
input ClaimIntentStartInput {
developmentFlow: Boolean
developmentFlow: Boolean @deprecated(reason: "Unused")
}
"""
Represents a single step in the claim submission flow.
Expand Down Expand Up @@ -993,6 +1011,14 @@ type ClaimIntentStepContentAudioRecording {
uploadUri: String!
freeTextMinLength: Int!
freeTextMaxLength: Int!
"""
URL of the audio uploaded by the user.
"""
currentAudioUrl: Url
"""
Free text submitted by the user.
"""
currentFreeText: String
isSkippable: Boolean!
}
"""
Expand Down Expand Up @@ -1038,8 +1064,17 @@ type ClaimIntentStepContentFileUpload {
The relative URI towards where one should upload the files.
"""
uploadUri: String!
"""
Current files uploaded by the user.
"""
currentFiles: [ClaimIntentStepContentFileUploadFile!]
isSkippable: Boolean!
}
type ClaimIntentStepContentFileUploadFile {
url: Url!
contentType: String!
fileName: String!
}
"""
A form step is one that contains a form in the shape of a list of "fields".
Submitted using `Mutation.claimIntentSubmitForm`.
Expand Down Expand Up @@ -1082,6 +1117,10 @@ type ClaimIntentStepContentFormField {
"""
defaultValues: [ClaimIntentStepContentFormFieldValue!]!
"""
These are the values that the user has submitted for this field.
"""
currentValues: [ClaimIntentStepContentFormFieldValue!]!
"""
If type is SEARCH, then this will be present.
"""
searchData: ClaimIntentStepContentFormFieldSearchData
Expand Down Expand Up @@ -1136,8 +1175,21 @@ It can be seen as a special-case form with nicer rendering.
Submitted using `Mutation.claimIntentSubmitSelect`.
"""
type ClaimIntentStepContentSelect {
"""
Selectable options.
"""
options: [ClaimIntentStepContentSelectOption!]!
"""
Visual style of this selection.
"""
style: ClaimIntentStepContentSelectStyle!
"""
Currently selected value by the user.
"""
currentSelectedId: ID
"""
Pre-filled default value.
"""
defaultSelectedId: ID
isSkippable: Boolean!
}
Expand Down Expand Up @@ -2468,6 +2520,11 @@ type Member {
List of members FAQ
"""
memberFAQ: MemberFAQ!
"""
Returns the most recent claim intent for this member, that can be "resumed" by querying `ClaimIntent.previousSteps`.
Will return `null` if the server considers it too old to be resumed.
"""
resumableClaimIntent: ClaimIntent
claims: [Claim!]!
claimsActive: [Claim!]!
claimsHistory: [Claim!]!
Expand Down Expand Up @@ -2531,10 +2588,16 @@ type Member {
"""
crossSellV2(input: CrossSellInput!): CrossSellV2!
"""
Young Pet Guide stories for the member.
Returns a list of educational content stories for young pet owners.
Shop sessions started by this member that have not yet been signed and are not expired.
Ordered by most recent activity first.
"""
ongoingShopSessions: [ShopSession!]!
"""
puppyGuideStories: [PuppyGuideStory!]!
Young Pet Guide content for the member.
Returns the educational content stories plus an indicator of whether the audience
is a young dog. Returns null when the member has no active dog contracts.
"""
puppyGuide: PuppyGuide
"""
Fetch all the active contracts for this member. Active contracts include all insurances that are either
active today, or to-be-active in the future.
Expand Down Expand Up @@ -4388,6 +4451,11 @@ type ProductRecommendation {
Null when no Insurely data collection is associated with the session.
"""
externalInsurance: RecommendationExternalInsurance
"""
Best-effort prefill for the product's price calculator, derived from Insurely data, for
product-only recommendations where no offer could be generated. Null when no usable prefill exists.
"""
priceIntentData: PricingFormData
}
type ProductVariant {
"""
Expand Down Expand Up @@ -4460,6 +4528,19 @@ input PuppyEngagementInput {
read: Boolean
closed: Boolean
}
type PuppyGuide {
"""
Educational content stories for dog owners. The same set is served regardless of dog age.
"""
stories: [PuppyGuideStory!]
"""
True if the member has at least one active dog contract for a dog under 2 years old.
Clients should use this to render the content appropriately for the audience —
content tailored to puppies will be a better fit when this is true.
[null] assumes it's not a young dog, as we do not have this info
"""
forYoungDog: Boolean
}
type PuppyGuideStory {
"""
The unique name/identifier of the story.
Expand Down Expand Up @@ -4682,6 +4763,11 @@ type ShopSession {
"""
cart: Cart!
"""
Display-ready summary of this session for surfacing it in member-facing lists
(e.g. the Hedvig mobile app's home screen).
"""
display: ShopSessionDisplay!
"""
The outcome of a signed shop-session. Requires authentication.
"""
outcome: ShopSessionOutcome
Expand Down Expand Up @@ -4816,6 +4902,49 @@ input ShopSessionCustomerUpdateInput {
firstName: String
lastName: String
}
type ShopSessionDisplay {
"""
Title summarizing the session's products, e.g. "Car Insurance Full" for a single
product or "Home + Accident" when several products are in play. Uses each product's
full localized display name (tier-specific where applicable).
"""
title: String!
"""
Optional secondary line with insured-object info, e.g. "Studio apartment, Stockholm".
Null when no insured-object data is available.
"""
subtitle: String
"""
Effective monthly price after any campaign/bundle discounts.
Null when the session has no priced offers in the cart.
"""
monthlyNet: Money
"""
Original monthly price before any campaign/bundle discounts.
Null under the same conditions as `monthlyNet`.
"""
monthlyGross: Money
"""
Most recent activity timestamp on this session.
Used for sorting or displaying it relatively (e.g. "2 days ago").
"""
lastActivityAt: DateTime!
"""
Absolute URL to open in a browser to resume this session. Clients open it
directly in the device browser, no auth is required.
"""
resumeUrl: String!
"""
Mirrors the underlying session's `validTo`. Clients can use this to hide cards
that are expired.
"""
validTo: DateTime!
"""
Pillow image of the primary product in the session, suitable as a card icon.
Null when no product is yet associated with the session.
"""
pillowImage: StoryblokImageAsset
}
"""
A/B testing experiment configuration for shop sessions.
Both name and variant should be in SCREAMING_SNAKE_CASE format.
Expand Down
3 changes: 1 addition & 2 deletions app/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,7 @@ dependencies {
implementation(projects.featureCrossSellSheet)
implementation(projects.featureDeleteAccount)
implementation(projects.featureEditCoinsured)
implementation(projects.featureFlagsAndroid)
implementation(projects.featureFlagsPublic)
implementation(projects.featureFlags)
implementation(projects.featureForever)
implementation(projects.featureHelpCenter)
implementation(projects.featureHome)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ val applicationModule = module {
)
}

private class AndroidBuildConfig() : AppBuildConfig {
private class AndroidBuildConfig : AppBuildConfig {
override val debug: Boolean = BuildConfig.DEBUG
override val applicationId: String = BuildConfig.APPLICATION_ID
override val buildType: String = BuildConfig.BUILD_TYPE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ internal fun HedvigNavHost(
hedvigBuildConstants = hedvigBuildConstants,
openConversation = {
navigateToNewConversation()
}
},
)
payoutAccountGraph(
navController = navController,
Expand Down Expand Up @@ -456,6 +456,7 @@ internal fun HedvigNavHost(
helpCenterGraph(
hedvigDeepLinkContainer = hedvigDeepLinkContainer,
navController = navController,
onNavigateUp = navController::navigateUp,
onNavigateToQuickLink = onNavigateToQuickLink@{ quickLinkDestination ->
val destination: Destination = when (quickLinkDestination) {
QuickLinkChangeAddress -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ import com.hedvig.android.core.demomode.Provider
import com.hedvig.android.data.paying.member.GetOnlyHasNonPayingContractsUseCase
import com.hedvig.android.data.settings.datastore.SettingsDataStore
import com.hedvig.android.feature.cross.sell.sheet.CrossSellSheet
import com.hedvig.android.notification.badge.data.payment.MissedPaymentNotificationServiceProvider
import com.hedvig.android.feature.login.navigation.LoginDestination
import com.hedvig.android.featureflags.FeatureManager
import com.hedvig.android.language.LanguageService
import com.hedvig.android.logger.logcat
import com.hedvig.android.navigation.activity.ExternalNavigator
import com.hedvig.android.navigation.compose.typedHasRoute
import com.hedvig.android.navigation.core.HedvigDeepLinkContainer
import com.hedvig.android.notification.badge.data.payment.MissedPaymentNotificationServiceProvider
import com.hedvig.android.ui.force.upgrade.ForceUpgradeBlockingScreen
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.Channel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,6 @@ internal class HedvigAppState(
false,
)


/**
* UI logic for navigating to a top level destination in the app. Top level destinations have
* only one copy of the destination of the back stack, and save and restore state whenever you
Expand Down Expand Up @@ -222,7 +221,6 @@ internal class HedvigAppState(
}

fun navigateToLoggedOut() {

val isLoggingOutFromProfile = navController.currentDestination
?.typedHasRoute(destinationToExcludeFromSavingState) ?: false

Expand Down
Loading
Loading