Skip to content

Commit

Permalink
Реализует фильтрацию, создание и удаление точек маршрута
Browse files Browse the repository at this point in the history
  • Loading branch information
DanilinaMariya committed Sep 30, 2024
1 parent cbfdee4 commit 1e9ba53
Show file tree
Hide file tree
Showing 18 changed files with 475 additions and 109 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"dependencies": {
"dayjs": "1.11.7",
"flatpickr": "4.6.13",
"he": "1.2.0",
"nanoid": "5.0.3"
}
}
2 changes: 1 addition & 1 deletion public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ <h2 class="visually-hidden">Filter events</h2>
</div>
</div>

<button class="trip-main__event-add-btn btn btn--big btn--yellow" type="button">New event</button>
<!--Кнопка-->
</div>
</div>
</header>
Expand Down
14 changes: 13 additions & 1 deletion src/const.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,17 @@ const SortType = {
OFFER: 'offer'
};

const UserAction = {
UPDATE_POINT: 'UPDATE_POINT',
ADD_POINT: 'ADD_POINT',
DELETE_POINT: 'DELETE_POINT',
};

const UpdateType = {
PATCH: 'PATCH',
MINOR: 'MINOR',
MAJOR: 'MAJOR',
};


export {NO_POINT_MESSAGES, FiltersValues, SortType};
export {NO_POINT_MESSAGES, FiltersValues, SortType, UserAction, UpdateType};
38 changes: 32 additions & 6 deletions src/main.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,43 @@
import FiltersView from './view/filters-view.js';
import { render } from './framework/render.js';
import BoardPresenter from './presenter/board-presenter.js';
import FilterPresenter from './presenter/filter-presenter.js';
import PointsModel from './model/points-model.js';
import {generateFilter} from './mock/filter.js';
import FilterModel from './model/filter-model.js';
import NewPointButtonView from './view/new-point-button-view.js';
import { render, RenderPosition } from './framework/render.js';

const header = document.querySelector('.trip-main');
const filtersContainer = header.querySelector('.trip-controls__filters');
const main = document.querySelector('.page-main');
const mainContainer = main.querySelector('.trip-events');
const pointsModel = new PointsModel();
const boardPresenter = new BoardPresenter({boardContainer: mainContainer, pointsModel});
const filters = generateFilter(pointsModel.points);
const filterModel = new FilterModel();

render(new FiltersView({filters}), filtersContainer);
const boardPresenter = new BoardPresenter({
boardContainer: mainContainer,
pointsModel,
filterModel,
onNewPointDestroy: handleNewPointFormClose});

const filterPresenter = new FilterPresenter({
filterContainer: filtersContainer,
filterModel: filterModel,
pointsModel: pointsModel
});

const newPointButtonComponent = new NewPointButtonView({
onClick: handleNewPointButtonClick
});

function handleNewPointFormClose() {
newPointButtonComponent.element.disabled = false;
}

function handleNewPointButtonClick() {
boardPresenter.createPoint();
newPointButtonComponent.element.disabled = true;
}

render(newPointButtonComponent, header, RenderPosition.AFTEREND);

filterPresenter.init();
boardPresenter.init();
15 changes: 15 additions & 0 deletions src/model/filter-model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import Observable from '../framework/observable.js';
import {FiltersValues} from '../const.js';

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

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

setFilter(updateType, filter) {
this.#filter = filter;
this._notify(updateType, filter);
}
}
43 changes: 42 additions & 1 deletion src/model/points-model.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { getRandomPoint } from '../mock/points';
import Observable from '../framework/observable.js';
import { getDestinations } from '../mock/destinations';
import { getOffers } from '../mock/offers';

const POINT_COUNT = 4;

export default class PointsModel {
export default class PointsModel extends Observable{
#allOffers = getOffers();
#allDestinations = getDestinations();
#points = Array.from({length: POINT_COUNT}, getRandomPoint);
Expand All @@ -21,5 +22,45 @@ export default class PointsModel {
return this.#allOffers;
}

updatePoint(updateType, update) {
const index = this.#points.findIndex((point) => point.id === update.id);

if (index === -1) {
throw new Error('Can\'t update unexisting Point');
}

this.#points = [
...this.#points.slice(0, index),
update,
...this.#points.slice(index + 1),
];

this._notify(updateType, update);
}

addPoint(updateType, update) {
this.#points = [
update,
...this.#points,
];

this._notify(updateType, update);
}

deletePoint(updateType, update) {
const index = this.#points.findIndex((point) => point.id === update.id);

if (index === -1) {
throw new Error('Can\'t delete unexisting Point');
}

this.#points = [
...this.#points.slice(0, index),
...this.#points.slice(index + 1),
];

this._notify(updateType);
}

}

Loading

0 comments on commit 1e9ba53

Please sign in to comment.