Thêm tính năng pending khi một thành viên thêm một người khác vào

This commit is contained in:
2026-06-14 20:22:37 +07:00
parent 914a9cf243
commit 8ff09eeeaf
24 changed files with 945 additions and 129 deletions
+72 -3
View File
@@ -65,7 +65,13 @@ export const useTourStore = create((set, get) => ({
},
body: JSON.stringify(tourData),
});
return await response.json();
if (!response.ok) {
const data = await response.json().catch(() => ({}));
throw new Error(data.message || data.error || 'Lỗi khi tạo Tour');
}
const tour = await response.json();
await get().fetchPublicTours();
return tour;
},
updateTour: async (id, data) => {
const API_BASE = `http://${window.location.hostname}:3001`;
@@ -266,8 +272,71 @@ export const useTourStore = create((set, get) => ({
},
body: JSON.stringify(member),
});
if (!response.ok)
throw new Error('Lỗi khi thêm thành viên');
if (!response.ok) {
const data = await response.json().catch(() => ({}));
throw new Error(data.message || data.error || 'Lỗi khi thêm thành viên');
}
const { currentTour } = get();
if (currentTour)
get().fetchTour(currentTour.id);
},
createJoinRequest: async (tourId, userId) => {
const API_BASE = `http://${window.location.hostname}:3001`;
const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/join-requests`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${localStorage.getItem('token')}`
},
body: JSON.stringify({ userId }),
});
if (!response.ok) {
const data = await response.json().catch(() => ({}));
throw new Error(data.message || data.error || 'Lỗi khi tạo yêu cầu tham gia');
}
return response.json();
},
fetchJoinRequests: async (tourId) => {
const API_BASE = `http://${window.location.hostname}:3001`;
const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/join-requests`, {
headers: {
Authorization: `Bearer ${localStorage.getItem('token')}`
}
});
if (!response.ok) {
const data = await response.json().catch(() => ({}));
throw new Error(data.message || data.error || 'Lỗi khi tải yêu cầu tham gia');
}
return response.json();
},
acceptJoinRequest: async (tourId, requestId) => {
const API_BASE = `http://${window.location.hostname}:3001`;
const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/join-requests/${requestId}/accept`, {
method: 'POST',
headers: {
Authorization: `Bearer ${localStorage.getItem('token')}`
}
});
if (!response.ok) {
const data = await response.json().catch(() => ({}));
throw new Error(data.message || data.error || 'Lỗi khi chấp nhận yêu cầu');
}
const { currentTour } = get();
if (currentTour)
get().fetchTour(currentTour.id);
},
rejectJoinRequest: async (tourId, requestId) => {
const API_BASE = `http://${window.location.hostname}:3001`;
const response = await fetch(`${API_BASE}/api/v1/tours/${tourId}/join-requests/${requestId}/reject`, {
method: 'POST',
headers: {
Authorization: `Bearer ${localStorage.getItem('token')}`
}
});
if (!response.ok) {
const data = await response.json().catch(() => ({}));
throw new Error(data.message || data.error || 'Lỗi khi từ chối yêu cầu');
}
const { currentTour } = get();
if (currentTour)
get().fetchTour(currentTour.id);