@@ -6,60 +6,59 @@ export default function handleListSorting() {
66 sort_as_int : false ,
77 } ;
88
9+ const toggleButton = document . querySelector ( '.js-toggle-sorting-menu' ) ;
10+ const sortingMenu = document . querySelector ( '.js-sorting-menu' ) ;
11+ const unitsContainer = document . querySelector ( '.units' ) ;
12+
13+ if ( ! toggleButton || ! sortingMenu || ! unitsContainer ) {
14+ return ;
15+ }
16+
917 // Toggle dropdown button
10- document . querySelectorAll ( '.toolbar-sorting-toggle' ) . forEach ( ( toggle ) => {
11- toggle . addEventListener ( 'click' , ( evt ) => {
12- evt . preventDefault ( ) ;
13- document . querySelector ( '.toolbar-sorting-menu' ) . classList . toggle ( 'u-hidden' ) ;
14- } ) ;
18+ toggleButton . addEventListener ( 'click' , ( ) => {
19+ sortingMenu . classList . toggle ( 'u-hidden' ) ;
1520 } ) ;
1621
1722 // "Click outside" to close dropdown
1823 document . addEventListener ( 'click' , ( event ) => {
19- const toggleButton = document . querySelector ( '.toolbar-sorting-toggle' ) ;
20- const dropdown = document . querySelector ( '.toolbar-sorting-menu' ) ;
21-
22- if ( ! dropdown || ! toggleButton ) {
23- return ;
24- }
25-
26- if (
27- ! dropdown . contains ( event . target ) &&
28- ! toggleButton . contains ( event . target ) &&
29- ! dropdown . classList . contains ( 'u-hidden' )
30- ) {
31- dropdown . classList . add ( 'u-hidden' ) ;
24+ const isClickInside = sortingMenu . contains ( event . target ) || toggleButton . contains ( event . target ) ;
25+ if ( ! isClickInside && ! sortingMenu . classList . contains ( 'u-hidden' ) ) {
26+ sortingMenu . classList . add ( 'u-hidden' ) ;
3227 }
3328 } ) ;
3429
3530 // Inner dropdown sorting behavior
36- document . querySelectorAll ( '.toolbar-sorting-menu span' ) . forEach ( ( span ) => {
31+ sortingMenu . querySelectorAll ( 'span' ) . forEach ( ( span ) => {
3732 span . addEventListener ( 'click' , function ( ) {
38- const menu = document . querySelector ( '.toolbar-sorting-menu' ) ;
39- menu . classList . toggle ( 'u-hidden' ) ;
33+ sortingMenu . classList . add ( 'u-hidden' ) ;
4034
41- if ( this . classList . contains ( 'active' ) ) {
35+ // Skip if the clicked sort is already active
36+ if ( span . classList . contains ( 'active' ) ) {
4237 return ;
4338 }
4439
45- document
46- . querySelectorAll ( '.toolbar-sorting-menu span' )
47- . forEach ( ( s ) => s . classList . remove ( 'active' ) ) ;
48- this . classList . add ( 'active' ) ;
49- const parentLi = this . closest ( 'li' ) ;
40+ // Remove 'active' class from all spans and add it to the clicked span
41+ sortingMenu . querySelectorAll ( 'span' ) . forEach ( ( s ) => {
42+ s . classList . remove ( 'active' ) ;
43+ } ) ;
44+ span . classList . add ( 'active' ) ;
45+
46+ // Update state with new sorting parameters
47+ const parentLi = span . closest ( 'li' ) ;
5048 state . sort_par = parentLi . dataset . entity ;
5149 state . sort_as_int = Boolean ( parentLi . dataset . sortAsInt ) ;
52- state . sort_direction = this . classList . contains ( 'up' ) ? 1 : - 1 ;
50+ state . sort_direction = span . classList . contains ( 'up' ) ? 1 : - 1 ;
5351
54- const toggle = document . querySelector ( '.toolbar-sorting-toggle' ) ;
55- toggle . querySelector ( 'b' ) . innerHTML = parentLi . querySelector ( '.name' ) . innerHTML ;
56- const fas = toggle . querySelector ( '.fas' ) ;
57- fas . classList . remove ( 'fa-arrow-up-a-z' , 'fa-arrow-down-a-z' ) ;
58- fas . classList . add ( this . classList . contains ( 'up' ) ? 'fa-arrow-up-a-z' : 'fa-arrow-down-a-z' ) ;
52+ // Update toggle button text and icon
53+ toggleButton . querySelector ( 'b' ) . innerHTML = parentLi . querySelector ( '.name' ) . innerHTML ;
54+ const faIcon = toggleButton . querySelector ( '.fas' ) ;
55+ faIcon . classList . remove ( 'fa-arrow-up-a-z' , 'fa-arrow-down-a-z' ) ;
56+ faIcon . classList . add ( span . classList . contains ( 'up' ) ? 'fa-arrow-up-a-z' : 'fa-arrow-down-a-z' ) ;
5957
60- const units = Array . from ( document . querySelectorAll ( '.units .l-unit' ) ) . sort ( ( a , b ) => {
61- const aAttr = a . getAttribute ( state . sort_par ) ;
62- const bAttr = b . getAttribute ( state . sort_par ) ;
58+ // Sort units and reattach them to the DOM
59+ const units = Array . from ( document . querySelectorAll ( '.js-sortable-unit' ) ) . sort ( ( a , b ) => {
60+ const aAttr = a . getAttribute ( `data-${ state . sort_par } ` ) ;
61+ const bAttr = b . getAttribute ( `data-${ state . sort_par } ` ) ;
6362
6463 if ( state . sort_as_int ) {
6564 const aInt = Number . parseInt ( aAttr ) ;
@@ -70,7 +69,6 @@ export default function handleListSorting() {
7069 return aAttr <= bAttr ? state . sort_direction : state . sort_direction * - 1 ;
7170 } ) ;
7271
73- const unitsContainer = document . querySelector ( '.units' ) ;
7472 units . forEach ( ( unit ) => unitsContainer . appendChild ( unit ) ) ;
7573 } ) ;
7674 } ) ;
0 commit comments