salesforcecli / plugin-lightning-dev

Local development tools for LEX, Mobile, and Experience Sites
BSD 3-Clause "New" or "Revised" License
4 stars 5 forks source link

refreshGraphQL doesn't trigger refresh in Local Dev #197

Open readeral opened 6 days ago

readeral commented 6 days ago

Summary

I've done my best to give you relevant info, but you might need me to grab more details from Devtools or whatever...

In the context of Local Dev, when using GraphQL with the lightning/uiGraphQLApi Wire adapter, a call to refreshGraphQL doesn't update the wire data on the component.

Deploying source to org and using the LWC without Local Dev, we get the expected result: re-query occurs and UI is re-rendered with fresh data.

Steps To Reproduce:

  1. Create a LWC importing {gql, graphql, refreshGraphQL} from "lightning/uiGraphQLApi" and making an API query
  2. store 'result' in graphQLqueryResult
  3. render API data in some way along with a button
  4. create a method 'refresh' which returns refreshGraphQL(this.graphQLqueryResult) and append to button
  5. adjust API data on the record. Hit refresh button.

Expected Result

Record data now reflects the change in the updated API wire property

Actual Result

API call is being made (can see it in Network tab) and is returning correct data, but it isn't making its way into the component API wire response.

Additional Information

I struggled to make a minimum reproducible example because when attaching it to a Lightning layout (in this instance, an Account record layout, with an API call against that same record) there was all sorts of funky cache issues going on in Local Dev, but I managed to get the issue to manifest before the page reaches for the cache.

Screenshots:

InitialNetworkCall

initialWireProps

refreshNetworkCall

refreshWireProps

Logs:

System Information

SF CLI:

{
  "architecture": "darwin-arm64",
  "cliVersion": "@salesforce/cli/2.60.13",
  "nodeVersion": "node-v20.16.0",
  "osVersion": "Darwin 24.0.0",
  "rootPath": "/Users/alan/.nvm/versions/node/v20.16.0/lib/node_modules/@salesforce/cli",
  "shell": "zsh",
  "pluginVersions": [
    "@oclif/plugin-autocomplete 3.2.4 (core)",
    "@oclif/plugin-commands 4.0.15 (core)",
    "@oclif/plugin-help 6.2.12 (core)",
    "@oclif/plugin-not-found 3.2.21 (core)",
    "@oclif/plugin-plugins 5.4.9 (core)",
    "@oclif/plugin-search 1.2.9 (core)",
    "@oclif/plugin-update 4.5.9 (core)",
    "@oclif/plugin-version 2.2.13 (core)",
    "@oclif/plugin-warn-if-update-available 3.1.17 (core)",
    "@oclif/plugin-which 3.2.14 (core)",
    "@salesforce/cli 2.60.13 (core)",
    "apex 3.4.10 (core)",
    "api 1.2.2 (core)",
    "auth 3.6.62 (core)",
    "data 3.6.7 (core)",
    "deploy-retrieve 3.12.11 (core)",
    "info 3.4.9 (core)",
    "lightning-dev 1.3.0 (user) published 18 days ago (Sat Sep 21 2024) (latest is 1.8.0)",
    "limits 3.3.32 (core)",
    "marketplace 1.2.26 (core)",
    "org 4.5.10 (core)",
    "packaging 2.8.11 (user) published 3 days ago (Sat Oct 05 2024)",
    "schema 3.3.32 (core)",
    "settings 2.3.21 (core)",
    "signups 2.3.10 (user) published 121 days ago (Sun Jun 09 2024) (latest is 2.5.21)",
    "sobject 1.4.38 (core)",
    "source 3.5.21 (core)",
    "telemetry 3.6.15 (core)",
    "templates 56.3.21 (core)",
    "trust 3.7.31 (core)",
    "user 3.5.31 (core)",
    "@salesforce/sfdx-scanner 4.4.0 (user) published 70 days ago (Wed Jul 31 2024) (latest is 4.6.0)",
    "sfdmu 4.36.3 (user) published 19 days ago (Fri Sep 20 2024)",
    "sfdx-essentials 2.12.0 (user) published 1029 days ago (Wed Dec 15 2021)",
    "sfdx-git-delta 5.46.0 (user) published 7 days ago (Wed Oct 02 2024) (latest is 5.47.0)",
    "sfdx-hardis 5.0.10 (user) published 5 days ago (Fri Oct 04 2024)",
    "texei-sfdx-plugin 2.7.0 (user) published 28 days ago (Wed Sep 11 2024)"
  ]
}

OS: MacOS 15.0.1

minReproduce.zip

readeral commented 6 days ago

For context, I was using an Apex API call and using refreshApex with no issue. Swapping out GraphQL equivalents produced this result, so I'm relatively confident in the rest of my component's logic.

Also now I've created this issue, I've realised that my minReproduce example actually rerenders the LWC on the account page with the updated info because I assume it picks up the refreshed cache from the parent page.

The behaviour of the minReproduce component in local dev, if you refresh the page, it displays nothing, because now it's reaching for a cache that (I assume) is somehow incorrectly structured. Maybe the Local Dev cache doesn't handle graphql appropriately?