diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9b565ac..bde4286 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -104,7 +104,7 @@ git branch chore/2-configuration - [ESLint](https://eslint.org/) - JS/TS linting - [dprint](https://dprint.dev/) - JS/TS formatting - [TypeScript](https://www.typescriptlang.org/) - TS type checking -- [Spotless](https://github.com/diffplug/spotless) & [Ktlint](https://github.com/pinterest/ktlint) - Kotlin/Java linting and formatting +- [Spotless](https://github.com/diffplug/spotless) & [Ktfmt](https://github.com/facebook/ktfmt) - Kotlin/Java linting and formatting - [SwiftFormat](https://github.com/nicklockwood/SwiftFormat) - Swift formatting - [SwiftLint](https://github.com/realm/SwiftLint) - Swift linting - [ClangFormat](https://clang.llvm.org/) - ObjC/ObjC++ linting and formatting @@ -127,13 +127,13 @@ The `package.json` file contains various scripts for common tasks: - `yarn typescript`: type-check files with TypeScript. - `yarn lint:js`: lint all JS/TS files with ESLint. -- `yarn lint:android`: run linter (Spotless/Ktlint) for all Kotlin/Java files. +- `yarn lint:android`: run linter (Spotless/Ktfmt) for all Kotlin/Java files. - `yarn lint:ios:swift`: run linter (SwiftLint) for all Swift files within old arch project (install [SwiftLint](https://github.com/realm/SwiftLint) e.g. with Homebrew). - `yarn lint:ios:objc`: run linter (ClangFormat) for all ObjC/ObjC++ files within old arch project (install [ClangFormat](https://clang.llvm.org/) e.g. with Homebrew). - `yarn lint:fabric:ios:swift`: run linter (SwiftLint) for all Swift files within new arch project (install [SwiftLint](https://github.com/realm/SwiftLint) e.g. with Homebrew). - `yarn lint:fabric:ios:objc`: run linter (ClangFormat) for all ObjC/ObjC++ files within new arch project (install [ClangFormat](https://clang.llvm.org/) e.g. with Homebrew). - `yarn format:js`: format all JS/TS files with dprint. -- `yarn format:android`: format (Spotless/Ktlint) all Kotlin/Java files. +- `yarn format:android`: format (Spotless/Ktfmt) all Kotlin/Java files. - `yarn format:ios:swift`: format (SwiftFormat) all Swift files within old arch project (install [SwiftFormat](https://github.com/nicklockwood/SwiftFormat) e.g. with Homebrew). - `yarn format:ios:objc`: format (ClangFormat) all ObjC/ObjC++ files within old arch project (install [ClangFormat](https://clang.llvm.org/) e.g. with Homebrew). - `yarn format:fabric:ios:swift`: format (SwiftFormat) all Swift files within new arch project (install [SwiftFormat](https://github.com/nicklockwood/SwiftFormat) e.g. with Homebrew). diff --git a/packages/react-native-avoid-softinput/ReactNativeAvoidSoftinput.podspec b/packages/react-native-avoid-softinput/ReactNativeAvoidSoftinput.podspec index 7cd1ab7..2ca3dad 100644 --- a/packages/react-native-avoid-softinput/ReactNativeAvoidSoftinput.podspec +++ b/packages/react-native-avoid-softinput/ReactNativeAvoidSoftinput.podspec @@ -2,13 +2,7 @@ require "json" package = JSON.parse(File.read(File.join(__dir__, "package.json"))) -# TODO -# Migrate to install_module_dependencies https://github.com/facebook/react-native/commit/82e9c6ad611f1fb816de056ff031716f8cb24b4e#diff-adcf572f001c2b710d14f409c14763f1a50b08369b3034548f1602685d21f67f -# when library will drop support for RN < 0.71 - -fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' - -folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32' +new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' Pod::Spec.new do |s| s.name = "ReactNativeAvoidSoftinput" @@ -22,14 +16,9 @@ Pod::Spec.new do |s| s.source = { :git => "https://github.com/mateusz1913/react-native-avoid-softinput.git", :tag => "#{s.version}" } s.source_files = "ios/**/*.{h,m,mm,cpp,swift}" - s.dependency "React-Core" - if fabric_enabled - s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1" + if new_arch_enabled s.pod_target_xcconfig = { - "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"", - "OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1", - "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", "DEFINES_MODULE" => "YES", "SWIFT_OBJC_INTERFACE_HEADER_NAME" => "ReactNativeAvoidSoftinput-Swift.h", # This is handy when we want to detect if new arch is enabled in Swift code @@ -41,17 +30,12 @@ Pod::Spec.new do |s| # #endif "OTHER_SWIFT_FLAGS" => "-DAVOID_SOFTINPUT_NEW_ARCH_ENABLED" } - - s.dependency "React-RCTFabric" - s.dependency "React-Codegen" - s.dependency "RCT-Folly" - s.dependency "RCTRequired" - s.dependency "RCTTypeSafety" - s.dependency "ReactCommon/turbomodule/core" else s.pod_target_xcconfig = { "DEFINES_MODULE" => "YES", "SWIFT_OBJC_INTERFACE_HEADER_NAME" => "ReactNativeAvoidSoftinput-Swift.h" } end + + install_modules_dependencies(s) end diff --git a/packages/react-native-avoid-softinput/android/build.gradle b/packages/react-native-avoid-softinput/android/build.gradle index 9436b87..09d2163 100644 --- a/packages/react-native-avoid-softinput/android/build.gradle +++ b/packages/react-native-avoid-softinput/android/build.gradle @@ -11,7 +11,7 @@ buildscript { classpath("com.android.tools.build:gradle:8.0.2") // noinspection DifferentKotlinGradleVersion classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath "com.diffplug.spotless:spotless-plugin-gradle:6.13.0" + classpath "com.diffplug.spotless:spotless-plugin-gradle:6.22.0" } } @@ -53,11 +53,26 @@ def reactNativeArchitectures() { return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] } +def supportsNamespace() { + def parsed = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.') + def major = parsed[0].toInteger() + def minor = parsed[1].toInteger() + + // Namespace support was added in 7.3.0 + return (major == 7 && minor >= 3) || major >= 8 +} + android { compileSdkVersion getExtOrIntegerDefault('compileSdkVersion') - if (project.android.hasProperty("namespace")) { + if (supportsNamespace()) { namespace "com.reactnativeavoidsoftinput" + + sourceSets { + main { + manifest.srcFile "src/main/AndroidManifestNew.xml" + } + } } buildFeatures { @@ -101,71 +116,6 @@ android { repositories { mavenCentral() google() - - def found = false - def defaultDir = null - def androidSourcesName = 'React Native sources' - - if (rootProject.ext.has('reactNativeAndroidRoot')) { - defaultDir = rootProject.ext.get('reactNativeAndroidRoot') - } else { - defaultDir = new File( - projectDir, - '/../../../node_modules/react-native/android' - ) - } - - if (defaultDir.exists()) { - maven { - url defaultDir.toString() - name androidSourcesName - } - - logger.info(":${project.name}:reactNativeAndroidRoot ${defaultDir.canonicalPath}") - found = true - } else { - def parentDir = rootProject.projectDir - - 1.upto(5, { - if (found) return true - parentDir = parentDir.parentFile - - def androidSourcesDir = new File( - parentDir, - 'node_modules/react-native' - ) - - def androidPrebuiltBinaryDir = new File( - parentDir, - 'node_modules/react-native/android' - ) - - if (androidPrebuiltBinaryDir.exists()) { - maven { - url androidPrebuiltBinaryDir.toString() - name androidSourcesName - } - - logger.info(":${project.name}:reactNativeAndroidRoot ${androidPrebuiltBinaryDir.canonicalPath}") - found = true - } else if (androidSourcesDir.exists()) { - maven { - url androidSourcesDir.toString() - name androidSourcesName - } - - logger.info(":${project.name}:reactNativeAndroidRoot ${androidSourcesDir.canonicalPath}") - found = true - } - }) - } - - if (!found) { - throw new GradleException( - "${project.name}: unable to locate React Native android sources. " + - "Ensure you have you installed React Native as a dependency in your project and try again." - ) - } } def kotlin_version = getExtOrDefault('kotlinVersion') diff --git a/packages/react-native-avoid-softinput/android/spotless.gradle b/packages/react-native-avoid-softinput/android/spotless.gradle index d4eff3e..0e94899 100644 --- a/packages/react-native-avoid-softinput/android/spotless.gradle +++ b/packages/react-native-avoid-softinput/android/spotless.gradle @@ -2,21 +2,13 @@ apply plugin: 'com.diffplug.spotless' spotless { - java { - target 'src/*/java/**/*.java' - googleJavaFormat() - } kotlin { target 'src/**/*.kt' - /** - * if some rule has to be disabled: - * ktlint() - * .userData(["disabled_rules": "no-wildcard-imports"]) - */ - ktlint("0.47.1") - .editorConfigOverride(["indent_size": 2]) - trimTrailingWhitespace() - indentWithSpaces() - endWithNewline() + targetExclude "$buildDir/**/*.kt" + ktfmt().kotlinlangStyle() + } + kotlinGradle { + target '*.gradle.kts' + ktfmt().kotlinlangStyle() } } diff --git a/packages/react-native-avoid-softinput/android/src/main/AndroidManifestNew.xml b/packages/react-native-avoid-softinput/android/src/main/AndroidManifestNew.xml new file mode 100644 index 0000000..0a0938a --- /dev/null +++ b/packages/react-native-avoid-softinput/android/src/main/AndroidManifestNew.xml @@ -0,0 +1,3 @@ + + + diff --git a/packages/react-native-avoid-softinput/ios/AvoidSoftInputObjCPPUtils.mm b/packages/react-native-avoid-softinput/ios/AvoidSoftInputObjCPPUtils.mm index 2a37cb5..6a389a3 100644 --- a/packages/react-native-avoid-softinput/ios/AvoidSoftInputObjCPPUtils.mm +++ b/packages/react-native-avoid-softinput/ios/AvoidSoftInputObjCPPUtils.mm @@ -3,7 +3,7 @@ #import #import #ifdef RCT_NEW_ARCH_ENABLED -#import +#import #endif @implementation AvoidSoftInputObjCPPUtils @@ -28,7 +28,7 @@ + (UIView *_Nullable)getReactRootView if ([ presentedViewController.view isKindOfClass:[ #ifdef RCT_NEW_ARCH_ENABLED - RCTFabricSurfaceHostingProxyRootView + RCTSurfaceHostingProxyRootView #else RCTRootView #endif diff --git a/packages/react-native-avoid-softinput/package.json b/packages/react-native-avoid-softinput/package.json index fefbd62..b42e14d 100644 --- a/packages/react-native-avoid-softinput/package.json +++ b/packages/react-native-avoid-softinput/package.json @@ -57,15 +57,15 @@ }, "devDependencies": { "@release-it/conventional-changelog": "6.0.0", - "@types/react": "18.2.14", + "@types/react": "18.2.42", "react": "18.2.0", - "react-native": "0.72.1", + "react-native": "patch:react-native@npm%3A0.73.1#~/.yarn/patches/react-native-npm-0.73.1-35751404af.patch", "react-native-builder-bob": "0.21.2", "release-it": "16.0.0" }, "peerDependencies": { "react": ">=17.0.0", - "react-native": ">=0.65.0" + "react-native": ">=0.71.0" }, "release-it": { "git": { diff --git a/packages/react-native-avoid-softinput/src/types.ts b/packages/react-native-avoid-softinput/src/types.ts index 7f26dbb..1a667f0 100644 --- a/packages/react-native-avoid-softinput/src/types.ts +++ b/packages/react-native-avoid-softinput/src/types.ts @@ -8,6 +8,10 @@ export interface SoftInputAppliedOffsetEventData { appliedOffset: number; } +export type SoftInputEvent = NativeSyntheticEvent; + +export type SoftInputAppliedOffsetEvent = NativeSyntheticEvent; + export type SoftInputEasing = 'easeIn' | 'easeInOut' | 'easeOut' | 'linear'; export interface AvoidSoftInputNativeModuleType { @@ -57,8 +61,8 @@ export interface AvoidSoftInputViewProps extends Omit) => void; - onSoftInputHeightChange?: (e: NativeSyntheticEvent) => void; - onSoftInputHidden?: (e: NativeSyntheticEvent) => void; - onSoftInputShown?: (e: NativeSyntheticEvent) => void; + onSoftInputAppliedOffsetChange?: (e: SoftInputAppliedOffsetEvent) => void; + onSoftInputHeightChange?: (e: SoftInputEvent) => void; + onSoftInputHidden?: (e: SoftInputEvent) => void; + onSoftInputShown?: (e: SoftInputEvent) => void; }