in src/web/listAnimations/MonitorListEdits.tsx [274:332]
componentDidUpdate(prevProps: MonitorListEditsProps) {
assert(
this._phase !== ComponentPhaseEnum.animating,
'componentDidUpdate should never run while the component is animating due to the implementation of shouldComponentUpdate',
);
if (this._phase === ComponentPhaseEnum.willAnimate) {
const phaseInfo = this._willAnimatePhaseInfo!;
const prevPositions = phaseInfo.prevPositions;
const nextPositions = computePositions(this._itemRefs);
const added: AddEdit[] = phaseInfo.added.map(child => ({
element: this._itemRefs[(child as any).key].reactElement,
}));
const removed: RemoveEdit[] = phaseInfo.removed.map(child => {
const key = child.key as any;
const prevPos = prevPositions[key];
const nextPos = nextPositions[key];
return {
leftDelta: nextPos.left - prevPos.left,
topDelta: nextPos.top - prevPos.top,
element: this._itemRefs[key].reactElement,
};
});
const moved: MoveEdit[] = [];
phaseInfo.other.map(child => {
const key = child.key as any;
const prevPos = prevPositions[key];
const nextPos = nextPositions[key];
if (prevPos.left !== nextPos.left || prevPos.top !== nextPos.top) {
moved.push({
leftDelta: nextPos.left - prevPos.left,
topDelta: nextPos.top - prevPos.top,
element: this._itemRefs[key].reactElement,
});
}
});
this._phase = ComponentPhaseEnum.animating;
this._willAnimatePhaseInfo = undefined;
this.props.componentWillAnimate({
added: added,
moved: moved,
removed: removed,
}, () => {
this._phase = ComponentPhaseEnum.rest;
if (this._isMounted) {
this.forceUpdate();
}
phaseInfo.removed.forEach(child => {
const key = child.key as any;
delete this._refReplacementCache[key];
});
});
}
}