UI: fix drawer display with backdrop and auto-close on view switch
This commit is contained in:
26
app.js
26
app.js
@@ -46,6 +46,7 @@ const toolsCloseBtn = document.getElementById("toolsCloseBtn");
|
|||||||
const gamesDrawer = document.getElementById("gamesDrawer");
|
const gamesDrawer = document.getElementById("gamesDrawer");
|
||||||
const gamesToggleBtn = document.getElementById("gamesToggleBtn");
|
const gamesToggleBtn = document.getElementById("gamesToggleBtn");
|
||||||
const gamesCloseBtn = document.getElementById("gamesCloseBtn");
|
const gamesCloseBtn = document.getElementById("gamesCloseBtn");
|
||||||
|
const drawerBackdrop = document.getElementById("drawerBackdrop");
|
||||||
const totalGamesCount = document.getElementById("totalGamesCount");
|
const totalGamesCount = document.getElementById("totalGamesCount");
|
||||||
const totalGamesValue = document.getElementById("totalGamesValue");
|
const totalGamesValue = document.getElementById("totalGamesValue");
|
||||||
const migrateBtn = document.getElementById("migrateBtn");
|
const migrateBtn = document.getElementById("migrateBtn");
|
||||||
@@ -151,19 +152,23 @@ coverFileInput.addEventListener("change", async (event) => {
|
|||||||
toolsToggleBtn.addEventListener("click", () => {
|
toolsToggleBtn.addEventListener("click", () => {
|
||||||
gamesDrawer.classList.remove("open");
|
gamesDrawer.classList.remove("open");
|
||||||
toolsDrawer.classList.toggle("open");
|
toolsDrawer.classList.toggle("open");
|
||||||
|
syncDrawersUi();
|
||||||
});
|
});
|
||||||
|
|
||||||
toolsCloseBtn.addEventListener("click", () => {
|
toolsCloseBtn.addEventListener("click", () => {
|
||||||
toolsDrawer.classList.remove("open");
|
toolsDrawer.classList.remove("open");
|
||||||
|
syncDrawersUi();
|
||||||
});
|
});
|
||||||
|
|
||||||
gamesToggleBtn.addEventListener("click", () => {
|
gamesToggleBtn.addEventListener("click", () => {
|
||||||
toolsDrawer.classList.remove("open");
|
toolsDrawer.classList.remove("open");
|
||||||
gamesDrawer.classList.toggle("open");
|
gamesDrawer.classList.toggle("open");
|
||||||
|
syncDrawersUi();
|
||||||
});
|
});
|
||||||
|
|
||||||
gamesCloseBtn.addEventListener("click", () => {
|
gamesCloseBtn.addEventListener("click", () => {
|
||||||
gamesDrawer.classList.remove("open");
|
gamesDrawer.classList.remove("open");
|
||||||
|
syncDrawersUi();
|
||||||
});
|
});
|
||||||
|
|
||||||
document.addEventListener("click", (event) => {
|
document.addEventListener("click", (event) => {
|
||||||
@@ -182,18 +187,28 @@ document.addEventListener("click", (event) => {
|
|||||||
}
|
}
|
||||||
toolsDrawer.classList.remove("open");
|
toolsDrawer.classList.remove("open");
|
||||||
gamesDrawer.classList.remove("open");
|
gamesDrawer.classList.remove("open");
|
||||||
|
syncDrawersUi();
|
||||||
});
|
});
|
||||||
|
|
||||||
document.addEventListener("keydown", (event) => {
|
document.addEventListener("keydown", (event) => {
|
||||||
if (event.key === "Escape") {
|
if (event.key === "Escape") {
|
||||||
toolsDrawer.classList.remove("open");
|
toolsDrawer.classList.remove("open");
|
||||||
gamesDrawer.classList.remove("open");
|
gamesDrawer.classList.remove("open");
|
||||||
|
syncDrawersUi();
|
||||||
if (scannerRunning) {
|
if (scannerRunning) {
|
||||||
stopScanner("Camera arretee.");
|
stopScanner("Camera arretee.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (drawerBackdrop) {
|
||||||
|
drawerBackdrop.addEventListener("click", () => {
|
||||||
|
toolsDrawer.classList.remove("open");
|
||||||
|
gamesDrawer.classList.remove("open");
|
||||||
|
syncDrawersUi();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
googleConnectBtn.addEventListener("click", async () => {
|
googleConnectBtn.addEventListener("click", async () => {
|
||||||
try {
|
try {
|
||||||
const payload = await apiRequest("/api/google/connect-url");
|
const payload = await apiRequest("/api/google/connect-url");
|
||||||
@@ -922,9 +937,20 @@ function setCurrentView(view) {
|
|||||||
showLoanedOnly = view === "loans";
|
showLoanedOnly = view === "loans";
|
||||||
resetPaging();
|
resetPaging();
|
||||||
selectedGameIds.clear();
|
selectedGameIds.clear();
|
||||||
|
toolsDrawer.classList.remove("open");
|
||||||
|
gamesDrawer.classList.remove("open");
|
||||||
|
syncDrawersUi();
|
||||||
render();
|
render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function syncDrawersUi() {
|
||||||
|
if (!drawerBackdrop) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const anyDrawerOpen = toolsDrawer.classList.contains("open") || gamesDrawer.classList.contains("open");
|
||||||
|
drawerBackdrop.classList.toggle("hidden", !anyDrawerOpen);
|
||||||
|
}
|
||||||
|
|
||||||
function renderViewChrome() {
|
function renderViewChrome() {
|
||||||
const isStats = currentView === "stats";
|
const isStats = currentView === "stats";
|
||||||
const isLoans = currentView === "loans";
|
const isLoans = currentView === "loans";
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
<button id="gamesToggleBtn" type="button" class="games-toggle-btn">Jeux</button>
|
<button id="gamesToggleBtn" type="button" class="games-toggle-btn">Jeux</button>
|
||||||
|
<div id="drawerBackdrop" class="drawer-backdrop hidden" aria-hidden="true"></div>
|
||||||
<aside id="toolsDrawer" class="tools-drawer" aria-label="Menu outils">
|
<aside id="toolsDrawer" class="tools-drawer" aria-label="Menu outils">
|
||||||
<div class="tools-header">
|
<div class="tools-header">
|
||||||
<h2>Outils</h2>
|
<h2>Outils</h2>
|
||||||
|
|||||||
@@ -108,6 +108,13 @@ body {
|
|||||||
transform: translateX(0);
|
transform: translateX(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.drawer-backdrop {
|
||||||
|
position: fixed;
|
||||||
|
inset: 0;
|
||||||
|
background: rgba(6, 12, 22, 0.42);
|
||||||
|
z-index: 35;
|
||||||
|
}
|
||||||
|
|
||||||
.games-drawer {
|
.games-drawer {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user