in lib/@uncharted/cards/src/components/inlineCardsView/inlineCardsView.js [112:148]
renderCardsInViewPort() {
const scrollLeft = this.$element[0].scrollLeft;
const viewportWidth = this.$element[0].offsetWidth;
const CARD_WIDTH = this.CARD_WIDTH;
const indexOfFirstCardInViewPort = this._getIndexOfFirstCardInViewPort(scrollLeft);
const paddingLeft = indexOfFirstCardInViewPort * CARD_WIDTH;
const newItemsInViewPort = [];
// get cards to render
for (let i = indexOfFirstCardInViewPort, remainingSpaceInViewPort = viewportWidth + (this.CARD_EXPANDED_WIDTH - CARD_WIDTH); remainingSpaceInViewPort > 0; i++) {
const card = this.cardInstances[i];
card && newItemsInViewPort.push(card);
i !== indexOfFirstCardInViewPort && (remainingSpaceInViewPort -= CARD_WIDTH);
}
if (this.cardsInViewPort[0] !== newItemsInViewPort[0] || this.cardsInViewPort[this.cardsInViewPort.length - 1] !== newItemsInViewPort[newItemsInViewPort.length - 1]) {
this.cardsInViewPort.forEach(card => {
newItemsInViewPort.indexOf(card) < 0 && card.$element && card.$element.remove() && (card.$element = undefined);
});
const fragments = document.createDocumentFragment();
newItemsInViewPort.forEach((card, index) => {
const isCardAlreadyRendered = Boolean(card.$element);
const $cardElement = isCardAlreadyRendered ? card.$element : card.render();
$cardElement.css({
'order': index + 1,
});
!isCardAlreadyRendered && fragments.appendChild($cardElement[0]);
});
this._$cardsContainer.css({
'padding-left': paddingLeft,
});
this._$cardsContainer.append(fragments);
this.cardsInViewPort = newItemsInViewPort;
}
this.postRender();
}