Skip to content

Commit 1a3b961

Browse files
likeコンテストのmergeトグルスイッチの常時表示化対応
1 parent 28c6aef commit 1a3b961

File tree

6 files changed

+43
-79
lines changed

6 files changed

+43
-79
lines changed

atcoder-problems-frontend/src/pages/TablePage/Options.tsx

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import {
1515
import { HelpBadgeTooltip } from "../../components/HelpBadgeTooltip";
1616
import { ColorMode } from "../../utils/TableColor";
1717
import { ContestCategory } from "../../utils/ContestClassifier";
18-
import { getLikeContest } from "../../utils/LikeContestUtils";
1918

2019
interface Props {
2120
hideCompletedContest: boolean;
@@ -30,21 +29,11 @@ interface Props {
3029
selectedLanguages: Set<string>;
3130
toggleLanguage: (language: string) => void;
3231
active: ContestCategory;
33-
setSelectedContests: (contest: ContestCategory[]) => void;
34-
showableShowLikeContest: boolean;
35-
showLikeContest: boolean;
36-
setShowLikeContest: (showLikeContest: boolean) => void;
32+
mergeLikeContest: boolean;
33+
setMergeLikeContest: (showLikeContest: boolean) => void;
3734
}
3835

3936
export const Options: React.FC<Props> = (props) => {
40-
const changeShowLikeContest = (checked: boolean) => {
41-
const likeContest = getLikeContest(props.active);
42-
if (checked && likeContest) {
43-
props.setSelectedContests([props.active, likeContest]);
44-
} else {
45-
props.setSelectedContests([props.active]);
46-
}
47-
};
4837
return (
4938
<>
5039
<Row className="my-4">
@@ -74,22 +63,19 @@ export const Options: React.FC<Props> = (props) => {
7463
Internal rating to have 50% Solve Probability
7564
</HelpBadgeTooltip>
7665
</FormGroup>
77-
{props.showableShowLikeContest && (
78-
<FormGroup check inline class="my-4">
79-
<Label check>
80-
<CustomInput
81-
type="switch"
82-
id="showLikeContest"
83-
label="Show Like Contest"
84-
checked={props.showLikeContest}
85-
onChange={(e) => {
86-
changeShowLikeContest(e.target.checked);
87-
props.setShowLikeContest(!props.showLikeContest);
88-
}}
89-
/>
90-
</Label>
91-
</FormGroup>
92-
)}
66+
<FormGroup check inline class="my-4">
67+
<Label check>
68+
<CustomInput
69+
type="switch"
70+
id="mergeLikeContest"
71+
label="Merge Like Contest"
72+
checked={props.mergeLikeContest}
73+
onChange={() => {
74+
props.setMergeLikeContest(!props.mergeLikeContest);
75+
}}
76+
/>
77+
</Label>
78+
</FormGroup>
9379
{props.colorMode === ColorMode.ContestResult && (
9480
<FormGroup check inline>
9581
<Label check>

atcoder-problems-frontend/src/pages/TablePage/TableTab.tsx

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,33 @@ import {
44
ContestCategories,
55
ContestCategory,
66
} from "../../utils/ContestClassifier";
7-
import { getLikeContest } from "../../utils/LikeContestUtils";
7+
import { LikeContestCategories } from "../../utils/LikeContestUtils";
88

99
interface Props {
1010
active: ContestCategory;
1111
setActive: (next: ContestCategory) => void;
12-
setSelectedContests: (contest: ContestCategory[]) => void;
13-
showLikeContest: boolean;
12+
mergeLikeContest: boolean;
1413
}
1514

1615
export const TableTabButtons: React.FC<Props> = (props) => {
17-
const { active, setActive, setSelectedContests, showLikeContest } = props;
16+
const { active, setActive, mergeLikeContest } = props;
1817

19-
const resetSelectedContests = (category: ContestCategory) => {
20-
const selectContests = [category];
21-
const likeContest = getLikeContest(category);
22-
if (likeContest && showLikeContest) selectContests.push(likeContest);
23-
setSelectedContests(selectContests);
18+
const filterLikeContest = (contestCategories: readonly ContestCategory[]) => {
19+
if (!mergeLikeContest) return contestCategories;
20+
21+
return contestCategories.filter(
22+
(category) => !LikeContestCategories.includes(category)
23+
);
2424
};
2525
return (
2626
<Row>
2727
<ButtonGroup className="table-tab">
28-
{ContestCategories.map((category, i) => (
28+
{filterLikeContest(ContestCategories).map((category, i) => (
2929
<Button
30-
key={i}
30+
key={String(i)}
3131
color="secondary"
3232
onClick={(): void => {
3333
setActive(category);
34-
resetSelectedContests(category);
3534
}}
3635
active={active === category}
3736
>

atcoder-problems-frontend/src/pages/TablePage/index.tsx

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
classifyContest,
2222
ContestCategory,
2323
} from "../../utils/ContestClassifier";
24-
import { hasLikeContest, getLikeContest } from "../../utils/LikeContestUtils";
24+
import { getLikeContest } from "../../utils/LikeContestUtils";
2525
import { TableTabButtons } from "./TableTab";
2626
import { Options } from "./Options";
2727
import { ContestTable } from "./ContestTable";
@@ -53,17 +53,16 @@ export const TablePage: React.FC<OuterProps> = (props) => {
5353
"showPenalties",
5454
false
5555
);
56-
const [showLikeContest, setShowLikeContest] = useLocalStorage(
57-
"showLikeContest",
56+
const [mergeLikeContest, setMergeLikeContest] = useLocalStorage(
57+
"MergeLikeContest",
5858
false
5959
);
6060
const [selectedLanguages, setSelectedLanguages] = useState(new Set<string>());
61-
const selectContests = [activeTab];
61+
62+
const selectedContests = [activeTab];
6263
const likeContest = getLikeContest(activeTab);
63-
if (likeContest && showLikeContest) selectContests.push(likeContest);
64-
const [selectedContests, setSelectedContests] = useState<ContestCategory[]>([
65-
...selectContests,
66-
]);
64+
if (likeContest && mergeLikeContest) selectedContests.push(likeContest);
65+
6766
const userRatingInfo = useRatingInfo(props.userId);
6867
const contestToProblems =
6968
useContestToMergedProblems() ?? new Map<ContestId, MergedProblem[]>();
@@ -112,16 +111,13 @@ export const TablePage: React.FC<OuterProps> = (props) => {
112111
setSelectedLanguages(newSet);
113112
}}
114113
active={activeTab}
115-
setSelectedContests={setSelectedContests}
116-
showableShowLikeContest={hasLikeContest(activeTab)}
117-
showLikeContest={showLikeContest}
118-
setShowLikeContest={setShowLikeContest}
114+
mergeLikeContest={mergeLikeContest}
115+
setMergeLikeContest={setMergeLikeContest}
119116
/>
120117
<TableTabButtons
121118
active={activeTab}
122119
setActive={setActiveTab}
123-
setSelectedContests={setSelectedContests}
124-
showLikeContest={showLikeContest}
120+
mergeLikeContest={mergeLikeContest}
125121
/>
126122
{[
127123
"ABC",
Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { getLikeContest, hasLikeContest } from "./LikeContestUtils";
1+
import { getLikeContest } from "./LikeContestUtils";
22
import { ContestCategory } from "./ContestClassifier";
33

44
type GetLikeContestTestType = [ContestCategory, ContestCategory | undefined];
@@ -19,22 +19,3 @@ test.each<GetLikeContestTestType>([
1919
])("Get Like Contest", (contest, result) => {
2020
expect(getLikeContest(contest)).toBe(result);
2121
});
22-
23-
type HasLikeContestTestType = [ContestCategory, boolean];
24-
test.each<HasLikeContestTestType>([
25-
["ABC", true],
26-
["ARC", true],
27-
["AGC", true],
28-
["ABC-Like", false],
29-
["ARC-Like", false],
30-
["AGC-Like", false],
31-
["PAST", false],
32-
["JOI", false],
33-
["JAG", false],
34-
["AHC", false],
35-
["Marathon", false],
36-
["Other Sponsored", false],
37-
["Other Contests", false],
38-
])(`Has Like Contest`, (contest, result) => {
39-
expect(hasLikeContest(contest)).toBe(result);
40-
});

atcoder-problems-frontend/src/utils/LikeContestUtils.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export const getLikeContest = (
1515
}
1616
};
1717

18-
export const hasLikeContest = (contestCategory: ContestCategory): boolean => {
19-
return ["ABC", "ARC", "AGC"].includes(contestCategory);
20-
};
18+
export const LikeContestCategories: readonly ContestCategory[] = [
19+
"ABC-Like",
20+
"ARC-Like",
21+
"AGC-Like",
22+
];

atcoder-problems-frontend/src/utils/LocalStorage.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ const LocalStorageKeys = [
1717
"recommendOption",
1818
"recommendExperimental",
1919
"recoomendExcludeOption",
20-
"showLikeContest",
20+
"MergeLikeContest",
2121
] as const;
2222
type LocalStorageKey = typeof LocalStorageKeys[number];
2323

0 commit comments

Comments
 (0)