biosustain / ancestry

AngularJS module with interactive lineage chart components based on D3.js
http://biosustain.github.io/ancestry/
17 stars 4 forks source link

Lineage rendering fails non gracefully if an empty array is returned from API server #13

Closed pankaj28843 closed 6 years ago

pankaj28843 commented 6 years ago

LineagePlotController.initializeData fails if an empty array is a passed.

This is the buggy line: https://github.com/biosustain/ancestry/blob/6a8eb71d94483491e158428c8023c04f5b4272ea/lib/base-lineage-plot/base-lineage-plot.js#L218

How to reproduce?

  1. Create a new account on https://app.dd-decaf.eu
  2. Go to project dashboard page

Javascript console log

10:57:19.525 console.js:32 TypeError: Cannot read property 'date' of undefined
    at LineagePlotController.initializeData (base-lineage-plot.js:218)
    at LineagePlotController.$onChanges (base-lineage-plot.js:89)
    at angular.js:9951
    at forEach (angular.js:416)
    at nodeLinkFn (angular.js:9947)
    at compositeLinkFn (angular.js:9240)
    at publicLinkFn (angular.js:9105)
    at lazyCompilation (angular.js:9496)
    at boundTranscludeFn (angular.js:9283)
    at controllersBoundTransclude (angular.js:10050)
    at ngIfWatchAction (angular.js:27982)
    at Scope.$digest (angular.js:18359)
    at Scope.$apply (angular.js:18628)
    at angular.js:20553
    at completeOutstandingRequest (angular.js:6419)
    at angular.js:6699
    at wrapped (raven.js:351) undefined
console.(anonymous function) @ console.js:32
(anonymous) @ angular.js:14794
(anonymous) @ angular.js:11210
(anonymous) @ angular.js:35
(anonymous) @ angular.js:9953
forEach @ angular.js:416
nodeLinkFn @ angular.js:9947
compositeLinkFn @ angular.js:9240
publicLinkFn @ angular.js:9105
lazyCompilation @ angular.js:9496
boundTranscludeFn @ angular.js:9283
controllersBoundTransclude @ angular.js:10050
ngIfWatchAction @ angular.js:27982
$digest @ angular.js:18359
$apply @ angular.js:18628
(anonymous) @ angular.js:20553
completeOutstandingRequest @ angular.js:6419
(anonymous) @ angular.js:6699
wrapped @ raven.js:351
setTimeout (async)
(anonymous) @ raven.js:992
Browser.self.defer @ angular.js:6697
timeout @ angular.js:20543
(anonymous) @ stateDirectives.js:53
defaultHandlerWrapper @ angular.js:3785
eventHandler @ angular.js:3773
wrapped @ raven.js:351

10:57:20.082 base-lineage-plot.js:218 Uncaught TypeError: Cannot read property 'date' of undefined
    at LineagePlotController.initializeData (base-lineage-plot.js:218)
    at BaseLineagePlotController.__webpack_require__.i (base-lineage-plot.js:34)
    at wrapped (raven.js:351)
initializeData @ base-lineage-plot.js:218
BaseLineagePlotController.__webpack_require__.i @ base-lineage-plot.js:34
wrapped @ raven.js:351
setTimeout (async)
(anonymous) @ raven.js:992
(anonymous) @ shared-features.js:801
callListenerProxy @ element-resize-detector.js:153
utils.forEach @ collection-utils.js:14
onResizeCallback @ element-resize-detector.js:152
(anonymous) @ scroll.js:517
utils.forEach @ collection-utils.js:14
notifyListenersIfNeeded @ scroll.js:516
(anonymous) @ scroll.js:484
process @ batch-processor.js:124
processBatch @ batch-processor.js:37
wrapped @ raven.js:351
setTimeout (async)
(anonymous) @ raven.js:992
raf @ batch-processor.js:82
requestFrame @ batch-processor.js:83
processBatchAsync @ batch-processor.js:64
addFunction @ batch-processor.js:24
updateDetectorElements @ scroll.js:435
handleScroll @ scroll.js:552
onExpandScroll @ scroll.js:397
wrapped @ raven.js:351
scroll (async)
positionScrollbars @ scroll.js:268
finalizeDomMutation @ scroll.js:583
process @ batch-processor.js:124
processBatch @ batch-processor.js:37
wrapped @ raven.js:351
setTimeout (async)
(anonymous) @ raven.js:992
raf @ batch-processor.js:82
requestFrame @ batch-processor.js:83
processBatchAsync @ batch-processor.js:64
addFunction @ batch-processor.js:24
install @ scroll.js:595
makeDetectable @ scroll.js:616
attachListenerToElement @ element-resize-detector.js:229
utils.forEach @ collection-utils.js:14
listenTo @ element-resize-detector.js:197
attachActionOnResize @ shared-features.js:794
BaseLineagePlotController @ base-lineage-plot.js:31
LineagePlotController @ lineage-plot.js:42
invoke @ angular.js:5100
$controllerInit @ angular.js:11068
nodeLinkFn @ angular.js:9931
compositeLinkFn @ angular.js:9240
publicLinkFn @ angular.js:9105
lazyCompilation @ angular.js:9496
boundTranscludeFn @ angular.js:9283
controllersBoundTransclude @ angular.js:10050
ngIfWatchAction @ angular.js:27982
$digest @ angular.js:18359
$apply @ angular.js:18628
(anonymous) @ angular.js:20553
completeOutstandingRequest @ angular.js:6419
(anonymous) @ angular.js:6699
wrapped @ raven.js:351
setTimeout (async)
(anonymous) @ raven.js:992
Browser.self.defer @ angular.js:6697
timeout @ angular.js:20543
(anonymous) @ stateDirectives.js:53
defaultHandlerWrapper @ angular.js:3785
eventHandler @ angular.js:3773
wrapped @ raven.js:351
pcolaianni commented 6 years ago

Thanks for reporting, this should be fixed now: https://github.com/biosustain/ancestry/commit/625d659452f9b0b243be7df723ff210fe06a36a8