mirror of
https://github.com/freedbygrace/DynamoDNS.git
synced 2026-08-31 20:58:05 +00:00
Enhance DNS record management by adding duplicate record checks and a toggle for active status.
Replit-Commit-Author: Agent Replit-Commit-Session-Id: 9111ef36-26c8-4085-84ca-a35dc1fec1b5 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7083d608-d6d3-4a6a-9a27-6286c5109627/8348f842-6af8-42eb-b03c-649dc093ed05.jpg
This commit is contained in:
@@ -156,7 +156,25 @@ export function DomainDetails({ domain, onBack }: DomainDetailsProps) {
|
|||||||
providerId: domain.providerId
|
providerId: domain.providerId
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log("Adding record:", recordData);
|
||||||
|
|
||||||
|
// Check if there are duplicate records before adding
|
||||||
|
const potentialDuplicate = records.find(r =>
|
||||||
|
r.name === recordData.name &&
|
||||||
|
r.type === recordData.type
|
||||||
|
);
|
||||||
|
|
||||||
|
if (potentialDuplicate) {
|
||||||
|
throw new Error(`A record with name "${recordData.name}" and type "${recordData.type}" already exists. Please use a different name or type.`);
|
||||||
|
}
|
||||||
|
|
||||||
const res = await apiRequest("POST", "/api/dns-records", recordData);
|
const res = await apiRequest("POST", "/api/dns-records", recordData);
|
||||||
|
|
||||||
|
if (!res.ok) {
|
||||||
|
const errorData = await res.json();
|
||||||
|
throw new Error(errorData.message || "Failed to add record");
|
||||||
|
}
|
||||||
|
|
||||||
return await res.json();
|
return await res.json();
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
@@ -169,9 +187,10 @@ export function DomainDetails({ domain, onBack }: DomainDetailsProps) {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
onError: (error) => {
|
onError: (error) => {
|
||||||
|
console.error("Add record error:", error);
|
||||||
toast({
|
toast({
|
||||||
title: "Failed to add record",
|
title: "Failed to add record",
|
||||||
description: error.message,
|
description: error instanceof Error ? error.message : "Unknown error occurred",
|
||||||
variant: "destructive",
|
variant: "destructive",
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -185,10 +204,24 @@ export function DomainDetails({ domain, onBack }: DomainDetailsProps) {
|
|||||||
// Always use domain's provider for the record
|
// Always use domain's provider for the record
|
||||||
const updatedData = {
|
const updatedData = {
|
||||||
...updateData,
|
...updateData,
|
||||||
providerId: domain.providerId
|
domainId: domain.id, // Make sure domainId is included
|
||||||
|
providerId: domain.providerId // Always use domain's provider
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log("Updating record:", id, "with data:", updatedData);
|
console.log("Updating record:", id, "with data:", updatedData);
|
||||||
|
|
||||||
|
// Check if there are duplicate records before updating
|
||||||
|
// We do this by matching against name and type but excluding the current record
|
||||||
|
const potentialDuplicate = records.find(r =>
|
||||||
|
r.name === updatedData.name &&
|
||||||
|
r.type === updatedData.type &&
|
||||||
|
r.id !== id
|
||||||
|
);
|
||||||
|
|
||||||
|
if (potentialDuplicate) {
|
||||||
|
throw new Error(`A record with name "${updatedData.name}" and type "${updatedData.type}" already exists. Please use a different name or type.`);
|
||||||
|
}
|
||||||
|
|
||||||
const res = await apiRequest("PUT", `/api/dns-records/${id}`, updatedData);
|
const res = await apiRequest("PUT", `/api/dns-records/${id}`, updatedData);
|
||||||
|
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
@@ -283,6 +316,43 @@ export function DomainDetails({ domain, onBack }: DomainDetailsProps) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Toggle active status mutation
|
||||||
|
const toggleActiveMutation = useMutation({
|
||||||
|
mutationFn: async ({ id, isActive }: { id: string; isActive: boolean }) => {
|
||||||
|
console.log("Toggling record active status:", id, "to", isActive);
|
||||||
|
const res = await apiRequest("PATCH", `/api/dns-records/${id}`, {
|
||||||
|
isActive
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!res.ok) {
|
||||||
|
const errorData = await res.json();
|
||||||
|
throw new Error(errorData.message || "Failed to update record status");
|
||||||
|
}
|
||||||
|
|
||||||
|
return await res.json();
|
||||||
|
},
|
||||||
|
onSuccess: () => {
|
||||||
|
queryClient.invalidateQueries({ queryKey: ["/api/dns-records", domain.id] });
|
||||||
|
toast({
|
||||||
|
title: "Record status updated",
|
||||||
|
description: "The DNS record status has been successfully updated.",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onError: (error) => {
|
||||||
|
console.error("Toggle active status error:", error);
|
||||||
|
toast({
|
||||||
|
title: "Failed to update record status",
|
||||||
|
description: error instanceof Error ? error.message : "Unknown error occurred",
|
||||||
|
variant: "destructive",
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Handle toggle active
|
||||||
|
const handleToggleActive = (record: DnsRecord, checked: boolean) => {
|
||||||
|
toggleActiveMutation.mutate({ id: record.id, isActive: checked });
|
||||||
|
};
|
||||||
|
|
||||||
// Get a human-readable provider name from the provider ID
|
// Get a human-readable provider name from the provider ID
|
||||||
const getProviderName = (providerId: string | null) => {
|
const getProviderName = (providerId: string | null) => {
|
||||||
if (!providerId) return "None";
|
if (!providerId) return "None";
|
||||||
|
|||||||
Reference in New Issue
Block a user