(async () => { const apolloClient = (() => { const entry = document.querySelector('[data-testid^="entry-"]'); const fk = Object.keys(entry).find(k => k.startsWith('__reactFiber')); let n = entry[fk]; while (n) { const ctx = n.memoizedProps?.value?.client ?? n.memoizedProps?.client; if (ctx?.cache) return ctx; n = n.return; } })(); const csrfToken = document.cookie.match(/csrf-token=([^;]+)/)?.[1] ?? ''; const fetchEntries = (from, limit) => fetch('/titanarum/public', { method: 'POST', headers: { 'content-type': 'application/json', 'x-csrf-token': csrfToken }, body: JSON.stringify({ operationName: 'Votes', variables: { slug: 'mediterranean-hues-2026-03', limit, from }, query: `query Votes($slug: String!, $from: Int, $limit: Int) { challengeEntriesForVoting(slug: $slug, from: $from, limit: $limit) { results { entries { id designId challengeId entryImage entryPlace validVotes isFavorite isSelected entryTitle entryDescription entryStatus entryState pdpUrl product image { L M S XS __typename } user { userId userName userImage __typename } __typename } __typename } __typename } }` }) }).then(r => r.json()); const [res1, res2] = await Promise.all([fetchEntries(0, 1000), fetchEntries(1000, 1000)]); const allEntries = [ ...res1.data.challengeEntriesForVoting.results.entries, ...res2.data.challengeEntriesForVoting.results.entries ]; console.log(`✅ ${allEntries.length} entry`); // Scrivi tutte le entry mancanti nella cache come oggetti normalizzati const cacheSnapshot = apolloClient.cache.extract(); const toWrite = {}; allEntries.forEach(e => { // BaseUser const userKey = `BaseUser:{"userId":"${e.user.userId}"}`; if (!cacheSnapshot[userKey]) { toWrite[userKey] = { __typename: 'BaseUser', userId: e.user.userId, userName: e.user.userName, userImage: e.user.userImage }; } // Entry const entryKey = `ChallengeEntryWithUserValues:${e.id}`; if (!cacheSnapshot[entryKey]) { toWrite[entryKey] = { __typename: 'ChallengeEntryWithUserValues', id: e.id, designId: e.designId, challengeId: e.challengeId, entryImage: e.entryImage, entryPlace: e.entryPlace, validVotes: e.validVotes, isFavorite: e.isFavorite, isSelected: e.isSelected, entryTitle: e.entryTitle, entryDescription: e.entryDescription, entryStatus: e.entryStatus, entryState: e.entryState, pdpUrl: e.pdpUrl, product: e.product, image: { __typename: 'DesignImage', L: e.image.L, M: e.image.M, S: e.image.S, XS: e.image.XS }, user: { __ref: userKey } }; } }); // Costruisci il nuovo ROOT_QUERY con le entry aggiornate const allRefs = allEntries.map(e => ({ __ref: `ChallengeEntryWithUserValues:${e.id}` })); const existingRoot = cacheSnapshot['ROOT_QUERY']; const buildEntry = (fromVal) => ({ __typename: 'ChallengeEntriesForVoting', info: { __typename: 'ChallengeEntriesVotingInfo', pagination: { __typename: 'Pagination', limit: allEntries.length, offset: 0, total: 1735 }, votingStats: { __ref: 'VotingStats:{}' } }, results: { __typename: 'ChallengeEntriesForVotingResults', entries: allRefs, promotedEntry: null, guestVoting: null } }); toWrite['ROOT_QUERY'] = { ...existingRoot, 'challengeEntriesForVoting({"from":null,"limit":84,"slug":"mediterranean-hues-2026-03"})': buildEntry(null), 'challengeEntriesForVoting({"from":0,"limit":84,"slug":"mediterranean-hues-2026-03"})': buildEntry(0), }; // Restore diretto nella cache interna apolloClient.cache.restore({ ...cacheSnapshot, ...toWrite }); apolloClient.cache.broadcastWatches(); console.log(`🎨 Cache ripristinata con ${allEntries.length} entry su entrambe le chiavi!`); })();