From 3cc94773efb08df93d544f3fd919131b9a31ad1a Mon Sep 17 00:00:00 2001 From: "web@ppanel" Date: Mon, 30 Dec 2024 17:28:24 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(relay):=20Add=20relay=20mode?= =?UTF-8?q?=20configuration=20and=20update=20related=20schemas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/app/dashboard/server/form-schema.ts | 14 +- apps/admin/app/dashboard/server/node-form.tsx | 147 ++++++++++-------- apps/admin/app/dashboard/system/node.tsx | 2 +- apps/admin/locales/cs-CZ/server.json | 9 +- apps/admin/locales/de-DE/server.json | 9 +- apps/admin/locales/en-US/server.json | 9 +- apps/admin/locales/es-ES/server.json | 9 +- apps/admin/locales/es-MX/server.json | 9 +- apps/admin/locales/fa-IR/server.json | 9 +- apps/admin/locales/fi-FI/server.json | 9 +- apps/admin/locales/fr-FR/server.json | 9 +- apps/admin/locales/hi-IN/server.json | 9 +- apps/admin/locales/hu-HU/server.json | 9 +- apps/admin/locales/ja-JP/server.json | 9 +- apps/admin/locales/ko-KR/server.json | 9 +- apps/admin/locales/no-NO/server.json | 9 +- apps/admin/locales/pl-PL/server.json | 9 +- apps/admin/locales/pt-BR/server.json | 9 +- apps/admin/locales/ro-RO/server.json | 9 +- apps/admin/locales/ru-RU/server.json | 9 +- apps/admin/locales/th-TH/server.json | 9 +- apps/admin/locales/tr-TR/server.json | 9 +- apps/admin/locales/uk-UA/server.json | 9 +- apps/admin/locales/vi-VN/server.json | 9 +- apps/admin/locales/zh-CN/server.json | 9 +- apps/admin/locales/zh-HK/server.json | 9 +- apps/admin/services/admin/typings.d.ts | 26 ++-- apps/admin/services/common/typings.d.ts | 16 +- apps/user/services/common/typings.d.ts | 16 +- apps/user/services/user/typings.d.ts | 16 +- .../src/custom-components/dynamic-Inputs.tsx | 5 +- .../src/custom-components/enhanced-input.tsx | 8 +- 32 files changed, 346 insertions(+), 111 deletions(-) diff --git a/apps/admin/app/dashboard/server/form-schema.ts b/apps/admin/app/dashboard/server/form-schema.ts index d19232d..bc1dc3b 100644 --- a/apps/admin/app/dashboard/server/form-schema.ts +++ b/apps/admin/app/dashboard/server/form-schema.ts @@ -92,9 +92,17 @@ const baseFormSchema = z.object({ speed_limit: z.number().nullish(), traffic_ratio: z.number().default(1), group_id: z.number().nullish(), - enable_relay: z.boolean().nullish().default(false), - relay_host: nullableString, - relay_port: portSchema, + relay_mode: z.string().nullish().default('none'), + relay_node: z + .array( + z.object({ + host: z.string(), + port: portSchema, + prefix: z.string().nullish(), + }), + ) + .nullish() + .default([]), }); export const formSchema = z.intersection(baseFormSchema, protocolConfigSchema); diff --git a/apps/admin/app/dashboard/server/node-form.tsx b/apps/admin/app/dashboard/server/node-form.tsx index ab60bd6..fc1fc21 100644 --- a/apps/admin/app/dashboard/server/node-form.tsx +++ b/apps/admin/app/dashboard/server/node-form.tsx @@ -33,6 +33,7 @@ import { import { Switch } from '@workspace/ui/components/switch'; import { Tabs, TabsList, TabsTrigger } from '@workspace/ui/components/tabs'; import { Combobox } from '@workspace/ui/custom-components/combobox'; +import { ArrayInput } from '@workspace/ui/custom-components/dynamic-Inputs'; import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; import { cn } from '@workspace/ui/lib/utils'; import { unitConversion } from '@workspace/ui/utils'; @@ -75,6 +76,7 @@ export default function NodeForm({ const protocol = form.watch('protocol'); const transport = form.watch('config.transport'); const security = form.watch('config.security'); + const relayMode = form.watch('relay_mode'); useEffect(() => { form?.reset(initialValues); @@ -105,7 +107,7 @@ export default function NodeForm({ {trigger} - + {title} @@ -214,65 +216,6 @@ export default function NodeForm({ )} /> - ( - - {t('form.enableRelay')} - -
- { - form.setValue(field.name, value); - }} - /> -
-
- -
- )} - /> - ( - - {t('form.relayHost')} - - { - form.setValue(field.name, value); - }} - /> - - - - )} - /> - ( - - {t('form.relayPort')} - - { - form.setValue(field.name, value); - }} - /> - - - - )} - /> ({ { @@ -389,6 +333,7 @@ export default function NodeForm({ { form.setValue(field.name, value); }} @@ -499,7 +444,7 @@ export default function NodeForm({ control={form.control} name='config.transport' render={({ field }) => ( - + { @@ -814,6 +759,84 @@ export default function NodeForm({ )} + + + + {t('form.relayMode')} + ( + + + + + + + )} + /> + + {relayMode !== 'none' && ( + + ( + + + { + form.setValue(field.name, value); + }} + /> + + + + )} + /> + + )} + diff --git a/apps/admin/app/dashboard/system/node.tsx b/apps/admin/app/dashboard/system/node.tsx index 0308b83..2719bdc 100644 --- a/apps/admin/app/dashboard/system/node.tsx +++ b/apps/admin/app/dashboard/system/node.tsx @@ -177,7 +177,7 @@ export default function Node() {
- + >({ return (
- {fields.map(({ name, type, options, ...fieldProps }) => ( -
+ {fields.map(({ name, type, options, className, ...fieldProps }) => ( +
{type === 'select' && options ? ( placeholder={fieldProps.placeholder} diff --git a/packages/ui/src/custom-components/enhanced-input.tsx b/packages/ui/src/custom-components/enhanced-input.tsx index 2a6bcdc..6ae90b2 100644 --- a/packages/ui/src/custom-components/enhanced-input.tsx +++ b/packages/ui/src/custom-components/enhanced-input.tsx @@ -77,7 +77,9 @@ export function EnhancedInput({ suppressHydrationWarning > {prefix && ( -
{prefix}
+
+ {prefix} +
)} {suffix && ( -
{suffix}
+
+ {suffix} +
)}
);