Skip to content

Commit 85c3731

Browse files
committed
Revisit PR #152; recover adjustments.
1 parent 1cbdd61 commit 85c3731

File tree

11 files changed

+60
-81
lines changed

11 files changed

+60
-81
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ yarn-error.log*
2727

2828
# local env files
2929
.env
30+
.env.local
3031

3132
# vercel
3233
.vercel

messages/en-GB.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@
5959
},
6060
"BUY_FROM_SELLER": {
6161
"BUY_FROM_SELLER_HEADER": "Buy from Seller",
62-
"SELLER_DESCRIPTION_LABEL": "Seller Description",
63-
"SELLER_SALE_ITEMS_LABEL": "Seller items for sale",
64-
"SELLER_ADDRESS_LOCATION_LABEL": "Seller Address or Location",
62+
"SELLER_DETAILS_LABEL": "Seller Details",
63+
"SELLER_ADDRESS_POSITION_LABEL": "Seller Address or Position",
6564
"LEAVE_A_REVIEW_MESSAGE": "Leave a review",
6665
"FACE_SELECTION_REVIEW_MESSAGE": "Select the face which shows how you feel about the above seller",
6766
"ADDITIONAL_COMMENTS_PLACEHOLDER": "Enter additional comments here",
@@ -74,6 +73,7 @@
7473
"SELLER_EMAIL_LABEL": "Seller email"
7574
},
7675
"CHECK_REVIEWS_FEEDBACK": {
76+
"CHECK_REVIEWS_NO_FEEDBACK_HEADER": "No reviews for {seller_id}",
7777
"CHECK_REVIEWS_FEEDBACK_HEADER": "List of Reviews left for {seller_id}",
7878
"BY_REVIEWER": "By {buyer_id}"
7979
},

messages/en.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@
5959
},
6060
"BUY_FROM_SELLER": {
6161
"BUY_FROM_SELLER_HEADER": "Buy from Seller",
62-
"SELLER_DESCRIPTION_LABEL": "Seller Description",
63-
"SELLER_SALE_ITEMS_LABEL": "Seller items for sale",
64-
"SELLER_ADDRESS_LOCATION_LABEL": "Seller Address or Location",
62+
"SELLER_DETAILS_LABEL": "Seller Details",
63+
"SELLER_ADDRESS_POSITION_LABEL": "Seller Address or Position",
6564
"LEAVE_A_REVIEW_MESSAGE": "Leave a review",
6665
"FACE_SELECTION_REVIEW_MESSAGE": "Select the face which shows how you feel about the above seller",
6766
"ADDITIONAL_COMMENTS_PLACEHOLDER": "Enter additional comments here",
@@ -74,6 +73,7 @@
7473
"SELLER_EMAIL_LABEL": "Seller email"
7574
},
7675
"CHECK_REVIEWS_FEEDBACK": {
76+
"CHECK_REVIEWS_NO_FEEDBACK_HEADER": "No reviews for {seller_id}",
7777
"CHECK_REVIEWS_FEEDBACK_HEADER": "List of Reviews left for {seller_id}",
7878
"BY_REVIEWER": "By {buyer_id}"
7979
},

messages/es.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@
5959
},
6060
"BUY_FROM_SELLER": {
6161
"BUY_FROM_SELLER_HEADER": "Comprar del Vendedor",
62-
"SELLER_DESCRIPTION_LABEL": "Descripción del Vendedor",
63-
"SELLER_SALE_ITEMS_LABEL": "Artículos del vendedor en venta",
64-
"SELLER_ADDRESS_LOCATION_LABEL": "Dirección o Ubicación del Vendedor",
62+
"SELLER_DETAILS_LABEL": "Detalles del Vendedor",
63+
"SELLER_ADDRESS_POSITION_LABEL": "Dirección o Posición del Vendedor",
6564
"LEAVE_A_REVIEW_MESSAGE": "Deja una reseña",
6665
"FACE_SELECTION_REVIEW_MESSAGE": "Selecciona la cara que muestra cómo te sientes sobre el vendedor anterior",
6766
"ADDITIONAL_COMMENTS_PLACEHOLDER": "Introduce comentarios adicionales aquí",
@@ -74,6 +73,7 @@
7473
"SELLER_EMAIL_LABEL": "Correo electrónico del vendedor"
7574
},
7675
"CHECK_REVIEWS_FEEDBACK": {
76+
"CHECK_REVIEWS_NO_FEEDBACK_HEADER": "No hay reseñas para {seller_id}",
7777
"CHECK_REVIEWS_FEEDBACK_HEADER": "Lista de Reseñas dejadas para {seller_id}",
7878
"BY_REVIEWER": "Por {buyer_id}"
7979
},

