mirror of
https://github.com/Buriburizaem0n/admin-frontend-domain.git
synced 2026-03-22 02:51:52 +00:00
ddns: allow overriding domains per configuration (#111)
This commit is contained in:
@@ -49,6 +49,22 @@ const serverFormSchema = z.object({
|
|||||||
enable_ddns: asOptionalField(z.boolean()),
|
enable_ddns: asOptionalField(z.boolean()),
|
||||||
ddns_profiles: asOptionalField(z.array(z.number())),
|
ddns_profiles: asOptionalField(z.array(z.number())),
|
||||||
ddns_profiles_raw: asOptionalField(z.string()),
|
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<ServerCardProps> = ({ data, mutate }) => {
|
export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
|
||||||
@@ -58,6 +74,9 @@ export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
|
|||||||
defaultValues: {
|
defaultValues: {
|
||||||
...data,
|
...data,
|
||||||
ddns_profiles_raw: data.ddns_profiles ? conv.arrToStr(data.ddns_profiles) : undefined,
|
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: {
|
resetOptions: {
|
||||||
keepDefaultValues: false,
|
keepDefaultValues: false,
|
||||||
@@ -71,6 +90,9 @@ export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
|
|||||||
values.ddns_profiles = values.ddns_profiles_raw
|
values.ddns_profiles = values.ddns_profiles_raw
|
||||||
? conv.strToArr(values.ddns_profiles_raw).map(Number)
|
? conv.strToArr(values.ddns_profiles_raw).map(Number)
|
||||||
: undefined
|
: undefined
|
||||||
|
values.override_ddns_domains = values.override_ddns_domains_raw
|
||||||
|
? JSON.parse(values.override_ddns_domains_raw)
|
||||||
|
: undefined
|
||||||
await updateServer(data!.id!, values)
|
await updateServer(data!.id!, values)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
@@ -124,6 +146,8 @@ export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
{form.watch("enable_ddns") ? (
|
||||||
|
<>
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name="ddns_profiles_raw"
|
name="ddns_profiles_raw"
|
||||||
@@ -139,6 +163,26 @@ export const ServerCard: React.FC<ServerCardProps> = ({ data, mutate }) => {
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name="override_ddns_domains_raw"
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>
|
||||||
|
{t("OverrideDDNSDomains")}
|
||||||
|
</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<Textarea className="resize-y" {...field} />
|
||||||
|
</FormControl>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<></>
|
||||||
|
)}
|
||||||
|
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name="enable_ddns"
|
name="enable_ddns"
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export function asOptionalField<T extends z.ZodTypeAny>(schema: T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const conv = {
|
export const conv = {
|
||||||
recordToStr: (rec: Record<string, boolean>) => {
|
recordToStr: <T>(rec: Record<string, T>) => {
|
||||||
const arr: string[] = []
|
const arr: string[] = []
|
||||||
for (const key in rec) {
|
for (const key in rec) {
|
||||||
arr.push(key)
|
arr.push(key)
|
||||||
|
|||||||
@@ -179,5 +179,6 @@
|
|||||||
"ConfirmBlock": "Confirm Block",
|
"ConfirmBlock": "Confirm Block",
|
||||||
"RejectPassword": "Reject Password Login",
|
"RejectPassword": "Reject Password Login",
|
||||||
"EmptyText": "Text is empty",
|
"EmptyText": "Text is empty",
|
||||||
"EmptyNote": "You didn't have any note."
|
"EmptyNote": "You didn't have any note.",
|
||||||
|
"OverrideDDNSDomains": "Override DDNS Domains (per configuration)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -411,6 +411,7 @@ export interface ModelNAT {
|
|||||||
|
|
||||||
export interface ModelNATForm {
|
export interface ModelNATForm {
|
||||||
domain: string
|
domain: string
|
||||||
|
enabled: boolean
|
||||||
host: string
|
host: string
|
||||||
/** @minLength 1 */
|
/** @minLength 1 */
|
||||||
name: string
|
name: string
|
||||||
@@ -560,6 +561,7 @@ export interface ModelServer {
|
|||||||
name: string
|
name: string
|
||||||
/** 管理员可见备注 */
|
/** 管理员可见备注 */
|
||||||
note: string
|
note: string
|
||||||
|
override_ddns_domains?: Record<string, string[]>
|
||||||
/** 公开备注 */
|
/** 公开备注 */
|
||||||
public_note: string
|
public_note: string
|
||||||
state: ModelHostState
|
state: ModelHostState
|
||||||
@@ -582,6 +584,7 @@ export interface ModelServerForm {
|
|||||||
name: string
|
name: string
|
||||||
/** 管理员可见备注 */
|
/** 管理员可见备注 */
|
||||||
note?: string
|
note?: string
|
||||||
|
override_ddns_domains?: Record<string, string[]>
|
||||||
/** 公开备注 */
|
/** 公开备注 */
|
||||||
public_note?: string
|
public_note?: string
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user