Skip to content

Commit ae5b415

Browse files
authored
Merge pull request #229 from DevKor-github/feat/#228/unread-chat
fix(mod): provider 로직 이주
2 parents 866cbd2 + 8503aec commit ae5b415

12 files changed

Lines changed: 74 additions & 47 deletions

File tree

src/App.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import routes from '@/pages/routes';
33
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
44
import 'react-time-picker-typescript/dist/style.css';
55

6-
import SocketProvider from './common/components/SocketProvider';
7-
import { OverlayProvider } from '@/common/components/OverlayProvider';
8-
import NotificationProvider from '@/common/components/NotificationProvider';
96
import AmplitudeProvider from '@/common/utils/AmplitudeProvider';
7+
import SocketProvider from '@/common/utils/SocketProvider';
8+
import NotificationProvider from '@/common/utils/NotificationProvider';
9+
import { OverlayProvider } from '@/common/utils/OverlayProvider';
1010

1111
const queryClient = new QueryClient({
1212
defaultOptions: {

src/common/components/Navigator/index.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
import { Link, useLocation } from 'react-router';
22
import * as s from './style.css';
33
import { NAVIGATION_MENU_LIST } from '@/pages/routes';
4+
import { useUnreadChatStore } from '@/common/store/UnreadChatStore';
45

56
// TODO: 아이콘에도 Transition Animation 추가
67
const Navigator = () => {
78
const { pathname } = useLocation();
9+
const unreadChatCount = useUnreadChatStore(state => state.unreadChatCount);
810

911
return (
1012
<nav className={s.Container}>
1113
{NAVIGATION_MENU_LIST.map(({ label, path, selectedClassName, unSelectedClassName }) => {
1214
const selected = pathname === path;
15+
const viewUnreadChatCount = label === '채팅' && unreadChatCount > 0;
1316
return (
1417
<Link key={path} className={s.Menu({ selected })} to={path}>
1518
<span className={selected ? selectedClassName : unSelectedClassName} />
1619
<p>{label}</p>
20+
{viewUnreadChatCount && <div className={s.UnreadChatCount}>{unreadChatCount}</div>}
1721
</Link>
1822
);
1923
})}

src/common/components/Navigator/style.css.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export const Menu = cva({
3131
lineHeight: 1.2,
3232
letterSpacing: '-0.0175rem',
3333
cursor: 'pointer',
34+
position: 'relative',
3435
'& p': {
3536
lineClamp: 1,
3637
whiteSpace: 'nowrap',
@@ -61,3 +62,17 @@ export const Menu = cva({
6162
selected: false,
6263
},
6364
});
65+
66+
export const UnreadChatCount = css({
67+
position: 'absolute',
68+
bgColor: 'main',
69+
color: '100',
70+
p: '0.0625rem 0.375rem',
71+
rounded: 'full',
72+
right: '0.25rem',
73+
top: '-0.25rem',
74+
textAlign: 'center',
75+
fontSize: '0.75rem',
76+
fontWeight: 400,
77+
lineHeight: '1.4',
78+
});

src/common/components/SocketProvider/index.tsx

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/common/hooks/useOverlay.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1+
import { OverlayContext } from '@/common/utils/OverlayProvider/OverlayContext';
2+
import { OverlayController, type OverlayControlRef } from '@/common/utils/OverlayProvider/OverlayController';
13
import { useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';
2-
import { OverlayContext } from '@/common/components/OverlayProvider/OverlayContext';
3-
import { OverlayController, type OverlayControlRef } from '@/common/components/OverlayProvider/OverlayController';
44

55
export type CreateOverlayElement = (props: { isOpen: boolean; close: () => void; exit: () => void }) => ReactNode;
66

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { create } from 'zustand';
2+
3+
interface UnreadChatStore {
4+
unreadChatCount: number;
5+
setUnreadChatCount: (unreadChatCount: number) => void;
6+
}
7+
8+
export const useUnreadChatStore = create<UnreadChatStore>()(set => ({
9+
unreadChatCount: 0,
10+
setUnreadChatCount: unreadChatCount => set({ unreadChatCount }),
11+
}));
File renamed without changes.
File renamed without changes.

src/common/components/OverlayProvider/OverlayController.tsx renamed to src/common/utils/OverlayProvider/OverlayController.tsx

File renamed without changes.

src/common/components/OverlayProvider/index.tsx renamed to src/common/utils/OverlayProvider/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { OverlayContext } from '@/common/components/OverlayProvider/OverlayContext';
1+
import { OverlayContext } from '@/common/utils/OverlayProvider/OverlayContext';
22
import React, { useCallback, useMemo, useState, type PropsWithChildren, type ReactNode } from 'react';
33

44
export function OverlayProvider({ children }: PropsWithChildren) {

0 commit comments

Comments
 (0)