Skip to content

Commit 69b3102

Browse files
committed
[PROJ-18.10/compl] adding-days-comments
Adding "habbit-days/comments". Updating "data/localStorage", re-render. Worth noting: - rewriting "habbits" array, "map()" method. FS-dev: B-3 / JS basic
1 parent aadcc00 commit 69b3102

File tree

3 files changed

+39
-4
lines changed

3 files changed

+39
-4
lines changed

full-stack-dev/3-js-basic/18-proj-habit-tracker/18-10-adding-days-comments/css/habbit-days.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@
102102
outline-color: var(--add-color-11, #a87ae4);
103103
}
104104

105+
.comment-error {
106+
outline: 2px solid var(--add-color-12, #bd0b22);
107+
}
108+
105109
.habbit-days__form-btn {
106110
display: flex;
107111
justify-content: center;

full-stack-dev/3-js-basic/18-proj-habit-tracker/18-10-adding-days-comments/css/variables.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
--add-color-9: #E6E9ED;
3737
--add-color-10: #FBFAFF;
3838
--add-color-11: #a87ae4;
39+
--add-color-12: #bd0b22;
3940

4041
/* style */
4142
--default-br: 10px;

full-stack-dev/3-js-basic/18-proj-habit-tracker/18-10-adding-days-comments/js/index.js

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
let habbits = [];
4+
let globalActiveHabbitId;
45
const HABBITS_KEY = 'HABBITS';
56

67
// app
@@ -115,6 +116,7 @@ function rerenderHabbitDaysContentEl(activeHabbit) {
115116
'habbit-days__item-comment'
116117
);
117118

119+
// ..здесь добавление onsubmit="" логики для формы, и name для инпута (важный момент)
118120
habbitDaysCommentItem.innerHTML = `<div class="habbit-days__label">День ${
119121
activeHabbit.days.length + 1
120122
}</div>
@@ -125,10 +127,19 @@ function rerenderHabbitDaysContentEl(activeHabbit) {
125127

126128
docFragment.append(habbitDaysCommentItem);
127129
app['habbit-days'].list.append(docFragment); // и всё за раз на страницу/в DOM-дерево
130+
131+
// организация прослушки инпута/комментария для корректировки класса ошибки/обводки
132+
const commentInput = document.getElementById('comment-input');
133+
commentInput.addEventListener('input', () => {
134+
if (commentInput.classList.contains('comment-error')) {
135+
commentInput.classList.remove('comment-error');
136+
}
137+
});
128138
}
129139

130140
// поиск/определение "активной" привычки.. запуск отрисовок элементов/переключение активностей
131141
function rerender(activeHabbitId) {
142+
globalActiveHabbitId = activeHabbitId; // глобальная фиксация ID (т.е. какая привычка в данный момент активна)
132143
const activeHabbit = habbits.find((habbit) => habbit.id === activeHabbitId);
133144

134145
if (!activeHabbit) {
@@ -142,12 +153,31 @@ function rerender(activeHabbitId) {
142153

143154
// ** business **
144155
function addCommentDay(event) {
145-
event.preventDefault(); // отмена default отправки/перезагрузки страницы
156+
event.preventDefault(); // отмена default отправки формы, перезагрузки страницы
146157

147-
const formData = new FormData(event.target); // создание объекта данных/возможностей согласно искомой формы (полученной через onsubmit/event.target)
148-
const comment = formData.get('comment-day'); // получение значения/комментария из инпута согласно его имени/name
158+
const targetForm = event.target;
159+
const commentInput = targetForm['comment-day']; // фиксация инпута
160+
const formData = new FormData(targetForm); // создание объекта данных согласно искомой формы (получаемой через onsubmit/event.target логику)
161+
const dayComment = formData.get('comment-day'); // получение значения/комментария из инпута согласно его имени/name
149162

150-
console.log(comment); // Уже лучше!
163+
if (!dayComment) {
164+
commentInput.classList.add('comment-error');
165+
} else {
166+
commentInput.classList.remove('comment-error');
167+
168+
habbits = habbits.map((habbit) => {
169+
if (habbit.id === globalActiveHabbitId) {
170+
return { ...habbit, days: habbit.days.concat({ comment: dayComment }) }; // создание новых объектов, на основе старых (с корректировкой поля days)
171+
}
172+
return habbit;
173+
});
174+
175+
commentInput.classList.remove('comment-error'); // итоговая очистка инпута от обводки/ошибки (нужное дублирование)
176+
targetForm['comment-day'].value = ''; // очистка поля инпута (после корректного "Готово")
177+
178+
rerender(globalActiveHabbitId); // перерисовка всего/content элемента
179+
saveData(); // обновление/сохранение в localStorage
180+
}
151181
}
152182

153183
// init

0 commit comments

Comments
 (0)