Skip to content

Commit 3ace671

Browse files
authored
Fix: Protected audience sort button (#1161)
* Fix PA-sort button * use set interval instead of settimeout * Fix session count inconsistency
1 parent c9c7164 commit 3ace671

File tree

8 files changed

+82
-38
lines changed

8 files changed

+82
-38
lines changed

packages/extension/src/store/PRTStore.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ class PRTStore extends DataStore {
378378

379379
globalStats.domains = Object.keys(prtStatistics).length;
380380

381-
globalStats.mdl = await chrome.runtime.sendMessage({
381+
await chrome.runtime.sendMessage({
382382
type: TAB_TOKEN_DATA,
383383
payload: {
384384
tabId,

packages/extension/src/view/devtools/pages/privateAdvertising/protectedAudience/auctions/components/sortButton/index.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,29 @@ import { DescendingOrder } from '@google-psat/design-system';
2121

2222
interface SortButtonProps {
2323
sortOrder: 'asc' | 'desc';
24-
setSortOrder: React.Dispatch<React.SetStateAction<'asc' | 'desc'>>;
24+
setSortOrder: React.Dispatch<
25+
React.SetStateAction<Record<string, 'asc' | 'desc'>>
26+
>;
2527
isSidebarFocused: boolean;
28+
adUnit: string;
2629
}
2730

2831
const SortButton = ({
2932
setSortOrder,
3033
sortOrder,
3134
isSidebarFocused,
35+
adUnit,
3236
}: SortButtonProps) => {
3337
return (
3438
<span
3539
className="h-full"
3640
onClick={() => {
37-
setSortOrder(sortOrder === 'asc' ? 'desc' : 'asc');
41+
setSortOrder((prev) => {
42+
return {
43+
...prev,
44+
[adUnit]: prev[adUnit] === 'asc' ? 'desc' : 'asc',
45+
};
46+
});
3847
}}
3948
title={`Sort in ${
4049
sortOrder === 'asc' ? 'descending' : 'ascending'

packages/extension/src/view/devtools/pages/privateAdvertising/protectedAudience/auctions/hooks/useDataProcessing.tsx

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,27 @@
1717
/**
1818
* External dependencies.
1919
*/
20-
import { useCallback, useMemo } from 'react';
20+
import { useCallback, useEffect, useMemo } from 'react';
2121

2222
/**
2323
* Internal dependencies.
2424
*/
2525
import { usePrebid, useProtectedAudience } from '../../../../../stateProviders';
2626

2727
const useDataProcessing = () => {
28-
const { paapi, isMultiSeller } = useProtectedAudience(({ state }) => ({
29-
paapi: {
30-
auctionEvents: state.auctionEvents,
31-
adsAndBidders: state.adsAndBidders,
28+
const { paapi, isMultiSeller, setSortOrder } = useProtectedAudience(
29+
({ state, actions }) => ({
30+
paapi: {
31+
auctionEvents: state.auctionEvents,
32+
adsAndBidders: state.adsAndBidders,
33+
isMultiSeller: state.isMultiSellerAuction,
34+
receivedBids: state.receivedBids,
35+
noBids: state.noBids,
36+
},
3237
isMultiSeller: state.isMultiSellerAuction,
33-
receivedBids: state.receivedBids,
34-
noBids: state.noBids,
35-
},
36-
isMultiSeller: state.isMultiSellerAuction,
37-
}));
38+
setSortOrder: actions.setSortOrder,
39+
})
40+
);
3841

3942
const {
4043
prebidAdunits,
@@ -56,9 +59,34 @@ const useDataProcessing = () => {
5659
return Object.keys(paapi?.adsAndBidders || {});
5760
}, [paapi.adsAndBidders, prebidAdunits]);
5861

62+
useEffect(() => {
63+
const _sortOrder: Record<string, 'asc' | 'desc'> = {};
64+
if (Object.keys(prebidAdunits || {}).length > 0) {
65+
Object.values(prebidAuctionEvents || {}).forEach((events) => {
66+
if (!events?.length || !events[0]?.adUnitCodes?.length) {
67+
return;
68+
}
69+
70+
const _adUnits = events[0].adUnitCodes as string[];
71+
72+
_adUnits.forEach((adUnit) => {
73+
_sortOrder[adUnit] = 'asc';
74+
});
75+
});
76+
}
77+
78+
if (Object.keys(paapi?.adsAndBidders || {}).length > 0) {
79+
const _adUnits = Object.keys(paapi.adsAndBidders || {});
80+
81+
_adUnits.forEach((adUnit) => {
82+
_sortOrder[adUnit] = 'asc';
83+
});
84+
}
85+
setSortOrder(_sortOrder);
86+
}, [paapi.adsAndBidders, prebidAdunits, prebidAuctionEvents, setSortOrder]);
87+
5988
const adUnitsTimestamp = useMemo(() => {
6089
const _adUnitsTimestamp: Record<string, string[]> = {};
61-
6290
if (Object.keys(prebidAdunits || {}).length > 0) {
6391
Object.values(prebidAuctionEvents || {}).forEach((events) => {
6492
if (!events?.length || !events[0]?.adUnitCodes?.length) {

packages/extension/src/view/devtools/pages/privateAdvertising/protectedAudience/auctions/hooks/useSidebarProcessing.tsx

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const useSidebarProcessing = () => {
5050
_prebidAuctionEvents: state.prebidData?.auctionEvents || {},
5151
}));
5252

53-
const changedValue = useRef({ oldAuctionEvents: {}, oldSortOrder: '' });
53+
const changedValue = useRef({ oldAuctionEvents: {}, oldSortOrder: {} });
5454

5555
const { updateSelectedItemKey, isSidebarFocused, isKeySelected } = useSidebar(
5656
({ state, actions }) => ({
@@ -98,7 +98,7 @@ const useSidebarProcessing = () => {
9898
_prebidAuctionEvents,
9999
_paAuctionEvents,
100100
},
101-
oldSortOrder: sortOrder ?? '',
101+
oldSortOrder: sortOrder,
102102
};
103103
};
104104
}, [_paAuctionEvents, _prebidAuctionEvents, sortOrder]);
@@ -245,8 +245,9 @@ const useSidebarProcessing = () => {
245245
adUnitContainerChildren[adUnit].extraInterfaceToTitle = {
246246
Element: SortButton,
247247
props: {
248+
adUnit,
248249
setSortOrder,
249-
sortOrder,
250+
sortOrder: sortOrder[adUnit],
250251
isSidebarFocused: isSidebarFocused && isKeySelected(adUnit),
251252
},
252253
};
@@ -258,8 +259,8 @@ const useSidebarProcessing = () => {
258259
newSidebarData.adunits.children = {
259260
...adUnitContainerChildren,
260261
};
261-
if (sortOrder === 'asc') {
262-
Object.keys(newSidebarData['adunits'].children).forEach((adUnit) => {
262+
Object.keys(newSidebarData['adunits'].children).forEach((adUnit) => {
263+
if (sortOrder[adUnit] === 'asc') {
263264
const sortedKeys = Object.keys(
264265
newSidebarData['adunits'].children[adUnit].children
265266
).sort((a, b) => {
@@ -274,9 +275,7 @@ const useSidebarProcessing = () => {
274275
newSidebarData['adunits'].children[adUnit].children[key];
275276
return acc;
276277
}, {} as SidebarItems);
277-
});
278-
} else {
279-
Object.keys(newSidebarData['adunits'].children).forEach((adUnit) => {
278+
} else {
280279
const sortedKeys = Object.keys(
281280
newSidebarData['adunits'].children[adUnit].children
282281
).sort((a, b) => {
@@ -292,8 +291,8 @@ const useSidebarProcessing = () => {
292291
newSidebarData['adunits'].children[adUnit].children[key];
293292
return acc;
294293
}, {} as SidebarItems);
295-
});
296-
}
294+
}
295+
});
297296
}
298297

299298
return newSidebarData;

packages/extension/src/view/devtools/stateProviders/probabilisticRevealTokens/probabilisticRevealTokensProvider.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,11 @@ const Provider = ({ children }: PropsWithChildren) => {
168168
acc.nonZeroSignal =
169169
prtStatistics[key].nonZeroSignal + acc.nonZeroSignal;
170170

171-
let hostname = isValidURL(origin) ? new URL(origin).hostname : '';
171+
let hostname = isValidURL(key) ? new URL(key).hostname : '';
172172

173173
hostname = hostname.startsWith('www.')
174174
? hostname.slice(4)
175175
: hostname;
176-
177176
acc.mdl +=
178177
hostname &&
179178
scriptBlockingData.filter((_data) => _data.domain === hostname)
@@ -190,10 +189,15 @@ const Provider = ({ children }: PropsWithChildren) => {
190189

191190
if (hasChangesForPrtStatisticsData) {
192191
setStatistics((prev) => {
193-
return {
192+
const newData = {
194193
...prev,
195194
globalView: globalStats,
196195
};
196+
197+
if (isEqual(prev, newData)) {
198+
return prev;
199+
}
200+
return newData;
197201
});
198202
}
199203
},

packages/extension/src/view/devtools/stateProviders/protectedAudience/context.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ export interface ProtectedAudienceContextType {
3636
noBids: NoBidsType;
3737
adsAndBidders: AdsAndBiddersType;
3838
selectedAdUnit: string | null;
39-
sortOrder: 'asc' | 'desc';
39+
sortOrder: Record<string, 'asc' | 'desc'>;
4040
};
4141
actions: {
4242
setSelectedAdUnit: React.Dispatch<React.SetStateAction<string | null>>;
43-
setSortOrder: React.Dispatch<React.SetStateAction<'asc' | 'desc'>>;
43+
setSortOrder: React.Dispatch<
44+
React.SetStateAction<Record<string, 'asc' | 'desc'>>
45+
>;
4446
};
4547
}
4648

@@ -53,7 +55,7 @@ export const initialState: ProtectedAudienceContextType = {
5355
noBids: {},
5456
adsAndBidders: {},
5557
selectedAdUnit: null,
56-
sortOrder: 'asc',
58+
sortOrder: {},
5759
},
5860
actions: {
5961
setSelectedAdUnit: noop,

packages/extension/src/view/devtools/stateProviders/protectedAudience/protectedAudienceProvider.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ const Provider = ({ children }: PropsWithChildren) => {
6767
ProtectedAudienceContextType['state']['noBids']
6868
>({});
6969

70-
const [sortOrder, setSortOrder] =
71-
useState<ProtectedAudienceContextType['state']['sortOrder']>('asc');
70+
const [sortOrder, setSortOrder] = useState<
71+
ProtectedAudienceContextType['state']['sortOrder']
72+
>({});
7273

7374
const [adsAndBidders, setAdsAndBidders] = useState<
7475
ProtectedAudienceContextType['state']['adsAndBidders']
@@ -113,7 +114,6 @@ const Provider = ({ children }: PropsWithChildren) => {
113114
}
114115

115116
const time = new Date(events?.[0]?.time * 1000).toISOString();
116-
117117
reshapedAuctionEvents[adUnitCode] = {
118118
...reshapedAuctionEvents[adUnitCode],
119119
[time + '||' + events?.[0]?.uniqueAuctionId]: {
@@ -183,7 +183,6 @@ const Provider = ({ children }: PropsWithChildren) => {
183183

184184
return acc;
185185
}, {} as Record<string, singleAuctionEvent[]>);
186-
187186
reshapedAuctionEvents[adUnit] = {
188187
...reshapedAuctionEvents[adUnit],
189188
// @ts-ignore

packages/extension/src/view/devtools/stateProviders/settings/settingsProvider.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,13 @@ const Provider = ({ children }: PropsWithChildren) => {
143143

144144
const reloadExtension = useCallback(() => {
145145
chrome.runtime.reload();
146-
// using timeout since if frame is reloaded immidieatly it results in extension being blocked.
147-
setTimeout(() => {
148-
globalThis?.location?.reload();
149-
}, 250);
146+
147+
const interval = setInterval(() => {
148+
if (chrome?.runtime?.id) {
149+
clearInterval(interval);
150+
globalThis?.location?.reload();
151+
}
152+
}, 100);
150153
}, []);
151154

152155
const openIncognitoTab = useCallback(async () => {

0 commit comments

Comments
 (0)