@@ -12,9 +12,11 @@ import TrustMeter from '@/components/shared/Review/TrustMeter';
12
12
import EmojiPicker from '@/components/shared/Review/emojipicker' ;
13
13
import { OutlineBtn } from '@/components/shared/Forms/Buttons/Buttons' ;
14
14
import ConfirmDialog from '@/components/shared/confirm' ;
15
- import { PiFestJson } from '@/constants/demoAPI' ;
16
15
import Skeleton from '@/components/skeleton/skeleton' ;
17
16
import { fetchSingleSeller } from '@/services/sellerApi' ;
17
+ import { ISeller , IUserSettings , IUser } from '@/constants/types' ;
18
+ import ToggleCollapse from '@/components/shared/Seller/ToggleCollapse' ;
19
+ import { fetchSellerSettings } from '@/services/userSettingsApi' ;
18
20
19
21
export default function Page ( { params } : { params : { id : string } } ) {
20
22
const SUBHEADER = "font-bold mb-2" ;
@@ -28,10 +30,12 @@ export default function Page({ params }: { params: { id: string } }) {
28
30
const [ showConfirmDialog , setShowConfirmDialog ] = useState ( false ) ;
29
31
const [ linkUrl , setLinkUrl ] = useState ( '' ) ;
30
32
31
- const [ seller , setSeller ] = useState ( PiFestJson . Seller ) ;
33
+ const [ seller , setSeller ] = useState < ISeller | null > ( null ) ;
34
+ const [ sellerSettings , setSellerSettings ] = useState < IUserSettings | null > ( null ) ;
35
+ const [ sellerUser , setSellerUser ] = useState < IUser | null > ( null ) ;
32
36
const [ loading , setLoading ] = useState < boolean > ( true ) ;
33
37
const [ error , setError ] = useState < string | null > ( null ) ;
34
- const { currentUser, autoLoginUser, registerUser } = useContext ( AppContext ) ;
38
+ const { currentUser, autoLoginUser } = useContext ( AppContext ) ;
35
39
36
40
useEffect ( ( ) => {
37
41
// try re-login user if not current user auth
@@ -43,14 +47,32 @@ export default function Page({ params }: { params: { id: string } }) {
43
47
const getSellerData = async ( ) => {
44
48
try {
45
49
const data = await fetchSingleSeller ( sellerId ) ; //'testme'
46
- setSeller ( data ) ; // Ensure this is a single object, not an array
50
+ setSeller ( data . business_info ) ; // Ensure this is a single object, not an array
51
+ if ( data . seller_settings ) {
52
+ setSellerSettings ( data . seller_settings ) ;
53
+ } else {
54
+ setSellerSettings ( null ) ;
55
+ }
56
+ if ( data . user ) {
57
+ setSellerUser ( data . user ) ;
58
+ } else {
59
+ setSellerUser ( null ) ;
60
+ }
47
61
} catch ( error ) {
48
62
setError ( 'Error fetching seller data' ) ;
49
63
} finally {
50
64
setLoading ( false ) ;
51
65
}
52
66
} ;
67
+
68
+ const getSellerSettings = async ( ) => {
69
+ const settings = await fetchSellerSettings ( sellerId ) ;
70
+ console . log ( "User settings:" , settings ) ;
71
+
72
+ } ;
73
+
53
74
getSellerData ( ) ;
75
+ getSellerSettings ( ) ;
54
76
55
77
56
78
} , [ ] ) ;
@@ -85,7 +107,7 @@ export default function Page({ params }: { params: { id: string } }) {
85
107
return (
86
108
< >
87
109
< div className = "w-full md:w-[500px] md:mx-auto p-4" >
88
- < h1 className = "mb-5 font-bold text-lg md:text-2xl" > { t ( 'SCREEN.BUY_FROM_SELLER.BUY_FROM_SELLER_HEADER' ) } </ h1 >
110
+ < h1 className = "mb-5 text-center font-bold text-lg md:text-2xl" > { t ( 'SCREEN.BUY_FROM_SELLER.BUY_FROM_SELLER_HEADER' ) } </ h1 >
89
111
90
112
{ seller && ( < div >
91
113
{ /* Seller Profile */ }
@@ -95,41 +117,30 @@ export default function Page({ params }: { params: { id: string } }) {
95
117
</ div >
96
118
< div className = "my-auto" >
97
119
< h2 className = "font-bold mb-2" > { seller . name } </ h2 >
98
- < p className = "text-sm" > { translateSellerCategory ( 'Pioneer' ) } </ p >
120
+ < p className = "text-sm" > { translateSellerCategory ( seller . seller_type ) } </ p >
99
121
</ div >
100
122
</ div >
101
123
102
124
{ /* Seller Description */ }
103
- < div className = "mb-5" >
104
- < h2 className = { SUBHEADER } > { t ( 'SCREEN.BUY_FROM_SELLER.SELLER_DESCRIPTION_LABEL' ) } </ h2 >
105
- < p className = "" > { seller . description } </ p >
106
- </ div >
107
-
108
- { /* Items List */ }
109
- < h2 className = { SUBHEADER } > { t ( 'SCREEN.BUY_FROM_SELLER.SELLER_SALE_ITEMS_LABEL' ) } </ h2 >
110
- < div className = "seller_item_container mb-6" >
111
- < p > { seller . sale_items } </ p >
125
+ < h2 className = { SUBHEADER } > { t ( 'Seller Details' ) } </ h2 >
126
+ < div className = "seller_item_container mb-5" >
127
+ < p className = "mb-3" > { seller . description } </ p >
112
128
</ div >
113
129
114
130
{ /* Seller Location */ }
115
- < div className = "mb-6" >
116
- < h2 className = { `SUBHEADER` } > { t ( 'SCREEN.BUY_FROM_SELLER.SELLER_ADDRESS_LOCATION_LABEL' ) } </ h2 >
117
- < p className = "mb-3" > { seller . address } </ p >
118
- < OutlineBtn label = { t ( 'SHARED.NAVIGATE' ) } onClick = { ( ) => handleNavigation ( '' ) } />
119
- </ div >
120
-
121
- < div >
122
- < EmojiPicker sellerId = { sellerId } setIsSaveEnabled = { setIsSaveEnabled } currentUser = { currentUser } />
131
+ < h2 className = { SUBHEADER } > { t ( 'Seller Address or Whereabout' ) } </ h2 >
132
+ < div className = "seller_item_container mb-5" >
133
+ < p className = "mb-3" > { seller . address } </ p >
123
134
</ div >
124
135
125
- { /* Summary of Reviews */ }
126
- < div className = "mb-7" >
136
+ { /* Summary of Reviews */ }
137
+ < div className = "mb-7 mt-5 " >
127
138
< h2 className = { SUBHEADER } > { t ( 'SCREEN.BUY_FROM_SELLER.REVIEWS_SUMMARY_LABEL' ) } </ h2 >
128
139
{ /* Trust-O-meter */ }
129
140
< div >
130
141
< TrustMeter ratings = { seller . trust_meter_rating } />
131
142
</ div >
132
- < div className = "flex items-center justify-between mt-3 " >
143
+ < div className = "flex items-center justify-between" >
133
144
< p className = "text-sm" >
134
145
{ t ( 'SCREEN.BUY_FROM_SELLER.REVIEWS_SCORE_MESSAGE' , { seller_review_rating : seller . average_rating . $numberDecimal } ) }
135
146
</ p >
@@ -138,21 +149,43 @@ export default function Page({ params }: { params: { id: string } }) {
138
149
</ Link >
139
150
</ div >
140
151
</ div >
141
- < div className = "mb-7" >
142
- < h2 className = { `${ SUBHEADER } mb-4` } > { t ( 'SCREEN.BUY_FROM_SELLER.SELLER_CONTACT_DETAILS_LABEL' ) } </ h2 >
152
+
153
+ < ToggleCollapse
154
+ header = { t ( 'SCREEN.BUY_FROM_SELLER.LEAVE_A_REVIEW_MESSAGE' ) } >
155
+ { /* <h2 className={SUBHEADER}>{t('SCREEN.BUY_FROM_SELLER.LEAVE_A_REVIEW_MESSAGE')}</h2> */ }
156
+ < div >
157
+ < EmojiPicker sellerId = { sellerId } setIsSaveEnabled = { setIsSaveEnabled } currentUser = { currentUser } />
158
+ </ div >
159
+ </ ToggleCollapse >
160
+
161
+
162
+ < ToggleCollapse
163
+ header = { t ( 'SCREEN.BUY_FROM_SELLER.SELLER_CONTACT_DETAILS_LABEL' ) } >
143
164
< div className = "text-sm mb-3" >
144
- < span className = "font-bold" > { t ( 'SCREEN.BUY_FROM_SELLER.SELLER_PI_ID_LABEL' ) + ": " } </ span >
145
- < span > { seller . seller_id } </ span >
165
+ < span className = "font-bold" >
166
+ { t ( 'Username' ) + ': ' }
167
+ </ span >
168
+ < span > { sellerUser ? sellerUser . user_name : '' } </ span >
146
169
</ div >
147
170
< div className = "text-sm mb-3" >
148
- < span className = "font-bold" > { t ( 'SCREEN.BUY_FROM_SELLER.SELLER_PHONE_LABEL' ) + ": " } </ span >
149
- < span > { seller . phone } </ span >
171
+ < span className = "font-bold" >
172
+ { t ( 'Pioneer Name' ) + ': ' }
173
+ </ span >
174
+ < span > { sellerUser ? sellerUser . pi_username : '' } </ span >
150
175
</ div >
151
176
< div className = "text-sm mb-3" >
152
- < span className = "font-bold" > { t ( 'SCREEN.BUY_FROM_SELLER.SELLER_EMAIL_LABEL' ) + ": " } </ span >
153
- < span > { seller . email } </ span >
177
+ < span className = "font-bold" >
178
+ { t ( 'Phone' ) + ': ' }
179
+ </ span >
180
+ < span > { sellerSettings ? sellerSettings . phone_number : "" } </ span >
154
181
</ div >
155
- </ div >
182
+ < div className = "text-sm mb-3" >
183
+ < span className = "font-bold" >
184
+ { t ( 'Email' ) + ': ' }
185
+ </ span >
186
+ < span > { sellerSettings ? sellerSettings . email : "" } </ span >
187
+ </ div >
188
+ </ ToggleCollapse >
156
189
157
190
< ConfirmDialog
158
191
show = { showConfirmDialog }
0 commit comments