diff options
Diffstat (limited to 'patches/@mattermost+react-native-paste-input+0.8.1.patch.disabled')
-rw-r--r-- | patches/@mattermost+react-native-paste-input+0.8.1.patch.disabled | 264 |
1 files changed, 264 insertions, 0 deletions
diff --git a/patches/@mattermost+react-native-paste-input+0.8.1.patch.disabled b/patches/@mattermost+react-native-paste-input+0.8.1.patch.disabled new file mode 100644 index 000000000..a7f146143 --- /dev/null +++ b/patches/@mattermost+react-native-paste-input+0.8.1.patch.disabled @@ -0,0 +1,264 @@ +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..5049c33 100644 +--- a/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m ++++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteInputView.m +@@ -4,6 +4,7 @@ + // + // 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" +@@ -12,49 +13,78 @@ + + @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 +92,6 @@ - (void)setSmartPunctuation:(NSString *)smartPunctuation { + - (void)scrollViewDidScroll:(UIScrollView *)scrollView + { + RCTDirectEventBlock onScroll = self.onScroll; +- + if (onScroll) { + CGPoint contentOffset = scrollView.contentOffset; + CGSize contentSize = scrollView.contentSize; +@@ -71,22 +100,22 @@ - (void)scrollViewDidScroll:(UIScrollView *)scrollView + + 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), + }); +diff --git a/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInput.mm b/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInput.mm +index dd50053..2ed7017 100644 +--- a/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInput.mm ++++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInput.mm +@@ -122,8 +122,8 @@ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared & + const auto &newTextInputProps = static_cast<const PasteTextInputProps &>(*props); + + // Traits: +- if (newTextInputProps.traits.multiline != oldTextInputProps.traits.multiline) { +- [self _setMultiline:newTextInputProps.traits.multiline]; ++ if (newTextInputProps.multiline != oldTextInputProps.multiline) { ++ [self _setMultiline:newTextInputProps.multiline]; + } + + if (newTextInputProps.traits.autocapitalizationType != oldTextInputProps.traits.autocapitalizationType) { +@@ -421,7 +421,7 @@ - (void)textInputDidChangeSelection + return; + } + const auto &props = static_cast<const PasteTextInputProps &>(*_props); +- if (props.traits.multiline && ![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) { ++ if (props.multiline && ![_lastStringStateWasUpdatedWith isEqual:_backedTextInputView.attributedText]) { + [self textInputDidChange]; + _ignoreNextTextInputCall = YES; + } +@@ -708,11 +708,11 @@ - (BOOL)_textOf:(NSAttributedString *)newText equals:(NSAttributedString *)oldTe + - (SubmitBehavior)getSubmitBehavior + { + const auto &props = static_cast<const PasteTextInputProps &>(*_props); +- const SubmitBehavior submitBehaviorDefaultable = props.traits.submitBehavior; ++ const SubmitBehavior submitBehaviorDefaultable = props.submitBehavior; + + // We should always have a non-default `submitBehavior`, but in case we don't, set it based on multiline. + if (submitBehaviorDefaultable == SubmitBehavior::Default) { +- return props.traits.multiline ? SubmitBehavior::Newline : SubmitBehavior::BlurAndSubmit; ++ return props.multiline ? SubmitBehavior::Newline : SubmitBehavior::BlurAndSubmit; + } + + return submitBehaviorDefaultable; +diff --git a/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/Props.cpp b/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/Props.cpp +index 29e094f..7ef519a 100644 +--- a/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/Props.cpp ++++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/Props.cpp +@@ -22,8 +22,7 @@ PasteTextInputProps::PasteTextInputProps( + const PropsParserContext &context, + const PasteTextInputProps &sourceProps, + const RawProps& rawProps) +- : ViewProps(context, sourceProps, rawProps), +- BaseTextProps(context, sourceProps, rawProps), ++ : BaseTextInputProps(context, sourceProps, rawProps), + traits(convertRawProp(context, rawProps, sourceProps.traits, {})), + smartPunctuation(convertRawProp(context, rawProps, "smartPunctuation", sourceProps.smartPunctuation, {})), + disableCopyPaste(convertRawProp(context, rawProps, "disableCopyPaste", sourceProps.disableCopyPaste, {false})), +@@ -133,7 +132,7 @@ TextAttributes PasteTextInputProps::getEffectiveTextAttributes(Float fontSizeMul + ParagraphAttributes PasteTextInputProps::getEffectiveParagraphAttributes() const { + auto result = paragraphAttributes; + +- if (!traits.multiline) { ++ if (!multiline) { + result.maximumNumberOfLines = 1; + } + +diff --git a/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/Props.h b/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/Props.h +index 723d00c..31cfe66 100644 +--- a/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/Props.h ++++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/Props.h +@@ -15,6 +15,7 @@ + #include <react/renderer/components/iostextinput/conversions.h> + #include <react/renderer/components/iostextinput/primitives.h> + #include <react/renderer/components/text/BaseTextProps.h> ++#include <react/renderer/components/textinput/BaseTextInputProps.h> + #include <react/renderer/components/view/ViewProps.h> + #include <react/renderer/core/Props.h> + #include <react/renderer/core/PropsParserContext.h> +@@ -25,7 +26,7 @@ + + namespace facebook::react { + +-class PasteTextInputProps final : public ViewProps, public BaseTextProps { ++class PasteTextInputProps final : public BaseTextInputProps { + public: + PasteTextInputProps() = default; + PasteTextInputProps(const PropsParserContext& context, const PasteTextInputProps& sourceProps, const RawProps& rawProps); +diff --git a/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/ShadowNodes.cpp b/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/ShadowNodes.cpp +index 31e07e3..7f0ebfb 100644 +--- a/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/ShadowNodes.cpp ++++ b/node_modules/@mattermost/react-native-paste-input/ios/PasteTextInputSpecs/ShadowNodes.cpp +@@ -91,20 +91,11 @@ void PasteTextInputShadowNode::updateStateIfNeeded( + const auto& state = getStateData(); + + react_native_assert(textLayoutManager_); +- react_native_assert( +- (!state.layoutManager || state.layoutManager == textLayoutManager_) && +- "`StateData` refers to a different `TextLayoutManager`"); +- +- if (state.reactTreeAttributedString == reactTreeAttributedString && +- state.layoutManager == textLayoutManager_) { +- return; +- } + + auto newState = TextInputState{}; + newState.attributedStringBox = AttributedStringBox{reactTreeAttributedString}; + newState.paragraphAttributes = getConcreteProps().paragraphAttributes; + newState.reactTreeAttributedString = reactTreeAttributedString; +- newState.layoutManager = textLayoutManager_; + newState.mostRecentEventCount = getConcreteProps().mostRecentEventCount; + setStateData(std::move(newState)); + } |