Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 23 additions & 16 deletions js/filter.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,36 @@
import { renderThumbnails } from './render-thumbnails';
import { debounce } from './util';

const MAX_COUNT_PICTURE = 10;

const filterContainer = document.querySelector('.img-filters');
const filterDefault = 'filter-default';
const filterRandom = 'filter-random';
const filterDiscussed = 'filter-discussed';

const debounceRenderPicture = debounce(renderThumbnails, 500);
let currentFilter = filterDefault;
let pictures = [];

const generateFilter = () => {
const filterData = (newFilter, pictures) => {
let picturesFilter = [];

if (currentFilter === filterDefault) {
picturesFilter = pictures;
} else if (currentFilter === filterRandom) {
picturesFilter = pictures.toSorted(() => Math.random() - 0.5).slice(0, 10);
} else if (currentFilter === filterDiscussed) {
picturesFilter = pictures.toSorted((a, b) => b.comments.length - a.comments.length);
switch (newFilter) {
case filterDefault:
picturesFilter = pictures;
break;
case filterRandom:
picturesFilter = pictures.toSorted(() => Math.random() > 0.5).slice(0, MAX_COUNT_PICTURE);
break;
case filterDiscussed:
picturesFilter = pictures.toSorted((a, b) => b.comments.length - a.comments.length);
break;
default:
throw new Error(`Unknown filter: ${newFilter}`);
}
debounceRenderPicture(picturesFilter);

return picturesFilter;
};

function onFilterClick (evt) {
const onFilterClick = (evt, picturesData) => {
const activButton = document.querySelector('.img-filters__button--active');
const targetButton = evt.target;

Expand All @@ -33,15 +40,15 @@ function onFilterClick (evt) {

activButton.classList.remove('img-filters__button--active');
targetButton.classList.add('img-filters__button--active');
currentFilter = targetButton.id;

generateFilter();
}
const filteredData = filterData(targetButton.id, picturesData);

debounceRenderPicture(filteredData);
};

const initFilter = (picturesData) => {
filterContainer.classList.remove('img-filters--inactive');
filterContainer.addEventListener('click', onFilterClick);
pictures = picturesData;
filterContainer.addEventListener('click', (evt) => onFilterClick(evt, picturesData));
};

export { initFilter };
Expand Down
8 changes: 4 additions & 4 deletions js/form/image-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ function closeUploadModal () {
resetEffect();
resetScale();
uploadForm.reset();
fileChooser.reset();
// При повторной попытке отправить неверный формата файла ошибка не появляется. Подскажи как реализовать.
}

const openUploadModal = () => {
Expand All @@ -61,9 +59,11 @@ function onFileChooserChange () {
uploadFormEffects.forEach((item) => {
item.style.backgroundImage = `url(${URL.createObjectURL(file)})`;
});
}else {
generateErrorMessage();
} else {
fileChooser.value = '';
generateErrorMessage('неверный формат файла!');
return;
// получилось повторно показывать сообщение
}

openUploadModal();
Expand Down
3 changes: 1 addition & 2 deletions js/messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { isEscapeKey } from './util';
const MESSAGE_TIMEOUT = 5000;

const errorLoadTemplate = document.querySelector('#data-error').content;
const errorMessage = document.querySelector('.data-error__title');
const successTemplate = document.querySelector('#success').content.querySelector('.success');
const messageErrorTemplate = document.querySelector('#error').content.querySelector('.error');

Expand All @@ -14,7 +13,7 @@ const generateErrorMessage = (message) => {
const errorLoad = errorLoadTemplate.cloneNode(true);

if (message) {
errorMessage.textContent = message;
errorLoad.querySelector('.data-error__title').textContent = message;
}

document.body.append(errorLoad);
Expand Down
Loading