Skip to content

Commit 4ff4e63

Browse files
committed
nominationCount only used with discussionsState
1 parent 64f76a3 commit 4ff4e63

File tree

5 files changed

+25
-28
lines changed

5 files changed

+25
-28
lines changed

resources/js/beatmap-discussions/discussions-state.ts

+20-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import BeatmapsetDiscussionJson from 'interfaces/beatmapset-discussion-json';
55
import BeatmapsetWithDiscussionsJson from 'interfaces/beatmapset-with-discussions-json';
66
import GameMode from 'interfaces/game-mode';
7-
import { maxBy } from 'lodash';
7+
import { maxBy, sum } from 'lodash';
88
import { action, computed, makeObservable, observable, reaction } from 'mobx';
99
import moment from 'moment';
1010
import core from 'osu-core-singleton';
@@ -400,6 +400,25 @@ export default class DiscussionsState {
400400
}
401401
}
402402

403+
nominationsCount(type: 'current' | 'required') {
404+
const nominations = this.beatmapset.nominations;
405+
if (nominations.legacy_mode) {
406+
return nominations[type];
407+
}
408+
409+
if (type === 'current' || this.calculatedMainRuleset == null) {
410+
return sum(Object.values(nominations[type]));
411+
}
412+
413+
let total = 0;
414+
415+
Object.entries(nominations[type]).forEach(([ruleset, count]) =>
416+
ruleset === this.calculatedMainRuleset ? total = total + count : ++total,
417+
);
418+
419+
return total;
420+
}
421+
403422
saveState() {
404423
storeJson(jsonId, this.toJson());
405424
}

resources/js/beatmap-discussions/editor.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { Editable, ReactEditor, RenderElementProps, RenderLeafProps, Slate, with
1919
import { DOMRange } from 'slate-react/dist/utils/dom';
2020
import { onError } from 'utils/ajax';
2121
import { timestampRegex } from 'utils/beatmapset-discussion-helper';
22-
import { nominationsCount } from 'utils/beatmapset-helper';
2322
import { classWithModifiers } from 'utils/css';
2423
import { trans } from 'utils/lang';
2524
import DiscussionsState from './discussions-state';
@@ -440,7 +439,7 @@ export default class Editor extends React.Component<Props, State> {
440439
const canReset = core.currentUser != null && (core.currentUser.is_admin || core.currentUser.is_nat || core.currentUser.is_bng);
441440
const willReset =
442441
this.beatmapset.status === 'pending'
443-
&& nominationsCount(this.beatmapset.nominations, 'current', this.props.discussionsState.calculatedMainRuleset) > 0
442+
&& this.props.discussionsState.nominationsCount('current') > 0
444443
&& docContainsProblem;
445444

446445
if (canDisqualify && willDisqualify) {

resources/js/beatmap-discussions/new-discussion.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import core from 'osu-core-singleton';
1717
import * as React from 'react';
1818
import { onError } from 'utils/ajax';
1919
import { canModeratePosts, formatTimestamp, makeUrl, NearbyDiscussion, nearbyDiscussions, parseTimestamp, validMessageLength } from 'utils/beatmapset-discussion-helper';
20-
import { downloadLimited, nominationsCount } from 'utils/beatmapset-helper';
20+
import { downloadLimited } from 'utils/beatmapset-helper';
2121
import { classWithModifiers } from 'utils/css';
2222
import { InputEventType, makeTextAreaHandler } from 'utils/input-handler';
2323
import { joinComponents, trans } from 'utils/lang';
@@ -270,7 +270,7 @@ export class NewDiscussion extends React.Component<Props> {
270270
if (canDisqualify && willDisqualify) return 'disqualify';
271271

272272
const canReset = core.currentUser?.is_admin || core.currentUser?.is_nat || core.currentUser?.is_bng;
273-
const currentNominations = nominationsCount(this.beatmapset.nominations, 'current', this.props.discussionsState.calculatedMainRuleset);
273+
const currentNominations = this.props.discussionsState.nominationsCount('current');
274274
const willReset = this.beatmapset.status === 'pending' && currentNominations > 0;
275275

276276
if (canReset && willReset) return 'nomination_reset';

resources/js/beatmap-discussions/nominations.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import core from 'osu-core-singleton';
2626
import * as React from 'react';
2727
import { onError } from 'utils/ajax';
2828
import { canModeratePosts, makeUrl, startingPost } from 'utils/beatmapset-discussion-helper';
29-
import { nominationsCount } from 'utils/beatmapset-helper';
3029
import { classWithModifiers } from 'utils/css';
3130
import { formatNumber } from 'utils/html';
3231
import { joinComponents, trans, transExists } from 'utils/lang';
@@ -538,7 +537,7 @@ export class Nominations extends React.Component<Props> {
538537
<div>
539538
<div className={`${bn}__header`}>
540539
<span className={`${bn}__title`}>{trans('beatmaps.nominations.title')}</span>
541-
<span>{formatNumber(nominationsCount(nominations, 'current'))} / {formatNumber(nominationsCount(nominations, 'required', this.props.discussionsState.calculatedMainRuleset))}</span>
540+
<span>{formatNumber(this.props.discussionsState.nominationsCount('current'))} / {this.props.discussionsState.nominationsCount('required')}</span>
542541
</div>
543542
{this.renderLightsForNominations(nominations)}
544543
</div>

resources/js/utils/beatmapset-helper.ts

+1-21
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0.
22
// See the LICENCE file in the repository root for full licence text.
33

4-
import BeatmapsetJson, { BeatmapsetNominationsInterface } from 'interfaces/beatmapset-json';
5-
import GameMode from 'interfaces/game-mode';
4+
import BeatmapsetJson from 'interfaces/beatmapset-json';
65
import { route } from 'laroute';
7-
import { sum } from 'lodash';
86
import { action, runInAction } from 'mobx';
97
import core from 'osu-core-singleton';
108
import { error } from 'utils/ajax';
@@ -36,24 +34,6 @@ export function getTitle(beatmapset: BeatmapsetJson) {
3634
return beatmapset.title;
3735
}
3836

39-
export function nominationsCount(nominations: BeatmapsetNominationsInterface, type: 'current' | 'required', mainRuleset?: GameMode | null): number {
40-
if (nominations.legacy_mode) {
41-
return nominations[type];
42-
}
43-
44-
if (type === 'current' || mainRuleset == null) {
45-
return sum(Object.values(nominations[type]));
46-
}
47-
48-
let total = 0;
49-
50-
Object.entries(nominations[type]).forEach(([ruleset, count]) =>
51-
ruleset === mainRuleset ? total = total + count : ++total,
52-
);
53-
54-
return total;
55-
}
56-
5737
export function showVisual(beatmapset: BeatmapsetJson) {
5838
return !beatmapset.nsfw || core.userPreferences.get('beatmapset_show_nsfw');
5939
}

0 commit comments

Comments
 (0)