From e1723e7c6d5d5a70425f733e0dccbe1e6a9c297e Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Mon, 24 Jun 2024 14:49:56 +0200 Subject: [PATCH 1/3] fix: conditionally import RN schedule exact alarm --- .../src/permissions/RequestGenericPermission.ts | 9 +++++---- packages/jsActions/nanoflow-actions-native/package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts b/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts index 83b2513a2..3993dd3bf 100644 --- a/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts +++ b/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts @@ -14,7 +14,6 @@ import { Permission, PERMISSIONS as RNPermissions } from "react-native-permissions"; -import { getPermission } from "react-native-schedule-exact-alarm-permission"; import { ANDROIDPermissionName, IOSPermissionName } from "../../typings/RequestGenericPermission"; // BEGIN EXTRA CODE @@ -27,12 +26,14 @@ const PERMISSIONS = { IOS: RNPermissions.IOS }; -function handleBlockedPermission(permission: string): void { +async function handleBlockedPermission(permission: string): Promise { const permissionName = permission.replace(/_IOS|_ANDROID/, ""); if (permissionName === "SCHEDULE_EXACT_ALARM") { + const RNExactAlarmPermission = await import("react-native-schedule-exact-alarm-permission"); + Alert.alert("", "Please allow setting alarms and reminders", [ - { text: "Go to alarm settings", onPress: () => getPermission(), isPreferred: true }, + { text: "Go to alarm settings", onPress: () => RNExactAlarmPermission.getPermission(), isPreferred: true }, { text: "Cancel", style: "cancel" } ]); } else { @@ -106,7 +107,7 @@ export async function RequestGenericPermission( case RESULTS.LIMITED: return permissionStatus; case RESULTS.BLOCKED: - handleBlockedPermission(permission); + await handleBlockedPermission(permission); return RESULTS.BLOCKED; case RESULTS.DENIED: return request(mappedPermissionName as Permission); diff --git a/packages/jsActions/nanoflow-actions-native/package.json b/packages/jsActions/nanoflow-actions-native/package.json index ec8f6d4d0..9bfda663f 100644 --- a/packages/jsActions/nanoflow-actions-native/package.json +++ b/packages/jsActions/nanoflow-actions-native/package.json @@ -36,4 +36,4 @@ "eslint": "^7.20.0", "rollup": "^2.68.0" } -} \ No newline at end of file +} From d85698dc0e0cd83e172c5ea3c7b8d667a8e8a3fa Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Mon, 24 Jun 2024 16:30:35 +0200 Subject: [PATCH 2/3] chore: update changelog --- packages/jsActions/mobile-resources-native/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/jsActions/mobile-resources-native/CHANGELOG.md b/packages/jsActions/mobile-resources-native/CHANGELOG.md index 65ddc642c..2eac4411f 100644 --- a/packages/jsActions/mobile-resources-native/CHANGELOG.md +++ b/packages/jsActions/mobile-resources-native/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +- We have fixed an issue with checking blocked permissions on iOS + +## [6.1.0] Native Mobile Resources - 2024-05-28 + ### Changed - Added CheckGenericPermission and updated RequestGenericPermission to support SCHEDULE_EXACT_ALARM_ANDROID permission for Android (relevant for Android 14). From 65e861f2183bb8656fd3db8fa47d7f0a6e87537c Mon Sep 17 00:00:00 2001 From: Vadym Vakhovskiy Date: Wed, 26 Jun 2024 14:38:10 +0200 Subject: [PATCH 3/3] fix: conditionally import RN schedule exact alarm --- .../rollup-plugin-collect-dependencies.js | 2 +- configs/jsactions/rollup.config.js | 14 +++++++++++++- .../src/permissions/RequestGenericPermission.ts | 6 +++--- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/configs/jsactions/rollup-plugin-collect-dependencies.js b/configs/jsactions/rollup-plugin-collect-dependencies.js index e3ac7232c..0e1fef384 100644 --- a/configs/jsactions/rollup-plugin-collect-dependencies.js +++ b/configs/jsactions/rollup-plugin-collect-dependencies.js @@ -166,7 +166,7 @@ async function getTransitiveDependencies(packagePath, isExternal) { return Array.from(result); } -async function copyJsModule(moduleSourcePath, to) { +export async function copyJsModule(moduleSourcePath, to) { if (existsSync(to)) { return; } diff --git a/configs/jsactions/rollup.config.js b/configs/jsactions/rollup.config.js index b60176311..9435b7d3d 100644 --- a/configs/jsactions/rollup.config.js +++ b/configs/jsactions/rollup.config.js @@ -10,7 +10,7 @@ import command from "rollup-plugin-command"; import { promisify } from "util"; import { nodeResolve } from "@rollup/plugin-node-resolve"; import typescript from "@rollup/plugin-typescript"; -import { collectDependencies } from "./rollup-plugin-collect-dependencies"; +import { collectDependencies, copyJsModule } from "./rollup-plugin-collect-dependencies"; import { licenseCustomTemplate, copyLicenseFile } from "./rollup-helper"; import { bigJsImportReplacer } from "./rollup-plugin-bigjs-import-replacer"; @@ -90,6 +90,18 @@ export default async args => { overwrite: true } ); + + // We dynamically import react-native-schedule-exact-alarm-permission as it works only on Android + // so we need to copy it here as collectDependencies won't detect it. + await copyJsModule( + // require returns a path to commonjs index.js file + join( + dirname(require.resolve("react-native-schedule-exact-alarm-permission")), + "../", + "../" + ), + join(outDir, "node_modules", "react-native-schedule-exact-alarm-permission") + ); } else if (args.configProject === "nanoflowcommons") { // `invariant` is being used silently by @react-native-community/geolocation; it is not listed as a dependency nor peerDependency. // https://github.dev/react-native-geolocation/react-native-geolocation/blob/1786929f2be581da91082ff857c2393da5e597b3/js/implementation.native.js#L13 diff --git a/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts b/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts index 3993dd3bf..dc44d1ccb 100644 --- a/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts +++ b/packages/jsActions/mobile-resources-native/src/permissions/RequestGenericPermission.ts @@ -26,11 +26,11 @@ const PERMISSIONS = { IOS: RNPermissions.IOS }; -async function handleBlockedPermission(permission: string): Promise { +function handleBlockedPermission(permission: string): void { const permissionName = permission.replace(/_IOS|_ANDROID/, ""); if (permissionName === "SCHEDULE_EXACT_ALARM") { - const RNExactAlarmPermission = await import("react-native-schedule-exact-alarm-permission"); + const RNExactAlarmPermission = require("react-native-schedule-exact-alarm-permission"); Alert.alert("", "Please allow setting alarms and reminders", [ { text: "Go to alarm settings", onPress: () => RNExactAlarmPermission.getPermission(), isPreferred: true }, @@ -107,7 +107,7 @@ export async function RequestGenericPermission( case RESULTS.LIMITED: return permissionStatus; case RESULTS.BLOCKED: - await handleBlockedPermission(permission); + handleBlockedPermission(permission); return RESULTS.BLOCKED; case RESULTS.DENIED: return request(mappedPermissionName as Permission);