Stylianos Gakis
06/20/2022, 1:51 PMmbonnin
06/20/2022, 1:52 PMmbonnin
06/20/2022, 1:52 PMpeek()
say?Stylianos Gakis
06/20/2022, 1:56 PM{
"name": "Web Onboarding SE - Quote Cart Needer?quoteCartId=65db82c7-0475-4793-84b8-57a1562cde5b",
"locale": "en_SE"
}
And Query:
query EmbarkStory($name: String!, $locale: String!) { embarkStory(name: $name, locale: $locale) { startPassage computedStoreValues { key value } passages { name id externalRedirect { data { location } } offerRedirect { data { keys } } messages { __typename ...MessageFragment } response { __typename ...MessageFragment ...ResponseExpressionFragment ... on EmbarkGroupedResponse { title { __typename ...ResponseExpressionFragment } items { __typename ...MessageFragment } each { key content { __typename ...MessageFragment } } } } redirects { __typename ... on EmbarkRedirectUnaryExpression { unaryType: type to passedExpressionKey passedExpressionValue } ... on EmbarkRedirectBinaryExpression { binaryType: type to key value passedExpressionKey passedExpressionValue } ... on EmbarkRedirectMultipleExpressions { multipleExpressionType: type to passedExpressionKey passedExpressionValue subExpressions { __typename ...ExpressionFragment } } } action { __typename ... on EmbarkSelectAction { selectData: data { options { link { __typename ...EmbarkLinkFragment } keys values badge api { __typename ...ApiFragment } } } } ... on EmbarkTextAction { textData: data { key placeholder mask subtitle link { __typename ...EmbarkLinkFragment } api { __typename ...ApiFragment } } } ... on EmbarkTextActionSet { textSetData: data { link { __typename ...EmbarkLinkFragment } textActions { data { key mask placeholder title } } api { __typename ...ApiFragment } } } ... on EmbarkPreviousInsuranceProviderAction { previousInsurerData: data { next { __typename ...EmbarkLinkFragment } skip { __typename ...EmbarkLinkFragment } storeKey insuranceProviders { id name logo { variants { __typename ...IconVariantsFragment } } } } } ... on EmbarkExternalInsuranceProviderAction { externalInsurerData: data { next { __typename ...EmbarkLinkFragment } skip { __typename ...EmbarkLinkFragment } storeKey } } ... on EmbarkNumberAction { numberActionData: data { __typename ...EmbarkNumberActionFragment } } ... on EmbarkNumberActionSet { numberActionSetData: data { numberActions { data { key placeholder unit label maxValue minValue title } } link { __typename ...EmbarkLinkFragment } } } ... on EmbarkDatePickerAction { storeKey label next { __typename ...EmbarkLinkFragment } } ... on EmbarkMultiAction { multiActionData: data { key maxAmount addLabel link { __typename ...EmbarkLinkFragment } components { __typename ... on EmbarkMultiActionNumberAction { numberActionData: data { key placeholder label unit } } ... on EmbarkDropdownAction { dropDownActionData: data { label key options { value text } } } ... on EmbarkSwitchAction { switchActionData: data { label key defaultValue } } } } } ... on EmbarkAudioRecorderAction { audioRecorderActionData: data { storeKey label next { __typename ...EmbarkLinkFragment } } } ... on EmbarkAddressAutocompleteAction { component addressAutocompleteActionData: data { placeholder key link { __typename ...EmbarkLinkFragment } api { __typename ...ApiFragment } } } } api { __typename ...ApiFragment } tooltips { title description } allLinks { __typename ...EmbarkLinkFragment } tracks { eventName eventKeys includeAllKeys customData } quoteCartOfferRedirects { data { id expression { __typename ...ExpressionFragment } selectedInsuranceTypes } } variantedOfferRedirects { data { selectedKeys allKeys expression { __typename ...ExpressionFragment } } } } } } fragment BasicExpressionFragment on EmbarkExpression { __typename ... on EmbarkExpressionUnary { unaryType: type text } ... on EmbarkExpressionBinary { binaryType: type key value text } } fragment ExpressionFragment on EmbarkExpression { __typename ...BasicExpressionFragment ... on EmbarkExpressionMultiple { multipleType: type text subExpressions { __typename ...BasicExpressionFragment ... on EmbarkExpressionMultiple { multipleType: type text subExpressions { __typename ...BasicExpressionFragment ... on EmbarkExpressionMultiple { multipleType: type text subExpressions { __typename ...BasicExpressionFragment } } } } } } } fragment MessageFragment on EmbarkMessage { expressions { __typename ...ExpressionFragment } text } fragment ResponseExpressionFragment on EmbarkResponseExpression { text expressions { __typename ...ExpressionFragment } } fragment EmbarkLinkFragment on EmbarkLink { name label hidden } fragment GraphQLResultsFragment on EmbarkAPIGraphQLResult { key as } fragment GraphQLErrorsFragment on EmbarkAPIGraphQLError { contains next { __typename ...EmbarkLinkFragment } } fragment GraphQLVariablesFragment on EmbarkAPIGraphQLVariable { __typename ... on EmbarkAPIGraphQLSingleVariable { key from as } ... on EmbarkAPIGraphQLGeneratedVariable { key storeAs type } ... on EmbarkAPIGraphQLMultiActionVariable { key from variables { __typename ... on EmbarkAPIGraphQLSingleVariable { key from as } ... on EmbarkAPIGraphQLGeneratedVariable { key storeAs type } } } ... on EmbarkAPIGraphQLConstantVariable { key value as } } fragment ApiFragment on EmbarkApi { __typename ... on EmbarkApiGraphQLQuery { queryData: data { query results { __typename ...GraphQLResultsFragment } errors { __typename ...GraphQLErrorsFragment } variables { __typename ...GraphQLVariablesFragment } next { __typename ...EmbarkLinkFragment } } } ... on EmbarkApiGraphQLMutation { mutationData: data { mutation results { __typename ...GraphQLResultsFragment } variables { __typename ...GraphQLVariablesFragment } errors { __typename ...GraphQLErrorsFragment } next { __typename ...EmbarkLinkFragment } } } } fragment IconVariantsFragment on IconVariants { dark { svgUrl } light { svgUrl } } fragment EmbarkNumberActionFragment on EmbarkNumberActionData { key placeholder unit label maxValue minValue link { __typename ...EmbarkLinkFragment } }
Stylianos Gakis
06/20/2022, 1:56 PMStylianos Gakis
06/20/2022, 1:57 PMStylianos Gakis
06/20/2022, 1:57 PMmbonnin
06/20/2022, 2:15 PMjava.io.FileNotFoundException: /Users/mbonnin/git/hedvig-android/apollo/src/main/graphql/com/hedvig/android/owldroid/schema.graphqls (No such file or directory)
mbonnin
06/20/2022, 2:16 PMStylianos Gakis
06/20/2022, 2:17 PM"response": {
"__typename": "EmbarkGroupedResponse",
"title": {
"__typename": "EmbarkResponseExpression",
"text": "Extra buildings",
"expressions": []
},
"items": [],
"each": {
"key": "extraBuildings",
"content": {
"__typename": "EmbarkMessage",
"expressions": [],
"text": "{type.Label}, {area} square meters"
}
}
}
Which seems to be the correct ones according to the schema, since the response is EmbarkGroupedResponse
... on EmbarkGroupedResponse {
title {
...ResponseExpressionFragment
}
items {
...MessageFragment
}
each {
key
content {
...MessageFragment
}
}
}
Stylianos Gakis
06/20/2022, 2:17 PMmbonnin
06/20/2022, 2:18 PMmbonnin
06/20/2022, 2:24 PMStylianos Gakis
06/20/2022, 2:26 PMmbonnin
06/20/2022, 2:27 PMStylianos Gakis
06/20/2022, 2:27 PMStylianos Gakis
06/20/2022, 2:28 PMmbonnin
06/20/2022, 2:29 PMExecution failed for task ':app:processDebugResources'.
> A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction
> Android resource linking failed
com.hedvig.app-mergeDebugResources-111:/values/values.xml:24: error: resource string/SETTINGS_LANGUAGE_SWEDISH (aka <http://com.hedvig.dev.app:string/SETTINGS_LANGUAGE_SWEDISH|com.hedvig.dev.app:string/SETTINGS_LANGUAGE_SWEDISH>) not found.
bod
06/20/2022, 2:30 PMStylianos Gakis
06/20/2022, 2:31 PMmbonnin
06/20/2022, 2:51 PMStylianos Gakis
06/20/2022, 2:53 PMmbonnin
06/20/2022, 2:53 PMStylianos Gakis
06/20/2022, 2:54 PMStylianos Gakis
06/20/2022, 3:00 PMmbonnin
06/20/2022, 3:00 PMStylianos Gakis
06/20/2022, 3:00 PMStylianos Gakis
06/20/2022, 3:01 PMmbonnin
06/20/2022, 3:01 PMmbonnin
06/20/2022, 3:01 PMmbonnin
06/20/2022, 3:02 PMmbonnin
06/20/2022, 3:03 PMStylianos Gakis
06/20/2022, 3:04 PMStylianos Gakis
06/20/2022, 3:04 PMmbonnin
06/20/2022, 3:04 PMmbonnin
06/20/2022, 3:05 PMmbonnin
06/20/2022, 3:05 PMmbonnin
06/20/2022, 3:06 PMWas it preventing some wrong behavior or more that it was a state that you thought never should have happened but it does in fact happen in this very specific scenario?It is required to make https://github.com/apollographql/apollo-kotlin/issues/3344 work
mbonnin
06/20/2022, 3:07 PMmbonnin
06/20/2022, 3:08 PMStylianos Gakis
06/20/2022, 3:10 PMmbonnin
06/20/2022, 3:10 PMresponseBased
models, it's not an issue because we read all the fields all the time. But with operationBased
models and fragments only having "local" knowledge of the selection set, it feels a lot more challenging...mbonnin
06/20/2022, 3:11 PMoperationBased
models"mbonnin
06/20/2022, 3:12 PMMapJsonReader
for the strict mode 🤔Stylianos Gakis
06/20/2022, 3:21 PMmbonnin
06/20/2022, 3:22 PMStylianos Gakis
06/20/2022, 3:26 PMmbonnin
06/20/2022, 3:27 PMmbonnin
06/20/2022, 3:28 PMStylianos Gakis
06/20/2022, 3:44 PMmbonnin
06/21/2022, 7:32 AMmbonnin
06/21/2022, 7:35 AMcompat
models but we should certainly make a release about this.Stylianos Gakis
06/21/2022, 7:57 AMmbonnin
06/21/2022, 7:58 AMoperationBased
drops the .fragments
intermediate field and renames asFoo
to onFoo
. That's mostly itmbonnin
06/21/2022, 7:59 AMStylianos Gakis
06/21/2022, 8:00 AMStylianos Gakis
06/21/2022, 8:00 AMmbonnin
06/21/2022, 8:04 AM{
name
... on Droid {
primaryFunction
}
}
compat does:
Hero(val name: String, val asDroid: AsDroid?)
AsDroid(val name: String, val primaryFunction: String)
operationBased does:
Hero(val name: String, val onDroid: OnDroid?)
OnDroid(val primaryFunction: String)
Stylianos Gakis
06/21/2022, 8:07 AMmbonnin
06/21/2022, 8:08 AMStylianos Gakis
06/21/2022, 8:09 AMmbonnin
06/21/2022, 8:09 AMmbonnin
06/21/2022, 8:10 AMmbonnin
06/21/2022, 8:10 AMStylianos Gakis
06/21/2022, 8:14 AMcodegenModels.set(MODELS_COMPAT)
exists and link to the design doc.
And yeah an IntelliJ refactoring would be optimal, but it sounds quite complicated to do it.mbonnin
06/21/2022, 8:18 AMmbonnin
06/21/2022, 8:42 AMStylianos Gakis
06/21/2022, 9:18 AMmbonnin
06/21/2022, 9:21 AM