diff --git a/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx b/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx
index 1eadf8bab..57f851c9e 100644
--- a/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx
+++ b/apps/dokploy/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx
@@ -40,7 +40,7 @@ interface Props {
}
const AddRedirectchema = z.object({
- replicas: z.number(),
+ replicas: z.number().min(1, "Replicas must be at least 1"),
registryId: z.string(),
});
@@ -130,9 +130,11 @@ export const ShowClusterSettings = ({ applicationId }: Props) => {
placeholder="1"
{...field}
onChange={(e) => {
- field.onChange(Number(e.target.value));
+ const value = e.target.value;
+ field.onChange(value === "" ? 0 : Number(value));
}}
type="number"
+ value={field.value || ""}
/>
diff --git a/apps/dokploy/components/dashboard/settings/notifications/handle-notifications.tsx b/apps/dokploy/components/dashboard/settings/notifications/handle-notifications.tsx
index 7a3e286e3..e04765298 100644
--- a/apps/dokploy/components/dashboard/settings/notifications/handle-notifications.tsx
+++ b/apps/dokploy/components/dashboard/settings/notifications/handle-notifications.tsx
@@ -663,13 +663,16 @@ export const HandleNotifications = ({ notificationId }: Props) => {
{...field}
onChange={(e) => {
const value = e.target.value;
- if (value) {
+ if (value === "") {
+ field.onChange(undefined);
+ } else {
const port = Number.parseInt(value);
if (port > 0 && port < 65536) {
field.onChange(port);
}
}
}}
+ value={field.value || ""}
type="number"
/>
diff --git a/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx b/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx
index 92ef9f128..d20b7c91a 100644
--- a/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx
+++ b/apps/dokploy/components/dashboard/settings/web-server/manage-traefik-ports.tsx
@@ -159,9 +159,11 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => {
- field.onChange(Number(e.target.value))
- }
+ onChange={(e) => {
+ const value = e.target.value;
+ field.onChange(value === "" ? undefined : Number(value));
+ }}
+ value={field.value || ""}
className="w-full dark:bg-black"
placeholder="e.g. 8080"
/>
@@ -185,9 +187,11 @@ export const ManageTraefikPorts = ({ children, serverId }: Props) => {
- field.onChange(Number(e.target.value))
- }
+ onChange={(e) => {
+ const value = e.target.value;
+ field.onChange(value === "" ? undefined : Number(value));
+ }}
+ value={field.value || ""}
className="w-full dark:bg-black"
placeholder="e.g. 80"
/>
diff --git a/apps/dokploy/components/ui/input.tsx b/apps/dokploy/components/ui/input.tsx
index 7339d21a2..18b713af5 100644
--- a/apps/dokploy/components/ui/input.tsx
+++ b/apps/dokploy/components/ui/input.tsx
@@ -39,7 +39,7 @@ const NumberInput = React.forwardRef(
className={cn("text-left", className)}
ref={ref}
{...props}
- value={props.value === undefined || props.value === "" ? "" : String(props.value)}
+ value={props.value === undefined ? undefined : String(props.value)}
onChange={(e) => {
const value = e.target.value;
if (value === "") {
@@ -60,21 +60,6 @@ const NumberInput = React.forwardRef(
}
}
}}
- onBlur={(e) => {
- // If input is empty, make 0 when focus is lost
- if (e.target.value === "") {
- const syntheticEvent = {
- ...e,
- target: {
- ...e.target,
- value: "0",
- },
- };
- props.onChange?.(
- syntheticEvent as unknown as React.ChangeEvent,
- );
- }
- }}
/>
);
},