messages/ewe-BJ.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@
5959
},
6060
"BUY_FROM_SELLER": {
6161
"BUY_FROM_SELLER_HEADER": "Xɔ le Adesɔviwo",
62-
"SELLER_DESCRIPTION_LABEL": "Adesɔ ɖe mɔkpla",
63-
"SELLER_SALE_ITEMS_LABEL": "Dzidzakpɔtɔ ɖe dze be dzidzakpɔtɔ na",
64-
"SELLER_ADDRESS_LOCATION_LABEL": "Ɖe le Adesɔviwo kple ɖe fɔlɔ",
62+
"SELLER_DETAILS_LABEL": "Nàƒé Wòkpɔ̃nɔ ƒé Nunya",
63+
"SELLER_ADDRESS_POSITION_LABEL": "Nàƒé Wòkpɔ̃nɔ ƒé Adrεs kple Nudɔla",
6564
"LEAVE_A_REVIEW_MESSAGE": "Vovɔ sɔlɔɖe",
6665
"FACE_SELECTION_REVIEW_MESSAGE": "Dzi le vavaŋuto ɖe ŋutɔ le wo ɖe wo dzidzakpɔtɔviwo dziwo",
6766
"ADDITIONAL_COMMENTS_PLACEHOLDER": "Xɔ le vavaŋuto ŋutɔ kple kple",
@@ -74,6 +73,7 @@
7473
"SELLER_EMAIL_LABEL": "Adesɔviwo email"
7574
},
7675
"CHECK_REVIEWS_FEEDBACK": {
76+
"CHECK_REVIEWS_NO_FEEDBACK_HEADER": "Mèkpɔ dzudzɔkpɔkpɔ ƒe {seller_id} o",
7777
"CHECK_REVIEWS_FEEDBACK_HEADER": "Ɖe le sɔlɔɖe ɖe doaɖe {seller_id}",
7878
"BY_REVIEWER": "Dze {buyer_id}"
7979
},

messages/hau-NG.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@
5959
},
6060
"BUY_FROM_SELLER": {
6161
"BUY_FROM_SELLER_HEADER": "Saya daga Mai Sayarwa",
62-
"SELLER_DESCRIPTION_LABEL": "Bayanin Mai Sayarwa",
63-
"SELLER_SALE_ITEMS_LABEL": "Abubuwan Masu siyarwa don siyarwa",
64-
"SELLER_ADDRESS_LOCATION_LABEL": "Adireshin Mai Siyarwa ko Wuri",
62+
"SELLER_DETAILS_LABEL": "Bayanin Mai Sayarwa",
63+
"SELLER_ADDRESS_POSITION_LABEL": "Adireshin Ko Matsayin Mai Sayarwa",
6564
"LEAVE_A_REVIEW_MESSAGE": "Bar bita",
6665
"FACE_SELECTION_REVIEW_MESSAGE": "Zaɓi fuskar da ke nuna yadda kuke ji game da mai siyarwa da ke sama",
6766
"ADDITIONAL_COMMENTS_PLACEHOLDER": "Shigar da karin sharhi a nan",
@@ -74,6 +73,7 @@
7473
"SELLER_EMAIL_LABEL": "Imel na Mai Sayarwa"
7574
},
7675
"CHECK_REVIEWS_FEEDBACK": {
76+
"CHECK_REVIEWS_NO_FEEDBACK_HEADER": "Babu bita don {seller_id}",
7777
"CHECK_REVIEWS_FEEDBACK_HEADER": "Jerin Ra'ayoyin da aka bari na {seller_id}",
7878
"BY_REVIEWER": "Ta {buyer_id}"
7979
},

