import { createForm } from '@felte/solid' import { validator } from '@felte/validator-zod' import { useI18n } from '@solid-primitives/i18n' import { useNavigate } from '@solidjs/router' import { For, ParentComponent, Show, children, createSignal, onMount, } from 'solid-js' import { z } from 'zod' import { fetchBackendConfigAPI, fetchBackendVersionAPI, restartBackendAPI, restartingBackend, updateBackendConfigAPI, updateGEODatabasesAPI, updatingGEODatabases, upgradeBackendAPI, upgradingBackend, } from '~/apis' import { Button } from '~/components' import { LANG, LOGS_TABLE_MAX_ROWS_LIST, LOG_LEVEL, MODE_OPTIONS, PROXIES_ORDERING_TYPE, PROXIES_PREVIEW_TYPE, ROUTES, TAILWINDCSS_SIZE, themes, } from '~/constants' import { autoCloseConns, autoSwitchTheme, backendConfig, favDayTheme, favNightTheme, latencyTestTimeoutDuration, logLevel, logMaxRows, proxiesOrderingType, proxiesPreviewType, renderInTwoColumns, setAutoCloseConns, setAutoSwitchTheme, setBackendConfig, setFavDayTheme, setFavNightTheme, setLatencyTestTimeoutDuration, setLogLevel, setLogMaxRows, setProxiesOrderingType, setProxiesPreviewType, setRenderInTwoColumns, setSelectedEndpoint, setTableSize, setTwemoji, setUrlForLatencyTest, tableSize, urlForLatencyTest, useRequest, useTwemoji, } from '~/signals' import type { DNSQuery } from '~/types' const dnsQueryFormSchema = z.object({ name: z.string(), type: z.string(), }) const ConfigTitle: ParentComponent = (props) => (
{children(() => props.children)()}
) const DNSQueryForm = () => { const [t] = useI18n() const request = useRequest() const { form, isSubmitting } = createForm>( { extend: validator({ schema: dnsQueryFormSchema }), onSubmit: async (values) => { request .get('dns/query', { searchParams: { name: values.name, type: values.type }, }) .json() .then(({ Answer }) => setDNSQueryResult(Answer?.map(({ data }) => data) || []), ) }, }, ) const [DNSQueryResult, setDNSQueryResult] = createSignal([]) return (
0}>
{(item) =>
{item}
}
) } const configFormSchema = z.object({ port: z.number(), 'socks-port': z.number(), 'redir-port': z.number(), 'tproxy-port': z.number(), 'mixed-port': z.number(), }) const ConfigForm = () => { const [t] = useI18n() const portsList = [ { label: 'Http Port', key: 'port', }, { label: 'Socks Port', key: 'socks-port', }, { label: 'Redir Port', key: 'redir-port', }, { label: 'Tproxy Port', key: 'tproxy-port', }, { label: 'Mixed Port', key: 'mixed-port', }, ] const { form, setInitialValues, reset } = createForm< z.infer >({ extend: validator({ schema: configFormSchema }) }) onMount(async () => { const configs = await fetchBackendConfigAPI() setBackendConfig(configs) setInitialValues(configs) reset() }) return (
{(item) => (
)}
{t('urlForLatencyTest')} setUrlForLatencyTest(e.target.value)} />
{t('latencyTestTimeoutDuration')} ({t('ms')}) setLatencyTestTimeoutDuration(Number(e.target.value)) } />
{t('autoCloseConns')} setAutoCloseConns(e.target.checked)} />
) } const ConfigForXd = () => { const [t, { locale }] = useI18n() const navigate = useNavigate() const onSwitchEndpointClick = () => { setSelectedEndpoint('') navigate(ROUTES.Setup) } const autoSwitchThemeSubChild = () => (
{t('favDayTheme')}
{t('favNightTheme')}
) const checkboxList = [ { label: t('renderInTwoColumns'), value: renderInTwoColumns, onChange: setRenderInTwoColumns, }, { label: t('autoSwitchTheme'), value: autoSwitchTheme, onChange: (value: boolean) => { setAutoSwitchTheme(value) }, subChild: autoSwitchThemeSubChild, }, { label: t('useTwemoji'), value: useTwemoji, onChange: setTwemoji, }, ] return (
{(checkbox) => ( <>
{checkbox.label} { checkbox.onChange(e.target.checked) }} />
{checkbox.subChild?.()} )}
{t('proxiesPreviewType')}
{t('proxiesSorting')}
{t('tableSize')}
{t('logLevel')}
{t('logMaxRows')}
) } const Versions = () => { const [backendVersion, setBackendVersion] = createSignal('') onMount(async () => { const version = await fetchBackendVersionAPI() setBackendVersion(version) }) return (
{import.meta.env.version} {backendVersion()}
) } export default () => { return (
) }