Skip to content

Instantly share code, notes, and snippets.

View okwasniewski's full-sized avatar
💭
💻

Oskar Kwaśniewski okwasniewski

💭
💻
View GitHub Profile
@interface SwiftUIStoreViewViewManager : RCTViewManager
@end
@implementation SwiftUIStoreViewViewManager
/...
RCT_EXPORT_VIEW_PROPERTY(productIDs, NSArray<NSString *>)
@end
const productIDs = ["com.swiftui.montly.storeview", "com.swiftui.yearly.storeview"];
export default function App() {
return (
<SwiftUIStoreViewView style={styles.container} productIDs={productIDs} />
);
}
<SwiftUIStoreViewView style={styles.storeView} productIDs={["Test"]} />
@objc public class StoreViewProvider: UIView {
// ...
@objc public var productIDs: [String] = [] {
didSet {
props.productIDs = productIDs
}
}
}
- (void)updateProps:(Props::Shared const &)props oldProps:(Props::Shared const &)oldProps
{
const auto &oldViewProps = *std::static_pointer_cast<SwiftUIStoreViewViewProps const>(_props);
const auto &newViewProps = *std::static_pointer_cast<SwiftUIStoreViewViewProps const>(props);
if (oldViewProps.productIDs != newViewProps.productIDs) {
NSMutableArray *productIds = [[NSMutableArray alloc] initWithCapacity:newViewProps.productIDs.size()];
for (auto &productId : newViewProps.productIDs) {
[productIds addObject:[NSString stringWithUTF8String:productId.c_str()]];
}
interface NativeProps extends ViewProps {
productIDs: string[]; // <- productIds
}
export default codegenNativeComponent<NativeProps>('SwiftUIStoreViewView');
import { StyleSheet } from 'react-native';
import { SwiftUIStoreViewView } from 'swiftui-store-view';
export default function App() {
return (
<SwiftUIStoreViewView style={styles.container} />
);
}
const styles = StyleSheet.create({
@interface SwiftUIStoreViewViewManager : RCTViewManager
@end
@implementation SwiftUIStoreViewViewManager
RCT_EXPORT_MODULE(SwiftUIStoreViewView)
- (UIView *)view
{
return [[StoreViewProvider alloc] init];
@okwasniewski
okwasniewski / SwiftUIStoreViewView.mm
Last active February 26, 2025 12:02
SwiftUIStoreViewView.mm
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
static const auto defaultProps = std::make_shared<const SwiftUIStoreViewViewProps>();
_props = defaultProps;
_view = [[StoreViewProvider alloc] init];
self.contentView = _view;
}
@okwasniewski
okwasniewski / SwiftUIStoreViewView.mm
Last active February 26, 2025 12:02
SwiftUIStoreViewView.mm
@implementation SwiftUIStoreViewView {
StoreViewProvider* _view;
}