11import { renderThumbnails } from './render-thumbnails' ;
22import { debounce } from './util' ;
33
4+ const MAX_COUNT_PICTURE = 10 ;
5+
46const filterContainer = document . querySelector ( '.img-filters' ) ;
57const filterDefault = 'filter-default' ;
68const filterRandom = 'filter-random' ;
79const filterDiscussed = 'filter-discussed' ;
810
911const debounceRenderPicture = debounce ( renderThumbnails , 500 ) ;
10- let currentFilter = filterDefault ;
11- let pictures = [ ] ;
1212
13- const generateFilter = ( ) => {
13+ const filterData = ( newFilter , pictures ) => {
1414 let picturesFilter = [ ] ;
1515
16- if ( currentFilter === filterDefault ) {
17- picturesFilter = pictures ;
18- } else if ( currentFilter === filterRandom ) {
19- picturesFilter = pictures . toSorted ( ( ) => Math . random ( ) - 0.5 ) . slice ( 0 , 10 ) ;
20- } else if ( currentFilter === filterDiscussed ) {
21- picturesFilter = pictures . toSorted ( ( a , b ) => b . comments . length - a . comments . length ) ;
16+ switch ( newFilter ) {
17+ case filterDefault :
18+ picturesFilter = pictures ;
19+ break ;
20+ case filterRandom :
21+ picturesFilter = pictures . toSorted ( ( ) => Math . random ( ) > 0.5 ) . slice ( 0 , MAX_COUNT_PICTURE ) ;
22+ break ;
23+ case filterDiscussed :
24+ picturesFilter = pictures . toSorted ( ( a , b ) => b . comments . length - a . comments . length ) ;
25+ break ;
26+ default :
27+ throw new Error ( `Unknown filter: ${ newFilter } ` ) ;
2228 }
23- debounceRenderPicture ( picturesFilter ) ;
29+
30+ return picturesFilter ;
2431} ;
2532
26- function onFilterClick ( evt ) {
33+ const onFilterClick = ( evt , picturesData ) => {
2734 const activButton = document . querySelector ( '.img-filters__button--active' ) ;
2835 const targetButton = evt . target ;
2936
@@ -33,15 +40,15 @@ function onFilterClick (evt) {
3340
3441 activButton . classList . remove ( 'img-filters__button--active' ) ;
3542 targetButton . classList . add ( 'img-filters__button--active' ) ;
36- currentFilter = targetButton . id ;
3743
38- generateFilter ( ) ;
39- }
44+ const filteredData = filterData ( targetButton . id , picturesData ) ;
45+
46+ debounceRenderPicture ( filteredData ) ;
47+ } ;
4048
4149const initFilter = ( picturesData ) => {
4250 filterContainer . classList . remove ( 'img-filters--inactive' ) ;
43- filterContainer . addEventListener ( 'click' , onFilterClick ) ;
44- pictures = picturesData ;
51+ filterContainer . addEventListener ( 'click' , ( evt ) => onFilterClick ( evt , picturesData ) ) ;
4552} ;
4653
4754export { initFilter } ;
0 commit comments