Skip to content

Commit 6bee463

Browse files
authored
feat: left/right done button iOS position (#29)
* feat: left/right done button iOS position
1 parent 5e02bf5 commit 6bee463

7 files changed

Lines changed: 31 additions & 192 deletions

File tree

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,14 @@ For example, if you know upfront that your app is supposed to open PDF files, th
8080

8181
#### Options
8282

83-
| Parameter | Type | Platform | Description |
84-
|------------------------------------|---------|--------------|----------------------------------------------------------------------------------------------------|
85-
| **displayName** (optional) | string | iOS | Customize the QuickLook title |
86-
| **doneButtonTitle** (optional) | string | iOS | Customize UINavigationController Done button title |
87-
| **onDismiss** (optional) | function | iOS, Android | Callback invoked when the viewer is being dismissed |
88-
| **showOpenWithDialog** (optional) | boolean | Android | If there is more than one app that can open the file, show an _Open With_ dialogue box |
89-
| **showAppsSuggestions** (optional) | boolean | Android | If there is not an installed app that can open the file, open the Play Store with suggested apps |
83+
| Parameter | Type | Platform | Description |
84+
|-----------------------------------|---------------|--------------|--------------------------------------------------------------------------------------------------|
85+
| **displayName** (optional) | string | iOS | Customize the QuickLook title |
86+
| **doneButtonTitle** (optional) | string | iOS | Customize UINavigationController Done button title |
87+
| **doneButtonPosition** (optional) | left \| right | iOS | Customize UINavigationController Done button position |
88+
| **onDismiss** (optional) | function | iOS, Android | Callback invoked when the viewer is being dismissed |
89+
| **showOpenWithDialog** (optional) | boolean | Android | If there is more than one app that can open the file, show an _Open With_ dialogue box |
90+
| **showAppsSuggestions** (optional) | boolean | Android | If there is not an installed app that can open the file, open the Play Store with suggested apps |
9091

9192
**IMPORTANT**: Try to be as granular as possible when defining your own queries. This might affect your Play Store approval, as mentioned in [Package visibility filtering on Android](https://developer.android.com/training/package-visibility).
9293

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1332,7 +1332,7 @@ PODS:
13321332
- React-jsiexecutor
13331333
- React-RCTFBReactNativeSpec
13341334
- ReactCommon/turbomodule/core
1335-
- react-native-file-viewer-turbo (0.5.0):
1335+
- react-native-file-viewer-turbo (0.6.0):
13361336
- DoubleConversion
13371337
- glog
13381338
- hermes-engine
@@ -1971,7 +1971,7 @@ SPEC CHECKSUMS:
19711971
React-logger: 368570a253f00879a1e4fea24ed4047e72e7bbf3
19721972
React-Mapbuffer: c04fcda1c6281fc0a6824c7dcc1633dd217ac1ec
19731973
React-microtasksnativemodule: ca2804a25fdcefffa0aa942aa23ab53b99614a34
1974-
react-native-file-viewer-turbo: 8256f2509b40b5fa8b8dd0fc2bb5af92197271b0
1974+
react-native-file-viewer-turbo: 02ced1cce8f0a04a57cca0392e89c4281d03b952
19751975
React-NativeModulesApple: 452b86b29fae99ed0a4015dca3ad9cd222f88abf
19761976
React-oscompat: ef5df1c734f19b8003e149317d041b8ce1f7d29c
19771977
React-perflogger: 6fd2f6811533e9c19a61e855c3033eecbf4ad2a0

example/src/App.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export default function App() {
3232
open(localFile, {
3333
onDismiss: () => console.log('dismissed!'),
3434
doneButtonTitle: 'Custom done',
35+
doneButtonPosition: 'right',
3536
})
3637
.then(console.log)
3738
.catch(console.error)

ios/FileViewerTurbo.mm

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,10 @@ - (void)dismissView:(id)sender {
151151
resolve:(RCTPromiseResolveBlock)resolve
152152
reject:(RCTPromiseRejectBlock)reject) {
153153

154+
UIBarButtonItem *buttonItem;
154155
NSString *displayName = options[@"displayName"];
155156
NSString *doneButtonTitle = options[@"doneButtonTitle"];
157+
NSString *doneButtonPosition = options[@"doneButtonPosition"];
156158

157159
File *file = [[File alloc] initWithPath:path title:displayName];
158160

@@ -164,12 +166,19 @@ - (void)dismissView:(id)sender {
164166
}
165167

166168
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
167-
169+
168170
if (doneButtonTitle) {
169-
controller.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:doneButtonTitle style:UIBarButtonItemStylePlain target:self action:@selector(dismissView:)];
171+
buttonItem = [[UIBarButtonItem alloc] initWithTitle:doneButtonTitle style:UIBarButtonItemStylePlain target:self action:@selector(dismissView:)];
170172
} else {
171-
controller.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView:)];
172-
173+
buttonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissView:)];
174+
}
175+
176+
if ([doneButtonPosition isEqualToString: @"left"]) {
177+
controller.navigationItem.leftBarButtonItem = buttonItem;
178+
} else if ([doneButtonPosition isEqualToString: @"right"]) {
179+
controller.navigationItem.rightBarButtonItem = buttonItem;
180+
} else {
181+
controller.navigationItem.leftBarButtonItem = buttonItem;
173182
}
174183

