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

프로젝트 상세내용 모달 기능을 추가해봤습니다. #2

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
16 changes: 16 additions & 0 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,8 @@ $ cd ddongule-simple-portfolio
"imgUrl": "/assets/images/exmaple.png",
"githubUrl": "https://github.com/ddongule",
"projectUrl": "www.ddongule.com",
"useDetailMd": false,
"detailMdName": "",
"title": "ddongule-simple-portfolio",
"term": "21.02.02 v1.3.0",
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Maxime mollitia ..",
Expand All @@ -297,6 +299,20 @@ $ cd ddongule-simple-portfolio

```

- 프로젝트 아이템 클릭에 대해 `projectUrl` 링크로 이동할지 모달에 프로젝트를 설명하는 마크다운을 보여줄지 선택할 수 있습니다.
- 만약 `useDetailMd`가 false 라면, 프로젝트 아이템을 프로젝트 링크로 사용할 수 있습니다.
- 만약 `useDetailMd`가 true 라면, 프로젝트 아이템을 모달을 표시하는 버튼으로 사용할 수 있습니다. 이때, 모달에는 `detailMdName` 파일에 해당하는 내용이 보여집니다.
- 프로젝트를 설명하는 마크다운 파일을 `src/assets/static/markdown`에 넣어주세요.
- 위 마크다운 파일의 이름을 `projects.detailMdName`에 적어주세요.
- 예시
```
{
...,
detailMdName: "projectDetail.md",
...
}
```

Comment on lines +302 to +315
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- 프로젝트 아이템 클릭에 대해 `projectUrl` 링크로 이동할지 모달에 프로젝트를 설명하는 마크다운을 보여줄지 선택할 수 있습니다.
- 만약 `useDetailMd`가 false 라면, 프로젝트 아이템을 프로젝트 링크로 사용할 수 있습니다.
- 만약 `useDetailMd`가 true 라면, 프로젝트 아이템을 모달을 표시하는 버튼으로 사용할 수 있습니다. 이때, 모달에는 `detailMdName` 파일에 해당하는 내용이 보여집니다.
- 프로젝트를 설명하는 마크다운 파일을 `src/assets/static/markdown`에 넣어주세요.
- 위 마크다운 파일의 이름을 `projects.detailMdName`에 적어주세요.
- 예시
```
{
...,
detailMdName: "projectDetail.md",
...
}
```
#### 프로젝트 아이템 클릭에 대해 `projectUrl` 링크로 이동할지 프로젝트를 설명하는 모달을 보여줄지 선택할 수 있습니다.
만약 `useDetailMd`이 true 라면, 프로젝트 아이템을 모달을 표시하는 버튼으로 사용할 수 있습니다. 이때, 모달에는 `detailMdName` 파일에 해당하는 내용이 보여집니다.
🚨🚨🚨 꼭 아래 내용을 보시고 작성해 주세요!
**만약 프로젝트 설명 모달을 사용하고 싶지 않으시다면**, 아래 Step을 따라하시면 됩니다.
1. `projectUrl`에 프로젝트가 배포된 URL을 넣으세요.
2. `useDetailMd``false` 속성을 넣으세요.
3. `detailMdName``""`(빈 String)을 넣으세요.
- 예시
```
{
...,
"projectUrl": "www.broccoli.com",
"useDetailMd": false,
"detailMdName": "",
...
}
```
---
**만약 프로젝트 설명 모달을 사용하고 싶으시다면**, 아래 Step을 따라하시면 됩니다.
1. 프로젝트를 설명하는 "마크다운 파일"을 `src/assets/static/markdown/details`에 만들어주세요.
2. `projectUrl``""`(빈 String)을 넣으세요.
3. `useDetailMd``true` 속성을 넣으세요.
4. `detailMdName``1`에서 만들어주신 마크다운 파일 이름을 적어주세요.
- 예시
- `src/assets/static/markdown/details/broccoli_project.md` 파일을 생성
```
{
...,
"projectUrl": "",
"useDetailMd": true,
"detailMdName": "broccoli_project",
...
}
```

제가 설명을 좀 극도로 자세히 하는 편이라 ^^;;ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
조금 더 자세히 사용자 가이드를 적어봤습니다.
잘못된 부분은 없는지 한 번 살펴봐주시면 감사하겠습니다! >_ㅇ

그리고 UseDetailMd 속성과 detailMdName 속성이 서로 연관된 속성인만큼, 예시에도 함께 넣어주는 편이 더 좋을 것 같습니다! 어떻게 생각하시나요?

그리고 detailMdName에 파일 확장자인 .md는 달라질 부분이 없는 내용인 만큼,
사용자가 확장자를 굳이 쓰지 않아도 될 수 있도록
ProjectItem에서 import할 때에 미리 넣어두는 방법은 어떠신가요?
그 쪽 부분에도 코멘트 달아두겠습니다!

이 부분에 코멘트가 많네요 따흐흑 한 번 확인해주시면 감사하겠습니다 >_ㅠ

### 👉 5. Timestamp Section.

<img src="./public/readme/images/Timestamp.png" alt="example-image"/>
Expand Down
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,8 @@ Write down the **Projects** you have made!
"imgUrl": "/assets/images/exmaple.png",
"githubUrl": "https://github.com/ddongule",
"projectUrl": "www.ddongule.com",
"useDetailMd": false,
"detailMdName": "",
"title": "ddongule-simple-portfolio",
"term": "21.02.02 v1.3.0",
"description": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Maxime mollitia ..",
Expand All @@ -299,6 +301,20 @@ Write down the **Projects** you have made!

```

