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

[1단계 - 나만의 유튜브 강의실] 콤피(류현승) 미션 제출합니다. #95

Merged
merged 71 commits into from
Mar 15, 2022
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
985d0bb
📦 : 웹팩 및 기본 패키지 설정
moonheekim0118 Mar 8, 2022
63cb5e7
💄 : sass으로 전환
moonheekim0118 Mar 8, 2022
edca9cd
💄 : 폰트 추가
moonheekim0118 Mar 8, 2022
b29dba5
📝 : README 작성
moonheekim0118 Mar 8, 2022
2faf771
📦 : eslint, gitignore, webpack 설정
moonheekim0118 Mar 9, 2022
bc63e0d
💄 : 선택자 지정
moonheekim0118 Mar 9, 2022
80b0389
✨ : Display Core 추가
moonheekim0118 Mar 9, 2022
0b75dd3
✨ : Element 유틸 추가
moonheekim0118 Mar 9, 2022
843bc2c
✨ : 모달 출력 기능 추가
moonheekim0118 Mar 9, 2022
05acbc9
💄 : 버튼 스타일 변경
moonheekim0118 Mar 9, 2022
08ab75f
✨ : Display 메서드 수정
moonheekim0118 Mar 9, 2022
4d030b9
📦 : 환경변수 설정
moonheekim0118 Mar 9, 2022
5e34caf
✨ : 상태관리 기능 추가
moonheekim0118 Mar 9, 2022
2d5fa52
✨ : 검색 시도 기능 구현
moonheekim0118 Mar 9, 2022
be1f6d9
💄 : 스켈레톤 UI 추가
moonheekim0118 Mar 9, 2022
11133fa
🚚 : 파일 이름 변경
moonheekim0118 Mar 9, 2022
777deb5
💄 : ID 지정
moonheekim0118 Mar 9, 2022
5fa3a16
✨ : 유튜브 API 연동
moonheekim0118 Mar 9, 2022
ef732c2
✨ : Core 기능 수정
moonheekim0118 Mar 9, 2022
7c56abd
✨ : 유튜브 검색 결과 출력 기능 추가
moonheekim0118 Mar 9, 2022
d84d876
✨ : 무한 스크롤 기능 구현
moonheekim0118 Mar 10, 2022
51d1c05
✨ : 검색 결과 없음 이미지 출력 구현
moonheekim0118 Mar 10, 2022
081b1f6
✨ : 동영상 id 저장 기능 구현
moonheekim0118 Mar 10, 2022
cec2630
✅ : 유효성 검사 테스트 추가
moonheekim0118 Mar 10, 2022
5a8d093
✨ : 사용자 검색어 유효성 추가
moonheekim0118 Mar 10, 2022
76cdf87
✨ : 서버 오류 처리 구현
moonheekim0118 Mar 10, 2022
c7c1815
♻️ : 상수화 및 함수 분리 리팩토링
moonheekim0118 Mar 10, 2022
2fb0099
🐛 : 코어 기본 상태 수정
moonheekim0118 Mar 10, 2022
a79a22c
📦 : jest 웹팩 경로 설정 변경
moonheekim0118 Mar 10, 2022
ecc74fc
✅ : 검색 상태 처리 테스트코드 추가
moonheekim0118 Mar 10, 2022
b898cd2
📝 : 기능 목록 수정
moonheekim0118 Mar 10, 2022
3cee1f1
📦 : 배포 설정
moonheekim0118 Mar 10, 2022
669228d
🐛 : 스켈레톤 UI가 출력되지 않는 문제 해결
moonheekim0118 Mar 10, 2022
720b074
♻️ : 선택자 상수 분리
moonheekim0118 Mar 11, 2022
e007d15
♻️ : 동영상이 12개씩 로드되도록 수정
compy-ryu Mar 12, 2022
76873f4
♻️ : `Modal` 닫기 이벤트 처리 방식 수정
compy-ryu Mar 12, 2022
b24567c
♻️ : 동영상 저장 갯수 체크 부분 개선
compy-ryu Mar 12, 2022
f189a36
♻️ : 선택자 치환 함수 사용 권장되지 않는 코드 제거
compy-ryu Mar 13, 2022
6623bf9
♻️ : API 사용 시 URL 전달 방식 개선
compy-ryu Mar 13, 2022
e38870c
♻️ : DOM_NAME 함수 처리 방식 개선
compy-ryu Mar 13, 2022
a57a591
♻️ : 추상 클래스 인스턴스화 차단 방식 개선
compy-ryu Mar 13, 2022
9d9089a
♻️ : `Display` 이벤트 등록 시 기본 이벤트 처리 방식 변경
compy-ryu Mar 13, 2022
e17d28a
♻️ : `onEnableButton` 코드 라인 개선
compy-ryu Mar 13, 2022
ccd265e
♻️ : 유튜브 검색 비즈니스 로직 메서드 분리
compy-ryu Mar 13, 2022
72d13e8
🚚 : Display 영역 `index` => `App`변경
compy-ryu Mar 13, 2022
434f2a1
🐛 : 검색어 변경 시 스크롤이 리셋 되도록 변경
compy-ryu Mar 13, 2022
095b3ba
⚰️ : 사용하지 않는 코드 제거
compy-ryu Mar 13, 2022
ebed582
♻️ : `Display` 초기화 처리 구조 개선
compy-ryu Mar 13, 2022
ccda560
♻️ : 스켈레톤 UI 렌더링 방식 변경
compy-ryu Mar 13, 2022
d036e09
♻️ : `Display` 렌더링 구조 변경
compy-ryu Mar 13, 2022
5b25f98
♻️ : 검색 결과 출력 방식 개선
compy-ryu Mar 13, 2022
d880cb0
♻️ : 동영상 리스트 출력 구조 개선
compy-ryu Mar 13, 2022
c49dfdc
♻️ : `Display` 메서드명 수정
compy-ryu Mar 13, 2022
fbb377c
🐛 : 마지막 페이지를 초과할 시 첫번째 페이지로 다시 로드되는 버그 수정
compy-ryu Mar 13, 2022
6821a36
🐛 : 오류 페이지와 스켈레톤 UI가 함께 표기 되는 문제 해결
compy-ryu Mar 13, 2022
7185229
✅ : 테스트 코드 재작성
compy-ryu Mar 13, 2022
d1259f2
⚰️ : `combineElement` 제거
compy-ryu Mar 13, 2022
27b8acc
🐛 : 검색어 변경 시 스크롤이 리셋되지 않던 버그 수정
compy-ryu Mar 13, 2022
bc55e96
♻️ : `URLSearchParams` 사용 방식 개선
compy-ryu Mar 14, 2022
3748d39
♻️ : Index 처리 방식 간소화
compy-ryu Mar 14, 2022
c467aad
♻️ : 검색 결과 로딩 처리 부분 코드 라인 개선
compy-ryu Mar 14, 2022
6457eba
⚰️ :사용하지 않는 코드 제거
compy-ryu Mar 14, 2022
5fd8fde
♻️ : addEvent를 추상 클래스에서 유틸으로 분리
compy-ryu Mar 14, 2022
a4b3d0b
♻️ : 검색 결과에서 추상 클래스 제거
compy-ryu Mar 14, 2022
984aab3
♻️ : 검색 입력 Display에서 추상 클래스 제거
compy-ryu Mar 14, 2022
68716cf
♻️ : 네이게이션 메뉴에서 추상 클래스 제거
compy-ryu Mar 14, 2022
710baf6
♻️ : 모달 디스플레이 영역에서 추상 클래스 제거
compy-ryu Mar 14, 2022
27f70ab
⚰️ : 사용하지 않는 `Display` 추상 클래스 제거
compy-ryu Mar 14, 2022
5730fb6
♻️ : 이벤트 처리 부분 arrow function 적용
compy-ryu Mar 14, 2022
216d420
♻️ : 컨테이너 엘리먼트 변수명 수정
compy-ryu Mar 14, 2022
9a8e710
♻️ : `YoutubeSearchStore` 추상 클래스 제거
compy-ryu Mar 15, 2022
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
12 changes: 12 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"presets": [
["@babel/preset-env",
{
"shippedProposals": true,
"targets": {
"node": "current"
}
}]
],
"plugins": ["@babel/plugin-transform-runtime"]
}
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.*
webpack.config.js
28 changes: 28 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"env": {
"browser": true,
"es2021": true
},
"ignorePatterns": ["*.test.js", "*.config.js"],
"extends": ["eslint:recommended", "airbnb-base"],
"parser": "@babel/eslint-parser",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
"import/prefer-default-export": "off",
"class-methods-use-this": "off",
"import/no-unresolved": "off",
"no-new":"off",
"arrow-parens":"off",
"no-unused-vars":"off",
"consistent-return":"off",
"no-param-reassign":"off",
"no-unused-expressions":"off",
"implicit-arrow-linebreak":"off",
"function-paren-newline":"off",
"no-return-assign":"off",
"object-curly-newline":"off"
}
}
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride

