Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/web-dashboard/src/pages/AdminCreateRelease.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export default function AdminCreateRelease() {
navigate('/releases');
} catch (err) {
toast.dismiss(loadToast);
toast.error(err.response?.data?.error || "Failed to publish release.");
toast.error(err.response?.data?.message || err.response?.data?.error || "Failed to publish release.");
} finally {
setLoading(false);
}
Expand Down
6 changes: 3 additions & 3 deletions apps/web-dashboard/src/pages/Auth.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ export default function Auth() {
setUsers(prev => normalizeUsersResponse(prev).filter(u => u._id !== userId));
toast.success('User deleted');
} catch (err) {
toast.error(err.response?.data?.error || 'Failed to delete user');
toast.error(err.response?.data?.message || err.response?.data?.error || 'Failed to delete user');
}
};

Expand All @@ -171,7 +171,7 @@ export default function Auth() {
setResetPasswordUser(null);
setNewPassword('');
} catch (err) {
toast.error(err.response?.data?.error || 'Failed to reset password');
toast.error(err.response?.data?.message || err.response?.data?.error || 'Failed to reset password');
} finally {
setIsResetLoading(false);
}
Expand Down Expand Up @@ -228,7 +228,7 @@ export default function Auth() {
setIsAddModalOpen(false);
setEditingUser(null);
} catch (err) {
toast.error(err.response?.data?.error || 'Failed to save user');
toast.error(err.response?.data?.message || err.response?.data?.error || 'Failed to save user');
}
}}
fields={[
Expand Down
2 changes: 1 addition & 1 deletion apps/web-dashboard/src/pages/CreateCollection.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,7 @@ function CreateCollection() {
completeStep('create_collection');
navigate(`/project/${projectId}/database`);
} catch (err) {
const errMsg = err.response?.data?.error;
const errMsg = err.response?.data?.message || err.response?.data?.error;
toast.error(typeof errMsg === 'string' ? errMsg : JSON.stringify(errMsg) || "Failed to create collection");
} finally {
setLoading(false);
Expand Down
2 changes: 1 addition & 1 deletion apps/web-dashboard/src/pages/CreateProject.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ function CreateProject() {
completeStep('create_project');
completeStep('get_api_key');
} catch (err) {
const errorMsg = err.response?.data?.error || err.response?.data?.message || "Failed to create project";
const errorMsg = err.response?.data?.message || err.response?.data?.error || err.response?.data?.message || "Failed to create project";
toast.error(typeof errorMsg === 'object' ? "Validation Error" : errorMsg);
} finally {
setLoading(false);
Expand Down
6 changes: 3 additions & 3 deletions apps/web-dashboard/src/pages/OtpVerification.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ function OtpVerification() {
toast.promise(sendOtpPromise, {
loading: 'Sending OTP...',
success: 'OTP sent to your email!',
error: (err) => err.response?.data?.error || 'Failed to send OTP'
error: (err) => err.response?.data?.message || err.response?.data?.error || 'Failed to send OTP'
});
}
}, [email, navigate, user, authLoading]);
Expand All @@ -63,7 +63,7 @@ function OtpVerification() {
navigate('/dashboard');
} catch (err) {
toast.dismiss(loadingToast);
toast.error(err.response?.data?.error || 'Verification failed');
toast.error(err.response?.data?.message || err.response?.data?.error || 'Verification failed');
}
};

Expand All @@ -78,7 +78,7 @@ function OtpVerification() {
setCanResend(false);
} catch (err) {
toast.dismiss(loadingToast);
toast.error(err.response?.data?.error || 'Failed to send OTP');
toast.error(err.response?.data?.message || err.response?.data?.error || 'Failed to send OTP');
}
};

