Implement real-time devices synchronization
Created by: nicofrand
How to reproduce:
- Open Kresus on browser A
- Open Kresus on browser B
- On browser B, create a category "test" and associate any operation to this new category
- Close browser B
- Get back to browser A and launch a manual synchronization
Assertion error: categoryToLabel lookup failed for id: e589541f64243439cb2ee2d7822ff608
assert@https://cozy.nicofrand.eu/apps/kresus/js/main.js:45:68
[25]</store.categoryToLabel@https://cozy.nicofrand.eu/apps/kresus/js/main.js:6611:1
render@https://cozy.nicofrand.eu/apps/kresus/js/main.js:3030:25
[148]</ReactCompositeComponentMixin._renderValidatedComponentWithoutOwnerOrContext@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15900:29
[148]</ReactCompositeComponentMixin._renderValidatedComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15927:9
[148]</ReactCompositeComponentMixin.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15348:25
[192]</ReactReconciler.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23053:18
[182]</ReactMultiChild.Mixin.mountChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21796:28
[153]</ReactDOMComponent.Mixin._createContentMarkup@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16662:27
[153]</ReactDOMComponent.Mixin.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16572:1
[192]</ReactReconciler.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23053:18
[148]</ReactCompositeComponentMixin.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15358:18
[192]</ReactReconciler.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23053:18
[182]</ReactMultiChild.Mixin.mountChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21796:28
[153]</ReactDOMComponent.Mixin._createContentMarkup@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16662:27
[153]</ReactDOMComponent.Mixin.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16572:1
[192]</ReactReconciler.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23053:18
[148]</ReactCompositeComponentMixin.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15358:18
[192]</ReactReconciler.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23053:18
[148]</ReactCompositeComponentMixin.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15358:18
[192]</ReactReconciler.mountComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23053:18
[182]</ReactMultiChild.Mixin._mountChildByNameAtIndex@https://cozy.nicofrand.eu/apps/kresus/js/main.js:22004:24
[182]</ReactMultiChild.Mixin._updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21910:1
[182]</ReactMultiChild.Mixin.updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21855:9
[153]</ReactDOMComponent.Mixin._updateDOMChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16843:7
[153]</ReactDOMComponent.Mixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16692:5
[153]</ReactDOMComponent.Mixin.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16676:5
[192]</ReactReconciler.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23112:5
[148]</ReactCompositeComponentMixin._updateRenderedComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15859:7
[148]</ReactCompositeComponentMixin._performComponentUpdate@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15837:5
[148]</ReactCompositeComponentMixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15753:7
[148]</ReactCompositeComponentMixin.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15617:1
[192]</ReactReconciler.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23112:5
[142]</ReactChildReconciler.updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:13714:1
[182]</ReactMultiChild.Mixin._updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21881:26
[182]</ReactMultiChild.Mixin.updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21855:9
[153]</ReactDOMComponent.Mixin._updateDOMChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16843:7
[153]</ReactDOMComponent.Mixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16692:5
[153]</ReactDOMComponent.Mixin.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16676:5
[192]</ReactReconciler.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23112:5
[148]</ReactCompositeComponentMixin._updateRenderedComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15859:7
[148]</ReactCompositeComponentMixin._performComponentUpdate@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15837:5
[148]</ReactCompositeComponentMixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15753:7
[148]</ReactCompositeComponentMixin.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15617:1
[192]</ReactReconciler.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23112:5
[142]</ReactChildReconciler.updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:13714:1
[182]</ReactMultiChild.Mixin._updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21881:26
[182]</ReactMultiChild.Mixin.updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21855:9
[153]</ReactDOMComponent.Mixin._updateDOMChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16843:7
[153]</ReactDOMComponent.Mixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16692:5
[153]</ReactDOMComponent.Mixin.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16676:5
[192]</ReactReconciler.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23112:5
[148]</ReactCompositeComponentMixin._updateRenderedComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15859:7
[148]</ReactCompositeComponentMixin._performComponentUpdate@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15837:5
[148]</ReactCompositeComponentMixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15753:7
[148]</ReactCompositeComponentMixin.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15617:1
[192]</ReactReconciler.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23112:5
[142]</ReactChildReconciler.updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:13714:1
[182]</ReactMultiChild.Mixin._updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21881:26
[182]</ReactMultiChild.Mixin.updateChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:21855:9
[153]</ReactDOMComponent.Mixin._updateDOMChildren@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16843:7
[153]</ReactDOMComponent.Mixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16692:5
[153]</ReactDOMComponent.Mixin.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:16676:5
[192]</ReactReconciler.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23112:5
[148]</ReactCompositeComponentMixin._updateRenderedComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15859:7
[148]</ReactCompositeComponentMixin._performComponentUpdate@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15837:5
[148]</ReactCompositeComponentMixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15753:7
[148]</ReactCompositeComponentMixin.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15617:1
[192]</ReactReconciler.receiveComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23112:5
[148]</ReactCompositeComponentMixin._updateRenderedComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15859:7
[148]</ReactCompositeComponentMixin._performComponentUpdate@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15837:5
[148]</ReactCompositeComponentMixin.updateComponent@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15753:7
[148]</ReactCompositeComponentMixin.performUpdateIfNecessary@https://cozy.nicofrand.eu/apps/kresus/js/main.js:15650:1
[192]</ReactReconciler.performUpdateIfNecessary@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23130:5
runBatchedUpdates@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23880:1
[214]</Mixin.perform@https://cozy.nicofrand.eu/apps/kresus/js/main.js:25608:13
[214]</Mixin.perform@https://cozy.nicofrand.eu/apps/kresus/js/main.js:25608:13
[198]</<.perform@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23824:1
[198]</flushBatchedUpdates@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23904:7
[214]</Mixin.closeAll@https://cozy.nicofrand.eu/apps/kresus/js/main.js:25681:11
[214]</Mixin.perform@https://cozy.nicofrand.eu/apps/kresus/js/main.js:25622:11
[164]</ReactDefaultBatchingStrategy.batchedUpdates@https://cozy.nicofrand.eu/apps/kresus/js/main.js:18124:7
enqueueUpdate@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23944:5
enqueueUpdate@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23462:5
[197]</ReactUpdateQueue.enqueueSetState@https://cozy.nicofrand.eu/apps/kresus/js/main.js:23640:5
[145]</ReactComponent.prototype.setState@https://cozy.nicofrand.eu/apps/kresus/js/main.js:14922:3
maybeShowMore/_this2.showMoreTimer<@https://cozy.nicofrand.eu/apps/kresus/js/main.js:3439:1
The category field in the table is then empty (no "Without", no dropdown, etc.)