fix: cache issue on provider disconnect/reconnect#1992
Conversation
Greptile SummaryThis PR clears provider-scoped issue query caches (
Confidence Score: 4/5Safe to merge — the cache-clearing logic is well-scoped and the partial-key removal correctly targets all related queries for a provider. The change is focused and correct. The only open item is that the per-provider src/renderer/features/integrations/integrations-provider.tsx — the new inline arrow functions for each provider's
|
| Filename | Overview |
|---|---|
| src/renderer/features/integrations/integrations-provider.tsx | Replaces the shared invalidateStatuses callback with a per-provider invalidateProvider that additionally removes issues:initial and issues:search cache entries for the disconnected/connected provider, preventing stale issue data after an account switch. |
Sequence Diagram
sequenceDiagram
participant User
participant ProviderConnection as useProviderConnection
participant InvalidateProvider as invalidateProvider
participant QueryClient
User->>ProviderConnection: connect/disconnect
ProviderConnection->>ProviderConnection: mutation.mutateAsync()
Note over ProviderConnection: onSettled fires (success OR failure)
ProviderConnection->>InvalidateProvider: invalidate()
InvalidateProvider->>QueryClient: removeQueries(['issues:initial', provider])
InvalidateProvider->>QueryClient: removeQueries(['issues:search', provider])
InvalidateProvider->>QueryClient: invalidateQueries(ISSUE_CONNECTION_STATUS_QUERY_KEY)
QueryClient-->>InvalidateProvider: cache cleared for provider
QueryClient-->>ProviderConnection: connection status refetched
Prompt To Fix All With AI
Fix the following 1 code review issue. Work through them one at a time, proposing concise fixes.
---
### Issue 1 of 1
src/renderer/features/integrations/integrations-provider.tsx:159-182
The inline arrow functions passed as `invalidate` are recreated on every render since they aren't memoized. While `useProviderConnection` uses `useMutation` internally (which doesn't re-subscribe on every render cycle), binding each provider string directly in `invalidateProvider` and passing it as a stable callback would be cleaner and avoid any future surprise if the hook's internals change.
```suggestion
const invalidateLinear = useCallback(() => invalidateProvider('linear'), [invalidateProvider]);
const invalidateJira = useCallback(() => invalidateProvider('jira'), [invalidateProvider]);
const invalidateGitlab = useCallback(() => invalidateProvider('gitlab'), [invalidateProvider]);
const invalidatePlain = useCallback(() => invalidateProvider('plain'), [invalidateProvider]);
const invalidateForgejo = useCallback(() => invalidateProvider('forgejo'), [invalidateProvider]);
const invalidateFeaturebase = useCallback(() => invalidateProvider('featurebase'), [invalidateProvider]);
const linearConnection = useProviderConnection({
...PROVIDER_CONNECTION_CONFIG.linear,
invalidate: invalidateLinear,
});
const jiraConnection = useProviderConnection({
...PROVIDER_CONNECTION_CONFIG.jira,
invalidate: invalidateJira,
});
const gitlabConnection = useProviderConnection({
...PROVIDER_CONNECTION_CONFIG.gitlab,
invalidate: invalidateGitlab,
});
const plainConnection = useProviderConnection({
...PROVIDER_CONNECTION_CONFIG.plain,
invalidate: invalidatePlain,
});
const forgejoConnection = useProviderConnection({
...PROVIDER_CONNECTION_CONFIG.forgejo,
invalidate: invalidateForgejo,
});
const featurebaseConnection = useProviderConnection({
...PROVIDER_CONNECTION_CONFIG.featurebase,
invalidate: invalidateFeaturebase,
});
```
Reviews (1): Last reviewed commit: "Fix issue cache after integration reconn..." | Re-trigger Greptile
summary
issue cache per provider clear on disconnect so that account switch works flawlessly