@nativescript-community/ui-pager
Version:
A NativeScript Pager / Carousel component that allows the user to swipe left and right through pages of data.
1,017 lines • 39.5 kB
JavaScript
import { ChangeType, ContentView, Device, Property, ProxyViewContainer, Utils, View, paddingBottomProperty, paddingLeftProperty, paddingRightProperty, paddingTopProperty } from '@nativescript/core';
import { isString } from '@nativescript/core/utils/types';
import { PagerBase, autoPlayProperty, autoplayDelayProperty, disableSwipeProperty, itemTemplatesProperty, itemsProperty, orientationProperty, peakingProperty, selectedIndexProperty, spacingProperty } from './index.common';
export * from './index.common';
export { Transformer } from './index.common';
const PLACEHOLDER = 'PLACEHOLDER';
const sdkVersion = parseInt(Device.sdkVersion, 10);
export const pagesCountProperty = new Property({
name: 'pagesCount',
defaultValue: -1,
valueConverter: parseInt
});
export class Pager extends PagerBase {
itemTemplateUpdated(oldData, newData) { }
constructor() {
super();
this._oldDisableAnimation = false;
// used to store viewHolder and thus their corresponding Views
// used to "destroy" cells when possible
this._viewHolders = new Set();
this._childrenViewsType = new Map();
this._realizedTemplates = new Map();
this.lastEvent = 0;
this._lastSpacing = 0;
this._lastPeaking = 0;
this._observableArrayHandler = (args) => {
if (this.pagerAdapter) {
switch (args.action) {
case ChangeType.Add:
this.pagerAdapter.notifyItemRangeInserted(args.index, args.addedCount);
return;
case ChangeType.Delete:
this.pagerAdapter.notifyItemRangeRemoved(args.index, args.removed.length);
return;
case ChangeType.Splice:
if (args.removed.length > 0) {
this.pagerAdapter.notifyItemRangeRemoved(args.index, args.removed.length);
}
if (args.addedCount > 0) {
this.pagerAdapter.notifyItemRangeInserted(args.index, args.addedCount);
}
return;
case ChangeType.Update:
this.pagerAdapter.notifyItemChanged(args.index);
return;
default:
break;
}
this._initAutoPlay(this.autoPlay);
}
if (this.indicator && this.mObservableArrayInstance && this.mObservableArrayInstance.length) {
this.indicator.setCount(this.mObservableArrayInstance.length);
this.pagerAdapter.notifyDataSetChanged();
this.scrollToIndexAnimated(0, false);
}
};
this.bindedViewHolders = new Set();
this._horizontalOffset = 0;
this._verticalOffset = 0;
this._transformers = [];
}
get views() {
return this._views;
}
set views(value) {
this._views = value;
}
setObservableArrayInstance(value) {
super.setObservableArrayInstance(value);
if (this.indicator) {
this.indicator.setCount(this.items ? this.items.length : 0);
}
}
createNativeView() {
const nativeView = new androidx.viewpager2.widget.ViewPager2(this._context);
nativeView.setOffscreenPageLimit(-1);
if (sdkVersion >= 21) {
nativeView.setNestedScrollingEnabled(true);
}
if (this.orientation === 'vertical') {
nativeView.setOrientation(androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL);
}
else {
nativeView.setOrientation(androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL);
}
return nativeView;
}
initNativeView() {
this.on(View.layoutChangedEvent, this.onLayoutChange, this);
super.initNativeView();
const nativeView = this.nativeViewProtected;
initPagerRecyclerAdapter();
this._pagerAdapter = new PagerRecyclerAdapter(new WeakRef(this));
this.compositeTransformer = new androidx.viewpager2.widget.CompositePageTransformer();
nativeView.setPageTransformer(this.compositeTransformer);
nativeView.setUserInputEnabled(!this.disableSwipe);
// Store disable animation value
this._oldDisableAnimation = this.disableAnimation;
// Disable animation to set currentItem w/o animation
this.disableAnimation = true;
initPagerChangeCallback();
this._pageListener = new PageChangeCallback(new WeakRef(this));
nativeView.registerOnPageChangeCallback(this._pageListener);
nativeView.setAdapter(this._pagerAdapter);
if (this._androidViewId < 0) {
this._androidViewId = android.view.View.generateViewId();
}
if (this.pagesCount > 0) {
nativeView.setOffscreenPageLimit(this.pagesCount);
}
else {
nativeView.setOffscreenPageLimit(3);
}
this._setTransformers(this.transformers ? this.transformers : '');
}
setIndicator(indicator) {
super.setIndicator(indicator);
setTimeout(() => {
if (indicator) {
this.indicator.setCount(this.items ? this.items.length : 0);
this.indicator.setSelection(this.selectedIndex, false);
}
});
}
enumerateViewHolders(cb) {
let result, v;
for (let it = this._viewHolders.values(), cellItemView = null; (cellItemView = it.next().value);) {
if (cellItemView['position'] === undefined) {
continue;
}
result = cb(cellItemView);
if (result) {
return result;
}
}
return result;
}
getChildView(index) {
if (this._childrenViews) {
return this._childrenViews[index]?.view;
}
return this.enumerateViewHolders((v) => {
if (v.getAdapterPosition() === index) {
return v.view[PLACEHOLDER] === true ? v.view.content : v.view;
}
return undefined;
});
}
_removeChildView(index) {
const type = this._childrenViews[index].type;
this._childrenViewsType.delete(type);
super._removeChildView(index);
}
_addChildView(view, type) {
super._addChildView(view, type);
this._childrenViewsType.set(type, view);
this.initStaticPagerAdapter();
}
onLayoutChange(args) {
if (this.peaking) {
this[peakingProperty.setNative](this.peaking);
}
if (this.spacing) {
this[spacingProperty.setNative](this.spacing);
}
// this._setTransformers(this.transformers ? this.transformers : '');
this._updateScrollPosition();
// Set disableAnimation to original value
this.disableAnimation = this._oldDisableAnimation;
}
[spacingProperty.setNative](value) {
const size = this.convertToSize(value);
const newSpacing = size !== this._lastSpacing;
if (newSpacing) {
if (!this.peakingTransformer) {
this.peakingTransformer = new com.nativescript.pager.PeakingTransformer();
this.compositeTransformer.addTransformer(this.peakingTransformer);
}
this.peakingTransformer.pageOffset = this._lastPeaking;
this.peakingTransformer.pageMargin = size;
this._lastSpacing = size;
this.refresh();
}
}
[peakingProperty.setNative](value) {
const size = this.convertToSize(value);
const newPeaking = size !== this._lastPeaking;
if (newPeaking) {
if (!this.peakingTransformer) {
this.peakingTransformer = new com.nativescript.pager.PeakingTransformer();
this.compositeTransformer.addTransformer(this.peakingTransformer);
}
this.peakingTransformer.pageOffset = size;
this.peakingTransformer.pageMargin = this._lastSpacing;
this._lastPeaking = size;
this.refresh();
}
}
_setTransformers(transformers) {
if (!isString(transformers)) {
return;
}
const transformsArray = transformers.split(' ');
this._transformers.forEach((transformer) => {
this.compositeTransformer.removeTransformer(transformer);
});
for (const transformer of transformsArray) {
const nativeTransformerClass = Pager.mRegisteredTransformers[transformer];
if (nativeTransformerClass) {
const nativeTransformer = new nativeTransformerClass();
nativeTransformer.owner = new WeakRef(this);
this._transformers.push(nativeTransformer);
this.compositeTransformer.addTransformer(nativeTransformer);
}
}
if (transformsArray.length === 0) {
this._transformers.forEach((transformer) => {
this.compositeTransformer.removeTransformer(transformer);
});
}
this.nativeViewProtected.setPageTransformer(this.compositeTransformer);
}
disposeViewHolderViews() {
this.enumerateViewHolders((v) => {
const view = v.view;
this.notify({
eventName: Pager.itemDisposingEvent,
index: v.getAdapterPosition(),
android: v,
view
});
// if (view && view.isLoaded) {
// view.callUnloaded();
// }
this._removeViewCore(view);
// view._isAddedToNativeVisualTree = false;
// //@ts-ignore
// view.parent = null;
// view._tearDownUI();
});
this._viewHolders = new Set();
}
disposeNativeView() {
this.off(View.layoutChangedEvent, this.onLayoutChange, this);
this._childrenViews = null;
this.disposeViewHolderViews();
this._realizedTemplates.clear();
this._pageListener = null;
// setAdapter(null) will destroy views
this.nativeViewProtected.setAdapter(null);
this._pagerAdapter = null;
this._transformers = [];
super.disposeNativeView();
}
get disableAnimation() {
return this._disableAnimation;
}
set disableAnimation(value) {
this._disableAnimation = value;
}
get pagerAdapter() {
return this._pagerAdapter;
}
get _childrenCount() {
return (this.items && this.items.length) || (this._childrenViews && this._childrenViews.length) || 0;
}
[disableSwipeProperty.setNative](value) {
this.nativeViewProtected.setUserInputEnabled(!value);
}
[itemsProperty.setNative](value) {
this.setObservableArrayInstance(value);
}
_setPadding(newPadding) {
const nativeView = this.nativeViewProtected;
const padding = {
top: nativeView.getPaddingTop(),
right: nativeView.getPaddingRight(),
bottom: nativeView.getPaddingBottom(),
left: nativeView.getPaddingLeft()
};
// tslint:disable-next-line:prefer-object-spread
const newValue = Object.assign(padding, newPadding);
nativeView.setClipToPadding(false);
nativeView.setPadding(newValue.left, newValue.top, newValue.right, newValue.bottom);
}
[paddingTopProperty.getDefault]() {
return { value: this._defaultPaddingTop, unit: 'px' };
}
[paddingTopProperty.setNative](value) {
this._setPadding({ top: this.effectivePaddingTop });
}
[paddingRightProperty.getDefault]() {
return { value: this._defaultPaddingRight, unit: 'px' };
}
[paddingRightProperty.setNative](value) {
this._setPadding({ right: this.effectivePaddingRight });
}
[paddingBottomProperty.getDefault]() {
return { value: this._defaultPaddingBottom, unit: 'px' };
}
[paddingBottomProperty.setNative](value) {
this._setPadding({ bottom: this.effectivePaddingBottom });
}
[paddingLeftProperty.getDefault]() {
return { value: this._defaultPaddingLeft, unit: 'px' };
}
[paddingLeftProperty.setNative](value) {
this._setPadding({ left: this.effectivePaddingLeft });
}
_updateScrollPosition() {
const index = this.circularMode ? this.selectedIndex + 1 : this.selectedIndex;
const nativeView = this.nativeViewProtected;
if (nativeView.getCurrentItem() !== index) {
const indicator = this.indicator;
const toDo = () => {
nativeView.setCurrentItem(index, false);
if (indicator)
indicator.setSelection(this.selectedIndex, false);
};
if (indicator) {
indicator.withoutAnimation(toDo);
}
else {
toDo();
}
}
setTimeout(() => {
this._initAutoPlay(this.autoPlay);
});
}
initStaticPagerAdapter() {
if (!this.items && this._childrenCount > 0) {
initStaticPagerStateAdapter();
const nativeView = this.nativeViewProtected;
if (nativeView && !(this._pagerAdapter instanceof StaticPagerStateAdapter)) {
this._pagerAdapter = new StaticPagerStateAdapter(new WeakRef(this));
nativeView.setAdapter(this._pagerAdapter);
selectedIndexProperty.coerce(this);
nativeView.setCurrentItem(this.selectedIndex, false);
if (this.indicator) {
this.indicator.setSelection(this.selectedIndex);
}
}
}
}
onLoaded() {
super.onLoaded();
this.initStaticPagerAdapter();
}
[selectedIndexProperty.setNative](value, animated = true, requestTransform = false) {
const nativeView = this.nativeViewProtected;
if (this.isLoaded && nativeView) {
const index = this.circularMode ? value + 1 : value;
nativeView.setCurrentItem(index, animated && !this.disableAnimation);
if (requestTransform) {
setTimeout(() => {
nativeView.requestTransform();
}, 0);
}
}
}
scrollToIndexAnimated(value, animate, requestTransform = false) {
const nativeView = this.nativeViewProtected;
if (nativeView) {
const index = this.circularMode ? value + 1 : value;
nativeView.setCurrentItem(index, animate);
if (!animate) {
// without animate we wont go through the delegate
selectedIndexProperty.nativeValueChange(this, value);
if (this.indicator) {
this.indicator.setSelection(value, false);
}
}
if (requestTransform) {
setTimeout(() => {
nativeView.requestTransform();
}, 0);
}
}
}
_onItemsChanged(oldValue, newValue) { }
refresh() {
const nativeView = this.nativeViewProtected;
if (nativeView && this._pagerAdapter) {
// nativeView.requestLayout();
nativeView.getAdapter().notifyDataSetChanged();
}
}
refreshVisibleItems() {
const view = this.nativeViewProtected;
if (!view) {
return;
}
const ids = Array.from(this.bindedViewHolders).sort((a, b) => a - b);
this.pagerAdapter.notifyItemRangeChanged(ids[0], ids[ids.length - 1] - ids[0] + 1);
}
getViewForItemAtIndex(index) {
return this.getChildView(this.circularMode ? index + 1 : index);
}
onUnloaded() {
// this._android.setAdapter(null);
super.onUnloaded();
}
eachChild(callback) {
super.eachChild(callback);
// used for css updates (like theme change)
this.enumerateViewHolders((v) => {
const view = v.view;
if (view) {
if (view.parent instanceof Pager) {
callback(view);
}
else {
// in some cases (like item is unloaded from another place (like angular) view.parent becomes undefined)
if (view.parent) {
callback(view.parent);
}
}
}
});
}
updateAdapter() {
this._pagerAdapter.notifyDataSetChanged();
}
_selectedIndexUpdatedFromNative(newIndex) { }
[itemTemplatesProperty.getDefault]() {
return null;
}
[itemTemplatesProperty.setNative](value) {
this._itemTemplatesInternal = new Array(this._defaultTemplate);
if (value) {
this._itemTemplatesInternal = this._itemTemplatesInternal.concat(value);
}
this._pagerAdapter = new PagerRecyclerAdapter(new WeakRef(this));
this.nativeViewProtected.setAdapter(this._pagerAdapter);
this.refresh();
}
[orientationProperty.setNative](value) {
if (value === 'vertical') {
this.nativeViewProtected.setOrientation(androidx.viewpager2.widget.ViewPager2.ORIENTATION_VERTICAL);
}
else {
this.nativeViewProtected.setOrientation(androidx.viewpager2.widget.ViewPager2.ORIENTATION_HORIZONTAL);
}
}
get horizontalOffset() {
return this._horizontalOffset / Utils.layout.getDisplayDensity();
}
get verticalOffset() {
return this._verticalOffset / Utils.layout.getDisplayDensity();
}
[autoPlayProperty.setNative](value) {
this._initAutoPlay(value);
}
[autoplayDelayProperty.setNative](value) {
if (this._autoPlayInterval) {
clearInterval(this._autoPlayInterval);
this._autoPlayInterval = undefined;
this._initAutoPlay(this.autoPlay);
}
}
[pagesCountProperty.setNative](value) {
const nativeView = this.nativeViewProtected;
if (nativeView && (value === -1 || value > 0)) {
this._pagerAdapter.notifyDataSetChanged();
nativeView.setOffscreenPageLimit(value);
}
}
_nextIndex() {
const next = this.selectedIndex + 1;
if (next > this.lastIndex) {
return 0;
}
return next;
}
_initAutoPlay(value) {
if (!this.items || this.items.length === 0) {
return;
}
if (!value) {
if (this._autoPlayInterval) {
clearInterval(this._autoPlayInterval);
this._autoPlayInterval = undefined;
}
}
else {
if (this.isLayoutValid && !this._autoPlayInterval) {
this._autoPlayInterval = setInterval(() => {
this.selectedIndex = this._nextIndex();
}, this.autoPlayDelay);
}
}
}
get itemCount() {
return this._childrenCount ? this._childrenCount + (this.circularMode ? 2 : 0) : 0;
}
get lastIndex() {
if (this.items && this.items.length === 0) {
return 0;
}
return this.circularMode ? this.itemCount - 3 : this.itemCount - 1;
}
static getProgress(indicator, position, positionOffset, isRtl) {
const count = indicator.getCount();
let selectedPosition = indicator.getSelection();
if (isRtl) {
position = count - 1 - position;
}
if (position < 0) {
position = 0;
}
else if (position > count - 1) {
position = count - 1;
}
const isRightOverScrolled = position > selectedPosition;
let isLeftOverScrolled;
if (isRtl) {
isLeftOverScrolled = position - 1 < selectedPosition;
}
else {
isLeftOverScrolled = position + 1 < selectedPosition;
}
if (isRightOverScrolled || isLeftOverScrolled) {
selectedPosition = position;
}
const slideToRightSide = selectedPosition === position && positionOffset !== 0;
let selectingPosition;
let selectingProgress;
if (slideToRightSide) {
selectingPosition = isRtl ? position - 1 : position + 1;
selectingProgress = positionOffset;
}
else {
selectingPosition = position;
selectingProgress = 1 - positionOffset;
}
if (selectingProgress > 1) {
selectingProgress = 1;
}
else if (selectingProgress < 0) {
selectingProgress = 0;
}
return [selectingPosition, selectingProgress];
}
}
pagesCountProperty.register(Pager);
let PageChangeCallback;
function initPagerChangeCallback() {
if (PageChangeCallback) {
return PageChangeCallback;
}
var PageChangeCallbackImpl = /** @class */ (function (_super) {
__extends(PageChangeCallbackImpl, _super);
function PageChangeCallbackImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = owner;
return global.__native(_this);
}
PageChangeCallbackImpl.prototype.onPageSelected = function (position) {
var owner = this.owner && this.owner.get();
if (owner) {
if (owner.lastEvent === 0 && !owner.circularMode) {
// page changing without scroll so do the indicator etc.
selectedIndexProperty.nativeValueChange(owner, position);
if (owner.indicator) {
owner.indicator.setSelection(position, true);
}
}
owner.notify({
eventName: Pager.swipeEvent,
object: owner
});
}
};
PageChangeCallbackImpl.prototype.onPageScrolled = function (position, positionOffset, positionOffsetPixels) {
var owner = this.owner && this.owner.get();
if (owner && owner.isLayoutValid) {
if (owner.circularMode) {
position = owner.pagerAdapter.getPosition(position);
}
var offset = position * positionOffsetPixels;
if (owner.orientation === 'vertical') {
owner._horizontalOffset = 0;
owner._verticalOffset = offset;
}
else if (owner.orientation === 'horizontal') {
owner._horizontalOffset = offset;
owner._verticalOffset = 0;
}
owner.notify({
eventName: Pager.scrollEvent,
object: owner,
selectedIndex: position,
currentPosition: position + positionOffset,
scrollX: owner.horizontalOffset,
scrollY: owner.verticalOffset
});
if (owner.items && position === owner.pagerAdapter.lastIndex() - owner.loadMoreCount) {
owner.notify({ eventName: Pager.loadMoreItemsEvent, object: owner });
}
var indicator = owner.indicator;
if (indicator) {
var progress = Pager.getProgress(indicator, position, positionOffset, false);
var selectingPosition = progress[0];
var selectingProgress = progress[1];
indicator.setInteractiveAnimation(true);
if (position < owner.lastIndex) {
indicator.setSelection(position, false);
indicator.setProgress(selectingPosition, selectingProgress);
}
}
}
};
PageChangeCallbackImpl.prototype.onPageScrollStateChanged = function (state) {
var owner = this.owner && this.owner.get();
if (owner) {
if (owner.lastEvent === 0 && state === 1) {
owner.notify({
eventName: Pager.swipeStartEvent,
object: owner
});
owner.lastEvent = 1;
}
else if (owner.lastEvent === 1 && state === 1) {
owner.notify({
eventName: Pager.swipeOverEvent,
object: owner
});
owner.lastEvent = 1;
}
else if (owner.lastEvent === 1 && state === 2) {
owner.notify({
eventName: Pager.swipeEndEvent,
object: owner
});
owner.lastEvent = 2;
}
else {
owner.lastEvent = 0;
}
if (owner.isLayoutValid && state === androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE) {
// ts-ignore
var count_1 = owner.pagerAdapter.getItemCount();
var index = owner.nativeViewProtected.getCurrentItem();
var indicator_1 = owner.indicator;
if (owner.circularMode) {
if (index === 0) {
var toDo = function () {
owner.nativeViewProtected.setCurrentItem(count_1 - 2, false);
selectedIndexProperty.nativeValueChange(owner, count_1 - 3);
if (indicator_1) {
indicator_1.setSelection(count_1 - 3, false);
}
};
if (indicator_1) {
indicator_1.withoutAnimation(toDo);
}
else {
toDo();
}
}
else if (index === count_1 - 1) {
// first item
var toDo = function () {
owner.nativeViewProtected.setCurrentItem(1, false);
selectedIndexProperty.nativeValueChange(owner, 0);
if (indicator_1) {
indicator_1.setSelection(0, false);
}
};
if (indicator_1) {
indicator_1.withoutAnimation(toDo);
}
else {
toDo();
}
}
else {
selectedIndexProperty.nativeValueChange(owner, index - 1);
}
}
else {
selectedIndexProperty.nativeValueChange(owner, index);
if (indicator_1) {
indicator_1.setSelection(index, false);
}
}
}
}
};
return PageChangeCallbackImpl;
}(androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback));
PageChangeCallback = PageChangeCallbackImpl;
}
// eslint-disable-next-line no-redeclare
let PagerRecyclerAdapter;
function initPagerRecyclerAdapter() {
if (PagerRecyclerAdapter) {
return;
}
var PagerRecyclerAdapterImpl = /** @class */ (function (_super) {
__extends(PagerRecyclerAdapterImpl, _super);
function PagerRecyclerAdapterImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = owner;
return global.__native(_this);
}
PagerRecyclerAdapterImpl.prototype.onCreateViewHolder = function (param0, type) {
var owner = this.owner ? this.owner.get() : null;
if (!owner) {
return null;
}
var template = owner._itemTemplatesInternal[type];
var view = template.createView();
if (!view && owner._itemViewLoader !== undefined) {
view = owner._itemViewLoader(template.key);
}
var isNonSync = view === undefined || view === null;
if (isNonSync || view instanceof ProxyViewContainer) {
var parentView = new ContentView();
parentView.id = 'pagerViewHolder';
view = parentView;
view[PLACEHOLDER] = true;
}
owner._addView(view);
view.nativeView.setLayoutParams(new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT));
initPagerViewHolder();
var holder = new PagerViewHolder(view, new WeakRef(owner));
owner._viewHolders.add(holder);
return holder;
};
PagerRecyclerAdapterImpl.prototype.getPosition = function (index) {
var owner = this.owner && this.owner.get();
var position = index;
if (owner && owner.circularMode) {
if (position === 0) {
position = this.lastDummy();
}
else if (position === this.firstDummy()) {
position = 0;
}
else {
position = position - 1;
}
}
return position;
};
/**
*
* Get the position in the CollectionView from the selected index
*
* @param index The position in the collectionView
* @returns The selected Index ( i.e. the number in the slides as the user would view it).
*/
PagerRecyclerAdapterImpl.prototype.getIndex = function (index) {
var position = index;
var owner = this.owner && this.owner.get();
if (owner && owner.circularMode) {
if (position === 0) {
position = 1;
}
else if (position === this.firstDummy()) {
position = 0;
}
else {
position = position + 1;
}
}
return position;
};
PagerRecyclerAdapterImpl.prototype.onBindViewHolder = function (holder, index) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
if (owner.circularMode) {
if (index === 0) {
index = this.lastDummy();
}
else if (index === this.firstDummy()) {
index = 0;
}
else {
index = index - 1;
}
}
if (holder['position'] !== undefined) {
owner.bindedViewHolders.delete(holder['position']);
}
holder['position'] = index;
owner.bindedViewHolders.add(holder['position']);
var bindingContext = owner._getDataItem(index);
var view = holder.view;
var isNonSync = holder.view[PLACEHOLDER] === true;
view = isNonSync ? view.content : view;
var args = {
eventName: Pager.itemLoadingEvent,
object: owner,
android: holder,
index: index,
bindingContext: bindingContext,
view: view
};
owner.notify(args);
if (isNonSync && args.view !== view) {
view = args.view;
// the view has been changed on the event handler
holder.view.content = args.view;
}
else if (view instanceof ContentView) {
view = view.content;
}
owner._prepareItem(holder.view, index);
// TODO: find a way to add to existing margin
if (owner.orientation === 'vertical') {
view.marginTop = view.marginBottom = Utils.layout.toDeviceIndependentPixels(owner._lastPeaking);
}
else {
view.marginLeft = view.marginRight = Utils.layout.toDeviceIndependentPixels(owner._lastPeaking);
}
}
};
PagerRecyclerAdapterImpl.prototype.onViewRecycled = function (holder) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
delete owner.bindedViewHolders[holder['position']];
holder['position'] = undefined;
}
};
PagerRecyclerAdapterImpl.prototype.getItemId = function (i) {
var owner = this.owner ? this.owner.get() : null;
var id = i;
if (owner && owner.items) {
var item = owner.items.getItem ? owner.items.getItem(i) : owner.items[i];
if (item) {
id = owner.itemIdGenerator(item, i, owner.items);
}
}
return long(id);
};
PagerRecyclerAdapterImpl.prototype.getItemCount = function () {
var owner = this.owner ? this.owner.get() : null;
return owner && owner.items && owner.items.length ? owner.items.length + (owner.circularMode ? 2 : 0) : 0;
};
PagerRecyclerAdapterImpl.prototype.getItemViewType = function (index) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
var template = owner._getItemTemplate(index);
return owner._itemTemplatesInternal.indexOf(template);
}
return 0;
};
PagerRecyclerAdapterImpl.prototype.lastIndex = function () {
var owner = this.owner && this.owner.get();
if (owner) {
if (owner.items.length === 0) {
return 0;
}
return owner.circularMode ? this.getItemCount() - 3 : this.getItemCount() - 1;
}
return 0;
};
PagerRecyclerAdapterImpl.prototype.firstDummy = function () {
var count = this.getItemCount();
if (count === 0) {
return 0;
}
return this.getItemCount() - 1;
};
PagerRecyclerAdapterImpl.prototype.lastDummy = function () {
return this.lastIndex();
};
PagerRecyclerAdapterImpl.prototype.hasStableIds = function () {
return true;
};
return PagerRecyclerAdapterImpl;
}(androidx.recyclerview.widget.RecyclerView.Adapter));
PagerRecyclerAdapter = PagerRecyclerAdapterImpl;
}
let StaticPagerStateAdapter;
function initStaticPagerStateAdapter() {
if (StaticPagerStateAdapter) {
return;
}
var StaticPagerStateAdapterImpl = /** @class */ (function (_super) {
__extends(StaticPagerStateAdapterImpl, _super);
function StaticPagerStateAdapterImpl(owner) {
var _this = _super.call(this) || this;
_this.owner = owner;
return global.__native(_this);
}
StaticPagerStateAdapterImpl.prototype.onCreateViewHolder = function (param0, type) {
var owner = this.owner ? this.owner.get() : null;
if (!owner) {
return null;
}
var view = owner._childrenViewsType.get(type);
var isNonSync = view === undefined;
// if (isNonSync || view instanceof ProxyViewContainer) {
var parentView = new ContentView();
parentView.id = 'pagerViewHolder';
parentView.content = view;
view = parentView;
view[PLACEHOLDER] = true;
// }
owner._addView(view);
// sp._setupAsRootView(owner._context);
// //@ts-ignore
// sp.parent = owner;
// sp._isAddedToNativeVisualTree = true;
// sp.callLoaded();
view.nativeView.setLayoutParams(new android.view.ViewGroup.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT));
initPagerViewHolder();
var holder = new PagerViewHolder(view, new WeakRef(owner));
owner._viewHolders.add(holder);
return holder;
};
StaticPagerStateAdapterImpl.prototype.onBindViewHolder = function (holder, index) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
if (holder['position'] !== undefined) {
owner.bindedViewHolders.delete(holder['position']);
}
holder['position'] = index;
owner.bindedViewHolders.add(holder['position']);
var view = holder.view;
var isNonSync = holder.view[PLACEHOLDER] === true;
view = isNonSync ? view.content : view;
var args = {
eventName: Pager.itemLoadingEvent,
object: owner,
android: holder,
index: index,
// bindingContext,
view: view
};
owner.notify(args);
if (isNonSync && args.view !== view) {
view = args.view;
// the view has been changed on the event handler
holder.view.content = args.view;
}
else if (view instanceof ContentView) {
view = view.content;
}
if (owner.orientation === 'vertical') {
view.marginTop = view.marginBottom = Utils.layout.toDeviceIndependentPixels(owner._lastPeaking);
}
else {
view.marginLeft = view.marginRight = Utils.layout.toDeviceIndependentPixels(owner._lastPeaking);
}
}
};
StaticPagerStateAdapterImpl.prototype.hasStableIds = function () {
return true;
};
StaticPagerStateAdapterImpl.prototype.getItem = function (i) {
var owner = this.owner ? this.owner.get() : null;
if (owner) {
if (owner._childrenViews) {
return owner._childrenViews[i].view;
}
}
return null;
};
StaticPagerStateAdapterImpl.prototype.getItemId = function (i) {
var owner = this.owner ? this.owner.get() : null;
var id = i;
if (owner) {
var item = this.getItem(i);
if (item) {
id = owner.itemIdGenerator(item, i, Array.from(owner._childrenViews));
}
}
return long(id);
};
StaticPagerStateAdapterImpl.prototype.getItemCount = function () {
var _a;
var owner = this.owner ? this.owner.get() : null;
return (owner && ((_a = owner._childrenViews) === null || _a === void 0 ? void 0 : _a.length)) || 0;
};
StaticPagerStateAdapterImpl.prototype.getItemViewType = function (index) {
var _a;
var owner = (_a = this.owner) === null || _a === void 0 ? void 0 : _a.get();
if (owner && owner._childrenViews) {
return owner._childrenViews[index].type;
}
return index;
};
return StaticPagerStateAdapterImpl;
}(androidx.recyclerview.widget.RecyclerView.Adapter));
StaticPagerStateAdapter = StaticPagerStateAdapterImpl;
}
// eslint-disable-next-line no-redeclare
let PagerViewHolder;
function initPagerViewHolder() {
if (PagerViewHolder) {
return;
}
var PagerViewHolderImpl = /** @class */ (function (_super) {
__extends(PagerViewHolderImpl, _super);
function PagerViewHolderImpl(owner, pager) {
var _this = _super.call(this, owner.nativeViewProtected) || this;
_this.owner = owner;
_this.pager = pager;
return global.__native(_this);
}
Object.defineProperty(PagerViewHolderImpl.prototype, "view", {
get: function () {
return this.owner;
},
enumerable: true,
configurable: true
});
return PagerViewHolderImpl;
}(androidx.recyclerview.widget.RecyclerView.ViewHolder));
PagerViewHolder = PagerViewHolderImpl;
}
//# sourceMappingURL=index.android.js.map