react-native-ios-translate-sheet 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -5
- package/android/generated/java/com/facebook/react/viewmanagers/IOSTranslateSheetViewManagerDelegate.java +3 -0
- package/android/generated/java/com/facebook/react/viewmanagers/IOSTranslateSheetViewManagerInterface.java +1 -0
- package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/EventEmitters.cpp +9 -0
- package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/EventEmitters.h +6 -0
- package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/Props.cpp +2 -1
- package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/Props.h +1 -0
- package/ios/IOSTranslateSheet.swift +7 -1
- package/ios/IOSTranslateSheetProvider.swift +14 -0
- package/ios/IOSTranslateSheetView.mm +12 -1
- package/ios/IOSTranslateSheetViewManager.mm +2 -0
- package/ios/generated/RNIOSTranslateSheetViewSpec/EventEmitters.cpp +9 -0
- package/ios/generated/RNIOSTranslateSheetViewSpec/EventEmitters.h +6 -0
- package/ios/generated/RNIOSTranslateSheetViewSpec/Props.cpp +2 -1
- package/ios/generated/RNIOSTranslateSheetViewSpec/Props.h +1 -0
- package/lib/commonjs/IOSTranslateSheetViewNativeComponent.ts +6 -0
- package/lib/commonjs/TranslateContext.js +8 -2
- package/lib/commonjs/TranslateContext.js.map +1 -1
- package/lib/commonjs/hooks/useInternalTranslate.js +5 -2
- package/lib/commonjs/hooks/useInternalTranslate.js.map +1 -1
- package/lib/module/IOSTranslateSheetViewNativeComponent.ts +6 -0
- package/lib/module/TranslateContext.js +8 -2
- package/lib/module/TranslateContext.js.map +1 -1
- package/lib/module/hooks/useInternalTranslate.js +5 -2
- package/lib/module/hooks/useInternalTranslate.js.map +1 -1
- package/lib/typescript/IOSTranslateSheetViewNativeComponent.d.ts +5 -0
- package/lib/typescript/IOSTranslateSheetViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/TranslateContext.d.ts +1 -1
- package/lib/typescript/TranslateContext.d.ts.map +1 -1
- package/lib/typescript/hooks/useInternalTranslate.d.ts +2 -1
- package/lib/typescript/hooks/useInternalTranslate.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/IOSTranslateSheetViewNativeComponent.ts +6 -0
- package/src/TranslateContext.tsx +17 -3
- package/src/hooks/useInternalTranslate.tsx +7 -1
package/README.md
CHANGED
|
@@ -75,19 +75,44 @@ function MyComponent() {
|
|
|
75
75
|
|
|
76
76
|
const handleTranslate = () => {
|
|
77
77
|
presentIOSTranslateSheet('Text to translate');
|
|
78
|
-
// Optional: You can pass an opacity value (0-1) as a second parameter
|
|
79
|
-
// presentIOSTranslateSheet('Text to translate', 0.5);
|
|
80
78
|
};
|
|
81
79
|
|
|
82
80
|
return (
|
|
83
|
-
<Button
|
|
84
|
-
title="Translate"
|
|
85
|
-
onPress={handleTranslate}
|
|
81
|
+
<Button
|
|
82
|
+
title="Translate"
|
|
83
|
+
onPress={handleTranslate}
|
|
86
84
|
/>
|
|
87
85
|
);
|
|
88
86
|
}
|
|
89
87
|
```
|
|
90
88
|
|
|
89
|
+
### Replacement Action
|
|
90
|
+
|
|
91
|
+
The Replacement Action feature allows you to capture and handle the translated text after a user completes a translation. This is particularly useful for:
|
|
92
|
+
- Saving translations for later use
|
|
93
|
+
- Updating UI elements with translated content
|
|
94
|
+
- Implementing "translate and replace" functionality
|
|
95
|
+
- Storing translations in your app's state or database
|
|
96
|
+
|
|
97
|
+
#### Basic Usage
|
|
98
|
+
|
|
99
|
+
To handle translated text, provide a callback function as the second parameter to `presentIOSTranslateSheet`:
|
|
100
|
+
|
|
101
|
+
```tsx
|
|
102
|
+
const { presentIOSTranslateSheet } = useIOSTranslateSheet();
|
|
103
|
+
|
|
104
|
+
const handleTranslate = () => {
|
|
105
|
+
presentIOSTranslateSheet(
|
|
106
|
+
'Hello, how are you?',
|
|
107
|
+
(translatedText) => {
|
|
108
|
+
// Handle the translated text here
|
|
109
|
+
setTranslatedContent(translatedText);
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
};
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
|
|
91
116
|
### Checking Platform Support
|
|
92
117
|
|
|
93
118
|
The `useIOSTranslateSheet` hook provides an `isSupported` boolean that you can use to check if the translation functionality is available on the current device:
|
|
@@ -28,6 +28,9 @@ public class IOSTranslateSheetViewManagerDelegate<T extends View, U extends Base
|
|
|
28
28
|
case "isPresented":
|
|
29
29
|
mViewManager.setIsPresented(view, value == null ? false : (boolean) value);
|
|
30
30
|
break;
|
|
31
|
+
case "hasReplacementAction":
|
|
32
|
+
mViewManager.setHasReplacementAction(view, value == null ? false : (boolean) value);
|
|
33
|
+
break;
|
|
31
34
|
default:
|
|
32
35
|
super.setProperty(view, propName, value);
|
|
33
36
|
}
|
|
@@ -16,4 +16,5 @@ import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
|
|
|
16
16
|
public interface IOSTranslateSheetViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
|
|
17
17
|
void setText(T view, @Nullable String value);
|
|
18
18
|
void setIsPresented(T view, boolean value);
|
|
19
|
+
void setHasReplacementAction(T view, boolean value);
|
|
19
20
|
}
|
|
@@ -21,4 +21,13 @@ void IOSTranslateSheetViewEventEmitter::onHide(OnHide $event) const {
|
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
|
|
25
|
+
void IOSTranslateSheetViewEventEmitter::onReplacementAction(OnReplacementAction $event) const {
|
|
26
|
+
dispatchEvent("replacementAction", [$event=std::move($event)](jsi::Runtime &runtime) {
|
|
27
|
+
auto $payload = jsi::Object(runtime);
|
|
28
|
+
$payload.setProperty(runtime, "text", $event.text);
|
|
29
|
+
return $payload;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
24
33
|
} // namespace facebook::react
|
package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/EventEmitters.h
CHANGED
|
@@ -20,6 +20,12 @@ class IOSTranslateSheetViewEventEmitter : public ViewEventEmitter {
|
|
|
20
20
|
struct OnHide {
|
|
21
21
|
|
|
22
22
|
};
|
|
23
|
+
|
|
24
|
+
struct OnReplacementAction {
|
|
25
|
+
std::string text;
|
|
26
|
+
};
|
|
23
27
|
void onHide(OnHide value) const;
|
|
28
|
+
|
|
29
|
+
void onReplacementAction(OnReplacementAction value) const;
|
|
24
30
|
};
|
|
25
31
|
} // namespace facebook::react
|
package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/Props.cpp
CHANGED
|
@@ -20,7 +20,8 @@ IOSTranslateSheetViewProps::IOSTranslateSheetViewProps(
|
|
|
20
20
|
const RawProps &rawProps): ViewProps(context, sourceProps, rawProps),
|
|
21
21
|
|
|
22
22
|
text(convertRawProp(context, rawProps, "text", sourceProps.text, {})),
|
|
23
|
-
isPresented(convertRawProp(context, rawProps, "isPresented", sourceProps.isPresented, {false}))
|
|
23
|
+
isPresented(convertRawProp(context, rawProps, "isPresented", sourceProps.isPresented, {false})),
|
|
24
|
+
hasReplacementAction(convertRawProp(context, rawProps, "hasReplacementAction", sourceProps.hasReplacementAction, {false}))
|
|
24
25
|
{}
|
|
25
26
|
|
|
26
27
|
} // namespace facebook::react
|
|
@@ -4,7 +4,9 @@ import Translation
|
|
|
4
4
|
class Props: ObservableObject {
|
|
5
5
|
@Published var text: String = ""
|
|
6
6
|
@Published var isPresented: Bool = false
|
|
7
|
+
@Published var hasReplacementAction: Bool = false
|
|
7
8
|
@Published var onHide: () -> Void = {}
|
|
9
|
+
@Published var onReplacementAction: (String) -> Void = { _ in }
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
struct IOSTranslateSheet: View {
|
|
@@ -14,7 +16,11 @@ struct IOSTranslateSheet: View {
|
|
|
14
16
|
if #available(iOS 17.4, *) {
|
|
15
17
|
Color.clear
|
|
16
18
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
17
|
-
.translationPresentation(
|
|
19
|
+
.translationPresentation(
|
|
20
|
+
isPresented: $props.isPresented,
|
|
21
|
+
text: props.text,
|
|
22
|
+
replacementAction: props.hasReplacementAction ? props.onReplacementAction : nil
|
|
23
|
+
)
|
|
18
24
|
.onChange(of: props.isPresented) { oldValue, newValue in
|
|
19
25
|
if oldValue == true && newValue == false {
|
|
20
26
|
props.onHide()
|
|
@@ -33,6 +33,12 @@ public typealias RCTBubblingEventBlock = @convention(block) (_ body: [AnyHashabl
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
@objc public var hasReplacementAction: Bool = false {
|
|
37
|
+
didSet {
|
|
38
|
+
props.hasReplacementAction = hasReplacementAction
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
@objc public var onHide: RCTBubblingEventBlock? {
|
|
37
43
|
didSet {
|
|
38
44
|
props.onHide = { [weak self] in
|
|
@@ -40,6 +46,14 @@ public typealias RCTBubblingEventBlock = @convention(block) (_ body: [AnyHashabl
|
|
|
40
46
|
}
|
|
41
47
|
}
|
|
42
48
|
}
|
|
49
|
+
|
|
50
|
+
@objc public var onReplacementAction: RCTBubblingEventBlock? {
|
|
51
|
+
didSet {
|
|
52
|
+
props.onReplacementAction = { [weak self] text in
|
|
53
|
+
self?.onReplacementAction?(["text": text])
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
43
57
|
|
|
44
58
|
public override func layoutSubviews() {
|
|
45
59
|
super.layoutSubviews()
|
|
@@ -43,7 +43,15 @@ using namespace facebook::react;
|
|
|
43
43
|
->onHide({});
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
-
|
|
46
|
+
|
|
47
|
+
_view.onReplacementAction = ^(NSDictionary *text) {
|
|
48
|
+
__typeof__(self) strongSelf = weakSelf;
|
|
49
|
+
if (strongSelf && strongSelf->_eventEmitter) {
|
|
50
|
+
std::dynamic_pointer_cast<const IOSTranslateSheetViewEventEmitter>(strongSelf->_eventEmitter)
|
|
51
|
+
->onReplacementAction({.text = [text[@"text"] UTF8String]});
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
47
55
|
self.contentView = _view;
|
|
48
56
|
}
|
|
49
57
|
return self;
|
|
@@ -60,6 +68,9 @@ using namespace facebook::react;
|
|
|
60
68
|
if (oldViewProps.isPresented != newViewProps.isPresented) {
|
|
61
69
|
_view.isPresented = newViewProps.isPresented;
|
|
62
70
|
}
|
|
71
|
+
if (oldViewProps.hasReplacementAction != newViewProps.hasReplacementAction) {
|
|
72
|
+
_view.hasReplacementAction = newViewProps.hasReplacementAction;
|
|
73
|
+
}
|
|
63
74
|
|
|
64
75
|
[super updateProps:props oldProps:oldProps];
|
|
65
76
|
}
|
|
@@ -30,7 +30,9 @@ RCT_EXPORT_MODULE(IOSTranslateSheetView)
|
|
|
30
30
|
|
|
31
31
|
RCT_EXPORT_VIEW_PROPERTY(text, NSString)
|
|
32
32
|
RCT_EXPORT_VIEW_PROPERTY(isPresented, BOOL)
|
|
33
|
+
RCT_EXPORT_VIEW_PROPERTY(hasReplacementAction, BOOL)
|
|
33
34
|
RCT_EXPORT_VIEW_PROPERTY(onHide, RCTDirectEventBlock)
|
|
35
|
+
RCT_EXPORT_VIEW_PROPERTY(onReplacementAction, RCTDirectEventBlock)
|
|
34
36
|
|
|
35
37
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
36
38
|
+ (BOOL)requiresMainQueueSetup
|
|
@@ -21,4 +21,13 @@ void IOSTranslateSheetViewEventEmitter::onHide(OnHide $event) const {
|
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
|
|
25
|
+
void IOSTranslateSheetViewEventEmitter::onReplacementAction(OnReplacementAction $event) const {
|
|
26
|
+
dispatchEvent("replacementAction", [$event=std::move($event)](jsi::Runtime &runtime) {
|
|
27
|
+
auto $payload = jsi::Object(runtime);
|
|
28
|
+
$payload.setProperty(runtime, "text", $event.text);
|
|
29
|
+
return $payload;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
24
33
|
} // namespace facebook::react
|
|
@@ -20,6 +20,12 @@ class IOSTranslateSheetViewEventEmitter : public ViewEventEmitter {
|
|
|
20
20
|
struct OnHide {
|
|
21
21
|
|
|
22
22
|
};
|
|
23
|
+
|
|
24
|
+
struct OnReplacementAction {
|
|
25
|
+
std::string text;
|
|
26
|
+
};
|
|
23
27
|
void onHide(OnHide value) const;
|
|
28
|
+
|
|
29
|
+
void onReplacementAction(OnReplacementAction value) const;
|
|
24
30
|
};
|
|
25
31
|
} // namespace facebook::react
|
|
@@ -20,7 +20,8 @@ IOSTranslateSheetViewProps::IOSTranslateSheetViewProps(
|
|
|
20
20
|
const RawProps &rawProps): ViewProps(context, sourceProps, rawProps),
|
|
21
21
|
|
|
22
22
|
text(convertRawProp(context, rawProps, "text", sourceProps.text, {})),
|
|
23
|
-
isPresented(convertRawProp(context, rawProps, "isPresented", sourceProps.isPresented, {false}))
|
|
23
|
+
isPresented(convertRawProp(context, rawProps, "isPresented", sourceProps.isPresented, {false})),
|
|
24
|
+
hasReplacementAction(convertRawProp(context, rawProps, "hasReplacementAction", sourceProps.hasReplacementAction, {false}))
|
|
24
25
|
{}
|
|
25
26
|
|
|
26
27
|
} // namespace facebook::react
|
|
@@ -2,10 +2,16 @@ import type { ViewProps } from "react-native";
|
|
|
2
2
|
import type { DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes";
|
|
3
3
|
import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent";
|
|
4
4
|
|
|
5
|
+
export interface OnReplacementActionEvent {
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
interface IOSTranslateSheetProps extends ViewProps {
|
|
6
10
|
text: string;
|
|
7
11
|
isPresented: boolean;
|
|
12
|
+
hasReplacementAction: boolean;
|
|
8
13
|
onHide: DirectEventHandler<null>;
|
|
14
|
+
onReplacementAction?: DirectEventHandler<OnReplacementActionEvent>;
|
|
9
15
|
}
|
|
10
16
|
|
|
11
17
|
export default codegenNativeComponent<IOSTranslateSheetProps>(
|
|
@@ -19,8 +19,12 @@ const IOSTranslateSheetProvider = ({
|
|
|
19
19
|
isIOSTranslateSheetPresented,
|
|
20
20
|
text,
|
|
21
21
|
hideTranslateSheet,
|
|
22
|
-
isSupported
|
|
22
|
+
isSupported,
|
|
23
|
+
replacementAction
|
|
23
24
|
} = (0, _useInternalTranslate.useInternalTranslateSheet)();
|
|
25
|
+
const onReplacementAction = event => {
|
|
26
|
+
replacementAction?.(event.nativeEvent.text);
|
|
27
|
+
};
|
|
24
28
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(TranslateContext.Provider, {
|
|
25
29
|
value: {
|
|
26
30
|
presentIOSTranslateSheet,
|
|
@@ -30,7 +34,9 @@ const IOSTranslateSheetProvider = ({
|
|
|
30
34
|
text: text,
|
|
31
35
|
isPresented: isIOSTranslateSheetPresented,
|
|
32
36
|
onHide: hideTranslateSheet,
|
|
33
|
-
style: _reactNative.StyleSheet.absoluteFillObject
|
|
37
|
+
style: _reactNative.StyleSheet.absoluteFillObject,
|
|
38
|
+
hasReplacementAction: !!replacementAction,
|
|
39
|
+
onReplacementAction: onReplacementAction
|
|
34
40
|
}), children]
|
|
35
41
|
});
|
|
36
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_IOSTranslateSheetViewNativeComponent","_interopRequireDefault","_useInternalTranslate","_jsxRuntime","e","__esModule","default","TranslateContext","createContext","IOSTranslateSheetProvider","children","presentIOSTranslateSheet","isIOSTranslateSheetPresented","text","hideTranslateSheet","isSupported","useInternalTranslateSheet","jsxs","Provider","value","jsx","isPresented","onHide","style","StyleSheet","absoluteFillObject","exports","useIOSTranslateSheet","context","useContext","Error"],"sourceRoot":"../../src","sources":["TranslateContext.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,qCAAA,GAAAC,sBAAA,CAAAH,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_IOSTranslateSheetViewNativeComponent","_interopRequireDefault","_useInternalTranslate","_jsxRuntime","e","__esModule","default","TranslateContext","createContext","IOSTranslateSheetProvider","children","presentIOSTranslateSheet","isIOSTranslateSheetPresented","text","hideTranslateSheet","isSupported","replacementAction","useInternalTranslateSheet","onReplacementAction","event","nativeEvent","jsxs","Provider","value","jsx","isPresented","onHide","style","StyleSheet","absoluteFillObject","hasReplacementAction","exports","useIOSTranslateSheet","context","useContext","Error"],"sourceRoot":"../../src","sources":["TranslateContext.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,qCAAA,GAAAC,sBAAA,CAAAH,OAAA;AAGA,IAAAI,qBAAA,GAAAJ,OAAA;AAAyE,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAUzE,MAAMG,gBAAgB,gBAAG,IAAAC,oBAAa,EAA8B,IAAI,CAAC;AAElE,MAAMC,yBAAyB,GAAGA,CAAC;EACxCC;AACuB,CAAC,KAAK;EAC7B,MAAM;IACJC,wBAAwB;IACxBC,4BAA4B;IAC5BC,IAAI;IACJC,kBAAkB;IAClBC,WAAW;IACXC;EACF,CAAC,GAAG,IAAAC,+CAAyB,EAAC,CAAC;EAE/B,MAAMC,mBAAmB,GACvBC,KAAqD,IAClD;IACHH,iBAAiB,GAAGG,KAAK,CAACC,WAAW,CAACP,IAAI,CAAC;EAC7C,CAAC;EAED,oBACE,IAAAV,WAAA,CAAAkB,IAAA,EAACd,gBAAgB,CAACe,QAAQ;IACxBC,KAAK,EAAE;MACLZ,wBAAwB;MACxBI;IACF,CAAE;IAAAL,QAAA,gBAEF,IAAAP,WAAA,CAAAqB,GAAA,EAACxB,qCAAA,CAAAM,OAAiB;MAChBO,IAAI,EAAEA,IAAK;MACXY,WAAW,EAAEb,4BAA6B;MAC1Cc,MAAM,EAAEZ,kBAAmB;MAC3Ba,KAAK,EAAEC,uBAAU,CAACC,kBAAmB;MACrCC,oBAAoB,EAAE,CAAC,CAACd,iBAAkB;MAC1CE,mBAAmB,EAAEA;IAAoB,CAC1C,CAAC,EACDR,QAAQ;EAAA,CACgB,CAAC;AAEhC,CAAC;AAACqB,OAAA,CAAAtB,yBAAA,GAAAA,yBAAA;AAEK,MAAMuB,oBAAoB,GAAGA,CAAA,KAAM;EACxC,MAAMC,OAAO,GAAG,IAAAC,iBAAU,EAAC3B,gBAAgB,CAAC;EAC5C,IAAI,CAAC0B,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CACb,sEACF,CAAC;EACH;EACA,OAAOF,OAAO;AAChB,CAAC;AAACF,OAAA,CAAAC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
@@ -10,8 +10,10 @@ const isSupported = _reactNative.Platform.OS === "ios" && Number.parseFloat(Stri
|
|
|
10
10
|
const useInternalTranslateSheet = () => {
|
|
11
11
|
const [isIOSTranslateSheetPresented, setIsIOSTranslateSheetPresented] = (0, _react.useState)(false);
|
|
12
12
|
const textRef = (0, _react.useRef)("");
|
|
13
|
-
const
|
|
13
|
+
const replacementActionRef = (0, _react.useRef)(undefined);
|
|
14
|
+
const presentIOSTranslateSheet = (_text, _replacementAction) => {
|
|
14
15
|
textRef.current = _text;
|
|
16
|
+
replacementActionRef.current = _replacementAction;
|
|
15
17
|
setIsIOSTranslateSheetPresented(true);
|
|
16
18
|
};
|
|
17
19
|
const hideTranslateSheet = () => {
|
|
@@ -22,7 +24,8 @@ const useInternalTranslateSheet = () => {
|
|
|
22
24
|
presentIOSTranslateSheet,
|
|
23
25
|
hideTranslateSheet,
|
|
24
26
|
text: textRef.current,
|
|
25
|
-
isSupported
|
|
27
|
+
isSupported,
|
|
28
|
+
replacementAction: replacementActionRef.current
|
|
26
29
|
};
|
|
27
30
|
};
|
|
28
31
|
exports.useInternalTranslateSheet = useInternalTranslateSheet;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","isSupported","Platform","OS","Number","parseFloat","String","Version","useInternalTranslateSheet","isIOSTranslateSheetPresented","setIsIOSTranslateSheetPresented","useState","textRef","useRef","presentIOSTranslateSheet","_text","
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","isSupported","Platform","OS","Number","parseFloat","String","Version","useInternalTranslateSheet","isIOSTranslateSheetPresented","setIsIOSTranslateSheetPresented","useState","textRef","useRef","replacementActionRef","undefined","presentIOSTranslateSheet","_text","_replacementAction","current","hideTranslateSheet","text","replacementAction","exports"],"sourceRoot":"../../../src","sources":["hooks/useInternalTranslate.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,MAAME,WAAW,GACfC,qBAAQ,CAACC,EAAE,KAAK,KAAK,IAAIC,MAAM,CAACC,UAAU,CAACC,MAAM,CAACJ,qBAAQ,CAACK,OAAO,CAAC,CAAC,IAAI,IAAI;AAEvE,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAM,CAACC,4BAA4B,EAAEC,+BAA+B,CAAC,GACnE,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACjB,MAAMC,OAAO,GAAG,IAAAC,aAAM,EAAC,EAAE,CAAC;EAC1B,MAAMC,oBAAoB,GAAG,IAAAD,aAAM,EAAyBE,SAAS,CAAC;EAEtE,MAAMC,wBAAwB,GAAGA,CAC/BC,KAAa,EACbC,kBAA2C,KACxC;IACHN,OAAO,CAACO,OAAO,GAAGF,KAAK;IACvBH,oBAAoB,CAACK,OAAO,GAAGD,kBAAkB;IACjDR,+BAA+B,CAAC,IAAI,CAAC;EACvC,CAAC;EAED,MAAMU,kBAAkB,GAAGA,CAAA,KAAM;IAC/BV,+BAA+B,CAAC,KAAK,CAAC;EACxC,CAAC;EAED,OAAO;IACLD,4BAA4B;IAC5BO,wBAAwB;IACxBI,kBAAkB;IAClBC,IAAI,EAAET,OAAO,CAACO,OAAO;IACrBlB,WAAW;IACXqB,iBAAiB,EAAER,oBAAoB,CAACK;EAC1C,CAAC;AACH,CAAC;AAACI,OAAA,CAAAf,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -2,10 +2,16 @@ import type { ViewProps } from "react-native";
|
|
|
2
2
|
import type { DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes";
|
|
3
3
|
import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent";
|
|
4
4
|
|
|
5
|
+
export interface OnReplacementActionEvent {
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
interface IOSTranslateSheetProps extends ViewProps {
|
|
6
10
|
text: string;
|
|
7
11
|
isPresented: boolean;
|
|
12
|
+
hasReplacementAction: boolean;
|
|
8
13
|
onHide: DirectEventHandler<null>;
|
|
14
|
+
onReplacementAction?: DirectEventHandler<OnReplacementActionEvent>;
|
|
9
15
|
}
|
|
10
16
|
|
|
11
17
|
export default codegenNativeComponent<IOSTranslateSheetProps>(
|
|
@@ -14,8 +14,12 @@ export const IOSTranslateSheetProvider = ({
|
|
|
14
14
|
isIOSTranslateSheetPresented,
|
|
15
15
|
text,
|
|
16
16
|
hideTranslateSheet,
|
|
17
|
-
isSupported
|
|
17
|
+
isSupported,
|
|
18
|
+
replacementAction
|
|
18
19
|
} = useInternalTranslateSheet();
|
|
20
|
+
const onReplacementAction = event => {
|
|
21
|
+
replacementAction?.(event.nativeEvent.text);
|
|
22
|
+
};
|
|
19
23
|
return /*#__PURE__*/_jsxs(TranslateContext.Provider, {
|
|
20
24
|
value: {
|
|
21
25
|
presentIOSTranslateSheet,
|
|
@@ -25,7 +29,9 @@ export const IOSTranslateSheetProvider = ({
|
|
|
25
29
|
text: text,
|
|
26
30
|
isPresented: isIOSTranslateSheetPresented,
|
|
27
31
|
onHide: hideTranslateSheet,
|
|
28
|
-
style: StyleSheet.absoluteFillObject
|
|
32
|
+
style: StyleSheet.absoluteFillObject,
|
|
33
|
+
hasReplacementAction: !!replacementAction,
|
|
34
|
+
onReplacementAction: onReplacementAction
|
|
29
35
|
}), children]
|
|
30
36
|
});
|
|
31
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","useContext","StyleSheet","IOSTranslateSheet","useInternalTranslateSheet","jsx","_jsx","jsxs","_jsxs","TranslateContext","IOSTranslateSheetProvider","children","presentIOSTranslateSheet","isIOSTranslateSheetPresented","text","hideTranslateSheet","isSupported","Provider","value","isPresented","onHide","style","absoluteFillObject","useIOSTranslateSheet","context","Error"],"sourceRoot":"../../src","sources":["TranslateContext.tsx"],"mappings":";;AAAA,SAAyBA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AACjE,
|
|
1
|
+
{"version":3,"names":["createContext","useContext","StyleSheet","IOSTranslateSheet","useInternalTranslateSheet","jsx","_jsx","jsxs","_jsxs","TranslateContext","IOSTranslateSheetProvider","children","presentIOSTranslateSheet","isIOSTranslateSheetPresented","text","hideTranslateSheet","isSupported","replacementAction","onReplacementAction","event","nativeEvent","Provider","value","isPresented","onHide","style","absoluteFillObject","hasReplacementAction","useIOSTranslateSheet","context","Error"],"sourceRoot":"../../src","sources":["TranslateContext.tsx"],"mappings":";;AAAA,SAAyBA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AACjE,SAAoCC,UAAU,QAAQ,cAAc;AACpE,OAAOC,iBAAiB,MAEjB,wCAAwC;AAC/C,SAASC,yBAAyB,QAAQ,8BAA8B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAUzE,MAAMC,gBAAgB,gBAAGT,aAAa,CAA8B,IAAI,CAAC;AAEzE,OAAO,MAAMU,yBAAyB,GAAGA,CAAC;EACxCC;AACuB,CAAC,KAAK;EAC7B,MAAM;IACJC,wBAAwB;IACxBC,4BAA4B;IAC5BC,IAAI;IACJC,kBAAkB;IAClBC,WAAW;IACXC;EACF,CAAC,GAAGb,yBAAyB,CAAC,CAAC;EAE/B,MAAMc,mBAAmB,GACvBC,KAAqD,IAClD;IACHF,iBAAiB,GAAGE,KAAK,CAACC,WAAW,CAACN,IAAI,CAAC;EAC7C,CAAC;EAED,oBACEN,KAAA,CAACC,gBAAgB,CAACY,QAAQ;IACxBC,KAAK,EAAE;MACLV,wBAAwB;MACxBI;IACF,CAAE;IAAAL,QAAA,gBAEFL,IAAA,CAACH,iBAAiB;MAChBW,IAAI,EAAEA,IAAK;MACXS,WAAW,EAAEV,4BAA6B;MAC1CW,MAAM,EAAET,kBAAmB;MAC3BU,KAAK,EAAEvB,UAAU,CAACwB,kBAAmB;MACrCC,oBAAoB,EAAE,CAAC,CAACV,iBAAkB;MAC1CC,mBAAmB,EAAEA;IAAoB,CAC1C,CAAC,EACDP,QAAQ;EAAA,CACgB,CAAC;AAEhC,CAAC;AAED,OAAO,MAAMiB,oBAAoB,GAAGA,CAAA,KAAM;EACxC,MAAMC,OAAO,GAAG5B,UAAU,CAACQ,gBAAgB,CAAC;EAC5C,IAAI,CAACoB,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,sEACF,CAAC;EACH;EACA,OAAOD,OAAO;AAChB,CAAC","ignoreList":[]}
|
|
@@ -6,8 +6,10 @@ const isSupported = Platform.OS === "ios" && Number.parseFloat(String(Platform.V
|
|
|
6
6
|
export const useInternalTranslateSheet = () => {
|
|
7
7
|
const [isIOSTranslateSheetPresented, setIsIOSTranslateSheetPresented] = useState(false);
|
|
8
8
|
const textRef = useRef("");
|
|
9
|
-
const
|
|
9
|
+
const replacementActionRef = useRef(undefined);
|
|
10
|
+
const presentIOSTranslateSheet = (_text, _replacementAction) => {
|
|
10
11
|
textRef.current = _text;
|
|
12
|
+
replacementActionRef.current = _replacementAction;
|
|
11
13
|
setIsIOSTranslateSheetPresented(true);
|
|
12
14
|
};
|
|
13
15
|
const hideTranslateSheet = () => {
|
|
@@ -18,7 +20,8 @@ export const useInternalTranslateSheet = () => {
|
|
|
18
20
|
presentIOSTranslateSheet,
|
|
19
21
|
hideTranslateSheet,
|
|
20
22
|
text: textRef.current,
|
|
21
|
-
isSupported
|
|
23
|
+
isSupported,
|
|
24
|
+
replacementAction: replacementActionRef.current
|
|
22
25
|
};
|
|
23
26
|
};
|
|
24
27
|
//# sourceMappingURL=useInternalTranslate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useRef","useState","Platform","isSupported","OS","Number","parseFloat","String","Version","useInternalTranslateSheet","isIOSTranslateSheetPresented","setIsIOSTranslateSheetPresented","textRef","presentIOSTranslateSheet","_text","
|
|
1
|
+
{"version":3,"names":["useRef","useState","Platform","isSupported","OS","Number","parseFloat","String","Version","useInternalTranslateSheet","isIOSTranslateSheetPresented","setIsIOSTranslateSheetPresented","textRef","replacementActionRef","undefined","presentIOSTranslateSheet","_text","_replacementAction","current","hideTranslateSheet","text","replacementAction"],"sourceRoot":"../../../src","sources":["hooks/useInternalTranslate.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACxC,SAASC,QAAQ,QAAQ,cAAc;AAEvC,MAAMC,WAAW,GACfD,QAAQ,CAACE,EAAE,KAAK,KAAK,IAAIC,MAAM,CAACC,UAAU,CAACC,MAAM,CAACL,QAAQ,CAACM,OAAO,CAAC,CAAC,IAAI,IAAI;AAE9E,OAAO,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAM,CAACC,4BAA4B,EAAEC,+BAA+B,CAAC,GACnEV,QAAQ,CAAC,KAAK,CAAC;EACjB,MAAMW,OAAO,GAAGZ,MAAM,CAAC,EAAE,CAAC;EAC1B,MAAMa,oBAAoB,GAAGb,MAAM,CAAyBc,SAAS,CAAC;EAEtE,MAAMC,wBAAwB,GAAGA,CAC/BC,KAAa,EACbC,kBAA2C,KACxC;IACHL,OAAO,CAACM,OAAO,GAAGF,KAAK;IACvBH,oBAAoB,CAACK,OAAO,GAAGD,kBAAkB;IACjDN,+BAA+B,CAAC,IAAI,CAAC;EACvC,CAAC;EAED,MAAMQ,kBAAkB,GAAGA,CAAA,KAAM;IAC/BR,+BAA+B,CAAC,KAAK,CAAC;EACxC,CAAC;EAED,OAAO;IACLD,4BAA4B;IAC5BK,wBAAwB;IACxBI,kBAAkB;IAClBC,IAAI,EAAER,OAAO,CAACM,OAAO;IACrBf,WAAW;IACXkB,iBAAiB,EAAER,oBAAoB,CAACK;EAC1C,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { ViewProps } from "react-native";
|
|
2
2
|
import type { DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes";
|
|
3
|
+
export interface OnReplacementActionEvent {
|
|
4
|
+
text: string;
|
|
5
|
+
}
|
|
3
6
|
interface IOSTranslateSheetProps extends ViewProps {
|
|
4
7
|
text: string;
|
|
5
8
|
isPresented: boolean;
|
|
9
|
+
hasReplacementAction: boolean;
|
|
6
10
|
onHide: DirectEventHandler<null>;
|
|
11
|
+
onReplacementAction?: DirectEventHandler<OnReplacementActionEvent>;
|
|
7
12
|
}
|
|
8
13
|
declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<IOSTranslateSheetProps>;
|
|
9
14
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IOSTranslateSheetViewNativeComponent.d.ts","sourceRoot":"","sources":["../../src/IOSTranslateSheetViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAGpF,UAAU,sBAAuB,SAAQ,SAAS;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"IOSTranslateSheetViewNativeComponent.d.ts","sourceRoot":"","sources":["../../src/IOSTranslateSheetViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAGpF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,sBAAuB,SAAQ,SAAS;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;CACpE;;AAED,wBAEE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
type TranslateContextType = {
|
|
3
3
|
isSupported: boolean;
|
|
4
|
-
presentIOSTranslateSheet: (text: string,
|
|
4
|
+
presentIOSTranslateSheet: (text: string, replacementAction?: (text: string) => void) => void;
|
|
5
5
|
};
|
|
6
6
|
export declare const IOSTranslateSheetProvider: ({ children, }: {
|
|
7
7
|
children: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranslateContext.d.ts","sourceRoot":"","sources":["../../src/TranslateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TranslateContext.d.ts","sourceRoot":"","sources":["../../src/TranslateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,OAAO,CAAC;AAOlE,KAAK,oBAAoB,GAAG;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,wBAAwB,EAAE,CACxB,IAAI,EAAE,MAAM,EACZ,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KACvC,IAAI,CAAC;CACX,CAAC;AAIF,eAAO,MAAM,yBAAyB,GAAI,eAEvC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,4CAkCzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,4BAQhC,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export declare const useInternalTranslateSheet: () => {
|
|
2
2
|
isIOSTranslateSheetPresented: boolean;
|
|
3
|
-
presentIOSTranslateSheet: (_text: string,
|
|
3
|
+
presentIOSTranslateSheet: (_text: string, _replacementAction?: (text: string) => void) => void;
|
|
4
4
|
hideTranslateSheet: () => void;
|
|
5
5
|
text: string;
|
|
6
6
|
isSupported: boolean;
|
|
7
|
+
replacementAction: ((text: string) => void) | undefined;
|
|
7
8
|
};
|
|
8
9
|
//# sourceMappingURL=useInternalTranslate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInternalTranslate.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInternalTranslate.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,yBAAyB;;
|
|
1
|
+
{"version":3,"file":"useInternalTranslate.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInternalTranslate.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,yBAAyB;;sCAO3B,MAAM,uBACQ,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;;;;+BAJF,MAAM,KAAK,IAAI;CAuB3D,CAAC"}
|
package/package.json
CHANGED
|
@@ -2,10 +2,16 @@ import type { ViewProps } from "react-native";
|
|
|
2
2
|
import type { DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes";
|
|
3
3
|
import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent";
|
|
4
4
|
|
|
5
|
+
export interface OnReplacementActionEvent {
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
5
9
|
interface IOSTranslateSheetProps extends ViewProps {
|
|
6
10
|
text: string;
|
|
7
11
|
isPresented: boolean;
|
|
12
|
+
hasReplacementAction: boolean;
|
|
8
13
|
onHide: DirectEventHandler<null>;
|
|
14
|
+
onReplacementAction?: DirectEventHandler<OnReplacementActionEvent>;
|
|
9
15
|
}
|
|
10
16
|
|
|
11
17
|
export default codegenNativeComponent<IOSTranslateSheetProps>(
|
package/src/TranslateContext.tsx
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { type ReactNode, createContext, useContext } from "react";
|
|
2
|
-
import { StyleSheet } from "react-native";
|
|
3
|
-
import IOSTranslateSheet
|
|
2
|
+
import { type NativeSyntheticEvent, StyleSheet } from "react-native";
|
|
3
|
+
import IOSTranslateSheet, {
|
|
4
|
+
type OnReplacementActionEvent,
|
|
5
|
+
} from "./IOSTranslateSheetViewNativeComponent";
|
|
4
6
|
import { useInternalTranslateSheet } from "./hooks/useInternalTranslate";
|
|
5
7
|
|
|
6
8
|
type TranslateContextType = {
|
|
7
9
|
isSupported: boolean;
|
|
8
|
-
presentIOSTranslateSheet: (
|
|
10
|
+
presentIOSTranslateSheet: (
|
|
11
|
+
text: string,
|
|
12
|
+
replacementAction?: (text: string) => void,
|
|
13
|
+
) => void;
|
|
9
14
|
};
|
|
10
15
|
|
|
11
16
|
const TranslateContext = createContext<TranslateContextType | null>(null);
|
|
@@ -19,8 +24,15 @@ export const IOSTranslateSheetProvider = ({
|
|
|
19
24
|
text,
|
|
20
25
|
hideTranslateSheet,
|
|
21
26
|
isSupported,
|
|
27
|
+
replacementAction,
|
|
22
28
|
} = useInternalTranslateSheet();
|
|
23
29
|
|
|
30
|
+
const onReplacementAction = (
|
|
31
|
+
event: NativeSyntheticEvent<OnReplacementActionEvent>,
|
|
32
|
+
) => {
|
|
33
|
+
replacementAction?.(event.nativeEvent.text);
|
|
34
|
+
};
|
|
35
|
+
|
|
24
36
|
return (
|
|
25
37
|
<TranslateContext.Provider
|
|
26
38
|
value={{
|
|
@@ -33,6 +45,8 @@ export const IOSTranslateSheetProvider = ({
|
|
|
33
45
|
isPresented={isIOSTranslateSheetPresented}
|
|
34
46
|
onHide={hideTranslateSheet}
|
|
35
47
|
style={StyleSheet.absoluteFillObject}
|
|
48
|
+
hasReplacementAction={!!replacementAction}
|
|
49
|
+
onReplacementAction={onReplacementAction}
|
|
36
50
|
/>
|
|
37
51
|
{children}
|
|
38
52
|
</TranslateContext.Provider>
|
|
@@ -8,9 +8,14 @@ export const useInternalTranslateSheet = () => {
|
|
|
8
8
|
const [isIOSTranslateSheetPresented, setIsIOSTranslateSheetPresented] =
|
|
9
9
|
useState(false);
|
|
10
10
|
const textRef = useRef("");
|
|
11
|
+
const replacementActionRef = useRef<(text: string) => void>(undefined);
|
|
11
12
|
|
|
12
|
-
const presentIOSTranslateSheet = (
|
|
13
|
+
const presentIOSTranslateSheet = (
|
|
14
|
+
_text: string,
|
|
15
|
+
_replacementAction?: (text: string) => void,
|
|
16
|
+
) => {
|
|
13
17
|
textRef.current = _text;
|
|
18
|
+
replacementActionRef.current = _replacementAction;
|
|
14
19
|
setIsIOSTranslateSheetPresented(true);
|
|
15
20
|
};
|
|
16
21
|
|
|
@@ -24,5 +29,6 @@ export const useInternalTranslateSheet = () => {
|
|
|
24
29
|
hideTranslateSheet,
|
|
25
30
|
text: textRef.current,
|
|
26
31
|
isSupported,
|
|
32
|
+
replacementAction: replacementActionRef.current,
|
|
27
33
|
};
|
|
28
34
|
};
|