react-native-true-sheet/ios/TrueSheetHeaderView.mm

65 lines
1.9 KiB
Plaintext

//
// Created by Jovanni Lo (@lodev09)
// Copyright (c) 2024-present. All rights reserved.
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
//
#ifdef RCT_NEW_ARCH_ENABLED
#import "TrueSheetHeaderView.h"
#import <react/renderer/components/TrueSheetSpec/ComponentDescriptors.h>
#import <react/renderer/components/TrueSheetSpec/EventEmitters.h>
#import <react/renderer/components/TrueSheetSpec/Props.h>
#import <react/renderer/components/TrueSheetSpec/RCTComponentViewHelpers.h>
#import "utils/LayoutUtil.h"
using namespace facebook::react;
@implementation TrueSheetHeaderView {
CGSize _lastSize;
}
+ (ComponentDescriptorProvider)componentDescriptorProvider {
return concreteComponentDescriptorProvider<TrueSheetHeaderViewComponentDescriptor>();
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
static const auto defaultProps = std::make_shared<const TrueSheetHeaderViewProps>();
_props = defaultProps;
_lastSize = CGSizeZero;
}
return self;
}
- (void)updateLayoutMetrics:(const facebook::react::LayoutMetrics &)layoutMetrics
oldLayoutMetrics:(const facebook::react::LayoutMetrics &)oldLayoutMetrics {
[super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:oldLayoutMetrics];
CGSize newSize = CGSizeMake(layoutMetrics.frame.size.width, layoutMetrics.frame.size.height);
// Notify delegate when header size changes
if (!CGSizeEqualToSize(newSize, _lastSize)) {
_lastSize = newSize;
if ([self.delegate respondsToSelector:@selector(headerViewDidChangeSize:)]) {
[self.delegate headerViewDidChangeSize:newSize];
}
}
}
- (void)prepareForRecycle {
[super prepareForRecycle];
_lastSize = CGSizeZero;
}
@end
Class<RCTComponentViewProtocol> TrueSheetHeaderViewCls(void) {
return TrueSheetHeaderView.class;
}
#endif