1import * as WebBrowser from 'expo-web-browser';
2import React from 'react';
3
4import FunctionDemo, { FunctionDescription } from '../../components/FunctionDemo';
5import Colors from '../../constants/Colors';
6
7const URL = 'https://blog.expo.dev/expo-sdk-44-4c4b8306584a';
8
9const FUNCTIONS_DESCRIPTION: FunctionDescription = {
10  name: 'openBrowserAsync',
11  parameters: [
12    {
13      type: 'constant',
14      name: 'url',
15      value: URL,
16    },
17    {
18      type: 'object',
19      name: 'options',
20      properties: [
21        {
22          name: 'toolbarColor',
23          type: 'enum',
24          values: [
25            {
26              name: 'undefined',
27              value: undefined,
28            },
29            {
30              name: `"${Colors.tintColor}"`,
31              value: Colors.tintColor,
32            },
33          ],
34        },
35        {
36          name: 'secondaryToolbarColor',
37          platforms: ['android'],
38          type: 'enum',
39          values: [
40            {
41              name: 'undefined',
42              value: undefined,
43            },
44            {
45              name: `"${Colors.highlightColor}"`,
46              value: Colors.highlightColor,
47            },
48          ],
49        },
50        {
51          name: 'controlsColor',
52          type: 'enum',
53          values: [
54            {
55              name: 'undefined',
56              value: undefined,
57            },
58            { name: `"${Colors.headerTitle}"`, value: Colors.headerTitle },
59          ],
60        },
61        {
62          type: 'boolean',
63          name: 'showTitle',
64          platforms: ['android'],
65          initial: false,
66        },
67        {
68          type: 'boolean',
69          name: 'showInRecents',
70          platforms: ['android'],
71          initial: false,
72        },
73        {
74          type: 'boolean',
75          name: 'enableBarCollapsing',
76          initial: false,
77        },
78        {
79          type: 'boolean',
80          name: 'readerMode',
81          platforms: ['ios'],
82          initial: false,
83        },
84        {
85          type: 'boolean',
86          name: 'enableDefaultShareMenuItem',
87          platforms: ['android'],
88          initial: false,
89        },
90      ],
91    },
92  ],
93  actions: [
94    { name: 'Open', action: WebBrowser.openBrowserAsync },
95    {
96      name: 'Open and dismiss',
97      action: async (url: string, openOptions: WebBrowser.WebBrowserOpenOptions) => {
98        await WebBrowser.openBrowserAsync(url, openOptions);
99        return WebBrowser.dismissBrowser();
100      },
101    },
102    {
103      name: 'Open twice',
104      action: (url: string, openOptions: WebBrowser.WebBrowserOpenOptions) => {
105        WebBrowser.openBrowserAsync(url, openOptions);
106        return WebBrowser.openBrowserAsync(url, openOptions);
107      },
108    },
109    { name: 'Dismiss (no-op)', action: async () => WebBrowser.dismissBrowser() },
110  ],
111};
112
113export default function OpenBrowserAsyncDemo() {
114  return <FunctionDemo namespace="WebBrowser" {...FUNCTIONS_DESCRIPTION} />;
115}
116