componentDidUpdate()

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];
                });
            });
        }
    }