Skip to content

Commit

Permalink
redux-form#4069 redux-form#4020 fixed initialization and reinitializa…
Browse files Browse the repository at this point in the history
…tion
  • Loading branch information
andrew-aladev committed Jan 17, 2020
1 parent 12ad4ec commit 439b1c5
Showing 1 changed file with 45 additions and 38 deletions.
83 changes: 45 additions & 38 deletions src/createReduxForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -331,32 +331,42 @@ const createReduxForm = (structure: Structure<*, *>) => {
submitPromise = undefined

initIfNeeded(nextProps: ?PropsWithContext) {
const { enableReinitialize } = this.props
const {
initialValues,
initialize,
enableReinitialize,
keepDirtyOnReinitialize,
keepValues,
updateUnregisteredFields
} = this.props

if (nextProps) {
if (
(enableReinitialize || !nextProps.initialized) &&
!deepEqual(this.props.initialValues, nextProps.initialValues)
) {
const shouldReinitialize =
nextProps.initialized && enableReinitialize &&
!deepEqual(initialValues, nextProps.initialValues)
const shouldUpdateInitial =
!nextProps.initialized || shouldReinitialize

if (shouldUpdateInitial) {
const keepDirty =
nextProps.initialized && this.props.keepDirtyOnReinitialize
this.props.initialize(nextProps.initialValues, keepDirty, {
nextProps.initialized && keepDirtyOnReinitialize

initialize(nextProps.initialValues, keepDirty, {
keepValues: nextProps.keepValues,
lastInitialValues: this.props.initialValues,
lastInitialValues: initialValues,
updateUnregisteredFields: nextProps.updateUnregisteredFields
})
}
} else if (
this.props.initialValues &&
(!this.props.initialized || enableReinitialize)
) {
this.props.initialize(
this.props.initialValues,
this.props.keepDirtyOnReinitialize,
{
keepValues: this.props.keepValues,
updateUnregisteredFields: this.props.updateUnregisteredFields
}
)
} else {
const shouldUpdateInitial =
!initialized || enableReinitialize

if (shouldUpdateInitial) {
initialize(initialValues, keepDirtyOnReinitialize, {
keepValues,
updateUnregisteredFields
})
}
}
}

Expand Down Expand Up @@ -1007,29 +1017,26 @@ const createReduxForm = (structure: Structure<*, *>) => {
keepDirtyOnReinitialize
} = props
const formState = getIn(getFormState(state) || empty, form) || empty
const stateInitial = getIn(formState, 'initial')
const initialized = !!stateInitial

const shouldUpdateInitialValues =
enableReinitialize &&
initialized &&
!deepEqual(initialValues, stateInitial)
const shouldResetValues =
shouldUpdateInitialValues && !keepDirtyOnReinitialize

let initial = initialValues || stateInitial || empty
const stateInitial = getIn(formState, 'initial')
const stateValues = getIn(formState, 'values')

if (!shouldUpdateInitialValues) {
initial = stateInitial || empty
}
const initialized = !!stateInitial
const valuesInitialized = !!stateValues

let values = getIn(formState, 'values') || initial
const shouldReinitialize =
initialized && enableReinitialize &&
!deepEqual(stateInitial, initialValues)
const shouldUpdateInitial =
!initialized || shouldReinitialize
const shouldUpdateValues =
(!valuesInitialized || shouldUpdateInitial) &&
!keepDirtyOnReinitialize

if (shouldResetValues) {
values = initial
}
const initial = shouldUpdateInitial ? initialValues : stateInitial
const values = shouldUpdateValues ? initial : stateValues

const pristine = shouldResetValues || deepEqual(initial, values)
const pristine = shouldUpdateValues || deepEqual(initial, values)
const asyncErrors = getIn(formState, 'asyncErrors')
const syncErrors = getIn(formState, 'syncErrors') || plain.empty
const syncWarnings = getIn(formState, 'syncWarnings') || plain.empty
Expand Down

0 comments on commit 439b1c5

Please sign in to comment.