about summary refs log tree commit diff
path: root/patches
diff options
context:
space:
mode:
authorSamuel Newman <mozzius@protonmail.com>2025-01-07 18:29:27 +0000
committerGitHub <noreply@github.com>2025-01-07 18:29:27 +0000
commitfe8d3b081c0511da240817576a3bf42a4010105f (patch)
treecbaa6701231894467a26c5e6ea7613509eb2d4a2 /patches
parent615bbc35327c71663909e3016527d233fc0ca178 (diff)
downloadvoidsky-fe8d3b081c0511da240817576a3bf42a4010105f.tar.zst
Fix double text input in composer (#7381)
* upgrade paste input

* override how backing uitextinput is created

* different approach
Diffstat (limited to 'patches')
-rw-r--r--patches/@mattermost+react-native-paste-input+0.7.1.patch16
-rw-r--r--patches/@mattermost+react-native-paste-input+0.8.1.patch160
2 files changed, 160 insertions, 16 deletions
diff --git a/patches/@mattermost+react-native-paste-input+0.7.1.patch b/patches/@mattermost+react-native-paste-input+0.7.1.patch
deleted file mode 100644
index dbf55b095..000000000
--- a/patches/@mattermost+react-native-paste-input+0.7.1.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-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..0564d97 100644
---- a/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
-+++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m
-@@ -22,6 +22,11 @@ - (instancetype)initWithBridge:(RCTBridge *)bridge
-     _backedTextInputView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
-     _backedTextInputView.textInputDelegate = self;
-
-+    // Disable inline predictions to prevent jank in the composer
-+    if (@available(iOS 17.0, *)) {
-+      _backedTextInputView.inlinePredictionType = UITextInlinePredictionTypeNo;
-+    }
-+
-     [self addSubview:_backedTextInputView];
-   }
-
diff --git a/patches/@mattermost+react-native-paste-input+0.8.1.patch b/patches/@mattermost+react-native-paste-input+0.8.1.patch
new file mode 100644
index 000000000..a6d1513f1
--- /dev/null
+++ b/patches/@mattermost+react-native-paste-input+0.8.1.patch
@@ -0,0 +1,160 @@
+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),
+     });