diff --git a/app/routes/rooms/components/ChatRoomHeader.tsx b/app/components/common/NavigateHeader.tsx
similarity index 68%
rename from app/routes/rooms/components/ChatRoomHeader.tsx
rename to app/components/common/NavigateHeader.tsx
index 5ae4ec5..1a24e20 100644
--- a/app/routes/rooms/components/ChatRoomHeader.tsx
+++ b/app/components/common/NavigateHeader.tsx
@@ -1,14 +1,11 @@
-
type Props = {
- title: string;
- subtitle: string;
- subTitleClass?: string;
- onBack?: () => void;
+ title: string; // 텍스트
+ onBack?: () => void; //onBack={() => history.back()} 뒤로가기
};
-export default function ChatRoomHeader({ title, subtitle, subTitleClass, onBack }: Props) {
+export default function NavigationHeader({ title, onBack }: Props) {
return (
-
+
{/* 오른쪽 여백 맞추기 */}
diff --git a/app/data/chat-room.ts b/app/data/chat-room.ts
index da0f241..5518ac9 100644
--- a/app/data/chat-room.ts
+++ b/app/data/chat-room.ts
@@ -1,4 +1,4 @@
-import { type ChatRoom } from "../routes/chat/types/ChatRoom";
+import { type ChatRoom } from "../routes/chat/ChatList";
export const rooms: ChatRoom[] = [
{
@@ -7,7 +7,6 @@ export const rooms: ChatRoom[] = [
lastMessage: "안녕하세요! 제안 확인 부탁드립니다.안녕하세요 제안 확인 부탁드립니다 안녕하세요 제안 확인 부탁드립니다 안녕하세요 제안 확인 부탁드립니다",
updatedAt: new Date().toISOString(),
unreadCount: 2,
- status: "matching",
logoUrl: "",
type: "sent",
isCollaborating: true,
@@ -18,11 +17,8 @@ export const rooms: ChatRoom[] = [
lastMessage: "검토 중입니다!",
updatedAt: "2025-01-05T10:00:00",
unreadCount: 0,
- status: "reviewing",
logoUrl: "",
- type: "received",
+ type: "sent",
isCollaborating: false,
},
];
-
-// TODO: API 연결 전 임시 더미 데이터
\ No newline at end of file
diff --git a/app/hooks/useHideHeader.ts b/app/hooks/useHideHeader.ts
new file mode 100644
index 0000000..2a28ba7
--- /dev/null
+++ b/app/hooks/useHideHeader.ts
@@ -0,0 +1,16 @@
+import { useContext, useLayoutEffect } from "react";
+import { LayoutContext } from "../routes/layout-context";
+
+export function useHideHeader(hide: boolean) {
+ const layout = useContext(LayoutContext);
+
+ useLayoutEffect(() => {
+ if (!layout) return;
+
+ layout.setHideHeader(hide);
+
+ return () => {
+ layout.setHideHeader(false);
+ };
+ }, [hide, layout]);
+}
diff --git a/app/routes.ts b/app/routes.ts
index a62de7f..c2b4536 100644
--- a/app/routes.ts
+++ b/app/routes.ts
@@ -52,7 +52,15 @@ export default [
route(":chatId", "routes/rooms/$chatId.tsx"),
]),
- route("mypage", "routes/mypage/route.tsx"),
+ route("mypage", "routes/mypage/route.tsx", [
+ index("routes/mypage/mypage/route.tsx"),
+ route("profileCard", "routes/mypage/profileCard/route.tsx"),
+ route("edit", "routes/mypage/edit/route.tsx"),
+ route("likes", "routes/mypage/likes/route.tsx"),
+ route("privacy", "routes/mypage/privacy/route.tsx"),
+ route("terms", "routes/mypage/terms/route.tsx")
+ ]),
+
route("brand", "routes/brand/route.tsx"),
]),
diff --git a/app/routes/chat/ChatList.tsx b/app/routes/chat/ChatList.tsx
index c4904e8..a280c59 100644
--- a/app/routes/chat/ChatList.tsx
+++ b/app/routes/chat/ChatList.tsx
@@ -7,7 +7,7 @@ export type ChatRoom = {
lastMessage: string;
updatedAt: string;
unreadCount: number;
- logoUrl: string;
+ logoUrl: string;
type: "sent" | "received";
isCollaborating: boolean;
};
@@ -99,4 +99,4 @@ export function ChatListItem({ room }: { room: ChatRoom }) {
);
}
-export default ChatList;
+export default ChatList;
\ No newline at end of file
diff --git a/app/routes/chat/chat-content.tsx b/app/routes/chat/chat-content.tsx
index addff41..5d61ccf 100644
--- a/app/routes/chat/chat-content.tsx
+++ b/app/routes/chat/chat-content.tsx
@@ -1,7 +1,7 @@
import { useState, useMemo } from "react";
import { SORT_LABEL, type SortOption } from "./components/SortingSheetConstant";
import { rooms } from "../../data/chat-room";
-import ChatListHeader from "./components/ChatListHeader";
+import { ChatListHeader } from "./components/ChatListHeader";
import SortFilterSheet from "./components/SortingSheet";
import ChatList from "./ChatList";
import { EmptyChatState } from "./components/EmptyState";
@@ -9,14 +9,14 @@ import { useHideBottomTab } from "../../hooks/useHideBottomTab";
function ChatPage() {
const [activeTab, setActiveTab] = useState<"sent" | "received">("sent"); // 보낸 제안 / 받은 제안 탭
- const [isSortOpen, setIsSortOpen] = useState(false); // 정렬 바텀시트
- const [sort, setSort] = useState
("latest"); // 현재 선택된 정렬 옵션
+ const [isSortOpen, setIsSortOpen] = useState(false); // 정렬 바텀시트
+ const [sort, setSort] = useState("latest"); // 최신순 / 협업중만
const [pendingSort, setPendingSort] = useState(sort); // 바텀시트에서 고른 값
// 바텀탭 숨기기 (바텀시트 열렸을 때)
useHideBottomTab(isSortOpen);
- // 받은제안/보낸제안 필터
+ // 받은/보낸 필터
const filteredRooms = useMemo(() => {
return rooms.filter((room) => room.type === activeTab);
}, [activeTab]);
@@ -39,18 +39,17 @@ function ChatPage() {
}, [filteredRooms, sort]);
const openSortSheet = () => {
- setPendingSort(sort); // 열 때 현재 적용값으로
+ setPendingSort(sort);
setIsSortOpen(true);
};
const applySort = () => {
- setSort(pendingSort); // 기준 적용
+ setSort(pendingSort);
setIsSortOpen(false);
};
return (
-
- {sortedRooms.length === 0 ? (
-
- ) : (
-
- )}
+ {sortedRooms.length === 0 ? : }
- {rooms.map((room) => (
-
- ))}
-
- );
-}
-
-export function ChatListItem({ room }: { room: ChatRoom }) {
- const statusLabel =
- room.status === "matching" ? "매칭" : room.status === "reviewing" ? "검토 중" : "거절";
-
- // 뱃지 톤: 매칭=보라, 검토중=연보라, 거절=그레이
- const statusClass =
- room.status === "matching"
- ? "bg-[#E6E6F3] text-[#6666E5]"
- : room.status === "reviewing"
- ? "bg-[#EBEEFB] text-[#A7B8FC]"
- : "bg-[#F3F3F3] text-text-gray3";
-
- const { dateText, timeText } = formatKoreanDateTime(room.updatedAt);
-
- const navigate = useNavigate();
-
- return (
-
- );
-}
-
-export default ChatList;
\ No newline at end of file
diff --git a/app/routes/chat/components/ChatListHeader.tsx b/app/routes/chat/components/ChatListHeader.tsx
index 6ed7032..79ab83f 100644
--- a/app/routes/chat/components/ChatListHeader.tsx
+++ b/app/routes/chat/components/ChatListHeader.tsx
@@ -1,5 +1,5 @@
import searchIcon from "../../../assets/search2.svg";
-import closeIcon from "../../../assets/cancel.svg";
+import closeIcon from "../../../assets/cancel.svg";
import { useState } from "react";
export function ChatListHeader({
@@ -11,7 +11,7 @@ export function ChatListHeader({
sortLabel: string;
onClickSort: () => void;
sortOpen: boolean;
-
+
}) {
const [query, setQuery] = useState("");
@@ -22,7 +22,7 @@ export function ChatListHeader({
{/* 검색 입력창 */}

-
+
setQuery(e.target.value)}
/>
-