@@ -88,6 +88,17 @@ const stepDefineDefaultValue: DefineStepRule = {
8888 } ,
8989} ;
9090
91+ /**
92+ * This default query will be used for threat query/indicator matches
93+ * as the default when the user swaps to using it by changing their
94+ * rule type from any rule type to the "threatMatchRule" type. Only
95+ * difference is that "*:*" is used instead of '' for its query.
96+ */
97+ const threatQueryBarDefaultValue : DefineStepRule [ 'queryBar' ] = {
98+ ...stepDefineDefaultValue . queryBar ,
99+ query : { ...stepDefineDefaultValue . queryBar . query , query : '*:*' } ,
100+ } ;
101+
91102const MyLabelButton = styled ( EuiButtonEmpty ) `
92103 height: 18px;
93104 font-size: 12px;
@@ -171,6 +182,38 @@ const StepDefineRuleComponent: FC<StepDefineRuleProps> = ({
171182 setIndexModified ( ! isEqual ( index , indicesConfig ) ) ;
172183 } , [ index , indicesConfig ] ) ;
173184
185+ /**
186+ * When a rule type is changed to or from a threat match this will modify the
187+ * default query string to either:
188+ * * from the empty string '' to '*:*' if the rule type is "threatMatchRule"
189+ * * from '*:*' back to the empty string '' if the rule type is not "threatMatchRule"
190+ * This calls queryBar.reset() in both cases to not trigger validation errors as
191+ * the user has not entered data into those areas yet.
192+ * If the user has entered data then through reference compares we can detect reliably if
193+ * the user has changed data.
194+ * * queryBar.value === defaultQueryBar (Has the user changed the input of '' yet?)
195+ * * queryBar.value === threatQueryBarDefaultValue (Has the user changed the input of '*:*' yet?)
196+ * This is a stronger guarantee than "isPristine" off of the forms as that value can be reset
197+ * if you go to step 2) and then back to step 1) or the form is reset in another way. Using
198+ * the reference compare we know factually if the data is changed as the references must change
199+ * in the form libraries form the initial defaults.
200+ */
201+ useEffect ( ( ) => {
202+ const { queryBar } = getFields ( ) ;
203+ if ( queryBar != null ) {
204+ const { queryBar : defaultQueryBar } = stepDefineDefaultValue ;
205+ if ( isThreatMatchRule ( ruleType ) && queryBar . value === defaultQueryBar ) {
206+ queryBar . reset ( {
207+ defaultValue : threatQueryBarDefaultValue ,
208+ } ) ;
209+ } else if ( queryBar . value === threatQueryBarDefaultValue ) {
210+ queryBar . reset ( {
211+ defaultValue : defaultQueryBar ,
212+ } ) ;
213+ }
214+ }
215+ } , [ ruleType , getFields ] ) ;
216+
174217 const handleSubmit = useCallback ( ( ) => {
175218 if ( onSubmit ) {
176219 onSubmit ( ) ;
0 commit comments