Skip to content

Commit 1dcd2d4

Browse files
authored
Merge pull request #12 from WhiteShark23/module7-task1
2 parents 820f301 + ece5c13 commit 1dcd2d4

19 files changed

+574
-100
lines changed

package-lock.json

Lines changed: 25 additions & 7 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+
"nanoid": "^5.1.6"
3839
}
3940
}

public/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ <h2 class="visually-hidden">Filter events</h2>
2222
</div>
2323
</div>
2424

25-
<button class="trip-main__event-add-btn btn btn--big btn--yellow" type="button">New event</button>
25+
2626
</div>
2727
</div>
2828
</header>

src/const.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,22 @@ export const SortType = {
33
PRICE: 'price',
44
TIME: 'time',
55
};
6+
7+
export const FilterType = {
8+
EVERYTHING: 'EVERYTHING',
9+
FUTURE: 'FUTURE',
10+
PRESENT: 'PRESENT',
11+
PAST: 'PAST',
12+
};
13+
14+
export const UserAction = {
15+
UPDATE_POINT: 'UPDATE_POINT',
16+
ADD_POINT: 'ADD_POINT',
17+
DELETE_POINT: 'DELETE_POINT',
18+
};
19+
20+
export const UpdateType = {
21+
PATCH: 'PATCH',
22+
MINOR: 'MINOR',
23+
MAJOR: 'MAJOR',
24+
};

src/main.js

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,43 @@
11
import BoardPresenter from './presenter/board-presenter.js';
22
import PointModel from './model/points-model.js';
3+
import FilterPresenter from './presenter/filter-presenter.js';
4+
import FilterModel from './model/filter-model.js';
5+
import NewEditButtonView from './view/new-edit-button-view.js';
6+
import { render, RenderPosition } from './framework/render.js';
37

48
const siteTripEventsElement = document.querySelector('.trip-events');
9+
const siteTripMainControlsElement = document.querySelector('.trip-main__trip-controls');
510

611
const pointsModel = new PointModel();
7-
12+
const filterModel = new FilterModel();
13+
const newEditButtonComponent = new NewEditButtonView({
14+
onClick: handleNewEditButtonClick,
15+
});
816

917
const boardPresenter = new BoardPresenter({
1018
boardContainer: siteTripEventsElement,
1119
pointsModel,
20+
filterModel,
21+
onNewEditDestroy: handleNewEditFormClose,
22+
});
23+
24+
const filterPresenter = new FilterPresenter({
25+
filterContainer: siteTripMainControlsElement,
26+
filterModel,
27+
pointsModel,
1228
});
1329

30+
function handleNewEditFormClose() {
31+
boardPresenter.checkNoEvent();
32+
newEditButtonComponent.element.disabled = false;
33+
}
34+
35+
function handleNewEditButtonClick() {
36+
boardPresenter.createEdit();
37+
newEditButtonComponent.element.disabled = true;
38+
}
39+
40+
render(newEditButtonComponent, siteTripMainControlsElement, RenderPosition.AFTEREND);
41+
42+
filterPresenter.init();
1443
boardPresenter.init();

src/mocks/offers.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,5 +95,9 @@ export const offers = [
9595
{
9696
type: 'check-in',
9797
offers: []
98+
},
99+
{
100+
type: 'flight',
101+
offers: []
98102
}
99103
];

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,8 +1,9 @@
11
import { destinations } from '../mocks/destinations.js';
22
import { offers } from '../mocks/offers.js';
33
import { points } from '../mocks/points.js';
4+
import Observable from '../framework/observable.js';
45

5-
export default class PointModel {
6+
export default class PointModel extends Observable {
67
points = points;
78
offers = offers;
89
destinations = destinations;
@@ -36,4 +37,44 @@ export default class PointModel {
3637

3738
return allDestinations.find((item) => item.id === id);
3839
}
40+
41+
updatePoint(updateType, update) {
42+
const index = this.points.findIndex((point) => point.id === update.id);
43+
44+
if (index === -1) {
45+
throw new Error('Can\'t update unexisting task');
46+
}
47+
48+
this.points = [
49+
...this.points.slice(0, index),
50+
update,
51+
...this.points.slice(index + 1),
52+
];
53+
54+
this._notify(updateType, update);
55+
}
56+
57+
addPoint(updateType, update) {
58+
this.points = [
59+
update,
60+
...this.points,
61+
];
62+
63+
this._notify(updateType, update);
64+
}
65+
66+
deletePoint(updateType, update) {
67+
const index = this.points.findIndex((point) => point.id === update.id);
68+
69+
if (index === -1) {
70+
throw new Error('Can\'t delete unexisting task');
71+
}
72+
73+
this.points = [
74+
...this.points.slice(0, index),
75+
...this.points.slice(index + 1),
76+
];
77+
78+
this._notify(updateType);
79+
}
3980
}

0 commit comments

Comments
 (0)