- For clicks on a project item, you can choose whether to go to the `projectUrl` link or show the markdown that describes the project in the modal.
- If `useDetailMd` is false, you can use project item as a project link.
- If `useDetailMd` is true, you can use project item as a button that shows a modal in which `detailMdName` file describes the project.
- Put your markdown file to `src/assets/static/markdown`.
- Write the file name to `projects.detailMdName`.
Comment on lines +307 to +308
Copy link
Owner

@ddongule ddongule Sep 6, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Put your markdown file to `src/assets/static/markdown`.
- Write the file name to `projects.detailMdName`.
- Put your Detail Markdown File to `src/assets/static/markdown`.
- Write the name of the Detail Markdown file in `projects.detailMdName`.

어떤 마크다운 파일인지 명시해주는 편이 더 좋을 것 같아서
요렇게 조금 더 디테일하게 설명을 붙여보는 건 어떨까요~? 🙀


(추가) 요 내용은 일단 한국말 버전 마크다운 파일이 확정되면 그 때 변경해보는 것이 더 좋을 것 같아요! 허헛!
한국말 Readme 파일보다 영문 Readme 파일을 먼저 리뷰해버려서 이렇게 리뷰를 해버렸네욨..! 🙀

- Example
```
{
...,
detailMdName: "projectDetail.md",
...
}
```

### 👉 5. Timestamp Section.

