From 42b85f74a9b585878dd11525cd31a6a8fb0175ce Mon Sep 17 00:00:00 2001 From: UUBulb <35923940+uubulb@users.noreply.github.com> Date: Thu, 30 Jan 2025 12:15:21 +0800 Subject: [PATCH] ddns: allow overriding domains per configuration (#111) --- src/components/server.tsx | 74 ++++++++++++++++++++++++++------- src/lib/utils.ts | 2 +- src/locales/en/translation.json | 3 +- src/types/api.ts | 3 ++ 4 files changed, 65 insertions(+), 17 deletions(-) diff --git a/src/components/server.tsx b/src/components/server.tsx index 99dee14..97864dc 100644 --- a/src/components/server.tsx +++ b/src/components/server.tsx @@ -49,6 +49,22 @@ const serverFormSchema = z.object({ enable_ddns: asOptionalField(z.boolean()), ddns_profiles: asOptionalField(z.array(z.number())), ddns_profiles_raw: asOptionalField(z.string()), + override_ddns_domains: asOptionalField(z.record(z.coerce.number().int(), z.array(z.string()))), + override_ddns_domains_raw: asOptionalField( + z.string().refine( + (val) => { + try { + JSON.parse(val) + return true + } catch (e) { + return false + } + }, + { + message: "Invalid JSON string", + }, + ), + ), }) export const ServerCard: React.FC = ({ data, mutate }) => { @@ -58,6 +74,9 @@ export const ServerCard: React.FC = ({ data, mutate }) => { defaultValues: { ...data, ddns_profiles_raw: data.ddns_profiles ? conv.arrToStr(data.ddns_profiles) : undefined, + override_ddns_domains_raw: data.override_ddns_domains + ? JSON.stringify(data.override_ddns_domains) + : undefined, }, resetOptions: { keepDefaultValues: false, @@ -71,6 +90,9 @@ export const ServerCard: React.FC = ({ data, mutate }) => { values.ddns_profiles = values.ddns_profiles_raw ? conv.strToArr(values.ddns_profiles_raw).map(Number) : undefined + values.override_ddns_domains = values.override_ddns_domains_raw + ? JSON.parse(values.override_ddns_domains_raw) + : undefined await updateServer(data!.id!, values) } catch (e) { console.error(e) @@ -124,21 +146,43 @@ export const ServerCard: React.FC = ({ data, mutate }) => { )} /> - ( - - - {t("DDNSProfiles") + t("SeparateWithComma")} - - - - - - - )} - /> + {form.watch("enable_ddns") ? ( + <> + ( + + + {t("DDNSProfiles") + t("SeparateWithComma")} + + + + + + + )} + /> + ( + + + {t("OverrideDDNSDomains")} + + +