안형욱

Merge branch 'feat/show-detail' into 'develop'

feat: document 미리보기 기능 구현



See merge request !15
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
16 "react/prop-types": 0, 16 "react/prop-types": 0,
17 "import/prefer-default-export": 0, 17 "import/prefer-default-export": 0,
18 "no-param-reassign": 0, 18 "no-param-reassign": 0,
19 - "arrow-body-style": 0, 19 + "arrow-body-style": 0
20 }, 20 },
21 "settings": { 21 "settings": {
22 "react": { 22 "react": {
......
1 +import { Card, Center, Divider, Table, Text } from '@mantine/core';
2 +import React from 'react';
3 +
4 +function Detail({ filename, writer, filePath, createdDate }) {
5 + const rows = (
6 + <>
7 + <tr>
8 + <td>
9 + <Text style={{ width: 50 }} weight={700}>
10 + 문서명
11 + </Text>
12 + </td>
13 + <td>
14 + <Text>{filename}</Text>
15 + </td>
16 + </tr>
17 + <tr>
18 + <td>
19 + <Text weight={700}>작성자</Text>
20 + </td>
21 + <td>
22 + <Text>{writer}</Text>
23 + </td>
24 + </tr>
25 + <tr>
26 + <td>
27 + <Text weight={700}>파일 경로</Text>
28 + </td>
29 + <td>
30 + <Text>{filePath}</Text>
31 + </td>
32 + </tr>
33 + <tr>
34 + <td>
35 + <Text weight={700}>파일 생성일</Text>
36 + </td>
37 + <td>
38 + <Text>{createdDate}</Text>
39 + </td>
40 + </tr>
41 + </>
42 + );
43 + return (
44 + <Card>
45 + <Center>
46 + <Text weight={700}>파일 정보</Text>
47 + </Center>
48 + <Divider />
49 + <Table striped>
50 + <thead>
51 + <tbody>{rows}</tbody>
52 + </thead>
53 + </Table>
54 + </Card>
55 + );
56 +}
57 +
58 +export default Detail;
1 +/* eslint-disable react/jsx-boolean-value */
1 /* eslint-disable no-unused-vars */ 2 /* eslint-disable no-unused-vars */
2 -import React from 'react'; 3 +import React, { useState } from 'react';
3 -import { Container, Text } from '@mantine/core'; 4 +import { Container, Popover, Text } from '@mantine/core';
5 +import { FaSearchPlus } from 'react-icons/fa';
4 import File from './File'; 6 import File from './File';
5 import Thumbnails from './Thumbnail'; 7 import Thumbnails from './Thumbnail';
8 +import Detail from '../Detail';
6 9
7 const Document = ({ 10 const Document = ({
8 content, 11 content,
...@@ -17,6 +20,7 @@ const Document = ({ ...@@ -17,6 +20,7 @@ const Document = ({
17 const toggleEllipsis = (str, _limit) => ({ 20 const toggleEllipsis = (str, _limit) => ({
18 string: str.slice(0, _limit), 21 string: str.slice(0, _limit),
19 }); 22 });
23 + const [opened, setOpened] = useState(false);
20 24
21 return ( 25 return (
22 <Container 26 <Container
...@@ -26,7 +30,30 @@ const Document = ({ ...@@ -26,7 +30,30 @@ const Document = ({
26 border: '1px solid black', 30 border: '1px solid black',
27 }} 31 }}
28 > 32 >
33 + <div style={{ display: 'flex' }}>
29 <File filename={filename} filepath={filePath} /> 34 <File filename={filename} filepath={filePath} />
35 + <Popover
36 + opened={opened}
37 + onClose={() => setOpened(false)}
38 + target={
39 + <FaSearchPlus
40 + onMouseEnter={() => setOpened(true)}
41 + onMouseLeave={() => setOpened(false)}
42 + style={{ marginTop: 3, marginLeft: 3, color: '#868e96' }}
43 + />
44 + }
45 + position="bottom-start"
46 + gutter={50}
47 + bodyStyle={{ pointerEvents: 'none' }}
48 + >
49 + <Detail
50 + filename={filename}
51 + filePath={filePath}
52 + writer={writer}
53 + createdDate={createdDate}
54 + />
55 + </Popover>
56 + </div>
30 <Text color="green">경로: {filePath}</Text> 57 <Text color="green">경로: {filePath}</Text>
31 <Text>{toggleEllipsis(content, limit).string}...</Text> 58 <Text>{toggleEllipsis(content, limit).string}...</Text>
32 <Thumbnails srcs={srcs} /> 59 <Thumbnails srcs={srcs} />
......