diff --git a/src/stores/sync/connected-sites-slice.ts b/src/stores/sync/connected-sites-slice.ts index 5157ad018..2e78853e1 100644 --- a/src/stores/sync/connected-sites-slice.ts +++ b/src/stores/sync/connected-sites-slice.ts @@ -1,6 +1,7 @@ import { createAsyncThunk, createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit'; +import fastDeepEqual from 'fast-deep-equal'; import { getIpcApi } from 'src/lib/get-ipc-api'; -import { RootState } from 'src/stores'; +import { RootState, store } from 'src/stores'; import type { SyncSite } from 'src/hooks/use-fetch-wpcom-sites/types'; import type { SyncModalMode } from 'src/modules/sync/types'; @@ -145,3 +146,19 @@ export const connectedSitesSelectors = { localSiteId ? connectedSitesState.sites[ localSiteId ] || [] : [] ), }; + +window.ipcListener.subscribe( 'user-data-updated', async ( _, userData ) => { + const state = store.getState(); + const currentUserId = userData.authToken?.id; + + if ( ! currentUserId ) { + return; + } + + const connectedSitesFromUserData = userData.connectedWpcomSites?.[ currentUserId ] || []; + const connectedSitesFromState = Object.values( state.connectedSites.sites ).flat(); + + if ( ! fastDeepEqual( connectedSitesFromUserData, connectedSitesFromState ) ) { + void store.dispatch( loadAllConnectedSites() ); + } +} );