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({
|
const verifyOtpMutation = useMutation({
|
||||||
mutationFn: verifyOtpService,
|
mutationFn: verifyOtpService,
|
||||||
|
|
||||||
onSuccess: async(data) => {
|
onSuccess: async (data) => {
|
||||||
setSubmitLoading(false);
|
setSubmitLoading(false);
|
||||||
if (data.resultType !== 0) {
|
if (data.resultType !== 0) {
|
||||||
toast.error(data.message);
|
toast.error(data.message);
|
||||||
|
|
@ -99,6 +99,7 @@ export function LoginPage() {
|
||||||
},
|
},
|
||||||
|
|
||||||
onError: () => {
|
onError: () => {
|
||||||
|
|
||||||
setSubmitLoading(false);
|
setSubmitLoading(false);
|
||||||
toast.error("خطا در تایید کد");
|
toast.error("خطا در تایید کد");
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ export function CampaignsPage() {
|
||||||
switch (activeTab) {
|
switch (activeTab) {
|
||||||
case "my":
|
case "my":
|
||||||
filtered = campaigns.filter(
|
filtered = campaigns.filter(
|
||||||
(c) => Number(c.user_id) === Number(user.WorkflowID)
|
(c) => Number(c.user_id) === Number(user.username)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case "منتخب":
|
case "منتخب":
|
||||||
|
|
@ -55,7 +55,7 @@ export function CampaignsPage() {
|
||||||
}
|
}
|
||||||
setCurrentCampaign(filtered);
|
setCurrentCampaign(filtered);
|
||||||
}
|
}
|
||||||
}, [campaigns, activeTab]); // Added activeTab to dependencies
|
}, [campaigns, activeTab]);
|
||||||
|
|
||||||
const tabs: { value: CampaignTab; label: string }[] = [
|
const tabs: { value: CampaignTab; label: string }[] = [
|
||||||
{ value: "فعال", label: "تمام کارزارها" },
|
{ value: "فعال", label: "تمام کارزارها" },
|
||||||
|
|
@ -70,7 +70,7 @@ export function CampaignsPage() {
|
||||||
setActiveTab("فعال");
|
setActiveTab("فعال");
|
||||||
|
|
||||||
if (query === "") {
|
if (query === "") {
|
||||||
handleTabChange(activeTab, campaigns);
|
handleTabChange(activeTab);
|
||||||
} else {
|
} else {
|
||||||
const filteredCampaigns = campaigns.filter((campaign) =>
|
const filteredCampaigns = campaigns.filter((campaign) =>
|
||||||
campaign.title.toLowerCase().includes(query.toLowerCase())
|
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);
|
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("");
|
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) => {
|
const handleJoin = (campaign: Campaign) => {
|
||||||
|
|
@ -199,7 +200,7 @@ export function CampaignsPage() {
|
||||||
<main>
|
<main>
|
||||||
{isLoading ? (
|
{isLoading ? (
|
||||||
renderSkeleton()
|
renderSkeleton()
|
||||||
) : currentCampaign.length > 0 ? (
|
) : currentCampaign?.length > 0 ? (
|
||||||
<ul className="space-y-4">
|
<ul className="space-y-4">
|
||||||
{currentCampaign.map((campaign) => (
|
{currentCampaign.map((campaign) => (
|
||||||
<li
|
<li
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,10 @@ export function RegisterPage() {
|
||||||
newErrors.base = "پایه انتخابشده با مقطع متوسطه دوم سازگار نیست";
|
newErrors.base = "پایه انتخابشده با مقطع متوسطه دوم سازگار نیست";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!formData.image) {
|
||||||
|
newErrors.image = "فیلد پروفایل الزامی است."
|
||||||
|
}
|
||||||
|
|
||||||
setErrors(newErrors);
|
setErrors(newErrors);
|
||||||
return Object.keys(newErrors).length === 0;
|
return Object.keys(newErrors).length === 0;
|
||||||
};
|
};
|
||||||
|
|
@ -361,6 +365,7 @@ export function RegisterPage() {
|
||||||
placeholder="کد مدرسه خود را وارد کنید"
|
placeholder="کد مدرسه خود را وارد کنید"
|
||||||
value={formData.school_code || ""}
|
value={formData.school_code || ""}
|
||||||
onChange={handleInputChange}
|
onChange={handleInputChange}
|
||||||
|
error={errors.school_code}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -375,6 +380,7 @@ export function RegisterPage() {
|
||||||
<ImageUploader
|
<ImageUploader
|
||||||
label="عکس پروفایل "
|
label="عکس پروفایل "
|
||||||
previewImage={previewImage}
|
previewImage={previewImage}
|
||||||
|
error={errors.image}
|
||||||
onImageChange={(file) => {
|
onImageChange={(file) => {
|
||||||
if (!file) {
|
if (!file) {
|
||||||
setPreviewImage("");
|
setPreviewImage("");
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,9 @@ export const fetchUserProfile = async () => {
|
||||||
|
|
||||||
const res = await api.post(API_ADDRESS.select, query);
|
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];
|
const user = JSON.parse(res.data.data)[0];
|
||||||
|
|
@ -46,7 +47,7 @@ export const fetchUserProfile = async () => {
|
||||||
schoolCode: user?.school_code,
|
schoolCode: user?.school_code,
|
||||||
invitor: user?.invitor,
|
invitor: user?.invitor,
|
||||||
nationalcode: user?.nationalcode,
|
nationalcode: user?.nationalcode,
|
||||||
group: user.user_group_title
|
group: user?.user_group_title
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user