# Logs
logs
*.log
Expand Down
11 changes: 11 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"printWidth": 100,
"semi": true,
"singleQuote": true,
"trailingComma": "all",
"tabWidth": 2,
"bracketSpacing": true,
"arrowParens": "avoid",
"endOfLine": "auto",
"useTabs": false
}
29 changes: 29 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 나만의 유튜브 강의실
- API
- 비즈니스 로직 & 상태
- 유튜브 검색
- [x] 검색어를 API에 전달하여, 검색 결과를 가져온다.
- **예외 처리**
- [x] 검색 결과 없을 때의 오류 결과 값을 반환한다.
- [x] 기타 API 오류에 대해 처리 결과 값을 반환한다.
- [x] 사용자가 요청한 유튜브 영상을 로컬 스토리지 클래스를 활용하여 저장 혹은 취소할 수 있다.
- 로컬 스토리지에 저장 클래스
- [x] 사용자가 요청한 동영상의 ID를 JSON 형식으로 100개까지 저장할 수 있다.
- 사용자 인터페이스
- 첫 화면
- [x] 검색 버튼을 누르면, 검색 모달이 출력되어야 한다.
- 검색 모달
- 검색창
- [x] 검색어를 입력하고 검색을 시도할 수 있다.
- **예외 처리**
- [x] 검색어는 빈 칸일 수 없다.
- [x] 현재 검색어와 중복된 검색어를 시도할 시 검색을 하지 않는다.

