@@ -177,16 +114,21 @@ const Chart = ({ setModalType, selectedTab, setSelectedTab, updateCredit }) => {
))}
- {hasMoreFemales && (
-
- )}
+
+ fetchData(
+ 'female',
+ femaleCursor,
+ PAGESIZE,
+ setFemaleData,
+ setFemaleCursor,
+ setHasMoreFemales,
+ setIsFemaleLoading,
+ )
+ }
+ />
>
)}
{selectedTab === 'males' && (
@@ -207,16 +149,21 @@ const Chart = ({ setModalType, selectedTab, setSelectedTab, updateCredit }) => {
))}
- {hasMoreMales && (
-
- )}
+
+ fetchData(
+ 'male',
+ maleCursor,
+ PAGESIZE,
+ setMaleData,
+ setMaleCursor,
+ setHasMoreMales,
+ setIsMaleLoading,
+ )
+ }
+ />
>
)}
From 1a6a2c4bab5b9c05dac2d7bd2a43b8fa019d56e7 Mon Sep 17 00:00:00 2001
From: yujin Jeon <101913688+yuj2n@users.noreply.github.com>
Date: Mon, 28 Apr 2025 02:44:05 +0900
Subject: [PATCH 070/117] =?UTF-8?q?=F0=9F=92=84Style:=20iphone=20SE=20?=
=?UTF-8?q?=EC=A7=80=EC=9B=90=EC=9D=84=20=EC=9C=84=ED=95=9C=20=EC=B5=9C?=
=?UTF-8?q?=EC=86=8C=20=EB=84=88=EB=B9=84=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요
# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분
# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)
# 커밋 타입 가이드:
# ✨ Feat : 새로운 기능 추가
# 🐛 Fix : 버그 수정
# 📦 Chore : 설정/빌드 수정, 기타 잡일
# 💄 Style : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
---
src/pages/list/listPage.styles.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/list/listPage.styles.js b/src/pages/list/listPage.styles.js
index d90c7ab6..706cb156 100644
--- a/src/pages/list/listPage.styles.js
+++ b/src/pages/list/listPage.styles.js
@@ -1,7 +1,7 @@
import { css } from '@emotion/react';
export const wrapper = css`
- min-width: 36rem;
+ min-width: 30rem;
max-width: 120rem;
margin: 0 auto;
From 11282840859f982a030a0c16429c54edc6c76969 Mon Sep 17 00:00:00 2001
From: yujin Jeon <101913688+yuj2n@users.noreply.github.com>
Date: Mon, 28 Apr 2025 02:44:29 +0900
Subject: [PATCH 071/117] =?UTF-8?q?=E2=99=BB=EF=B8=8FRefactor:=20=EB=8D=94?=
=?UTF-8?q?=20=EB=B3=B4=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=B6=84=EB=A6=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요
# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분
# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)
# 커밋 타입 가이드:
# ✨ Feat : 새로운 기능 추가
# 🐛 Fix : 버그 수정
# 📦 Chore : 설정/빌드 수정, 기타 잡일
# 💄 Style : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
---
src/components/chart/LoadMoreButton.jsx | 13 +++++++++++++
1 file changed, 13 insertions(+)
create mode 100644 src/components/chart/LoadMoreButton.jsx
diff --git a/src/components/chart/LoadMoreButton.jsx b/src/components/chart/LoadMoreButton.jsx
new file mode 100644
index 00000000..82a0f7bb
--- /dev/null
+++ b/src/components/chart/LoadMoreButton.jsx
@@ -0,0 +1,13 @@
+import * as S from './chart.styles';
+
+const LoadMoreButton = ({ isLoading, hasMore, onClick }) => {
+ if (!hasMore) return null;
+
+ return (
+
+ );
+};
+
+export default LoadMoreButton;
From fab9271c073cab0ef5db82af391a0ac70037e27e Mon Sep 17 00:00:00 2001
From: yujin Jeon <101913688+yuj2n@users.noreply.github.com>
Date: Mon, 28 Apr 2025 02:45:16 +0900
Subject: [PATCH 072/117] =?UTF-8?q?=F0=9F=92=84Style:=20=ED=81=AC=EB=A0=88?=
=?UTF-8?q?=EB=94=A7=20=EC=B6=A9=EC=A0=84=ED=95=98=EA=B8=B0=20=EC=BB=B4?=
=?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20375px=20=EC=9D=B4=ED=95=98=20padd?=
=?UTF-8?q?ing=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요
# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분
# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)
# 커밋 타입 가이드:
# ✨ Feat : 새로운 기능 추가
# 🐛 Fix : 버그 수정
# 📦 Chore : 설정/빌드 수정, 기타 잡일
# 💄 Style : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
---
src/components/charge/charge.styles.js | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/components/charge/charge.styles.js b/src/components/charge/charge.styles.js
index 309c4706..c73c31e9 100644
--- a/src/components/charge/charge.styles.js
+++ b/src/components/charge/charge.styles.js
@@ -22,7 +22,7 @@ export const creditWrapper = css`
border-radius: 0.5rem;
font-weight: 700;
${media({
- padding: ['2.5rem 3.5rem', '4rem 6rem', '4rem 6rem', '4rem 6rem'],
+ padding: ['2.5rem 3rem', '2.5rem 3.5rem', '4rem 6rem', '4rem 6rem', '4rem 6rem'],
})}
button {
@@ -62,7 +62,9 @@ export const creditContent = css`
`;
export const myCredit = css`
- font-size: 1.6rem;
+ ${media({
+ fontSize: ['1rem', '1.2rem', '1.6rem', '1.6rem', '1.6rem'],
+ })}
color: var(--white-alpha-60);
`;
From 2c419fc2dd1d163873feb428596795e36c75e630 Mon Sep 17 00:00:00 2001
From: yujin Jeon <101913688+yuj2n@users.noreply.github.com>
Date: Mon, 28 Apr 2025 02:59:05 +0900
Subject: [PATCH 073/117] =?UTF-8?q?=E2=99=BB=EF=B8=8FRefactor:=20fetch=20?=
=?UTF-8?q?=ED=95=A8=EC=88=98=20=EB=B6=84=EB=A6=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요
# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분
# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)
# 커밋 타입 가이드:
# ✨ Feat : 새로운 기능 추가
# 🐛 Fix : 버그 수정
# 📦 Chore : 설정/빌드 수정, 기타 잡일
# 💄 Style : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
---
src/components/chart/fetchData.js | 37 +++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
create mode 100644 src/components/chart/fetchData.js
diff --git a/src/components/chart/fetchData.js b/src/components/chart/fetchData.js
new file mode 100644
index 00000000..58f846fe
--- /dev/null
+++ b/src/components/chart/fetchData.js
@@ -0,0 +1,37 @@
+import { ENDPOINTS } from '@/constants/api';
+import { requestGet } from '@/utils/api';
+
+export const fetchData = async (
+ gender,
+ cursor,
+ pageSize,
+ setData,
+ setCursor,
+ setHasMore,
+ setIsLoading,
+ controller,
+) => {
+ try {
+ setIsLoading(true);
+ const response = await requestGet(
+ `${ENDPOINTS.GET_CHART}?gender=${gender}&pageSize=${pageSize}&cursor=${cursor}`,
+ controller ? { signal: controller.signal } : undefined,
+ );
+ const newData = response?.idols || [];
+ const nextCursor = response?.nextCursor;
+
+ if (cursor === null) {
+ console.log(`더 이상 ${gender} 아이돌 데이터가 없습니다.`);
+ setCursor(null);
+ return;
+ }
+
+ setData((prev) => [...prev, ...newData]);
+ setCursor(nextCursor);
+ if (nextCursor === null) setHasMore(false);
+ } catch (error) {
+ console.error(error);
+ } finally {
+ setIsLoading(false);
+ }
+};
From 7054f839b709caf39c8ffec135f2a39f20895fe1 Mon Sep 17 00:00:00 2001
From: yujin Jeon <101913688+yuj2n@users.noreply.github.com>
Date: Mon, 28 Apr 2025 03:00:04 +0900
Subject: [PATCH 074/117] =?UTF-8?q?=F0=9F=90=9BFix:=20=EB=8D=94=20?=
=?UTF-8?q?=EB=B3=B4=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EC=82=AC=EB=9D=BC?=
=?UTF-8?q?=EC=A7=80=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=ED=83=AD=20=EB=B3=80?=
=?UTF-8?q?=EA=B2=BD=20=EC=8B=9C=EB=A7=88=EB=8B=A4=20=EB=8D=B0=EC=9D=B4?=
=?UTF-8?q?=ED=84=B0=20=EC=B4=88=EA=B8=B0=ED=99=94=ED=95=98=EC=97=AC=20?=
=?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요
# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분
# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)
# 커밋 타입 가이드:
# ✨ Feat : 새로운 기능 추가
# 🐛 Fix : 버그 수정
# 📦 Chore : 설정/빌드 수정, 기타 잡일
# 💄 Style : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
---
src/components/chart/Chart.jsx | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/components/chart/Chart.jsx b/src/components/chart/Chart.jsx
index 12001385..f70cc23d 100644
--- a/src/components/chart/Chart.jsx
+++ b/src/components/chart/Chart.jsx
@@ -20,7 +20,19 @@ const Chart = ({ setModalType, selectedTab, setSelectedTab, updateCredit }) => {
const PAGESIZE = screenSize === 'desktop' ? 10 : 5;
const handleTabClick = (e) => {
- setSelectedTab(e.currentTarget.value);
+ const newTab = e.currentTarget.value;
+ setSelectedTab(newTab);
+
+ // 탭이 변경될 때마다 데이터와 상태 초기화
+ if (newTab === 'females') {
+ setFemaleData([]);
+ setFemaleCursor(0);
+ setHasMoreFemales(true);
+ } else {
+ setMaleData([]);
+ setMaleCursor(0);
+ setHasMoreMales(true);
+ }
};
// biome-ignore lint/correctness/useExhaustiveDependencies:
From a739849b83daae1957d2c1501e8c109e8b12f992 Mon Sep 17 00:00:00 2001
From: yujin Jeon <101913688+yuj2n@users.noreply.github.com>
Date: Mon, 28 Apr 2025 03:21:08 +0900
Subject: [PATCH 075/117] =?UTF-8?q?=E2=99=BB=EF=B8=8FRefactor:=20=EB=82=A8?=
=?UTF-8?q?=EB=85=80=20=EC=95=84=EC=9D=B4=EB=8F=8C=20=EB=8D=B0=EC=9D=B4?=
=?UTF-8?q?=ED=84=B0=20=ED=95=9C=20=EA=B0=9C=EC=9D=98=20=EC=83=81=ED=83=9C?=
=?UTF-8?q?=20=EB=B3=80=EC=88=98=EB=A1=9C=20=ED=86=B5=ED=95=A9=20=EA=B4=80?=
=?UTF-8?q?=EB=A6=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# 커밋 메시지 형식
# <이모지><타입>: <제목> (#이슈 번호)
#
# ⛔ 제목은 100자 이내, 끝에 마침표(.) 사용 금지
# ⛔ 이모지와 타입 사이에 공백 없이 붙여 씁니다 (예: ✨Feat)
# ⛔ 제목과 콜론(:) 사이에 공백 없이 붙이고, 콜론 뒤에는 공백 1칸 필요
# ✅ 제목은 커밋의 "무엇"을 나타냅니다
# ✅ 본문은 "왜", "어떻게"를 요약하며, 선택사항입니다
# ✅ 본문은 여러 줄의 메시지를 작성할 땐 "-"로 구분
# 예시:
# ✨Feat: 마이페이지 수정 기능 추가 (#15)
# 커밋 타입 가이드:
# ✨ Feat : 새로운 기능 추가
# 🐛 Fix : 버그 수정
# 📦 Chore : 설정/빌드 수정, 기타 잡일
# 💄 Style : 포맷팅, 세미콜론 등 비즈니스 로직 없는 변경
# 📝 Docs : 문서 작성 및 수정
# ♻️ Refactor : 리팩토링 (동작 변경 없이 코드 개선)
---
src/components/chart/Chart.jsx | 167 ++++++++++-----------------------
1 file changed, 51 insertions(+), 116 deletions(-)
diff --git a/src/components/chart/Chart.jsx b/src/components/chart/Chart.jsx
index f70cc23d..31405ea4 100644
--- a/src/components/chart/Chart.jsx
+++ b/src/components/chart/Chart.jsx
@@ -8,14 +8,11 @@ import { fetchData } from './fetchData';
import { useScreenSize } from './useScreenSize';
const Chart = ({ setModalType, selectedTab, setSelectedTab, updateCredit }) => {
- const [femaleData, setFemaleData] = useState([]);
- const [maleData, setMaleData] = useState([]);
- const [femaleCursor, setFemaleCursor] = useState(0);
- const [maleCursor, setMaleCursor] = useState(0);
- const [hasMoreMales, setHasMoreMales] = useState(true);
- const [hasMoreFemales, setHasMoreFemales] = useState(true);
- const [isFemaleLoading, setIsFemaleLoading] = useState(false);
- const [isMaleLoading, setIsMaleLoading] = useState(false);
+ const [chartData, setChartData] = useState([]);
+ const [cursor, setCursor] = useState(0);
+ const [hasMore, setHasMore] = useState(true);
+ const [isLoading, setIsLoading] = useState(false);
+
const screenSize = useScreenSize();
const PAGESIZE = screenSize === 'desktop' ? 10 : 5;
@@ -23,57 +20,48 @@ const Chart = ({ setModalType, selectedTab, setSelectedTab, updateCredit }) => {
const newTab = e.currentTarget.value;
setSelectedTab(newTab);
- // 탭이 변경될 때마다 데이터와 상태 초기화
- if (newTab === 'females') {
- setFemaleData([]);
- setFemaleCursor(0);
- setHasMoreFemales(true);
- } else {
- setMaleData([]);
- setMaleCursor(0);
- setHasMoreMales(true);
- }
+ // 탭 변경 시 데이터 초기화
+ setChartData([]);
+ setCursor(0);
+ setHasMore(true);
};
// biome-ignore lint/correctness/useExhaustiveDependencies:
useEffect(() => {
const controller = new AbortController();
- if (selectedTab === 'females') {
- setFemaleData([]);
- setFemaleCursor(0);
- fetchData(
- 'female',
- 0,
- PAGESIZE,
- setFemaleData,
- setFemaleCursor,
- setHasMoreFemales,
- setIsFemaleLoading,
- controller,
- );
- }
+ setChartData([]);
+ setCursor(0);
+ setHasMore(true);
- if (selectedTab === 'males') {
- setMaleData([]);
- setMaleCursor(0);
- fetchData(
- 'male',
- 0,
- PAGESIZE,
- setMaleData,
- setMaleCursor,
- setHasMoreMales,
- setIsMaleLoading,
- controller,
- );
- }
+ fetchData(
+ selectedTab === 'females' ? 'female' : 'male',
+ 0,
+ PAGESIZE,
+ setChartData,
+ setCursor,
+ setHasMore,
+ setIsLoading,
+ controller,
+ );
return () => {
controller.abort();
};
}, [selectedTab, screenSize, updateCredit]);
+ const loadMore = () => {
+ fetchData(
+ selectedTab === 'females' ? 'female' : 'male',
+ cursor,
+ PAGESIZE,
+ setChartData,
+ setCursor,
+ setHasMore,
+ setIsLoading,
+ );
+ };
+
return (
@@ -108,76 +96,23 @@ const Chart = ({ setModalType, selectedTab, setSelectedTab, updateCredit }) => {
- {selectedTab === 'females' && (
- <>
-
- {femaleData.map((female, index) => (
- -
-
-
- {index + 1}
-
- {female.group}
- {female.name}
-
-
- {female.totalVotes}표
-
- ))}
-
-
-
- fetchData(
- 'female',
- femaleCursor,
- PAGESIZE,
- setFemaleData,
- setFemaleCursor,
- setHasMoreFemales,
- setIsFemaleLoading,
- )
- }
- />
- >
- )}
- {selectedTab === 'males' && (
- <>
-
- {maleData.map((male, index) => (
- -
-
-
- {index + 1}
-
- {male.group}
- {male.name}
-
-
- {male.totalVotes}표
-
- ))}
-
-
-
- fetchData(
- 'male',
- maleCursor,
- PAGESIZE,
- setMaleData,
- setMaleCursor,
- setHasMoreMales,
- setIsMaleLoading,
- )
- }
- />
- >
- )}
+
+ {chartData.map((idol, index) => (
+ -
+
+
+ {index + 1}
+
+ {idol.group}
+ {idol.name}
+
+
+ {idol.totalVotes}표
+
+ ))}
+
+
+
);
From e50f98dfff0765f1e5e2929b51b03619dcfdf8ae Mon Sep 17 00:00:00 2001
From: Sienna