tf-checkout-react-native 1.0.12 → 1.0.15

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.
Files changed (81) hide show
  1. package/README.md +550 -313
  2. package/android/build.gradle +3 -3
  3. package/lib/api/ApiClient.d.ts +13 -21
  4. package/lib/api/ApiClient.js +124 -51
  5. package/lib/api/ApiClient.js.map +1 -1
  6. package/lib/api/types.d.ts +23 -11
  7. package/lib/components/login/Login.d.ts +1 -1
  8. package/lib/components/login/Login.js +22 -10
  9. package/lib/components/login/Login.js.map +1 -1
  10. package/lib/components/login/LoginView.d.ts +1 -1
  11. package/lib/components/login/LoginView.js +16 -13
  12. package/lib/components/login/LoginView.js.map +1 -1
  13. package/lib/components/login/styles.d.ts +2 -1
  14. package/lib/components/login/styles.js +2 -1
  15. package/lib/components/login/styles.js.map +1 -1
  16. package/lib/components/login/types.d.ts +18 -10
  17. package/lib/components/waitingList/WaitingList.d.ts +1 -1
  18. package/lib/components/waitingList/WaitingList.js +20 -3
  19. package/lib/components/waitingList/WaitingList.js.map +1 -1
  20. package/lib/components/waitingList/WaitingListView.js +19 -7
  21. package/lib/components/waitingList/WaitingListView.js.map +1 -1
  22. package/lib/components/waitingList/types.d.ts +10 -0
  23. package/lib/containers/billingInfo/Billing.d.ts +2 -1
  24. package/lib/containers/billingInfo/Billing.js +112 -68
  25. package/lib/containers/billingInfo/Billing.js.map +1 -1
  26. package/lib/containers/billingInfo/types.d.ts +40 -91
  27. package/lib/containers/checkout/Checkout.d.ts +1 -1
  28. package/lib/containers/checkout/Checkout.js +90 -49
  29. package/lib/containers/checkout/Checkout.js.map +1 -1
  30. package/lib/containers/checkout/components/styles.js +1 -1
  31. package/lib/containers/checkout/components/styles.js.map +1 -1
  32. package/lib/containers/checkout/styles.d.ts +2 -0
  33. package/lib/containers/checkout/styles.js +3 -1
  34. package/lib/containers/checkout/styles.js.map +1 -1
  35. package/lib/containers/checkout/types.d.ts +36 -7
  36. package/lib/containers/myOrderDetails/MyOrderDetails.js +21 -3
  37. package/lib/containers/myOrderDetails/MyOrderDetails.js.map +1 -1
  38. package/lib/containers/myOrderDetails/MyOrderDetailsView.js +10 -7
  39. package/lib/containers/myOrderDetails/MyOrderDetailsView.js.map +1 -1
  40. package/lib/containers/myOrderDetails/components/Notification.d.ts +10 -2
  41. package/lib/containers/myOrderDetails/components/Notification.js +5 -7
  42. package/lib/containers/myOrderDetails/components/Notification.js.map +1 -1
  43. package/lib/containers/myOrderDetails/types.d.ts +18 -0
  44. package/lib/containers/myOrders/MyOrders.js +37 -9
  45. package/lib/containers/myOrders/MyOrders.js.map +1 -1
  46. package/lib/containers/myOrders/MyOrdersView.d.ts +1 -1
  47. package/lib/containers/myOrders/MyOrdersView.js +3 -3
  48. package/lib/containers/myOrders/MyOrdersView.js.map +1 -1
  49. package/lib/containers/myOrders/types.d.ts +13 -1
  50. package/lib/containers/purchaseConfirmation/PurchaseConfirmation.d.ts +1 -1
  51. package/lib/containers/purchaseConfirmation/PurchaseConfirmation.js +21 -5
  52. package/lib/containers/purchaseConfirmation/PurchaseConfirmation.js.map +1 -1
  53. package/lib/containers/purchaseConfirmation/PurchaseConfirmationView.d.ts +2 -2
  54. package/lib/containers/purchaseConfirmation/PurchaseConfirmationView.js +4 -3
  55. package/lib/containers/purchaseConfirmation/PurchaseConfirmationView.js.map +1 -1
  56. package/lib/containers/purchaseConfirmation/types.d.ts +12 -1
  57. package/lib/containers/tickets/Tickets.d.ts +1 -1
  58. package/lib/containers/tickets/Tickets.js +37 -9
  59. package/lib/containers/tickets/Tickets.js.map +1 -1
  60. package/lib/containers/tickets/TicketsView.d.ts +1 -1
  61. package/lib/containers/tickets/TicketsView.js +5 -4
  62. package/lib/containers/tickets/TicketsView.js.map +1 -1
  63. package/lib/containers/tickets/components/TicketListItem.js +14 -7
  64. package/lib/containers/tickets/components/TicketListItem.js.map +1 -1
  65. package/lib/containers/tickets/components/types.d.ts +6 -0
  66. package/lib/containers/tickets/types.d.ts +18 -11
  67. package/lib/helpers/LocalStorage.d.ts +1 -1
  68. package/lib/helpers/LocalStorage.js +1 -3
  69. package/lib/helpers/LocalStorage.js.map +1 -1
  70. package/lib/index.d.ts +3 -3
  71. package/lib/res/colors.d.ts +2 -2
  72. package/lib/res/colors.js +2 -18
  73. package/lib/res/colors.js.map +1 -1
  74. package/lib/types/IError.d.ts +5 -0
  75. package/lib/types/IError.js +2 -0
  76. package/lib/types/IError.js.map +1 -0
  77. package/lib/types/ITicket.d.ts +12 -0
  78. package/lib/types/index.d.ts +1 -0
  79. package/lib/types/index.js +1 -0
  80. package/lib/types/index.js.map +1 -1
  81. package/package.json +3 -3
package/README.md CHANGED
@@ -6,53 +6,58 @@ React Native library for Ticket Fairy checkout.
6
6
 
