@@ -9,6 +9,7 @@ import '../../elements/emby-collapse/emby-collapse';
99import './style.scss' ;
1010import template from './filterdialog.template.html' ;
1111import { stopMultiSelect } from '../../components/multiSelect/multiSelect' ;
12+ import { getFilterStatus } from 'components/filterdialog/filterIndicator' ;
1213
1314function merge ( resultItems , queryItems , delimiter ) {
1415 if ( ! queryItems ) {
@@ -115,6 +116,14 @@ function updateFilterControls(context, options) {
115116 */
116117function triggerChange ( instance ) {
117118 stopMultiSelect ( ) ;
119+
120+ const hasFilters = getFilterStatus ( instance . options . query ) ;
121+ if ( hasFilters ) {
122+ enableByClass ( document , 'resetFilters' ) ;
123+ } else {
124+ disableByClass ( document , 'resetFilters' ) ;
125+ }
126+
118127 Events . trigger ( instance , 'filterchange' ) ;
119128}
120129
@@ -145,6 +154,22 @@ function setVisibility(context, options) {
145154 if ( options . mode === 'episodes' ) {
146155 showByClass ( context , 'episodeFilter' ) ;
147156 }
157+
158+ if ( ! options . hasFilters ) {
159+ disableByClass ( context , 'resetFilters' ) ;
160+ }
161+ }
162+
163+ function enableByClass ( context , className ) {
164+ for ( const elem of context . querySelectorAll ( `.${ className } ` ) ) {
165+ elem . disabled = false ;
166+ }
167+ }
168+
169+ function disableByClass ( context , className ) {
170+ for ( const elem of context . querySelectorAll ( `.${ className } ` ) ) {
171+ elem . disabled = true ;
172+ }
148173}
149174
150175function showByClass ( context , className ) {
@@ -254,6 +279,16 @@ class FilterDialog {
254279 for ( const elem of context . querySelectorAll ( '.chkVideoTypeFilter' ) ) {
255280 elem . addEventListener ( 'change' , ( ) => this . onVideoTypeFilterChange ( elem ) ) ;
256281 }
282+
283+ const resetFilters = context . querySelector ( '.resetFilters' ) ;
284+ resetFilters . addEventListener ( 'click' , ( ) => {
285+ for ( const elem of context . querySelectorAll ( '.filterDialogContent input[type="checkbox"]:checked' ) ) {
286+ elem . checked = false ;
287+ }
288+ this . resetQuery ( query ) ;
289+ triggerChange ( this ) ;
290+ } ) ;
291+
257292 const chk3DFilter = context . querySelector ( '.chk3DFilter' ) ;
258293 chk3DFilter . addEventListener ( 'change' , ( ) => {
259294 query . StartIndex = 0 ;
@@ -416,6 +451,26 @@ class FilterDialog {
416451 } ) ;
417452 }
418453
454+ resetQuery ( query ) {
455+ query . IsFavorite = null ;
456+ query . IsHD = null ;
457+ query . Is3D = null ;
458+ query . Is4K = null ;
459+ query . Filters = '' ;
460+ query . SeriesStatus = '' ;
461+ query . OfficialRatings = '' ;
462+ query . Genres = '' ;
463+ query . VideoTypes = '' ;
464+ query . StartIndex = 0 ;
465+ query . HasSpecialFeature = null ;
466+ query . HasSubtitles = null ;
467+ query . HasThemeSong = null ;
468+ query . HasThemeVideo = null ;
469+ query . HasTrailer = null ;
470+ query . Tags = null ;
471+ query . Years = '' ;
472+ }
473+
419474 show ( ) {
420475 return new Promise ( ( resolve ) => {
421476 const dlg = dialogHelper . createDialog ( {
0 commit comments