diff --git a/BudgetMasterServer/src/main/resources/static/js/customSelect.js b/BudgetMasterServer/src/main/resources/static/js/customSelect.js index 0d7a626616b2eeacc1fddc6d061378eba414b36a..61491f8c57cbf3e5d9ecead171f1875dd2904b22 100644 --- a/BudgetMasterServer/src/main/resources/static/js/customSelect.js +++ b/BudgetMasterServer/src/main/resources/static/js/customSelect.js @@ -3,9 +3,17 @@ $(document).ready(function() initCustomSelects(); }); +let allCustomSelects = []; + function initCustomSelects() { - let allCustomSelects = []; + for(let i = 0; i < allCustomSelects.length; i++) + { + let currentCustomSelect = allCustomSelects[i]; + currentCustomSelect.destroy(); + } + + allCustomSelects = []; let selectorCategorySelect = '.category-select-wrapper'; let transactionCategorySelects = document.querySelectorAll(selectorCategorySelect); @@ -91,15 +99,18 @@ class CustomSelect { let self = this; let customSelectTrigger = document.querySelector(this.selector); - customSelectTrigger.addEventListener('click', function() + + this.listenerClick = function() { if(!self.isDisabled()) { self.open(); } - }); + }; + + customSelectTrigger.addEventListener('click', this.listenerClick); - customSelectTrigger.addEventListener("keydown", function(event) + this.listenerKeyDown = function(event) { if(event.key === "Escape") { @@ -107,22 +118,44 @@ class CustomSelect } self.jumpToItemByFirstLetter(event.key); - }); + }; + + customSelectTrigger.addEventListener("keydown", this.listenerKeyDown); + + this.listenerMouseDown = function(event) + { + self.confirmItem(this); + event.stopPropagation(); + }; for(const option of document.querySelectorAll(this.selector + ' .custom-select-option')) { - option.addEventListener('mousedown', function(event) - { - self.confirmItem(this); - event.stopPropagation(); - }) + option.addEventListener('mousedown', this.listenerMouseDown); } this.resetSelectedItemId() - customSelectTrigger.addEventListener('focusout', () => { - this.close(); - }); + this.listenerFocusOut = function() { + self.close(); + }; + + customSelectTrigger.addEventListener('focusout', this.listenerFocusOut); + } + + destroy() + { + let customSelectTrigger = document.querySelector(this.selector); + + customSelectTrigger.removeEventListener('click', this.listenerClick); + + customSelectTrigger.removeEventListener("keydown", this.listenerKeyDown); + + for(const option of document.querySelectorAll(this.selector + ' .custom-select-option')) + { + option.removeEventListener('mousedown', this.listenerMouseDown); + } + + customSelectTrigger.removeEventListener('focusout', this.listenerFocusOut); } isDisabled() diff --git a/BudgetMasterServer/src/main/resources/static/js/transactionImport.js b/BudgetMasterServer/src/main/resources/static/js/transactionImport.js index f18ff642052e31d32a1dc1b2fa160e24954a31ea..cc29ec50a45955a9bab869cdd3c37c20e36623af 100644 --- a/BudgetMasterServer/src/main/resources/static/js/transactionImport.js +++ b/BudgetMasterServer/src/main/resources/static/js/transactionImport.js @@ -40,6 +40,13 @@ function initCsvTransactions() { initCsvTransactionForms(); initCsvTransactionButtons(); + + initCustomSelects(); + + M.FloatingActionButton.init(document.querySelectorAll('.edit-transaction-button'), { + direction: 'left', + hoverEnabled: false + }); } function initCsvTransactionForms() diff --git a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/CsvImportTest.java b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/CsvImportTest.java index e5dcff091fbe6312e401aa6e760282d8a031800e..70ea4e3805482a30c3f1f1baa57ee5fd57081cc3 100644 --- a/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/CsvImportTest.java +++ b/BudgetMasterServer/src/test/java/de/deadlocker8/budgetmaster/integration/selenium/CsvImportTest.java @@ -371,6 +371,14 @@ class CsvImportTest extends SeleniumTestBase wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className("transaction-import-row-skipped"))); assertThat(driver.findElements(By.className("transaction-import-row-skipped"))).isEmpty(); + + // check if category select is working + rows = driver.findElements(By.className("transaction-import-row")); + final WebElement categorySelect = rows.get(0).findElement(By.cssSelector(".category-select-wrapper .custom-select")); + categorySelect.click(); + rows.get(0).findElements(By.cssSelector(".category-select-wrapper .custom-select-item-name")).stream() + .filter(webElement -> webElement.getText().equals("sdfdsf")) + .findFirst().orElseThrow().click(); } @Test