175184
if ([QLPreviewController canPreviewItem:file]) {

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-file-viewer-turbo",
3-
"version": "0.5.1",
3+
"version": "0.6.0",
44
"description": "Native file viewer for react-native - now with TurboModules support",
55
"source": "./src/index.tsx",
66
"main": "./lib/module/index.js",
@@ -74,7 +74,7 @@
7474
"@eslint/js": "^9.22.0",
7575
"@evilmartians/lefthook": "^1.5.0",
7676
"@expo/config-plugins": "^9.0.12",
77-
"@react-native-community/cli": "15.0.0-alpha.2",
77+
"@react-native-community/cli": "18.0.0",
7878
"@react-native/babel-preset": "0.79.2",
7979
"@react-native/eslint-config": "^0.79.2",
8080
"@release-it/conventional-changelog": "^9.0.2",

src/NativeFileViewerTurbo.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export type Options = {
77
doneButtonTitle?: string;
88
showOpenWithDialog?: boolean;
99
showAppsSuggestions?: boolean;
10+
doneButtonPosition?: 'left' | 'right';
1011
};
1112

1213
export interface Spec extends TurboModule {

yarn.lock

Lines changed: 4 additions & 177 deletions
Original file line numberDiff line numberDiff line change
@@ -2602,18 +2602,6 @@ __metadata:
26022602
languageName: node
26032603
linkType: hard
26042604

2605-
"@react-native-community/cli-clean@npm:15.0.0-alpha.2":
2606-
version: 15.0.0-alpha.2
2607-
resolution: "@react-native-community/cli-clean@npm:15.0.0-alpha.2"
2608-
dependencies:
2609-
"@react-native-community/cli-tools": 15.0.0-alpha.2
2610-
chalk: ^4.1.2
2611-
execa: ^5.0.0
2612-
fast-glob: ^3.3.2
2613-
checksum: 2dcf0019aaaea1972324b47cf1fdc0912c8e76ee70e46c0399467e629f7fc3b20dec4065f37a69ffb1bda75c9e8300800868b05df92371a62a116abfed15865c
2614-
languageName: node
2615-
linkType: hard
2616-
26172605
"@react-native-community/cli-clean@npm:18.0.0":
26182606
version: 18.0.0
26192607
resolution: "@react-native-community/cli-clean@npm:18.0.0"
@@ -2650,20 +2638,6 @@ __metadata:
26502638
languageName: node
26512639
linkType: hard
26522640

2653-
"@react-native-community/cli-config@npm:15.0.0-alpha.2":
2654-
version: 15.0.0-alpha.2
2655-
resolution: "@react-native-community/cli-config@npm:15.0.0-alpha.2"
2656-
dependencies:
2657-
"@react-native-community/cli-tools": 15.0.0-alpha.2
2658-
chalk: ^4.1.2
2659-
cosmiconfig: ^9.0.0
2660-
deepmerge: ^4.3.0
2661-
fast-glob: ^3.3.2
2662-
joi: ^17.2.1
2663-
checksum: 2774c0b312d98637ade4c1429850588f267bb9b02361f88340a127436dfb61308072c88e3ed8e18ccb17c6f8ed6837589b5ad3717ddf8ea0402cf81029ae3665
2664-
languageName: node
2665-
linkType: hard
2666-
26672641
"@react-native-community/cli-config@npm:18.0.0":
26682642
version: 18.0.0
26692643
resolution: "@react-native-community/cli-config@npm:18.0.0"
@@ -2678,39 +2652,6 @@ __metadata:
26782652
languageName: node
26792653
linkType: hard
26802654

2681-
"@react-native-community/cli-debugger-ui@npm:15.0.0-alpha.2":
2682-
version: 15.0.0-alpha.2
2683-
resolution: "@react-native-community/cli-debugger-ui@npm:15.0.0-alpha.2"
2684-
dependencies:
2685-
serve-static: ^1.13.1
2686-
checksum: b25322f1f672edc13db631629bbeda0467a645cc5ccf87f99715797f275e35909683ba44601ad23a85d49b6ddc02a6bf94f585010985aaf829ce849ccd8a5960
2687-
languageName: node
2688-
linkType: hard
2689-
2690-
"@react-native-community/cli-doctor@npm:15.0.0-alpha.2":
2691-
version: 15.0.0-alpha.2
2692-
resolution: "@react-native-community/cli-doctor@npm:15.0.0-alpha.2"
2693-
dependencies:
2694-
"@react-native-community/cli-config": 15.0.0-alpha.2
2695-
"@react-native-community/cli-platform-android": 15.0.0-alpha.2
2696-
"@react-native-community/cli-platform-apple": 15.0.0-alpha.2
2697-
"@react-native-community/cli-platform-ios": 15.0.0-alpha.2
2698-
"@react-native-community/cli-tools": 15.0.0-alpha.2
2699-
chalk: ^4.1.2
2700-
command-exists: ^1.2.8
2701-
deepmerge: ^4.3.0
2702-
envinfo: ^7.13.0
2703-
execa: ^5.0.0
2704-
node-stream-zip: ^1.9.1
2705-
ora: ^5.4.1
2706-
semver: ^7.5.2
2707-
strip-ansi: ^5.2.0
2708-
wcwidth: ^1.0.1
2709-
yaml: ^2.2.1
2710-
checksum: 9dae312408d663e3da6258352bb4aa572042aa2e16941b2da9f0db387af5e0a1d7bd494a75145c6077a98d3232322a4dc26d82360e9e92726480ff53e02c73fa
2711-
languageName: node
2712-
linkType: hard
2713-
27142655
"@react-native-community/cli-doctor@npm:18.0.0":
27152656
version: 18.0.0
27162657
resolution: "@react-native-community/cli-doctor@npm:18.0.0"
@@ -2734,20 +2675,6 @@ __metadata:
27342675
languageName: node
27352676
linkType: hard
27362677

2737-
"@react-native-community/cli-platform-android@npm:15.0.0-alpha.2":
2738-
version: 15.0.0-alpha.2
2739-
resolution: "@react-native-community/cli-platform-android@npm:15.0.0-alpha.2"
2740-
dependencies:
2741-
"@react-native-community/cli-tools": 15.0.0-alpha.2
2742-
chalk: ^4.1.2
2743-
execa: ^5.0.0
2744-
fast-glob: ^3.3.2
2745-
fast-xml-parser: ^4.4.1
2746-
logkitty: ^0.7.1
2747-
checksum: 05fe7d0b09f63d7d3236c5cf16426a535c428c50e099f5262d6f530778c71bbf7018d0af98215d88dc09c34506178909e0d041d5ae390b3d06cd783d48037953
2748-
languageName: node
2749-
linkType: hard
2750-
27512678
"@react-native-community/cli-platform-android@npm:18.0.0, @react-native-community/cli-platform-android@npm:^18.0.0":
27522679
version: 18.0.0
27532680
resolution: "@react-native-community/cli-platform-android@npm:18.0.0"
@@ -2761,20 +2688,6 @@ __metadata:
27612688
languageName: node
27622689
linkType: hard
27632690

2764-
"@react-native-community/cli-platform-apple@npm:15.0.0-alpha.2":
2765-
version: 15.0.0-alpha.2
2766-
resolution: "@react-native-community/cli-platform-apple@npm:15.0.0-alpha.2"
2767-
dependencies:
2768-
"@react-native-community/cli-tools": 15.0.0-alpha.2
2769-
chalk: ^4.1.2
2770-
execa: ^5.0.0
2771-
fast-glob: ^3.3.2
2772-
fast-xml-parser: ^4.4.1
2773-
ora: ^5.4.1
2774-
checksum: 4703445b076262c9a8fffdf142b8cfb9d8b656ec284754ef5d6e7d5cc72f7d9a8e908c5bbbaace35f577c2a15ec4a74117f29a8f51f69499abd8025c55b07cb1
2775-
languageName: node
2776-
linkType: hard
2777-
27782691
"@react-native-community/cli-platform-apple@npm:18.0.0":
27792692
version: 18.0.0
27802693
resolution: "@react-native-community/cli-platform-apple@npm:18.0.0"
@@ -2788,15 +2701,6 @@ __metadata:
27882701
languageName: node
27892702
linkType: hard
27902703

2791-
"@react-native-community/cli-platform-ios@npm:15.0.0-alpha.2":
2792-
version: 15.0.0-alpha.2
2793-
resolution: "@react-native-community/cli-platform-ios@npm:15.0.0-alpha.2"
2794-
dependencies:
2795-
"@react-native-community/cli-platform-apple": 15.0.0-alpha.2
2796-
checksum: 485cfe403b30be954848df229a838caac03571941efc3c20280f5c1f26c8cc228dc507e00f65f876d196708b5beb2b433f83fd8b1920880c370be448fe11531b
2797-
languageName: node
2798-
linkType: hard
2799-
28002704
"@react-native-community/cli-platform-ios@npm:18.0.0, @react-native-community/cli-platform-ios@npm:^18.0.0":
28012705
version: 18.0.0
28022706
resolution: "@react-native-community/cli-platform-ios@npm:18.0.0"
@@ -2806,23 +2710,6 @@ __metadata:
28062710
languageName: node
28072711
linkType: hard
28082712

2809-
"@react-native-community/cli-server-api@npm:15.0.0-alpha.2":
2810-
version: 15.0.0-alpha.2
2811-
resolution: "@react-native-community/cli-server-api@npm:15.0.0-alpha.2"
2812-
dependencies:
2813-
"@react-native-community/cli-debugger-ui": 15.0.0-alpha.2
2814-
"@react-native-community/cli-tools": 15.0.0-alpha.2
2815-
compression: ^1.7.1
2816-
connect: ^3.6.5
2817-
errorhandler: ^1.5.1
2818-
nocache: ^3.0.1
2819-
pretty-format: ^26.6.2
2820-
serve-static: ^1.13.1
2821-
ws: ^6.2.3
2822-
checksum: c447a0017bb743028aad8f26bc25aa0a4e6b3054a2b722ee7c8a7f1ca14b708f2b9cdea041d154e8ed6e1190bb7fbe04dada2a4529a200e138fc976f4b113b9e
2823-
languageName: node
2824-
linkType: hard
2825-
28262713
"@react-native-community/cli-server-api@npm:18.0.0":
28272714
version: 18.0.0
28282715
resolution: "@react-native-community/cli-server-api@npm:18.0.0"
@@ -2841,24 +2728,6 @@ __metadata:
28412728
languageName: node
28422729
linkType: hard
28432730

2844-
"@react-native-community/cli-tools@npm:15.0.0-alpha.2":
2845-
version: 15.0.0-alpha.2
2846-
resolution: "@react-native-community/cli-tools@npm:15.0.0-alpha.2"
2847-
dependencies:
2848-
appdirsjs: ^1.2.4
2849-
chalk: ^4.1.2
2850-
execa: ^5.0.0
2851-
find-up: ^5.0.0
2852-
mime: ^2.4.1
2853-
open: ^6.2.0
2854-
ora: ^5.4.1
2855-
semver: ^7.5.2
2856-
shell-quote: ^1.7.3
2857-
sudo-prompt: ^9.0.0
2858-
checksum: 15f996ee45d957ef2ee134634f02eb8921263cff4cb009d7373be4c468295d001137f5b09430117c68700e860ed4431cd6b0dc6ecf905f7e8208e8d84d356412
2859-
languageName: node
2860-
linkType: hard
2861-
28622731
"@react-native-community/cli-tools@npm:18.0.0":
28632732
version: 18.0.0
28642733
resolution: "@react-native-community/cli-tools@npm:18.0.0"
@@ -2877,15 +2746,6 @@ __metadata:
28772746
languageName: node
28782747
linkType: hard
28792748

2880-
"@react-native-community/cli-types@npm:15.0.0-alpha.2":
2881-
version: 15.0.0-alpha.2
2882-
resolution: "@react-native-community/cli-types@npm:15.0.0-alpha.2"
2883-
dependencies:
2884-
joi: ^17.2.1
2885-
checksum: 50de0db59c79ff4a302f8fa2b29d2cc3d3e7bc6a3c0c346dd4b1c26c90796a65c4ba6230c2de0b619e5a1548f751a81bad2ef7740367ca4a94da6e02857fd645
2886-
languageName: node
2887-
linkType: hard
2888-
28892749
"@react-native-community/cli-types@npm:18.0.0":
28902750
version: 18.0.0
28912751
resolution: "@react-native-community/cli-types@npm:18.0.0"
@@ -2895,33 +2755,7 @@ __metadata:
28952755
languageName: node
28962756
linkType: hard
28972757

2898-
"@react-native-community/cli@npm:15.0.0-alpha.2":
2899-
version: 15.0.0-alpha.2
2900-
resolution: "@react-native-community/cli@npm:15.0.0-alpha.2"
2901-
dependencies:
2902-
"@react-native-community/cli-clean": 15.0.0-alpha.2
2903-
"@react-native-community/cli-config": 15.0.0-alpha.2
2904-
"@react-native-community/cli-debugger-ui": 15.0.0-alpha.2
2905-
"@react-native-community/cli-doctor": 15.0.0-alpha.2
2906-
"@react-native-community/cli-server-api": 15.0.0-alpha.2
2907-
"@react-native-community/cli-tools": 15.0.0-alpha.2
2908-
"@react-native-community/cli-types": 15.0.0-alpha.2
2909-
chalk: ^4.1.2
2910-
commander: ^9.4.1
2911-
deepmerge: ^4.3.0
2912-
execa: ^5.0.0
2913-
find-up: ^5.0.0
2914-
fs-extra: ^8.1.0
2915-
graceful-fs: ^4.1.3
2916-
prompts: ^2.4.2
2917-
semver: ^7.5.2
2918-
bin:
2919-
rnc-cli: build/bin.js
2920-
checksum: 8cc2c7c111e40aca6726e53a2abf97c065964274493770db4066e373387b2acd2584ba917f2a265cca7eca478b7b25de1fdf9bd4262b0012f1dc6a7828fe4ef9
2921-
languageName: node
2922-
linkType: hard
2923-
2924-
"@react-native-community/cli@npm:^18.0.0":
2758+
"@react-native-community/cli@npm:18.0.0, @react-native-community/cli@npm:^18.0.0":
29252759
version: 18.0.0
29262760
resolution: "@react-native-community/cli@npm:18.0.0"
29272761
dependencies:
@@ -11136,7 +10970,7 @@ __metadata:
1113610970
"@eslint/js": ^9.22.0
1113710971
"@evilmartians/lefthook": ^1.5.0
1113810972
"@expo/config-plugins": ^9.0.12
11139-
"@react-native-community/cli": 15.0.0-alpha.2
10973+
"@react-native-community/cli": 18.0.0
1114010974
"@react-native/babel-preset": 0.79.2
1114110975
"@react-native/eslint-config": ^0.79.2
1114210976
"@release-it/conventional-changelog": ^9.0.2
@@ -11904,7 +11738,7 @@ __metadata:
1190411738
languageName: node
1190511739
linkType: hard
1190611740

11907-
"shell-quote@npm:^1.6.1, shell-quote@npm:^1.7.3, shell-quote@npm:^1.8.1":
11741+
"shell-quote@npm:^1.6.1, shell-quote@npm:^1.8.1":
1190811742
version: 1.8.2
1190911743
resolution: "shell-quote@npm:1.8.2"
1191011744
checksum: 1e97b62ced1c4c5135015978ebf273bed1f425a68cf84163e83fbb0f34b3ff9471e656720dab2b7cbb4ae0f58998e686d17d166c28dfb3662acd009e8bd7faed
@@ -12368,7 +12202,7 @@ __metadata:
1236812202
languageName: node
1236912203
linkType: hard
1237012204

12371-
"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.2.0":
12205+
"strip-ansi@npm:^5.0.0":
1237212206
version: 5.2.0
1237312207
resolution: "strip-ansi@npm:5.2.0"
1237412208
dependencies:
@@ -12444,13 +12278,6 @@ __metadata:
1244412278
languageName: node
1244512279
linkType: hard
1244612280

12447-
"sudo-prompt@npm:^9.0.0":
12448-
version: 9.2.1
12449-
resolution: "sudo-prompt@npm:9.2.1"
12450-
checksum: 50a29eec2f264f2b78d891452a64112d839a30bffbff4ec065dba4af691a35b23cdb8f9107d413e25c1a9f1925644a19994c00602495cab033d53f585fdfd665
12451-
languageName: node
12452-
linkType: hard
12453-
1245412281
"supports-color@npm:^5.3.0":
1245512282
version: 5.5.0
1245612283
resolution: "supports-color@npm:5.5.0"

0 commit comments

Comments
 (0)