Skip to content

Commit 0f090ff

Browse files
Shelob9sc0ttkclark
authored andcommitted
Set field-specific validation messsage in store #6898
1 parent bb82036 commit 0f090ff

File tree

7 files changed

+33
-9
lines changed

7 files changed

+33
-9
lines changed

ui/js/dfv/src/components/connected-field-wrapper.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ const ConnectedFieldWrapper = compose( [
4343
return {
4444
...valueData,
4545
allPodValues,
46+
storeKey,
4647
};
4748
} ),
4849
withDispatch( ( storeDispatch, ownProps ) => {

ui/js/dfv/src/components/field-wrapper/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export const FieldWrapper = ( props ) => {
4848
values,
4949
setOptionValue,
5050
allPodValues,
51+
storeKey,
5152
} = props;
5253

5354
const {
@@ -139,7 +140,9 @@ export const FieldWrapper = ( props ) => {
139140
condition: () => true === toBool( required ),
140141
},
141142
],
142-
value
143+
value,
144+
name,
145+
storeKey
143146
);
144147

145148
// Don't render a field that hasn't had its dependencies met.

ui/js/dfv/src/components/field-wrapper/subfield-wrapper.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ const SubfieldWrapper = ( {
6969
// Subfields get their own set of validation rules
7070
const [ validationMessages, addValidationRules ] = useValidation(
7171
[],
72-
value
72+
value,
73+
subfieldConfig.name
7374
);
7475

7576
// Set up useSortable hook

ui/js/dfv/src/hooks/useValidation.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
import { useState, useEffect } from 'react';
2+
import {
3+
useSelect,
4+
useDispatch,
5+
} from '@wordpress/data';
26

3-
const useValidation = ( defaultRules = [], value ) => {
7+
const useValidation = ( defaultRules = [], value, fieldName, strokeKey ) => {
48
const [ validationRules, setValidationRules ] = useState( defaultRules );
5-
const [ validationMessages, setValidationMessages ] = useState( [] );
9+
10+
const validationMessages = useSelect( ( select ) => {
11+
const currentMessages = select( strokeKey ).getValidationMessages();
12+
//has fieldName ?
13+
if ( currentMessages.hasOwnProperty( fieldName ) ) {
14+
return currentMessages[ fieldName ];
15+
}
16+
return [];
17+
}, [ fieldName ] );
18+
19+
const { setValidationMessages } = useDispatch( strokeKey );
620

721
useEffect( () => {
822
const newMessages = [];
@@ -20,8 +34,7 @@ const useValidation = ( defaultRules = [], value ) => {
2034
}
2135
}
2236
} );
23-
24-
setValidationMessages( newMessages );
37+
setValidationMessages( fieldName, newMessages );
2538
}, [ value ] );
2639

2740
const addValidationRules = ( rules = [] ) => {
@@ -34,7 +47,6 @@ const useValidation = ( defaultRules = [], value ) => {
3447
} );
3548
} );
3649
};
37-
3850
return [
3951
validationMessages,
4052
addValidationRules,

ui/js/dfv/src/store/actions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,10 +335,11 @@ export const deleteField = ( fieldID, name ) => {
335335
};
336336

337337
//Set the validation messages
338-
export const setValidationMessages = ( validationMessages ) => {
338+
export const setValidationMessages = ( fieldName, validationMessages ) => {
339339
return {
340340
type: CURRENT_POD_ACTIONS.SET_VALIDATION_MESSAGES,
341341
validationMessages,
342+
fieldName,
342343
};
343344
};
344345

ui/js/dfv/src/store/reducer.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,10 @@ export const currentPod = ( state = {}, action = {} ) => {
354354
case CURRENT_POD_ACTIONS.SET_VALIDATION_MESSAGES: {
355355
return {
356356
...state,
357-
validationMessages: action.validationMessages,
357+
validationMessages: {
358+
...state.validationMessages,
359+
[ action.fieldName ]: action.validationMessages,
360+
},
358361
};
359362
}
360363
case CURRENT_POD_ACTIONS.TOGGLE_NEEDS_VALIDATING: {

ui/js/dfv/src/store/selectors.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ export const getPodOptions = ( state ) => CURRENT_POD.getFrom( state );
4242

4343
export const getPodOption = ( state, key ) => CURRENT_POD.getFrom( state )[ key ];
4444

45+
//Get all validation messages
46+
export const getValidationMessages = ( state ) => CURRENT_POD.getFrom( state ).validationMessages;
47+
export const getNeedsValidating = ( state ) => CURRENT_POD.getFrom( state ).needsValidating;
4548
//-- Pod Groups
4649
export const getGroups = ( state ) => GROUPS.getFrom( state );
4750

0 commit comments

Comments
 (0)