From bc643408030ce346a35853c4079f73c7f8f023cf Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 20 Apr 2023 15:42:47 -0400 Subject: [PATCH] #689 start adding validation messages to store --- ui/js/dfv/src/store/actions.js | 16 ++++++++++ ui/js/dfv/src/store/constants.js | 5 ++++ ui/js/dfv/src/store/store.js | 14 +++++---- ui/js/dfv/src/store/test/actions.js | 46 ++++++++++++++++++++++------- 4 files changed, 66 insertions(+), 15 deletions(-) diff --git a/ui/js/dfv/src/store/actions.js b/ui/js/dfv/src/store/actions.js index e2b908820e..67764c27a9 100644 --- a/ui/js/dfv/src/store/actions.js +++ b/ui/js/dfv/src/store/actions.js @@ -333,3 +333,19 @@ export const deleteField = ( fieldID, name ) => { }, }; }; + +//Set the validation messages +export const setValidationMessages = (messages) => { + return { + type: CURRENT_POD_ACTIONS.SET_VALIDATION_MESSAGES, + messages, + }; +} + +//Triggers validation of the pod +export const setNeedsValidating = () => { + return { + type: CURRENT_POD_ACTIONS.SET_NEEDS_VALIDATING, + needsValidating: true, + }; +} diff --git a/ui/js/dfv/src/store/constants.js b/ui/js/dfv/src/store/constants.js index 90a09598d8..99bf4e7952 100644 --- a/ui/js/dfv/src/store/constants.js +++ b/ui/js/dfv/src/store/constants.js @@ -51,6 +51,11 @@ export const CURRENT_POD_ACTIONS = { SET_GROUP_FIELD_DATA: 'CURRENT_POD/SET_GROUP_FIELD_DATA', API_REQUEST: 'CURRENT_POD/API_REQUEST', + + //Validation + //@see https://github.com/pods-framework/pods/pull/7064 + SET_VALIDATION_MESSAGES: 'CURRENT_POD/SET_VALIDATION_MESSAGES', + SET_NEEDS_VALIDATION: 'CURRENT_POD/SET_NEEDS_VALIDATION', }; export const INITIAL_UI_STATE = { diff --git a/ui/js/dfv/src/store/store.js b/ui/js/dfv/src/store/store.js index bd1e42bc28..b8fb37802e 100644 --- a/ui/js/dfv/src/store/store.js +++ b/ui/js/dfv/src/store/store.js @@ -33,12 +33,16 @@ import apiMiddleware from './api-middleware'; : `${ pod }-${ itemId }-${ formCounter }`; }; -const initStore = ( initialState, storeKey ) => { - const reduxStore = configureStore( { +const initStore = (initialState, storeKey) => { + const reduxStore = configureStore({ reducer, - middleware: [ apiMiddleware ], - preloadedState: initialState, - } ); + middleware: [apiMiddleware], + preloadedState: { + validationMessages: [], + needsValidating: false, + ...initialState + }, + }); const mappedSelectors = Object.keys( selectors ).reduce( ( acc, selectorKey ) => { acc[ selectorKey ] = ( ...args ) => diff --git a/ui/js/dfv/src/store/test/actions.js b/ui/js/dfv/src/store/test/actions.js index 71b9402f64..972f65bf81 100644 --- a/ui/js/dfv/src/store/test/actions.js +++ b/ui/js/dfv/src/store/test/actions.js @@ -29,6 +29,10 @@ import { saveGroup, deleteGroup, + //Validation related + setValidationMessages, + setNeedsValidating, + // setGroupFields, // addGroupField, // saveField, @@ -322,15 +326,37 @@ describe( 'actions', () => { expect( result.payload.onStart().type ).toEqual( UI_ACTIONS.SET_GROUP_SAVE_STATUS ); } ); - test( 'deleteGroup() returns an action to delete a group by its ID', () => { + test('deleteGroup() returns an action to delete a group by its ID', () => { const action = CURRENT_POD_ACTIONS.API_REQUEST; - const result = deleteGroup( 123 ); - - expect( result.type ).toEqual( action ); - expect( result.payload.onSuccess().type ).toEqual( UI_ACTIONS.SET_GROUP_DELETE_STATUS ); - expect( result.payload.onFailure().type ).toEqual( UI_ACTIONS.SET_GROUP_DELETE_STATUS ); - expect( result.payload.onStart().type ).toEqual( UI_ACTIONS.SET_GROUP_DELETE_STATUS ); - } ); - } ); -} ); + const result = deleteGroup(123); + + expect(result.type).toEqual(action); + expect(result.payload.onSuccess().type).toEqual(UI_ACTIONS.SET_GROUP_DELETE_STATUS); + expect(result.payload.onFailure().type).toEqual(UI_ACTIONS.SET_GROUP_DELETE_STATUS); + expect(result.payload.onStart().type).toEqual(UI_ACTIONS.SET_GROUP_DELETE_STATUS); + }); + + test('setValidationMessages sets messages', () => { + const action = CURRENT_POD_ACTIONS.SET_VALIDATION_MESSAGES; + + const result = setValidationMessages([ + 'hi', + 'roy' + ]); + + expect(result.type).toEqual(action); + expect(result.messages).toEqual([ + 'hi', + 'roy' + ]); + }) + + test('setNeedsValidating sets validation needed', () => { + const action = CURRENT_POD_ACTIONS.SET_VALIDATION_MESSAGES; + const result = setNeedsValidating(); + expect(result.type).toEqual(action); + expect(result.needsValidating).toEqual(true); + }) + }); +});