@@ -4,84 +4,94 @@ import { buildEditableView, buildReadOnlyView } from "./postDetailView.js";
44
55export const postDetailController = async ( postContainer , postId ) => {
66
7+ let currentPost = null ;
8+ let isOwner = false ;
79
8- let postDetail = null ;
9- let user = null ;
10- let isOwner = false
10+ await readOnlyPost ( )
1111
12- try {
13- //----------------------------------------------------
14- loadStarted ( ) ;
15- //----------------------------------------------------
12+ async function loadPostData ( ) {
13+
14+ let post
15+ let user = null ;
1616
1717 try {
18+ //----------------------------------------------------
19+ loadStarted ( ) ;
20+ //----------------------------------------------------
21+
1822 //===================================
19- postDetail = await getPost ( postId ) ;
23+ post = await getPost ( postId ) ;
2024 //===================================
21- } catch ( error ) {
22- dispatchNotification ( 'post-error' , error . message ) ;
23- }
2425
25- if ( ! localStorage . getItem ( 'accessToken' ) ) {
26- renderReadOnlyView ( postDetail , isOwner ) ;
27- } else {
28- try {
29- //===================================
30- user = await getLoggedInUserInfo ( ) ;
31- //===================================
32- } catch ( error ) {
33- dispatchNotification ( 'post-error' , error . message ) ;
26+ if ( ! post ) {
27+ throw new Error ( 'No post founded.' )
3428 }
35-
36- isOwner = user . id === postDetail . userId ;
37-
38- renderReadOnlyView ( postDetail , isOwner ) ;
29+
30+ if ( ! localStorage . getItem ( 'accessToken' ) ) {
31+ return { post, owner : false } ;
32+ }
33+
34+ //===================================
35+ user = await getLoggedInUserInfo ( ) ;
36+ //===================================
37+ const owner = user . id === post . userId ;
38+
39+ return { post, owner } ;
40+
41+ } catch ( error ) {
42+ dispatchNotification ( 'post-error' , error . message ) ;
43+ } finally {
44+ //----------------------------------------------------
45+ loadFinished ( ) ;
46+ //----------------------------------------------------
3947 }
40- } catch ( error ) {
41- dispatchNotification ( 'post-error' , error . message ) ;
42- } finally {
43- //----------------------------------------------------
44- loadFinished ( ) ;
45- //----------------------------------------------------
4648 }
4749
4850 //===================================================================================================================
49- function renderReadOnlyView ( post , isOwner ) {
50- postContainer . innerHTML = buildReadOnlyView ( post , isOwner ) ;
51+ async function readOnlyPost ( ) {
52+
53+ const result = await loadPostData ( ) ;
54+
55+ currentPost = result . post ;
56+ isOwner = result . owner ;
57+
58+ postContainer . innerHTML = ''
59+ postContainer . innerHTML = buildReadOnlyView ( currentPost , isOwner ) ;
5160
5261 if ( isOwner ) {
5362 const editPost = postContainer . querySelector ( "#edit-post" )
54- editPost . addEventListener ( "click" , ( ) => renderEditableView ( post ) ) ;
63+ editPost . addEventListener ( "click" , ( ) => editablePost ( currentPost ) ) ;
5564
5665 const deletePost = postContainer . querySelector ( "#delete-post" )
57- deletePost . addEventListener ( "click" , ( ) => handleDelete ( post . id ) ) ;
66+ deletePost . addEventListener ( "click" , ( ) => handleDelete ( currentPost . id ) ) ;
5867 }
5968 }
6069
6170 //------------------------------------------------------------------------
62- function renderEditableView ( post ) {
63- postContainer . innerHTML = buildEditableView ( post ) ;
71+ function editablePost ( post ) {
6472
65- const editForm = document . getElementById ( "edit-post-form" ) ;
73+ postContainer . innerHTML = ''
74+ postContainer . innerHTML = buildEditableView ( post ) ;
6675
67- editForm . addEventListener ( 'submit' , ( event ) => {
76+ const form = document . getElementById ( "edit-post-form" ) ;
77+ form . addEventListener ( 'submit' , ( event ) => {
6878 event . preventDefault ( ) ;
6979
7080 handleSave ( post ) ;
7181 } ) ;
7282
73- const cancel = postContainer . querySelector ( "#cancel-edit" )
74- cancel . addEventListener ( "click" , ( event ) => {
83+ const cancelEdit = postContainer . querySelector ( "#cancel-edit" )
84+ cancelEdit . addEventListener ( "click" , ( event ) => {
7585 event . preventDefault ( ) ;
7686
77- postContainer . innerHTML = buildReadOnlyView ( post , true ) ;
78- renderReadOnlyView ( post , true )
87+ readOnlyPost ( )
7988 } ) ;
8089 }
8190
8291 //------------------------------------------------------------------------
8392 async function handleDelete ( postId ) {
84- if ( confirm ( "Are you sure about deleting the post?" ) ) {
93+ if ( ! confirm ( "Are you sure about deleting the post?" ) ) return ;
94+
8595 try {
8696 //----------------------------------------------------
8797 loadStarted ( ) ;
@@ -103,23 +113,14 @@ export const postDetailController = async (postContainer, postId) => {
103113 loadFinished ( ) ;
104114 //----------------------------------------------------
105115 }
106- }
107116 }
108117
109118 //------------------------------------------------------------------------
110119 async function handleSave ( post ) {
111120
112- const editForm = document . getElementById ( "edit-post-form" ) ;
113-
114- const image = editForm . querySelector ( '#post-image' ) . files [ 0 ] ;
115-
116- const name = editForm . querySelector ( '#post-name' ) . value ;
117- const description = editForm . querySelector ( '#post-description' ) . value ;
118- const price = editForm . querySelector ( '#post-price' ) . value ;
119-
120- const tag = editForm . querySelector ( '#post-tag' ) . value ;
121+ const form = document . getElementById ( "edit-post-form" ) ;
121122
122- const isPurchase = editForm . querySelector ( 'input[ name="transactionType"]:checked' ) . value === 'purchase' ;
123+ const { image , name, description , price , tag , isPurchase } = getFormData ( form ) ;
123124
124125 try {
125126 //----------------------------------------------------
@@ -137,32 +138,30 @@ export const postDetailController = async (postContainer, postId) => {
137138 imageURL = '../../../../public/no-image-available.jpg' ;
138139 }
139140
140- post . image = imageURL ;
141- post . name = name ;
142- post . description = description ;
143- post . price = price ;
144- post . tag = tag || null ;
145- post . isPurchase = isPurchase ;
141+ const updatedPost = {
142+ ...post ,
143+ image : imageURL ,
144+ name : name ,
145+ description : description ,
146+ price : price ,
147+ tag : tag || null ,
148+ isPurchase : isPurchase ,
149+ } ;
146150
147151 //===================================
148- await updatePost ( post ) ;
152+ await updatePost ( updatedPost ) ;
149153 //===================================
150154
151- let getUpdatedPost ;
152-
153- const postId = post . id
154155 //===================================
155- getUpdatedPost = await getPost ( postId ) ;
156+ currentPost = await getPost ( post . id ) ;
156157 //===================================
157158
158- postDetail = getUpdatedPost ;
159-
160159 dispatchNotification ( 'post-success' , {
161160 message : "Post successfully updated." ,
162161 type : 'success' ,
163162 } ) ;
164163
165- render_ReadOnlyView ( postDetail , true ) ;
164+ readOnlyPost ( )
166165
167166 } catch ( error ) {
168167 dispatchNotification ( 'post-error' , error . message ) ;
@@ -173,6 +172,17 @@ export const postDetailController = async (postContainer, postId) => {
173172 }
174173 }
175174
175+ function getFormData ( form ) {
176+ return {
177+ image : form . querySelector ( '#post-image' ) . files [ 0 ] ,
178+ name : form . querySelector ( '#post-name' ) . value ,
179+ description : form . querySelector ( '#post-description' ) . value ,
180+ price : form . querySelector ( '#post-price' ) . value ,
181+ tag : form . querySelector ( '#post-tag' ) . value || null ,
182+ isPurchase : form . querySelector ( 'input[name="transactionType"]:checked' ) . value === 'purchase' ,
183+ } ;
184+ }
185+
176186 //===================================================================================================================
177187 function dispatchNotification ( eventType , message ) {
178188 const event = new CustomEvent ( eventType , { detail : message } ) ;
0 commit comments