From e30a5a4c281a2648950cd190db707a979eae5dc1 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Mon, 23 May 2022 20:46:26 +0000 Subject: [PATCH] Add field type url --- apps/prowlarr/docker-compose.yml | 3 +- .../src/components/Form/validators.ts | 67 ++++++++++++++----- packages/dashboard/src/core/types.ts | 1 + 3 files changed, 55 insertions(+), 16 deletions(-) diff --git a/apps/prowlarr/docker-compose.yml b/apps/prowlarr/docker-compose.yml index 4885600e..629babec 100644 --- a/apps/prowlarr/docker-compose.yml +++ b/apps/prowlarr/docker-compose.yml @@ -5,7 +5,8 @@ services: image: ghcr.io/linuxserver/prowlarr:develop environment: - TZ=${TZ} # Can use any env variable. List in runtipi/templates/env-sample - - DNS_IP=${DNS_IP} + dns: + - ${DNS_IP} volumes: - ${APP_DATA_DIR}/data/config:/config #Always start the path with ${APP_DATA_DIR}. This will put all data inside app-data/my-app/data ports: diff --git a/packages/dashboard/src/components/Form/validators.ts b/packages/dashboard/src/components/Form/validators.ts index cd5c8b74..1205c0bb 100644 --- a/packages/dashboard/src/components/Form/validators.ts +++ b/packages/dashboard/src/components/Form/validators.ts @@ -6,21 +6,58 @@ export const validateAppConfig = (values: Record, fields: (AppCo fields.forEach((field) => { if (field.required && !values[field.id]) { - errors[field.id] = 'Field required'; - } else if (values[field.id] && field.min && values[field.id].length < field.min) { - errors[field.id] = `Field must be at least ${field.min} characters long`; - } else if (values[field.id] && field.max && values[field.id].length > field.max) { - errors[field.id] = `Field must be at most ${field.max} characters long`; - } else if (values[field.id] && field.type === FieldTypes.number && !validator.isNumeric(values[field.id])) { - errors[field.id] = 'Field must be a number'; - } else if (values[field.id] && field.type === FieldTypes.email && !validator.isEmail(values[field.id])) { - errors[field.id] = 'Field must be a valid email'; - } else if (values[field.id] && field.type === FieldTypes.fqdn && !validator.isFQDN(values[field.id] || '')) { - errors[field.id] = 'Field must be a valid domain'; - } else if (values[field.id] && field.type === FieldTypes.ip && !validator.isIP(values[field.id])) { - errors[field.id] = 'Field must be a valid IP address'; - } else if (values[field.id] && field.type === FieldTypes.fqdnip && !validator.isFQDN(values[field.id] || '') && !validator.isIP(values[field.id])) { - errors[field.id] = 'Field must be a valid domain or IP address'; + errors[field.id] = `${field.label} is required`; + } + + if (values[field.id]) { + switch (field.type) { + case FieldTypes.text: + if (field.max && values[field.id].length > field.max) { + errors[field.id] = `${field.label} must be less than ${field.max} characters`; + } + + if (field.min && values[field.id].length < field.min) { + errors[field.id] = `${field.label} must be at least ${field.min} characters`; + } + break; + case FieldTypes.password: + if (!validator.isLength(values[field.id], { min: field.min, max: field.max })) { + errors[field.id] = `${field.label} must be between ${field.min} and ${field.max} characters`; + } + break; + case FieldTypes.email: + if (!validator.isEmail(values[field.id])) { + errors[field.id] = `${field.label} must be a valid email address`; + } + break; + case FieldTypes.number: + if (!validator.isNumeric(values[field.id])) { + errors[field.id] = `${field.label} must be a number`; + } + break; + case FieldTypes.fqdn: + if (!validator.isFQDN(values[field.id])) { + errors[field.id] = `${field.label} must be a valid domain`; + } + break; + case FieldTypes.ip: + if (!validator.isIP(values[field.id])) { + errors[field.id] = `${field.label} must be a valid IP address`; + } + break; + case FieldTypes.fqdnip: + if (!validator.isFQDN(values[field.id] || '') && !validator.isIP(values[field.id])) { + errors[field.id] = `${field.label} must be a valid domain or IP address`; + } + break; + case FieldTypes.url: + if (!validator.isURL(values[field.id])) { + errors[field.id] = `${field.label} must be a valid URL`; + } + break; + default: + break; + } } }); diff --git a/packages/dashboard/src/core/types.ts b/packages/dashboard/src/core/types.ts index 0d4e8e0a..1c1069a9 100644 --- a/packages/dashboard/src/core/types.ts +++ b/packages/dashboard/src/core/types.ts @@ -6,6 +6,7 @@ export enum FieldTypes { fqdn = 'fqdn', ip = 'ip', fqdnip = 'fqdnip', + url = 'url', } interface FormField {