Skip to content

Commit

Permalink
Защита 2
Browse files Browse the repository at this point in the history
  • Loading branch information
Jey-Key30 committed Jun 18, 2024
1 parent 8d79f6c commit 5483c23
Show file tree
Hide file tree
Showing 10 changed files with 113 additions and 192 deletions.
9 changes: 1 addition & 8 deletions src/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@ import DestinationModel from './model/destination-model.js';
import OfferModel from './model/offers-model.js';
import PointModel from './model/point-model.js';
import FilterModel from './model/filter-model.js';
// import FilterPresenter from './presenter/filter-presenter.js';

import PointApiService from '../src/service/point-api-service.js';

const AUTHORIZATION = 'Basic 09SVykjhUhHbMdigAaa';
const AUTHORIZATION = 'Basic 09SVykjhUhHbMdigAaasa';
const END_POINT = 'https://21.objects.htmlacademy.pro/big-trip';

const bodyElement = document.querySelector('body');
Expand All @@ -31,12 +30,6 @@ const newPointButtonPresenter = new NewPointButtonPresenter({
container: tripInfoElement
});

// const filterPresenter = new FilterPresenter({
// container: bodyElement.querySelector('.trip-control__filters'),
// pointsModel,
// filterModel
// });

const boardPresenter = new BoardPresenter({
tripContainer: bodyElement,
destinationsModel,
Expand Down
13 changes: 2 additions & 11 deletions src/model/filter-model.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,10 @@
import { FilterType } from '../const.js';
import Observable from '../framework/observable.js';
// import {FilterType} from '../mock/const.js';

export const FilterType = {
EVERYTHING: 'EVERYTHING',
FUTURE: 'FUTURE',
PRESENT: 'PRESENT',
PAST: 'PAST'
};

export default class FilterModel extends Observable {
#filter = FilterType.EVERYTHING;

get() {
return this.#filter;
}
get = () => this.#filter;

set(updateType, update) {
this.#filter = update;
Expand Down
68 changes: 27 additions & 41 deletions src/presenter/board-presenter.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import {render, remove, RenderPosition} from '../framework/render.js';
import EventListView from '../view/event-list-view.js';
import SortView from '../view/sort-view.js';
import PointPresenter from './point-presenter.js';
import FilterView from '../view/filter-view.js';
import TripInfoView from '../view/trip-info-view.js';
import {sortPointDay, sortPointPrice, sortPointTime} from '../utils.js';
import {FilterType, SortType, UpdateType, UserAction, TimeLimit} from '../const.js';
// import {FilterType} from '../model/filter-model.js';
import FilterPresenter from '../presenter/filter-presenter.js';
import { filter, sort} from '../utils.js';
import NewPointPresenter from '../presenter/new-point-presenter.js';
import MessageView from '../view/message-view.js';
import UiBlocker from '../framework/ui-blocker/ui-blocker.js';
Expand All @@ -30,12 +30,11 @@ export default class BoardPresenter {
#newPointButtonPresenter = null;

#currentSortType = SortType.DAY;
#currentFilteType = FilterType.EVERYTHING;
#isCreating = false;

#sortComponent = null;
#tripInfoComponent = null;
#filterComponent = null;
#filterPresenter = null;
#loadingComponent = new LoadingView();
#noConnectionComponent = new NoConnectionView();
#pointsListComponent = new EventListView();
Expand Down Expand Up @@ -71,10 +70,8 @@ export default class BoardPresenter {
}

get points() {
const points = this.#pointsModel.points;
// const filteredPoints = filter[this.#currentFilteType](points);
// return filteredPoints.sort(sortPointDay);
return points;
const filteredPoints = filter[this.#filterModel.get()](this.#pointsModel.points);
return sort[this.#currentSortType](filteredPoints);
}

init(){
Expand All @@ -90,6 +87,10 @@ export default class BoardPresenter {
this.#currentSortType = SortType.DAY;
this.#filterModel.set(UpdateType.MAJOR, FilterType.EVERYTHING);
this.#newPointButtonPresenter.disableButton();

if (this.#messageComponent) {
remove(this.#messageComponent);
}
this.#newPointPresenter.init();
};

Expand All @@ -107,8 +108,6 @@ export default class BoardPresenter {
};

#renderPoints = () => {
render(this.#pointsListComponent, this.#tripEventsElement);

this.points.forEach((point) => {
this.#renderPoint(point);
});
Expand All @@ -128,6 +127,15 @@ export default class BoardPresenter {
render(this.#sortComponent, this.#tripEventsElement);
};

#renderFilters = () => {
this.#filterPresenter = new FilterPresenter(
this.#tripFliterElement,
this.#filterModel
);

this.#filterPresenter .init();
};

#renderMessage = () => {
this.#messageComponent = new MessageView({
filterType: this.#filterModel.get()
Expand All @@ -140,17 +148,8 @@ export default class BoardPresenter {
render(this.#loadingComponent, this.#tripEventsElement);
};

#renderFilters = () => {
this.#filterComponent = new FilterView({
filters: FilterType,
onFilterTypeChange: this.#filterTypeChangeHandler
});

render(this.#filterComponent, this.#tripFliterElement);
};

#renderPointsList = () => {
render(this.#pointsListComponent, this.#tripEventsElement);
render(this.#pointsListComponent, this.#tripEventsElement, RenderPosition.AFTEREND);
};

#renderTripInfo = () => {
Expand All @@ -162,23 +161,26 @@ export default class BoardPresenter {
});

if (this.#tripInfoComponent.element !== null)
{render(this.#tripInfoComponent, this.#tripInfoElement, RenderPosition.AFTERBEGIN);}
{
render(this.#tripInfoComponent, this.#tripInfoElement, RenderPosition.AFTERBEGIN);
}
};

#renderBoard = () => {
if (this.points.length === 0 && !this.#isLoading) {
if (this.points.length === 0 && !this.#isCreating) {
this.#renderMessage();
return;
}
else {
this.#renderPointsList();
}

if (this.#isLoading) {
this.#renderLoading();
return;
}

this.#renderTripInfo();
this.#renderSort();
this.#renderPointsList();
this.#renderPoints();
};

Expand Down Expand Up @@ -257,16 +259,6 @@ export default class BoardPresenter {
}
};

#filterTypeChangeHandler = (filterType) => {
if (this.#currentFilteType === filterType) {
return;
}

// this.#filterPoints(filterType);
this.#clearPoints();
this.#renderPoints();
};

#sortTypeChangeHandler = (sortType) => {
if (this.#currentSortType === sortType) {
return;
Expand All @@ -281,12 +273,8 @@ export default class BoardPresenter {
this.#newPointPresenter.destroy();
};

// #filterPoints = (filterType) => {
// filter[filterType](this.#pointsModel.points);
// console.log(filter[filterType](this.#pointsModel.points));
// };

#sortPoints = (sortType) => {
this.#currentSortType = sortType;
switch (sortType) {
case SortType.PRICE:
this.points.sort(sortPointPrice);
Expand All @@ -297,8 +285,6 @@ export default class BoardPresenter {
default:
this.points.sort(sortPointDay);
}

this.#currentSortType = sortType;
};

#newPointDestroyHandler = ({isCanceled}) => {
Expand Down
93 changes: 22 additions & 71 deletions src/presenter/filter-presenter.js
Original file line number Diff line number Diff line change
@@ -1,89 +1,40 @@
import {remove, render, replace} from '../framework/render.js';
import { render, replace, remove } from '../framework/render.js';
import FilterView from '../view/filter-view.js';
import {UpdateType} from '../mock/const.js';
// import {FilterType} from '../model/filter-model.js';
import {filter} from '../utils.js';
import { UpdateType } from '../const.js';

export default class FilterPresenter{
#container = null;
#filterComponent = null;

#pointsModel = null;
export default class FilterPresenter {
#filterContainer = null;
#filterModel = null;
#filterComponent = null;

#currentFilter = null;

constructor({container, pointsModel, filterModel}) {
this.#container = container;
this.#pointsModel = pointsModel;
constructor(filterContainer, filterModel) {
this.#filterContainer = filterContainer;
this.#filterModel = filterModel;

this.#pointsModel.addObserver(this.#modelEventHandler);
this.#filterModel.addObserver(this.#modelEventHandler);
}

get filters() {
const points = this.#pointsModel.get();

return Object.entries(filter)
.map(([filterType, filterPoints]) => ({
type: filterType,
isChecked: filterType === this.#currentFilter,
isDisable: filterPoints(points.length) === 0
}));
init() {
this.#renderFilters();
}

// get filters() {
// const points = this.#pointsModel.points;

// return [
// {
// type: FilterType.EVERYTHING,
// name: 'EVERYTHING',
// count: filter[FilterType.EVERYTHING](points).length,
// },
// {
// type: FilterType.PAST,
// name: 'PAST',
// count: filter[FilterType.PAST](points).length,
// },
// {
// type: FilterType.FUTURE,
// name: 'FUTURE',
// count: filter[FilterType.FUTURE](points).length,
// }
// ];
// }

init(){
this.#currentFilter = this.#filterModel.get();
remove() {
remove(this.#filterComponent);
}

const filters = this.filters;
const prevFilterComponent = this.#filterComponent;
#renderFilters = () => {
const previousFilterComponent = this.#filterComponent;

this.#filterComponent = new FilterView({
items: filters,
onItemChange: this.#filterTypeChangeHandler
});
this.#filterComponent = new FilterView(
this.#filterModel.get(),
this.#filterChangeHandler
);

if (prevFilterComponent === null) {
render(this.#filterComponent, this.#container);
if (!previousFilterComponent) {
render(this.#filterComponent, this.#filterContainer);
return;
}

replace(this.#filterComponent, prevFilterComponent);
remove(prevFilterComponent);
}

#filterTypeChangeHandler = (filterType) => {
// if (filterType === this.#filterModel.filter) {
// return;
// }

this.#filterModel.set(UpdateType.MAJOR, filterType);
replace(this.#filterComponent, previousFilterComponent);
};

#modelEventHandler = () => {
this.init();
};
#filterChangeHandler = (filterType) => this.#filterModel.set(UpdateType.MAJOR, filterType);
}
9 changes: 0 additions & 9 deletions src/presenter/new-point-presenter.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,6 @@ export default class NewPointPresenter {
}
};

// setDeleting = () => {
// this.#pointNewComponent.updateElement({
// isDeleting: true,
// isDisabled: true,
// });
// };

setAborting = () => {
if (this.#mode === MODE.DEFAULT) {
this.#pointNewComponent.shake();
Expand Down Expand Up @@ -88,8 +81,6 @@ export default class NewPointPresenter {
UpdateType.MINOR,
point,
);

// this.destroy({isCanceled: false});
};

#resetClickHandler = () => {
Expand Down
28 changes: 20 additions & 8 deletions src/utils.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import dayjs from 'dayjs';
import {DAY_FOMAT, DATE_FORMAT, TIME_FORMAT,
FULL_TIME_FOMAT, MILLISECONDS_IN_DAY, MILLISECONDS_IN_HOUR,
SLASH_TIME_FOMAT, FilterType} from './const';
SLASH_TIME_FOMAT, FilterType, SortType} from './const';

// eslint-disable-next-line no-undef
const duration = require('dayjs/plugin/duration');
Expand Down Expand Up @@ -54,13 +54,6 @@ export const isBigDifference = (pointA, pointB) =>
|| pointA.basePrice !== pointB.basePrice
|| dayjs(pointA.dateTo).diff(dayjs(pointA.dateFrom)) !== dayjs(pointB.dateTo).diff(dayjs(pointB.dateFrom));

export const filter = {
[FilterType.EVERYTHING]: (points) => points.filter((point) => point),
[FilterType.FUTURE]:(points) => points.filter((point) => !ispointExpired(point.dateFrom) && !ispointExpired(point.dateTo)),
[FilterType.PRESENT]:(points) => points.filter((point) => ispointExpired(point.dateFrom) && !ispointExpired(point.dateTo)),
[FilterType.PAST]: (points) => points.filter((point) => ispointExpired(point.dateFrom) && ispointExpired(point.dateTo))
};

export const adaptToClient = (point) => {
const adaptedPoint = {
...point,
Expand Down Expand Up @@ -94,3 +87,22 @@ export const adaptToServer = (point) => {

return adaptedPoint;
};

export const filterByFuture = (event) => dayjs().isBefore(event.dateFrom);

export const filterByPresent = (event) => dayjs().isAfter(event.dateFrom) && dayjs().isBefore(event.dateTo);

export const filterByPast = (event) => dayjs().isAfter(event.dateTo);

export const filter = {
[FilterType.EVERYTHING]: (points) => points.filter((point) => point),
[FilterType.FUTURE]: (points) => points.filter((point) => filterByFuture(point)),
[FilterType.PRESENT]: (points) => points.filter((point) => filterByPresent(point)),
[FilterType.PAST]: (points) => points.filter((point) => filterByPast(point)),
};

export const sort = {
[SortType.DAY]: (array) => array.sort(sortPointDay),
[SortType.TIME]: (array) => array.sort(sortPointTime),
[SortType.PRICE]: (array) => array.sort(sortPointPrice)
};
Loading

0 comments on commit 5483c23

Please sign in to comment.