Skip to content

Commit cce3066

Browse files
committed
update nomination status to reflect main ruleset change when picking a ruleset to nominate
1 parent f79c14f commit cce3066

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

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

+8
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export default class DiscussionsState {
5353
@observable pinnedNewDiscussion = false;
5454

5555
@observable readPostIds = new Set<number>();
56+
@observable selectedNominatedRulesets: GameMode[] = [];
5657
@observable selectedUserId: number | null = null;
5758
@observable showDeleted = true; // this toggle only affects All and deleted discussion filters, other filters don't show deleted
5859

@@ -231,6 +232,13 @@ export default class DiscussionsState {
231232
return moment(maxLastUpdate).unix();
232233
}
233234

235+
get calculatedMainRuleset() {
236+
return this.beatmapset.main_ruleset
237+
// The main ruleset not being set yet implies there are either no nominations
238+
// or an equal number of nominations for each ruleset, so the next selection should make it the main ruleset.
239+
?? (this.selectedNominatedRulesets.length === 1 ? this.selectedNominatedRulesets[0] : null);
240+
}
241+
234242
@computed
235243
get nonDeletedDiscussions() {
236244
return this.discussionsArray.filter((discussion) => discussion.deleted_at == null);

resources/js/beatmap-discussions/nominations.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,9 @@ export class Nominations extends React.Component<Props> {
479479
current={nominations.current[ruleset] ?? 0}
480480
label={hybrid ? <i className={`fal fa-extra-mode-${ruleset}`} /> : null}
481481
modifiers={{ 'beatmapset-nomination-hybrid' : hybrid }}
482-
total={required}
482+
// set all non-main ruleset to 1
483+
// TODO: add main/non-main required to response
484+
total={this.props.discussionsState.calculatedMainRuleset == null || this.props.discussionsState.calculatedMainRuleset === ruleset ? required : 1}
483485
/>
484486
))}
485487
</div>

resources/js/beatmap-discussions/nominator.tsx

+11-11
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,17 @@ const bn = 'nomination-dialog';
3030
export class Nominator extends React.Component<Props> {
3131
private readonly checkboxContainerRef = React.createRef<HTMLDivElement>();
3232
@observable private loading = false;
33-
@observable private selectedModes: GameMode[] = [];
3433
@observable private visible = false;
3534
private xhr?: JQuery.jqXHR<BeatmapsetWithDiscussionsJson>;
3635

3736
private get beatmapset() {
3837
return this.props.discussionsState.beatmapset;
3938
}
4039

40+
private get calculatedMainRuleset() {
41+
return this.props.discussionsState.calculatedMainRuleset;
42+
}
43+
4144
private get currentHype() {
4245
return this.props.discussionsState.totalHypeCount;
4346
}
@@ -73,6 +76,10 @@ export class Nominator extends React.Component<Props> {
7376
: Object.keys(this.beatmapset.nominations.required) as GameMode[];
7477
}
7578

79+
private get selectedModes() {
80+
return this.props.discussionsState.selectedNominatedRulesets;
81+
}
82+
7683
private get users() {
7784
return this.props.store.users;
7885
}
@@ -128,13 +135,6 @@ export class Nominator extends React.Component<Props> {
128135
);
129136
}
130137

131-
private get calculatedMode() {
132-
return this.beatmapset.main_ruleset
133-
// The main ruleset not being set yet implies there are either no nominations
134-
// or an equal number of nominations for each ruleset, so the next selection should make it the main ruleset.
135-
?? (this.selectedModes.length === 1 ? this.selectedModes[0] : null);
136-
}
137-
138138
private hasFullNomination(mode: GameMode) {
139139
return this.nominationEvents.some((event) => {
140140
const user = this.users.get(event.user_id);
@@ -186,7 +186,7 @@ export class Nominator extends React.Component<Props> {
186186
}
187187

188188
return curr >= req
189-
|| this.calculatedMode != null && this.calculatedMode !== mode && this.nominationCountWithSelections(mode) > 0;
189+
|| this.calculatedMainRuleset != null && this.calculatedMainRuleset !== mode && this.nominationCountWithSelections(mode) > 0;
190190
}
191191

192192
private nominationCountWithSelections(mode: GameMode) {
@@ -259,7 +259,7 @@ export class Nominator extends React.Component<Props> {
259259
}
260260

261261
private renderModalContentHybrid() {
262-
const currentMode = this.calculatedMode ?? 'undefined';
262+
const currentMode = this.calculatedMainRuleset ?? 'undefined';
263263

264264
return (
265265
<>
@@ -324,7 +324,7 @@ export class Nominator extends React.Component<Props> {
324324
@action
325325
private readonly updateCheckboxes = () => {
326326
const checkedBoxes = map(this.checkboxContainerRef.current?.querySelectorAll<HTMLInputElement>('input[type=checkbox]:checked'), (node) => node.value);
327-
this.selectedModes = checkedBoxes as GameMode[];
327+
this.props.discussionsState.selectedNominatedRulesets = checkedBoxes as GameMode[];
328328
};
329329

330330
private userCanNominateMode(mode: GameMode) {

0 commit comments

Comments
 (0)