feat: refactor campaigns filtering and add profile validation
- Change user filter from WorkflowID to username in campaigns - Simplify handleTabChange by removing inline filtering logic - Add null check for currentCampaign length - Add required validation for profile image field - Add error display for school_code and image fields - Minor formatting fixes in login page
This commit is contained in:
parent
213e865aab
commit
0cd6d7fd3f
|
|
@ -73,7 +73,7 @@ export function LoginPage() {
|
|||
const verifyOtpMutation = useMutation({
|
||||
mutationFn: verifyOtpService,
|
||||
|
||||
onSuccess: async(data) => {
|
||||
onSuccess: async (data) => {
|
||||
setSubmitLoading(false);
|
||||
if (data.resultType !== 0) {
|
||||
toast.error(data.message);
|
||||
|
|
@ -99,6 +99,7 @@ export function LoginPage() {
|
|||
},
|
||||
|
||||
onError: () => {
|
||||
|
||||
setSubmitLoading(false);
|
||||
toast.error("خطا در تایید کد");
|
||||
},
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ export function CampaignsPage() {
|
|||
switch (activeTab) {
|
||||
case "my":
|
||||
filtered = campaigns.filter(
|
||||
(c) => Number(c.user_id) === Number(user.WorkflowID)
|
||||
(c) => Number(c.user_id) === Number(user.username)
|
||||
);
|
||||
break;
|
||||
case "منتخب":
|
||||
|
|
@ -55,7 +55,7 @@ export function CampaignsPage() {
|
|||
}
|
||||
setCurrentCampaign(filtered);
|
||||
}
|
||||
}, [campaigns, activeTab]); // Added activeTab to dependencies
|
||||
}, [campaigns, activeTab]);
|
||||
|
||||
const tabs: { value: CampaignTab; label: string }[] = [
|
||||
{ value: "فعال", label: "تمام کارزارها" },
|
||||
|
|
@ -70,7 +70,7 @@ export function CampaignsPage() {
|
|||
setActiveTab("فعال");
|
||||
|
||||
if (query === "") {
|
||||
handleTabChange(activeTab, campaigns);
|
||||
handleTabChange(activeTab);
|
||||
} else {
|
||||
const filteredCampaigns = campaigns.filter((campaign) =>
|
||||
campaign.title.toLowerCase().includes(query.toLowerCase())
|
||||
|
|
@ -79,33 +79,34 @@ export function CampaignsPage() {
|
|||
}
|
||||
};
|
||||
|
||||
const handleTabChange = (tab: CampaignTab, campaignData = campaigns) => {
|
||||
const handleTabChange = (tab: CampaignTab) => {
|
||||
setActiveTab(tab);
|
||||
const user = userInfoService.getUserInfo();
|
||||
let filtered = campaignData;
|
||||
|
||||
switch (tab) {
|
||||
case "my":
|
||||
filtered = campaignData.filter(
|
||||
(c) => Number(c.user_id) === Number(user.WorkflowID)
|
||||
);
|
||||
break;
|
||||
case "منتخب":
|
||||
filtered = campaignData.filter((c) => c.status === "منتخب");
|
||||
break;
|
||||
|
||||
case "group":
|
||||
filtered = campaignData.filter(
|
||||
(c) => c.school_code === user.school_code
|
||||
);
|
||||
break;
|
||||
case "فعال":
|
||||
default:
|
||||
filtered = campaignData;
|
||||
break;
|
||||
}
|
||||
setCurrentCampaign(filtered);
|
||||
setSearchQuery("");
|
||||
// const user = userInfoService.getUserInfo();
|
||||
// let filtered = campaignData;
|
||||
// switch (tab) {
|
||||
// case "my":
|
||||
// filtered = campaignData.filter(
|
||||
// (c) => Number(c.user_id) === Number(user.username)
|
||||
// );
|
||||
// break;
|
||||
// case "منتخب":
|
||||
// filtered = campaignData.filter((c) => c.status === "منتخب");
|
||||
// break;
|
||||
|
||||
// case "group":
|
||||
// filtered = campaignData.filter(
|
||||
// (c) => c.school_code === user.school_code
|
||||
// );
|
||||
// break;
|
||||
// case "فعال":
|
||||
// default:
|
||||
// filtered = campaignData;
|
||||
// break;
|
||||
// }
|
||||
// setSearchQuery("");
|
||||
// debugger
|
||||
// setCurrentCampaign(filtered);
|
||||
};
|
||||
|
||||
const handleJoin = (campaign: Campaign) => {
|
||||
|
|
@ -199,7 +200,7 @@ export function CampaignsPage() {
|
|||
<main>
|
||||
{isLoading ? (
|
||||
renderSkeleton()
|
||||
) : currentCampaign.length > 0 ? (
|
||||
) : currentCampaign?.length > 0 ? (
|
||||
<ul className="space-y-4">
|
||||
{currentCampaign.map((campaign) => (
|
||||
<li
|
||||
|
|
|
|||
|
|
@ -121,6 +121,10 @@ export function RegisterPage() {
|
|||
newErrors.base = "پایه انتخابشده با مقطع متوسطه دوم سازگار نیست";
|
||||
}
|
||||
|
||||
if (!formData.image) {
|
||||
newErrors.image = "فیلد پروفایل الزامی است."
|
||||
}
|
||||
|
||||
setErrors(newErrors);
|
||||
return Object.keys(newErrors).length === 0;
|
||||
};
|
||||
|
|
@ -361,6 +365,7 @@ export function RegisterPage() {
|
|||
placeholder="کد مدرسه خود را وارد کنید"
|
||||
value={formData.school_code || ""}
|
||||
onChange={handleInputChange}
|
||||
error={errors.school_code}
|
||||
/>
|
||||
|
||||
|
||||
|
|
@ -375,6 +380,7 @@ export function RegisterPage() {
|
|||
<ImageUploader
|
||||
label="عکس پروفایل "
|
||||
previewImage={previewImage}
|
||||
error={errors.image}
|
||||
onImageChange={(file) => {
|
||||
if (!file) {
|
||||
setPreviewImage("");
|
||||
|
|
|
|||
|
|
@ -28,8 +28,9 @@ export const fetchUserProfile = async () => {
|
|||
|
||||
const res = await api.post(API_ADDRESS.select, query);
|
||||
|
||||
if (!res.data || res.data.length === 0) {
|
||||
throw new Error("User not found");
|
||||
|
||||
if (res.data.resultType !== 0) {
|
||||
throw new Error("خطا در دریافت کاربر");
|
||||
}
|
||||
|
||||
const user = JSON.parse(res.data.data)[0];
|
||||
|
|
@ -46,7 +47,7 @@ export const fetchUserProfile = async () => {
|
|||
schoolCode: user?.school_code,
|
||||
invitor: user?.invitor,
|
||||
nationalcode: user?.nationalcode,
|
||||
group: user.user_group_title
|
||||
group: user?.user_group_title
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user