import React, { useState } from 'react'; import { useSelector } from 'react-redux'; import { Trans, useTranslation } from 'react-i18next'; import { Controller, FormProvider, useForm } from 'react-hook-form'; import Select from 'react-select'; import Tabs from '../../../ui/Tabs'; import { CLIENT_ID_LINK, LOCAL_TIMEZONE_VALUE } from '../../../../helpers/constants'; import { RootState } from '../../../../initialState'; import { Input } from '../../../ui/Controls/Input'; import { validateRequiredValue } from '../../../../helpers/validators'; import { ClientForm } from './types'; import { BlockedServices, ClientIds, MainSettings, ScheduleServices, UpstreamDns } from './components'; import '../Service.css'; const defaultFormValues: ClientForm = { ids: [{ name: '' }], name: '', tags: [], use_global_settings: false, filtering_enabled: false, safebrowsing_enabled: false, parental_enabled: false, ignore_querylog: false, ignore_statistics: false, blocked_services: {}, safe_search: { enabled: false }, upstreams: '', upstreams_cache_enabled: false, upstreams_cache_size: 0, use_global_blocked_services: false, blocked_services_schedule: { time_zone: LOCAL_TIMEZONE_VALUE, }, }; type Props = { onSubmit: (values: ClientForm) => void; onClose: () => void; useGlobalSettings?: boolean; useGlobalServices?: boolean; blockedServicesSchedule?: { time_zone: string; }; processingAdding: boolean; processingUpdating: boolean; tagsOptions: { label: string; value: string }[]; initialValues?: ClientForm; }; export const Form = ({ onSubmit, onClose, processingAdding, processingUpdating, tagsOptions, initialValues, }: Props) => { const { t } = useTranslation(); const methods = useForm({ defaultValues: { ...defaultFormValues, ...initialValues, }, mode: 'onBlur', }); const { handleSubmit, reset, control, formState: { isSubmitting, isValid }, } = methods; const services = useSelector((store: RootState) => store?.services); const { safe_search } = initialValues; const safeSearchServices = { ...safe_search }; delete safeSearchServices.enabled; const [activeTabLabel, setActiveTabLabel] = useState('settings'); const tabs = { settings: { title: 'settings', component: , }, block_services: { title: 'block_services', component: , }, schedule_services: { title: 'schedule_services', component: , }, upstream_dns: { title: 'upstream_dns', component: , }, }; const activeTab = tabs[activeTabLabel].component; return (
( { const trimmedValue = event.target.value.trim(); field.onBlur(); field.onChange(trimmedValue); }} /> )} />
tags_title
, ]}> tags_desc
(