<img src="./public/readme/images/Timestamp.png" alt="example-image"/>
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"private": true,
"dependencies": {
"file-loader": "^6.2.0",
"html-react-parser": "^1.2.8",
"i18next": "^20.3.2",
"react": "^17.0.2",
"react-dom": "^17.0.2",
Expand Down
1 change: 1 addition & 0 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@

<noscript>You need to enable JavaScript to run this app. </noscript>
<div id="root"></div>
<div id="modal"></div>
</body>
</html>
6 changes: 6 additions & 0 deletions src/assets/static/icons/cancel-no-circle-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/assets/static/icons/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { ReactComponent as CancelNoCircleIcon } from "./cancel-no-circle-icon.svg";
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

End Of File 문제가 있네요!
일단 해결해주신다면 이후에 제가 프로젝트에 prettier 설정을 빠르게 적용하도록 하겠습니다 ㅜㅜ!

11 changes: 11 additions & 0 deletions src/assets/static/markdown/projectDetailExample.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Project Detail Example

<br>

## This is Broccoli project!!

<br>

- Write down the project details here!!
- Write down the project details here!!
- Write down the project details here!!
3 changes: 2 additions & 1 deletion src/components/AboutMe/index.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import './index.scss';
import '../../sharedStyles/markdown.scss';

import React, { useEffect, useRef, useState } from 'react';

Expand Down Expand Up @@ -124,7 +125,7 @@ const AboutMe = () => {
</div>
<div className='introduce'>
<div className='subtitle'>Let me Introduce myself</div>
<div className='about' ref={aboutMyselfRef}></div>
<div className='markdown about' ref={aboutMyselfRef}></div>
</div>
</div>
</>
Expand Down
156 changes: 0 additions & 156 deletions src/components/AboutMe/index.scss
Original file line number Diff line number Diff line change
Expand Up @@ -126,162 +126,6 @@
margin-bottom: 0.5rem;
}

.about {
h1 {
font-size: m.size(large-2);
font-weight: m.weight(light-bold);
}

h2 {
font-size: m.size(large-1);
font-weight: m.weight(light-bold);
}

h3 {
font-size: m.size(large-0);
font-weight: m.weight(light-bold);
margin-left: 1rem;
}

a {
color: m.color(primary);

&:hover {
font-weight: m.weight(light-bold);
}
}

ul {
& > li {
margin: 0.25rem 1.125rem;

&::before {
content: '';
height: 20px;
width: 20px;
vertical-align: middle;
background-repeat: no-repeat;
position: relative;
display: inline-block;
background-image: url('../../assets/static/images/check-mark.png');
background-repeat: no-repeat;
background-size: contain;
}
}

& > customli {
display: block;
margin: 0.25rem 1.125rem;

&::before {
content: '';
height: 20px;
width: 20px;
vertical-align: middle;
background-repeat: no-repeat;
position: relative;
display: inline-block;
background-image: url('../../assets/static/images/check-light.png');
background-repeat: no-repeat;
background-size: contain;
}
}
}

ol {
counter-reset: number-counter;

li {
margin: 0.25rem 0;
counter-increment: number-counter;
vertical-align: middle;
line-height: 1.5;

&::before {
content: '0' counter(number-counter);
position: relative;
display: inline-block;
text-align: center;
font-size: m.size(small-0);
font-weight: m.weight(light-bold);
color: m.color(primary);
margin-right: 0.375rem;
padding: 0 0.225rem;
background-color: m.color(primary-opacity-heavy);
border-radius: v.$border-radius;
}
}
}

strong {
background-color: m.color(primary-opacity-heavy);
padding: 0 0.225rem;
color: m.color(main);
}

boldred {
background-color: m.color(alert-opacity);
padding: 0 0.225rem;
color: m.color(main);
font-weight: m.weight(semi-bold);
}

boldblue {
background-color: m.color(dark-event-opacity);
padding: 0 0.225rem;
color: m.color(main);
font-weight: m.weight(semi-bold);
}

boldgreen {
background-color: m.color(safe-opacity);
padding: 0 0.225rem;
color: m.color(main);
font-weight: m.weight(semi-bold);
}

code {
vertical-align: middle;
background-color: m.color(grey-0);
border-radius: 6px;
font-size: m.size(small-0);
font-weight: m.weight(medium);
color: m.color(grey-10);
display: inline-block;
padding: 0.2em 0.4em;
margin: 0 0.225rem;
height: fit-content;
}

p {
display: flex;
flex-flow: wrap;
align-items: center;
}

blockquote {
position: relative;
margin: 0.825rem 0;
color: m.color(grey-9);
padding: 0.5rem 0.25rem;
position: relative;
padding-left: 1.5rem;
padding: 0.75rem 1.5rem;
background: m.color(grey-light);

&::before {
content: '';
width: 5px;
height: 100%;
background: #ccd5dd;
position: absolute;
top: 0;
left: 0;
display: block;
}
}
}

.about {
padding: 0 0 0 1.5rem;
}
Expand Down
35 changes: 35 additions & 0 deletions src/components/ModalPortal/index.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import './index.scss';

import { createPortal } from "react-dom";
import { CancelNoCircleIcon } from "../../assets/static/icons";

const Modal = ({ onClose, children }) => {
const onDimmedAreaClick = (event) => {
if (event.target === event.currentTarget) {
onClose();
}
}

return (
<section className="modal-container" onClick={onDimmedAreaClick}>
<div className="modal-inner">
<button type="button" onClick={onClose}>
<CancelNoCircleIcon />
</button>
<div className="modal-content">
{children}
</div>
</div>
</section>
)
}

const ModalPortal = (props) => {
const $MessageModal = document.getElementById("modal");

if (!$MessageModal) throw Error("cannot find modal wrapper");

return createPortal(<Modal {...props} />, $MessageModal);
};

export default ModalPortal
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

마찬가지로 여기에도 End Of File 문제가 있네요! 🥺

58 changes: 58 additions & 0 deletions src/components/ModalPortal/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
.modal-container {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 100;
background-color: rgba(0, 0, 0, 0.5);

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

헤헷 저는 개인적으로 모달 뒤의 내용을 흐리는 것을 좋아해서..
backdrop-filter: blur(2px); 요 내용 추가해주시면 더 좋을 것 같아요 >_ㅇ
아래처럼 보여지게 된답니다!

Screen Shot 2021-09-07 at 2 22 59 AM

display: flex;
justify-content: center;
align-items: center;
animation: fadeIn 0.5s forwards;

}

.modal-inner {
width: fit-content;
height: fit-content;
border-radius: 4px;
background-color: #ffffff;
position: relative;
Comment on lines +18 to +22
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
width: fit-content;
height: fit-content;
border-radius: 4px;
background-color: #ffffff;
position: relative;
width: fit-content;
height: fit-content;
border-radius: 4px;
background-color: #ffffff;
position: relative;
overflow: auto;

overflow: auto 속성을 넣어 Scrollbar가 들어가도
기존 modal의 border-radius를 지켜주는 것이 더 좋은 것 같아요!
어떻게 생각하시나요?

기존

Screen Shot 2021-09-07 at 12 30 04 AM

overflow: auto 속성을 줌

Screen Shot 2021-09-07 at 12 28 58 AM


다만 요 속성을 사용하면 바깥 영역에 있는 X 버튼이 보이지 않게 됩니다.
X 버튼 보다는 모달 하단에 cancel 버튼을 따로 두거나,
modal header를 따로 만들어 X 버튼을 두는 방식으로 변경해보는 것은 어떠신가요?
(현재의X버튼은 모바일에서 봤을 때 화면이 작아지면 보이지 않는다는 문제점도 있더라구요!)

전자를 사용하면 모달을 끄고싶을 때 무조건 스크롤을 내려 모달 하단에 가야한다는 불편함이 예상되므로
후자의 경우가 더 좋아보이기는 합니다 :-)

지금 당장은 구현하지 않고 button 속성만 지워주셔도 좋을 것 같습니다!
Issue에 달아주셔도 좋을 것 같네요 >_ㅇ



button {
position: absolute;
right: -30px;
top: -30px;

svg {
transform: scale(2);
}

&:active {
transform: scale(0.98)
}
}
}

.modal-content {
padding: 1.5rem;
width: fit-content;
height: fit-content;
max-width: 31.25rem;
min-height: 25rem;
max-height: 37.5rem;
overflow: scroll;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
overflow: scroll;
overflow: auto;

스크롤이 필요없는데도 스크롤 영역이 보이는 것보다는,
스크롤 될 만큼 내용이 길어진다면 그 때 스크롤 영역이 생기도록 auto 속성을 넣는 것은 어떠신가요?

}


@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

End Of File.. 번거로우시겠지만 부탁드리옵니다..

Loading