- add new option
never
forngrxUpdateOn
(ea0b284), see documentation for more details, thanks @Mr-Eluzive for their contribution in #119), closes #118
- allow setting
null
andundefined
values with curried version ofsetValue
(fe92a23), thanks @chrissena for reporting this bug, closes #116
- check if platform is browser in default view adapter to prevent error during server-side rendering (0646fb7), thanks @scott-wyatt for his contribution in #111), closes #110
- remove module augmentations for
requiredTrue
andrequiredFalse
validation errors since they conflict with therequired
module augmentation and are already covered by it (1ab557f), closes #92
This release requires TypeScript >=2.8.0 for the conditional type support. It also requires Angular >= 6.1.0 for compatibility with that TypeScript version.
- remove
cast
utility function since it is obsolete due to proper control type inference - change order of parameters for many update functions to more be consistent
addArrayControl
: movestate
parameter to first position for uncurried overload (ab094b8)removeArrayControl
: movestate
parameter to first position for uncurried overload (5a5aa17)addGroupControl
: movestate
parameter to first position for uncurried overload (b6da5ee)removeGroupControl
: movestate
parameter to first position for uncurried overload (a9035ce)setErrors
: rework to support different parameter combinations for errors (i.e. single error object, array of error objects, and rest parameters) and movestate
parameter to first position for uncurried overload (15ea555)setUserDefinedProperty
: movestate
parameter to first position for uncurried overload (520c384)setValue
: movestate
parameter to first position for uncurried overload (1a69795)validate
: movestate
parameter to first position for uncurried overload and add rest param overloads
- due to rework of
updateArray
,updateGroup
, andupdateRecursive
update functions it is now invalid to call any of these functions without parameters (which made no sense anyway) but it is still possible to call the functions with an empty array as parameter (which is useful in dynamic situations) - remove
payload
property from all actions and move corresponding properties into action itself (6f955e9) - replace
createFormGroupReducerWithUpdate
withcreateFormStateReducerWithUpdate
(which takes any kind of form state, it also behaves differently in that it only applies the update if the form state changes as part of reducing the action, see the user guide for more details) (1b6114c) - mark all state properties as
readonly
to make it more clear the state is not meant to be modified directly (291e0da) - change form arrays and groups to preserve the values of
isDirty
,isEnabled
,isTouched
, andisSubmitted
when the state is changed instead of always recomputing the values of these properties based on the state's child states (e.g. the state is not automatically disabled when all its child states are disabled, it is not automatically marked as pristine if it was dirty and all its child states are marked as pristine or all children are removed, etc.) (9202d1e), closes #68 - mark arrays and groups as dirty when adding or removing controls (9202d1e)
- use conditional types to infer the type of child controls (see the documentation for more details)
- add support for using arrays and objects as control values via boxing (see the documentation for more details) (315ae4c)
- add
formStateReducer
function, a reducer which can reduce any kind of form state and is correctly typed due to conditional type inference (48eaaeb) - rework
updateArray
to support different parameter combinations for update functions (i.e. single function, array of functions, and rest parameters) (f82abf8) - rework
updateGroup
to support different parameter combinations for update function objects (i.e. single object, array of objects, and rest parameters) which reduces the probability of false type inference results (0bb1ca7) - rework
updateRecursive
to support different parameter combinations for update function objects (i.e. single object, array of objects, and rest parameters) (96121c3) - add
updateArrayWithFilter
update function which works the same asupdateArray
except that it also takes a filter function that is applied to each array element to determine whether the update function should be applied (0b66a6f) - add
notEqualTo
validation function (851a1ed) - enhance all form state reducers to match type signature for
ActionReducer
(they will still throw an error if the state isundefined
) (f3b5fea) - add support for
undefined
values for all validation functions (6cce8d0, thanks @romankhrystynych for his contribution in #65), closes #64 - improve typing of
errors
property on form states by using module augmentation inside of validation module to add well defined error properties toValidationErrors
interface (e202e65) - move documentation to Read the Docs
- add FAQ
- add some reducer tests for example application to showcase how ngrx-forms can be tested (5098f02), closes #58
- do not automatically set
id
of form elements to state's ID for elements that already have anid
set (3c8eabc), closes #86
- fix typing of action
type
andTYPE
properties to properly use literal string type (0cd07b6), closes #75, thanks @bufke for helping me find this
- recursively update nested controls IDs when adding controls to arrays (7b1de7c), closes #72 (thanks @solnat for this fix)
- ensure the
value
attribute ofoption
elements is properly set via[value]
bindings when there is no associated form view adapter (bfaa388) (closes #67, thanks @kmiskiewicz for helping me find this)
- do not focus or blur form elements initially or on state changes when focus tracking is not enabled (f6a10d5) (thanks @bufke for helping me find this)
- make implicit browser platform dependency optional and disallow focus tracking on non-browser platforms (e7760bc) (thanks @bufke for helping me find this)
- allow action
type
to be undefined inside form state reducers (0a61def), closes #44 (thanks @lucax88x)
- add support for array values in
minLength
,maxLength
, andrequired
validation functions (c88353a), closes #40 (thanks @icepeng) - set CSS classes on form elements based on the status of the control (see the documentation for more details) (eddcbf4), closes #34
- empty groups and arrays are now always enabled instead of disabled and therefore errors can now be set on empty groups and arrays (note that this is only a minor breaking change and only applies in edge cases and therefore this fix is included in a new minor instead of a new major version) (749c1b5), closes #37
- fix missing union case in typing of
updateArray
update function that causes a compile error if used inside anupdateGroup
(fa7dccc) - fix
updateGroup
throwing an error if an empty update object was provided in curried as well as uncurried version (bee4d54) - fix
createFormGroupState
producing results inconsistent with how group states are recomputed from their children after an update (1c62d8c) - fix
createFormArrayState
producing results inconsistent with how array states are recomputed from their children after an update (70fdc10)
- fix
select
controls not properly selectingoption
ifoption
is added to the DOM after the value of the state was set to the value of the option (0c2c0cc), closes #23
- improve performance by ignoring irrelevant actions in reducers
- fix issue that causes user defined properties not being properly set for form controls in groups or arrays when setting them by dispatching actions (ba0c34f), closes #24
- properly handle case where the
addArrayControl
update function is called with only a value but neither an index nor a state
- add support for arrays of form controls (19d4e49)
- add support for asynchronous validation (see the documentation for more details) (f208e61)
- add value converter for object to JSON conversion (2ba37ee) (thanks @tbroadley)
- add support for error composition by extending
validate
update function to take a single validation function or an array of validation functions (ba976c5) - add
setErrors
update function (ee25ca8) - add
reset
update function (d380e67) - add
updateRecursive
update function (see the documentation for a usage example) (31f9d5d) - add common set of validation functions (40308d4)
- add support for user defined properties on form controls and groups (d9778d2)
- introduce concept of
FormViewAdapter
and rewrite all control value accessors from scratch as view adapters (see the documentation for more details) - extend example application to contain multiple examples
- added overloads for many update functions that make casting the state unnecessary in certain situations
- added lots of inline comments to the API making it easier to understand what certain functions do right in your IDE
- remove support for last keydown code tracking on form controls (this feature has been superseded by user defined properties which allow associating any kind of metadata with a control)
- rename
groupUpdateReducer
tocreateFormGroupReducerWithUpdate
in order to make it clearer that the function itself is not a reducer - remove erroneously exposed function
createChildState
from public API - change
option
elementvalue
bindings to work correctly for all primitive data types thereby removing the need forngValue
bindings - trying to set an error with a key prefixed with
$
will now throw an error since the$
prefix is used to mark async errors - applying the
ngrxFormControlState
directive to a form element will now set the element'sid
attribute to the ID of the state (thereby overriding any already presentid
) - the
isDirty
property for form controls is now not set automatically the first time the state's value changes, but instead it is set manually from theNgrxFormControlDirective
the first time the underlyingFormViewAdapter
orControlValueAccessor
reports a new value; this means if you were e.g. using thesetValue
update function in your reducer before this will now not mark the state asdirty
anymore - rename
addControl
update function toaddGroupControl
- rename
AddControlAction
toAddGroupControlAction
(also renaming itstype
fromngrx/forms/ADD_CONTROL
tongrx/forms/ADD_GROUP_CONTROL
) - rename
removeControl
update function toremoveGroupControl
- rename
RemoveControlAction
toRemoveGroupControlAction
(also renaming itstype
fromngrx/forms/REMOVE_CONTROL
tongrx/forms/REMOVE_GROUP_CONTROL
)
- fix issue that caused bundled library to be larger than required due to external dependencies being included in the bundle (drastically reducing its size)
- change
updateGroups
function to properly accept multiple update function objects as written in the documentation
- add support for controlling when the view value is pushed to the state via
ngrxUpdateOn
- add support for value conversion via
ngrxValueConverter
- add support for
ngValue
onoption
elements, thereby fixing non-string option values not working forselect
elements (thanks @nathanmarks for finding this issue) - fix issue that prevents setting a value via state change if the same value was previously set via the view (thanks @nathanmarks for finding this issue)
- fix issue that caused control state value to not be properly set to form element if the ID of the control state changed but the state's value was the same as the last value the view reported for the previous state
- changed form control state directive to run its initialization code inside the
ngAfterViewInit
hook instead ofngOnInit
to allow proper interaction with form elements that can have dynamically rendered children they depend on (e.g. dynamicoption
s forselect
s) (thanks @nathanmarks for finding this issue)
- Initial version of the library