Skip to content

Commit db6029a

Browse files
committed
modify view.js
1 parent 1c3ded0 commit db6029a

File tree

1 file changed

+45
-47
lines changed

1 file changed

+45
-47
lines changed

src/js/view.js

Lines changed: 45 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
const initialRender = (initialElements, i18n) => {
2+
Object.entries(initialElements).forEach(([elementName, element]) => {
3+
if (elementName === 'urlInput') {
4+
element.setAttribute('placeholder', i18n.t(elementName))
5+
return
6+
}
7+
const textNode = document.createTextNode(i18n.t(elementName))
8+
element.prepend(textNode)
9+
})
10+
}
11+
112
const createInnerContainer = (entityName, i18n) => {
213
const innerContainer = document.createElement('div')
314
innerContainer.classList.add('card', 'border-0')
@@ -32,20 +43,28 @@ const insertChildren = (elements, entityName, children, i18n) => {
3243
}
3344
}
3445

35-
const initialRender = (initialElements, i18n) => {
36-
Object.entries(initialElements).forEach(([elementName, element]) => {
37-
if (elementName === 'urlInput') {
38-
element.setAttribute('placeholder', i18n.t(elementName))
39-
return
40-
}
41-
const textNode = document.createTextNode(i18n.t(elementName))
42-
element.prepend(textNode)
43-
})
46+
const handleFormStatus = (elements, status) => {
47+
switch (status) {
48+
case 'validating':
49+
elements.addUrlButton.disabled = true
50+
break
51+
case 'invalid':
52+
case 'filling':
53+
elements.addUrlButton.disabled = false
54+
break
55+
case 'valid':
56+
break
57+
default:
58+
throw new Error(`Unknown form status: ${status}`)
59+
}
4460
}
4561

46-
const handleProcessState = (elements, i18n, processState) => {
47-
switch (processState) {
48-
case 'added':
62+
const handleLoadingProcessStatus = (elements, i18n, status) => {
63+
switch (status) {
64+
case 'loading':
65+
elements.addUrlButton.disabled = true
66+
break
67+
case 'success':
4968
elements.form.reset()
5069
elements.urlInput.focus()
5170
elements.urlInput.classList.remove('is-invalid')
@@ -54,17 +73,11 @@ const handleProcessState = (elements, i18n, processState) => {
5473
elements.formFeedback.textContent = i18n.t('formFeedback.success')
5574
elements.addUrlButton.disabled = false
5675
break
57-
case 'error':
58-
elements.addUrlButton.disabled = false
59-
break
60-
case 'adding':
61-
elements.addUrlButton.disabled = true
62-
break
63-
case 'filling':
76+
case 'failed':
6477
elements.addUrlButton.disabled = false
6578
break
6679
default:
67-
throw new Error(`Unknown process state: ${processState}`)
80+
throw new Error(`Unknown loading process status: ${status}`)
6881
}
6982
}
7083

@@ -91,7 +104,6 @@ const renderFeeds = (elements, i18n, state) => {
91104
p.textContent = feedDescription
92105

93106
li.append(h3, p)
94-
95107
insertChildren(elements, 'feeds', li, i18n)
96108
}
97109

@@ -108,10 +120,6 @@ const renderPosts = (elements, i18n, state) => {
108120
a.setAttribute('rel', 'noopener noreferrer')
109121
a.textContent = postTitle
110122

111-
a.addEventListener('click', (e) => {
112-
handleCheckPost(state, e)
113-
})
114-
115123
const button = document.createElement('button')
116124
button.classList.add('btn', 'btn-outline-primary', 'btn-sm')
117125
button.setAttribute('type', 'button')
@@ -120,48 +128,38 @@ const renderPosts = (elements, i18n, state) => {
120128
button.setAttribute('data-bs-target', '#modal')
121129
button.textContent = i18n.t('postPreviewButton')
122130

123-
button.addEventListener('click', (e) => {
124-
handleCheckPost(state, e)
125-
state.uiState.modal.openedPostId = postId
126-
})
127-
128131
li.append(a, button)
129132
return li
130133
})
131134
insertChildren(elements, 'posts', postsElements, i18n)
132135
}
133136

134-
const handleCheckPost = (state, event) => {
135-
const { viewedPostsIds } = state.uiState
136-
const { id } = event.target.dataset
137-
if (viewedPostsIds.includes(id)) {
138-
return
139-
}
140-
viewedPostsIds.push(id)
141-
}
142-
143137
const renderCheckedPost = (state) => {
144138
const checkedPostId = state.uiState.viewedPostsIds.at(-1)
145-
const checkedPost = document.querySelector(`[data-posts] a[data-id="${checkedPostId}"]`)
139+
const checkedPost = document.querySelector(`[data-posts-container] a[data-id="${checkedPostId}"]`)
146140
checkedPost.classList.remove('fw-bold')
147141
checkedPost.classList.add('fw-normal', 'link-secondary')
148142
}
149143

150144
const renderModalContent = (elements, state) => {
151-
const openedPost = state.posts.allPosts.find(({ postId }) => postId === state.uiState.modal.openedPostId)
145+
const openedPost = state.posts.allPosts.find(({ postId }) => postId === state.uiState.modalOpenedPostId)
152146
const { postTitle, postDescription, postLink } = openedPost
153147
elements.modalPostTitle.textContent = postTitle
154148
elements.modalPostDescription.textContent = postDescription
155149
elements.modalReadMoreButton.href = postLink
156150
}
157151

158-
const render = (elements, i18n, state, onChangePath, onChangeValue) => {
159-
switch (onChangePath) {
160-
case 'form.processState':
161-
handleProcessState(elements, i18n, onChangeValue)
152+
const render = (elements, i18n, state) => (path, value) => {
153+
switch (path) {
154+
case 'form.status':
155+
handleFormStatus(elements, value)
156+
break
157+
case 'loadingProcess.status':
158+
handleLoadingProcessStatus(elements, i18n, value)
162159
break
163160
case 'form.errorKey':
164-
renderErrors(elements, i18n, onChangeValue)
161+
case 'loadingProcess.errorKey':
162+
renderErrors(elements, i18n, value)
165163
break
166164
case 'feeds':
167165
renderFeeds(elements, i18n, state)
@@ -172,7 +170,7 @@ const render = (elements, i18n, state, onChangePath, onChangeValue) => {
172170
case 'uiState.viewedPostsIds':
173171
renderCheckedPost(state)
174172
break
175-
case 'uiState.modal.openedPostId':
173+
case 'uiState.modalOpenedPostId':
176174
renderModalContent(elements, state)
177175
break
178176
default:

0 commit comments

Comments
 (0)