Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#70] - 사이드바 완성 디자인 적용 #76

Merged
merged 21 commits into from
Mar 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b483233
feat #70 : 사이드바 제목(프로젝트 종합평가) 제거 => 아코디언 메뉴로 전환
minh0518 Feb 26, 2025
10e1694
feat #70 : 사이드바의 아코디언 토글버튼 애니메이션 분리 후, 해당 props로 주입되는 버튼에 위임
minh0518 Feb 26, 2025
4bbac6b
feat #70 : 아코디언 버튼 애니메이션 로직 분리, props로 주입하는 버튼에 위임
minh0518 Feb 26, 2025
7a738f1
refactor #70 : 사이드바및 아코디언에 사용되는 컴포넌트,props명을 도메인에 독립적인 이름으로 수정
minh0518 Feb 27, 2025
49b44ee
feat #70 : 아코디언 트리거, 컨텐트 버튼 색상 효과 적용
minh0518 Feb 27, 2025
317bc85
feat #70 : 아코디언 내부 로직 수정
minh0518 Feb 28, 2025
e5c8e43
refactor #70 : 재사용되는 범위를 제외한 Accordion.Item을 독립적인 컴포넌트로 분리
minh0518 Feb 28, 2025
f1d751a
feat #70 : 사이드바 선택 값 Context로 분리 및 불필요한 파일 삭제
minh0518 Feb 28, 2025
f69ec69
feat #70 : 세부 디자인 디테일 수정
minh0518 Feb 28, 2025
e0eccd9
feat #70 : 로고 적용
minh0518 Feb 28, 2025
8083528
fix #70 : 사이드바가 닫힐 때 일부 UI가 보이는 문제 수정
minh0518 Mar 1, 2025
5cb4075
feat #70 : 사이드바가 닫힐 때 스크롤 영역에도 같은 애니메이션 적용
minh0518 Mar 1, 2025
170d691
test #70 : 토스트 스토리 파일명 공백 제거
minh0518 Mar 1, 2025
1150b9b
test #70 : 버튼 스토리 파일 위치 이동
minh0518 Mar 1, 2025
cfe0dbc
feat #70 : 변경된 피그마 상세 디자인 적용
minh0518 Mar 1, 2025
7493c66
refactor #70 : props명 컨벤션에 맞게 수정
minh0518 Mar 1, 2025
60d60ac
test #70 : 사이드바 스토리 생성
minh0518 Mar 1, 2025
74105d8
refactor #70 : 아이콘 컴포넌트 색상 적용 로직 수정
minh0518 Mar 2, 2025
73ed311
feat #70 : 사이드바 열림 버튼 색상 및 위치 수정
minh0518 Mar 2, 2025
3a51954
refactor #70 : 아코디언 버튼의 render props 옵셔널 타입 제거
minh0518 Mar 2, 2025
4f3680b
fix #70 : 사이드바가 닫혔을 때, 열리는 토글 버튼의 위치에 스크롤에 종속되는 문제 수정
minh0518 Mar 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
"@radix-ui/react-dialog": "^1.1.6",
"@radix-ui/react-progress": "^1.1.1",
"@radix-ui/react-slot": "^1.1.2",
"@radix-ui/react-visually-hidden": "^1.1.2",
"@radix-ui/react-toast": "^1.2.6",
"@storybook/preview-api": "^8.6.2",
"@tanstack/react-query": "^5.66.7",
Expand Down
6,240 changes: 4,626 additions & 1,614 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions src/assets/icons/logo-full.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions src/assets/icons/sidebar-menu-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Meta, StoryObj } from '@storybook/react';

import { Button } from './Button';
import Icon from '../icon/icon';
import { Button } from '../components/button/Button';
import Icon from '../components/icon/icon';

