{"action":"opened","issue":{"url":"https://api.github.com/repos/dojo/framework/issues/165","repository_url":"https://api.github.com/repos/dojo/framework","labels_url":"https://api.github.com/repos/dojo/framework/issues/165/labels{/name}","comments_url":"https://api.github.com/repos/dojo/framework/issues/165/comments","events_url":"https://api.github.com/repos/dojo/framework/issues/165/events","html_url":"https://github.com/dojo/framework/issues/165","id":379508569,"node_id":"MDU6SXNzdWUzNzk1MDg1Njk=","number":165,"title":"Detach widgets synchronously","user":{"login":"agubler","id":1982678,"node_id":"MDQ6VXNlcjE5ODI2Nzg=","avatar_url":"https://avatars3.githubusercontent.com/u/1982678?v=4","gravatar_id":"","url":"https://api.github.com/users/agubler","html_url":"https://github.com/agubler","followers_url":"https://api.github.com/users/agubler/followers","following_url":"https://api.github.com/users/agubler/following{/other_user}","gists_url":"https://api.github.com/users/agubler/gists{/gist_id}","starred_url":"https://api.github.com/users/agubler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agubler/subscriptions","organizations_url":"https://api.github.com/users/agubler/orgs","repos_url":"https://api.github.com/users/agubler/repos","events_url":"https://api.github.com/users/agubler/events{/privacy}","received_events_url":"https://api.github.com/users/agubler/received_events","type":"User","site_admin":false},"labels":[{"id":988651594,"node_id":"MDU6TGFiZWw5ODg2NTE1OTQ=","url":"https://api.github.com/repos/dojo/framework/labels/enhancement","name":"enhancement","color":"a2eeef","default":true},{"id":1011314495,"node_id":"MDU6TGFiZWwxMDExMzE0NDk1","url":"https://api.github.com/repos/dojo/framework/labels/next","name":"next","color":"6de516","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-11-11T10:13:16Z","updated_at":"2018-11-11T10:13:16Z","closed_at":null,"author_association":"MEMBER","body":"**Enhancement**\r\n\r\nThe current rendering logic assumes once a parent `VNode` has had it's `domNode` removed from it's parent then all subsequent children can be deferred until the client is idle using `requestIdleCallback`. \r\n\r\nThe current exception is if a child has registered an `exitAnimation` which needs to be processed specifically to ensure the animation runs as expected.\r\n\r\nHowever if the child tree contains a widget node then deferring the removal can be problematic, specifically when a meta might have been used. For example the `Resize` meta, as once a parent node has been detached from the dom tree it will cause the `Resize` meta to trigger a re-render for a widget that has actually been detached. Because the render is on the `requestAnimationFrame` it will be processed before the deferred cleanup runs on the `requestIdleCallback` causing unnecessary component renders and dom operations.\r\n\r\nAdditionally when an application is using containers to invalidate and inject state directly into sub trees of the application it can cause the same nodes to be processed by both the standard processing and also by the deferred clean up.\r\n\r\nWe should add an additional exception to only defer the clean up if there are no widget nodes in the sub tree that is being processed.\r\n "}}
{"actor":{"display_login":"agubler"}}