react-native-stallion 1.0.0
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.
- package/README.md +36 -0
- package/android/build.gradle +100 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +8 -0
- package/android/src/main/java/com/stallion/Stallion.java +26 -0
- package/android/src/main/java/com/stallion/StallionConstants.java +27 -0
- package/android/src/main/java/com/stallion/StallionDefaultErrorActivity.java +27 -0
- package/android/src/main/java/com/stallion/StallionModule.java +250 -0
- package/android/src/main/java/com/stallion/StallionPackage.java +29 -0
- package/android/src/main/java/com/stallion/StallionStorage.java +54 -0
- package/android/src/main/java/com/stallion/StallionZip.java +127 -0
- package/android/src/main/res/layout/stallion_default_error_activity.xml +60 -0
- package/android/src/noop/java/com/stallion/Stallion.java +13 -0
- package/android/src/noop/java/com/stallion/StallionConstants.java +10 -0
- package/android/src/noop/java/com/stallion/StallionModule.java +26 -0
- package/android/src/noop/java/com/stallion/StallionPackage.java +29 -0
- package/ios/Stallion.xcodeproj/project.pbxproj +283 -0
- package/ios/main/Stallion-Bridging-Header.h +3 -0
- package/ios/main/Stallion.m +21 -0
- package/ios/main/Stallion.swift +69 -0
- package/ios/main/StallionConstants.swift +42 -0
- package/ios/main/StallionDownloader.swift +124 -0
- package/ios/main/StallionModule.h +13 -0
- package/ios/main/StallionModule.m +71 -0
- package/ios/main/StallionUtil.swift +29 -0
- package/ios/noop/Stallion-Bridging-Header.h +2 -0
- package/ios/noop/Stallion.m +12 -0
- package/ios/noop/Stallion.swift +7 -0
- package/ios/noop/StallionModule.h +13 -0
- package/ios/noop/StallionModule.m +20 -0
- package/package.json +62 -0
- package/react-native-stallion.podspec +50 -0
- package/src/StallionNativeModule.js +5 -0
- package/src/StallionNativeModule.js.map +1 -0
- package/src/index.js +29 -0
- package/src/index.js.map +1 -0
- package/src/main/components/common/ButtonFullWidth/index.js +20 -0
- package/src/main/components/common/ButtonFullWidth/index.js.map +1 -0
- package/src/main/components/common/ButtonFullWidth/styles.js +42 -0
- package/src/main/components/common/ButtonFullWidth/styles.js.map +1 -0
- package/src/main/components/common/ErrorView/index.js +18 -0
- package/src/main/components/common/ErrorView/index.js.map +1 -0
- package/src/main/components/common/ErrorView/styles.js +20 -0
- package/src/main/components/common/ErrorView/styles.js.map +1 -0
- package/src/main/components/common/Footer/index.js +49 -0
- package/src/main/components/common/Footer/index.js.map +1 -0
- package/src/main/components/common/Footer/styles.js +76 -0
- package/src/main/components/common/Footer/styles.js.map +1 -0
- package/src/main/components/common/Header/index.js +50 -0
- package/src/main/components/common/Header/index.js.map +1 -0
- package/src/main/components/common/Header/styles.js +63 -0
- package/src/main/components/common/Header/styles.js.map +1 -0
- package/src/main/components/common/OverlayLoader/index.js +26 -0
- package/src/main/components/common/OverlayLoader/index.js.map +1 -0
- package/src/main/components/common/OverlayLoader/styles.js +33 -0
- package/src/main/components/common/OverlayLoader/styles.js.map +1 -0
- package/src/main/components/common/ProfileOverlay/index.js +39 -0
- package/src/main/components/common/ProfileOverlay/index.js.map +1 -0
- package/src/main/components/common/ProfileOverlay/styles.js +37 -0
- package/src/main/components/common/ProfileOverlay/styles.js.map +1 -0
- package/src/main/components/common/Spinner/index.js +9 -0
- package/src/main/components/common/Spinner/index.js.map +1 -0
- package/src/main/components/modules/listing/components/BucketCard.js +33 -0
- package/src/main/components/modules/listing/components/BucketCard.js.map +1 -0
- package/src/main/components/modules/listing/components/BucketCardInfoSection.js +56 -0
- package/src/main/components/modules/listing/components/BucketCardInfoSection.js.map +1 -0
- package/src/main/components/modules/listing/components/BundleCard.js +36 -0
- package/src/main/components/modules/listing/components/BundleCard.js.map +1 -0
- package/src/main/components/modules/listing/components/BundleCardInfoSection.js +72 -0
- package/src/main/components/modules/listing/components/BundleCardInfoSection.js.map +1 -0
- package/src/main/components/modules/listing/components/CardDescriptionContent.js +34 -0
- package/src/main/components/modules/listing/components/CardDescriptionContent.js.map +1 -0
- package/src/main/components/modules/listing/components/styles/index.js +65 -0
- package/src/main/components/modules/listing/components/styles/index.js.map +1 -0
- package/src/main/components/modules/listing/hooks/useListing.js +71 -0
- package/src/main/components/modules/listing/hooks/useListing.js.map +1 -0
- package/src/main/components/modules/listing/index.js +39 -0
- package/src/main/components/modules/listing/index.js.map +1 -0
- package/src/main/components/modules/listing/styles.js +12 -0
- package/src/main/components/modules/listing/styles.js.map +1 -0
- package/src/main/components/modules/login/components/Email.js +37 -0
- package/src/main/components/modules/login/components/Email.js.map +1 -0
- package/src/main/components/modules/login/components/Otp.js +41 -0
- package/src/main/components/modules/login/components/Otp.js.map +1 -0
- package/src/main/components/modules/login/components/styles/index.js +24 -0
- package/src/main/components/modules/login/components/styles/index.js.map +1 -0
- package/src/main/components/modules/login/hooks/useLoginFlow.js +60 -0
- package/src/main/components/modules/login/hooks/useLoginFlow.js.map +1 -0
- package/src/main/components/modules/login/index.js +54 -0
- package/src/main/components/modules/login/index.js.map +1 -0
- package/src/main/components/modules/login/styles/index.js +34 -0
- package/src/main/components/modules/login/styles/index.js.map +1 -0
- package/src/main/components/modules/modal/StallionModal.js +73 -0
- package/src/main/components/modules/modal/StallionModal.js.map +1 -0
- package/src/main/components/modules/modal/hooks/useStallionModal.js +92 -0
- package/src/main/components/modules/modal/hooks/useStallionModal.js.map +1 -0
- package/src/main/constants/apiConstants.js +10 -0
- package/src/main/constants/apiConstants.js.map +1 -0
- package/src/main/constants/appConstants.js +71 -0
- package/src/main/constants/appConstants.js.map +1 -0
- package/src/main/constants/colors.js +14 -0
- package/src/main/constants/colors.js.map +1 -0
- package/src/main/index.js +7 -0
- package/src/main/index.js.map +1 -0
- package/src/main/state/actionCreators/useBucketActions.js +37 -0
- package/src/main/state/actionCreators/useBucketActions.js.map +1 -0
- package/src/main/state/actionCreators/useBundleActions.js +45 -0
- package/src/main/state/actionCreators/useBundleActions.js.map +1 -0
- package/src/main/state/actionCreators/useDownloadActions.js +47 -0
- package/src/main/state/actionCreators/useDownloadActions.js.map +1 -0
- package/src/main/state/actionCreators/useMetaActions.js +19 -0
- package/src/main/state/actionCreators/useMetaActions.js.map +1 -0
- package/src/main/state/actionCreators/useUserActions.js +97 -0
- package/src/main/state/actionCreators/useUserActions.js.map +1 -0
- package/src/main/state/actions/bucketActions.js +19 -0
- package/src/main/state/actions/bucketActions.js.map +1 -0
- package/src/main/state/actions/bundleActions.js +25 -0
- package/src/main/state/actions/bundleActions.js.map +1 -0
- package/src/main/state/actions/downloadActions.js +19 -0
- package/src/main/state/actions/downloadActions.js.map +1 -0
- package/src/main/state/actions/metaActions.js +8 -0
- package/src/main/state/actions/metaActions.js.map +1 -0
- package/src/main/state/actions/userActions.js +31 -0
- package/src/main/state/actions/userActions.js.map +1 -0
- package/src/main/state/index.js +70 -0
- package/src/main/state/index.js.map +1 -0
- package/src/main/state/reducers/bucketReducer.js +36 -0
- package/src/main/state/reducers/bucketReducer.js.map +1 -0
- package/src/main/state/reducers/bundleReducer.js +47 -0
- package/src/main/state/reducers/bundleReducer.js.map +1 -0
- package/src/main/state/reducers/downloadReducer.js +39 -0
- package/src/main/state/reducers/downloadReducer.js.map +1 -0
- package/src/main/state/reducers/metaReducer.js +17 -0
- package/src/main/state/reducers/metaReducer.js.map +1 -0
- package/src/main/state/reducers/userReducer.js +70 -0
- package/src/main/state/reducers/userReducer.js.map +1 -0
- package/src/main/utils/ErrorBoundary.js +13 -0
- package/src/main/utils/ErrorBoundary.js.map +1 -0
- package/src/main/utils/SharedDataManager.js +25 -0
- package/src/main/utils/SharedDataManager.js.map +1 -0
- package/src/main/utils/StallionNaitveUtils.js +7 -0
- package/src/main/utils/StallionNaitveUtils.js.map +1 -0
- package/src/main/utils/apiUtils.js +16 -0
- package/src/main/utils/apiUtils.js.map +1 -0
- package/src/main/utils/dateUtil.js +39 -0
- package/src/main/utils/dateUtil.js.map +1 -0
- package/src/main/utils/errorUtil.js +10 -0
- package/src/main/utils/errorUtil.js.map +1 -0
- package/src/main/utils/useStallionModal.js +18 -0
- package/src/main/utils/useStallionModal.js.map +1 -0
- package/src/main/utils/withStallion.js +16 -0
- package/src/main/utils/withStallion.js.map +1 -0
- package/src/nativeScripts/getStallionEnabled.js +8 -0
- package/src/nativeScripts/getStallionEnabled.js.map +1 -0
- package/src/noop/useStallionModal.js +12 -0
- package/src/noop/useStallionModal.js.map +1 -0
- package/src/noop/withStallion.js +13 -0
- package/src/noop/withStallion.js.map +1 -0
- package/src/types/bucket.types.js +7 -0
- package/src/types/bucket.types.js.map +1 -0
- package/src/types/bundle.types.js +8 -0
- package/src/types/bundle.types.js.map +1 -0
- package/src/types/download.types.js +7 -0
- package/src/types/download.types.js.map +1 -0
- package/src/types/globalProvider.types.js +2 -0
- package/src/types/globalProvider.types.js.map +1 -0
- package/src/types/meta.types.js +6 -0
- package/src/types/meta.types.js.map +1 -0
- package/src/types/user.types.js +9 -0
- package/src/types/user.types.js.map +1 -0
- package/src/types/utils.types.js +2 -0
- package/src/types/utils.types.js.map +1 -0
- package/types/StallionNativeModule.d.ts +4 -0
- package/types/StallionNativeModule.d.ts.map +1 -0
- package/types/__tests__/index.test.d.ts +1 -0
- package/types/__tests__/index.test.d.ts.map +1 -0
- package/types/index.d.ts +4 -0
- package/types/index.d.ts.map +1 -0
- package/types/main/components/common/ButtonFullWidth/index.d.ts +10 -0
- package/types/main/components/common/ButtonFullWidth/index.d.ts.map +1 -0
- package/types/main/components/common/ButtonFullWidth/styles.d.ts +39 -0
- package/types/main/components/common/ButtonFullWidth/styles.d.ts.map +1 -0
- package/types/main/components/common/ErrorView/index.d.ts +7 -0
- package/types/main/components/common/ErrorView/index.d.ts.map +1 -0
- package/types/main/components/common/ErrorView/styles.d.ts +17 -0
- package/types/main/components/common/ErrorView/styles.d.ts.map +1 -0
- package/types/main/components/common/Footer/index.d.ts +13 -0
- package/types/main/components/common/Footer/index.d.ts.map +1 -0
- package/types/main/components/common/Footer/styles.d.ts +73 -0
- package/types/main/components/common/Footer/styles.d.ts.map +1 -0
- package/types/main/components/common/Header/index.d.ts +11 -0
- package/types/main/components/common/Header/index.d.ts.map +1 -0
- package/types/main/components/common/Header/styles.d.ts +59 -0
- package/types/main/components/common/Header/styles.d.ts.map +1 -0
- package/types/main/components/common/OverlayLoader/index.d.ts +7 -0
- package/types/main/components/common/OverlayLoader/index.d.ts.map +1 -0
- package/types/main/components/common/OverlayLoader/styles.d.ts +30 -0
- package/types/main/components/common/OverlayLoader/styles.d.ts.map +1 -0
- package/types/main/components/common/ProfileOverlay/index.d.ts +10 -0
- package/types/main/components/common/ProfileOverlay/index.d.ts.map +1 -0
- package/types/main/components/common/ProfileOverlay/styles.d.ts +34 -0
- package/types/main/components/common/ProfileOverlay/styles.d.ts.map +1 -0
- package/types/main/components/common/Spinner/index.d.ts +4 -0
- package/types/main/components/common/Spinner/index.d.ts.map +1 -0
- package/types/main/components/modules/listing/components/BucketCard.d.ts +13 -0
- package/types/main/components/modules/listing/components/BucketCard.d.ts.map +1 -0
- package/types/main/components/modules/listing/components/BucketCardInfoSection.d.ts +11 -0
- package/types/main/components/modules/listing/components/BucketCardInfoSection.d.ts.map +1 -0
- package/types/main/components/modules/listing/components/BundleCard.d.ts +14 -0
- package/types/main/components/modules/listing/components/BundleCard.d.ts.map +1 -0
- package/types/main/components/modules/listing/components/BundleCardInfoSection.d.ts +12 -0
- package/types/main/components/modules/listing/components/BundleCardInfoSection.d.ts.map +1 -0
- package/types/main/components/modules/listing/components/CardDescriptionContent.d.ts +8 -0
- package/types/main/components/modules/listing/components/CardDescriptionContent.d.ts.map +1 -0
- package/types/main/components/modules/listing/components/styles/index.d.ts +62 -0
- package/types/main/components/modules/listing/components/styles/index.d.ts.map +1 -0
- package/types/main/components/modules/listing/hooks/useListing.d.ts +11 -0
- package/types/main/components/modules/listing/hooks/useListing.d.ts.map +1 -0
- package/types/main/components/modules/listing/index.d.ts +4 -0
- package/types/main/components/modules/listing/index.d.ts.map +1 -0
- package/types/main/components/modules/listing/styles.d.ts +10 -0
- package/types/main/components/modules/listing/styles.d.ts.map +1 -0
- package/types/main/components/modules/login/components/Email.d.ts +13 -0
- package/types/main/components/modules/login/components/Email.d.ts.map +1 -0
- package/types/main/components/modules/login/components/Otp.d.ts +12 -0
- package/types/main/components/modules/login/components/Otp.d.ts.map +1 -0
- package/types/main/components/modules/login/components/styles/index.d.ts +21 -0
- package/types/main/components/modules/login/components/styles/index.d.ts.map +1 -0
- package/types/main/components/modules/login/hooks/useLoginFlow.d.ts +18 -0
- package/types/main/components/modules/login/hooks/useLoginFlow.d.ts.map +1 -0
- package/types/main/components/modules/login/index.d.ts +4 -0
- package/types/main/components/modules/login/index.d.ts.map +1 -0
- package/types/main/components/modules/login/styles/index.d.ts +31 -0
- package/types/main/components/modules/login/styles/index.d.ts.map +1 -0
- package/types/main/components/modules/modal/StallionModal.d.ts +4 -0
- package/types/main/components/modules/modal/StallionModal.d.ts.map +1 -0
- package/types/main/components/modules/modal/hooks/useStallionModal.d.ts +23 -0
- package/types/main/components/modules/modal/hooks/useStallionModal.d.ts.map +1 -0
- package/types/main/constants/apiConstants.d.ts +9 -0
- package/types/main/constants/apiConstants.d.ts.map +1 -0
- package/types/main/constants/appConstants.d.ts +65 -0
- package/types/main/constants/appConstants.d.ts.map +1 -0
- package/types/main/constants/colors.d.ts +14 -0
- package/types/main/constants/colors.d.ts.map +1 -0
- package/types/main/index.d.ts +7 -0
- package/types/main/index.d.ts.map +1 -0
- package/types/main/state/actionCreators/useBucketActions.d.ts +7 -0
- package/types/main/state/actionCreators/useBucketActions.d.ts.map +1 -0
- package/types/main/state/actionCreators/useBundleActions.d.ts +8 -0
- package/types/main/state/actionCreators/useBundleActions.d.ts.map +1 -0
- package/types/main/state/actionCreators/useDownloadActions.d.ts +7 -0
- package/types/main/state/actionCreators/useDownloadActions.d.ts.map +1 -0
- package/types/main/state/actionCreators/useMetaActions.d.ts +7 -0
- package/types/main/state/actionCreators/useMetaActions.d.ts.map +1 -0
- package/types/main/state/actionCreators/useUserActions.d.ts +12 -0
- package/types/main/state/actionCreators/useUserActions.d.ts.map +1 -0
- package/types/main/state/actions/bucketActions.d.ts +5 -0
- package/types/main/state/actions/bucketActions.d.ts.map +1 -0
- package/types/main/state/actions/bundleActions.d.ts +6 -0
- package/types/main/state/actions/bundleActions.d.ts.map +1 -0
- package/types/main/state/actions/downloadActions.d.ts +5 -0
- package/types/main/state/actions/downloadActions.d.ts.map +1 -0
- package/types/main/state/actions/metaActions.d.ts +3 -0
- package/types/main/state/actions/metaActions.d.ts.map +1 -0
- package/types/main/state/actions/userActions.d.ts +7 -0
- package/types/main/state/actions/userActions.d.ts.map +1 -0
- package/types/main/state/index.d.ts +6 -0
- package/types/main/state/index.d.ts.map +1 -0
- package/types/main/state/reducers/bucketReducer.d.ts +4 -0
- package/types/main/state/reducers/bucketReducer.d.ts.map +1 -0
- package/types/main/state/reducers/bundleReducer.d.ts +4 -0
- package/types/main/state/reducers/bundleReducer.d.ts.map +1 -0
- package/types/main/state/reducers/downloadReducer.d.ts +4 -0
- package/types/main/state/reducers/downloadReducer.d.ts.map +1 -0
- package/types/main/state/reducers/metaReducer.d.ts +4 -0
- package/types/main/state/reducers/metaReducer.d.ts.map +1 -0
- package/types/main/state/reducers/userReducer.d.ts +4 -0
- package/types/main/state/reducers/userReducer.d.ts.map +1 -0
- package/types/main/utils/ErrorBoundary.d.ts +7 -0
- package/types/main/utils/ErrorBoundary.d.ts.map +1 -0
- package/types/main/utils/SharedDataManager.d.ts +14 -0
- package/types/main/utils/SharedDataManager.d.ts.map +1 -0
- package/types/main/utils/StallionNaitveUtils.d.ts +7 -0
- package/types/main/utils/StallionNaitveUtils.d.ts.map +1 -0
- package/types/main/utils/apiUtils.d.ts +7 -0
- package/types/main/utils/apiUtils.d.ts.map +1 -0
- package/types/main/utils/dateUtil.d.ts +3 -0
- package/types/main/utils/dateUtil.d.ts.map +1 -0
- package/types/main/utils/errorUtil.d.ts +10 -0
- package/types/main/utils/errorUtil.d.ts.map +1 -0
- package/types/main/utils/useStallionModal.d.ts +4 -0
- package/types/main/utils/useStallionModal.d.ts.map +1 -0
- package/types/main/utils/withStallion.d.ts +4 -0
- package/types/main/utils/withStallion.d.ts.map +1 -0
- package/types/noop/useStallionModal.d.ts +4 -0
- package/types/noop/useStallionModal.d.ts.map +1 -0
- package/types/noop/withStallion.d.ts +4 -0
- package/types/noop/withStallion.d.ts.map +1 -0
- package/types/types/bucket.types.d.ts +33 -0
- package/types/types/bucket.types.d.ts.map +1 -0
- package/types/types/bundle.types.d.ts +41 -0
- package/types/types/bundle.types.d.ts.map +1 -0
- package/types/types/download.types.d.ts +27 -0
- package/types/types/download.types.d.ts.map +1 -0
- package/types/types/globalProvider.types.d.ts +36 -0
- package/types/types/globalProvider.types.d.ts.map +1 -0
- package/types/types/meta.types.d.ts +15 -0
- package/types/types/meta.types.d.ts.map +1 -0
- package/types/types/user.types.d.ts +40 -0
- package/types/types/user.types.d.ts.map +1 -0
- package/types/types/utils.types.d.ts +26 -0
- package/types/types/utils.types.d.ts.map +1 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
//
|
|
2
|
+
// StallionDownloader.swift
|
|
3
|
+
// react-native-stallion
|
|
4
|
+
//
|
|
5
|
+
// Created by Thor963 on 17/05/23.
|
|
6
|
+
//
|
|
7
|
+
import Foundation
|
|
8
|
+
import ZIPFoundation
|
|
9
|
+
|
|
10
|
+
enum StallionError: Error {
|
|
11
|
+
case runtimeError(String)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
class StallionDownloader: NSObject {
|
|
15
|
+
|
|
16
|
+
private lazy var urlSession = URLSession(configuration: .default,
|
|
17
|
+
delegate: self,
|
|
18
|
+
delegateQueue: nil)
|
|
19
|
+
|
|
20
|
+
var downloadTask : URLSessionDownloadTask?;
|
|
21
|
+
var reqJson: [String: Any]?;
|
|
22
|
+
|
|
23
|
+
var _resolve: RCTPromiseResolveBlock?;
|
|
24
|
+
var _reject: RCTPromiseRejectBlock?;
|
|
25
|
+
|
|
26
|
+
override init() {
|
|
27
|
+
super.init()
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
func load(url: URL, reqBody: [String: Any], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) throws {
|
|
31
|
+
self.reqJson = reqBody
|
|
32
|
+
let reqBody = try? JSONSerialization.data(withJSONObject: reqBody)
|
|
33
|
+
self._resolve = resolve
|
|
34
|
+
self._reject = reject
|
|
35
|
+
|
|
36
|
+
var request = URLRequest(url: url)
|
|
37
|
+
request.httpMethod = "POST"
|
|
38
|
+
request.httpBody = reqBody
|
|
39
|
+
|
|
40
|
+
request.setValue("application/json", forHTTPHeaderField: StallionConstants.HeaderKeys.ContentType)
|
|
41
|
+
request.setValue(StallionUtil.getLs(key: StallionUtil.LSKeys.apiKey) ?? "", forHTTPHeaderField: StallionConstants.HeaderKeys.AccessKey)
|
|
42
|
+
let task = urlSession.downloadTask(with: request)
|
|
43
|
+
task.resume()
|
|
44
|
+
self.downloadTask = task
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
extension StallionDownloader: URLSessionDownloadDelegate {
|
|
49
|
+
|
|
50
|
+
func urlSession(_ session: URLSession,
|
|
51
|
+
downloadTask: URLSessionDownloadTask,
|
|
52
|
+
didWriteData bytesWritten: Int64,
|
|
53
|
+
totalBytesWritten: Int64,
|
|
54
|
+
totalBytesExpectedToWrite: Int64) {
|
|
55
|
+
if downloadTask == self.downloadTask {
|
|
56
|
+
let calculatedProgress = Float(totalBytesWritten) / Float(totalBytesExpectedToWrite)
|
|
57
|
+
DispatchQueue.main.async {
|
|
58
|
+
print("progress: \(calculatedProgress)))")
|
|
59
|
+
Stallion.shared?.sendEvent(withName: StallionConstants.DOWNLOAD_PROGRESS_EVENT, body: calculatedProgress)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
|
|
65
|
+
guard error != nil else { return }
|
|
66
|
+
self._reject?("500", StallionConstants.DownloadPromiseResponses.ApiError, NSError(domain: StallionConstants.DownloadPromiseResponses.ApiError, code: 500))
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask,
|
|
70
|
+
didFinishDownloadingTo location: URL) {
|
|
71
|
+
let response = downloadTask.response as? HTTPURLResponse
|
|
72
|
+
if (response?.statusCode == 200) {
|
|
73
|
+
do {
|
|
74
|
+
let tempDownloadDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
|
|
75
|
+
.appendingPathComponent(StallionConstants.FilePaths.DownloadDirectory, isDirectory: true)
|
|
76
|
+
|
|
77
|
+
if !FileManager.default.fileExists(atPath: tempDownloadDirectory.path) {
|
|
78
|
+
try FileManager.default.createDirectory(atPath: tempDownloadDirectory.path, withIntermediateDirectories: true, attributes: nil)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
let finalDestinationDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
|
|
82
|
+
.appendingPathComponent(StallionConstants.FilePaths.TargetDirectory, isDirectory: true)
|
|
83
|
+
|
|
84
|
+
let downloadedBuildDirectory = tempDownloadDirectory.appendingPathComponent(StallionConstants.FilePaths.ZipFolderName, isDirectory: true)
|
|
85
|
+
|
|
86
|
+
let downloadedZipFilePath = tempDownloadDirectory.appendingPathComponent(StallionConstants.FilePaths.ZipFolderName, isDirectory: false).appendingPathExtension(StallionConstants.FilePaths.ZipExtension)
|
|
87
|
+
|
|
88
|
+
let fileManager = FileManager()
|
|
89
|
+
|
|
90
|
+
// if zip already exists, delete the zip
|
|
91
|
+
if FileManager.default.fileExists(atPath: downloadedZipFilePath.path) {
|
|
92
|
+
try fileManager.removeItem(at: downloadedZipFilePath)
|
|
93
|
+
}
|
|
94
|
+
try FileManager.default.copyItem(at: location, to: downloadedZipFilePath)
|
|
95
|
+
|
|
96
|
+
// if build already exists in download folder, delete it
|
|
97
|
+
if FileManager.default.fileExists(atPath: downloadedBuildDirectory.path) {
|
|
98
|
+
try fileManager.removeItem(at: downloadedBuildDirectory)
|
|
99
|
+
}
|
|
100
|
+
try fileManager.unzipItem(at: downloadedZipFilePath, to: tempDownloadDirectory, skipCRC32: false, progress: nil, preferredEncoding: nil)
|
|
101
|
+
try fileManager.removeItem(at: downloadedZipFilePath)
|
|
102
|
+
|
|
103
|
+
// if build exists in final destination, ovverride it
|
|
104
|
+
if FileManager.default.fileExists(atPath: finalDestinationDirectory.path) {
|
|
105
|
+
try fileManager.removeItem(at: finalDestinationDirectory)
|
|
106
|
+
}
|
|
107
|
+
try fileManager.moveItem(at: tempDownloadDirectory, to: finalDestinationDirectory)
|
|
108
|
+
let bucketId = self.reqJson?[StallionConstants.DownloadReqBodyKeys.BucketId] as? String ?? ""
|
|
109
|
+
let receivedVersion = self.reqJson?[StallionConstants.DownloadReqBodyKeys.Version] as? Int ?? -1
|
|
110
|
+
StallionUtil.setLs(key: StallionUtil.LSKeys.bucketKey, value: bucketId)
|
|
111
|
+
if receivedVersion > -1 {
|
|
112
|
+
StallionUtil.setLs(key: StallionUtil.LSKeys.versionKey, value: String(receivedVersion))
|
|
113
|
+
}
|
|
114
|
+
self._resolve?(StallionConstants.DownloadPromiseResponses.Success)
|
|
115
|
+
} catch {
|
|
116
|
+
// throw exception here
|
|
117
|
+
let errorString = StallionConstants.DownloadPromiseResponses.FileSystemError
|
|
118
|
+
self._reject?("500", errorString, NSError(domain: errorString, code: 500))
|
|
119
|
+
}
|
|
120
|
+
} else {
|
|
121
|
+
self._reject?("500", StallionConstants.DownloadPromiseResponses.GenericError, NSError(domain: StallionConstants.DownloadPromiseResponses.GenericError, code: 500))
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Stallion.h
|
|
3
|
+
// react-native-stallion
|
|
4
|
+
//
|
|
5
|
+
// Created by Thor963 on 17/05/23.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import <Foundation/Foundation.h>
|
|
9
|
+
|
|
10
|
+
@interface StallionModule : NSObject
|
|
11
|
+
+ (NSURL *)getBundleURL;
|
|
12
|
+
+ (NSURL *)getBundleURL:(NSURL *)defaultBundleURL;
|
|
13
|
+
@end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
//
|
|
2
|
+
// StallionModule.m
|
|
3
|
+
// react-native-stallion
|
|
4
|
+
//
|
|
5
|
+
// Created by Thor963 on 17/05/23.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import "StallionModule.h"
|
|
9
|
+
|
|
10
|
+
@implementation StallionModule
|
|
11
|
+
+ (NSURL *)getBundleURL {
|
|
12
|
+
return [self getBundleURL:nil];
|
|
13
|
+
}
|
|
14
|
+
+ (NSURL *)getBundleURL:(NSURL *)defaultBundleURL {
|
|
15
|
+
NSSetUncaughtExceptionHandler(&handleException);
|
|
16
|
+
NSURL *defaultRNBundlePath = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
|
17
|
+
NSString *documentDirectoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
|
|
18
|
+
NSString *bundleFilePath = [documentDirectoryPath stringByAppendingPathComponent:@"StallionPackage/build/main.jsbundle"];
|
|
19
|
+
NSURL *targetBundleUrl = [NSURL URLWithString:bundleFilePath];
|
|
20
|
+
|
|
21
|
+
NSFileManager *fileManager = [NSFileManager defaultManager];
|
|
22
|
+
if (![fileManager fileExistsAtPath:[targetBundleUrl path]]) {
|
|
23
|
+
if(defaultBundleURL != nil) return defaultBundleURL;
|
|
24
|
+
return defaultRNBundlePath;
|
|
25
|
+
} else {
|
|
26
|
+
NSString *switchState = [[NSUserDefaults standardUserDefaults]
|
|
27
|
+
stringForKey:@"switchState"];
|
|
28
|
+
if([switchState isEqual:@"STALLION_ON"]) {
|
|
29
|
+
return targetBundleUrl;
|
|
30
|
+
} else {
|
|
31
|
+
if(defaultBundleURL != nil) return defaultBundleURL;
|
|
32
|
+
return defaultRNBundlePath;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
BOOL exceptionAlertDismissed = FALSE;
|
|
38
|
+
void handleException(NSException *exception)
|
|
39
|
+
{
|
|
40
|
+
NSString *switchState = [[NSUserDefaults standardUserDefaults]
|
|
41
|
+
stringForKey:@"switchState"];
|
|
42
|
+
if([switchState isEqual:@"STALLION_ON"]) {
|
|
43
|
+
[[NSUserDefaults standardUserDefaults] setObject:@"DEFAULT" forKey:@"switchState"];
|
|
44
|
+
[[NSUserDefaults standardUserDefaults] synchronize];
|
|
45
|
+
NSString * readeableError = [exception reason];
|
|
46
|
+
UIAlertController* alert = [UIAlertController
|
|
47
|
+
alertControllerWithTitle:@"Stallion Error Boundary"
|
|
48
|
+
message:[NSString stringWithFormat:@"%@\n%@",
|
|
49
|
+
@"A crash occurred in the app. We have switched Stallion off. Check crash report below. Continue crash to invoke other exception handlers. \n \n",
|
|
50
|
+
readeableError]
|
|
51
|
+
preferredStyle:UIAlertControllerStyleAlert];
|
|
52
|
+
|
|
53
|
+
[alert addAction:[UIAlertAction actionWithTitle:@"Continue Crash"
|
|
54
|
+
style:UIAlertActionStyleDefault
|
|
55
|
+
handler:^(UIAlertAction *action) {
|
|
56
|
+
exceptionAlertDismissed = TRUE;
|
|
57
|
+
}]];
|
|
58
|
+
|
|
59
|
+
UIApplication* app = [UIApplication sharedApplication];
|
|
60
|
+
UIViewController * rootViewController = app.delegate.window.rootViewController;
|
|
61
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
62
|
+
[rootViewController presentViewController:alert animated:YES completion:nil];
|
|
63
|
+
});
|
|
64
|
+
while (exceptionAlertDismissed == FALSE)
|
|
65
|
+
{
|
|
66
|
+
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//
|
|
2
|
+
// StallionUtil.swift
|
|
3
|
+
// react-native-stallion
|
|
4
|
+
//
|
|
5
|
+
// Created by Thor963 on 17/05/23.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
class StallionUtil {
|
|
11
|
+
public struct LSKeys {
|
|
12
|
+
static let bucketKey = "activeBucket"
|
|
13
|
+
static let versionKey = "activeVersion"
|
|
14
|
+
static let switchStateKey = "switchState"
|
|
15
|
+
static let apiKey = "apiKey"
|
|
16
|
+
}
|
|
17
|
+
public struct SwitchStates {
|
|
18
|
+
static let ON = "STALLION_ON"
|
|
19
|
+
static let OFF = "DEFAULT"
|
|
20
|
+
}
|
|
21
|
+
static func setLs(key: String, value: String) {
|
|
22
|
+
let defaults = UserDefaults.standard
|
|
23
|
+
defaults.set(value, forKey: key)
|
|
24
|
+
}
|
|
25
|
+
static func getLs(key: String) -> String? {
|
|
26
|
+
let defaults = UserDefaults.standard
|
|
27
|
+
return defaults.string(forKey: key)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Stallion.h
|
|
3
|
+
// react-native-stallion
|
|
4
|
+
//
|
|
5
|
+
// Created by Thor963 on 17/05/23.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import <Foundation/Foundation.h>
|
|
9
|
+
|
|
10
|
+
@interface StallionModule : NSObject
|
|
11
|
+
+ (NSURL *)bundleURL;
|
|
12
|
+
+ (NSURL *)getBundleURL:(NSURL *)defaultBundleURL;
|
|
13
|
+
@end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Stallion.m
|
|
3
|
+
// react-native-stallion
|
|
4
|
+
//
|
|
5
|
+
// Created by Thor963 on 17/05/23.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
#import "StallionModule.h"
|
|
9
|
+
|
|
10
|
+
@implementation StallionModule
|
|
11
|
+
+ (NSURL *)bundleURL
|
|
12
|
+
{
|
|
13
|
+
return [self getBundleURL:nil];
|
|
14
|
+
}
|
|
15
|
+
+ (NSURL *)getBundleURL:(NSURL *)defaultBundleURL {
|
|
16
|
+
if(defaultBundleURL != nil) return defaultBundleURL;
|
|
17
|
+
NSURL *defaultRNBundlePath = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
|
18
|
+
return defaultRNBundlePath;
|
|
19
|
+
}
|
|
20
|
+
@end
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "react-native-stallion",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Offical React Native SDK for Stallion",
|
|
5
|
+
"main": "index",
|
|
6
|
+
"types": "types/index.d.ts",
|
|
7
|
+
"react-native": "src/index",
|
|
8
|
+
"source": "src/index",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"react-native",
|
|
11
|
+
"ios",
|
|
12
|
+
"android"
|
|
13
|
+
],
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/redhorse-tech/react-native-stallion.git"
|
|
17
|
+
},
|
|
18
|
+
"author": "Sherlock <sherlock@redhorse.tech> (https://github.com/sherlock-redhorse)",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"homepage": "https://github.com/redhorse-tech/react-native-stallion",
|
|
21
|
+
"resolutions": {
|
|
22
|
+
"@types/react": "17.0.21"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"react": "*",
|
|
26
|
+
"react-native": "*"
|
|
27
|
+
},
|
|
28
|
+
"jest": {
|
|
29
|
+
"preset": "react-native",
|
|
30
|
+
"modulePathIgnorePatterns": [
|
|
31
|
+
"<rootDir>/example/node_modules",
|
|
32
|
+
"<rootDir>/lib/"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"release": {
|
|
36
|
+
"branches": [
|
|
37
|
+
"main"
|
|
38
|
+
],
|
|
39
|
+
"plugins": [
|
|
40
|
+
"@semantic-release/commit-analyzer",
|
|
41
|
+
"@semantic-release/release-notes-generator",
|
|
42
|
+
"@semantic-release/changelog",
|
|
43
|
+
[
|
|
44
|
+
"@semantic-release/npm",
|
|
45
|
+
{
|
|
46
|
+
"pkgRoot": "sdk-package"
|
|
47
|
+
}
|
|
48
|
+
],
|
|
49
|
+
"@semantic-release/github",
|
|
50
|
+
[
|
|
51
|
+
"@semantic-release/git",
|
|
52
|
+
{
|
|
53
|
+
"assets": [
|
|
54
|
+
"CHANGELOG.md",
|
|
55
|
+
"package.json"
|
|
56
|
+
],
|
|
57
|
+
"message": "chore(release): ${nextRelease.version}"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
+
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
|
|
5
|
+
|
|
6
|
+
Pod::Spec.new do |s|
|
|
7
|
+
s.name = "react-native-stallion"
|
|
8
|
+
s.version = package["version"]
|
|
9
|
+
s.summary = package["description"]
|
|
10
|
+
s.homepage = package["homepage"]
|
|
11
|
+
s.license = package["license"]
|
|
12
|
+
s.authors = package["author"]
|
|
13
|
+
|
|
14
|
+
s.platforms = { :ios => "12.0" }
|
|
15
|
+
s.source = { :git => "https://github.com/redhorse-tech/react-native-stallion.git", :tag => "#{s.version}" }
|
|
16
|
+
|
|
17
|
+
isStallionEnabled = false
|
|
18
|
+
begin
|
|
19
|
+
isStallionEnabled = JSON.parse(`node ./src/nativeScripts/getStallionEnabled.js`)
|
|
20
|
+
rescue
|
|
21
|
+
throw "Error evaluating stallion enabled script. Make sure node is installed on your system"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
if isStallionEnabled then
|
|
25
|
+
s.source_files = "ios/main/**/*.{h,m,mm,swift}"
|
|
26
|
+
else
|
|
27
|
+
s.source_files = "ios/noop/**/*.{h,m,mm,swift}"
|
|
28
|
+
puts "Stallion is disabled, falling back to noop version. Check your stallion.config.js file"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
s.dependency "React-Core"
|
|
32
|
+
if isStallionEnabled then
|
|
33
|
+
s.dependency "ZIPFoundation"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Don't install the dependencies when we run `pod install` in the old architecture.
|
|
37
|
+
if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
|
|
38
|
+
s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
|
|
39
|
+
s.pod_target_xcconfig = {
|
|
40
|
+
"HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
|
|
41
|
+
"OTHER_CPLUSPLUSFLAGS" => "-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1",
|
|
42
|
+
"CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
|
|
43
|
+
}
|
|
44
|
+
s.dependency "React-Codegen"
|
|
45
|
+
s.dependency "RCT-Folly"
|
|
46
|
+
s.dependency "RCTRequired"
|
|
47
|
+
s.dependency "RCTTypeSafety"
|
|
48
|
+
s.dependency "ReactCommon/turbomodule/core"
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { NativeModules } from 'react-native';
|
|
2
|
+
export const STALLION_DISABLED_ERROR = 'Stallion is disabled or not linked correctly, falling back to noop version. See https://docs.redhorse.tech/docs/production-deployment';
|
|
3
|
+
const StallionNativeModule = NativeModules.Stallion;
|
|
4
|
+
export default StallionNativeModule;
|
|
5
|
+
//# sourceMappingURL=StallionNativeModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeModules","STALLION_DISABLED_ERROR","StallionNativeModule","Stallion"],"sourceRoot":"../../src","sources":["StallionNativeModule.ts"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAE5C,OAAO,MAAMC,uBAAuB,GAClC,uIAAuI;AAEzI,MAAMC,oBAAoB,GAAGF,aAAa,CAACG,QAAQ;AAEnD,eAAeD,oBAAoB"}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import StallionNativeModule, { STALLION_DISABLED_ERROR } from './StallionNativeModule';
|
|
2
|
+
import withStallionNoop from './noop/withStallion';
|
|
3
|
+
import useStallionModalNoop from './noop/useStallionModal';
|
|
4
|
+
let isEnabled = false;
|
|
5
|
+
let projectId = '';
|
|
6
|
+
export let withStallion;
|
|
7
|
+
export let useStallionModal;
|
|
8
|
+
try {
|
|
9
|
+
// const stallionConfigObj: IStallionConfig = require('../example/stallion.config.js'); // testing import
|
|
10
|
+
const stallionConfigObj = require('../../../stallion.config.js'); // prod import
|
|
11
|
+
isEnabled = (stallionConfigObj === null || stallionConfigObj === void 0 ? void 0 : stallionConfigObj.stallionEnabled) || false;
|
|
12
|
+
projectId = (stallionConfigObj === null || stallionConfigObj === void 0 ? void 0 : stallionConfigObj.projectId) || '';
|
|
13
|
+
} catch (_) {
|
|
14
|
+
console.error(`
|
|
15
|
+
Error in reading stallion.config.js file, falling back to noop version.
|
|
16
|
+
`);
|
|
17
|
+
}
|
|
18
|
+
if (isEnabled && StallionNativeModule !== null && StallionNativeModule !== void 0 && StallionNativeModule.getApiKey) {
|
|
19
|
+
var _require, _require$default, _require2, _require2$default, _require3, _require3$default;
|
|
20
|
+
withStallion = (_require = require('./main')) === null || _require === void 0 ? void 0 : (_require$default = _require.default) === null || _require$default === void 0 ? void 0 : _require$default.withStallion;
|
|
21
|
+
useStallionModal = (_require2 = require('./main')) === null || _require2 === void 0 ? void 0 : (_require2$default = _require2.default) === null || _require2$default === void 0 ? void 0 : _require2$default.useStallionModal;
|
|
22
|
+
const SharedDataManager = (_require3 = require('./main/utils/SharedDataManager')) === null || _require3 === void 0 ? void 0 : (_require3$default = _require3.default) === null || _require3$default === void 0 ? void 0 : _require3$default.getInstance();
|
|
23
|
+
SharedDataManager === null || SharedDataManager === void 0 ? void 0 : SharedDataManager.setProjectId(projectId);
|
|
24
|
+
} else {
|
|
25
|
+
console.warn(STALLION_DISABLED_ERROR);
|
|
26
|
+
withStallion = withStallionNoop;
|
|
27
|
+
useStallionModal = useStallionModalNoop;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StallionNativeModule","STALLION_DISABLED_ERROR","withStallionNoop","useStallionModalNoop","isEnabled","projectId","withStallion","useStallionModal","stallionConfigObj","require","stallionEnabled","_","console","error","getApiKey","_require","_require$default","_require2","_require2$default","_require3","_require3$default","default","SharedDataManager","getInstance","setProjectId","warn"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"AAAA,OAAOA,oBAAoB,IACzBC,uBAAuB,QAClB,wBAAwB;AAC/B,OAAOC,gBAAgB,MAAM,qBAAqB;AAClD,OAAOC,oBAAoB,MAAM,yBAAyB;AAQ1D,IAAIC,SAAkB,GAAG,KAAK;AAC9B,IAAIC,SAAiB,GAAG,EAAE;AAE1B,OAAO,IAAIC,YAA2B;AACtC,OAAO,IAAIC,gBAAyC;AAEpD,IAAI;EACF;EACA,MAAMC,iBAAkC,GAAGC,OAAO,CAAC,6BAA6B,CAAC,CAAC,CAAC;EACnFL,SAAS,GAAG,CAAAI,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAEE,eAAe,KAAI,KAAK;EACvDL,SAAS,GAAG,CAAAG,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAEH,SAAS,KAAI,EAAE;AAChD,CAAC,CAAC,OAAOM,CAAC,EAAE;EACVC,OAAO,CAACC,KAAK,CAAE;AACjB;AACA,GAAG,CAAC;AACJ;AACA,IAAIT,SAAS,IAAIJ,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAEc,SAAS,EAAE;EAAA,IAAAC,QAAA,EAAAC,gBAAA,EAAAC,SAAA,EAAAC,iBAAA,EAAAC,SAAA,EAAAC,iBAAA;EAChDd,YAAY,IAAAS,QAAA,GAAGN,OAAO,CAAC,QAAQ,CAAC,cAAAM,QAAA,wBAAAC,gBAAA,GAAjBD,QAAA,CAAmBM,OAAO,cAAAL,gBAAA,uBAA1BA,gBAAA,CAA4BV,YAAY;EACvDC,gBAAgB,IAAAU,SAAA,GAAGR,OAAO,CAAC,QAAQ,CAAC,cAAAQ,SAAA,wBAAAC,iBAAA,GAAjBD,SAAA,CAAmBI,OAAO,cAAAH,iBAAA,uBAA1BA,iBAAA,CAA4BX,gBAAgB;EAC/D,MAAMe,iBAAiB,IAAAH,SAAA,GACrBV,OAAO,CAAC,gCAAgC,CAAC,cAAAU,SAAA,wBAAAC,iBAAA,GAAzCD,SAAA,CAA2CE,OAAO,cAAAD,iBAAA,uBAAlDA,iBAAA,CAAoDG,WAAW,CAAC,CAAC;EACnED,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAEE,YAAY,CAACnB,SAAS,CAAC;AAC5C,CAAC,MAAM;EACLO,OAAO,CAACa,IAAI,CAACxB,uBAAuB,CAAC;EACrCK,YAAY,GAAGJ,gBAAgB;EAC/BK,gBAAgB,GAAGJ,oBAAoB;AACzC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React, { memo } from 'react';
|
|
2
|
+
import { TouchableOpacity, Text } from 'react-native';
|
|
3
|
+
import styles from './styles';
|
|
4
|
+
const ButtonFullWidth = _ref => {
|
|
5
|
+
let {
|
|
6
|
+
buttonText,
|
|
7
|
+
primary = true,
|
|
8
|
+
onPress,
|
|
9
|
+
enabled = true
|
|
10
|
+
} = _ref;
|
|
11
|
+
return /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
12
|
+
style: [styles.buttonContainer, primary ? styles.primaryButton : styles.transparentButton, enabled ? null : styles.disabled],
|
|
13
|
+
onPress: onPress,
|
|
14
|
+
disabled: !enabled
|
|
15
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
16
|
+
style: [styles.buttonText, primary ? styles.primaryText : styles.secondaryText]
|
|
17
|
+
}, buttonText));
|
|
18
|
+
};
|
|
19
|
+
export default /*#__PURE__*/memo(ButtonFullWidth);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","memo","TouchableOpacity","Text","styles","ButtonFullWidth","_ref","buttonText","primary","onPress","enabled","createElement","style","buttonContainer","primaryButton","transparentButton","disabled","primaryText","secondaryText"],"sourceRoot":"../../../../../../src","sources":["main/components/common/ButtonFullWidth/index.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,SAASC,gBAAgB,EAAEC,IAAI,QAAQ,cAAc;AAErD,OAAOC,MAAM,MAAM,UAAU;AAS7B,MAAMC,eAA2C,GAAGC,IAAA,IAK9C;EAAA,IAL+C;IACnDC,UAAU;IACVC,OAAO,GAAG,IAAI;IACdC,OAAO;IACPC,OAAO,GAAG;EACZ,CAAC,GAAAJ,IAAA;EACC,oBACEN,KAAA,CAAAW,aAAA,CAACT,gBAAgB;IACfU,KAAK,EAAE,CACLR,MAAM,CAACS,eAAe,EACtBL,OAAO,GAAGJ,MAAM,CAACU,aAAa,GAAGV,MAAM,CAACW,iBAAiB,EACzDL,OAAO,GAAG,IAAI,GAAGN,MAAM,CAACY,QAAQ,CAChC;IACFP,OAAO,EAAEA,OAAQ;IACjBO,QAAQ,EAAE,CAACN;EAAQ,gBAEnBV,KAAA,CAAAW,aAAA,CAACR,IAAI;IACHS,KAAK,EAAE,CACLR,MAAM,CAACG,UAAU,EACjBC,OAAO,GAAGJ,MAAM,CAACa,WAAW,GAAGb,MAAM,CAACc,aAAa;EACnD,GAEDX,UACG,CACU,CAAC;AAEvB,CAAC;AAED,4BAAeN,IAAI,CAACI,eAAe,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import { HEADER_SLAB_HEIGHT, STD_MARGIN } from '../../../constants/appConstants';
|
|
3
|
+
import { COLORS } from '../../../constants/colors';
|
|
4
|
+
const styles = StyleSheet.create({
|
|
5
|
+
buttonContainer: {
|
|
6
|
+
height: HEADER_SLAB_HEIGHT,
|
|
7
|
+
borderRadius: STD_MARGIN,
|
|
8
|
+
width: '100%',
|
|
9
|
+
justifyContent: 'center',
|
|
10
|
+
alignItems: 'center'
|
|
11
|
+
},
|
|
12
|
+
primaryButton: {
|
|
13
|
+
backgroundColor: COLORS.indigo,
|
|
14
|
+
elevation: 5,
|
|
15
|
+
zIndex: 5,
|
|
16
|
+
shadowColor: COLORS.black7,
|
|
17
|
+
shadowOpacity: 0.2,
|
|
18
|
+
shadowOffset: {
|
|
19
|
+
height: 10,
|
|
20
|
+
width: 10
|
|
21
|
+
},
|
|
22
|
+
shadowRadius: 20
|
|
23
|
+
},
|
|
24
|
+
disabled: {
|
|
25
|
+
opacity: 0.5
|
|
26
|
+
},
|
|
27
|
+
transparentButton: {
|
|
28
|
+
borderWidth: 1,
|
|
29
|
+
borderColor: COLORS.black7
|
|
30
|
+
},
|
|
31
|
+
buttonText: {
|
|
32
|
+
fontSize: HEADER_SLAB_HEIGHT / 3.5
|
|
33
|
+
},
|
|
34
|
+
primaryText: {
|
|
35
|
+
color: COLORS.white
|
|
36
|
+
},
|
|
37
|
+
secondaryText: {
|
|
38
|
+
color: COLORS.black7
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
export default styles;
|
|
42
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","HEADER_SLAB_HEIGHT","STD_MARGIN","COLORS","styles","create","buttonContainer","height","borderRadius","width","justifyContent","alignItems","primaryButton","backgroundColor","indigo","elevation","zIndex","shadowColor","black7","shadowOpacity","shadowOffset","shadowRadius","disabled","opacity","transparentButton","borderWidth","borderColor","buttonText","fontSize","primaryText","color","white","secondaryText"],"sourceRoot":"../../../../../../src","sources":["main/components/common/ButtonFullWidth/styles.ts"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,SACEC,kBAAkB,EAClBC,UAAU,QACL,iCAAiC;AACxC,SAASC,MAAM,QAAQ,2BAA2B;AAElD,MAAMC,MAAM,GAAGJ,UAAU,CAACK,MAAM,CAAC;EAC/BC,eAAe,EAAE;IACfC,MAAM,EAAEN,kBAAkB;IAC1BO,YAAY,EAAEN,UAAU;IACxBO,KAAK,EAAE,MAAM;IACbC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd,CAAC;EACDC,aAAa,EAAE;IACbC,eAAe,EAAEV,MAAM,CAACW,MAAM;IAC9BC,SAAS,EAAE,CAAC;IACZC,MAAM,EAAE,CAAC;IACTC,WAAW,EAAEd,MAAM,CAACe,MAAM;IAC1BC,aAAa,EAAE,GAAG;IAClBC,YAAY,EAAE;MAAEb,MAAM,EAAE,EAAE;MAAEE,KAAK,EAAE;IAAG,CAAC;IACvCY,YAAY,EAAE;EAChB,CAAC;EACDC,QAAQ,EAAE;IACRC,OAAO,EAAE;EACX,CAAC;EACDC,iBAAiB,EAAE;IACjBC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAEvB,MAAM,CAACe;EACtB,CAAC;EACDS,UAAU,EAAE;IACVC,QAAQ,EAAE3B,kBAAkB,GAAG;EACjC,CAAC;EACD4B,WAAW,EAAE;IACXC,KAAK,EAAE3B,MAAM,CAAC4B;EAChB,CAAC;EACDC,aAAa,EAAE;IACbF,KAAK,EAAE3B,MAAM,CAACe;EAChB;AACF,CAAC,CAAC;AAEF,eAAed,MAAM"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React, { memo } from 'react';
|
|
2
|
+
import { View, Text } from 'react-native';
|
|
3
|
+
import styles from './styles';
|
|
4
|
+
import { DEFAULT_ERROR_PREFIX } from '../../../constants/appConstants';
|
|
5
|
+
const ErrorView = _ref => {
|
|
6
|
+
let {
|
|
7
|
+
error
|
|
8
|
+
} = _ref;
|
|
9
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
10
|
+
style: styles.errorContainer
|
|
11
|
+
}, error ? /*#__PURE__*/React.createElement(Text, {
|
|
12
|
+
style: styles.errorText
|
|
13
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
14
|
+
style: styles.boldText
|
|
15
|
+
}, DEFAULT_ERROR_PREFIX), error) : null);
|
|
16
|
+
};
|
|
17
|
+
export default /*#__PURE__*/memo(ErrorView);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","memo","View","Text","styles","DEFAULT_ERROR_PREFIX","ErrorView","_ref","error","createElement","style","errorContainer","errorText","boldText"],"sourceRoot":"../../../../../../src","sources":["main/components/common/ErrorView/index.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAEzC,OAAOC,MAAM,MAAM,UAAU;AAC7B,SAASC,oBAAoB,QAAQ,iCAAiC;AAMtE,MAAMC,SAA+B,GAAGC,IAAA,IAAe;EAAA,IAAd;IAAEC;EAAM,CAAC,GAAAD,IAAA;EAChD,oBACEP,KAAA,CAAAS,aAAA,CAACP,IAAI;IAACQ,KAAK,EAAEN,MAAM,CAACO;EAAe,GAChCH,KAAK,gBACJR,KAAA,CAAAS,aAAA,CAACN,IAAI;IAACO,KAAK,EAAEN,MAAM,CAACQ;EAAU,gBAC5BZ,KAAA,CAAAS,aAAA,CAACN,IAAI;IAACO,KAAK,EAAEN,MAAM,CAACS;EAAS,GAAER,oBAA2B,CAAC,EAC1DG,KACG,CAAC,GACL,IACA,CAAC;AAEX,CAAC;AAED,4BAAeP,IAAI,CAACK,SAAS,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import { HEADER_SLAB_HEIGHT } from '../../../constants/appConstants';
|
|
3
|
+
import { COLORS } from '../../../constants/colors';
|
|
4
|
+
const styles = StyleSheet.create({
|
|
5
|
+
errorContainer: {
|
|
6
|
+
flex: 1,
|
|
7
|
+
justifyContent: 'center',
|
|
8
|
+
alignItems: 'center',
|
|
9
|
+
padding: HEADER_SLAB_HEIGHT / 2,
|
|
10
|
+
backgroundColor: COLORS.background_grey
|
|
11
|
+
},
|
|
12
|
+
errorText: {
|
|
13
|
+
color: COLORS.error
|
|
14
|
+
},
|
|
15
|
+
boldText: {
|
|
16
|
+
fontWeight: 'bold'
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
export default styles;
|
|
20
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["StyleSheet","HEADER_SLAB_HEIGHT","COLORS","styles","create","errorContainer","flex","justifyContent","alignItems","padding","backgroundColor","background_grey","errorText","color","error","boldText","fontWeight"],"sourceRoot":"../../../../../../src","sources":["main/components/common/ErrorView/styles.ts"],"mappings":"AAAA,SAASA,UAAU,QAAQ,cAAc;AAEzC,SAASC,kBAAkB,QAAQ,iCAAiC;AACpE,SAASC,MAAM,QAAQ,2BAA2B;AAElD,MAAMC,MAAM,GAAGH,UAAU,CAACI,MAAM,CAAC;EAC/BC,cAAc,EAAE;IACdC,IAAI,EAAE,CAAC;IACPC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE,QAAQ;IACpBC,OAAO,EAAER,kBAAkB,GAAG,CAAC;IAC/BS,eAAe,EAAER,MAAM,CAACS;EAC1B,CAAC;EACDC,SAAS,EAAE;IACTC,KAAK,EAAEX,MAAM,CAACY;EAChB,CAAC;EACDC,QAAQ,EAAE;IACRC,UAAU,EAAE;EACd;AACF,CAAC,CAAC;AAEF,eAAeb,MAAM"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React, { useCallback, memo } from 'react';
|
|
2
|
+
import { View, Text, Switch } from 'react-native';
|
|
3
|
+
import { FOOTER_INFO_SUBTITLE, FOOTER_INFO_TITLE, SWITCH_TITLE, SWITCH_TEXTS, EMPTY_DOWNLOAD_MESSAGE } from '../../../constants/appConstants';
|
|
4
|
+
import styles from './styles';
|
|
5
|
+
const Footer = _ref => {
|
|
6
|
+
let {
|
|
7
|
+
switchIsOn,
|
|
8
|
+
onSwitchToggle,
|
|
9
|
+
activeBundle,
|
|
10
|
+
errorMessage
|
|
11
|
+
} = _ref;
|
|
12
|
+
const handleToggle = useCallback(() => {
|
|
13
|
+
onSwitchToggle === null || onSwitchToggle === void 0 ? void 0 : onSwitchToggle(!switchIsOn);
|
|
14
|
+
}, [switchIsOn, onSwitchToggle]);
|
|
15
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, errorMessage ? /*#__PURE__*/React.createElement(View, {
|
|
16
|
+
style: [styles.errorInfoSection]
|
|
17
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
18
|
+
style: styles.errTxt,
|
|
19
|
+
numberOfLines: 1
|
|
20
|
+
}, errorMessage)) : null, /*#__PURE__*/React.createElement(View, {
|
|
21
|
+
style: [styles.footerContainer, styles.shadowContainer]
|
|
22
|
+
}, activeBundle !== null && activeBundle !== void 0 && activeBundle.bucketName ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(View, {
|
|
23
|
+
style: styles.dividerSection
|
|
24
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
25
|
+
style: styles.infoTitle,
|
|
26
|
+
numberOfLines: 1
|
|
27
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
28
|
+
style: styles.bold
|
|
29
|
+
}, FOOTER_INFO_TITLE), activeBundle === null || activeBundle === void 0 ? void 0 : activeBundle.bucketName), /*#__PURE__*/React.createElement(Text, {
|
|
30
|
+
style: styles.infoSubTitle,
|
|
31
|
+
numberOfLines: 1
|
|
32
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
33
|
+
style: styles.bold
|
|
34
|
+
}, FOOTER_INFO_SUBTITLE), activeBundle === null || activeBundle === void 0 ? void 0 : activeBundle.version)), /*#__PURE__*/React.createElement(View, {
|
|
35
|
+
style: [styles.dividerSection2, styles.alignCenter]
|
|
36
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
37
|
+
style: [styles.infoTitle, switchIsOn ? styles.greenColor : styles.redColor, styles.bold]
|
|
38
|
+
}, SWITCH_TITLE, switchIsOn ? SWITCH_TEXTS.ON : SWITCH_TEXTS.OFF), /*#__PURE__*/React.createElement(Switch, {
|
|
39
|
+
style: styles.switchButton,
|
|
40
|
+
onValueChange: handleToggle,
|
|
41
|
+
value: switchIsOn
|
|
42
|
+
}))) : /*#__PURE__*/React.createElement(View, {
|
|
43
|
+
style: [styles.noDownloadContainer]
|
|
44
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
45
|
+
style: styles.selfCenter
|
|
46
|
+
}, EMPTY_DOWNLOAD_MESSAGE))));
|
|
47
|
+
};
|
|
48
|
+
export default /*#__PURE__*/memo(Footer);
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useCallback","memo","View","Text","Switch","FOOTER_INFO_SUBTITLE","FOOTER_INFO_TITLE","SWITCH_TITLE","SWITCH_TEXTS","EMPTY_DOWNLOAD_MESSAGE","styles","Footer","_ref","switchIsOn","onSwitchToggle","activeBundle","errorMessage","handleToggle","createElement","Fragment","style","errorInfoSection","errTxt","numberOfLines","footerContainer","shadowContainer","bucketName","dividerSection","infoTitle","bold","infoSubTitle","version","dividerSection2","alignCenter","greenColor","redColor","ON","OFF","switchButton","onValueChange","value","noDownloadContainer","selfCenter"],"sourceRoot":"../../../../../../src","sources":["main/components/common/Footer/index.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,IAAI,QAAQ,OAAO;AAChD,SAASC,IAAI,EAAEC,IAAI,EAAEC,MAAM,QAAQ,cAAc;AAEjD,SACEC,oBAAoB,EACpBC,iBAAiB,EACjBC,YAAY,EACZC,YAAY,EACZC,sBAAsB,QACjB,iCAAiC;AAExC,OAAOC,MAAM,MAAM,UAAU;AAY7B,MAAMC,MAAyB,GAAGC,IAAA,IAK5B;EAAA,IAL6B;IACjCC,UAAU;IACVC,cAAc;IACdC,YAAY;IACZC;EACF,CAAC,GAAAJ,IAAA;EACC,MAAMK,YAAY,GAAGjB,WAAW,CAAC,MAAM;IACrCc,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAG,CAACD,UAAU,CAAC;EAC/B,CAAC,EAAE,CAACA,UAAU,EAAEC,cAAc,CAAC,CAAC;EAChC,oBACEf,KAAA,CAAAmB,aAAA,CAAAnB,KAAA,CAAAoB,QAAA,QACGH,YAAY,gBACXjB,KAAA,CAAAmB,aAAA,CAAChB,IAAI;IAACkB,KAAK,EAAE,CAACV,MAAM,CAACW,gBAAgB;EAAE,gBACrCtB,KAAA,CAAAmB,aAAA,CAACf,IAAI;IAACiB,KAAK,EAAEV,MAAM,CAACY,MAAO;IAACC,aAAa,EAAE;EAAE,GAC1CP,YACG,CACF,CAAC,GACL,IAAI,eACRjB,KAAA,CAAAmB,aAAA,CAAChB,IAAI;IAACkB,KAAK,EAAE,CAACV,MAAM,CAACc,eAAe,EAAEd,MAAM,CAACe,eAAe;EAAE,GAC3DV,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAEW,UAAU,gBACvB3B,KAAA,CAAAmB,aAAA,CAAAnB,KAAA,CAAAoB,QAAA,qBACEpB,KAAA,CAAAmB,aAAA,CAAChB,IAAI;IAACkB,KAAK,EAAEV,MAAM,CAACiB;EAAe,gBACjC5B,KAAA,CAAAmB,aAAA,CAACf,IAAI;IAACiB,KAAK,EAAEV,MAAM,CAACkB,SAAU;IAACL,aAAa,EAAE;EAAE,gBAC9CxB,KAAA,CAAAmB,aAAA,CAACf,IAAI;IAACiB,KAAK,EAAEV,MAAM,CAACmB;EAAK,GAAEvB,iBAAwB,CAAC,EACnDS,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEW,UACX,CAAC,eACP3B,KAAA,CAAAmB,aAAA,CAACf,IAAI;IAACiB,KAAK,EAAEV,MAAM,CAACoB,YAAa;IAACP,aAAa,EAAE;EAAE,gBACjDxB,KAAA,CAAAmB,aAAA,CAACf,IAAI;IAACiB,KAAK,EAAEV,MAAM,CAACmB;EAAK,GAAExB,oBAA2B,CAAC,EACtDU,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEgB,OACX,CACF,CAAC,eACPhC,KAAA,CAAAmB,aAAA,CAAChB,IAAI;IAACkB,KAAK,EAAE,CAACV,MAAM,CAACsB,eAAe,EAAEtB,MAAM,CAACuB,WAAW;EAAE,gBACxDlC,KAAA,CAAAmB,aAAA,CAACf,IAAI;IACHiB,KAAK,EAAE,CACLV,MAAM,CAACkB,SAAS,EAChBf,UAAU,GAAGH,MAAM,CAACwB,UAAU,GAAGxB,MAAM,CAACyB,QAAQ,EAChDzB,MAAM,CAACmB,IAAI;EACX,GAEDtB,YAAY,EACZM,UAAU,GAAGL,YAAY,CAAC4B,EAAE,GAAG5B,YAAY,CAAC6B,GACzC,CAAC,eACPtC,KAAA,CAAAmB,aAAA,CAACd,MAAM;IACLgB,KAAK,EAAEV,MAAM,CAAC4B,YAAa;IAC3BC,aAAa,EAAEtB,YAAa;IAC5BuB,KAAK,EAAE3B;EAAW,CACnB,CACG,CACN,CAAC,gBAEHd,KAAA,CAAAmB,aAAA,CAAChB,IAAI;IAACkB,KAAK,EAAE,CAACV,MAAM,CAAC+B,mBAAmB;EAAE,gBACxC1C,KAAA,CAAAmB,aAAA,CAACf,IAAI;IAACiB,KAAK,EAAEV,MAAM,CAACgC;EAAW,GAAEjC,sBAA6B,CAC1D,CAEJ,CACN,CAAC;AAEP,CAAC;AAED,4BAAeR,IAAI,CAACU,MAAM,CAAC"}
|