@@ -222,52 +222,63 @@ class CMSFilter {
222222 }
223223
224224 SortItems ( ) {
225- if ( ! this . sortOptions ) return ;
225+ if ( ! this . sortOptions ) return ;
226226
227227 let [ key , order ] = this . sortOptions . value . split ( '-' ) ;
228+ this . filteredItems = this . filteredItems . filter ( item => ! item . hasAttribute ( 'wt-renderstatic-element' ) ) ;
228229 this . filteredItems . sort ( ( a , b ) => {
229230 let aValue = a . dataset [ key ] ;
230231 let bValue = b . dataset [ key ] ;
231232
233+ // Handle null or undefined values
234+ if ( aValue === undefined || aValue === null ) aValue = '' ;
235+ if ( bValue === undefined || bValue === null ) bValue = '' ;
236+
237+ // Handle numeric values
232238 if ( ! isNaN ( aValue ) && ! isNaN ( bValue ) ) {
233239 aValue = parseFloat ( aValue ) ;
234240 bValue = parseFloat ( bValue ) ;
235241 }
236- else if ( Date . parse ( aValue ) && Date . parse ( bValue ) ) {
242+ // Handle date values
243+ else if ( ! isNaN ( Date . parse ( aValue ) ) && ! isNaN ( Date . parse ( bValue ) ) ) {
237244 aValue = new Date ( aValue ) ;
238245 bValue = new Date ( bValue ) ;
239246 }
247+ // Handle text values
248+ else {
249+ aValue = aValue . toString ( ) . toLowerCase ( ) ;
250+ bValue = bValue . toString ( ) . toLowerCase ( ) ;
251+ }
240252
241253 if ( order === 'asc' ) {
242- return aValue > bValue ? 1 : - 1 ;
254+ return aValue > bValue ? 1 : aValue < bValue ? - 1 : 0 ;
243255 } else {
244- return aValue < bValue ? 1 : - 1 ;
256+ return aValue < bValue ? 1 : aValue > bValue ? - 1 : 0 ;
245257 }
246258 } ) ;
247- }
259+ }
248260
249261 ApplyFilters ( ) {
250262 const filters = this . GetFilters ( ) ;
251- this . currentPage = 1 ; //Reset pagination to first page
263+ this . currentPage = 1 ; // Reset pagination to first page
252264 this . filteredItems = this . allItems . filter ( item => {
253265 return Object . keys ( filters ) . every ( category => {
254266 const values = [ ...filters [ category ] ] ;
255- if ( values . length === 0 ) return values . length === 0 ;
267+ if ( values . length === 0 ) return true ;
256268
257269 let matchingText = item . querySelector ( `[wt-cmsfilter-category="${ category } "]` ) ?. innerText . toLowerCase ( ) || '' ;
258270 matchingText = matchingText . replace ( / (?: & n b s p ; | \s ) + / gi, ' ' ) ;
259271
260272 if ( category === '*' ) {
261- return values . length === 0 ||
262- values . some ( value => matchingText . includes ( value . toLowerCase ( ) ) ) ||
273+ return values . some ( value => matchingText . includes ( value . toLowerCase ( ) ) ) ||
263274 Object . values ( item . dataset ) . some ( dataValue =>
264275 values . some ( value => dataValue . toLowerCase ( ) . includes ( value . toLowerCase ( ) ) )
265276 ) ;
266277 } else {
267- return values . length === 0 || values . some ( value => {
278+ return values . some ( value => {
268279 if ( typeof value === 'object' ) {
269280 const itemValue = parseFloat ( item . dataset [ category ] ) ;
270- if ( value . from !== null && value . to !== null ) {
281+ if ( value . from !== null && value . to !== null ) {
271282 return itemValue >= value . from && itemValue <= value . to ;
272283 } else if ( value . from !== null && value . to == null ) {
273284 return itemValue >= value . from ;
0 commit comments