diff --git a/package-lock.json b/package-lock.json index 5678a24a4c..f708a8e517 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8693,12 +8693,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "license": "MIT" - }, "node_modules/esbuild": { "version": "0.24.2", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", @@ -11507,12 +11501,6 @@ "dev": true, "license": "MIT" }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "license": "MIT" - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -16767,46 +16755,6 @@ "redux": "^3.6.0 || ^4.0.0 || ^5.0.0" } }, - "node_modules/redux-form": { - "version": "8.3.10", - "resolved": "https://registry.npmjs.org/redux-form/-/redux-form-8.3.10.tgz", - "integrity": "sha512-Eeog8dJYUxCSZI/oBoy7VkprvMjj1lpUnHa3LwjVNZvYDNeiRZMoZoaAT+6nlK2YQ4aiBopKUMiLe4ihUOHCGg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.9.2", - "es6-error": "^4.1.1", - "hoist-non-react-statics": "^3.3.2", - "invariant": "^2.2.4", - "is-promise": "^2.1.0", - "lodash": "^4.17.15", - "prop-types": "^15.6.1", - "react-is": "^16.4.2" - }, - "engines": { - "node": ">=8.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/redux-form" - }, - "peerDependencies": { - "immutable": "^3.8.2 || ^4.0.0", - "react": "^16.4.2 || ^17.0.0 || ^18.0.0", - "react-redux": "^6.0.1 || ^7.0.0 || ^8.0.0", - "redux": "^3.7.2 || ^4.0.0" - }, - "peerDependenciesMeta": { - "immutable": { - "optional": true - } - } - }, - "node_modules/redux-form/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, "node_modules/redux-promise-middleware": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/redux-promise-middleware/-/redux-promise-middleware-6.2.0.tgz", @@ -20139,7 +20087,6 @@ "redux": "^4.2.1", "redux-actions": "2.6.5", "redux-first-history": "^5.2.0", - "redux-form": "^8.3.10", "redux-promise-middleware": "^6.1.3", "store": "^2.0.12", "ts-key-enum": "^2.0.0", diff --git a/packages/jaeger-ui/package.json b/packages/jaeger-ui/package.json index 5dc9c19d8c..be802c9221 100644 --- a/packages/jaeger-ui/package.json +++ b/packages/jaeger-ui/package.json @@ -84,7 +84,6 @@ "redux": "^4.2.1", "redux-actions": "2.6.5", "redux-first-history": "^5.2.0", - "redux-form": "^8.3.10", "redux-promise-middleware": "^6.1.3", "store": "^2.0.12", "ts-key-enum": "^2.0.0", diff --git a/packages/jaeger-ui/src/components/SearchTracePage/SearchForm.jsx b/packages/jaeger-ui/src/components/SearchTracePage/SearchForm.jsx index fc5353635b..1c77022ced 100644 --- a/packages/jaeger-ui/src/components/SearchTracePage/SearchForm.jsx +++ b/packages/jaeger-ui/src/components/SearchTracePage/SearchForm.jsx @@ -25,26 +25,26 @@ import queryString from 'query-string'; import { IoHelp } from 'react-icons/io5'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; -import { Field, reduxForm, formValueSelector } from 'redux-form'; import store from 'store'; import * as markers from './SearchForm.markers'; import { trackFormInput } from './SearchForm.track'; import * as jaegerApiActions from '../../actions/jaeger-api'; import { formatDate, formatTime } from '../../utils/date'; -import reduxFormFieldAdapter from '../../utils/redux-form-field-adapter'; -import { DEFAULT_OPERATION, DEFAULT_LIMIT, DEFAULT_LOOKBACK } from '../../constants/search-form'; +import { + DEFAULT_OPERATION, + DEFAULT_LIMIT, + DEFAULT_LOOKBACK, + SEARCH_SIDEBAR_CHANGE_SERVICE_ACTION_TYPE, +} from '../../constants/search-form'; import { getConfigValue } from '../../utils/config/get-config'; import SearchableSelect from '../common/SearchableSelect'; import './SearchForm.css'; +import ValidatedFormField from '../../utils/ValidatedFormField'; const FormItem = Form.Item; const Option = Select.Option; -const AdaptedInput = reduxFormFieldAdapter({ AntInputComponent: Input }); -const AdaptedSelect = reduxFormFieldAdapter({ AntInputComponent: SearchableSelect }); -const ValidatedAdaptedInput = reduxFormFieldAdapter({ AntInputComponent: Input, isValidatedInput: true }); - export function getUnixTimeStampInMSFromForm({ startDate, startDateTime, endDate, endDateTime }) { const start = `${startDate} ${startDateTime}`; const end = `${endDate} ${endDateTime}`; @@ -259,23 +259,59 @@ export function submitForm(fields, searchTraces) { } export class SearchFormImpl extends React.PureComponent { + constructor(props) { + super(props); + this.state = { + formData: { + service: this.props.initialValues?.service, + operation: this.props.initialValues?.operation, + tags: this.props.initialValues?.tags, + lookback: this.props.initialValues?.lookback, + startDate: this.props.initialValues?.startDate, + startDateTime: this.props.initialValues?.startDateTime, + endDate: this.props.initialValues?.endDate, + endDateTime: this.props.initialValues?.endDateTime, + minDuration: this.props.initialValues?.minDuration, + maxDuration: this.props.initialValues?.maxDuration, + resultsLimit: this.props.initialValues?.resultsLimit, + }, + }; + } + + handleChange = fieldData => { + this.setState(prevState => ({ + formData: { + ...prevState.formData, + ...fieldData, + }, + })); + if (fieldData.service) { + this.props.changeServiceHandler(fieldData.service); + this.setState(prevState => ({ + formData: { + ...prevState.formData, + operation: DEFAULT_OPERATION, + }, + })); + } + }; + + handleSubmit = e => { + e.preventDefault(); + this.props.submitFormHandler(this.state.formData); + }; + render() { - const { - handleSubmit, - invalid, - searchMaxLookback, - selectedLookback, - selectedService = '-', - services, - submitting: disabled, - } = this.props; + const { invalid, searchMaxLookback, services, submitting: disabled } = this.props; + const { formData } = this.state; + const { service: selectedService, lookback: selectedLookback } = formData; const selectedServicePayload = services.find(s => s.name === selectedService); const opsForSvc = (selectedServicePayload && selectedServicePayload.operations) || []; const noSelectedService = selectedService === '-' || !selectedService; const tz = selectedLookback === 'custom' ? new Date().toTimeString().replace(/^.*?GMT/, 'UTC') : null; return ( -