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

4 featurecreate document delete button #49

Open
wants to merge 13 commits into
base: develop
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
9 changes: 6 additions & 3 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,16 @@
id="sideBar__hamburger"
>
<img
src="./src/asset/sideBar-item-hide.svg"
alt="sidebar-button"
src="./src/asset/menu-burger.svg"
alt=""
class="sidebar__icon"
/>
</button>
<li id="breadCrumb" class="breadCrumb">bread crumb..</li>
</div>
<button>삭제</button>
<button class="delete__button" id="delete__button">
<img src="./src/asset/trash-can.svg" alt="" />
</button>
</ul>
<section class="editor">
<div id="editor__body" class="editor__body">
Expand All @@ -75,5 +77,6 @@ <h1 id="editor__body--title">
</main>
<script type="module" src="./src/main.js"></script>
<script type="module" src="./src/components/Sidebar.js"></script>
<script type="module" src="./src/components/Deletebutton.js"></script>
</body>
</html>
3 changes: 0 additions & 3 deletions src/asset/sideBar-item-hide.svg

This file was deleted.

30 changes: 30 additions & 0 deletions src/components/Deletebutton.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { BASE_URL, x_username } from "../constants/urls.js";

// 삭제버튼
const docsDeleteButton = document.getElementById("delete__button");

// 삭제 API 요청 함수
async function documentDelete(docId) {
try {
const response = await fetch(`${BASE_URL}/${docId}`, {
method: "DELETE",
headers: {
"Content-Type": "application/json",
"x-username": x_username,
},
});
if (!response.ok) {
throw new Error("페이지 삭제 요청이 실패했습니다.");
}
const result = await response.json();
console.log("페이지 삭제 성공", result);
// 삭제 성공 후 필요한 작업 수행 (예: 페이지 리로드 또는 UI 업데이트)
} catch (error) {
console.error("페이지 삭제 중 오류 발생", error);
}
}

docsDeleteButton.addEventListener("click", function () {
const documentId = `${docId}`;
documentDelete(documentId);
});
27 changes: 17 additions & 10 deletions src/components/DocumentManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ 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 @@ -54,7 +53,15 @@ export const createDocumentItem = async (doc, parentElement = null) => {
newDocumentItem.classList.add("sidebar__menuWrapper--document");
newDocumentItem.id = `document-container-${doc.id}`;

newDocumentItem.innerHTML = sidebarButton(doc.id, doc.title);
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>
`;

// 부모 요소가 있으면 그 안에, 없으면 document-list에 추가
if (parentElement) {
Expand All @@ -76,14 +83,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 @@ -95,7 +102,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: 0 additions & 26 deletions src/components/Sidebar.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,6 @@
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: 7 additions & 13 deletions src/listeners/CreateNewDocListener.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
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) => {
// 버튼을 직접 클릭했거나, 버튼 내부의 이미지를 클릭했을 경우를 모두 처리
const addButton = event.target.classList.contains("add-subdoc-btn")
? event.target
: event.target.closest(".add-subdoc-btn");

if (addButton) {
const parentId = addButton.dataset.parentId;
if (event.target.classList.contains("add-subdoc-btn")) {
const parentId = event.target.getAttribute("data-parent-id");
addDoc(parentId);
}
});
};

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

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

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

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

.sideBar__hideButton:hover {
.sideBar__button: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);
}

/* 사이드바 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 {
display: none;
}