- Added support for fields that have their own subschema
- The code flattens the subschema fields, so the path for `address: { street }`` becomes `'address.street'`
- Several places needed to be changed to properly support paths, so `currentValues[path]` becomes `get(currentValues, path)`
- In Form.getData(), replaced underscore's `pick` with lodash's `pick` which properly supports paths and returns a new object
- Fixed a bug in collection.getParameters that made it impossible to specify a `limit` with addView or addDefaultView
- Added new `FormComponent.isCustomInput` method
- Pulled `renderComponent` up from `FormComponentInner` to `FormComponent`
- Pulled some input-type-specific logic up when it was universal, or pushed it down when it should be handled by each ui library
- Moved UI portions of FormComponent to FormComponentInner.jsx in vulcan-ui-bootstrap
- Added user alert when the user navigates to another route while there are unsaved changed in the form (disabled by default)
- Added setting forms.warnUnsavedChanges and SmartForm property warnUnsavedChanges to enable user alert
- Added optional Revert button in FormSubmits to allow the user to discard any changes to the form; this is activated by passing a "revertCallback" property to SmartForm (which can be empty: () => {})
- Added two functions that form components can access in the child context: refetchForm() to refetch the document from the database (in case it was updated by a background process), isChanged() to determine if there are any unsaved changes
- For any phrases I have added to en_US.js I also added it to es_ES.js and fr_FR.js with the comment // TODO: translate
- Updated Form.clearForm and Form.mutationSuccessCallback so that the user can continue working on the document after submitting it
- The form now scrolls the flash message into view when a submit results in errors
- Fixed bugs in FormComponent.shouldComponentUpdate() and Form.getDocument()
- Fixed bug in FormComponent.handleChange() - number fields could not be cleared, only set to 0
- Fixed a bug in FormComponent.getValue() - it returned the initial value of a checkbox even after it was set to false, and a number even after it was set to 0