Skip to content

Commit 9675578

Browse files
authored
[#223] 스토리북 처리 안 되어있던 컴포넌트들 스토리북 추가 (#237)
* ✨ feat: 스토리북 추가 * 🔥 remove: 가이드 영상 컴포넌트 삭제 * 🐛 fix: a태그 셀프 속성 제거 * 🐛 fix: 빌드 중 생긴 오류 해결
1 parent 8ec21fc commit 9675578

File tree

20 files changed

+420
-103
lines changed

20 files changed

+420
-103
lines changed

apps/client/src/entities/home/GuideVideo/GuideVideo.stories.tsx

-28
This file was deleted.

apps/client/src/entities/home/GuideVideo/GuideVideo.tsx

-28
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Meta, StoryObj } from '@storybook/react';
2+
3+
import { WorkspaceSampleButton } from './WorkspaceSampleButton';
4+
5+
const meta: Meta<typeof WorkspaceSampleButton> = {
6+
title: 'entities/home/WorkspaceSampleButton',
7+
component: WorkspaceSampleButton,
8+
parameters: {
9+
layout: 'centered',
10+
},
11+
tags: ['autodocs'],
12+
};
13+
14+
export default meta;
15+
16+
type Story = StoryObj<typeof WorkspaceSampleButton>;
17+
18+
export const Default: Story = {};

