fe8d3b081c
* upgrade paste input * override how backing uitextinput is created * different approach
161 lines
6.2 KiB
Diff
161 lines
6.2 KiB
Diff
diff --git a/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m b/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
|
||
index e916023..9968f3c 100644
|
||
--- a/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
|
||
+++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
|
||
@@ -3,58 +3,87 @@
|
||
// PasteInput
|
||
//
|
||
// Created by Elias Nahum on 04-11-20.
|
||
-// Copyright © 2020 Facebook. All rights reserved.
|
||
+// Updated to remove parent’s default text view
|
||
//
|
||
|
||
#import "PasteInputView.h"
|
||
#import "PasteInputTextView.h"
|
||
-#import <React/RCTUtils.h>
|
||
+#import <React/RCTUtils.h> // for RCTDirectEventBlock, etc.
|
||
|
||
@implementation PasteInputView
|
||
{
|
||
- PasteInputTextView *_backedTextInputView;
|
||
+ // We'll store the custom text view in this ivar
|
||
+ PasteInputTextView *_customBackedTextView;
|
||
}
|
||
|
||
- (instancetype)initWithBridge:(RCTBridge *)bridge
|
||
{
|
||
+ // Must call the super’s designated initializer
|
||
if (self = [super initWithBridge:bridge]) {
|
||
- _backedTextInputView = [[PasteInputTextView alloc] initWithFrame:self.bounds];
|
||
- _backedTextInputView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||
- _backedTextInputView.textInputDelegate = self;
|
||
+ // 1. The parent (RCTMultilineTextInputView) has already created
|
||
+ // its own _backedTextInputView = [RCTUITextView new] in super init.
|
||
+ // We can remove that subview:
|
||
|
||
- [self addSubview:_backedTextInputView];
|
||
- }
|
||
+ id<RCTBackedTextInputViewProtocol> parentInputView = super.backedTextInputView;
|
||
+ if ([parentInputView isKindOfClass:[UIView class]]) {
|
||
+ UIView *parentSubview = (UIView *)parentInputView;
|
||
+ if (parentSubview.superview == self) {
|
||
+ [parentSubview removeFromSuperview];
|
||
+ }
|
||
+ }
|
||
|
||
+ // 2. Now create our custom PasteInputTextView
|
||
+ _customBackedTextView = [[PasteInputTextView alloc] initWithFrame:self.bounds];
|
||
+ _customBackedTextView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
||
+ _customBackedTextView.textInputDelegate = self;
|
||
+
|
||
+ // Optional: disable inline predictions for iOS 17+
|
||
+ if (@available(iOS 17.0, *)) {
|
||
+ _customBackedTextView.inlinePredictionType = UITextInlinePredictionTypeNo;
|
||
+ }
|
||
+
|
||
+ // 3. Add your custom text view as the only subview
|
||
+ [self addSubview:_customBackedTextView];
|
||
+ }
|
||
return self;
|
||
}
|
||
|
||
+/**
|
||
+ * Override the parent's accessor so that anywhere in RN that calls
|
||
+ * `self.backedTextInputView` will get the custom PasteInputTextView.
|
||
+ */
|
||
- (id<RCTBackedTextInputViewProtocol>)backedTextInputView
|
||
{
|
||
- return _backedTextInputView;
|
||
+ return _customBackedTextView;
|
||
}
|
||
|
||
-- (void)setDisableCopyPaste:(BOOL)disableCopyPaste {
|
||
- _backedTextInputView.disableCopyPaste = disableCopyPaste;
|
||
+#pragma mark - Setters for React Props
|
||
+
|
||
+- (void)setDisableCopyPaste:(BOOL)disableCopyPaste
|
||
+{
|
||
+ _customBackedTextView.disableCopyPaste = disableCopyPaste;
|
||
}
|
||
|
||
-- (void)setOnPaste:(RCTDirectEventBlock)onPaste {
|
||
- _backedTextInputView.onPaste = onPaste;
|
||
+- (void)setOnPaste:(RCTDirectEventBlock)onPaste
|
||
+{
|
||
+ _customBackedTextView.onPaste = onPaste;
|
||
}
|
||
|
||
-- (void)setSmartPunctuation:(NSString *)smartPunctuation {
|
||
- if ([smartPunctuation isEqualToString:@"enable"]) {
|
||
- [_backedTextInputView setSmartDashesType:UITextSmartDashesTypeYes];
|
||
- [_backedTextInputView setSmartQuotesType:UITextSmartQuotesTypeYes];
|
||
- [_backedTextInputView setSmartInsertDeleteType:UITextSmartInsertDeleteTypeYes];
|
||
- } else if ([smartPunctuation isEqualToString:@"disable"]) {
|
||
- [_backedTextInputView setSmartDashesType:UITextSmartDashesTypeNo];
|
||
- [_backedTextInputView setSmartQuotesType:UITextSmartQuotesTypeNo];
|
||
- [_backedTextInputView setSmartInsertDeleteType:UITextSmartInsertDeleteTypeNo];
|
||
- } else {
|
||
- [_backedTextInputView setSmartDashesType:UITextSmartDashesTypeDefault];
|
||
- [_backedTextInputView setSmartQuotesType:UITextSmartQuotesTypeDefault];
|
||
- [_backedTextInputView setSmartInsertDeleteType:UITextSmartInsertDeleteTypeDefault];
|
||
- }
|
||
+- (void)setSmartPunctuation:(NSString *)smartPunctuation
|
||
+{
|
||
+ if ([smartPunctuation isEqualToString:@"enable"]) {
|
||
+ [_customBackedTextView setSmartDashesType:UITextSmartDashesTypeYes];
|
||
+ [_customBackedTextView setSmartQuotesType:UITextSmartQuotesTypeYes];
|
||
+ [_customBackedTextView setSmartInsertDeleteType:UITextSmartInsertDeleteTypeYes];
|
||
+ } else if ([smartPunctuation isEqualToString:@"disable"]) {
|
||
+ [_customBackedTextView setSmartDashesType:UITextSmartDashesTypeNo];
|
||
+ [_customBackedTextView setSmartQuotesType:UITextSmartQuotesTypeNo];
|
||
+ [_customBackedTextView setSmartInsertDeleteType:UITextSmartInsertDeleteTypeNo];
|
||
+ } else {
|
||
+ [_customBackedTextView setSmartDashesType:UITextSmartDashesTypeDefault];
|
||
+ [_customBackedTextView setSmartQuotesType:UITextSmartQuotesTypeDefault];
|
||
+ [_customBackedTextView setSmartInsertDeleteType:UITextSmartInsertDeleteTypeDefault];
|
||
+ }
|
||
}
|
||
|
||
#pragma mark - UIScrollViewDelegate
|
||
@@ -62,7 +91,6 @@
|
||
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
|
||
{
|
||
RCTDirectEventBlock onScroll = self.onScroll;
|
||
-
|
||
if (onScroll) {
|
||
CGPoint contentOffset = scrollView.contentOffset;
|
||
CGSize contentSize = scrollView.contentSize;
|
||
@@ -71,22 +99,22 @@
|
||
|
||
onScroll(@{
|
||
@"contentOffset": @{
|
||
- @"x": @(contentOffset.x),
|
||
- @"y": @(contentOffset.y)
|
||
+ @"x": @(contentOffset.x),
|
||
+ @"y": @(contentOffset.y)
|
||
},
|
||
@"contentInset": @{
|
||
- @"top": @(contentInset.top),
|
||
- @"left": @(contentInset.left),
|
||
- @"bottom": @(contentInset.bottom),
|
||
- @"right": @(contentInset.right)
|
||
+ @"top": @(contentInset.top),
|
||
+ @"left": @(contentInset.left),
|
||
+ @"bottom": @(contentInset.bottom),
|
||
+ @"right": @(contentInset.right)
|
||
},
|
||
@"contentSize": @{
|
||
- @"width": @(contentSize.width),
|
||
- @"height": @(contentSize.height)
|
||
+ @"width": @(contentSize.width),
|
||
+ @"height": @(contentSize.height)
|
||
},
|
||
@"layoutMeasurement": @{
|
||
- @"width": @(size.width),
|
||
- @"height": @(size.height)
|
||
+ @"width": @(size.width),
|
||
+ @"height": @(size.height)
|
||
},
|
||
@"zoomScale": @(scrollView.zoomScale ?: 1),
|
||
});
|