Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
f53fa1c
Использование паттерна Наблюдатель
katrinn01234 Apr 28, 2025
8618b36
Подготовка рендер-функции к модели
katrinn01234 Apr 28, 2025
daab380
Доработка модели и датабиндинг
katrinn01234 Apr 28, 2025
0e1fd7d
Замыкание датабиндинга
katrinn01234 Apr 28, 2025
ccf454b
Доработка рендеринга доски
katrinn01234 Apr 28, 2025
11115b9
Реализация удаления и оптимизация сохранения
katrinn01234 Apr 29, 2025
427b1a9
Добавление модели для фильтра
katrinn01234 Apr 29, 2025
0c43fb9
Рефакторинг фильтрации
katrinn01234 Apr 29, 2025
44966de
Добавление презентера фильтров
katrinn01234 Apr 29, 2025
74605a1
Связка модели фильтров и презентера
katrinn01234 Apr 29, 2025
e2b31a5
Реализация изменения компонента-заглушки
katrinn01234 Apr 29, 2025
cab5464
Реализация добавления новой точки маршрута
katrinn01234 Apr 29, 2025
6d0c459
Реализация безопасного ввода
katrinn01234 Apr 29, 2025
3c13cd5
исправление ошибки при открытии формы редактирования
katrinn01234 Apr 30, 2025
c161b7a
Добавление валидации полей при сохранении новой точки или редактирования
katrinn01234 May 1, 2025
28298b0
Исправление ошибок в работе с датами
katrinn01234 May 2, 2025
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
4 changes: 2 additions & 2 deletions package-lock.json

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

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
},
"dependencies": {
"dayjs": "1.11.7",
"flatpickr": "4.6.13"
"flatpickr": "4.6.13",
"he": "1.2.0"
}
}
2 changes: 0 additions & 2 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ <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 @@ -43,4 +43,16 @@ const SortType = {
OFFERS: 'offers'
};

export { DESCRIPTIONS_DESTINATION, NAME_DESTINATION, MAX_COUNT, EVENT_TYPES, FilterType, SortType };
const UserAction = {
UPDATE_POINT: 'UPDATE_POINT',
ADD_POINT: 'ADD_POINT',
DELETE_POINT: 'DELETE_POINT',
};

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

export { DESCRIPTIONS_DESTINATION, NAME_DESTINATION, MAX_COUNT, EVENT_TYPES, FilterType, SortType, UserAction, UpdateType };
45 changes: 32 additions & 13 deletions src/main.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,38 @@
import { render } from './framework/render.js';
import FiltersView from './view/filters-view.js';
import FilterPresenter from './presenter/filter-presenter.js';
import BoardPresenter from './presenter/board-presenter.js';
import PointsModel from './model/points-model.js';
import { generateFilter } from './mock/filter.js';
import FilterModel from './model/filter-model.js';
import AddNewPointButtonView from './view/add-new-point-button-view.js';
import { render } from './framework/render.js';

const initApp = () => {
const filtersContainer = document.querySelector('.trip-controls__filters');
const eventsContainer = document.querySelector('.trip-events');
const tripMainContainer = document.querySelector('.trip-main');
const pointsModel = new PointsModel();
const filterModel = new FilterModel();

const boardPresenter = new BoardPresenter({
boardContainer: eventsContainer,
pointsModel,
filterModel
});

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

const filtersContainer = document.querySelector('.trip-controls__filters');
const eventsContainer = document.querySelector('.trip-events');
const pointsModel = new PointsModel();
const boardPresenter = new BoardPresenter({
boardContainer: eventsContainer,
pointsModel,
});
const addNewPointButtonComponent = new AddNewPointButtonView({
onClick: () => boardPresenter.createPoint()
});

const filters = generateFilter(pointsModel.points);
boardPresenter.setAddNewPointButton(addNewPointButtonComponent);

render(new FiltersView({ filters }), filtersContainer);
render(addNewPointButtonComponent, tripMainContainer);
filterPresenter.init();
boardPresenter.init();
};

boardPresenter.init();
initApp();
12 changes: 0 additions & 12 deletions src/mock/filter.js

This file was deleted.

4 changes: 2 additions & 2 deletions src/mock/points.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ const mockPoints = [
{
id: 5,
basePrice: 1500,
dateFrom: '2025-04-04T16:00:56.845Z',
dateTo: '2025-04-04T18:00:56.845Z',
dateFrom: '2025-04-29T16:00:56.845Z',
dateTo: '2025-04-29T18:00:56.845Z',
destination: 555,
isFavorite: true,
offers: [51, 52, 53],
Expand Down
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 { FilterType } from '../const.js';

export default class FilterModel extends Observable {
#filter = FilterType.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 Observable from '../framework/observable.js';
import { getRandomMockPoints } from '../mock/points.js';
import { mockDestinations } from '../mock/destinations.js';
import { mockOffers } from '../mock/offers.js';

const POINTS_COUNT = 5;

export default class PointsModel {
export default class PointsModel extends Observable {
#destinations = mockDestinations;
#offers = mockOffers;
#points = this.generateUniquePoints();
Expand Down Expand Up @@ -43,4 +44,44 @@ export default class PointsModel {
get points() {
return this.#points;
}

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