Skip to content

Commit c048adf

Browse files
authored
Merge pull request #11 from katrinn01234/module7-task1
Меняй-удаляй
2 parents ff020c8 + 28298b0 commit c048adf

22 files changed

+900
-197
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
},
3535
"dependencies": {
3636
"dayjs": "1.11.7",
37-
"flatpickr": "4.6.13"
37+
"flatpickr": "4.6.13",
38+
"he": "1.2.0"
3839
}
3940
}

public/index.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ <h2 class="visually-hidden">Filter events</h2>
2121
<!-- Фильтры -->
2222
</div>
2323
</div>
24-
25-
<button class="trip-main__event-add-btn btn btn--big btn--yellow" type="button">New event</button>
2624
</div>
2725
</div>
2826
</header>

src/const.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,16 @@ const SortType = {
4343
OFFERS: 'offers'
4444
};
4545

46-
export { DESCRIPTIONS_DESTINATION, NAME_DESTINATION, MAX_COUNT, EVENT_TYPES, FilterType, SortType };
46+
const UserAction = {
47+
UPDATE_POINT: 'UPDATE_POINT',
48+
ADD_POINT: 'ADD_POINT',
49+
DELETE_POINT: 'DELETE_POINT',
50+
};
51+
52+
const UpdateType = {
53+
PATCH: 'PATCH',
54+
MINOR: 'MINOR',
55+
MAJOR: 'MAJOR',
56+
};
57+
58+
export { DESCRIPTIONS_DESTINATION, NAME_DESTINATION, MAX_COUNT, EVENT_TYPES, FilterType, SortType, UserAction, UpdateType };

src/main.js

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,38 @@
1-
import { render } from './framework/render.js';
2-
import FiltersView from './view/filters-view.js';
1+
import FilterPresenter from './presenter/filter-presenter.js';
32
import BoardPresenter from './presenter/board-presenter.js';
43
import PointsModel from './model/points-model.js';
5-
import { generateFilter } from './mock/filter.js';
4+
import FilterModel from './model/filter-model.js';
5+
import AddNewPointButtonView from './view/add-new-point-button-view.js';
6+
import { render } from './framework/render.js';
7+
8+
const initApp = () => {
9+
const filtersContainer = document.querySelector('.trip-controls__filters');
10+
const eventsContainer = document.querySelector('.trip-events');
11+
const tripMainContainer = document.querySelector('.trip-main');
12+
const pointsModel = new PointsModel();
13+
const filterModel = new FilterModel();
14+
15+
const boardPresenter = new BoardPresenter({
16+
boardContainer: eventsContainer,
17+
pointsModel,
18+
filterModel
19+
});
20+
21+
const filterPresenter = new FilterPresenter({
22+
filterContainer: filtersContainer,
23+
filterModel,
24+
pointsModel
25+
});
626

7-
const filtersContainer = document.querySelector('.trip-controls__filters');
8-
const eventsContainer = document.querySelector('.trip-events');
9-
const pointsModel = new PointsModel();
10-
const boardPresenter = new BoardPresenter({
11-
boardContainer: eventsContainer,
12-
pointsModel,
13-
});
27+
const addNewPointButtonComponent = new AddNewPointButtonView({
28+
onClick: () => boardPresenter.createPoint()
29+
});
1430

15-
const filters = generateFilter(pointsModel.points);
31+
boardPresenter.setAddNewPointButton(addNewPointButtonComponent);
1632

17-
render(new FiltersView({ filters }), filtersContainer);
33+
render(addNewPointButtonComponent, tripMainContainer);
34+
filterPresenter.init();
35+
boardPresenter.init();
36+
};
1837

19-
boardPresenter.init();
38+
initApp();

src/mock/filter.js

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/mock/points.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ const mockPoints = [
4848
{
4949
id: 5,
5050
basePrice: 1500,
51-
dateFrom: '2025-04-04T16:00:56.845Z',
52-
dateTo: '2025-04-04T18:00:56.845Z',
51+
dateFrom: '2025-04-29T16:00:56.845Z',
52+
dateTo: '2025-04-29T18:00:56.845Z',
5353
destination: 555,
5454
isFavorite: true,
5555
offers: [51, 52, 53],

src/model/filter-model.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Observable from '../framework/observable.js';
2+
import { FilterType } from '../const.js';
3+
4+
export default class FilterModel extends Observable {
5+
#filter = FilterType.EVERYTHING;
6+
7+
get filter() {
8+
return this.#filter;
9+
}
10+
11+
setFilter(updateType, filter) {
12+
this.#filter = filter;
13+
this._notify(updateType, filter);
14+
}
15+
}

src/model/points-model.js

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1+
import Observable from '../framework/observable.js';
12
import { getRandomMockPoints } from '../mock/points.js';
23
import { mockDestinations } from '../mock/destinations.js';
34
import { mockOffers } from '../mock/offers.js';
45

56
const POINTS_COUNT = 5;
67

7-
export default class PointsModel {
8+
export default class PointsModel extends Observable {
89
#destinations = mockDestinations;
910
#offers = mockOffers;
1011
#points = this.generateUniquePoints();
@@ -43,4 +44,44 @@ export default class PointsModel {
4344
get points() {
4445
return this.#points;
4546
}
47+
48+
updatePoint(updateType, update) {
49+
const index = this.#points.findIndex((point) => point.id === update.id);
50+
51+
if (index === -1) {
52+
throw new Error('Can\'t update unexisting point');
53+
}
54+
55+
this.#points = [
56+
...this.#points.slice(0, index),
57+
update,
58+
...this.#points.slice(index + 1),
59+
];
60+
61+
this._notify(updateType, update);
62+
}
63+
64+
addPoint(updateType, update) {
65+
this.#points = [
66+
update,
67+
...this.#points,
68+
];
69+
70+
this._notify(updateType, update);
71+
}
72+
73+
deletePoint(updateType, update) {
74+
const index = this.#points.findIndex((point) => point.id === update.id);
75+
76+
if (index === -1) {
77+
throw new Error('Can\'t delete unexisting point');
78+
}
79+
80+
this.#points = [
81+
...this.#points.slice(0, index),
82+
...this.#points.slice(index + 1),
83+
];
84+
85+
this._notify(updateType);
86+
}
4687
}

0 commit comments

Comments
 (0)