From d0dc0c600d64875a09a269743a16371707eb9cac Mon Sep 17 00:00:00 2001 From: Ildar Kamalov Date: Tue, 14 Jan 2025 14:11:38 +0300 Subject: [PATCH] logs config form --- .../components/Settings/LogsConfig/Form.tsx | 271 ++++++++++-------- .../components/Settings/LogsConfig/index.tsx | 11 +- 2 files changed, 151 insertions(+), 131 deletions(-) diff --git a/client/src/components/Settings/LogsConfig/Form.tsx b/client/src/components/Settings/LogsConfig/Form.tsx index 7e53abe1..396f0e5b 100644 --- a/client/src/components/Settings/LogsConfig/Form.tsx +++ b/client/src/components/Settings/LogsConfig/Form.tsx @@ -1,111 +1,135 @@ import React, { useEffect } from 'react'; -import { change, Field, formValueSelector, reduxForm } from 'redux-form'; -import { connect } from 'react-redux'; -import { Trans, withTranslation } from 'react-i18next'; -import flow from 'lodash/flow'; - -import { - CheckboxField, - toFloatNumber, - renderTextareaField, - renderInputField, - renderRadioField, -} from '../../../helpers/form'; +import { Trans } from 'react-i18next'; +import i18next from 'i18next'; +import { useForm } from 'react-hook-form'; import { trimLinesAndRemoveEmpty } from '../../../helpers/helpers'; import { - FORM_NAME, QUERY_LOG_INTERVALS_DAYS, HOUR, DAY, RETENTION_CUSTOM, - RETENTION_CUSTOM_INPUT, RETENTION_RANGE, - CUSTOM_INTERVAL, } from '../../../helpers/constants'; import '../FormButton.css'; -const getIntervalTitle = (interval: any, t: any) => { +const getIntervalTitle = (interval: number) => { switch (interval) { case RETENTION_CUSTOM: - return t('settings_custom'); + return i18next.t('settings_custom'); case 6 * HOUR: - return t('interval_6_hour'); + return i18next.t('interval_6_hour'); case DAY: - return t('interval_24_hour'); + return i18next.t('interval_24_hour'); default: - return t('interval_days', { count: interval / DAY }); + return i18next.t('interval_days', { count: interval / DAY }); } }; -const getIntervalFields = (processing: any, t: any, toNumber: any) => - QUERY_LOG_INTERVALS_DAYS.map((interval) => ( - - )); - -interface FormProps { - handleSubmit: (...args: unknown[]) => string; - handleClear: (...args: unknown[]) => unknown; - submitting: boolean; - invalid: boolean; - processing: boolean; - processingClear: boolean; - t: (...args: unknown[]) => string; - interval?: number; - customInterval?: number; - dispatch: (...args: unknown[]) => unknown; +type FormValues = { + enabled: boolean; + anonymize_client_ip: boolean; + interval: number; + customInterval?: number | null; + ignored: string; } -let Form = (props: FormProps) => { +type Props = { + initialValues: Partial; + onSubmit: (values: FormValues) => void; + handleClear: () => void; + processing: boolean; + processingClear: boolean; +} + +export const LogsConfigForm = ({ + initialValues, + onSubmit, + processing, + processingClear, + handleClear, +}: Props) => { const { + register, handleSubmit, - submitting, - invalid, - processing, - processingClear, - handleClear, - t, - interval, - customInterval, - dispatch, - } = props; + watch, + setValue, + formState: { isSubmitting }, + } = useForm({ + mode: 'onChange', + defaultValues: { + enabled: initialValues.enabled || false, + anonymize_client_ip: initialValues.anonymize_client_ip || false, + interval: initialValues.interval || DAY, + customInterval: initialValues.customInterval || null, + ignored: initialValues.ignored ?? '', + }, + }); + + const intervalValue = watch('interval'); + const customIntervalValue = watch('customInterval'); useEffect(() => { - if (QUERY_LOG_INTERVALS_DAYS.includes(interval)) { - dispatch(change(FORM_NAME.LOG_CONFIG, CUSTOM_INTERVAL, null)); + if (QUERY_LOG_INTERVALS_DAYS.includes(intervalValue)) { + setValue('customInterval', null); } - }, [interval]); + }, [intervalValue]); + + const onSubmitForm = (data: FormValues) => { + onSubmit(data); + }; + + const handleIgnoredBlur = (e: React.FocusEvent) => { + const trimmed = trimLinesAndRemoveEmpty(e.target.value); + setValue('ignored', trimmed); + }; + + const disableSubmit = + isSubmitting || + processing || + (intervalValue === RETENTION_CUSTOM && !customIntervalValue); + + console.log(intervalValue, RETENTION_CUSTOM, customIntervalValue); return ( -
+
- +
- +