messages/ko.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,8 @@
5959
},
6060
"BUY_FROM_SELLER": {
6161
"BUY_FROM_SELLER_HEADER": "판매자로부터 구매",
62-
"SELLER_DESCRIPTION_LABEL": "판매자 설명",
63-
"SELLER_SALE_ITEMS_LABEL": "판매자의 판매 항목",
64-
"SELLER_ADDRESS_LOCATION_LABEL": "판매자 주소 또는 위치",
62+
"SELLER_DETAILS_LABEL": "판매자 세부 정보",
63+
"SELLER_ADDRESS_POSITION_LABEL": "판매자 주소 또는 위치",
6564
"LEAVE_A_REVIEW_MESSAGE": "리뷰 남기기",
6665
"FACE_SELECTION_REVIEW_MESSAGE": "위 판매자에 대한 느낌을 나타내는 얼굴을 선택하세요",
6766
"ADDITIONAL_COMMENTS_PLACEHOLDER": "추가 의견을 입력하세요",
@@ -74,6 +73,7 @@
7473
"SELLER_EMAIL_LABEL": "판매자 이메일"
7574
},
7675
"CHECK_REVIEWS_FEEDBACK": {
76+
"CHECK_REVIEWS_NO_FEEDBACK_HEADER": "{seller_id}에 대한 리뷰가 없습니다",
7777
"CHECK_REVIEWS_FEEDBACK_HEADER": "{seller_id}에 대한 리뷰 목록",
7878
"BY_REVIEWER": "{buyer_id}에 의해"
7979
},

package-lock.json

