Skip to content

Commit 9794d11

Browse files
authored
Merge pull request #142 from part3-4team-Taskify/search02
[Feat] 나의 대쉬보드 페이지 검색기능 추가
2 parents d19dfb9 + 7bab7eb commit 9794d11

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

src/components/modalDashboard/CardDetailModal.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
77
import { createComment } from "@/api/comment";
88
import { deleteCard } from "@/api/card";
99
import type { CardDetailType } from "@/types/cards";
10-
import TaskModal from "@/components/modalInput/TaskModal"; // 경로는 실제 위치에 맞게 조정하세요
10+
import TaskModal from "@/components/modalInput/TaskModal";
1111

1212
interface CardDetailModalProps {
1313
card: CardDetailType;
@@ -120,6 +120,7 @@ export default function CardDetailPage({
120120
{isEditModalOpen && (
121121
<TaskModal
122122
mode="edit"
123+
columnId={card.columnId} // ✅ 여기 추가!
123124
onClose={() => setIsEditModalOpen(false)}
124125
onSubmit={(data) => {
125126
setCardData((prev) => ({

src/components/modalInput/TaskModal.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ interface TaskModalProps {
1212
onSubmit: (data: TaskData) => void;
1313
initialData?: Partial<TaskData>;
1414
members: { nickname: string }[];
15+
columnId: number;
1516
// ✅ teamId, dashboardId 제거됨
1617
}
1718

@@ -31,6 +32,7 @@ export default function TaskModal({
3132
onSubmit,
3233
initialData = {},
3334
members,
35+
columnId,
3436
}: TaskModalProps) {
3537
const [formData, setFormData] = useState<TaskData>({
3638
status: initialData.status || "",
@@ -112,7 +114,7 @@ export default function TaskModal({
112114

113115
<ModalImage
114116
label="이미지"
115-
columnId={0}
117+
columnId={columnId}
116118
defaultImageUrl={formData.image}
117119
onImageSelect={(url) => handleChange("image", url)}
118120
/>

src/pages/mydashboard.tsx

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ interface Dashboard {
2727
export default function MyDashboardPage() {
2828
const { user, isInitialized } = useAuthGuard();
2929
const [dashboardList, setDashboardList] = useState<Dashboard[]>([]);
30+
const [searchKeyword, setSearchKeyword] = useState("");
3031
const [currentPage, setCurrentPage] = useState(1);
3132
const [isModalOpen, setIsModalOpen] = useState(false);
3233
const [isEditMode, setIsEditMode] = useState(false);
@@ -42,12 +43,18 @@ export default function MyDashboardPage() {
4243
useState(false);
4344
const itemsPerPage = 6;
4445

45-
const totalPages = Math.ceil((dashboardList.length + 1) / itemsPerPage);
46+
const filteredDashboardList = dashboardList.filter((dashboard) =>
47+
dashboard.title.toLowerCase().includes(searchKeyword.toLowerCase())
48+
);
49+
50+
const totalPages = Math.ceil(
51+
(filteredDashboardList.length + 1) / itemsPerPage
52+
);
4653
const startIndex = (currentPage - 1) * itemsPerPage;
4754

4855
const currentItems = [
4956
<DashboardAddButton key="add" onClick={() => setIsModalOpen(true)} />,
50-
...dashboardList.map((dashboard) => (
57+
...filteredDashboardList.map((dashboard) => (
5158
<CardButton
5259
key={dashboard.id}
5360
dashboardId={dashboard.id}
@@ -112,8 +119,8 @@ export default function MyDashboardPage() {
112119

113120
const handleLeave = () => {
114121
if (!selectedDashboardId) return;
115-
setDashboardList(
116-
(prev) => prev.filter((d) => d.id !== selectedDashboardId) // 이 부분 실제 api로 변경
122+
setDashboardList((prev) =>
123+
prev.filter((d) => d.id !== selectedDashboardId)
117124
);
118125
setIsDeleteModalOpen(false);
119126
setSelectedDashboardId(null);
@@ -138,10 +145,24 @@ export default function MyDashboardPage() {
138145
onToggleEditMode={() => setIsEditMode((prev) => !prev)}
139146
/>
140147

141-
<main className="flex-1 overflow-auto px-[25px] pt-[40px] pb-10 bg-[#f9f9f9] space-y-10">
148+
<main className="flex-1 overflow-auto px-[25px] pt-[40px] pb-10 bg-[#f9f9f9] ">
149+
{/* 검색 입력창 */}
150+
<section className="w-full max-w-[1100px] px-4">
151+
<input
152+
type="text"
153+
value={searchKeyword}
154+
onChange={(e) => {
155+
setSearchKeyword(e.target.value);
156+
setCurrentPage(1);
157+
}}
158+
placeholder="대시보드 이름을 입력하세요"
159+
className="w-full max-w-[332px] px-4 py-2 border border-[var(--color-gray3)] border rounded-md outline-none"
160+
/>
161+
</section>
162+
142163
{/* 카드 영역 */}
143164
<section className="w-full max-w-[1100px] px-4">
144-
<div className="flex flex-wrap gap-[16px] justify-start">
165+
<div className="flex flex-wrap gap-[16px] justify-start py-2">
145166
{currentItems.map((item, index) => (
146167
<div
147168
key={index}
@@ -154,7 +175,7 @@ export default function MyDashboardPage() {
154175
</section>
155176

156177
{totalPages > 1 && (
157-
<div className="w-full max-w-[1100px] flex justify-center items-center ">
178+
<div className="w-full max-w-[1100px] flex justify-center items-center">
158179
<PaginationButton
159180
direction="left"
160181
disabled={currentPage === 1}
@@ -189,7 +210,6 @@ export default function MyDashboardPage() {
189210
/>
190211
)}
191212

192-
{/*관리 모드에서 삭제 버튼 클릭 시 모달 오픈*/}
193213
<DeleteModal
194214
isDeleteModalOpen={isDeleteModalOpen}
195215
setIsDeleteModalOpen={setIsDeleteModalOpen}

0 commit comments

Comments
 (0)