UNPKG

@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
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