Explorar el Código

Merge branch 'fast-filter' into develop

thatmattlove hace 4 años
padre
commit
dc3040550d

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
netbox/project-static/dist/netbox.js


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 0
netbox/project-static/dist/netbox.js.map


+ 16 - 6
netbox/project-static/src/search.ts

@@ -107,6 +107,9 @@ function initTableFilter(): void {
       // Create a regex pattern from the input search text to match against.
       // Create a regex pattern from the input search text to match against.
       const filter = new RegExp(target.value.toLowerCase().trim());
       const filter = new RegExp(target.value.toLowerCase().trim());
 
 
+      // List of which rows which match the query
+      const matchedRows: Array<HTMLTableRowElement> = [];
+
       for (const row of rows) {
       for (const row of rows) {
         // Find the row's checkbox and deselect it, so that it is not accidentally included in form
         // Find the row's checkbox and deselect it, so that it is not accidentally included in form
         // submissions.
         // submissions.
@@ -114,19 +117,26 @@ function initTableFilter(): void {
         if (checkBox !== null) {
         if (checkBox !== null) {
           checkBox.checked = false;
           checkBox.checked = false;
         }
         }
+
         // Iterate through each row's cell values
         // Iterate through each row's cell values
         for (const value of getRowValues(row)) {
         for (const value of getRowValues(row)) {
           if (filter.test(value.toLowerCase())) {
           if (filter.test(value.toLowerCase())) {
-            // If this row matches the search pattern, but is already hidden, unhide it and stop
-            // iterating through the rest of the cells.
-            row.classList.remove('d-none');
+            // If this row matches the search pattern, add it to the list.
+            matchedRows.push(row);
             break;
             break;
-          } else {
-            // If none of the cells in this row match the search pattern, hide the row.
-            row.classList.add('d-none');
           }
           }
         }
         }
       }
       }
+
+      // Iterate the rows again to set visibility.
+      // This results in a single reflow instead of one for each row.
+      for (const row of rows) {
+        if (matchedRows.indexOf(row) >= 0) {
+          row.classList.remove('d-none');
+        } else {
+          row.classList.add('d-none');
+        }
+      }
     }
     }
     input.addEventListener('keyup', debounce(handleInput, 300));
     input.addEventListener('keyup', debounce(handleInput, 300));
   }
   }

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio