Skip to content

Commit c3ec662

Browse files
committed
feat: refactor leader fetching logic to improve data retrieval and update leaders list after adding a new leader
1 parent 87e5102 commit c3ec662

1 file changed

Lines changed: 50 additions & 43 deletions

File tree

app/admin/sig-leader/[sigID]/page.tsx

Lines changed: 50 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,48 @@ export default function AdminPage({ params }: { params: { sigID: string } }) {
1616
const [sigData, setSigData] = useState<any>({});
1717
const [leaders, setLeaders] = useState<any[]>([]);
1818

19+
// 將獲取 leaders 邏輯抽離到單獨的函數中,以便在新增後重新調用
20+
const fetchLeaders = async () => {
21+
try {
22+
const response = await sigAPI.getSigData(params.sigID);
23+
setSigData(response);
24+
25+
if (response.leader && response.leader.length > 0) {
26+
setLeaders([]);
27+
28+
const addedLeaderIds = new Set();
29+
30+
await Promise.all(
31+
response.leader.map(async (leaderId: string) => {
32+
try {
33+
if (addedLeaderIds.has(leaderId)) {
34+
return;
35+
}
36+
37+
const res = await sigAPI.getUserData(leaderId);
38+
39+
if (res) {
40+
addedLeaderIds.add(leaderId);
41+
setLeaders(prev => {
42+
const isDuplicate = prev.some(leader => leader._id === res._id);
43+
44+
if (!isDuplicate) {
45+
return [...prev, res];
46+
}
47+
return prev;
48+
});
49+
}
50+
} catch (error) {
51+
console.error(`Error fetching data for leader ${leaderId}:`, error);
52+
}
53+
})
54+
);
55+
}
56+
} catch (error: any) {
57+
console.error(error.message);
58+
}
59+
};
60+
1961
function addLeader() {
2062
Swal.fire({
2163
title: "新增 Leader",
@@ -64,6 +106,8 @@ export default function AdminPage({ params }: { params: { sigID: string } }) {
64106
confirmButton: "focus:outline-none"
65107
}
66108
});
109+
// 新增成功後重新獲取 Leaders 列表
110+
fetchLeaders();
67111
} else if (data.status === 4032) {
68112
Swal.fire({
69113
title: "新增失敗!",
@@ -120,53 +164,16 @@ export default function AdminPage({ params }: { params: { sigID: string } }) {
120164
cancelButtonText: "取消"
121165
}).then(async (result) => {
122166
if (result.isConfirmed) {
123-
124167
console.log(leaderId);
168+
// 如果要實現刪除後也刷新列表,可以在這裡添加 API 呼叫和刷新邏輯
169+
// 刪除成功後調用 fetchLeaders();
125170
}
126171
});
127172
}
128173

129174
useEffect(() => {
130-
(async () => {
131-
try {
132-
const response = await sigAPI.getSigData(params.sigID);
133-
setSigData(response);
134-
135-
if (response.leader && response.leader.length > 0) {
136-
setLeaders([]);
137-
138-
const addedLeaderIds = new Set();
139-
140-
await Promise.all(
141-
response.leader.map(async (leaderId: string) => {
142-
try {
143-
if (addedLeaderIds.has(leaderId)) {
144-
return;
145-
}
146-
147-
const res = await sigAPI.getUserData(leaderId);
148-
149-
if (res) {
150-
addedLeaderIds.add(leaderId);
151-
setLeaders(prev => {
152-
const isDuplicate = prev.some(leader => leader._id === res._id);
153-
154-
if (!isDuplicate) {
155-
return [...prev, res];
156-
}
157-
return prev;
158-
});
159-
}
160-
} catch (error) {
161-
console.error(`Error fetching data for leader ${leaderId}:`, error);
162-
}
163-
})
164-
);
165-
}
166-
} catch (error: any) {
167-
console.error(error.message);
168-
}
169-
})();
175+
// 初始化時獲取數據
176+
fetchLeaders();
170177
}, [params.sigID]);
171178

172179
if (userAccount.isLoading === true) {
@@ -311,7 +318,7 @@ export default function AdminPage({ params }: { params: { sigID: string } }) {
311318
</table>
312319
</div>
313320
</div>
314-
</div >
315-
</div >
321+
</div>
322+
</div>
316323
);
317324
}

0 commit comments

Comments
 (0)