apps/client/src/entities/index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
export { GuideVideo } from './home/GuideVideo/GuideVideo';
21
export { WorkspaceItem } from './home/WorkspaceItem/WorkspaceItem';
32
export { WorkspaceAddBtn } from './home/WorkspaceAddBtn/WorkspaceAddBtn';
43
export { WorkspaceLoadError } from './home/WorkspaceLoadError/WorkspaceLoadError';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { Meta, StoryObj } from '@storybook/react';
2+
3+
import { ImageTagModalButton } from './ImageTagModalButton';
4+
5+
const meta: Meta<typeof ImageTagModalButton> = {
6+
title: 'entities/workspace/ImageTagModalButton',
7+
component: ImageTagModalButton,
8+
parameters: {
9+
layout: 'centered',
10+
docs: {
11+
description: {
12+
component: 'img 태그 src 속성 적용을 위한 모달창에 사용되는 버튼 컴포넌트',
13+
},
14+
},
15+
},
16+
tags: ['autodocs'],
17+
};
18+
19+
export default meta;
20+
21+
type Story = StoryObj<typeof ImageTagModalButton>;
22+
23+
export const Default: Story = {
24+
args: {
25+
content: '이미지 선택하기',
26+
isBlue: true,
27+
onClick: () => {},
28+
},
29+
render: (args) => {
30+
return (
31+
<ImageTagModalButton content={args.content} isBlue={args.isBlue} onClick={args.onClick} />
32+
);
33+
},
34+
};
35+
36+
export const Close: Story = {
37+
args: {
38+
content: '닫기',
39+
isBlue: false,
40+
onClick: () => {},
41+
},
42+
render: (args) => {
43+
return (
44+
<ImageTagModalButton content={args.content} isBlue={args.isBlue} onClick={args.onClick} />
45+
);
46+
},
47+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Meta, StoryObj } from '@storybook/react';
2+
3+
import { ImageTagModalHeader } from './ImageTagModalHeader';
4+
5+
const meta: Meta<typeof ImageTagModalHeader> = {
6+
title: 'entities/workspace/ImageTagModalHeader',
7+
component: ImageTagModalHeader,
8+
parameters: {
9+
layout: 'centered',
10+
docs: {
11+
description: {
12+
component: 'img 태그 src 속성 적용을 위한 모달창에 사용되는 헤더',
13+
},
14+
},
15+
},
16+
tags: ['autodocs'],
17+
};
18+
19+
export default meta;
20+
21+
type Story = StoryObj<typeof ImageTagModalHeader>;
22+
23+
export const Default: Story = {
24+
args: {
25+
onClose: () => {},
26+
},
27+
render: (args) => {
28+
return (
29+
<div className="w-80">
30+
<ImageTagModalHeader onClose={args.onClose} />
31+
</div>
32+
);
33+
},
34+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Meta, StoryObj } from '@storybook/react';
2+
3+
import { ImageTagModalImg } from './ImageTagModalImg';
4+
5+
const meta: Meta<typeof ImageTagModalImg> = {
6+
title: 'entities/workspace/ImageTagModalImg',
7+
component: ImageTagModalImg,
8+
parameters: {
9+
layout: 'centered',
10+
docs: {
11+
description: {
12+
component: 'img 태그 src 속성 적용을 위한 모달창에 사용되는 이미지 미리보기 컴포넌트',
13+
},
14+
},
15+
},
16+
tags: ['autodocs'],
17+
};
18+
19+
export default meta;
20+
21+
type Story = StoryObj<typeof ImageTagModalImg>;
22+
23+
export const Default: Story = {
24+
args: {
25+
imageSrc: `${import.meta.env.VITE_STATIC_STORAGE_URL}boolock_logo.png`,
26+
},
27+
render: (args) => {
28+
return (
29+
<div className="h-32 w-32">
30+
<ImageTagModalImg imageSrc={args.imageSrc} />
31+
</div>
32+
);
33+
},
34+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { Meta, StoryObj } from '@storybook/react';
2+
3+
import { ImageTagModalList } from './ImageTagModalList';
4+
import { useState } from 'react';
5+
import { useImageModalStore } from '@/shared/store';
6+
7+
const meta: Meta<typeof ImageTagModalList> = {
8+
title: 'entities/workspace/ImageTagModalList',
9+
component: ImageTagModalList,
10+
parameters: {
11+
layout: 'centered',
12+
docs: {
13+
description: {
14+
component: 'img 태그 src 속성 적용을 위한 모달창에 사용되는 이미지 리스트 컴포넌트',
15+
},
16+
},
17+
},
18+
tags: ['autodocs'],
19+
};
20+
21+
export default meta;
22+
23+
type Story = StoryObj<typeof ImageTagModalList>;
24+
25+
export const Default: Story = {
26+
args: {
27+
tagSrc: '/mock/image2.png',
28+
onSetTagSrc: () => {},
29+
},
30+
render: (args) => {
31+
const [tagSrc, setTagSrc] = useState(args.tagSrc);
32+
const mockImageList = new Map([
33+
['example1<png', '/mock/image1.png'],
34+
['example2<png', '/mock/image2.png'],
35+
['example3<png', '/mock/image3.png'],
36+
['example4<png', '/mock/image4.png'],
37+
['example5<png', '/mock/image5.png'],
38+
]);
39+
40+
const imageList = JSON.stringify(Object.fromEntries(mockImageList));
41+
42+
const { setInitialImageList } = useImageModalStore.getState();
43+
setInitialImageList(imageList);
44+
45+
return (
46+
<div className="h-[32rem]">
47+
<ImageTagModalList tagSrc={tagSrc} onSetTagSrc={setTagSrc} />
48+
</div>
49+
);
50+
},
51+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { Meta, StoryObj } from '@storybook/react';
2+
3+
import { ImageTagModalListItem } from '../ImageTagModalListItem/ImageTagModalListItem';
4+
import { useState } from 'react';
5+
6+
const meta: Meta<typeof ImageTagModalListItem> = {
7+
title: 'entities/workspace/ImageTagModalListItem',
8+
component: ImageTagModalListItem,
9+
parameters: {
10+
layout: 'centered',
11+
docs: {
12+
description: {
13+
component: 'img 태그 src 속성 적용을 위한 모달창에 사용되는 이미지 리스트 아이템 컴포넌트',
14+
},
15+
},
16+
},
17+
tags: ['autodocs'],
18+
};
19+
20+
export default meta;
21+
22+
type Story = StoryObj<typeof ImageTagModalListItem>;
23+
24+
export const Default: Story = {
25+
args: {
26+
isSelected: false,
27+
onDeleteImage: () => {},
28+
onSelectImage: () => {},
29+
filename: 'logo.png',
30+
},
31+
render: (args) => {
32+
return (
33+
<ImageTagModalListItem
34+
isSelected={args.isSelected}
35+
onDeleteImage={args.onDeleteImage}
36+
onSelectImage={args.onSelectImage}
37+
filename={args.filename}
38+
/>
39+
);
40+
},
41+
};
42+
43+
export const Selected: Story = {
44+
args: {
45+
isSelected: true,
46+
onDeleteImage: () => {},
47+
onSelectImage: () => {},
48+
filename: 'logo.png',
49+
},
50+
render: (args) => {
51+
return (
52+
<ImageTagModalListItem
53+
isSelected={args.isSelected}
54+
onDeleteImage={args.onDeleteImage}
55+
onSelectImage={args.onSelectImage}
56+
filename={args.filename}
57+
/>
58+
);
59+
},
60+
};
61+
62+
export const ActiveAndResize: Story = {
63+
args: {
64+
isSelected: false,
65+
onDeleteImage: () => {},
66+
onSelectImage: () => {},
67+
filename: 'logo.png',
68+
},
69+
render: (args) => {
70+
const [isSelected, setIsSelected] = useState<boolean>(args.isSelected);
71+
72+
return (
73+
<div style={{ width: '400px', resize: 'horizontal', overflow: 'auto' }}>
74+
<ImageTagModalListItem
75+
isSelected={isSelected}
76+
onDeleteImage={args.onDeleteImage}
77+
onSelectImage={() => setIsSelected(!isSelected)}
78+
filename={args.filename}
79+
/>
80+
</div>
81+
);
82+
},
83+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { Meta, StoryObj } from '@storybook/react';
2+
3+
import { ErrorPage } from './ErrorPage';
4+
5+
const meta: Meta<typeof ErrorPage> = {
6+
title: 'pages/ErrorPage',
7+
component: ErrorPage,
8+
parameters: {
9+
layout: 'fullscreen',
10+
},
11+
decorators: [
12+
(Story) => {
13+
return (
14+
<div className="flex h-screen w-screen flex-1">
15+
<Story />
16+
</div>
17+
);
18+
},
19+
],
20+
tags: ['autodocs'],
21+
};
22+
23+
export default meta;
24+
25+
type Story = StoryObj<typeof ErrorPage>;
26+
27+
export const Default: Story = {};

apps/client/src/shared/blockly/defineBlocks.ts

-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ export const defineBlocks = (blockContents: TBlockContents) => {
141141
.appendField(
142142
new Blockly.FieldDropdown([
143143
['_blank', '_blank'],
144-
['_self', '_self'],
145144
['_parent', '_parent'],
146145
['_top', '_top'],
147146
]),

apps/client/src/shared/blockly/htmlBlockContents.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ const linkBlockContents: TBlockInfo[] = [
192192
kind: 'block',
193193
type: addPreviousTypeName('a'),
194194
description:
195-
'다른 페이지나 웹사이트로 이동하는 버튼이에요.\n누르면 새로운 곳으로 가요.\ntarget의 속성은 아래와 같습니다.\nself - 미리보기창에서 열어요.\nblank - 새로운 탭에서 열어요\nparent - 현재 탭에서 열어요\ntop - 현재 탭에서 열어요',
195+
'다른 페이지나 웹사이트로 이동하는 버튼이에요.\n누르면 새로운 곳으로 가요.\ntarget의 속성은 아래와 같습니다.\nblank - 새로운 탭에서 열어요\nparent - 현재 탭에서 열어요\ntop - 현재 탭에서 열어요',
196196
},
197197
];
198198

0 commit comments

Comments
 (0)