- 검색 결과 컨텐츠
- [x] 데이터를 불러오고 있을 땐 스켈레톤 UI를 보여준다.
- [x] 유튜브 컨텐츠는 10개씩 보여준다.
- [x] 10개씩 불러온 부분은 상수 처리를 하여준다.
- [x] 검색 결과에서 스크롤이 마지막에 도착했을 때 새로운 컨텐츠를 불러온다.
- [x] 검색 결과가 없을 때는 요구사항의 이미지를 출력한다.
- [x] 검색 결과에서 동영상을 저장할 수 있어야 한다.
- [x] 이미 저장한 동영상은 저장 취소 버튼이 출력 되어야 한다.
22 changes: 10 additions & 12 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,29 @@
<meta charset="UTF-8" />
<title>나만의 유튜브 강의실</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="./src/css/index.css">
</head>

<body>
<main id="app" class="classroom-container">
<h1 class="classroom-container__title">👩🏻‍💻 나만의 유튜브 강의실 👨🏻‍💻</h1>
<nav class="nav">
<button id="search-modal-button" class="button nav__button">🔍 검색</button>
<nav id="classroom-navigation" class="nav">
<button id="search-modal-button" class="button nav__button" data-modal="search-modal">🔍 검색</button>
</nav>
</main>
<!-- 1 검색 버튼을 누르면 아래와 같은 검색 모달을 보여줍니다.-->
<div class="modal-container hide">
<div id="modal" class="modal-container hide">
<div class="dimmer"></div>
<div class="search-modal" role="dialog" aria-labelledby="search-modal-title">
<h2 id="search-modal-title" class="search-modal__title">🔍 보고싶은 영상 찾기 🔍</h2>
<section class="search-input">
<div id="search-modal" class="modal-content show" role="dialog" aria-labelledby="modal-content-title">
<h2 id="search-modal-title" class="modal-content__title">🔍 보고싶은 영상 찾기 🔍</h2>
<form id="search-form" class="search-input">
<h3 hidden>검색어 입력</h3>
<input id="search-input-keyword" type="text" placeholder="검색" class="search-input__keyword">
<button id="search-button" class="search-input__search-button button">검색</button>
</section>
<button id="search-button" class="search-input__search-button button" disabled>검색</button>
</form>
<!-- 2-1 검색 결과가 있을 경우, 아래와 같은 검색 결과 목록을 보여줍니다.-->
<section class="search-result">
<section id="search-result" class="search-result">
<h3 hidden>검색 결과</h3>
<ul class="video-list">
<ul id="video-list" class="video-list">
<!-- <li class="video-item" data-video-id="">
<img
src="https://i.ytimg.com/vi/ECfuKi5-Cfs/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rs=AOn4CLDvmIcX-TgdcH2g_Bd4AUxw6hjmvQ"
Expand All @@ -53,7 +52,6 @@ <h3 hidden>검색 결과</h3>
</section> -->
</div>
</div>
<script type="module" src="./src/js/index.js"></script>
</body>

</html>
Loading