Skip to content

Commit 1cbdd61

Browse files
authored
Merge pull request #152 from map-of-pi/ft/user-settings
Approved (1).
2 parents 12bd00b + efbd1cd commit 1cbdd61

File tree

4 files changed

+86
-37
lines changed

4 files changed

+86
-37
lines changed

src/app/[locale]/seller/reviews/feedback/[id]/page.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export default function ReplyToReviewPage({
8484
return reaction;
8585
}
8686
};
87+
const SUBHEADER = "font-bold mb-2";
8788

8889
// loading condition
8990
if (loading) {
@@ -110,7 +111,7 @@ export default function ReplyToReviewPage({
110111
</div>
111112
</div>
112113
)}
113-
114+
<h2 className={SUBHEADER}>{t('SCREEN.BUY_FROM_SELLER.LEAVE_A_REVIEW_MESSAGE')}</h2>
114115
<div>
115116
<EmojiPicker
116117
sellerId={reviewData?.review_receiver_id}

src/app/[locale]/seller/sale-items/[id]/page.tsx

+68-35
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import TrustMeter from '@/components/shared/Review/TrustMeter';
1212
import EmojiPicker from '@/components/shared/Review/emojipicker';
1313
import { OutlineBtn } from '@/components/shared/Forms/Buttons/Buttons';
1414
import ConfirmDialog from '@/components/shared/confirm';
15-
import { PiFestJson } from '@/constants/demoAPI';
1615
import Skeleton from '@/components/skeleton/skeleton';
1716
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';
1820

1921
export default function Page({ params }: { params: { id: string } }) {
2022
const SUBHEADER = "font-bold mb-2";
@@ -28,10 +30,12 @@ export default function Page({ params }: { params: { id: string } }) {
2830
const [showConfirmDialog, setShowConfirmDialog] = useState(false);
2931
const [linkUrl, setLinkUrl] = useState('');
3032

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);
3236
const [loading, setLoading] = useState<boolean>(true);
3337
const [error, setError] = useState<string | null>(null);
34-
const { currentUser, autoLoginUser, registerUser } = useContext(AppContext);
38+
const { currentUser, autoLoginUser } = useContext(AppContext);
3539

3640
useEffect(() => {
3741
// try re-login user if not current user auth
@@ -43,14 +47,32 @@ export default function Page({ params }: { params: { id: string } }) {
4347
const getSellerData = async () => {
4448
try {
4549
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+
}
4761
} catch (error) {
4862
setError('Error fetching seller data');
4963
} finally {
5064
setLoading(false);
5165
}
5266
};
67+
68+
const getSellerSettings = async () => {
69+
const settings = await fetchSellerSettings(sellerId);
70+
console.log("User settings:", settings);
71+
72+
};
73+
5374
getSellerData();
75+
getSellerSettings();
5476

5577

5678
}, []);
@@ -85,7 +107,7 @@ export default function Page({ params }: { params: { id: string } }) {
85107
return (
86108
<>
87109
<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>
89111

90112
{seller && (<div>
91113
{/* Seller Profile */}
@@ -95,41 +117,30 @@ export default function Page({ params }: { params: { id: string } }) {
95117
</div>
96118
<div className="my-auto">
97119
<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>
99121
</div>
100122
</div>
101123

102124
{/* 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>
112128
</div>
113129

114130
{/* 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>
123134
</div>
124135

125-
{/* Summary of Reviews */}
126-
<div className="mb-7">
136+
{/* Summary of Reviews */}
137+
<div className="mb-7 mt-5">
127138
<h2 className={SUBHEADER}>{t('SCREEN.BUY_FROM_SELLER.REVIEWS_SUMMARY_LABEL')}</h2>
128139
{/* Trust-O-meter */}
129140
<div>
130141
<TrustMeter ratings={seller.trust_meter_rating} />
131142
</div>
132-
<div className="flex items-center justify-between mt-3">
143+
<div className="flex items-center justify-between">
133144
<p className="text-sm">
134145
{t('SCREEN.BUY_FROM_SELLER.REVIEWS_SCORE_MESSAGE', {seller_review_rating: seller.average_rating.$numberDecimal})}
135146
</p>
@@ -138,21 +149,43 @@ export default function Page({ params }: { params: { id: string } }) {
138149
</Link>
139150
</div>
140151
</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')}>
143164
<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>
146169
</div>
147170
<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>
150175
</div>
151176
<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>
154181
</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>
156189

157190
<ConfirmDialog
158191
show={showConfirmDialog}

src/components/shared/Review/emojipicker.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ export default function EmojiPicker(props: any) {
124124
const SUBHEADER = "font-bold mb-2";
125125
return (
126126
<div className="mb-3">
127-
<h2 className={SUBHEADER}>{t('SCREEN.BUY_FROM_SELLER.LEAVE_A_REVIEW_MESSAGE')}</h2>
128127
<p>{t('SCREEN.BUY_FROM_SELLER.FACE_SELECTION_REVIEW_MESSAGE')}</p>
129128
<div className='flex sm:overflow-hidden overflow-auto gap-3 w-full text-center justify-center my-2'>
130129
<div className='bg-[#DF2C2C33] flex-grow-[0.5] rounded-md p-2'>

src/services/userSettingsApi.ts

+16
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,19 @@ export const createUserSettings = async (formData: IUserSettings) => {
3333
throw error;
3434
}
3535
};
36+
37+
// Fetch a single pioneer user settings
38+
export const fetchSellerSettings = async (sellerId: String) => {
39+
try {
40+
const response = await axiosClient.post(`/user-preferences/${sellerId}`);
41+
if (response.status === 200) {
42+
return response.data;
43+
} else {
44+
console.error(`Fetch seller settings failed: ${response.status}`);
45+
return null;
46+
}
47+
} catch (error: any) {
48+
handleAxiosError(error);
49+
throw error;
50+
}
51+
};

0 commit comments

Comments
 (0)