+3-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export default function ReplyToReviewPage({
2929
searchParams,
3030
}: ReplyToReviewPageProps) {
3131
const HEADER = 'mb-5 font-bold text-lg md:text-2xl';
32+
const SUBHEADER = "font-bold mb-2";
3233

3334
const t = useTranslations();
3435
const router = useRouter();
@@ -84,7 +85,6 @@ export default function ReplyToReviewPage({
8485
return reaction;
8586
}
8687
};
87-
const SUBHEADER = "font-bold mb-2";
8888

8989
// loading condition
9090
if (loading) {

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

+28-51
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,34 @@
33
import { useTranslations } from 'next-intl';
44
import Image from 'next/image';
55
import Link from 'next/link';
6-
import { useRouter } from 'next/navigation';
76

87
import React, { useEffect, useState, useContext } from 'react';
98

109
import { AppContext } from '../../../../../../context/AppContextProvider';
11-
import TrustMeter from '@/components/shared/Review/TrustMeter';
12-
import EmojiPicker from '@/components/shared/Review/emojipicker';
13-
import { OutlineBtn } from '@/components/shared/Forms/Buttons/Buttons';
1410
import ConfirmDialog from '@/components/shared/confirm';
11+
import { OutlineBtn } from '@/components/shared/Forms/Buttons/Buttons';
12+
import EmojiPicker from '@/components/shared/Review/emojipicker';
13+
import TrustMeter from '@/components/shared/Review/TrustMeter';
14+
import ToggleCollapse from '@/components/shared/Seller/ToggleCollapse';
1515
import Skeleton from '@/components/skeleton/skeleton';
16-
import { fetchSingleSeller } from '@/services/sellerApi';
1716
import { ISeller, IUserSettings, IUser } from '@/constants/types';
18-
import ToggleCollapse from '@/components/shared/Seller/ToggleCollapse';
19-
import { fetchSellerSettings } from '@/services/userSettingsApi';
17+
import { fetchSingleSeller } from '@/services/sellerApi';
18+
import { fetchSingleUserSettings } from '@/services/userSettingsApi';
2019

2120
export default function Page({ params }: { params: { id: string } }) {
2221
const SUBHEADER = "font-bold mb-2";
2322

2423
const t = useTranslations();
25-
const router = useRouter();
2624

2725
const sellerId = params.id;
2826

2927
const [isSaveEnabled, setIsSaveEnabled] = useState(false);
3028
const [showConfirmDialog, setShowConfirmDialog] = useState(false);
3129
const [linkUrl, setLinkUrl] = useState('');
3230

33-
const [seller, setSeller] = useState<ISeller | null>(null);
31+
const [sellerShopInfo, setSellerShopInfo] = useState<ISeller | null>(null);
3432
const [sellerSettings, setSellerSettings] = useState<IUserSettings | null>(null);
35-
const [sellerUser, setSellerUser] = useState<IUser | null>(null);
33+
const [sellerInfo, setSellerInfo] = useState<IUser | null>(null);
3634
const [loading, setLoading] = useState<boolean>(true);
3735
const [error, setError] = useState<string | null>(null);
3836
const { currentUser, autoLoginUser } = useContext(AppContext);
@@ -46,18 +44,10 @@ export default function Page({ params }: { params: { id: string } }) {
4644

4745
const getSellerData = async () => {
4846
try {
49-
const data = await fetchSingleSeller(sellerId); //'testme'
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+
const data = await fetchSingleSeller(sellerId);
48+
setSellerShopInfo(data.sellerShopInfo);
49+
setSellerSettings(data.sellerSettings);
50+
setSellerInfo(data.sellerInfo);
6151
} catch (error) {
6252
setError('Error fetching seller data');
6353
} finally {
@@ -66,26 +56,15 @@ export default function Page({ params }: { params: { id: string } }) {
6656
};
6757

6858
const getSellerSettings = async () => {
69-
const settings = await fetchSellerSettings(sellerId);
59+
const settings = await fetchSingleUserSettings(sellerId);
7060
console.log("User settings:", settings);
71-
7261
};
7362

7463
getSellerData();
7564
getSellerSettings();
76-
7765

7866
}, []);
7967

80-
const handleNavigation = (route: string) => {
81-
if (isSaveEnabled) {
82-
setLinkUrl(route);
83-
setShowConfirmDialog(true);
84-
} else {
85-
router.push(`/${route}`);
86-
}
87-
};
88-
8968
const translateSellerCategory = (category: string): string => {
9069
switch (category) {
9170
case 'Pioneer':
@@ -109,69 +88,67 @@ export default function Page({ params }: { params: { id: string } }) {
10988
<div className="w-full md:w-[500px] md:mx-auto p-4">
11089
<h1 className="mb-5 text-center font-bold text-lg md:text-2xl">{t('SCREEN.BUY_FROM_SELLER.BUY_FROM_SELLER_HEADER')}</h1>
11190

112-
{seller && (<div>
91+
{sellerShopInfo && (<div>
11392
{/* Seller Profile */}
11493
<div className="flex gap-4 align-center mb-6 relative">
11594
<div className="rounded-[50%] w-[65px] h-[65px] relative">
116-
<Image alt="seller logo" src={seller.image} fill={true} className="rounded-[50%]" />
95+
<Image alt="seller logo" src={sellerShopInfo.image} fill={true} className="rounded-[50%]" />
11796
</div>
11897
<div className="my-auto">
119-
<h2 className="font-bold mb-2">{seller.name}</h2>
120-
<p className="text-sm">{translateSellerCategory(seller.seller_type)}</p>
98+
<h2 className="font-bold mb-2">{sellerShopInfo.name}</h2>
99+
<p className="text-sm">{translateSellerCategory(sellerShopInfo.seller_type)}</p>
121100
</div>
122101
</div>
123102

124-
{/* Seller Description */}
125-
<h2 className={SUBHEADER}>{t('Seller Details')}</h2>
103+
{/* Seller Details/ Description */}
104+
<h2 className={SUBHEADER}>{t('SCREEN.BUY_FROM_SELLER.SELLER_DETAILS_LABEL')}</h2>
126105
<div className="seller_item_container mb-5">
127-
<p className="mb-3">{seller.description}</p>
106+
<p className="mb-3">{sellerShopInfo.description}</p>
128107
</div>
129108

130-
{/* Seller Location */}
131-
<h2 className={SUBHEADER}>{t('Seller Address or Whereabout')}</h2>
109+
{/* Seller Address/ Position */}
110+
<h2 className={SUBHEADER}>{t('SCREEN.BUY_FROM_SELLER.SELLER_ADDRESS_POSITION_LABEL')}</h2>
132111
<div className="seller_item_container mb-5">
133-
<p className="mb-3">{seller.address}</p>
112+
<p className="mb-3">{sellerShopInfo.address}</p>
134113
</div>
135114

136115
{/* Summary of Reviews */}
137116
<div className="mb-7 mt-5">
138117
<h2 className={SUBHEADER}>{t('SCREEN.BUY_FROM_SELLER.REVIEWS_SUMMARY_LABEL')}</h2>
139118
{/* Trust-O-meter */}
140119
<div>
141-
<TrustMeter ratings={seller.trust_meter_rating} />
120+
<TrustMeter ratings={sellerShopInfo.trust_meter_rating} />
142121
</div>
143122
<div className="flex items-center justify-between">
144123
<p className="text-sm">
145-
{t('SCREEN.BUY_FROM_SELLER.REVIEWS_SCORE_MESSAGE', {seller_review_rating: seller.average_rating.$numberDecimal})}
124+
{t('SCREEN.BUY_FROM_SELLER.REVIEWS_SCORE_MESSAGE', {seller_review_rating: sellerShopInfo.average_rating.$numberDecimal})}
146125
</p>
147-
<Link href={`/seller/reviews/${sellerId}?buyer=true&seller_name=${seller.name}`}>
126+
<Link href={`/seller/reviews/${sellerId}?buyer=true&seller_name=${sellerShopInfo.name}`}>
148127
<OutlineBtn label={t('SHARED.CHECK_REVIEWS')} />
149128
</Link>
150129
</div>
151130
</div>
152131

153132
<ToggleCollapse
154133
header={t('SCREEN.BUY_FROM_SELLER.LEAVE_A_REVIEW_MESSAGE')}>
155-
{/* <h2 className={SUBHEADER}>{t('SCREEN.BUY_FROM_SELLER.LEAVE_A_REVIEW_MESSAGE')}</h2> */}
156134
<div>
157135
<EmojiPicker sellerId={sellerId} setIsSaveEnabled={setIsSaveEnabled} currentUser={currentUser} />
158136
</div>
159137
</ToggleCollapse>
160-
161138

162139
<ToggleCollapse
163140
header={t('SCREEN.BUY_FROM_SELLER.SELLER_CONTACT_DETAILS_LABEL')}>
164141
<div className="text-sm mb-3">
165142
<span className="font-bold">
166143
{t('Username') + ': '}
167144
</span>
168-
<span>{sellerUser ? sellerUser.user_name : ''}</span>
145+
<span>{sellerInfo ? sellerInfo.user_name : ''}</span>
169146
</div>
170147
<div className="text-sm mb-3">
171148
<span className="font-bold">
172149
{t('Pioneer Name') + ': '}
173150
</span>
174-
<span>{sellerUser ? sellerUser.pi_username: ''}</span>
151+
<span>{sellerInfo ? sellerInfo.pi_username: ''}</span>
175152
</div>
176153
<div className="text-sm mb-3">
177154
<span className="font-bold">

src/services/userSettingsApi.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import axiosClient from "@/config/client";
22
import { IUserSettings } from "@/constants/types";
33
import { handleAxiosError } from "@/util/error";
44

5-
// Fetch a single pioneer user settings
5+
// Fetch the user settings of the user
66
export const fetchUserSettings = async () => {
77
try {
88
const response = await axiosClient.post(`/user-preferences/me`);
@@ -18,14 +18,14 @@ export const fetchUserSettings = async () => {
1818
}
1919
};
2020

21-
// Create new or update existing user settings
22-
export const createUserSettings = async (formData: IUserSettings) => {
21+
// Fetch a single pioneer user settings
22+
export const fetchSingleUserSettings = async (sellerId: String) => {
2323
try {
24-
const response = await axiosClient.put('/user-preferences/add', {json: JSON.stringify(formData)});
24+
const response = await axiosClient.get(`/user-preferences/${sellerId}`);
2525
if (response.status === 200) {
2626
return response.data;
2727
} else {
28-
console.error(`Create user settings failed: ${response.status}`);
28+
console.error(`Fetch seller settings failed: ${response.status}`);
2929
return null;
3030
}
3131
} catch (error: any) {
@@ -34,14 +34,14 @@ export const createUserSettings = async (formData: IUserSettings) => {
3434
}
3535
};
3636

37-
// Fetch a single pioneer user settings
38-
export const fetchSellerSettings = async (sellerId: String) => {
37+
// Create new or update existing user settings
38+
export const createUserSettings = async (formData: IUserSettings) => {
3939
try {
40-
const response = await axiosClient.post(`/user-preferences/${sellerId}`);
40+
const response = await axiosClient.put('/user-preferences/add', {json: JSON.stringify(formData)});
4141
if (response.status === 200) {
4242
return response.data;
4343
} else {
44-
console.error(`Fetch seller settings failed: ${response.status}`);
44+
console.error(`Create user settings failed: ${response.status}`);
4545
return null;
4646
}
4747
} catch (error: any) {

0 commit comments

Comments
 (0)