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")} + + +