Skip to content
This repository was archived by the owner on Jul 8, 2024. It is now read-only.

Commit a28cac3

Browse files
authored
release: 버전 1.0.8 배포 (#109)
* fix(*): 나의 풀이 tab 문제 유형 선택 시 페이지네이션이 초기화되지 않는 이슈 해결 * release: 버전 1.0.8 업데이트 * feat(Select, newTab/profile): 나의 풀이 tab 문제 유형 select 박스의 옵션들에 푼 문제 개수를 보여주는 기능 추가
1 parent 18de7ec commit a28cac3

File tree

8 files changed

+28
-13
lines changed

8 files changed

+28
-13
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "prosolve",
3-
"version": "1.0.7",
3+
"version": "1.0.8",
44
"main": "index.js",
55
"pretty": "prettier --write \"src/**/*.(ts|tsx)\"",
66
"scripts": {

src/components/select/PartTitleSelect.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,21 @@ import { problemTitleOption } from '@src/store/select';
66
import { PartTitleSelectProps } from '@src/types/select';
77
import '@src/styles/font.css';
88

9-
const PartTitleSelect = ({ partTitleList }: PartTitleSelectProps) => {
9+
const PartTitleSelect = ({ partTitleList, onChangePageIdx }: PartTitleSelectProps) => {
1010
const [isOpen, setIsOpen] = React.useState(false);
1111
const [selected, setSelected] = useRecoilState(problemTitleOption);
1212

13+
const onChangePartTitle = (option: string) => {
14+
onChangePageIdx(0);
15+
setSelected(option);
16+
};
17+
1318
return (
1419
<Select
1520
isOpen={isOpen}
1621
trigger={<CheckOption isOpen={isOpen} value={selected} onModalChange={setIsOpen} />}
1722
options={partTitleList}
18-
onChangeDropdown={setSelected}
23+
onChangeDropdown={onChangePartTitle}
1924
/>
2025
);
2126
};

src/components/select/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ const MenuStyle = styled.ul<{ isOpen: boolean }>`
5959
display: flex;
6060
flex-direction: column;
6161
position: absolute;
62-
z-index: 2;
62+
z-index: 10;
6363
top: 3rem;
6464
padding: 0.5rem 0rem;
6565
font-size: 1rem;

src/pages/newTab/profile/Problems.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ Problems.Sort = ({ onChangePageIdx, partTitleList }: SortProps) => (
7070
<Problems.SortItem key={uid(idx)} item={item} onChangePageIdx={onChangePageIdx} />
7171
))}
7272
</SortStyle>
73-
<PartTitleSelect partTitleList={partTitleList} />
73+
<PartTitleSelect partTitleList={partTitleList} onChangePageIdx={onChangePageIdx} />
7474
</SortContainerStyle>
7575
);
7676

src/pages/newTab/profile/index.tsx

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,20 @@ const getChartInfoList = ({ allProblems, solvedProblems }: ProblemsCntType) => {
123123
};
124124

125125
const getPartTitleListOfSolvedProblems = (solvedProblems: SolvedProblemType) => {
126-
const partTitleList = solvedProblems.reduce<Set<string>>((partTitleList, { partTitle }) => {
127-
partTitleList.add(partTitle);
128-
return partTitleList;
129-
}, new Set());
126+
const problemsTitleMap = solvedProblems.reduce<Record<string, number>>(
127+
(partTitleList, { partTitle }) => {
128+
partTitleList[partTitle] = (partTitleList[partTitle] ?? 0) + 1;
129+
return partTitleList;
130+
},
131+
{},
132+
);
133+
134+
const partTitleList = Object.entries(problemsTitleMap)
135+
.sort(([prevTitle, prevCnt], [currTitle, currCnt]) => currCnt - prevCnt)
136+
.map(([title, cnt]) => `${title} (${cnt})`);
130137

131-
return [...partTitleList];
138+
const allProblemTitle = `전체 문제 (${solvedProblems.length})`;
139+
return [allProblemTitle, ...partTitleList];
132140
};
133141

134142
const getFilteredSolvedProblems = (solvedProblems: SolvedProblemType) => {
@@ -149,8 +157,8 @@ const sortSolvedProblems = (solvedProblems: SolvedProblemType) => {
149157
const filterSolvedProblemsByPartTitle = (solvedProblems: SolvedProblemType) => {
150158
const selectedPartTitle = useRecoilValue(problemTitleOption);
151159

152-
if (selectedPartTitle === '전체 문제') return solvedProblems;
153-
return solvedProblems.filter(({ partTitle }) => partTitle === selectedPartTitle);
160+
if (selectedPartTitle.includes('전체 문제')) return solvedProblems;
161+
return solvedProblems.filter(({ partTitle }) => selectedPartTitle.includes(partTitle));
154162
};
155163

156164
const root = document.createElement('div');

src/static/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "프로솔브(Pro-Solve)",
33
"description": "제출한 모든 프로그래머스 풀이를 확인할 수 있게 해주는 크롬 익스텐션",
4-
"version": "1.0.7",
4+
"version": "1.0.8",
55
"manifest_version": 3,
66
"icons": {
77
"16": "icon.png",

src/types/profile/profile-layout.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
interface ProblemType {
2+
[key: string]: number;
23
id: number;
34
title: string;
45
partTitle: string;

src/types/select.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ interface SolutionType {
3030

3131
interface PartTitleSelectProps {
3232
partTitleList: Array<string>;
33+
onChangePageIdx: (page: number) => void;
3334
}
3435

3536
interface SortType {

0 commit comments

Comments
 (0)