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

feat: sideber 코드 분리, 이벤트 기능 버그 수정 #28

Merged
merged 1 commit into from
Nov 13, 2024
Merged
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
4 changes: 2 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@
id="sideBar__hamburger"
>
<img
src="./src/asset/menu-burger.svg"
alt=""
src="./src/asset/sideBar-item-hide.svg"
alt="sidebar-button"
class="sidebar__icon"
/>
</button>
Expand Down
3 changes: 3 additions & 0 deletions src/asset/sideBar-item-hide.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
27 changes: 10 additions & 17 deletions src/components/DocumentManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
} from "../api/api.js";
import { navigate, routes } from "../router/router.js";
import { updateBreadcrumb } from "./breadcrumb.js";
import { sidebarButton } from "./Sidebar.js";

// 문서 목록을 가져와 동적 링크 생성
export const createDocumentsList = async () => {
Expand Down Expand Up @@ -53,15 +54,7 @@ export const createDocumentItem = async (doc, parentElement = null) => {
newDocumentItem.classList.add("sidebar__menuWrapper--document");
newDocumentItem.id = `document-container-${doc.id}`;

newDocumentItem.innerHTML = `
<div class="document-content">
<a href="#" class="document-link" data-url="doc${doc.id}">
${doc.title}
</a>
<button class="add-subdoc-btn" data-parent-id="${doc.id}">+</button>
</div>
<ul class="sub-document-list" style="display: none;"></ul>
`;
newDocumentItem.innerHTML = sidebarButton(doc.id, doc.title);

// 부모 요소가 있으면 그 안에, 없으면 document-list에 추가
if (parentElement) {
Expand All @@ -83,14 +76,14 @@ export const createDocumentItem = async (doc, parentElement = null) => {
});
}

// hover 이벤트 추가
newDocumentItem.addEventListener("mouseenter", () => {
newDocumentItem.classList.add("hover__document-item");
});
// // hover 이벤트 추가
// newDocumentItem.addEventListener("mouseenter", () => {
// newDocumentItem.classList.add("hover__document-item");
// });

newDocumentItem.addEventListener("mouseleave", () => {
newDocumentItem.classList.remove("hover__document-item");
});
// newDocumentItem.addEventListener("mouseleave", () => {
// newDocumentItem.classList.remove("hover__document-item");
// });

// 문서 클릭 이벤트
newDocumentItem.addEventListener("click", async (event) => {
Expand All @@ -102,7 +95,7 @@ export const createDocumentItem = async (doc, parentElement = null) => {
removeAllActiveClasses();

// 현재 클릭된 항목에 active 클래스 추가
newDocumentItem.classList.add("acitve__document-item");
// newDocumentItem.classList.add("acitve__document-item");

navigate(path);

Expand Down
26 changes: 26 additions & 0 deletions src/components/Sidebar.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,32 @@
const hamburger = document.getElementById("sideBar__hamburger");
const sideBar = document.getElementById("sidebar");

export const sidebarButton = (id, title) => {
return `
<div class="sidebar_item" id="documentBlock-div-sidebar-${id}">
<div class="sidebar_item_left_btn" >
<button class="document-spread sidebar_item-btn">
<img
src="./src/asset/sideBar-item-hide.svg"
alt="sidebar-button"
class="sidebar__icon"
/>
</button>
<a href="#" class="document-link " data-url="doc${id}">
${title}
</a>
</div>
<button class="add-subdoc-btn sidebar_item-btn" data-parent-id="${id}">
<img
src="./src/asset/plus.svg"
alt="sidebar-button"
class="sidebar__icon"
/>
</button>
</div>
<ul class="sub-document-list" style="display: none;"></ul> <!-- 기본적으로 숨기기 -->`;
};

// 사이드바 숨기는 함수
const onclickSideBarHide = () => {
const hideButton = document.getElementById("sideBar__hideButton");
Expand Down
20 changes: 13 additions & 7 deletions src/listeners/CreateNewDocListener.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
import { addRootDoc, addDoc } from "../components/DocumentManager.js"
import { addRootDoc, addDoc } from "../components/DocumentManager.js";

export const setEventListener = (documentList, createDocumentButton) => {
// 새 문서 생성
createDocumentButton.addEventListener("click", () => addRootDoc(documentList));

createDocumentButton.addEventListener("click", () =>
addRootDoc(documentList)
);

// 하위 문서 생성
documentList.addEventListener("click", (event) => {
if (event.target.classList.contains("add-subdoc-btn")) {
const parentId = event.target.getAttribute("data-parent-id");
// 버튼을 직접 클릭했거나, 버튼 내부의 이미지를 클릭했을 경우를 모두 처리
const addButton = event.target.classList.contains("add-subdoc-btn")
? event.target
: event.target.closest(".add-subdoc-btn");

if (addButton) {
const parentId = addButton.dataset.parentId;
addDoc(parentId);
}
});

}
};
9 changes: 8 additions & 1 deletion styles/reset.css
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,11 @@ input:focus {
outline: none;
box-shadow: none;
border: none;
}
}
button {
margin: 0;
padding: 0;
border: none;
background-color: inherit;
cursor: pointer;
}
44 changes: 38 additions & 6 deletions styles/sideBar.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@import url("/styles/variables.css");
@import url("./variables.css");

.screen__sidebar {
box-sizing: border-box;
Expand All @@ -10,6 +10,7 @@
flex-direction: column;
gap: 1.2rem;
}

.screen_miniSidebar {
position: absolute;
left: 12px;
Expand Down Expand Up @@ -46,7 +47,6 @@
.sub-document-list {
padding-left: 1.42rem;
list-style-type: none;
display: none;
}
.sidebar__menuWrapper--documet {
height: 30px;
Expand All @@ -61,7 +61,6 @@
.sidebar__menuWrapper--document {
border-radius: 4px;
display: block;
padding: 5px 8px;
position: relative;
}
.add-subdoc-btn {
Expand Down Expand Up @@ -112,7 +111,7 @@
}

/* 사이드바 아이콘 */
.sideBar__button {
.sideBar__hideButton {
box-sizing: border-box;
width: 20px;
height: 20px;
Expand All @@ -122,25 +121,58 @@
background: none;
cursor: pointer;
}
.sideBar__button:hover {

.sideBar__hideButton:hover {
background-color: var(--bg100);
border-radius: 4px;
}

.sidebar__icon {
box-sizing: border-box;
width: fit-content;
height: fit-content;
}

.sidebar__iconWrap {
display: flex;
align-items: center;
gap: 8px;
}

/* 사이드바 숨기기 css */
.sidebar__hide {
min-width: 0px;
width: 0px;
padding: 0px;
transform: translateX(-250px);
display: none;
}

/* 사이드바 Item 스타일 */
.sidebar_item {
position: relative;
width: 100%;
display: flex;
padding: 5px 8px;
align-items: center;
justify-content: space-between;
}

.sidebar_item .sidebar_item_left_btn {
flex: 1;

display: flex;
align-items: center;
}

.sidebar_item:hover {
background-color: var(--bg100);
color: var(--black200);
transition: background-color 0.2s ease;
}

.sidebar_item-btn {
display: inline-flex;
}

.sidebar_item .add-subdoc-btn {
}