7
7
  Configure [ReactNative environment](https://reactnative.dev/docs/environment-setup) for desired platforms (iOS, Android or both).
8
8
 
9
- ## Android
9
+ ### React Native
10
+
11
+ - Suggested ReactNative version `0.66.3`
12
+ - Suggested Flipper version `0.66`
13
+ - React version `0.17.1`
14
+
15
+ ### Android
10
16
 
11
17
  - Android 5.0 (API level 21) and above
12
- - Minimum Gradle plugin version `4.2.2`
13
- - Minimum Gradle version `6.7.1`
14
- - Compile Sdk Version and Target Sdk Version `31`
15
- - Build Tools Version `30.0.3`
18
+ - Gradle plugin version `4.2.2`
19
+ - Gradle version `6.7.1`
20
+ - Compile Sdk Version and Target Sdk Version `30`
21
+ - Build Tools Version `30.0.2`
22
+ - Java version `1.8`
23
+ - Kotlin version `1.5.31`
16
24
 
17
25
  Add the following to your Android Manifest as activity property.
18
26
 
19
- ```
20
- android:exported="true"
21
- ```
22
-
23
27
  To download the PDFs, add the `WRITE_EXTERNAL_STORAGE` permission to the Android's Manifest file.
24
28
 
25
29
  ```xml
26
30
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
27
31
  ```
28
32
 
29
- ## iOS
33
+ ### iOS
30
34
 
31
35
  - Compatible with apps targeting iOS 11 or above.
32
-
33
- - Pods version `1.11.2`
36
+ - Pods version `1.10.1`
34
37
  - Command Line Tools version `13.0`
35
38
 
36
39
  To download the PDFs, add the following flags to `Info.plist` file:
37
40
 
41
+ ```
38
42
  - UIFileSharingEnabled: Application supports iTunes file sharing
39
43
  - LSSupportsOpeningDocumentsInPlace: Supports opening documents in place
44
+ ```
40
45
 
41
46
  # Installation
42
47
 
43
- ```node
48
+ ```sh
44
49
  yarn add tf-checkout-react-native
45
50
  ```
46
51
 
47
52
  or
48
53
 
49
- ```node
54
+ ```sh
50
55
  npm install tf-checkout-react-native
51
56
  ```
52
57
 
53
58
  Make sure to install all the required dependencies in your project.
54
59
 
55
- # Required for Android
60
+ ### Required for Android
56
61
 
57
62
  Add below dependency to your `app/build.gradle` file with specified version (in our example we are using `1.4.0`).
58
63
 
@@ -64,7 +69,7 @@ Set appropriate style in your styles.xml file.
64
69
 
65
70
  ```xml
66
71
  <style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.NoActionBar">
67
- <!-- ... -->
72
+ <!-- ... -->
68
73
  </style>
69
74
  ```
70
75
 
@@ -82,7 +87,6 @@ Use it in your initial useEffect function:
82
87
  useEffect(() => {
83
88
  setConfig({
84
89
  DOMAIN: 'https://yourdomain.mx',
85
- IS_BILLING_STREET_NAME_REQUIRED: false,
86
90
  })
87
91
  }, [])
88
92
  ```
@@ -100,27 +104,23 @@ useEffect(() => {
100
104
  ARE_SUB_BRANDS_INCLUDED?: boolean
101
105
  }
102
106
  ```
103
-
104
- `DOMAIN` Specify your domains name example: `https://google.com` this is important to maintain cart session active and prevent it from expiring when user login in the BillingInfo component.
105
-
106
- `BASE_URL` If our dev team gives you a custom BASE_URL.
107
-
108
- `CLIENT_ID` Set your CLIENT_ID.
109
-
110
- `CLIENT_SECRET` Set your CLIENT_SECRET.
111
-
112
- `BRAND`: Set your BRAND so users can only see this brand in their orders.
113
-
114
- `TIMEOUT` Set custom timeout for the APIs requests.
115
-
116
- `ARE_SUB_BRANDS_INCLUDED` If true will include orders from the `BRAND` sub-brands.
107
+ ### Props
108
+ | Property | Description |
109
+ | -------- | ----------- |
110
+ | DOMAIN | Specify your domains name example: `https://google.com` this is important to maintain cart session active and prevent it from expiring when user login in the BillingInfo component. |
111
+ | BASE_URL | If our dev team gives you a custom BASE_URL.|
112
+ | CLIENT_ID | Set your CLIENT_ID. |
113
+ | CLIENT_SECRET | Set your CLIENT_SECRET. |
114
+ | BRAND | Set your BRAND so users can only see this brand in their orders. |
115
+ | TIMEOUT | Set custom timeout for the APIs requests. |
116
+ | ARE_SUB_BRANDS_INCLUDED | If true will include orders from the `BRAND` sub-brands. Default `false`. |
117
117
 
118
118
  # Run the example app
119
119
 
120
120
  1. Clone this repo.
121
121
  2. In the App.tsx file, update the `EVENT_ID` const with the assigned ID to be able to retrieve data from the server.
122
- 3. cd into the project folder and `yarn` or `npm install`.
123
- 4. cd into the example folder and `yarn` or `npm install`.
122
+ 3. cd into the _root project_ folder and `yarn` or `npm install`.
123
+ 4. cd into the _example_ folder and `yarn` or `npm install`.
124
124
  - If running on iOS, cd into ios folder and `pod install && cd ..`.
125
125
  5. Run `yarn ios` or `npm run ios` to initialize and run in the iPhone simulator.
126
126
  6. If running on Android, run `yarn android` or `npm run android` to run it in the Android emulator or connected physical device.
@@ -129,41 +129,61 @@ useEffect(() => {
129
129
 
130
130
  This library exports the following components:
131
131
 
132
- ## Login
132
+ ### Login
133
133
 
134
134
  Used to authenticate the user.
135
135
 
136
- ## Tickets
136
+ ### Tickets
137
137
 
138
138
  Will retrieve and show a list of tickets corresponding to `eventId`. It also includes a PromoCode component that validates it and updates the tickets list.
139
139
 
140
140
  User can select what ticket type wants to buy and the quantity of tickets.
141
141
 
142
- ## Billing information
142
+ ### Billing information
143
143
 
144
144
  User will need to enter its data into a form to create a Ticket Fairy account. Also, depending on the number of tickets selected, will need to fill the information of each one of them.
145
145
 
146
- ## Checkout
146
+ ### Checkout
147
147
 
148
148
  Will show the order details and a card form that the user will need to fill with its card details.
149
149
 
150
150
  TicketFairy doesn't store any card related data, we use [Stripe](https://stripe.com/) as payments solution.
151
151
 
152
- ## Purchase confirmation
152
+ ### Purchase confirmation
153
153
 
154
154
  This is shown once the payment is successfully completed, could show components to share the purchase in social media or refer it with friends to get discounts on the purchase.
155
155
 
156
- ## My Orders
156
+ ### My Orders
157
157
 
158
158
  Will show the purchased orders for the logged user.
159
159
 
160
- ## My Order details
160
+ ### My Order details
161
161
 
162
162
  Will show the details for the selected Order, it also allows the user to download the Ticket PDF.
163
163
 
164
- # Usage [🚧 WIP 🚧]
165
-
166
- # Login
164
+ # Component styling
165
+ ### Button
166
+ ```js
167
+ interface IButtonStyles {
168
+ container?: StyleProp<ViewStyle>
169
+ button?: StyleProp<ViewStyle>
170
+ text?: StyleProp<TextStyle>
171
+ }
172
+ ```
173
+ ### Input
174
+ ```js
175
+ interface IInputStyles {
176
+ color?: ColorValue
177
+ container?: StyleProp<ViewStyle>
178
+ input?: StyleProp<TextStyle>
179
+ lineWidth?: number
180
+ activeLineWidth?: number
181
+ baseColor?: ColorValue
182
+ errorColor?: ColorValue
183
+ }
184
+ ```
185
+ # Exported components
186
+ ## Login
167
187
 
168
188
  Import the component from the library
169
189
 
@@ -175,10 +195,23 @@ Then add it to the render function.
175
195
 
176
196
  ```js
177
197
  <Login
178
- onLoginSuccessful={handleOnLoginDialogSuccess}
179
- isLoginDialogVisible={isLoginDialogVisible}
180
- showLoginDialog={() => setIsLoginDialogVisible(true)}
181
- hideLoginDialog={() => setIsLoginDialogVisible(false)}
198
+ onLoginSuccessful: (userProfile: IUserProfile, accessToken: string) => void
199
+ onLoginError?: (error: IError) => void
200
+
201
+ onFetchUserProfileError?: (error: IError) => void
202
+ onFetchUserProfileSuccess?: (data: any) => void
203
+
204
+ onFetchAccessTokenError?: (error: IError) => void
205
+ onFetchAccessTokenSuccess?: () => void
206
+
207
+ isLoginDialogVisible: boolean
208
+ showLoginDialog: () => void
209
+ hideLoginDialog: () => void
210
+
211
+ //Logout
212
+ onLogoutSuccess?: () => void
213
+ onLogoutError?: () => void
214
+
182
215
  userFirstName={loggedUserName}
183
216
  refs={{
184
217
  inputs?: {
@@ -192,48 +225,36 @@ Then add it to the render function.
192
225
  activityIndicator?: any
193
226
  loadingText?: any
194
227
  }}
228
+ brandImages={
229
+ containerStyle?: StyleProp<ViewStyle>
230
+ image1?: ImageSourcePropType
231
+ image1Style?: StyleProp<ImageStyle>
232
+ image2?: ImageSourcePropType
233
+ image2Style?: StyleProp<ImageStyle>
234
+ }
235
+ styles?: ILoginViewStyles
236
+ texts?: ILoginViewTexts
195
237
  />
196
238
  ```
197
239
 
198
- ## Props
199
-
200
- `onLoginSuccessful: (userProfile: IUserProfile, accessToken: string)`
201
- When login was successful, return userProfile data and the access token to use if for future API requests.
202
-
203
- `onLoginFailure?: (error: string)`
204
- When login fails will return the error received.
205
-
206
- `onFetchUserProfileFailure?: (error: string)`
207
- This is used if the authentication worked but the fetch of the userProfile failed.
208
-
209
- `onFetchAccessTokenFailure?: (error: string)`
210
- When the fetch of the access token failed.
211
-
212
- `isLoginDialogVisible: boolean`
213
- Flag to show or hide the login dialog.
214
-
215
- `showLoginDialog: () => void`
216
- Callback to show the Login dialog.
217
-
218
- `hideLoginDialog: () => void`
219
- Callback to hide the login dialog.
220
-
221
- `onLogoutSuccess?: () => void`
222
- Use it to logout the authenticated user. It will delete all the stored data, including access token. Please make sure to update the `userFirstName` prop so the component will show the logged out view.
223
-
224
- `onLogoutFail?: () => void`
225
- Will be called if something went wrong while deleting the local data.
226
-
227
- `styles?: ILoginViewStyles`
228
- Use this to style your components.
229
-
230
- `texts?: ILoginViewTexts`
231
- Use this to change some texts that appear in this component.
232
-
233
- `userFirstName?: string`
234
- Once authenticated send the received firstName data to this prop, so the component can render the Logged in view.
240
+ ### Props
241
+ | Property | Description |
242
+ |----------|-------------|
243
+ | onLoginSuccessful: (userProfile: IUserProfile, accessToken: string)` |When login was successful, return userProfile data and the access token to use if for future API requests.
244
+ | onLoginFailure?: (error: string) | When login fails will return the error received. |
245
+ | onFetchUserProfileFailure?: (error: string) | This is used if the authentication worked but the fetch of the userProfile failed. |
246
+ | onFetchAccessTokenFailure?: (error: string) | When the fetch of the access token failed. |
247
+ | isLoginDialogVisible: boolean | Flag to show or hide the login dialog. |
248
+ | showLoginDialog: () => void | Callback to show the Login dialog. |
249
+ | hideLoginDialog: () => void | Callback to hide the Login dialog. |
250
+ | onLogoutSuccess?: () => void | Use it to logout the authenticated user. It will delete all the stored data, including access token. Please make sure to update the `userFirstName` prop so the component will show the logged out view. |
251
+ |onLogoutFail?: () => void | Will be called if something went wrong while deleting the local data. |
252
+ |styles?: ILoginViewStyles | Use this to style your components. |
253
+ |texts?: ILoginViewTexts | Use this to change some texts that appear in this component. |
254
+ |userFirstName?: string | Once authenticated send the received firstName data to this prop, so the component can render the Logged in view. |
255
+ |brandImages?: ILoginBrandImages | Receives up to 2 images with their styles and the container style for the images. |
235
256
 
236
- ## styles
257
+ ### styles
237
258
 
238
259
  ```js
239
260
  interface ILoginViewStyles {
@@ -251,7 +272,6 @@ interface ILoginViewStyles {
251
272
  input?: IInputStyles
252
273
  title?: StyleProp<TextStyle>
253
274
  message?: StyleProp<TextStyle>
254
- logo?: StyleProp<ImageStyle>
255
275
  }
256
276
  loggedIn?: {
257
277
  container?: StyleProp<ViewStyle>
@@ -261,16 +281,32 @@ interface ILoginViewStyles {
261
281
  message?: StyleProp<TextStyle>
262
282
  }
263
283
  }
264
-
265
284
  ```
266
285
 
267
- <img width="899" alt="image" src="https://user-images.githubusercontent.com/66479719/154158723-864cdabd-2a0b-4a84-95ad-3176c67f7e8b.png">
286
+ \*Note: Logos images styles are passed from the `brandImages` prop.
268
287
 
288
+ ### texts
289
+ ```js
290
+ {
291
+ loginButton?: string
292
+ logoutButton?: string
293
+ line1?: string
294
+ line2?: string
295
+ message?: string
296
+ dialog?: {
297
+ loginButton?: string
298
+ message?: string
299
+ }
300
+ logoutDialog?: {
301
+ title?: string
302
+ message?: string
303
+ confirm?: string
304
+ cancel?: string
305
+ }
306
+ ```
269
307
  ---
270
308
 
271
- # Tickets
272
-
273
- ![image](https://user-images.githubusercontent.com/66479719/151049068-450a52d9-dfc8-40bf-b12a-f2555a832c8d.png)
309
+ ## Tickets
274
310
 
275
311
  Import the component from the library
276
312
 
@@ -284,14 +320,34 @@ Then add it to the render function.
284
320
  <Tickets eventId={EVENT_ID} onAddToCartSuccess={handleOnAddToCartSuccess} />
285
321
  ```
286
322
 
287
- ## Props
323
+ ### Props
324
+
288
325
  ```js
289
326
  {
290
327
  eventId: number
291
328
 
292
- onAddToCartSuccess: (data: IAddToCartSuccess) => void
293
- onAddToCartError?: (error: any) => void
294
- onFetchTicketsError?: (error: any) => void
329
+ // Callbacks for when user taps on GET Tickets button
330
+ onAddToCartSuccess: (data: {
331
+ isBillingRequired: boolean
332
+ isPhoneRequired?: boolean
333
+ isAgeRequired?: boolean
334
+ minimumAge?: number
335
+ isNameRequired?: boolean
336
+ }) => void
337
+ onAddToCartError?: (error: {
338
+ code: number
339
+ message: string
340
+ extraData?: any
341
+ }) => void
342
+
343
+ // Callbacks for fetching the tickets
344
+ onFetchTicketsError?: (error: {
345
+ code: number
346
+ message: string
347
+ extraData?: any
348
+ }) => void
349
+
350
+ // Callbacks for fetching the Event base on the eventId prop
295
351
  onFetchTicketsSuccess?: (data: {
296
352
  tickets: ITicket[]
297
353
  promoCodeResponse: {
@@ -301,7 +357,19 @@ Then add it to the render function.
301
357
  isInWaitingList: boolean
302
358
  isAccessCodeRequired: boolean
303
359
  }) => void
304
- onFetchEventError?: (error: string) => void
360
+ onFetchEventError?: (error: {
361
+ code: number
362
+ message: string
363
+ extraData?: any
364
+ }) => void
365
+
366
+ // Callbacks for Waiting list
367
+ onAddToWaitingListSuccess?: (data: any) => void
368
+ onAddToWaitingListError?: (error: {
369
+ code: number
370
+ message: string
371
+ extraData?: any
372
+ }) => void
305
373
 
306
374
  styles?: ITicketsViewStyles
307
375
  texts?: ITicketsViewTexts
@@ -311,6 +379,11 @@ Then add it to the render function.
311
379
 
312
380
  onPressMyOrders: () => void
313
381
  onPressLogout?: () => void
382
+
383
+ // With the following 3 props you can control the visibility of the stock loading indicators and alerts, so you can use your own.
384
+ onLoadingChange?: (isLoading: boolean) => void
385
+ areAlertsEnabled?: boolean
386
+ areLoadingIndicatorsEnabled?: boolean
314
387
  }
315
388
  ```
316
389
 
@@ -320,8 +393,10 @@ Then add it to the render function.
320
393
  ```js
321
394
  {
322
395
  isBillingRequired: boolean
323
- isNameRequired: boolean
324
- isAgeRequired: boolean
396
+ isPhoneRequired?: boolean
397
+ isAgeRequired?: boolean
398
+ minimumAge?: number
399
+ isNameRequired?: boolean
325
400
  }
326
401
  ```
327
402
 
@@ -329,11 +404,7 @@ You can then call the `BillingInfo` component and pass them as props in the `car
329
404
 
330
405
  `onFetchTicketsSuccess` When tickets fetching was successful, will return fetched data, including `promoCodeResponse`.
331
406
 
332
-
333
- ## styles
334
-
335
- Receives several props to style its sub-components.
336
-
407
+ ### styles
337
408
  ```js
338
409
  {
339
410
  rootContainer?: ViewStyle
@@ -341,23 +412,109 @@ Receives several props to style its sub-components.
341
412
  title?: TextStyle
342
413
  getTicketsButtonDisabled?: IButtonStyles
343
414
  getTicketsButtonActive?: IButtonStyles
344
- promoCode?: IPromoCodeStyles
345
- ticketList?: ITicketListStyles
346
- loading?: ILoadingStyles
347
- waitingList?: IWaitingListStyles
348
- loggedIn?: ILoggedInStyles
349
- }
350
- ```
351
-
352
- <img width="790" alt="props" src="https://user-images.githubusercontent.com/66479719/153976200-4bd6b254-6e80-49d6-bacc-076c59873434.png">
415
+ promoCode?: {
416
+ rootContainer?: StyleProp<ViewStyle>
417
+ contentWrapper?: StyleProp<ViewStyle>
418
+ content?: StyleProp<ViewStyle>
419
+ input?: TextInputProps['style']
420
+ inputPlaceholderColor?: string
421
+ title?: StyleProp<TextStyle>
353
422
 
354
- <img width="675" alt="Screen Shot 2022-02-14 at 19 37 40" src="https://user-images.githubusercontent.com/66479719/153976314-9b4431bd-ea2f-49db-87ab-fb7d68b02a0c.png">
423
+ mainButton?: IButtonStyles
424
+ cancelButton?: IButtonStyles
425
+ applyButton?: IButtonStyles
426
+ applyDisabledButton?: IButtonStyles
355
427
 
356
- <img width="682" alt="image" src="https://user-images.githubusercontent.com/66479719/154126406-101af4ca-7586-4686-9a93-88ef0375968e.png">
428
+ messageContainer?: StyleProp<ViewStyle>
429
+ message?: StyleProp<TextStyle>
430
+ }
431
+ ticketList?: {
432
+ listContainer?: ViewStyle
433
+ item?: {
434
+ container?: ViewStyle
435
+ ticketName?: TextStyle
436
+ price?: TextStyle
437
+ oldPrice?: TextStyle
438
+ fees?: TextStyle
439
+ soldOutText?: TextStyle
440
+ soldOutContainer?: ViewStyle
441
+ dropdown?: IDropdownStyles
442
+ pricesContainer?: StyleProp<ViewStyle>
443
+ }
444
+ }
445
+ loading?: {
446
+ animation?: {
447
+ color?: ActivityIndicatorProps['color']
448
+ size?: ActivityIndicatorProps['size']
449
+ }
450
+ content?: ViewStyle
451
+ text?: TextStyle
452
+ }
453
+ waitingList?: {
454
+ rootContainer?: StyleProp<ViewStyle>
455
+ title?: StyleProp<TextStyle>
456
+ button?: IButtonStyles
457
+ input?: IInputStyles
458
+ buttonDisabled?: IButtonStyles
459
+ success?: {
460
+ container?: StyleProp<ViewStyle>
461
+ title?: StyleProp<ViewStyle>
462
+ message?: StyleProp<ViewStyle>
463
+ }
464
+ }
465
+ loggedIn?: {
466
+ rootContainer?: StyleProp<ViewStyle>
467
+ myOrdersButton?: IButtonStyles
468
+ logOutButton?: IButtonStyles
469
+ }
470
+ }
471
+ ```
357
472
 
473
+ ### texts
474
+ ```js
475
+ {
476
+ promoCode?: {
477
+ promoCodeButton?: string
478
+ inputPlaceHolder?: string
479
+ apply?: string
480
+ cancel?: string
481
+ mainButton?: string
482
+ title?: string
483
+ }
484
+ getTicketsButton?: string
485
+ title?: string
486
+ waitingList?: {
487
+ title?: string
488
+ firstName?: string
489
+ lastName?: string
490
+ email?: string
491
+ button?: string
492
+ successTitle?: string
493
+ successMessage?: string
494
+ }
495
+ loggedInTexts?: {
496
+ logoutDialog?: {
497
+ title?: string
498
+ message?: string
499
+ confirmButton?: string
500
+ cancelButton?: string
501
+ }
502
+ myOrderButtonText?: string
503
+ logOutButtonText?: string
504
+ }
505
+ listItem?: {
506
+ soldOut?: string
507
+ salesNotStarted?: string
508
+ salesEnded?: string
509
+ inclFees?: string
510
+ exclFees?: string
511
+ free?: string
512
+ ticket?: string
513
+ }
514
+ }
515
+ ```
358
516
  ---
359
-
360
- # BillingInfo
517
+ ## BillingInfo
361
518
 
362
519
  Import the component from the library
363
520
 
@@ -369,75 +526,89 @@ Add it to the render function.
369
526
 
370
527
  ```js
371
528
  <BillingInfo
372
- cartProps: IAddToCartSuccess
529
+ cartProps: {
530
+ isBillingRequired: boolean
531
+ isNameRequired: boolean
532
+ isAgeRequired: boolean
533
+ isPhoneRequired: boolean
534
+ minimumAge: number
535
+ }
536
+ // registerNewUser
373
537
  onRegisterSuccess?: (tokens: ITokens) => void
374
- onRegisterFail?: (error: string) => void
538
+ onRegisterError?: (error: string) => void
375
539
 
376
- onCheckoutSuccess: (data: IOnCheckoutSuccess) => void
377
- onCheckoutFail?: (error: string) => void
540
+ onCheckoutSuccess: (data: {
541
+ id: string
542
+ hash: string
543
+ total: string
544
+ status: string
545
+ }) => void
546
+ onCheckoutError?: (error: IError) => void
378
547
 
379
548
  onLoginSuccess: (data: any) => void
380
- onLoginFail?: (error: string) => void
549
+ onLoginError?: (error: IError) => void
550
+
381
551
 
382
552
  onFetchUserProfileSuccess?: (data: any) => void
383
- onFetchUserProfileFail?: (error: any) => void
553
+ onFetchUserProfileError?: (error: IError) => void
384
554
 
385
- onFetchCartError?: (error: string) => void
555
+ //fetchCart
556
+ onFetchCartError?: (error: IError) => void
557
+ onFetchCartSuccess?: () => void
386
558
 
387
- styles?: IBillingInfoViewStyles
388
- texts?: IBillingInfoViewTexts
559
+ // fetchCountries
560
+ onFetchCountriesError?: (error: IError) => void
561
+ onFetchCountriesSuccess?: () => void
389
562
 
390
- privacyPolicyLinkStyle?: StyleProp<TextStyle>
563
+ // fetchState
564
+ onFetchStatesError?: (error: IError) => void
565
+ onFetchStatesSuccess?: () => void
391
566
 
392
- onFetchUserProfileFailure?: (error: string) => void
393
- onFetchAccessTokenFailure?: (error: string) => void
567
+ // fetch Token
568
+ onFetchAccessTokenError?: (error: IError) => void
569
+ onFetchAccessTokenSuccess?: () => void
394
570
 
395
571
  styles?: IBillingInfoViewStyles
396
572
  texts?: IBillingInfoViewTexts
397
573
 
398
- logoImage?: ImageSourcePropType
399
- />
400
- ```
401
-
402
- ## Props
403
-
404
- ### cartProps
405
-
406
- will receive
407
-
408
- ```js
409
- {
410
- isBillingRequired: boolean
411
- isNameRequired: boolean
412
- isAgeRequired: boolean
413
- }
414
- ```
415
-
416
- ### onCheckoutSuccess
574
+ styles?: IBillingInfoViewStyles
575
+ texts?: IBillingInfoViewTexts
417
576
 
418
- Will be called when the user completes all the data required in the form and taps on the button. Will return the following data:
577
+ // Configure the skipping component visible, when isBillingRequired is false
578
+ skipBillingConfig?: {
579
+ styles?: {
580
+ rootContainer?: StyleProp<ViewStyle>
581
+ dialogContainer?: StyleProp<ViewStyle>
582
+ brandImage?: StyleProp<ImageStyle>
583
+ text?: StyleProp<TextStyle>
584
+ activityIndicator?: {
585
+ color?: ColorValue
586
+ size?: 'large' | 'small'
587
+ }
588
+ }
589
+ brandImage?: ImageSourcePropType
590
+ isActivityIndicatorVisible?: boolean
591
+ }
419
592
 
420
- ```js
421
- {
422
- id: string
423
- hash: string
424
- total: string
425
- status: string
426
- }
593
+ loginBrandImages?: {
594
+ containerStyle?: StyleProp<ViewStyle>
595
+ image1?: ImageSourcePropType
596
+ image1Style?: StyleProp<ImageStyle>
597
+ image2?: ImageSourcePropType
598
+ image2Style?: StyleProp<ImageStyle>
599
+ }
600
+ />
427
601
  ```
428
602
 
429
- `hash` and `total` will be used in the `Checkout` component.
430
-
431
- ### skipBilling
432
-
433
- Will auto-populate the checkout form with the logged user data, perform the order `Checkout` and call the callback `onCheckoutSuccess` so you can call the next component.
434
-
435
- ### canSkipHolderNames
436
-
437
- Will skip the need of holder names information and will be automatically filled with the logged user data.
603
+ ### Props
604
+ | Property | Description |
605
+ |----------|-------------|
606
+ | cartProps | Received from the Tickets component |
607
+ | onCheckoutSuccess | Will return Order data from the Checkout action |
608
+ | loginBrandImages | Receives styles and images sources to show in the `Login` component |
609
+ | skipBillingConfig | Configure the skipping component, visible when `isBillingRequired` is set to false |
438
610
 
439
611
  ### texts
440
-
441
612
  ```js
442
613
  interface IBillingInfoViewTexts {
443
614
  loginTexts?: ILoginViewTexts
@@ -495,22 +666,14 @@ interface IBillingInfoViewStyles {
495
666
  customCheckbox?: ICheckboxStyles
496
667
 
497
668
  datePicker?: IDatePickerStyles
498
- skippingDialog?: {
499
- rootContainer?: StyleProp<ViewStyle>
500
- dialogContainer?: StyleProp<ViewStyle>
501
- brandImage?: StyleProp<ImageStyle>
502
- message?: StyleProp<TextStyle>
503
- spinner?: {
504
- color: ColorValue
505
- size: 'large' | 'small'
506
- }
507
- }
669
+
670
+ privacyPolicyLinkStyle?: StyleProp<TextStyle>
508
671
  }
509
672
  ```
510
673
 
511
674
  ---
512
675
 
513
- # Checkout
676
+ ## Checkout
514
677
 
515
678
  Import the component from the library
516
679
 
@@ -520,24 +683,38 @@ import { Checkout } from 'tf-checkout-react-native'
520
683
 
521
684
  Add it to the render function.
522
685
 
523
- ## Props
686
+ ```js
687
+ <Checkout
688
+ eventId={EVENT_ID}
689
+ hash={hash}
690
+ total={total}
691
+ onPaymentSuccess={handleOnPaymentSuccess}
692
+ onPressExit={handleStripeError}
693
+ areLoadingIndicatorsEnabled={false}
694
+ styles={styles}
695
+ {...props}
696
+ />
697
+ ```
698
+
699
+ ### Props
700
+
524
701
  ```js
525
702
  {
526
703
  eventId: number
527
704
  hash: string
528
705
  total: string
529
706
 
530
- onFetchOrderReviewFail?: (error: string) => void
707
+ onFetchOrderReviewError?: (error: IError) => void
531
708
  onFetchOrderReviewSuccess?: (data: any) => void
532
709
 
533
- onFetchEventConditionsFail?: (error: string) => void
710
+ onFetchEventConditionsError?: (error: IError) => void
534
711
  onFetchEventConditionsSuccess?: (data: any) => void
535
712
 
536
713
  onCheckoutCompletedSuccess?: (data: any) => void
537
- onCheckoutCompletedFail?: (error: string) => void
714
+ onCheckoutCompletedError?: (error: IError) => void
538
715
 
539
716
  onPaymentSuccess: (data: any) => void
540
- onPaymentError?: (error: string) => void
717
+ onPaymentError?: (error: IError) => void
541
718
 
542
719
  onStripeInitializeError?: (error: string) => void
543
720
 
@@ -550,6 +727,14 @@ Add it to the render function.
550
727
  exitButton?: string
551
728
  payButton?: string
552
729
  freeRegistrationButton?: string
730
+ providePaymentInfo?: string
731
+ orderReviewItems?: {
732
+ event?: string
733
+ ticketType?: string
734
+ numberOfTickets?: string
735
+ price?: string
736
+ total?: string
737
+ }
553
738
  }
554
739
 
555
740
  styles?: ICheckoutStyles
@@ -559,22 +744,18 @@ Add it to the render function.
559
744
  areLoadingIndicatorsEnabled?: boolean
560
745
  }
561
746
  ```
747
+ | Property | Description |
748
+ |----------|-------------|
749
+ | eventId | Same as used in the `Tickets` component. |
750
+ | hash | retrieved from the `onCheckoutSuccess` callback in the `BillingInfo`component. |
751
+ | total | retrieved from the `onCheckoutSuccess` callback in the `BillingInfo` component. |
752
+ | onPaymentSuccess | will handle the success in the payment process. Will return the `hash`. |
753
+ | areLoadingIndicatorsEnabled | whether or not show the Loading Indicator, `default: true`. |
754
+ | areAlertsEnabled | whether or not show the Error Alerts, `default: true`. |
562
755
 
563
- `eventId` Same as used in the `Tickets` component.
564
-
565
- `hash` retrieved from the `onCheckoutSuccess` callback in the `BillingInfo`component.
566
-
567
- `total` retrieved from the `onCheckoutSuccess` callback in the `BillingInfo` component.
756
+ *Note: If the you need to modify the card container, use the `styles.payment.cardContainer` prop. Useful if the card is to short and the zip code is not visible.*
568
757
 
569
- `onPaymentSuccess` will handle the success in the payment process. Will return the `hash`.
570
-
571
- `areLoadingIndicatorsEnabled` whether or not show the Loading Indicator, `default: true`.
572
-
573
- `areAlertsEnabled` whether or not show the Error Alerts, `default: true`.
574
-
575
- If the you need to modify the card container, use the `styles.payment.cardContainer` prop. Useful if the card is to short and the zip code is not visible.
576
-
577
- `styles`
758
+ ### styles
578
759
 
579
760
  ```js
580
761
  {
@@ -591,22 +772,25 @@ If the you need to modify the card container, use the `styles.payment.cardContai
591
772
  payment?: {
592
773
  container?: StyleProp<ViewStyle>
593
774
  title?: StyleProp<TextStyle>
775
+ cardBackgroundColor?: string
594
776
  cardContainer?: StyleProp<ViewStyle>
595
777
  button?: IButtonStyles
596
778
  buttonDisabled?: IButtonStyles
597
779
  }
598
780
  }
599
781
  ```
782
+
600
783
  ### Stripe
784
+
601
785
  Currently, Stripe card is not customizable. Please see the open issues in their Github.
602
786
 
603
787
  - [563](https://github.com/stripe/stripe-react-native/issues/563)
604
788
  - [285](https://github.com/stripe/stripe-react-native/issues/285)
605
789
 
790
+ Additionally, if you are encountering problems with building your project, please take a look at the [Stripe troubleshooting](https://github.com/stripe/stripe-react-native#troubleshooting).
606
791
 
607
792
  ---
608
-
609
- # PurchaseConfirmation
793
+ ## Purchase Confirmation
610
794
 
611
795
  Import the component from the library
612
796
 
@@ -620,19 +804,44 @@ Add it to the render function.
620
804
  <PurchaseConfirmation
621
805
  orderHash={checkoutProps!.hash}
622
806
  onComplete={handleOnComplete}
623
- />
624
- ```
625
807
 
626
- `orderHash` the `hash` returned in the `BillingInfo` component.
627
-
628
- `onComplete` to handle the completion of the flow. Here you can handle the unmount of the component or navigate to another screen.
808
+ styles?: {
809
+ rootContainer?: StyleProp<ViewStyle>
810
+ title?: StyleProp<TextStyle>
629
811
 
630
- ---
812
+ message?: {
813
+ container?: StyleProp<ViewStyle>
814
+ line1?: StyleProp<TextStyle>
815
+ line2?: StyleProp<TextStyle>
816
+ }
817
+ exitButton?: {
818
+ container?: StyleProp<ViewStyle>
819
+ button?: StyleProp<ViewStyle>
820
+ text?: StyleProp<TextStyle>
821
+ }
822
+ }
631
823
 
632
- ## MyOrders
824
+ texts?: {
825
+ title?: string
826
+ message?: {
827
+ line1?: string
828
+ line2?: string
829
+ }
830
+ exitButton?: string
831
+ }
832
+ />
833
+ ```
834
+ ### Props
835
+ | Property | Description |
836
+ |----------|-------------|
837
+ | orderHash | The `hash` returned in the `BillingInfo` component |
838
+ | onComplete | To handle the completion of the flow. Here you can handle the unmount of the component or navigate to another screen |
839
+ | styles | Styles for the component |
840
+ | texts | Texts for the component |
633
841
 
634
- ![image](https://user-images.githubusercontent.com/66479719/151049211-5faebe6b-df3b-4785-ac0d-3adb7a3d6699.png)
635
842
 
843
+ ---
844
+ ## My Orders
636
845
  If there is a valid session, there will appear a button to access `MyOrders` in the `Tickets` component.
637
846
 
638
847
  Import the component from the library.
@@ -641,80 +850,122 @@ Import the component from the library.
641
850
  import { MyOrders } from 'tf-checkout-react-native'
642
851
  ```
643
852
 
644
- There is no need to pass any data prop to it.
645
853
 
646
854
  ### Props
647
855
 
648
- `config` has properties to hide components.
856
+ ```js
857
+ {
858
+ onSelectOrder: (order: {
859
+ order: {
860
+ header: {
861
+ isReferralDisabled: boolean
862
+ shareLink: string
863
+ total: string
864
+ salesReferred: string
865
+ },
866
+ items: [
867
+ {
868
+ name: string
869
+ currency: string
870
+ price: string
871
+ discount: string
872
+ quantity: string
873
+ total: string
874
+ },
875
+ {...}
876
+ ],
877
+ tickets: [
878
+ {
879
+ hash: string
880
+ ticketType: string
881
+ holderName?: string
882
+ holderEmail?: string
883
+ holderPhone?: string
884
+ status: string
885
+ pdfLink?: string
886
+ qrData?: string
887
+ isSellable?: boolean
888
+ description?: string
889
+ descriptionPlain?: string
890
+ },
891
+ {...}
892
+ ]
893
+ }
894
+ }) => void
649
895
 
650
- `isEventsDropdownHidden` if the Events dropdown should be hidden.
896
+ onFetchMyOrdersSuccess?: () => void
897
+ onFetchMyOrdersError?: (error: IError) => void
651
898
 
652
- ```js
653
- config={{
654
- isEventsDropdownHidden: true,
655
- }}
656
- ```
899
+ onFetchOrderDetailsSuccess?: () => void
900
+ onFetchOrderDetailsError?: (error: IError) => void
657
901
 
658
- `onSelectOrder` handler to know which order the user has selected. Will return an object with following structure:
902
+ onLoadingChange?: (isLoading: boolean) => void
659
903
 
660
- ```js
661
- order: {
662
- header: {
663
- isReferralDisabled: boolean
664
- shareLink: string
665
- total: string
666
- salesReferred: string
667
- },
668
- items: [
669
- {
670
- name: string
671
- currency: string
672
- price: string
673
- discount: string
674
- quantity: string
675
- total: string
676
- },
677
- {...}
678
- ],
679
- tickets: [
680
- {
681
- hash: string
682
- ticketType: string
683
- holderName: string
684
- status: string
685
- pdfLink: string
686
- },
687
- {...}
688
- ]
904
+ styles?: IMyOrdersStyles
905
+ config?: {
906
+ isEventsDropdownHidden?: boolean
907
+ areActivityIndicatorsEnabled?: boolean
908
+ areAlertsEnabled?: boolean
909
+ }
910
+ texts?: {
911
+ selectEventPlaceholder?: string
912
+ }
689
913
  }
690
914
  ```
691
915
 
692
- `styles` to customize the component look & feel.
693
-
916
+ ### styles
694
917
  ```js
695
- export interface IMyOrdersStyles {
696
- orderListItem?: IOrderListItemStyles
918
+ {
919
+ orderListItem?: {
920
+ rootContainer?: StyleProp<ViewStyle>
921
+ contentContainer?: StyleProp<ViewStyle>
922
+ infoContainer?: StyleProp<ViewStyle>
923
+ infoTopContainer?: StyleProp<ViewStyle>
924
+ infoBottomContainer?: StyleProp<ViewStyle>
925
+ imageContainer?: StyleProp<ViewStyle>
926
+ image?: StyleProp<ImageStyle>
927
+ infoRootContainer?: StyleProp<ViewStyle>
928
+ iconNextContainer?: StyleProp<ViewStyle>
929
+ iconNext?: StyleProp<ImageStyle>
930
+ orderId?: StyleProp<TextStyle>
931
+ orderDate?: StyleProp<TextStyle>
932
+ eventName?: StyleProp<TextStyle>
933
+ priceContainer?: StyleProp<ViewStyle>
934
+ price?: StyleProp<TextStyle>
935
+ currency?: StyleProp<TextStyle>
936
+ }
697
937
  safeArea?: StyleProp<ViewStyle>
698
938
  listContainer?: StyleProp<ViewStyle>
699
939
  eventsContainer?: StyleProp<ViewStyle>
700
940
  eventsTitle?: StyleProp<TextStyle>
701
941
  refreshControlColor?: ColorValue
702
- eventsDropdown?: IDropdownStyles
942
+ eventsDropdown?: {
943
+ container?: StyleProp<ViewStyle>
944
+ button?: StyleProp<ViewStyle>
945
+ icon?: StyleProp<ImageStyle>
946
+ label?: StyleProp<TextStyle>
947
+ dialog?: StyleProp<ViewStyle>
948
+ flatListContainer?: StyleProp<ViewStyle>
949
+ listItem?: {
950
+ container?: StyleProp<ViewStyle>
951
+ button?: StyleProp<ViewStyle>
952
+ buttonSelected?: StyleProp<ViewStyle>
953
+ text?: StyleProp<TextStyle>
954
+ textSelected?: StyleProp<TextStyle>
955
+ }
956
+
957
+ }
703
958
  rootContainer?: StyleProp<ViewStyle>
704
959
  eventsSelectionContainer?: StyleProp<ViewStyle>
705
960
  clearEventSelectionIcon?: StyleProp<ImageStyle>
706
961
  }
707
962
  ```
708
963
 
709
- `onFetchOrderDetailsFail` if the fetching fails, you can use this to know what happened.
710
-
711
964
  ---
712
965
 
713
- # MyOrderDetails
714
-
715
- ![image](https://user-images.githubusercontent.com/66479719/151049265-ebaabb75-58b1-4b22-bf99-83b1375b1a70.png)
966
+ ## MyOrderDetails
716
967
 
717
- When user selects an order from the `MyOrders`component, will show it details.
968
+ When user selects an order from the `MyOrders` component, will show it details.
718
969
 
719
970
  Import the component from the library.
720
971
 
@@ -724,44 +975,25 @@ import { MyOrderDetails } from 'tf-checkout-react-native'
724
975
 
725
976
  ### Props
726
977
 
727
- `data` receives same data as the one of the object received from the `onSelectOrder` handler in `MyOrders`component:
728
-
729
978
  ```js
730
- order: {
731
- header: {
732
- isReferralDisabled: boolean
733
- shareLink: string
734
- total: string
735
- salesReferred: string
736
- },
737
- items: [
738
- {
739
- name: string
740
- currency: string
741
- price: string
742
- discount: string
743
- quantity: string
744
- total: string
745
- },
746
- {...}
747
- ],
748
- tickets: [
749
- {
750
- hash: string
751
- ticketType: string
752
- holderName: string
753
- status: string
754
- pdfLink: string
755
- },
756
- {...}
757
- ]
758
- }
759
- ```
760
-
761
- `styles` optional, to customize the component look & feel.
762
-
763
- ```
764
- styles?: {
979
+ {
980
+ data: IMyOrderDetailsResponse
981
+ config?: {
982
+ areActivityIndicatorsEnabled?: boolean
983
+ areAlertsEnabled?: boolean
984
+ }
985
+ onDownloadStatusChange?: (status?:
986
+ 'downloading' |
987
+ 'downloaded' |
988
+ 'failed'
989
+ ) => void
990
+ downloadStatusIcons?: {
991
+ success?: ImageSourcePropType
992
+ error?: ImageSourcePropType
993
+ }
994
+ onAndroidWritePermission?: (permission?: boolean) => void
995
+ onLinkCopied?: (copied?: boolean) => void
996
+ styles?: {
765
997
  rootContainer?: StyleProp<ViewStyle>
766
998
  header?: {
767
999
  container?: StyleProp<ViewStyle>
@@ -805,29 +1037,34 @@ styles?: {
805
1037
  }
806
1038
  downloadButton?: IButtonStyles
807
1039
  }
808
- ```
809
-
810
- `texts` optional, to customize the texts that shows on the labels.
811
-
812
- ```js
813
- texts?: {
814
- title?: string
815
- subTitle?: string
816
- referralLink?: string
817
- listItem?: {
818
- title?: string
819
- ticketType?: string
820
- price?: string
821
- quantity?: string
822
- total?: string
823
- }
824
- ticketItem?: {
1040
+ texts?: {
825
1041
  title?: string
826
- ticketId?: string
827
- ticketType?: string
828
- ticketHolder?: string
829
- status?: string
830
- download?: string
1042
+ subTitle?: string
1043
+ referralLink?: string
1044
+ listItem?: {
1045
+ title?: string
1046
+ ticketType?: string
1047
+ price?: string
1048
+ quantity?: string
1049
+ total?: string
1050
+ }
1051
+ ticketItem?: {
1052
+ title?: string
1053
+ ticketId?: string
1054
+ ticketType?: string
1055
+ ticketHolder?: string
1056
+ status?: string
1057
+ download?: string
1058
+ }
1059
+ downloadNotification?: {
1060
+ successMessage?: string
1061
+ errorMessage?: string
1062
+ }
1063
+ copyText?: {
1064
+ copy?: string
1065
+ copied?: string
1066
+ }
831
1067
  }
832
1068
  }
833
1069
  ```
1070
+