From 9760d369175e6c84164f3e48f9430f858fdda32d Mon Sep 17 00:00:00 2001 From: Loi Phan Date: Tue, 12 Sep 2023 15:34:32 +0700 Subject: [PATCH] Optimized code --- .../src/js/views/commonView.js | 30 ++++++++++--------- javascript-practice/src/js/views/homeView.js | 15 ++++++++-- javascript-practice/src/pages/index.html | 2 +- .../src/styles/pages/_index.scss | 12 ++++++-- 4 files changed, 39 insertions(+), 20 deletions(-) diff --git a/javascript-practice/src/js/views/commonView.js b/javascript-practice/src/js/views/commonView.js index 02ceef2..f329ae3 100644 --- a/javascript-practice/src/js/views/commonView.js +++ b/javascript-practice/src/js/views/commonView.js @@ -34,10 +34,10 @@ export default class CommonView { initElementToast() { this.toastDialog = document.querySelector('.dialog'); this.toast = document.querySelector('.toast'); - this.toastIcon = document.querySelector('.mark'); - this.toastBtn = document.querySelector('.toast__redirect-btn'); - this.toastTitle = document.querySelector('.toast__title'); - this.toastContent = document.querySelector('.toast__message'); + this.toastIcon = this.toast.querySelector('.mark'); + this.toastBtn = this.toast.querySelector('.toast__redirect-btn'); + this.toastTitle = this.toast.querySelector('.toast__title'); + this.toastContent = this.toast.querySelector('.toast__message'); } /** @@ -56,18 +56,14 @@ export default class CommonView { */ initToastContent(typeToast, title, content, btnContent) { // Remove old typeToast class if haved - this.toast.classList.forEach((classItem) => - classItem === TYPE_TOAST.success || classItem === TYPE_TOAST.error - ? this.toast.classList.remove(classItem) - : '', - ); + Object.keys(TYPE_TOAST).forEach((value) => { + CommonView.removeClassElement(value, this.toast); + }); // Remove old icon toast if haved - this.toastIcon.classList.forEach((classItem) => - classItem === MARK_ICON.success || classItem === MARK_ICON.error - ? this.toastIcon.classList.remove(classItem) - : '', - ); + Object.keys(MARK_ICON).forEach((value) => { + CommonView.removeClassElement(value, this.toastIcon); + }); // Init content toast this.toast.classList.add( @@ -81,6 +77,12 @@ export default class CommonView { this.toastBtn.textContent = btnContent; } + static removeClassElement(classEl, el) { + if (el.classList.contains(classEl)) { + el.classList.remove(classEl); + } + } + /** * Add event listener for toast */ diff --git a/javascript-practice/src/js/views/homeView.js b/javascript-practice/src/js/views/homeView.js index 08f7637..0e585de 100644 --- a/javascript-practice/src/js/views/homeView.js +++ b/javascript-practice/src/js/views/homeView.js @@ -23,13 +23,17 @@ export default class HomeView extends CommonView { */ handlerTabsTransfer() { this.tabs.forEach((tab, index) => { - tab.addEventListener('click', (e) => { + tab.addEventListener('click', () => { this.removeActiveTab(); tab.classList.add('active'); const line = document.querySelector('.app__line'); - line.style.width = `${e.target.offsetWidth}px`; - line.style.left = `${e.target.offsetLeft}px`; + + if (line.classList.contains('left')) { + HomeView.replaceClassElement('left', 'right', line); + } else { + HomeView.replaceClassElement('right', 'left', line); + } this.allContent.forEach((content) => { content.classList.remove('active'); @@ -39,6 +43,11 @@ export default class HomeView extends CommonView { }); } + static replaceClassElement(oldEl, newEl, el) { + el.classList.remove(oldEl); + el.classList.add(newEl); + } + addCommonEventPage() { // Add event close dialog when click outside this.dialogs.forEach((dialog) => { diff --git a/javascript-practice/src/pages/index.html b/javascript-practice/src/pages/index.html index 125e10f..840adc0 100644 --- a/javascript-practice/src/pages/index.html +++ b/javascript-practice/src/pages/index.html @@ -299,7 +299,7 @@
-
+
diff --git a/javascript-practice/src/styles/pages/_index.scss b/javascript-practice/src/styles/pages/_index.scss index 868a1ad..0605974 100644 --- a/javascript-practice/src/styles/pages/_index.scss +++ b/javascript-practice/src/styles/pages/_index.scss @@ -109,12 +109,20 @@ &__line { position: absolute; top: 66px; - left: 150px; - width: 115px; height: 2px; background-color: $primary-color; border-radius: 10px; transition: all 0.3s ease-in-out; + + &.left { + left: 152px; + width: 116px; + } + + &.right { + left: 272px; + width: 200px; + } } }