over_react 5.4.1 over_react: ^5.4.1 copied to clipboard
A library for building statically-typed React UI components using Dart.
OverReact Changelog #
5.4.1 #
-
#958 Officially support Dart 3, raise SDK constraint explicitly
-
This did not involve any changes that would affect consumers; previous null-safe versions should also work in Dart 3.
-
Note: there's a known bug in Dart >=3.3.0 <3.5.0 that breaks behavior in DDC of certain functions passed to components, such as refs and potentially JS callback props: https://github.com/dart-lang/sdk/issues/56897.
During development, we recommend either avoiding those Dart versions or compiling with dart2js.
-
-
#960 Raise
analyzer
upper bound to allow 6.x -
#957 Docs: add more details around connect vs hooks
5.4.0 #
5.3.2 #
5.3.1 #
- #944 Analyzer plugin: Don't lint for required props that are specified due to prop forwarding
5.3.0 #
- #937 Use and export a new, more expressive typedef for
Object?
calledReactNode
5.2.1 #
5.2.0 #
- #920 Support conversion of prop values via annotations:
@ConvertProp
,@convertJsMapProp
,@convertJsRefProp
- #925 Remove publish action that always fails due to dry run warnings
- #928 Fix num keys incorrectly linting as not unique
- #930 Fix Analyzer Plugin error when typing keys
- #932 Update the null safety migration documentation
5.1.0 #
- #910 / #916 Add null safety migration / component authoring guides.
- #909 Deprecate the optional
initialValue
argument in theuseRef
hook.- Use the
useRefInit
hook instead if you need to set an initial value.
- Use the
- #909 Deprecate the optional
defaultValue
argument increateContext
.- Use
createContextInit
instead if you need to set a default value.
- Use
- #917 Only validate required props in null-safe components
5.0.1 #
- Consume over_react_test 3.0.0
5.0.0 #
- Migrate to null safety
- Support generating code for null-safe libraries (while retaining support for non-null-safe libraries)
- Add ability to declare required, optionally-non-nullable props and state fields using Dart's
late
keyword (AKA "late required props")- Stay tuned for fully baked null safety documentation for this library!
Analyzer plugin
- Add new lint,
over_react_required_prop
(#896)- Warns for missing
late
required props - Supports linting for missing
@requiredProp
required props (these are deprecated in favor oflate
), but this is disabled by default
- Warns for missing
- Add new lint,
over_react_unsafe_required_prop_access
, that warns when accessing required props on potentially incomplete maps - Reinstate functionality that had to be disabled in over_react 4.8.3 since it wasn't fully null-safe
- Lints (AKA diagnostics)
over_react_boilerplate_error
,over_react_boilerplate_warning
over_react_incorrect_doc_comment_location
- Assist for toggling class component statefulness
- Lints (AKA diagnostics)
- Update diagnostics, fixes, and assists to work on null-safe code, add null-safe test cases
API additions #
- Add members to UiProps to support
late
required props (stay tuned for more documentation on these)- Extension methods: getPropKey, containsProp, getRequiredProp(OrNull)
- disableRequiredPropValidation
- Internal use only: validateRequiredProps, requiredPropNamesToSkipValidation
- Add createContextInit for creating contexts with non-nullable values
- Add isLate field to PropDescriptor and StateDescriptor
Breaking changes #
- Deprecated API removals:
- BuiltReduxUiComponent, BuiltReduxUiProps
package:over_react/experimental.dart
(only exported built_redux APIs)- forwardRef (not to be confused with
uiForwardRef
) - The
displayName
argument of registerComponent and registerComponent2
- The following props classes can no longer be extended or instantiated directly (like most components). To instantiate them, use the factory instead.
- FragmentProps
- StrictModeProps
- ReduxProviderProps (for extension, mix in ReduxProviderPropsMixin instead)
- ProviderProps (factory:
Context.Provider
) - ConsumerProps (factory:
Context.Consumer
)
- The following props are now required:
FluxUiPropsMixin.actions
,FluxUiPropsMixin.store
ProviderProps.value
(ProviderProps
is the return type ofContext.Provider
)ReduxMultiProviderProps.storesByContext
ReduxProviderProps.store
- UiPropsMapView (deprecated)
- is now abstract and requires subclasses to override
selfFactory
- now extends directly from UiProps, and longer implements
MapView
(it still implementsMap
) props
now returns the backing map instead ofthis
- is now abstract and requires subclasses to override
react_dom.render
arg loosened fromReactElement
todynamic
- Other changes that we don't expect to affect consumers:
PropsMeta
/StateMeta
constructor argumentsfields
andkeys
are now requiredProviderProps.props
type has been widened fromJsMap
toMap
(now matchesConsumerProps
and other props classes)ConnectPropsMixin
nowimplements UiProps
(the one exported frompackage:over_react/over_react.dart
) instead ofUiProps
's superclass of the same name,component_base.UiProps
.
4.11.1 #
- #881 Fix disableRequiredPropValidation annotation and add test
4.11.0 #
- #879 Backpatch @Props(disableRequiredPropValidation) annotation arg
4.10.4 #
- #853 Allow react 7 and w_flux 3
4.10.3 #
- #846 Update internals to prepare for react-dart 7.0.0
4.10.2 #
- #835 Upgrade dependencies, notably jumping to analyzer 5.x
- analyzer:
^5.1.0
(was>=1.7.2 <3.0.0
) - dart_style:
^2.0.0
(was>=1.2.5 <3.0.0
) - w_common:
^3.0.0
(was>=2.0.0 <4.0.0
)
- analyzer:
4.10.0 #
- #829 Add improved prop forwarding methods (
UiProps.getPropsToForward
/.addPropsToForward
) - #809, #826, #827 Example app dependency updates
4.9.1 #
- #824 Update 3rd party dependencies
4.9.0 #
4.8.5 #
- #815 Dependency updates:
dart_dev: '>=3.0.0 <5.0.0'
- #816 Dependency updates:
w_common: '>=2.0.0 <4.0.0'
4.8.4 #
- 4.8.3 was missing the analyzer plugin in the published package for some reason, and this release should hopefully include it again.
4.8.3 #
- #807 Allow analyzer 2.x, fix analyzer plugin not starting in newer SDKs
4.8.2 #
- #804 Dependencies: raise analyzer to ^1.7.2, unpin meta
- #805 Internal CI and dev_dependencies updates
4.8.1 #
- #802 Raise platform_detect upperbound to allow 2.x
- #800 (Docs) Add Redux DevTools integration documentation
4.8.0 #
- #797 Add
overReactReduxDevToolsMiddlewareFactory
for constructing middleware with aname
, allowing store instances to be separated in the Redux Dev Tools
4.7.0 #
- #795 Add
jsifyMapListProp
andunjsifyMapListProp
conversion utils
4.6.0 #
Analyzer Plugin
-
#788 Add new
over_react_hooks_exhaustive_deps
diagnostic that validates the dependency lists of React hooks such asuseEffect
,useMemo
, anduseCallback
.Ported/forked from the JS eslint-plugin-react-hooks
react-hooks/exhaustive-deps
rule (info from the React docs, package, source), this Dart diagnostic aims to provide parity with the dev experience of the JS lint rule, with some tweaks to work better with Dart and over_react's flavor of React APIs.
4.5.0 #
- #785 Add utilities for jsifying/unsifying context props
4.4.4 #
4.4.3 #
4.4.2 #
- #770 Fix component names not showing in Error Boundary stacks for class-based components
- #769 Add documentation for wrapping JS components using
uiJsComponent
4.4.1 #
- #764 (Example app) Widen uuid dependency
4.4.0 #
- #743 Add
js_component.dart
entrypoint with utilities for wrapping JS React components. More in-depth documentation around how to use these APIs and best practices is coming soon.
Analyzer Plugin
- Fix diagnostics not working in Dart >=2.13, by upgrading to analyzer_plugin 0.6.0
- Diagnostics can be configured with custom severity, including disabling them (docs)
- New diagnostics:
over_react_create_ref_usage
- Warns when using createRef in a function component instead of useRefover_react_non_defaulted_prop
- Warns when using a prop in a function component instead of a local variable that defaults the propover_react_rules_of_hooks
- Warns when calling hooks conditionally or using hooks outside of function components or custom hook functionsover_react_style_camel_case
- Warns when using non-camelCased keys instyle
maps, which get ignored by React
- New assists:
- Convert between function and class component syntax (only moves code around and doesn't migrate lifecycle methods, state, hooks, etc.)
- Improvements to existing features:
over_react_invalid_render_return_type
- Update to work with function componentsover_react_duplicate_prop_cascade
- Fix duplicate DOM props not linting in certain cases- "Add ref" assist and ref object quick fixes - Update to work with function components
- Migrate most code to null safety, fix several potential null errors
- Improve test coverage
4.3.1 #
- #736 Raise dependency upper bounds to allow analyzer 1.x, built_redux 8.x, dart_style 2.x, and quiver 3.x
4.3.0 #
- #742 Update AriaPropsMixin
- #737 Temporarily disable the mockito builder for better build perf
- #741 Replace deprecated commands with new dart commands
4.2.9 #
- #733 Update SafeRenderManager to not be retained by the React tree it renders, to aid in memory leak testing. Outside of that context, this change has negligible effects.
4.2.8 #
- #729 Raise built_value lower bound to
^8.0.0
4.2.7 #
- #730 Fix bug where components using the React Redux
useSelector
andcreateSelectorHook
hook APIs would rerender on every store update, even when there were no changes to selected values
4.2.6 #
- #722 Dependency upgrades
4.2.5 #
- #720 Auto-tear-down ConnectFluxAdapterStores when backing Flux stores dispose
- Bump react lower bound to 6.1.4
Internal Tech Debt:
- Dev dependencies: remove dart2_constant, update test_html_builder and dependency_validator to latest
- CI: Don't run main build in Dart 2.14 until we can upgrade pkg:analyzer and get it passing again
- CI: Fix analyzer plugin build
4.2.4 #
- #710 Support type-checking directly from the
UiFactory
to better support JS components
4.2.3 #
4.2.2 #
- Reinstate null-aware isDisposedOrDisposing (removed in #703/4.2.1) to support tests with mocked stores
4.2.1 #
- #703 Improve FluxUiComponent logging when attempting to subscribe to a disposed store
4.2.0 #
- #701 Add
elementType
convenience getter toUiFactory
, Changemeta
dependency lower-bound to1.1.6
to prevent dependency gridlock (missed in #695).
4.1.3 #
- #698 Conditionally unconvert style and children props
4.1.2 #
- #689 Copy language version comments to generated part files
- #695 Widen Dependency Ranges Blocking Dart 2.13
4.1.1 #
- #685 Remove deprecated authors field from pubspec.yaml
- #691 Enable resolution of build_web_compilers 2.12.0, fix Dart stable build
4.1.0 #
-
#679 Update boilerplate to be compatible with Dart >=2.9.0.
This introduced a new component factory syntax that future proofs the boilerplate syntax through Dart 2.12! For more information and migration instructions, refer to the PR description.
-
#674 Add Redux hooks.
Introducing new Redux hook APIs! OverReact consumers also using OverReact Redux can now use the
useDispatch
,useSelector
, anduseStore
hooks. For more information, refer to the documenation. -
#655 Add the capability to configure
ComponentTypeMeta
on functional components viasetComponentMeta
.Those who used class based components were accustomed to being able to modify meta data by using the
@Component2()
annotation. Previously, there was no way to do this on functional components. However, the newsetComponentMeta
API fixes this and allows for similar capabilities on functional components.
4.0.0 #
This stable, major release of over_react includes:
ReactJS 17.x Support #
The underlying .js
files provided by this package are now ReactJS version 17.0.1
.
3.12.1 #
- #643 Use
propsOrStateMapsEqual
inmemo
so that function tearoffs don't cause unnecessary rerenders.
3.12.0 #
- #641 Expose new event helper APIs. In react-dart, using the
SyntheticEvent
class constructors were deprecated. New event helpers were added as a replacement, and to make their usage convenient, these helpers have been exposed directly via OverReact.
3.11.0 #
- #633 Add
staticMeta
,addUnconsumedProps
, andaddUnconsumedDomProps
to theUiProps
component base class to allow for deriving consumed props in function components. See the Props Mixin Component Composition Doc for examples. - #635 Bump
react
minimum version to 5.6.1 to pull in the Chrome 86 DDC workaround
3.10.1 #
- #500 Improve error messages for boilerplate-related issues
- This notably includes major improvements to build/analyzer errors for function components
3.10.0 #
- #621 Add WithTransition wrapper component to enable "controlled" transitions using props
- #628 Fix Redux dev tools middleware console logging when
hierarchicalLoggingEnabled
is false
3.9.0 #
- #620 Fix issue where
uiForwardRef
/memo
components were being passed JSified props (by consuming react-dart'sforwardRef2
/memo2
) - #618 Add
makeMapStateToProps
/etc. arguments toconnect
to enable creation of closures specific to component instances - #625 Address analyzer lints / hints
3.8.1 #
Bug Fixes
- #623 Include deprecation annotations on legacy props mixins
Other Changes
- #487 Readme Improvements
- #619 Redux example app: Replace deprecated ExpansionPanel with new Accordion from MaterialUi
3.8.0 #
New Features
-
🎉 🎉 🎉 Support for function components, memo and hooks!!! 🎉 🎉 🎉
Sooooo much work from so many amazing people made this possible, but to summarize:
- #606 Add support for function components
- #613 Add support for
memo
higher order component - #611 Hooks, hooks, and more hooks!
- useState
- useCallback
- useContext
- useEffect
- useLayoutEffect
- useReducer
- useRef
- useMemo
- useImperativeHandle
- useDebugValue
It works like this...Define the component
mixin FancyBorderProps on UiProps { String color; } UiFactory<FancyBorderProps> FancyBorder = uiFunction( (props) { // props is typed as a `FancyBorderProps` // whatever you return here will be rendered return (Dom.div()..className = 'fancy-border border-${props.color}')( props.children, ); }, $FancyBorderConfig, // ignore: undefined_identifier );
Render the component (exact same consumer API as a class-based component):
import 'package:over_react/over_react.dart'; import 'fancy_border.dart'; // Where your component is defined main() { final renderedWidget = (FancyBorder()..color = /* some color value */)( // put some children here! ); react_dom.render(renderedWidget, querySelector('#idOfSomeNodeInTheDom')); }
Other Changes
- #612 Deprecate
forwardRef
/ adduiForwardRef
as its replacement
3.7.0 #
Library Changes:
- #499 Add PureComponentMixin
- Allows you to build components similar to React.PureComponent!
- #462, #608 Redux connect performance optimizations
- #501 Add code snippet for Redux connected components
Analyzer Plugin Changes:
3.6.0 #
-
Add OverReact Analyzer Plugin (beta) ⚡️
A Dart analyzer plugin for OverReact, bringing analysis-time checks and behavior to IDEs using the Dart Analysis Server (including JetBrains IDEs and VS Code).
Functionality includes checking for issues that cause React warnings/errors at runtime, linting for best practices, adding "assists" for common edits to component syntax and boilerplate, and more!
-
#498 Fix missing
allowInterop
call inOverReactReduxDevToolsMiddleware.handleEventFromRemote
-
Documentation updates
3.5.3 #
- #496 Emit a build error for mismatched components in the new boilerplate
3.5.2 #
- #494 Widen analyzer range to include 0.39.x
3.5.1 #
- #488 Add missing _ to factory assignment in boilerplate snippets
- #490 Allow static members in concrete props/state classes in new, mixin-based boilerplate
3.5.0 #
-
Introduce new and improved component boilerplate syntax 🎉
See our migration guide for more information around these changes, including why we made them and how to convert existing components to use thew new syntax.
The existing boilerplate syntax will be deprecated in a future release.
-
#469 Throw helpful error when
connect
,connectFlux
, andforwardRef
are passed an invalid component.
3.4.1 #
- #468 Allow redux.dart version 4
3.4.0 #
- #459 Add support for
connect
ed components that usew_flux
stores and actions.
3.3.0 #
- connect/forwardRef HOC type checking:
- Fix error when passing ReactElements of these HOCs into
isComponentOfType
- Treat HOC types as subtypes of the components they wrap, as expected.
- Fix error when passing ReactElements of these HOCs into
3.2.1 #
- #461 Fix accidental jsification of
Map
/Function
Dart props in certain cases when usingconnect
3.2.0 #
- #439 Add
over_react_redux
example app - #447 Add
StrictMode
component - #452 Add
built_redux
to Redux transition Docs - #453 Fix rem measurement bug
3.1.7 #
- #435 Fix issue with
ErrorBoundary
that causes errors thrown within therender
phase of the component lifecycle to bubble up to parentErrorBoundary
components, which resulted in entire consumer applications locking up / crashing / unmounting.- DEPRECATIONS:
ErrorBoundaryMixin
,ErrorBoundaryPropsMixin
andErrorBoundaryStateMixin
are deprecated and will be removed in the 4.0.0 release.- To create a custom error boundary moving forward, create an HOC that wraps around the
ErrorBoundary
component instead.
- To create a custom error boundary moving forward, create an HOC that wraps around the
- DEPRECATIONS:
- #433 Refactor
propTypes
tests - #440 Make over_react_redux tests compatible with version
^7.1.1
of the redux JS library - #442 Remove Dart 2.4.1 phase from the CI build
- #428 Add examples of components that have
render
methods that returnFragment
,List
,num
andString
3.1.6 #
- Remove dead code in
UiProps.build
that was unnecessarily slowing down dart2js compilation - Fix README typos
3.1.5 #
- Fix
ErrorBoundary
infinite loop when multiple errors are thrown at the same time during remount - Fix
connect
'smapStateToOwnPropsWithProps
not getting called
3.1.4 #
- Replace usage / mention of
UiComponent2.getPropKey
which had to be deprecated in the 3.1.2 release. - Add a stub for
UiComponent2.redraw
with a deprecated annotation so that consumers would correctly see it as being deprecated.- Previously, this method would not show up as deprecated because certain IDEs would default to the base implementation (
Component.redraw
) - instead of the newer, deprecatedComponent2.redraw
.
- Previously, this method would not show up as deprecated because certain IDEs would default to the base implementation (
3.1.3 #
- Fixes an issue that prevents
UiComponent
instances from being declared as sub-types ofUiComponent2
instances via thesubtypeOf
argument in aComponent2()
annotation.
3.1.2 #
- Restore the public
getPropKey
function that was accidentally made private in the 3.1.0 release.
3.1.1 #
- Restore the
xmlLang
,xmlSpace
,y1
,y2
,y
members that were accidentally removed fromSvgProps
in the 3.1.0 release.
3.1.0 #
Full React JS 16.x Component Lifecycle Support #
-
The new
UiComponent2
classes* replace the now deprecatedUiComponent
classes.*(
UiComponent2
,UiStatefulComponent2
,FluxUiComponent2
)- Faster
- Initial renders ~10% faster
- Re-renders ~7 - 30% faster
- Improved developer experience
-
Props and state values now show up in the React DevTools just as they would if you were using React JS, and primitive values (strings, numbers, booleans) can be edited live, just like in React JS!
-
- Easier to maintain
- Easier integration with JS libs
ReactJsComponentFactoryProxy
makes it easy to use JS components with Dart!
- Supports new lifecycle methods, allowing us to use Concurrent Mode in the future
=>componentWillMount
componentDidMount
=>componentWillReceiveProps
getDerivedStateFromProps
(new)=>componentWillUpdate
getSnapshotBeforeUpdate
(new)componentDidCatch
/getDerivedStateFromError
(new)- Adds support for error boundaries.
- OverReact also provides an
ErrorBoundary
component out of the box that you can wrap around your components, and anErrorBoundaryMixin
that you can use as a starting point to build your own custom error boundary component!
- Faster
Improved, stable Context API #
- "Context provides a way to pass data through the component tree without having to pass props down manually at every level. … Context is primarily used when some data needs to be accessible by many components at different nesting levels. Apply it sparingly because it makes component reuse more difficult."
New over_react_redux.dart
Library #
- To take full advantage of the new stable
Context
API, we have built atop the awesome redux.dart library to make it easy to set up redux provider(s) / consumer(s) for OverReact components that enable granular, targeted updates!- Check out some examples
by cloning this project locally, running
webdev serve
from the root of the project, and navigating tohttp://localhost:8080/over_react_redux/
. - Use it in your project by upgrading your
UiComponent
s toUiComponent2
and importingpackage:over_react/over_react_redux.dart
!
- Check out some examples
by cloning this project locally, running
- We've even got some sweet redux dev tools you can use to make the inspection of connected state a breeze!
Portals #
- "Portals provide a first-class way to render children into a DOM node that exists outside the DOM hierarchy of the parent component."
Fragments #
- "A common pattern in React is for a component to return multiple elements. Fragments let you group a list of children without adding extra nodes to the DOM."
UiComponent.render()
can now return aReactFragment
(multiple children) or other values like strings and lists instead of just a singleReactElement
.
No more Dart 1 SDK support #
- With the release of
3.1.0
comes the end of our+dart1
/+dart2
dual releases that we have been maintaining for over a year. Time to upgrade to Dart 2!
3.0.2 #
Dependency updates:
- Lower the dart_style constraint from ^1.3.1 to ^1.2.5 to help avoid version lock in downstream packages
- Open up built_value range to include 8.0.0
Complete
3.0.2
Changesets:
- Dart 2
- Dart 1 (No Changes)
3.0.1 #
- Lower the Dart SDK lower-bound to
2.4.0
. It was accidentally raised to2.4.1
in the 3.0.0 release.
Complete
3.0.1
Changesets:
- Dart 2
- Dart 1 (No Changes)
3.0.0 #
ReactJS 16.x Support
- Support for the new / updated lifecycle methods from ReactJS 16 will be released in version
3.1.0
.
Complete
3.0.0
Changesets:
2.7.0 #
2.7.0 #
2.6.1 #
Complete
2.6.1
Changsets:
- Dart 2
- Dart 1 (No Changes)
- #382 Update prop typedef to work around Dart 2.6 compiler regression
2.6.0 #
2.5.3 #
2.5.2 #
2.5.1 #
Complete
2.5.1
Changesets:
- Dart 2
- Dart 1 (no changes)
- Increase Dart SDK dependency lower-bound to
2.4.0
2.5.0 #
2.4.4 #
2.4.3 #
Complete
2.4.3
Changesets:
- Dart 2
- Dart 1 (no changes)
- #302 The builder now warns if an
.over_react.g.dart
part directive is found in a file that does not need one (i.e. it does not produce any generated output). - #306 The handler chaining utils (e.g.
domEventCallbacks
,Callback1Arg
, etc.) have been updated to accommodate the breaking language change in Dart 2.4 around covariance of type variables used in super-interfaces.
2.4.2 #
Complete
2.4.2
Changesets:
- #288 Downgrade parse error to fine so as to not fail build unnecessarily.
- #292 Update
react
dependency to version^4.7.0
, and remove references to deprecatedjsify
,getProperty
andsetProperty
members. - #294 Fix issue with
AbstractTransitionComponent
that causes ReactJSsetState
warnings to appear in the browser console.
2.4.0 #
Complete
2.4.0
Changesets:
- Dart 2
- Dart 1 (no changes)
- #280 Optimize the over_react builder to avoid unnecessary asset reads. Informal profiling in a large codebase that consumes over_react has shown in the best case a speed up on rebuilds from ~1 minute to ~2 seconds, and in the worst case no difference at all.
2.3.1 #
2.3.0 #
2.2.0 #
Complete
2.2.0
Changesets:
-
#249 Warn consumers about props / state mutation
- Directly mutating props and state is an antipattern and can cause unpredictable rendering. Avoiding this will be especially important for components to behave correctly in React 16's concurrent mode.
-
#255 Update for future compatibility with
react
5.0.0
2.1.0 #
Complete
2.1.0
Changesets:
- Dart 2
- Dart 1 (no changes)
-
#249 Warn consumers about props / state mutation
- Directly mutating props and state is an antipattern and can cause unpredictable rendering. Avoiding this will be especially important for components to behave correctly in React 16's concurrent mode.
-
#254 Add IDE snippets (WebStorm/IntelliJ and VSCode) for Dart2-only component boilerplate.
-
#253 Fix a bug that would cause a runtime exception for consumers that are leveraging the backwards-compatible component boilerplate when mixing in a
@PropsMixin
or@StateMixin
from this package. -
#256 Workaround a Dart Dev Compiler bug that affects private props/state members and classes.
-
#252 Workaround the following Dart Dev Compiler bug that results in incorrect behavior in certain scenarios when using uninitialized props/state fields: dart-lang/sdk#36052
-
#251 Update the builder's
auto_apply
option todependents
instead ofall_packages
. This means it will only run on packages that explicitly declare a dependency onover_react
, which makes more sense for the purpose of this builder and is more performant because it runs on fewer packages. -
#250 Fail CI if changes are detected after running a build via
pub run build_runner build
. This ensures that we don't forget to commit changes to generated files.
2.0.0 #
This release adds support for Dart 2 while retaining backwards-compatibility with Dart 1, but it requires changes to consumer's component code.
Note: If you intend to consume this version of over_react on Dart 1 and Dart 2 in the same codebase, do not remove the
transformers
section from yourpubspec.yaml
. This section is ignored on Dart 2, but will still be needed on Dart 1
Breaking Changes
-
In order to add support for Dart 2, consumers need to update their over_react component code! Please see our Dart 2 migration guide for more information.
We've created a codemod tool that will automatically update your code:
# On Dart 2.1.0 $ pub global activate over_react_codemod ^1.0.2 # If you need backwards-compatibility with Dart 1: $ pub global run over_react_codemod:dart2_upgrade --backwards-compat # Or, if you are okay with dropping Dart 1 support: $ pub global run over_react_codemod:dart2_upgrade
The tool (and additional info) can be found here: https://github.com/Workiva/over_react_codemod/
-
Removals:
getJsProps()
- usegetProps()
instead$Props
and$PropKeys
- see the migration guide above
1.33.2 #
1.33.1 #
- #272 Add
min-height: 0
toResizeSensor
wrapper nodes to fix issues with it not shrinking in a flexbox layout
1.33.0 #
- #266 Add
ErrorBoundary
ComponentThis component does not actually hook into any ReactJS 16 lifecycle yet. It won't until support for ReactJS 16 is added to react-dart in version 5.0.0, and to over_react in version 3.0.0.
1.32.0 #
- #249 Warn consumers about props / state mutation
- Directly mutating props and state is an antipattern and can cause unpredictable rendering. Avoiding this will be especially important for components to behave correctly in React 16's concurrent mode.
1.31.0 #
Deprecations
-
#230 Deprecate the following APIs (they will be removed in 2.0.0):
getJsProps()
- usegetProps()
instead.$Props
and$PropKeys
- see the Dart 2 migration guide for more information.
-
#207 Override
call()
instead ofnoSuchMethod()
in theUiProps
class. This was a requirement for Dart 2 compatibility, but also serves as an improvement - by no longer overridingnoSuchMethod()
, we will no longer be obscuring certain analyzer errors that should be seen by consumers.
1.30.2 #
Bug Fixes
- #222 Fix the initializer validation for component factories and the static
meta
field on props and state classes.
1.30.1 #
1.30.0 #
New Features
-
#196 Add
componentDefaultProps
getter toUiProps
for retrieving the immutable map view of a component's default props. This is an alternative to constructing aUiComponent
directly and callinggetDefaultProps()
, which will no longer work in Dart 2. -
#208 Add
typedDefaultPropsFor(factory)
utility function to easily obtain a typed view of the immutable default props for anyUiFactory
. This is effectively a strongly-typed version of the abovecomponentDefaultProps
getter.
Improvements
1.29.0 #
Bug fixes
- #197 Mount the rem-change-detecting node for a
ResizeSensor
asynchronously to prevent react from getting into a bad state
New Features
1.28.0 #
Bug fixes
- #193 Fix missing super calls in Flux component lifecycle methods that prevented disposal and prop validation
New Features
- #193:
Add hooks for Flux component redraws that occur in response to store updates:listenToStoreForRedraw
/handleRedrawOn
- Actually implemented via #195 in
1.29.0
- Actually implemented via #195 in
Improvements
1.27.0 #
1.26.2 #
Bug fixes
- 5fb73f Make rem change sensor container is
overflow:hidden
so it doesn't interfere with the page layout
1.26.1 #
Dependency Updates
- e8fc86 Loosen lower bound of
built_value
- built_value
>=4.6.1 <5.2.0
(was>=5.1.3 <5.2.0
)
- built_value
1.26.0 #
New Features
- #178: Automatic document root font-size change detection in Google Chrome to overcome https://bugs.chromium.org/p/chromium/issues/detail?id=429140
Dependency Updates
- 881c0c Tighten version constraints to speed up pub get
- analyzer
>=0.30.0+4 <=0.31.0
(was>=0.30.0 <=0.31.0
) - built_redux
^7.4.2
(was^7.4.1
) - built_value
>=5.1.3 <5.2.0
(was>=4.2.0 <5.2.0
) - js
^0.6.1+1
(was^0.6.0
) - logging
>=0.11.3+2 <1.0.0
(was>=0.11.3+1 <1.0.0
) - meta
^1.1.6
(was^1.0.4
) - path
^1.5.1
(was^1.4.1
) - react
^4.4.2
(was^4.4.1
) - source_span
^1.4.1
(was^1.4.0
) - transformer_utils
^0.1.5
(was^0.1.1
) - w_common
^1.13.0
(was^1.10.0
) - w_flux
^2.9.5
(was^2.7.1
) - platform_detect
^1.3.4
(was^1.3.2
) - quiver
>=0.25.0 <=0.28.0
(was>=0.21.4 <=0.28.0
)
- analyzer
Tech Debt
- #179: Update CI build
1.25.0 #
New Features
1.24.0 #
Dependency Updates
- #153 react
^4.3.0
(was^3.7.0
) - #151
- built_redux
^7.4.1
(was>=6.1.0 <8.0.0
) - built_value
>=4.2.0 <5.2.0
(was>=4.2.0 <6.0.0
)
- built_redux
New Features
- #154: Expose
react_dom.render
/react_dom.unmountComponentAtNode
from the react library
Tech Debt
- #151 Prepare for Dart 2 SDK
- Address Dart 2.x SDK lints / warnings that do not constitute breaking changes
- Address
DisposableManagerV6
deprecation UiProps
andUiState
now extend fromMapBase
1.24.1 #
Dependency Updates
- w_common
^1.10.0
(was^1.8.0
) - react
^4.4.1
(was^4.3.0
)
Tech Debt
- Address
ReactComponentFactory
deprecation - Address
findRenderedComponentWithType
deprecation
1.24.0 #
Dependency Updates
- #153 react
^4.3.0
(was^3.7.0
) - #151
- built_redux
^7.4.1
(was>=6.1.0 <8.0.0
) - built_value
>=4.2.0 <5.2.0
(was>=4.2.0 <6.0.0
)
- built_redux
New Features
- #154: Expose
react_dom.render
/react_dom.unmountComponentAtNode
from the react library
Tech Debt
- #151 Prepare for Dart 2 SDK
- Address Dart 2.x SDK lints / warnings that do not constitute breaking changes
- Address
DisposableManagerV6
deprecation UiProps
andUiState
now extend fromMapBase
1.23.1 #
Dependency Updates
- #149: Dependency Maintenance:
- Dart SDK now
>=1.24.2 <2.0.0
, was>=1.24.2
- Dependencies:
- analyzer now
>=0.30.0 <=0.31.0
, was>=0.30.0 <0.31.0
- barback now
>=0.15.2 <=0.15.2+14
, was^0.15.0
- quiver now
>=0.21.4 <=0.28.0
, was>=0.21.4 <0.26.0
- analyzer now
- Dev Dependencies:
- coverage now
>=0.7.2 <0.11.0
, was^0.7.2
- dependency_validator now
^1.1.0
, was^1.0.0
- mockito now
^2.0.0
, was^0.11.0
- test now
^0.12.32+1
, was^0.12.24
- coverage now
- Dart SDK now
1.23.0 #
Dependency Updates
- #145: Widen built_value version constraint: now
>=4.2.0 <6.0.0
, was^4.2.0
New Features
- #144: Move
BuiltReduxUiComponent
/BuiltReduxUiProps
out of @experimental- Warning: This will be deprecated in an upcoming release in favor of a different approach to creating a
built_redux
component.
- Warning: This will be deprecated in an upcoming release in favor of a different approach to creating a
1.22.0 #
1.21.0 #
1.20.2 #
1.20.1 #
1.20.0 #
1.19.0 #
1.18.1 #
1.18.0 #
1.17.0 #
1.16.2 #
Bug fixes
1.16.1 #
1.16.0 #
Dependency Updates
- w_common
^1.8.0
(was^1.6.0
) - w_flux
^2.9.0
(was^2.7.1
)
New Features
- #104: Update
UiComponent
to implementDisposableManagerV6
.
Improvements
- #103:
FluxUiComponent
redraws only once when store triggers along with ancestor rerender.
Tech Debt
- #105: Add warning for incorrect usage of
getDartComponent
.
1.15.1 #
Tech Debt
- #97: Improve some documentation comments.
- #95: Move internal test utils to over_react_test, and consume them.
1.15.0 #
New Features
- #88: Add
validateProps
method toUiComponent
- Will automatically validate props annotated with
@requiredProp
withincomponentWillMount
andcomponentWillReceiveProps
- Will automatically validate props annotated with
Tech Debt
Misc
- #73: Add callout for the OverReact Snippet VS Code Extension
1.14.0 #
Dependency Updates
- react
^3.4.3
(was^3.4.1
) - w_common
^1.6.0
(new)
New Features
- #91: Implement
DisposableManagerV3
forUiComponent
- Assists with cleaning up streams and other data structures that won't necessarily be garbage collected without some manual intervention.
Misc
- #92: Update prop error message to make it more DDC friendly
1.13.0 #
1.12.1 #
1.12.0 #
Strong Mode / Dart Dev Compiler
- #81: Make transformer output strong mode clean.
- Closes #14
- #82: Implement workarounds necessary to make OverReact-based code able to be compiled by the Dart Dev Compiler ("DDC").
- See new transformer options documentation for more information.
1.11.1 #
Bug Fixes
- Revert #77: Update
FluxUiComponent
subscriptions when newprops
are received.- Reverted since this broke subclasses that weren't calling super in lifecycle methods
componentWillReceieveProps
andcomponentDidUpdate
- Keep
@mustCallSuper
annotations from this changeset
- Reverted since this broke subclasses that weren't calling super in lifecycle methods
1.11.0 #
New Features
Bug Fixes
- #77: Update
FluxUiComponent
subscriptions when newprops
are received.
Tech Debt Paid
- #75: Audit the lib for any memory leak sources, and fortify it against future ones.
Misc
- #72: Add logging message when a race condition causes
BatchedRedraws
to mount aFluxUiComponent
asynchronously after thestore
has already been disposed.- Thanks @tomconnell-wf!
1.10.0 #
Improvements
- #69: New top-level
getSelectionStart
function to normalizeselectionStart
across browsers for bothTextInputElement
s andTextAreaElement
s
Tech Debt Paid
1.9.2 #
1.9.1 #
Bug Fixes
- #66: Fix regression with transitions not completing in consumers of
AbstractTransitionComponent
that don't callsuper.componentDidMount
1.9.0 #
1.8.0 #
Bug Fixes
1.7.0 #
Deprecations
- #51: Deprecate the
@Required()
annotation since it conflicts with themeta
package. Replaced by:-
arguments to the
Accessor
annotation:@Accessor(isRequired: true, isNullable: true, requiredErrorMessage: 'foo')
-
shorthand aliases:
@requiredProp
/@nullableRequiredProp
-
Bug Fixes
- #52: Eliminate dart2js warnings on component props classes
1.6.0 #
- #48: Improved
getProps()
functionality.- Allows you to traverse wrapper components by setting the named parameter
traverseWrappers
totrue
.
- Allows you to traverse wrapper components by setting the named parameter
1.5.0 #
Improvements
- #46: Add
ResizeSensorProps.quickMount
flag for better performance when sensors are mounted often - Make
getProp
,getProps
, andmodifyProps
conditional based on the named parametershouldAdd
/shouldModify
.
Dependency Updates
- Add missing quiver dependency (now depends on quiver
>=0.21.4 <0.25.0
) - Broaden analyzer dependency range to
>=0.26.1+3 <0.30.0
(was>=0.26.1+3 <0.28.0
)
1.4.0 #
#40: Sync changes from original private repo library
This is the last time we'll do this - as the original library has now been completely switched over to use
over_react
-
Switched dependency from
browser_detect
to our newplatform_detect
library! -
Improved
toString
method ofDebugFriendlyConstant
. -
Improved
setSelectionRange
polyfill to avoid https://github.com/dart-lang/sdk/issues/22967 -
Added typedef for
ElementCallback
andResizeSensorHandler
. -
Added
newStyleFromProps
utility function. -
Added
getPropKey
utility function.- Allows you to get a namespaced prop key dynamically!
Miscellaneous
1.3.0 #
React JS Upgrade
- #31: Upgrade to
React JS
15.4.x
via react-dart3.1.0
. - #27: Add missing SVG elements
(e.g.
Dom.foreignObject
pointed out by @kasperpeulen)
We are now on Gitter!
- #33: Implement vehicle for community discussion (on Gitter). Thanks for the suggestion @jtrunick!
1.2.0 #
Strong Mode
- #15: Make
over_react
code "strong mode" compliant!- We will be working in the near future to make the code generated by our transformer compliant as well.
Dependency Updates
Bug Fixes
- #17: Add missing
browser_detect
dependency.- Thanks @denniskaselow!
Documentation
- #16: Fix typos in readme.
- Thanks @denniskaselow / @johncblandii!
- #20: Improve PR / Issue templates.
1.1.1 #
1.1.0 #
1.0.2 #
- #5: Add some Bootstrap UI components to
web/
to demonstrate what can be built using OverReact.
1.0.1 #
- Add test coverage for the
constants
,dom_util
,guid_util
andevent_helpers
libraries.
1.0.0 #
Initial public release of the library.