Expand Down
12 changes: 6 additions & 6 deletions apps/web-dashboard/src/pages/ProjectSettings.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ export default function ProjectSettings() {
if (payload.resendFromEmail !== undefined) updates.resendFromEmail = payload.resendFromEmail;
setProject((prev) => (prev ? { ...prev, ...updates } : prev));
} catch (err) {
toast.error(err.response?.data?.error || "Failed to save mail settings");
toast.error(err.response?.data?.message || err.response?.data?.error || "Failed to save mail settings");
} finally {
setResendKeyLoading(false);
}
Expand Down Expand Up @@ -824,7 +824,7 @@ function DatabaseConfigForm({ project, projectId, onProjectUpdate }) {
setShowForm(false);
setDbUri("");
} catch (err) {
const errorMsg = err.response?.data?.error || "Failed to update DB config";
const errorMsg = err.response?.data?.message || err.response?.data?.error || "Failed to update DB config";
if (errorMsg.includes("whitelist Server IP")) {
toast.error(<div><b>Access Denied!</b><br />{errorMsg}</div>, { duration: 6000 });
} else {
Expand All @@ -842,7 +842,7 @@ function DatabaseConfigForm({ project, projectId, onProjectUpdate }) {
onProjectUpdate(prev => ({ ...prev, resources: { ...prev.resources, db: { ...prev.resources.db, isExternal: false } } }));
setShowForm(true);
} catch (err) {
toast.error(err.response?.data?.error || "Failed to remove DB config");
toast.error(err.response?.data?.message || err.response?.data?.error || "Failed to remove DB config");
} finally {
setLoading(false);
}
Expand Down Expand Up @@ -953,7 +953,7 @@ function StorageConfigForm({ project, projectId, onProjectUpdate }) {
setShowForm(false);
setConfig(INITIAL_STORAGE_CONFIG);
} catch (err) {
toast.error(err.response?.data?.error || "Failed to update Storage config");
toast.error(err.response?.data?.message || err.response?.data?.error || "Failed to update Storage config");
} finally {
setLoading(false);
}
Expand All @@ -968,7 +968,7 @@ function StorageConfigForm({ project, projectId, onProjectUpdate }) {
setConfig(INITIAL_STORAGE_CONFIG);
setShowForm(true);
} catch (err) {
toast.error(err.response?.data?.error || "Failed to remove Storage config");
toast.error(err.response?.data?.message || err.response?.data?.error || "Failed to remove Storage config");
} finally {
setLoading(false);
}
Expand Down Expand Up @@ -1105,7 +1105,7 @@ function AllowedDomainsForm({ project, projectId, onProjectUpdate }) {
setDomains(updatedDomains);
onProjectUpdate((prev) => ({ ...prev, allowedDomains: updatedDomains }));
} catch (err) {
toast.error(err.response?.data?.error || "Failed to update allowed domains");
toast.error(err.response?.data?.message || err.response?.data?.error || "Failed to update allowed domains");
} finally {
setLoading(false);
}
Expand Down
4 changes: 2 additions & 2 deletions apps/web-dashboard/src/pages/Settings.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ export default function Settings() {
toast.success("Password updated!");
setPassData({ currentPassword: '', newPassword: '' });
} catch (err) {
toast.error(err.response?.data || "Failed to update password");
toast.error(err.response?.data?.message || err.response?.data?.error || "Failed to update password");
} finally {
setLoadingPass(false);
}
Expand All @@ -46,7 +46,7 @@ export default function Settings() {
toast.success("Account deleted. Goodbye!");
logout(); // Log user out immediately
} catch (err) {
toast.error(err.response?.data || "Failed to delete account");
toast.error(err.response?.data?.message || err.response?.data?.error || "Failed to delete account");
setShowDeleteModal(false); // Close modal on error so user can retry
} finally {
setLoadingDelete(false);
Expand Down
12 changes: 10 additions & 2 deletions apps/web-dashboard/src/pages/Webhooks.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ import {
XCircle, Clock, RefreshCw, Eye, ChevronDown, ChevronUp, Copy
} from 'lucide-react';

const normalizeError = (val, defaultMsg) => {
const msg = val?.response?.data?.message || val?.response?.data?.error || val?.response?.data?.details?.[0]?.message || defaultMsg;
if (typeof msg === 'string') return msg;
if (Array.isArray(msg)) return msg.map(m => typeof m === 'string' ? m : JSON.stringify(m)).join(', ');
if (msg && typeof msg === 'object') return JSON.stringify(msg);
return String(msg);
};

export default function Webhooks() {
const { projectId } = useParams();

Expand Down Expand Up @@ -143,7 +151,7 @@ export default function Webhooks() {
closeModal();
fetchData();
} catch (err) {
const msg = err.response?.data?.error || err.response?.data?.details?.[0]?.message || 'Failed to save webhook';
const msg = normalizeError(err, 'Failed to save webhook');
toast.error(msg);
} finally {
setIsSaving(false);
Expand Down Expand Up @@ -172,7 +180,7 @@ export default function Webhooks() {
setTestResult({
webhookId: webhook._id,
success: false,
error: err.response?.data?.error || 'Test failed'
error: normalizeError(err, 'Test failed')
});
} finally {
setTestingWebhookId(null);
Expand Down
3 changes: 1 addition & 2 deletions apps/web-dashboard/src/utils/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,7 @@ api.interceptors.response.use(
// 403: Show upgrade modal if it's a plan limit error
if (error.response?.status === 403) {
const message = (
error.response?.data?.message ||
error.response?.data?.error ||
error.response?.data?.message || error.response?.data?.error ||
''
).toLowerCase();

Expand Down
Loading