Skip to content

Commit 3903eb6

Browse files
committed
Also update other labels.
1 parent 3dd3afb commit 3903eb6

File tree

5 files changed

+56
-22
lines changed

5 files changed

+56
-22
lines changed

app/lib/frontend/templates/package_misc.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ d.Node replacedByLink(String replacedBy) {
200200
/// Renders the labeled scores widget (the score values in a compact layout).
201201
d.Node labeledScoresNodeFromPackageView(PackageView view, {String? version}) {
202202
return labeledScoresNode(
203+
package: view.name,
203204
pkgScorePageUrl: urls.pkgScoreUrl(view.name, version: version),
204205
likeCount: view.likes,
205206
grantedPubPoints: view.grantedPubPoints,

app/lib/frontend/templates/views/pkg/labeled_scores.dart

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@ import 'package:_pub_shared/format/number_format.dart';
77
import '../../../dom/dom.dart' as d;
88

99
d.Node labeledScoresNode({
10+
required String package,
1011
required String pkgScorePageUrl,
1112
required int likeCount,
1213
required int? grantedPubPoints,
1314
required int? thirtyDaysDownloads,
1415
}) {
16+
final formattedLikes = compactFormat(likeCount);
17+
final formattedDownloads =
18+
thirtyDaysDownloads == null ? null : compactFormat(thirtyDaysDownloads);
1519
return d.a(
1620
classes: ['packages-scores'],
1721
href: pkgScorePageUrl,
@@ -20,9 +24,10 @@ d.Node labeledScoresNode({
2024
classes: ['packages-score', 'packages-score-like'],
2125
child: _labeledScore(
2226
'likes',
23-
'${compactFormat(likeCount).value}'
24-
'${compactFormat(likeCount).suffix}',
27+
// keep in-sync with pkg/web_app/lib/src/likes.dart
28+
'${formattedLikes.value}${formattedLikes.suffix}',
2529
sign: ''),
30+
attributes: {'data-package': package},
2631
),
2732
d.div(
2833
classes: ['packages-score', 'packages-score-health'],
@@ -35,9 +40,8 @@ d.Node labeledScoresNode({
3540
classes: ['packages-score', 'packages-score-downloads'],
3641
child: _labeledScore(
3742
'downloads',
38-
thirtyDaysDownloads != null
39-
? '${compactFormat(thirtyDaysDownloads).value}'
40-
'${compactFormat(thirtyDaysDownloads).suffix}'
43+
formattedDownloads != null
44+
? '${formattedDownloads.value}${formattedDownloads.suffix}'
4145
: null,
4246
sign: '',
4347
),

app/lib/frontend/templates/views/pkg/score_tab.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,11 +318,13 @@ d.Node _likeKeyFigureNode(int? likeCount) {
318318
label: 'likes',
319319
);
320320
}
321+
final formatted = compactFormat(likeCount);
322+
// keep in-sync with pkg/web_app/lib/src/likes.dart
321323
return _keyFigureNode(
322-
value: '${compactFormat(likeCount).value}'
323-
'${compactFormat(likeCount).suffix}',
324+
value: '${formatted.value}${formatted.suffix}',
324325
supplemental: '',
325326
label: 'likes',
327+
classes: ['score-key-figure--likes'],
326328
);
327329
}
328330

@@ -367,9 +369,10 @@ d.Node _keyFigureNode({
367369
required String value,
368370
required String supplemental,
369371
required String label,
372+
List<String>? classes,
370373
}) {
371374
return d.div(
372-
classes: ['score-key-figure'],
375+
classes: ['score-key-figure', ...?classes],
373376
children: [
374377
d.div(
375378
classes: ['score-key-figure-title'],

pkg/pub_integration/test/like_test.dart

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,27 +40,37 @@ void main() {
4040
final user = await fakeTestScenario.createTestUser(email: '[email protected]');
4141

4242
await user.withBrowserPage((page) async {
43-
Future<String> getCountLabel() async {
44-
final label = await page.$('.like-button-and-label--count');
45-
return await label.textContent();
43+
Future<List<String>> getCountLabels() async {
44+
final buttonLabel = await page.$('.like-button-and-label--count');
45+
final viewLabel =
46+
await page.$('.packages-score-like .packages-score-value-number');
47+
final keyScoreLabel = await page
48+
.$OrNull('.score-key-figure--likes .score-key-figure-value');
49+
return [
50+
await buttonLabel.textContent(),
51+
await viewLabel.textContent(),
52+
(await keyScoreLabel?.textContent()) ?? '',
53+
];
4654
}
4755

4856
await page.gotoOrigin('/packages/test_pkg');
49-
expect(await getCountLabel(), '0');
57+
expect(await getCountLabels(), ['0', '0', '']);
5058

5159
await page.click('.like-button-and-label--button');
5260
await Future.delayed(Duration(seconds: 1));
53-
expect(await getCountLabel(), '1');
61+
expect(await getCountLabels(), ['1', '1', '']);
5462

55-
await page.gotoOrigin('/packages/test_pkg');
56-
expect(await getCountLabel(), '1');
63+
// displaying all three
64+
await page.gotoOrigin('/packages/test_pkg/score');
65+
expect(await getCountLabels(), ['1', '1', '1']);
5766

5867
await page.click('.like-button-and-label--button');
5968
await Future.delayed(Duration(seconds: 1));
6069

61-
expect(await getCountLabel(), '0');
70+
// checking it on the main package page too
71+
expect(await getCountLabels(), ['0', '0', '0']);
6272
await page.gotoOrigin('/packages/test_pkg');
63-
expect(await getCountLabel(), '0');
73+
expect(await getCountLabels(), ['0', '0', '']);
6474
});
6575
});
6676
});

pkg/web_app/lib/src/likes.dart

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,26 @@ void setupLikes() {
6363

6464
var likesDelta = 0;
6565

66-
// keep in-sync with app/lib/frontend/templates/views/pkg/liked_package_list.dart
67-
String likesString() {
66+
void updateLabels() {
6867
final likesCount = originalCount + likesDelta;
69-
return formatWithSuffix(likesCount);
68+
// keep in-sync with app/lib/frontend/templates/views/pkg/liked_package_list.dart
69+
countLabel.innerText = formatWithSuffix(likesCount);
70+
71+
// keep in-sync with app/lib/frontend/templates/views/pkg/labeled_scores.dart
72+
final formatted = compactFormat(likesCount);
73+
final labeledScoreLikeString = '${formatted.value}${formatted.suffix}';
74+
final labeledLikes = querySelectorAll('.packages-score-like')
75+
.where((e) => e.dataset['package'] == package)
76+
.toList();
77+
for (final labeledLike in labeledLikes) {
78+
labeledLike.querySelector('.packages-score-value-number')?.text =
79+
labeledScoreLikeString;
80+
}
81+
82+
// keep in-sync with app/lib/frontend/templates/views/pkg/score_tab.dart
83+
querySelector('.score-key-figure--likes')
84+
?.querySelector('.score-key-figure-value')
85+
?.text = labeledScoreLikeString;
7086
}
7187

7288
final iconButtonToggle = MDCIconButtonToggle(likeButton);
@@ -87,12 +103,12 @@ void setupLikes() {
87103
if (iconButtonToggle.on ?? false) {
88104
// The button has shifted to on.
89105
likesDelta++;
90-
countLabel.innerText = likesString();
106+
updateLabels();
91107
_enqueue(() => api_client.client.likePackage(package));
92108
} else {
93109
// The button has shifted to off.
94110
likesDelta--;
95-
countLabel.innerText = likesString();
111+
updateLabels();
96112
_enqueue(() => api_client.client.unlikePackage(package));
97113
}
98114
});

0 commit comments

Comments
 (0)