mirror of
https://github.com/neosubhamoy/neodlp.git
synced 2025-12-19 23:39:33 +05:30
refactor: migrated to zod 4 and improved form validations
This commit is contained in:
@@ -26,8 +26,11 @@ import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
|
||||
const searchFormSchema = z.object({
|
||||
url: z.string().min(1, { message: "URL is required" })
|
||||
.url({message: "Invalid URL format." }),
|
||||
url: z.url({
|
||||
error: (issue) => issue.input === undefined || issue.input === null || issue.input === ""
|
||||
? "URL is required"
|
||||
: "Invalid URL format"
|
||||
}),
|
||||
});
|
||||
|
||||
export default function DownloaderPage() {
|
||||
@@ -206,6 +209,7 @@ export default function DownloaderPage() {
|
||||
mode: "onChange",
|
||||
})
|
||||
const watchedUrl = searchForm.watch("url");
|
||||
const { errors: searchFormErrors } = searchForm.formState;
|
||||
|
||||
function handleSearchSubmit(values: z.infer<typeof searchFormSchema>) {
|
||||
setVideoMetadata(null);
|
||||
@@ -371,7 +375,7 @@ export default function DownloaderPage() {
|
||||
)}
|
||||
<Button
|
||||
type="submit"
|
||||
disabled={!videoUrl || isMetadataLoading}
|
||||
disabled={!videoUrl || Object.keys(searchFormErrors).length > 0 || isMetadataLoading}
|
||||
>
|
||||
{isMetadataLoading ? (
|
||||
<>
|
||||
|
||||
@@ -29,9 +29,12 @@ import { join } from "@tauri-apps/api/path";
|
||||
import { formatSpeed } from "@/utils";
|
||||
|
||||
const websocketPortSchema = z.object({
|
||||
port: z.coerce.number({
|
||||
required_error: "Websocket Port is required",
|
||||
invalid_type_error: "Websocket Port must be a valid number",
|
||||
port: z.coerce.number<number>({
|
||||
error: (issue) => issue.input === undefined || issue.input === null || issue.input === ""
|
||||
? "Websocket Port is required"
|
||||
: "Websocket Port must be a valid number"
|
||||
}).int({
|
||||
message: "Websocket Port must be an integer"
|
||||
}).min(50000, {
|
||||
message: "Websocket Port must be at least 50000"
|
||||
}).max(60000, {
|
||||
@@ -40,13 +43,20 @@ const websocketPortSchema = z.object({
|
||||
})
|
||||
|
||||
const proxyUrlSchema = z.object({
|
||||
url: z.string().min(1, { message: "Proxy URL is required" }).url({ message: "Invalid URL format" })
|
||||
url: z.url({
|
||||
error: (issue) => issue.input === undefined || issue.input === null || issue.input === ""
|
||||
? "Proxy URL is required"
|
||||
: "Invalid URL format"
|
||||
})
|
||||
});
|
||||
|
||||
const rateLimitSchema = z.object({
|
||||
rate_limit: z.coerce.number({
|
||||
required_error: "Rate Limit is required",
|
||||
invalid_type_error: "Rate Limit must be a valid number",
|
||||
rate_limit: z.coerce.number<number>({
|
||||
error: (issue) => issue.input === undefined || issue.input === null || issue.input === ""
|
||||
? "Rate Limit is required"
|
||||
: "Rate Limit must be a valid number"
|
||||
}).int({
|
||||
message: "Rate Limit must be an integer"
|
||||
}).min(1024, {
|
||||
message: "Rate Limit must be at least 1024 bytes/s (1 KB/s)"
|
||||
}).max(104857600, {
|
||||
|
||||
Reference in New Issue
Block a user