Skip to content

Commit

Permalink
chore: extend onVisibleChildrenUpdate with blank area values
Browse files Browse the repository at this point in the history
  • Loading branch information
azimgd committed May 28, 2024
1 parent 63f72b5 commit be5408f
Show file tree
Hide file tree
Showing 6 changed files with 59 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ void ShadowListContainerEventEmitter::onVisibleChildrenUpdate(VisibleChildrenUpd
auto $payload = jsi::Object(runtime);
$payload.setProperty(runtime, "visibleStartIndex", $event.visibleStartIndex);
$payload.setProperty(runtime, "visibleEndIndex", $event.visibleEndIndex);
$payload.setProperty(runtime, "visibleStartOffset", $event.visibleStartOffset);
$payload.setProperty(runtime, "visibleEndOffset", $event.visibleEndOffset);
$payload.setProperty(runtime, "headBlankStart", $event.headBlankStart);
$payload.setProperty(runtime, "headBlankEnd", $event.headBlankEnd);
$payload.setProperty(runtime, "tailBlankStart", $event.tailBlankStart);
$payload.setProperty(runtime, "tailBlankEnd", $event.tailBlankEnd);
return $payload;
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ class ShadowListContainerEventEmitter : public ViewEventEmitter {
struct VisibleChildrenUpdate {
int visibleStartIndex;
int visibleEndIndex;
int visibleStartOffset;
int visibleEndOffset;
int headBlankStart;
int headBlankEnd;
int tailBlankStart;
int tailBlankEnd;
};

struct EndReached {
Expand Down
12 changes: 9 additions & 3 deletions ios/ShadowListContainer.mm
Original file line number Diff line number Diff line change
Expand Up @@ -168,12 +168,18 @@ - (void)listContentSizeUpdate:(CGSize)listContentSize {
}
}

- (void)visibleChildrenUpdate:(NSInteger)visibleStartIndex visibleEndIndex:(NSInteger)visibleEndIndex
- (void)visibleChildrenUpdate:(VisibleChildren)visibleChildren
{
const auto &eventEmitter = static_cast<const ShadowListContainerEventEmitter &>(*_eventEmitter);
eventEmitter.onVisibleChildrenUpdate({
static_cast<int>(visibleStartIndex),
static_cast<int>(visibleEndIndex)
static_cast<int>(visibleChildren.visibleStartIndex),
static_cast<int>(visibleChildren.visibleEndIndex),
static_cast<int>(visibleChildren.visibleStartOffset),
static_cast<int>(visibleChildren.visibleEndOffset),
static_cast<int>(visibleChildren.headBlankStart),
static_cast<int>(visibleChildren.headBlankEnd),
static_cast<int>(visibleChildren.tailBlankStart),
static_cast<int>(visibleChildren.tailBlankEnd)
});
}

Expand Down
24 changes: 20 additions & 4 deletions ios/ShadowListContent.mm
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,11 @@ - (CGPoint)listContainerScrollOffsetUpdate:(CGPoint)listContainerScrollOffset
NSInteger visibleEndIndex;
NSInteger visibleStartOffset;
NSInteger visibleEndOffset;
CGPoint visibleOffset;
NSInteger headBlankStart;
NSInteger headBlankEnd;
NSInteger tailBlankStart;
NSInteger tailBlankEnd;

if (props.horizontal && props.inverted) {
visibleStartOffset = contentViewTotal - listContainerScrollOffset.x - self->_contentView.frame.size.width;
visibleEndOffset = contentViewTotal - listContainerScrollOffset.x;
Expand All @@ -144,11 +148,24 @@ - (CGPoint)listContainerScrollOffsetUpdate:(CGPoint)listContainerScrollOffset

visibleStartIndex = MAX(0, visibleStartIndex - 2);
visibleEndIndex = MIN(contentViewCount, visibleEndIndex + 2);
headBlankStart = 0;
headBlankEnd = self->_state->getData().contentViewMeasurements.sum(visibleStartIndex);
tailBlankStart = self->_state->getData().contentViewMeasurements.sum(visibleEndIndex);
tailBlankEnd = contentViewTotal;

[self->_cachedComponentPool recycle:visibleStartIndex visibleEndIndex:visibleEndIndex];

if ([self.delegate respondsToSelector:@selector(visibleChildrenUpdate:visibleEndIndex:)]) {
[self.delegate visibleChildrenUpdate:visibleStartIndex visibleEndIndex:visibleEndIndex];
if ([self.delegate respondsToSelector:@selector(visibleChildrenUpdate:)]) {
[self.delegate visibleChildrenUpdate:{
visibleStartIndex,
visibleEndIndex,
visibleStartOffset,
visibleEndOffset,
headBlankStart,
headBlankEnd,
tailBlankStart,
tailBlankEnd
}];
}

if (props.horizontal) {
Expand Down Expand Up @@ -181,7 +198,6 @@ - (CGPoint)listContainerScrollFocusIndexUpdate:(NSInteger)focusIndex
- (CGPoint)listContainerScrollFocusOffsetUpdate:(NSInteger)focusOffset
{
assert(std::dynamic_pointer_cast<ShadowListContentShadowNode::ConcreteState const>(self->_state));
const auto &stateData = self->_state->getData();
const auto &props = static_cast<const ShadowListContentProps &>(*_props);

CGPoint listContainerScrollOffset;
Expand Down
13 changes: 12 additions & 1 deletion ios/ShadowListContentDelegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,21 @@

NS_ASSUME_NONNULL_BEGIN

typedef struct {
NSInteger visibleStartIndex;
NSInteger visibleEndIndex;
NSInteger visibleStartOffset;
NSInteger visibleEndOffset;
NSInteger headBlankStart;
NSInteger headBlankEnd;
NSInteger tailBlankStart;
NSInteger tailBlankEnd;
} VisibleChildren;

@protocol ShadowListContentDelegate <NSObject>
@required
- (void)listContentSizeUpdate:(CGSize)listContentSize;
- (void)visibleChildrenUpdate:(NSInteger)visibleStartIndex visibleEndIndex:(NSInteger)visibleEndIndex;
- (void)visibleChildrenUpdate:(VisibleChildren)visibleChildren;
@end

NS_ASSUME_NONNULL_END
Expand Down
6 changes: 6 additions & 0 deletions src/ShadowListContainerNativeComponent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ export type OnStartReachedProps = { distanceFromStart: Int32 };
export type OnVisibleChildrenUpdate = {
visibleStartIndex: Int32;
visibleEndIndex: Int32;
visibleStartOffset: Int32;
visibleEndOffset: Int32;
headBlankStart: Int32;
headBlankEnd: Int32;
tailBlankStart: Int32;
tailBlankEnd: Int32;
};

export interface NativeProps extends ViewProps {
Expand Down

0 comments on commit be5408f

Please sign in to comment.