const meta: Meta<typeof Button> = {
title: 'Components/Button',
Expand Down
28 changes: 28 additions & 0 deletions src/common/stories/sidebar.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { ThemeProvider } from '@emotion/react';
import { Meta, StoryObj } from '@storybook/react';

import { theme } from '@/assets/styles/theme';
import SelectedPageProvider from '@/features/total-evaluation/components/context/selected-page/selected-page-provider';
import SidebarProvider from '@/features/total-evaluation/components/context/sidebar/sidebar-provider';
import FeedbackSidebar from '@/features/total-evaluation/components/feedback-sidebar/feedback-sidebar';

const meta: Meta<typeof FeedbackSidebar> = {
title: 'Components/FeedbackSidebar',
component: FeedbackSidebar,
};

export default meta;

type Story = StoryObj<typeof FeedbackSidebar>;

export const Default: Story = () => (
<SidebarProvider>
<SelectedPageProvider>
<ThemeProvider theme={theme}>
<FeedbackSidebar />
</ThemeProvider>
</SelectedPageProvider>
</SidebarProvider>
);

Default.args = {};
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,22 @@ import { ReactNode } from 'react';

import * as Accordion from '@radix-ui/react-accordion';

import SingleAccordionItem from '@/features/total-evaluation/components/accordion-list/single-accordion-item';

export type SingleSingleAccordionItemType = {
export type AccordionItemsType = {
accordionTrigger: string;
accordionContents: string[];
};

interface AccordionListProps {
isSidebarOpen: boolean;
currentOpenedTrigger: string[];
currentSelectedContent: string | null;
sidebarListData: SingleSingleAccordionItemType[];
type: 'multiple' | 'single';
renderTrigger?: (accordionTrigger: string) => ReactNode;
renderContent?: (submenu: string) => ReactNode;
orientation: 'vertical' | 'horizontal';
children: ReactNode;
}

function AccordionList({
isSidebarOpen,
currentOpenedTrigger,
currentSelectedContent,
sidebarListData,
type,
renderTrigger,
renderContent,
}: AccordionListProps) {
function AccordionList({ type, orientation, children }: AccordionListProps) {
return (
<div>
<Accordion.Root type={type}>
{sidebarListData.map(({ accordionTrigger, accordionContents }) => {
return (
<SingleAccordionItem
key={accordionTrigger}
isSidebarOpen={isSidebarOpen}
accordionTrigger={accordionTrigger}
accordionContents={accordionContents}
renderContent={renderContent}
renderTrigger={renderTrigger}
currentOpenedTrigger={currentOpenedTrigger}
currentSelectedContent={currentSelectedContent}
/>
);
})}
</Accordion.Root>
</div>
<Accordion.Root type={type} orientation={orientation}>
{children}
</Accordion.Root>
);
}
export default AccordionList;
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { css } from '@emotion/react';

export const container = css`
margin-bottom: 0.8rem;
font-size: 1.4rem;
line-height: 1.68rem;
`;

export const wrapper = css`
margin-top: 0.4rem;
border-left: 0.2rem solid lightgray;
margin-left: 2rem;
padding-left: 1rem;
display: flex;
flex-direction: column;
gap: 0.8rem;
`;

export const defaultAnimation = css`
overflow: hidden;

&[data-state='open'] {
animation: slide-down 300ms ease-out;
}

&[data-state='closed'] {
animation: slide-up 300ms ease-out;
}

@keyframes slide-down {
from {
max-height: 0;
}

to {
max-height: var(--radix-accordion-content-height);
}
}

@keyframes slide-up {
from {
max-height: var(--radix-accordion-content-height);
}

to {
max-height: 0;
}
}
`;
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import * as Accordion from '@radix-ui/react-accordion';

import {
RenderAccordionContentButtonType,
RenderAccordionTriggerButtonType,
} from '../../types/sidebar-Info-types';

import * as styles from './feedback-contents.styles';

type EvalutationDataType = {
projectTitle: string;
feedbackPages: string[];
};

interface AccordionItemProps {
dataList: EvalutationDataType[];
renderTriggerButton: RenderAccordionTriggerButtonType;
renderContentButton: RenderAccordionContentButtonType;
}

function FeedbackContents({
dataList,
renderContentButton,
renderTriggerButton,
}: AccordionItemProps) {
return dataList.map(({ projectTitle, feedbackPages }) => (
<Accordion.Item key={projectTitle} value={projectTitle} css={styles.container}>
<Accordion.Header>
<Accordion.Trigger asChild>{renderTriggerButton(projectTitle)}</Accordion.Trigger>
</Accordion.Header>

<Accordion.Content css={styles.defaultAnimation}>
<div css={styles.wrapper}>
{feedbackPages.map((page, buttonIndex) => (
<div key={page}>{renderContentButton(page, buttonIndex)}</div>
))}
</div>
</Accordion.Content>
</Accordion.Item>
));
}

export default FeedbackContents;

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { createContext, Dispatch, SetStateAction } from 'react';

interface SelectedPageContextProps {
selectedPage: string | null;
setSelectedPage: Dispatch<SetStateAction<string | null>>;
}

export const SelectedPageContext = createContext<SelectedPageContextProps>({
selectedPage: null,
setSelectedPage: () => {},
});
Loading