formula-one
Advanced tools
Comparing version 0.3.1 to 0.4.0
# Changelog | ||
### v0.4.0 | ||
- Implement all of the feedback strategies. | ||
### v0.3.1 | ||
@@ -4,0 +8,0 @@ |
@@ -90,2 +90,5 @@ "use strict"; | ||
// FEATURE(zach): Change these to be mix-and-matchable (i.e. OnSubmit & OnChange, OnSuccess | OnTouch) | ||
function getShouldShowError(strategy) { | ||
@@ -98,10 +101,24 @@ switch (strategy) { | ||
case "OnFirstTouch": | ||
return function (meta) { | ||
return function (_metaForm, meta) { | ||
return meta.touched; | ||
}; | ||
case "OnFirstChange": | ||
return function (meta) { | ||
return function (_metaForm, meta) { | ||
return meta.changed; | ||
}; | ||
case "OnFirstSuccess": | ||
return function (_metaForm, meta) { | ||
return meta.succeeded; | ||
}; | ||
case "OnFirstSuccessOrFirstTouch": | ||
return function (_metaForm, meta) { | ||
return meta.succeeded || meta.touched; | ||
}; | ||
case "OnSubmit": | ||
return function (metaForm) { | ||
return metaForm.submitted; | ||
}; | ||
default: | ||
// eslint-disable-next-line no-unused-expressions | ||
strategy; | ||
throw new Error("Unimplemented feedback strategy: " + strategy); | ||
@@ -193,2 +210,6 @@ } | ||
var metaForm = { | ||
pristine: this.state.pristine, | ||
submitted: this.state.submitted | ||
}; | ||
@@ -198,7 +219,5 @@ return React.createElement( | ||
{ | ||
value: { | ||
shouldShowError: getShouldShowError(this.props.feedbackStrategy), | ||
pristine: this.state.pristine, | ||
submitted: this.state.submitted | ||
} | ||
value: _extends({ | ||
shouldShowError: getShouldShowError(this.props.feedbackStrategy).bind(null, metaForm) | ||
}, metaForm) | ||
}, | ||
@@ -213,3 +232,3 @@ this.props.children({ | ||
changed: (0, _formState2.getExtras)(formState).meta.changed, | ||
shouldShowErrors: getShouldShowError(this.props.feedbackStrategy)((0, _formState2.getExtras)(formState).meta), | ||
shouldShowErrors: getShouldShowError(this.props.feedbackStrategy)(metaForm, (0, _formState2.getExtras)(formState).meta), | ||
unfilteredErrors: (0, _formState2.flatRootErrors)(formState), | ||
@@ -216,0 +235,0 @@ asyncValidationInFlight: false, // no validations on Form |
{ | ||
"name": "formula-one", | ||
"version": "0.3.1", | ||
"version": "0.4.0", | ||
"description": "Strongly-typed React form state management", | ||
@@ -15,3 +15,3 @@ "author": "Zach Gotsch", | ||
"build": "babel -d dist/ src/", | ||
"prepublishOnly": "npm run-script build", | ||
"prepublishOnly": "yarn run flow && yarn run jest && yarn run build", | ||
"test": "jest" | ||
@@ -18,0 +18,0 @@ }, |
@@ -7,2 +7,3 @@ // @flow strict | ||
MetaField, | ||
MetaForm, | ||
OnBlur, | ||
@@ -28,3 +29,3 @@ OnValidation, | ||
export type FormContextPayload = { | ||
shouldShowError: (meta: MetaField) => boolean, | ||
shouldShowError: (metaField: MetaField) => boolean, | ||
// These values are taken into account in shouldShowError, but are also | ||
@@ -94,11 +95,14 @@ // available in their raw form, for convenience. | ||
// FEATURE(zach): Change these to be mix-and-matchable (i.e. OnSubmit & OnChange, OnSuccess | OnTouch) | ||
export type FeedbackStrategy = | ||
| "Always" | ||
| "OnFirstTouch" | ||
| "OnFirstTouch" // A touch is a blur or a change | ||
| "OnFirstChange" | ||
| "OnFirstSuccess" | ||
| "OnFirstSuccessOrFirstBlur" | ||
| "OnFirstSuccessOrFirstTouch" | ||
| "OnSubmit"; | ||
function getShouldShowError(strategy: FeedbackStrategy): MetaField => boolean { | ||
function getShouldShowError( | ||
strategy: FeedbackStrategy | ||
): (MetaForm, MetaField) => boolean { | ||
switch (strategy) { | ||
@@ -108,6 +112,14 @@ case "Always": | ||
case "OnFirstTouch": | ||
return (meta: MetaField) => meta.touched; | ||
return (_metaForm, meta: MetaField) => meta.touched; | ||
case "OnFirstChange": | ||
return (meta: MetaField) => meta.changed; | ||
return (_metaForm, meta: MetaField) => meta.changed; | ||
case "OnFirstSuccess": | ||
return (_metaForm, meta: MetaField) => meta.succeeded; | ||
case "OnFirstSuccessOrFirstTouch": | ||
return (_metaForm, meta: MetaField) => meta.succeeded || meta.touched; | ||
case "OnSubmit": | ||
return (metaForm: MetaForm) => metaForm.submitted; | ||
default: | ||
// eslint-disable-next-line no-unused-expressions | ||
(strategy: empty); | ||
throw new Error("Unimplemented feedback strategy: " + strategy); | ||
@@ -220,2 +232,6 @@ } | ||
const {formState} = this.state; | ||
const metaForm = { | ||
pristine: this.state.pristine, | ||
submitted: this.state.submitted, | ||
}; | ||
@@ -225,5 +241,7 @@ return ( | ||
value={{ | ||
shouldShowError: getShouldShowError(this.props.feedbackStrategy), | ||
pristine: this.state.pristine, | ||
submitted: this.state.submitted, | ||
shouldShowError: getShouldShowError(this.props.feedbackStrategy).bind( | ||
null, | ||
metaForm | ||
), | ||
...metaForm, | ||
}} | ||
@@ -243,2 +261,3 @@ > | ||
shouldShowErrors: getShouldShowError(this.props.feedbackStrategy)( | ||
metaForm, | ||
getExtras(formState).meta | ||
@@ -245,0 +264,0 @@ ), |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
232714
6003