mirror of
https://github.com/ecency/ecency-mobile.git
synced 2024-11-24 00:46:27 +03:00
Merge branch 'development' of https://github.com/ecency/ecency-mobile into development
This commit is contained in:
commit
20333425c7
@ -14,6 +14,8 @@
|
||||
0516471224D2C513005DE9C5 /* eshare.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0516470824D2C513005DE9C5 /* eshare.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
053EA30026B2B9920082FEB9 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053EA2FF26B2B9920082FEB9 /* File.swift */; };
|
||||
053EA30326B2BA150082FEB9 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053EA30226B2BA150082FEB9 /* File.swift */; };
|
||||
057A51A42AD4962300E9A768 /* NotificationService.m in Sources */ = {isa = PBXBuildFile; fileRef = 057A51A32AD4962300E9A768 /* NotificationService.m */; };
|
||||
057A51A82AD4962300E9A768 /* ImageNotifi.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 057A51A02AD4962300E9A768 /* ImageNotifi.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
05B6C49224C306CE00B7FA60 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||
05B6C49424C306CE00B7FA60 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58190B3B23294814000EA0E1 /* StoreKit.framework */; };
|
||||
05B6C49724C306CE00B7FA60 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||
@ -30,6 +32,7 @@
|
||||
58F9BCC624793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; };
|
||||
58F9BCC724793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; };
|
||||
58F9BCC824793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; };
|
||||
5F7A94E248006221381F7D50 /* libPods-Ecency-ImageNotifi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00F37CDCAC8340FCA11DB6F4 /* libPods-Ecency-ImageNotifi.a */; };
|
||||
7C8D083700274C80BADEB3D6 /* Sansation_Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F1D77AE9F7B24CF19834052B /* Sansation_Bold.ttf */; };
|
||||
872EB06D13C728B5C4C733E4 /* libPods-Ecency.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A897E6535C5B45DDED43406D /* libPods-Ecency.a */; };
|
||||
89D99F65314A416290F8D921 /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 64F2A611E6EF486C8D3FB82C /* Roboto.ttf */; };
|
||||
@ -45,6 +48,13 @@
|
||||
remoteGlobalIDString = 0516470724D2C513005DE9C5;
|
||||
remoteInfo = eshare;
|
||||
};
|
||||
057A51A62AD4962300E9A768 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 057A519F2AD4962300E9A768;
|
||||
remoteInfo = ImageNotifi;
|
||||
};
|
||||
2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||
@ -76,6 +86,7 @@
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
0516471224D2C513005DE9C5 /* eshare.appex in Embed App Extensions */,
|
||||
057A51A82AD4962300E9A768 /* ImageNotifi.appex in Embed App Extensions */,
|
||||
);
|
||||
name = "Embed App Extensions";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -88,6 +99,7 @@
|
||||
00E356EE1AD99517003FC87E /* EcencyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EcencyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
00E356F21AD99517003FC87E /* EcencyTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EcencyTests.m; sourceTree = "<group>"; };
|
||||
00F37CDCAC8340FCA11DB6F4 /* libPods-Ecency-ImageNotifi.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Ecency-ImageNotifi.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
0516470824D2C513005DE9C5 /* eshare.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = eshare.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
0516470A24D2C513005DE9C5 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = "<group>"; };
|
||||
0516470D24D2C513005DE9C5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };
|
||||
@ -96,6 +108,10 @@
|
||||
053EA2FF26B2B9920082FEB9 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = "<group>"; };
|
||||
053EA30126B2BA140082FEB9 /* EcencyTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "EcencyTests-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
053EA30226B2BA150082FEB9 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = "<group>"; };
|
||||
057A51A02AD4962300E9A768 /* ImageNotifi.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ImageNotifi.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
057A51A22AD4962300E9A768 /* NotificationService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationService.h; sourceTree = "<group>"; };
|
||||
057A51A32AD4962300E9A768 /* NotificationService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationService.m; sourceTree = "<group>"; };
|
||||
057A51A52AD4962300E9A768 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
05A14D162518B03000EB7509 /* Ecency-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Ecency-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
05B6C4B724C306CE00B7FA60 /* Ecency.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ecency.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
06844A5429119F05002FCC34 /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = Ecency/BootSplash.storyboard; sourceTree = "<group>"; };
|
||||
@ -118,6 +134,7 @@
|
||||
34E88D888DD444F8B285363C /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
|
||||
420ABF9795564845A0963C27 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = "<group>"; };
|
||||
4EB466C53BAE4EDC904357B3 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; };
|
||||
557F629CF9A41CBDA5C9B081 /* Pods-Ecency-ImageNotifi.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-ImageNotifi.release.xcconfig"; path = "Target Support Files/Pods-Ecency-ImageNotifi/Pods-Ecency-ImageNotifi.release.xcconfig"; sourceTree = "<group>"; };
|
||||
5795D1B1C55E46FF96CC4AED /* RobotoMono-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-Regular.ttf"; path = "../src/assets/fonts/RobotoMono-Regular.ttf"; sourceTree = "<group>"; };
|
||||
58190B3B23294814000EA0E1 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
|
||||
58190B3D23294823000EA0E1 /* Ecency.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Ecency.entitlements; path = Ecency/Ecency.entitlements; sourceTree = "<group>"; };
|
||||
@ -128,6 +145,7 @@
|
||||
58F6300F2350580B0017C953 /* libRealmJS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRealmJS.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
58F9BCC224793C61004F0790 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||
5ADE4B4B75DF437495E202D4 /* Sansation_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Sansation_Regular.ttf; path = ../src/assets/fonts/Sansation_Regular.ttf; sourceTree = "<group>"; };
|
||||
637FA180975081FC81437804 /* Pods-Ecency-ImageNotifi.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-ImageNotifi.debug.xcconfig"; path = "Target Support Files/Pods-Ecency-ImageNotifi/Pods-Ecency-ImageNotifi.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
64F2A611E6EF486C8D3FB82C /* Roboto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto.ttf; path = ../src/assets/fonts/Roboto.ttf; sourceTree = "<group>"; };
|
||||
65F56948860941D6BA55779F /* rubicon-icon-font.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "rubicon-icon-font.ttf"; path = "../src/assets/fonts/rubicon-icon-font.ttf"; sourceTree = "<group>"; };
|
||||
6D935B44FB5A4CF3BF4D01DF /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
|
||||
@ -163,6 +181,14 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
057A519D2AD4962300E9A768 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5F7A94E248006221381F7D50 /* libPods-Ecency-ImageNotifi.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
05B6C49324C306CE00B7FA60 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@ -220,6 +246,16 @@
|
||||
path = eshare;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
057A51A12AD4962300E9A768 /* ImageNotifi */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
057A51A22AD4962300E9A768 /* NotificationService.h */,
|
||||
057A51A32AD4962300E9A768 /* NotificationService.m */,
|
||||
057A51A52AD4962300E9A768 /* Info.plist */,
|
||||
);
|
||||
path = ImageNotifi;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
13B07FAE1A68108700A75B9A /* Ecency */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@ -246,6 +282,8 @@
|
||||
25630E9BE79833145F3E34B9 /* Pods-Ecency.release.xcconfig */,
|
||||
7246575DADCA4488EC9D462A /* Pods-Ecency-EcencyTests.debug.xcconfig */,
|
||||
17B14A55DE011F4183CA4FA1 /* Pods-Ecency-EcencyTests.release.xcconfig */,
|
||||
637FA180975081FC81437804 /* Pods-Ecency-ImageNotifi.debug.xcconfig */,
|
||||
557F629CF9A41CBDA5C9B081 /* Pods-Ecency-ImageNotifi.release.xcconfig */,
|
||||
);
|
||||
path = Pods;
|
||||
sourceTree = "<group>";
|
||||
@ -261,6 +299,7 @@
|
||||
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
|
||||
A897E6535C5B45DDED43406D /* libPods-Ecency.a */,
|
||||
2AEEE72F26D37DC0AC8A99C2 /* libPods-Ecency-EcencyTests.a */,
|
||||
00F37CDCAC8340FCA11DB6F4 /* libPods-Ecency-ImageNotifi.a */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
@ -297,8 +336,8 @@
|
||||
588A5065232A497100FC1361 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
588A506A232A497100FC1361 /* libReactNativeConfig.a */,
|
||||
588A506C232A497100FC1361 /* libReactNativeConfig-tvOS.a */,
|
||||
588A506A232A497100FC1361 /* libRNCConfig.a */,
|
||||
588A506C232A497100FC1361 /* libRNCConfig-tvOS.a */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@ -327,6 +366,7 @@
|
||||
832341AE1AAA6A7D00B99B32 /* Libraries */,
|
||||
00E356EF1AD99517003FC87E /* EcencyTests */,
|
||||
0516470924D2C513005DE9C5 /* eshare */,
|
||||
057A51A12AD4962300E9A768 /* ImageNotifi */,
|
||||
83CBBA001A601CBA00E9B192 /* Products */,
|
||||
2D16E6871FA4F8E400B85C8A /* Frameworks */,
|
||||
258E34A3BDFFFBF80D598187 /* Pods */,
|
||||
@ -346,6 +386,7 @@
|
||||
2D02E4901E0B4A5D006451C7 /* Ecency-tvOSTests.xctest */,
|
||||
05B6C4B724C306CE00B7FA60 /* Ecency.app */,
|
||||
0516470824D2C513005DE9C5 /* eshare.appex */,
|
||||
057A51A02AD4962300E9A768 /* ImageNotifi.appex */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@ -390,6 +431,25 @@
|
||||
productReference = 0516470824D2C513005DE9C5 /* eshare.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
057A519F2AD4962300E9A768 /* ImageNotifi */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 057A51A92AD4962400E9A768 /* Build configuration list for PBXNativeTarget "ImageNotifi" */;
|
||||
buildPhases = (
|
||||
1C81C8F285F08986579878AD /* [CP] Check Pods Manifest.lock */,
|
||||
057A519C2AD4962300E9A768 /* Sources */,
|
||||
057A519D2AD4962300E9A768 /* Frameworks */,
|
||||
057A519E2AD4962300E9A768 /* Resources */,
|
||||
8ED85028D513D87F748AB30C /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ImageNotifi;
|
||||
productName = ImageNotifi;
|
||||
productReference = 057A51A02AD4962300E9A768 /* ImageNotifi.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
05B6C48C24C306CE00B7FA60 /* Ecency */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 05B6C4B424C306CE00B7FA60 /* Build configuration list for PBXNativeTarget "Ecency" */;
|
||||
@ -411,6 +471,7 @@
|
||||
);
|
||||
dependencies = (
|
||||
0516471124D2C513005DE9C5 /* PBXTargetDependency */,
|
||||
057A51A72AD4962300E9A768 /* PBXTargetDependency */,
|
||||
);
|
||||
name = Ecency;
|
||||
productName = Ecency;
|
||||
@ -460,8 +521,8 @@
|
||||
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
DefaultBuildSystemTypeForWorkspace = Original;
|
||||
LastSwiftUpdateCheck = 1160;
|
||||
DefaultBuildSystemTypeForWorkspace = Latest;
|
||||
LastSwiftUpdateCheck = 1430;
|
||||
LastUpgradeCheck = 1230;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
@ -476,6 +537,9 @@
|
||||
DevelopmentTeam = 75B6RXTKGT;
|
||||
ProvisioningStyle = Manual;
|
||||
};
|
||||
057A519F2AD4962300E9A768 = {
|
||||
CreatedOnToolsVersion = 14.3.1;
|
||||
};
|
||||
05B6C48C24C306CE00B7FA60 = {
|
||||
DevelopmentTeam = 75B6RXTKGT;
|
||||
LastSwiftMigration = 1160;
|
||||
@ -517,21 +581,24 @@
|
||||
2D02E47A1E0B4A5D006451C7 /* Ecency-tvOS */,
|
||||
2D02E48F1E0B4A5D006451C7 /* Ecency-tvOSTests */,
|
||||
0516470724D2C513005DE9C5 /* eshare */,
|
||||
057A519F2AD4962300E9A768 /* ImageNotifi */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXReferenceProxy section */
|
||||
588A506A232A497100FC1361 /* libReactNativeConfig.a */ = {
|
||||
588A506A232A497100FC1361 /* libRNCConfig.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
name = libRNCConfig.a;
|
||||
path = libReactNativeConfig.a;
|
||||
remoteRef = 588A5069232A497100FC1361 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
588A506C232A497100FC1361 /* libReactNativeConfig-tvOS.a */ = {
|
||||
588A506C232A497100FC1361 /* libRNCConfig-tvOS.a */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = archive.ar;
|
||||
name = "libRNCConfig-tvOS.a";
|
||||
path = "libReactNativeConfig-tvOS.a";
|
||||
remoteRef = 588A506B232A497100FC1361 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
@ -555,6 +622,13 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
057A519E2AD4962300E9A768 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
05B6C49624C306CE00B7FA60 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@ -696,6 +770,28 @@
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Ecency/Pods-Ecency-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
1C81C8F285F08986579878AD /* [CP] Check Pods Manifest.lock */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||
"${PODS_ROOT}/Manifest.lock",
|
||||
);
|
||||
name = "[CP] Check Pods Manifest.lock";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
"$(DERIVED_FILE_DIR)/Pods-Ecency-ImageNotifi-checkManifestLockResult.txt",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
2C87F1D159FEC7C0B7E3D88E /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@ -770,6 +866,60 @@
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
8ED85028D513D87F748AB30C /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Ecency-ImageNotifi/Pods-Ecency-ImageNotifi-resources.sh",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Entypo.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Feather.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Foundation.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Octicons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf",
|
||||
"${PODS_ROOT}/../../node_modules/react-native-vector-icons/Fonts/Zocial.ttf",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
|
||||
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AntDesign.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Entypo.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EvilIcons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Feather.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Brands.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Regular.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/FontAwesome5_Solid.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Fontisto.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Foundation.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Ionicons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialCommunityIcons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MaterialIcons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Octicons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SimpleLineIcons.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Zocial.ttf",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Ecency-ImageNotifi/Pods-Ecency-ImageNotifi-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
971975A45C595703A4946EE4 /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@ -922,6 +1072,14 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
057A519C2AD4962300E9A768 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
057A51A42AD4962300E9A768 /* NotificationService.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
05B6C48F24C306CE00B7FA60 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@ -956,6 +1114,11 @@
|
||||
target = 0516470724D2C513005DE9C5 /* eshare */;
|
||||
targetProxy = 0516471024D2C513005DE9C5 /* PBXContainerItemProxy */;
|
||||
};
|
||||
057A51A72AD4962300E9A768 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 057A519F2AD4962300E9A768 /* ImageNotifi */;
|
||||
targetProxy = 057A51A62AD4962300E9A768 /* PBXContainerItemProxy */;
|
||||
};
|
||||
2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 2D02E47A1E0B4A5D006451C7 /* Ecency-tvOS */;
|
||||
@ -1119,6 +1282,83 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
057A51AA2AD4962400E9A768 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 637FA180975081FC81437804 /* Pods-Ecency-ImageNotifi.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_IDENTITY = "iPhone Distribution";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
DEVELOPMENT_TEAM = 75B6RXTKGT;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = ImageNotifi/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = ImageNotifi;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.4;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = app.esteem.mobile.ios.ImageNotifi;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
057A51AB2AD4962400E9A768 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 557F629CF9A41CBDA5C9B081 /* Pods-Ecency-ImageNotifi.release.xcconfig */;
|
||||
buildSettings = {
|
||||
CLANG_ANALYZER_NONNULL = YES;
|
||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = 75B6RXTKGT;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = ImageNotifi/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = ImageNotifi;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 16.4;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
MTL_FAST_MATH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = app.esteem.mobile.ios.ImageNotifi;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
05B6C4B524C306CE00B7FA60 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = AEF4CD0A8BA6A1EC68545063 /* Pods-Ecency.debug.xcconfig */;
|
||||
@ -1536,6 +1776,15 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
057A51A92AD4962400E9A768 /* Build configuration list for PBXNativeTarget "ImageNotifi" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
057A51AA2AD4962400E9A768 /* Debug */,
|
||||
057A51AB2AD4962400E9A768 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
05B6C4B424C306CE00B7FA60 /* Build configuration list for PBXNativeTarget "Ecency" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
|
@ -13,6 +13,7 @@
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.com.ecency.eshare</string>
|
||||
<string>group.com.ecency.notifi</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
@ -7,6 +7,7 @@
|
||||
<key>com.apple.security.application-groups</key>
|
||||
<array>
|
||||
<string>group.com.ecency.eshare</string>
|
||||
<string>group.com.ecency.notifi</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
13
ios/ImageNotifi/Info.plist
Normal file
13
ios/ImageNotifi/Info.plist
Normal file
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSExtension</key>
|
||||
<dict>
|
||||
<key>NSExtensionPointIdentifier</key>
|
||||
<string>com.apple.usernotifications.service</string>
|
||||
<key>NSExtensionPrincipalClass</key>
|
||||
<string>NotificationService</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
12
ios/ImageNotifi/NotificationService.h
Normal file
12
ios/ImageNotifi/NotificationService.h
Normal file
@ -0,0 +1,12 @@
|
||||
//
|
||||
// NotificationService.h
|
||||
// ImageNotifi
|
||||
//
|
||||
// Created by Feruz Muradov on 2023-10-09.
|
||||
//
|
||||
|
||||
#import <UserNotifications/UserNotifications.h>
|
||||
|
||||
@interface NotificationService : UNNotificationServiceExtension
|
||||
|
||||
@end
|
34
ios/ImageNotifi/NotificationService.m
Normal file
34
ios/ImageNotifi/NotificationService.m
Normal file
@ -0,0 +1,34 @@
|
||||
//
|
||||
// NotificationService.m
|
||||
// ImageNotifi
|
||||
//
|
||||
// Created by Feruz Muradov on 2023-10-09.
|
||||
//
|
||||
|
||||
#import "NotificationService.h"
|
||||
#import "FirebaseMessaging.h"
|
||||
|
||||
@interface NotificationService ()
|
||||
|
||||
@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
|
||||
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
|
||||
|
||||
@end
|
||||
|
||||
@implementation NotificationService
|
||||
|
||||
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
|
||||
self.contentHandler = contentHandler;
|
||||
self.bestAttemptContent = [request.content mutableCopy];
|
||||
|
||||
// Modify the notification content here...
|
||||
[[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent withContentHandler:contentHandler];
|
||||
}
|
||||
|
||||
- (void)serviceExtensionTimeWillExpire {
|
||||
// Called just before the extension will be terminated by the system.
|
||||
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
|
||||
self.contentHandler(self.bestAttemptContent);
|
||||
}
|
||||
|
||||
@end
|
@ -38,6 +38,10 @@ target 'Ecency' do
|
||||
# Pods for testing
|
||||
end
|
||||
|
||||
target 'ImageNotifi' do
|
||||
inherit! :complete
|
||||
end
|
||||
|
||||
# Convert all permission pods into static libraries
|
||||
pre_install do |installer|
|
||||
Pod::Installer::Xcode::TargetValidator.send(:define_method, :verify_no_static_framework_transitive_dependencies) {}
|
||||
|
@ -595,6 +595,8 @@ PODS:
|
||||
- Firebase/Messaging (= 8.15.0)
|
||||
- React-Core
|
||||
- RNFBApp
|
||||
- RNFlashList (1.6.1):
|
||||
- React-Core
|
||||
- RNGestureHandler (2.9.0):
|
||||
- React-Core
|
||||
- RNIap (12.8.2):
|
||||
@ -764,6 +766,7 @@ DEPENDENCIES:
|
||||
- "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
|
||||
- "RNFBDynamicLinks (from `../node_modules/@react-native-firebase/dynamic-links`)"
|
||||
- "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)"
|
||||
- "RNFlashList (from `../node_modules/@shopify/flash-list`)"
|
||||
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
|
||||
- RNIap (from `../node_modules/react-native-iap`)
|
||||
- RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`)
|
||||
@ -957,6 +960,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/@react-native-firebase/dynamic-links"
|
||||
RNFBMessaging:
|
||||
:path: "../node_modules/@react-native-firebase/messaging"
|
||||
RNFlashList:
|
||||
:path: "../node_modules/@shopify/flash-list"
|
||||
RNGestureHandler:
|
||||
:path: "../node_modules/react-native-gesture-handler"
|
||||
RNIap:
|
||||
@ -1084,6 +1089,7 @@ SPEC CHECKSUMS:
|
||||
RNFBApp: e4439717c23252458da2b41b81b4b475c86f90c4
|
||||
RNFBDynamicLinks: 538840f6e3f58511f857d15df1bc25ed655dc283
|
||||
RNFBMessaging: 40dac204b4197a2661dec5be964780c6ec39bf65
|
||||
RNFlashList: 236646d48f224a034f35baa0242e1b77db063b1e
|
||||
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
|
||||
RNIap: 90997da52f9ab2f42bf80e2bcec11e96c9fba2e3
|
||||
RNImageCropPicker: 14fe1c29298fb4018f3186f455c475ab107da332
|
||||
@ -1103,6 +1109,6 @@ SPEC CHECKSUMS:
|
||||
Yoga: 92d086bb705a41cc588599b51db726ba7b1d341c
|
||||
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
|
||||
|
||||
PODFILE CHECKSUM: 88d8c7dd2ade9033785999cb2cc59fe10485fc64
|
||||
PODFILE CHECKSUM: dc3c4fda8abe00a19e8a83cff9a73a20bdaa5b4a
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
|
@ -58,6 +58,7 @@
|
||||
"@react-navigation/native-stack": "^6.7.0",
|
||||
"@react-navigation/stack": "^6.2.2",
|
||||
"@reduxjs/toolkit": "^1.8.6",
|
||||
"@shopify/flash-list": "^1.6.1",
|
||||
"@tanstack/query-async-storage-persister": "^4.3.9",
|
||||
"@tanstack/react-query": "^4.3.9",
|
||||
"@tanstack/react-query-persist-client": "^4.3.9",
|
||||
|
28
patches/react-native-fast-image+8.6.3.patch
Normal file
28
patches/react-native-fast-image+8.6.3.patch
Normal file
@ -0,0 +1,28 @@
|
||||
diff --git a/node_modules/react-native-fast-image/ios/FastImage/FFFastImageView.m b/node_modules/react-native-fast-image/ios/FastImage/FFFastImageView.m
|
||||
index f710081..fe20770 100644
|
||||
--- a/node_modules/react-native-fast-image/ios/FastImage/FFFastImageView.m
|
||||
+++ b/node_modules/react-native-fast-image/ios/FastImage/FFFastImageView.m
|
||||
@@ -73,12 +73,17 @@ - (void) setImageColor: (UIColor*)imageColor {
|
||||
|
||||
- (UIImage*) makeImage: (UIImage*)image withTint: (UIColor*)color {
|
||||
UIImage* newImage = [image imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate];
|
||||
- UIGraphicsBeginImageContextWithOptions(image.size, NO, newImage.scale);
|
||||
- [color set];
|
||||
- [newImage drawInRect: CGRectMake(0, 0, image.size.width, newImage.size.height)];
|
||||
- newImage = UIGraphicsGetImageFromCurrentImageContext();
|
||||
- UIGraphicsEndImageContext();
|
||||
- return newImage;
|
||||
+
|
||||
+ UIGraphicsImageRendererFormat *format = [UIGraphicsImageRendererFormat defaultFormat];
|
||||
+ UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:image.size format:format];
|
||||
+
|
||||
+ UIImage *resultImage = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
|
||||
+ CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
|
||||
+ [color set];
|
||||
+ [newImage drawInRect:rect];
|
||||
+ }];
|
||||
+
|
||||
+ return resultImage;
|
||||
}
|
||||
|
||||
- (void) setImage: (UIImage*)image {
|
@ -1,5 +1,6 @@
|
||||
import React, { useState, Fragment, useRef } from 'react';
|
||||
import { FlatList, Text } from 'react-native';
|
||||
import { Text } from 'react-native';
|
||||
import { FlashList } from '@shopify/flash-list';
|
||||
import get from 'lodash/get';
|
||||
import { useIntl } from 'react-intl';
|
||||
|
||||
@ -133,7 +134,6 @@ const CommentsView = ({
|
||||
isLoggedIn={isLoggedIn}
|
||||
showAllComments={showAllComments}
|
||||
isShowSubComments={isShowSubComments}
|
||||
key={get(item, 'permlink')}
|
||||
marginLeft={marginLeft}
|
||||
handleOnLongPress={() => _openCommentMenu(item)}
|
||||
openReplyThread={() => _openReplyThread(item)}
|
||||
@ -168,18 +168,18 @@ const CommentsView = ({
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<FlatList
|
||||
style={{ ...styles.list, ...styleOerride }}
|
||||
contentContainerStyle={{ padding: 0 }}
|
||||
<FlashList
|
||||
contentContainerStyle={{ padding: 0, ...styles.list, ...styleOerride, }}
|
||||
data={comments}
|
||||
renderItem={_renderItem}
|
||||
keyExtractor={(item) => item.author + item.permlink}
|
||||
renderItem={_renderItem}
|
||||
ListEmptyComponent={_renderEmptyContent()}
|
||||
ListHeaderComponent={postContentView}
|
||||
overScrollMode="never"
|
||||
onEndReachedThreshold={1}
|
||||
maxToRenderPerBatch={7}
|
||||
initialNumToRender={5}
|
||||
estimatedItemSize={100}
|
||||
windowSize={10}
|
||||
{...flatListProps}
|
||||
/>
|
||||
|
@ -22,7 +22,6 @@ export const CommentsSection = ({ item, index, revealReplies, ...props }) => {
|
||||
return (
|
||||
<Animated.View key={item.author + item.permlink} entering={_enteringAnim}>
|
||||
<Comment
|
||||
key={item.author + item.permlink}
|
||||
comment={item}
|
||||
repliesToggle={toggle}
|
||||
handleOnToggleReplies={() => setToggle(!toggle)}
|
||||
|
@ -10,7 +10,8 @@ import React, {
|
||||
import { ActivityIndicator, Platform, Text } from 'react-native';
|
||||
import { useIntl } from 'react-intl';
|
||||
import { useNavigation } from '@react-navigation/native';
|
||||
import { FlatList, RefreshControl } from 'react-native-gesture-handler';
|
||||
import { RefreshControl } from 'react-native-gesture-handler';
|
||||
import { FlashList } from '@shopify/flash-list';
|
||||
|
||||
// Components
|
||||
import { postBodySummary } from '@ecency/render-helper';
|
||||
@ -63,7 +64,7 @@ const PostComments = forwardRef(
|
||||
|
||||
const writeCommentRef = useRef(null);
|
||||
const postInteractionRef = useRef<typeof PostHtmlInteractionHandler|null>(null);
|
||||
const commentsListRef = useRef<FlatList | null>(null);
|
||||
const commentsListRef = useRef<FlashList<any> | null>(null);
|
||||
|
||||
const [selectedFilter, setSelectedFilter] = useState('trending');
|
||||
const [selectedOptionIndex, setSelectedOptionIndex] = useState(0);
|
||||
@ -309,20 +310,17 @@ const PostComments = forwardRef(
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<FlatList
|
||||
<FlashList
|
||||
ref={commentsListRef}
|
||||
style={styles.list}
|
||||
keyExtractor={(item) => `${item.author}/${item.permlink}`}
|
||||
contentContainerStyle={styles.listContent}
|
||||
ListHeaderComponent={_postContentView}
|
||||
ListEmptyComponent={_renderEmptyContent}
|
||||
data={isPostLoading ? [] : sortedSections}
|
||||
onContentSizeChange={_onContentSizeChange}
|
||||
estimatedItemSize={104}
|
||||
renderItem={_renderItem}
|
||||
keyExtractor={(item) => `${item.author}/${item.permlink}`}
|
||||
initialNumToRender={6}
|
||||
maxToRenderPerBatch={6}
|
||||
updateCellsBatchingPeriod={100}
|
||||
windowSize={13}
|
||||
refreshControl={
|
||||
<RefreshControl
|
||||
refreshing={refreshing}
|
||||
|
@ -33,9 +33,9 @@ const PostDisplayContainer = ({
|
||||
const dispatch = useAppDispatch();
|
||||
const navigation = useNavigation();
|
||||
|
||||
const currentAccount = useAppSelector(state => state.account.currentAccount);
|
||||
const isLoggedIn = useAppSelector(state => state.application.isLoggedIn);
|
||||
const pinCode = useAppSelector(state => state.application.pin);
|
||||
const currentAccount = useAppSelector((state) => state.account.currentAccount);
|
||||
const isLoggedIn = useAppSelector((state) => state.application.isLoggedIn);
|
||||
const pinCode = useAppSelector((state) => state.application.pin);
|
||||
|
||||
const [activeVotes, setActiveVotes] = useState([]);
|
||||
const [activeVotesCount, setActiveVotesCount] = useState(0);
|
||||
@ -45,8 +45,9 @@ const PostDisplayContainer = ({
|
||||
if (post) {
|
||||
console.log('Gettting reblogs inside postDisplayContainer');
|
||||
const votes = get(post, 'active_votes', []);
|
||||
const activeVotesCount = get(post, 'stats.total_votes', 0);
|
||||
setActiveVotes(votes);
|
||||
setActiveVotesCount(votes.length);
|
||||
setActiveVotesCount(activeVotesCount);
|
||||
getPostReblogs(post).then((result) => {
|
||||
setReblogs(result || []);
|
||||
});
|
||||
@ -124,15 +125,12 @@ const PostDisplayContainer = ({
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
const _fetchPost = async () => {
|
||||
if (post) {
|
||||
fetchPost(post.author, post.permlink);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
<PostDisplayView
|
||||
author={author}
|
||||
@ -153,10 +151,8 @@ const PostDisplayContainer = ({
|
||||
handleOnReplyPress={_handleOnReplyPress}
|
||||
handleOnVotersPress={_handleOnVotersPress}
|
||||
handleOnReblogsPress={_handleOnReblogsPress}
|
||||
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
export default PostDisplayContainer;
|
||||
|
@ -13,8 +13,8 @@ import {
|
||||
RefreshControl,
|
||||
ActivityIndicator,
|
||||
View,
|
||||
Alert,
|
||||
} from 'react-native';
|
||||
import { FlashList } from '@shopify/flash-list';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useNavigation } from '@react-navigation/native';
|
||||
import { useIntl } from 'react-intl';
|
||||
@ -267,7 +267,7 @@ const postsListContainer = (
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<FlatList
|
||||
<FlashList
|
||||
ref={flatListRef}
|
||||
data={cacheInjectedData}
|
||||
showsVerticalScrollIndicator={false}
|
||||
@ -276,6 +276,7 @@ const postsListContainer = (
|
||||
onEndReachedThreshold={1}
|
||||
maxToRenderPerBatch={5}
|
||||
initialNumToRender={3}
|
||||
estimatedItemSize={609}
|
||||
windowSize={8}
|
||||
extraData={[imageRatios, reblogsCollectionRef.current, votesCache]}
|
||||
onEndReached={_onEndReached}
|
||||
|
@ -16,10 +16,10 @@ import {
|
||||
import { deepLinkParser } from '../../utils/deepLinkParser';
|
||||
import RootNavigation from '../../navigation/rootNavigation';
|
||||
import getWindowDimensions from '../../utils/getWindowDimensions';
|
||||
import { isHiveUri } from '../../utils/hive-uri';
|
||||
import { handleHiveUriOperation } from '../../providers/hive/dhive';
|
||||
import { isHiveUri, getFormattedTx } from '../../utils/hive-uri';
|
||||
import { handleHiveUriOperation, resolveTransaction } from '../../providers/hive/dhive';
|
||||
import bugsnagInstance from '../../config/bugsnag';
|
||||
import { get, isArray } from 'lodash';
|
||||
import { get } from 'lodash';
|
||||
import showLoginAlert from '../../utils/showLoginAlert';
|
||||
import authType from '../../constants/authType';
|
||||
import { delay } from '../../utils/editor';
|
||||
@ -156,55 +156,70 @@ export const QRModal = ({}: QRModalProps) => {
|
||||
}
|
||||
|
||||
const parsed = hiveuri.decode(uri);
|
||||
// resolve the decoded tx and params to a signable tx
|
||||
let { tx, signer } = hiveuri.resolveTransaction(parsed.tx, parsed.params, {
|
||||
signers: currentAccount.name,
|
||||
preferred_signer: currentAccount.name,
|
||||
});
|
||||
const operations = get(tx, 'operations', []);
|
||||
if (!_checkOpsArray(operations)) {
|
||||
Alert.alert(
|
||||
intl.formatMessage({
|
||||
id: 'qr.multi_array_ops_alert',
|
||||
}),
|
||||
intl.formatMessage({
|
||||
id: 'qr.multi_array_ops_aler_desct',
|
||||
}),
|
||||
);
|
||||
return;
|
||||
}
|
||||
dispatch(
|
||||
showActionModal({
|
||||
title: intl.formatMessage({
|
||||
id: 'qr.confirmTransaction',
|
||||
}),
|
||||
bodyContent: _checkOpsArray(operations) ? _renderActionModalBody(operations[0]) : null,
|
||||
buttons: [
|
||||
{
|
||||
text: intl.formatMessage({
|
||||
id: 'qr.cancel',
|
||||
const authoritiesMap = new Map();
|
||||
authoritiesMap.set('active', currentAccount?.local?.activeKey ? true : false);
|
||||
authoritiesMap.set('posting', currentAccount?.local?.postingKey ? true : false);
|
||||
authoritiesMap.set('owner', currentAccount?.local?.ownerKey ? true : false);
|
||||
authoritiesMap.set('memo', currentAccount?.local?.memoKey ? true : false);
|
||||
|
||||
getFormattedTx(parsed.tx, authoritiesMap)
|
||||
.then(async (formattedTx) => {
|
||||
// resolve the decoded tx and params to a signable tx
|
||||
const tx = await resolveTransaction(formattedTx.tx, parsed.params, currentAccount.name);
|
||||
const ops = get(tx, 'operations', []);
|
||||
const op = ops[0];
|
||||
|
||||
dispatch(
|
||||
showActionModal({
|
||||
title: intl.formatMessage({
|
||||
id: 'qr.confirmTransaction',
|
||||
}),
|
||||
onPress: () => {},
|
||||
style: 'cancel',
|
||||
},
|
||||
{
|
||||
text: intl.formatMessage({
|
||||
id: 'qr.approve',
|
||||
}),
|
||||
onPress: () => {
|
||||
handleHiveUriOperation(currentAccount, pinCode, uri)
|
||||
.then(() => {
|
||||
dispatch(toastNotification(intl.formatMessage({ id: 'alert.successful' })));
|
||||
})
|
||||
.catch((err) => {
|
||||
bugsnagInstance.notify(err);
|
||||
dispatch(toastNotification(intl.formatMessage({ id: 'alert.key_warning' })));
|
||||
});
|
||||
bodyContent: _renderActionModalBody(op, formattedTx.opName),
|
||||
buttons: [
|
||||
{
|
||||
text: intl.formatMessage({
|
||||
id: 'qr.cancel',
|
||||
}),
|
||||
onPress: () => {},
|
||||
style: 'cancel',
|
||||
},
|
||||
{
|
||||
text: intl.formatMessage({
|
||||
id: 'qr.approve',
|
||||
}),
|
||||
onPress: () => {
|
||||
handleHiveUriOperation(currentAccount, pinCode, tx)
|
||||
.then(() => {
|
||||
dispatch(toastNotification(intl.formatMessage({ id: 'alert.successful' })));
|
||||
})
|
||||
.catch((err) => {
|
||||
bugsnagInstance.notify(err);
|
||||
if (err) {
|
||||
dispatch(toastNotification(intl.formatMessage({ id: err })));
|
||||
} else {
|
||||
dispatch(
|
||||
toastNotification(intl.formatMessage({ id: 'qr.transaction_failed' })),
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
);
|
||||
})
|
||||
.catch((errObj) => {
|
||||
Alert.alert(
|
||||
intl.formatMessage({ id: errObj.errorKey1 }, { key: errObj.authorityKeyType }),
|
||||
intl.formatMessage(
|
||||
{
|
||||
id: errObj.errorKey2,
|
||||
},
|
||||
},
|
||||
],
|
||||
}),
|
||||
);
|
||||
{ key: errObj.authorityKeyType },
|
||||
),
|
||||
);
|
||||
return;
|
||||
});
|
||||
};
|
||||
|
||||
const _handleDeepLink = async (url) => {
|
||||
@ -221,11 +236,6 @@ export const QRModal = ({}: QRModalProps) => {
|
||||
}
|
||||
};
|
||||
|
||||
// check operation array is valid and is a single operation array
|
||||
const _checkOpsArray = (ops) => {
|
||||
return ops && isArray(ops) && ops.length === 1 && isArray(ops[0]) && ops[0].length === 2;
|
||||
};
|
||||
|
||||
const _renderTransactionInfoRow = (item: any) => (
|
||||
<View style={styles.transactionRow}>
|
||||
<Text numberOfLines={1} style={styles.transactionItem1}>
|
||||
@ -236,10 +246,10 @@ export const QRModal = ({}: QRModalProps) => {
|
||||
</Text>
|
||||
</View>
|
||||
);
|
||||
const _renderActionModalBody = (operations: any) => (
|
||||
const _renderActionModalBody = (operations: any, opName: string) => (
|
||||
<View style={styles.transactionBodyContainer}>
|
||||
<View style={styles.transactionHeadingContainer}>
|
||||
<Text style={styles.transactionHeading}>{operations[0]}</Text>
|
||||
<Text style={styles.transactionHeading}>{opName}</Text>
|
||||
</View>
|
||||
<View style={styles.transactionItemsContainer}>
|
||||
{Object.entries(operations[1]).map((item) => _renderTransactionInfoRow(item))}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import React, { useEffect } from 'react';
|
||||
import { Alert } from 'react-native'
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
|
||||
// Actions
|
||||
@ -18,7 +17,6 @@ const SideMenuContainer = ({ navigation }) => {
|
||||
const drawerStatus = useDrawerStatus();
|
||||
|
||||
|
||||
|
||||
const isLoggedIn = useSelector((state) => state.application.isLoggedIn);
|
||||
const currentAccount = useSelector((state) => state.account.currentAccount);
|
||||
const isVisibleAccountsBottomSheet = useSelector(
|
||||
|
@ -1041,11 +1041,30 @@
|
||||
"confirmTransaction": "Confirm transaction",
|
||||
"approve": "Approve",
|
||||
"cancel": "Cancel",
|
||||
"multi_array_ops_alert": "Multiple operations array detected!",
|
||||
"multi_array_ops_aler_desct": "Ecency does not support signing multiple operations, yet"
|
||||
"multi_array_ops_alert": "Operation not supported by Ecency",
|
||||
"multi_array_ops_aler_desct": "Ecency does not support signing multiple operations yet",
|
||||
"invalid_op": "Invalid operation data",
|
||||
"invalid_op_desc": "try contacting QR/link author",
|
||||
"invalid_amount": "Invalid Amount",
|
||||
"invalid_amount_desc": "Enter valid amount in proper format",
|
||||
"transaction_failed": "Transaction Failed!",
|
||||
"invalid_key": "{key} key is required to perform this transaction",
|
||||
"invalid_key_desc": "kindly login with {key} key or master key to perform this transaction"
|
||||
},
|
||||
"history": {
|
||||
"edit": "Edit History",
|
||||
"version": "Version"
|
||||
},
|
||||
"chain-error": {
|
||||
"min-root-comment": "You may only post once every five minutes.",
|
||||
"identical-vote": "Your current vote on this content is identical to this vote.",
|
||||
"insufficient-resource": "Insufficient Resource Credits.",
|
||||
"delete-comment-with-vote": "Cannot delete a content with positive pending rewards.",
|
||||
"comment-cashout": "Content after their payout cannot be deleted.",
|
||||
"comment-children": "Cannot delete a content with replies.",
|
||||
"paid-out-post-forbidden": "Voting for paid out content is not available.",
|
||||
"missing-authority": "This operation requires Active private key or authority.",
|
||||
"missing-owner-authority": "This operation requires Owner private key or authority.",
|
||||
"insufficient_fund": "Insufficient Funds"
|
||||
}
|
||||
}
|
||||
|
@ -2082,59 +2082,77 @@ export const votingPower = (account) => {
|
||||
};
|
||||
/* eslint-enable */
|
||||
|
||||
export const resolveTransaction = async (parsedTx, parsedParams, signer) => {
|
||||
const EXPIRE_TIME = 60 * 1000;
|
||||
const props = await client.database.getDynamicGlobalProperties();
|
||||
|
||||
// resolve the decoded tx and params to a signable tx
|
||||
const { tx } = hiveuri.resolveTransaction(parsedTx, parsedParams, {
|
||||
/* eslint-disable no-bitwise */
|
||||
ref_block_num: props.head_block_number & 0xffff,
|
||||
ref_block_prefix: Buffer.from(props.head_block_id, 'hex').readUInt32LE(4),
|
||||
expiration: new Date(Date.now() + client.broadcast.expireTime + EXPIRE_TIME)
|
||||
.toISOString()
|
||||
.slice(0, -5),
|
||||
signers: [signer],
|
||||
preferred_signer: signer,
|
||||
});
|
||||
tx.ref_block_num = parseInt(tx.ref_block_num + '', 10);
|
||||
tx.ref_block_prefix = parseInt(tx.ref_block_prefix + '', 10);
|
||||
|
||||
return tx;
|
||||
};
|
||||
|
||||
const handleChainError = (strErr: string) => {
|
||||
if (/You may only post once every/.test(strErr)) {
|
||||
return 'chain-error.min-root-comment';
|
||||
} else if (/Your current vote on this comment is identical/.test(strErr)) {
|
||||
return 'chain-error.identical-vote';
|
||||
} else if (/Please wait to transact, or power up/.test(strErr)) {
|
||||
return 'chain-error.insufficient-resource';
|
||||
} else if (/Cannot delete a comment with net positive/.test(strErr)) {
|
||||
return 'chain-error.delete-comment-with-vote';
|
||||
} else if (/children == 0/.test(strErr)) {
|
||||
return 'chain-error.comment-children';
|
||||
} else if (/comment_cashout/.test(strErr)) {
|
||||
return 'chain-error.comment-cashout';
|
||||
} else if (/Votes evaluating for comment that is paid out is forbidden/.test(strErr)) {
|
||||
return 'chain-error.paid-out-post-forbidden';
|
||||
} else if (/Missing Active Authority/.test(strErr)) {
|
||||
return 'chain-error.missing-authority';
|
||||
} else if (/Missing Owner Authority/.test(strErr)) {
|
||||
return 'chain-error.missing-owner-authority';
|
||||
} else if (/does not have sufficient funds/.test(strErr)) {
|
||||
return 'chain-error.insufficient_fund';
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
export const handleHiveUriOperation = async (
|
||||
currentAccount: any,
|
||||
pin: any,
|
||||
hiveUri: string,
|
||||
tx: any,
|
||||
): Promise<TransactionConfirmation> => {
|
||||
try {
|
||||
const digitPinCode = getDigitPinCode(pin);
|
||||
const key = getAnyPrivateKey(currentAccount.local, digitPinCode);
|
||||
const privateKey = PrivateKey.fromString(key);
|
||||
|
||||
const { head_block_number, head_block_id, time } = await getDynamicGlobalProperties();
|
||||
const ref_block_num = head_block_number & 0xffff;
|
||||
const ref_block_prefix = Buffer.from(head_block_id, 'hex').readUInt32LE(4);
|
||||
const expireTime = 60 * 1000;
|
||||
const chainId = Buffer.from(
|
||||
'beeab0de00000000000000000000000000000000000000000000000000000000',
|
||||
'hex',
|
||||
);
|
||||
const expiration = new Date(new Date(`${time}Z`).getTime() + expireTime)
|
||||
.toISOString()
|
||||
.slice(0, -5);
|
||||
const extensions = [];
|
||||
|
||||
|
||||
const parsed = hiveuri.decode(hiveUri)
|
||||
// resolve the decoded tx and params to a signable tx
|
||||
let { tx, signer } = hiveuri.resolveTransaction(parsed.tx, parsed.params, {
|
||||
|
||||
expiration,
|
||||
// accounts we are able to sign for
|
||||
signers: currentAccount.name,
|
||||
// selected signer if none is asked for by the params
|
||||
preferred_signer: currentAccount.name,
|
||||
});
|
||||
|
||||
|
||||
//inject raw ref_block_num and ref_block_prefex to avoid string converstion by hiveuri.resolveTransaction
|
||||
// e.g. from a get_dynamic_global_properties call
|
||||
tx.ref_block_num = ref_block_num;
|
||||
tx.ref_block_prefix = ref_block_prefix;
|
||||
|
||||
// console.log('tx : ', JSON.stringify(tx, null, 2));
|
||||
// console.log('tx : ', tx);
|
||||
const transaction = cryptoUtils.signTransaction(tx, privateKey, chainId);
|
||||
const trxId = generateTrxId(transaction);
|
||||
const resultHive = await client.broadcast.call('broadcast_transaction', [transaction]);
|
||||
const result = Object.assign({ id: trxId }, resultHive);
|
||||
// console.log('result : ', JSON.stringify(result, null, 2));
|
||||
return result;
|
||||
} catch (err) {
|
||||
const errString = handleChainError(err.toString());
|
||||
bugsnagInstance.notify(err, (event) => {
|
||||
event.context = 'handle-hive-uri-operations';
|
||||
event.setMetaData('hiveUri', hiveUri);
|
||||
event.context = 'handle-hive-uri-operation';
|
||||
event.setMetaData('tx', tx);
|
||||
});
|
||||
throw err;
|
||||
return Promise.reject(errString);
|
||||
}
|
||||
};
|
||||
|
@ -221,17 +221,55 @@ export const useWavesQuery = (host: string) => {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
const _data = unionBy(...wavesQueries.map((query) => query.data), 'url');
|
||||
|
||||
const _filteredData = useMemo(() =>
|
||||
_data.filter(post => isArray(mutes) ? mutes.indexOf(post?.author) < 0 : true),
|
||||
[mutes, _data])
|
||||
_data.filter(post => isArray(mutes) ? mutes.indexOf(post?.author) < 0 : true),
|
||||
[mutes, _data])
|
||||
|
||||
|
||||
|
||||
|
||||
const _lastestWavesFetch = async () => {
|
||||
|
||||
await _fetchPermlinks('', true);
|
||||
const _prevLatestWave = _filteredData[0]
|
||||
const _firstQuery = wavesQueries[0];
|
||||
|
||||
if(!_firstQuery){
|
||||
return [];
|
||||
}
|
||||
|
||||
const queryResponse = await _firstQuery.refetch();
|
||||
|
||||
const _newData:any[] = queryResponse.data || [];
|
||||
|
||||
//check if new waves are available
|
||||
const _lastIndex = _newData?.findIndex(item =>
|
||||
( item.author + item.permlink === _prevLatestWave.author + _prevLatestWave.permlink));
|
||||
|
||||
let _newWaves:any[] = []
|
||||
if (_lastIndex && _lastIndex !== 0) {
|
||||
if (_lastIndex < 0) {
|
||||
_newWaves = _newData?.slice(0, 5) || [];
|
||||
} else {
|
||||
_newWaves = _newData?.slice(0, _lastIndex) || [];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return _newWaves
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
data: _filteredData,
|
||||
isRefreshing,
|
||||
isLoading: isLoading || wavesQueries.lastItem?.isLoading || wavesQueries.lastItem?.isFetching,
|
||||
fetchNextPage: _fetchNextPage,
|
||||
latestWavesFetch: _lastestWavesFetch,
|
||||
refresh: _refresh,
|
||||
};
|
||||
};
|
||||
|
@ -464,7 +464,7 @@ class EditorContainer extends Component<EditorContainerProps, any> {
|
||||
// create new darft otherwise
|
||||
else if (draftField) {
|
||||
const { title, body, tags } = draftField;
|
||||
const draft = { title, body, tags, jsonMeta };
|
||||
const draft = { title, body, tags, meta: jsonMeta };
|
||||
const response = await addDraft(draft);
|
||||
const _resDraft = response.pop();
|
||||
|
||||
@ -708,7 +708,7 @@ class EditorContainer extends Component<EditorContainerProps, any> {
|
||||
|
||||
const { post } = this.state;
|
||||
|
||||
const _prefix = `re-${post.author.replace(/\./g, '')}`
|
||||
const _prefix = `re-${post.author.replace(/\./g, '')}`;
|
||||
const permlink = generateUniquePermlink(_prefix);
|
||||
|
||||
const parentAuthor = post.author;
|
||||
|
@ -1,5 +1,5 @@
|
||||
import React, { useRef, useState } from 'react';
|
||||
import { ActivityIndicator, NativeScrollEvent, NativeSyntheticEvent, RefreshControl, View, FlatList } from 'react-native';
|
||||
import React, { useEffect, useRef, useState } from 'react';
|
||||
import { ActivityIndicator, NativeScrollEvent, NativeSyntheticEvent, RefreshControl, View, FlatList, AppState, Alert } from 'react-native';
|
||||
import { Comments, EmptyScreen, Header, PostOptionsModal } from '../../../components';
|
||||
import styles from '../styles/wavesScreen.styles';
|
||||
import { wavesQueries } from '../../../providers/queries';
|
||||
@ -8,6 +8,7 @@ import WavesHeader from '../children/wavesHeader';
|
||||
import { PostTypes } from '../../../constants/postTypes';
|
||||
import ScrollTopPopup from '../../../components/tabbedPosts/view/scrollTopPopup';
|
||||
import { debounce } from 'lodash';
|
||||
import reactotron from 'reactotron-react-native';
|
||||
|
||||
|
||||
const SCROLL_POPUP_THRESHOLD = 5000;
|
||||
@ -19,16 +20,43 @@ const WavesScreen = () => {
|
||||
const postsListRef = useRef<FlatList>();
|
||||
const blockPopupRef = useRef(false);
|
||||
const scrollOffsetRef = useRef(0);
|
||||
const appState = useRef(AppState.currentState);
|
||||
|
||||
const wavesQuery = wavesQueries.useWavesQuery('ecency.waves');
|
||||
|
||||
const isDarkTheme = useAppSelector(state => state.application.isDarkTheme)
|
||||
|
||||
const [enableScrollTop, setEnableScrollTop] = useState(false);
|
||||
const [popupAvatars, setPopupAvatars] = useState<any[]>([])
|
||||
|
||||
|
||||
const _fetchData = ({ refresh }: { refresh?: boolean }) => {
|
||||
if (refresh) {
|
||||
useEffect(() => {
|
||||
const _stateSub = AppState.addEventListener('change', _handleAppStateChange);
|
||||
return () => {
|
||||
_stateSub.remove();
|
||||
}
|
||||
}, [])
|
||||
|
||||
|
||||
//actions
|
||||
const _handleAppStateChange = async (nextAppState) => {
|
||||
|
||||
if (
|
||||
appState.current.match(/inactive|background/) &&
|
||||
nextAppState === 'active'
|
||||
) {
|
||||
const latestWaves = await wavesQuery.latestWavesFetch()
|
||||
if (latestWaves.length > 0) {
|
||||
setPopupAvatars(latestWaves.map((item) => item.avatar))
|
||||
setEnableScrollTop(true)
|
||||
}
|
||||
}
|
||||
|
||||
appState.current = nextAppState;
|
||||
};
|
||||
|
||||
const _fetchData = (fetchProps: any) => {
|
||||
if (fetchProps?.refresh) {
|
||||
wavesQuery.refresh();
|
||||
} else {
|
||||
wavesQuery.fetchNextPage();
|
||||
@ -38,8 +66,9 @@ const WavesScreen = () => {
|
||||
//scrolls to top, blocks scroll popup for 2 seconds to reappear after scroll
|
||||
const _scrollTop = () => {
|
||||
if (postsListRef.current) {
|
||||
postsListRef.current.scrollToOffset({offset:0});
|
||||
postsListRef.current.scrollToOffset({ offset: 0 });
|
||||
setEnableScrollTop(false);
|
||||
setPopupAvatars([])
|
||||
scrollPopupDebouce.cancel();
|
||||
blockPopupRef.current = true;
|
||||
setTimeout(() => {
|
||||
@ -115,11 +144,12 @@ const WavesScreen = () => {
|
||||
}}
|
||||
/>
|
||||
<ScrollTopPopup
|
||||
popupAvatars={[]}
|
||||
popupAvatars={popupAvatars}
|
||||
enableScrollTop={enableScrollTop}
|
||||
onPress={_scrollTop}
|
||||
onClose={() => {
|
||||
setEnableScrollTop(false);
|
||||
setPopupAvatars([])
|
||||
}}
|
||||
/>
|
||||
</View>
|
||||
|
@ -1,4 +1,129 @@
|
||||
import { get, isArray } from 'lodash';
|
||||
const operationsData = require('./operations.json');
|
||||
|
||||
/**
|
||||
* checks if uri entered is valid hive uri
|
||||
* Accepts a string
|
||||
* Returns boolean if uri starts with 'hive://'
|
||||
* */
|
||||
|
||||
export const isHiveUri = (uri: string) => {
|
||||
let trimUri = uri.trim();
|
||||
return trimUri.startsWith('hive://');
|
||||
};
|
||||
|
||||
// check operation array is valid and is a single operation array
|
||||
const _checkOpsArray = (ops: any) => {
|
||||
return ops && isArray(ops) && ops.length === 1 && isArray(ops[0]) && ops[0].length === 2;
|
||||
};
|
||||
|
||||
const findParentKey = (obj, value, parentKey = null) => {
|
||||
for (let key in obj) {
|
||||
if (obj[key] === value) {
|
||||
return parentKey;
|
||||
} else if (typeof obj[key] === 'object') {
|
||||
const foundKey = findParentKey(obj[key], value, key);
|
||||
if (foundKey) {
|
||||
return foundKey;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
// get operation name and signer field from operation object
|
||||
const getOperationProps = (opName: string) => {
|
||||
const op = get(operationsData, opName, null);
|
||||
if (op) {
|
||||
const signerField = findParentKey(op, '__signer');
|
||||
return {
|
||||
opName: op.name,
|
||||
opAuthority: op.authority || '',
|
||||
signerField,
|
||||
};
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
// validate and format amount field in operation to 3 decimal places
|
||||
const _formatAmount = (amount: string) => {
|
||||
const splitAmt = amount.split(' ');
|
||||
if (
|
||||
splitAmt.length === 2 &&
|
||||
parseFloat(splitAmt[0]) &&
|
||||
(splitAmt[1] === 'HIVE' || splitAmt[1] === 'HBD')
|
||||
) {
|
||||
return `${parseFloat(splitAmt[0]).toFixed(3)} ${splitAmt[1]}`;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Validates tx from parsed data from hive-uri, checks if operation length is not greater than one and __signer is present in operation
|
||||
* Accepts tx object of parsed uri from decode method of hive-uri
|
||||
* Returns promise with keys for showing errors, and operation name parsed from operations.json and in case of success returns formatted tx
|
||||
*
|
||||
* */
|
||||
export const getFormattedTx = (tx: any, authoritiesMap: Map<string, boolean>) => {
|
||||
let opName;
|
||||
let errorObj = {
|
||||
errorKey1: '',
|
||||
errorKey2: '',
|
||||
authorityKeyType: '',
|
||||
};
|
||||
|
||||
const ops = get(tx, 'operations', []);
|
||||
const isValidOp = _checkOpsArray(ops);
|
||||
if (!isValidOp) {
|
||||
errorObj.errorKey1 = 'qr.multi_array_ops_alert';
|
||||
errorObj.errorKey2 = 'qr.multi_array_ops_aler_desct';
|
||||
return Promise.reject(errorObj);
|
||||
}
|
||||
const op = ops[0]; // single operation
|
||||
const operationName = op[0]; // operation name
|
||||
let operationObj = op[1]; // operation object
|
||||
|
||||
if (!operationName) {
|
||||
errorObj.errorKey1 = 'qr.invalid_op';
|
||||
errorObj.errorKey2 = 'qr.invalid_op_desc';
|
||||
return Promise.reject(errorObj);
|
||||
}
|
||||
const opProps = getOperationProps(operationName); // get operation props from operations.json file i-e signer field and operation name
|
||||
errorObj.authorityKeyType = opProps?.opAuthority || ''; // set key type to validate object
|
||||
|
||||
if (!opProps) {
|
||||
errorObj.errorKey1 = 'qr.invalid_op';
|
||||
errorObj.errorKey2 = 'qr.invalid_op_desc';
|
||||
return Promise.reject(errorObj);
|
||||
}
|
||||
if (authoritiesMap && !authoritiesMap.get(opProps.opAuthority)) {
|
||||
errorObj.errorKey1 = 'qr.invalid_key';
|
||||
errorObj.errorKey2 = 'qr.invalid_key_desc';
|
||||
return Promise.reject(errorObj);
|
||||
}
|
||||
// if amount field present in operation, validate and check for proper formatting and format to 3 decimal places
|
||||
if (operationObj.hasOwnProperty('amount')) {
|
||||
const amount = _formatAmount(operationObj.amount);
|
||||
operationObj.amount = amount;
|
||||
if (!amount) {
|
||||
errorObj.errorKey1 = 'qr.invalid_amount';
|
||||
errorObj.errorKey2 = 'qr.invalid_amount_desc';
|
||||
return Promise.reject(errorObj);
|
||||
}
|
||||
}
|
||||
const opSignerValue = get(op[1], opProps.signerField, '');
|
||||
// if signer field contains empty value, fill it with __signer
|
||||
if (!opSignerValue) {
|
||||
operationObj[opProps.signerField] = '__signer';
|
||||
}
|
||||
|
||||
opName = opProps.opName;
|
||||
tx = {
|
||||
...tx,
|
||||
operations: [[operationName, operationObj]],
|
||||
};
|
||||
// resolve with formatted tx and opName
|
||||
return Promise.resolve({ tx: tx, opName: opName });
|
||||
};
|
||||
|
741
src/utils/operations.json
Normal file
741
src/utils/operations.json
Normal file
@ -0,0 +1,741 @@
|
||||
{
|
||||
"transfer": {
|
||||
"name": "Transfer",
|
||||
"authority": "active",
|
||||
"description": "Transfers asset from one account to another.",
|
||||
"schema": {
|
||||
"from": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"to": {
|
||||
"type": "account"
|
||||
},
|
||||
"amount": {
|
||||
"type": "amount"
|
||||
},
|
||||
"memo": {
|
||||
"type": "string",
|
||||
"defaultValue": "",
|
||||
"maxLength": 2048
|
||||
}
|
||||
}
|
||||
},
|
||||
"recurrent_transfer": {
|
||||
"name": "Recurring Transfers",
|
||||
"authority": "active",
|
||||
"description": "Recurring transfers of asset from one account to another.",
|
||||
"schema": {
|
||||
"from": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"to": {
|
||||
"type": "account"
|
||||
},
|
||||
"amount": {
|
||||
"type": "amount"
|
||||
},
|
||||
"memo": {
|
||||
"type": "string",
|
||||
"defaultValue": "",
|
||||
"maxLength": 2048
|
||||
},
|
||||
"recurrence": {
|
||||
"type": "int"
|
||||
},
|
||||
"executions": {
|
||||
"type": "int"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"delegate_vesting_shares": {
|
||||
"name": "Delegate Hive Power",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"delegator": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"delegatee": {
|
||||
"type": "account"
|
||||
},
|
||||
"vesting_shares": {
|
||||
"type": "amount"
|
||||
}
|
||||
}
|
||||
},
|
||||
"transfer_to_vesting": {
|
||||
"name": "Power up",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"from": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"to": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"amount": {
|
||||
"type": "amount"
|
||||
}
|
||||
}
|
||||
},
|
||||
"set_withdraw_vesting_route": {
|
||||
"name": "Set withdraw vesting route",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"from_account": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"to_account": {
|
||||
"type": "account"
|
||||
},
|
||||
"percent": {
|
||||
"type": "int"
|
||||
},
|
||||
"auto_vest": {
|
||||
"type": "bool",
|
||||
"defaultValue": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"withdraw_vesting": {
|
||||
"name": "Power down",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"account": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"vesting_shares": {
|
||||
"type": "amount"
|
||||
}
|
||||
}
|
||||
},
|
||||
"transfer_to_savings": {
|
||||
"name": "Transfer to saving",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"from": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"to": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"amount": {
|
||||
"type": "amount"
|
||||
},
|
||||
"memo": {
|
||||
"type": "string",
|
||||
"defaultValue": "",
|
||||
"maxLength": 2048
|
||||
}
|
||||
}
|
||||
},
|
||||
"transfer_from_savings": {
|
||||
"name": "Transfer from saving",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"from": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"to": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"amount": {
|
||||
"type": "amount"
|
||||
},
|
||||
"memo": {
|
||||
"type": "string",
|
||||
"defaultValue": "",
|
||||
"maxLength": 2048
|
||||
},
|
||||
"request_id": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"cancel_transfer_from_savings": {
|
||||
"name": "Cancel transfer from saving",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"from": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"request_id": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"convert": {
|
||||
"name": "Convert",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"owner": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"requestid": {
|
||||
"type": "int"
|
||||
},
|
||||
"amount": {
|
||||
"type": "amount"
|
||||
}
|
||||
}
|
||||
},
|
||||
"collateralized_convert": {
|
||||
"name": "Collateralized Convert",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"owner": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"requestid": {
|
||||
"type": "int"
|
||||
},
|
||||
"amount": {
|
||||
"type": "amount"
|
||||
}
|
||||
}
|
||||
},
|
||||
"account_witness_vote": {
|
||||
"name": "Witness vote",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"account": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"witness": {
|
||||
"type": "account"
|
||||
},
|
||||
"approve": {
|
||||
"type": "bool",
|
||||
"defaultValue": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"witness_update": {
|
||||
"name": "Witness update",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"owner": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"url": {
|
||||
"type": "string",
|
||||
"defaultValue": "https://ecency.com"
|
||||
},
|
||||
"block_signing_key": {
|
||||
"type": "string",
|
||||
"defaultValue": "STM1111111111111111111111111111111114T1Anm"
|
||||
},
|
||||
"props": {
|
||||
"type": "object",
|
||||
"defaultValue": {
|
||||
"account_creation_fee": "1.000 HIVE",
|
||||
"maximum_block_size": 131072,
|
||||
"hbd_interest_rate": 2000
|
||||
}
|
||||
},
|
||||
"fee": {
|
||||
"type": "string",
|
||||
"defaultValue": "0.000 HIVE"
|
||||
}
|
||||
}
|
||||
},
|
||||
"witness_set_properties": {
|
||||
"name": "Witness set properties",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"owner": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"props": {
|
||||
"type": "object",
|
||||
"defaultValue": {
|
||||
"account_creation_fee": "1.000 HIVE",
|
||||
"account_subsidy_budget": 10000,
|
||||
"account_subsidy_decay": 330782,
|
||||
"maximum_block_size": 65536,
|
||||
"hbd_interest_rate": 2000,
|
||||
"hbd_exchange_rate": {"base": "0.000 HBD", "quote": "0.000 HIVE"},
|
||||
"url": "https://ecency.com",
|
||||
"new_signing_key": "STM1111111111111111111111111111111114T1Anm"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"account_witness_proxy": {
|
||||
"name": "Governance proxy",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"account": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"proxy": {
|
||||
"type": "account"
|
||||
}
|
||||
}
|
||||
},
|
||||
"claim_account": {
|
||||
"name": "Claim account",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"creator": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"fee": {
|
||||
"type": "amount",
|
||||
"defaultValue": "0.000 HIVE"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"account_create": {
|
||||
"name": "Create account",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"creator": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"fee": {
|
||||
"type": "amount",
|
||||
"defaultValue": "3.000 HIVE"
|
||||
},
|
||||
"new_account_name": {
|
||||
"type": "account"
|
||||
},
|
||||
"memo_key": {
|
||||
"type": "string"
|
||||
},
|
||||
"json_metadata": {
|
||||
"type": "string"
|
||||
},
|
||||
"owner": {
|
||||
"type": "object"
|
||||
},
|
||||
"active": {
|
||||
"type": "object"
|
||||
},
|
||||
"posting": {
|
||||
"type": "object"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"create_claimed_account": {
|
||||
"name": "Create account with account credits",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"creator": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"new_account_name": {
|
||||
"type": "account"
|
||||
},
|
||||
"memo_key": {
|
||||
"type": "string"
|
||||
},
|
||||
"json_metadata": {
|
||||
"type": "string"
|
||||
},
|
||||
"owner": {
|
||||
"type": "object"
|
||||
},
|
||||
"active": {
|
||||
"type": "object"
|
||||
},
|
||||
"posting": {
|
||||
"type": "object"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"vote": {
|
||||
"name": "Vote",
|
||||
"authority": "posting",
|
||||
"schema": {
|
||||
"voter": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"author": {
|
||||
"type": "account"
|
||||
},
|
||||
"permlink": {
|
||||
"type": "string"
|
||||
},
|
||||
"weight": {
|
||||
"type": "int",
|
||||
"defaultValue": 10000
|
||||
}
|
||||
}
|
||||
},
|
||||
"limit_order_create": {
|
||||
"name": "Create limit order",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"owner": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"orderid": {
|
||||
"type": "int"
|
||||
},
|
||||
"amount_to_sell": {
|
||||
"type": "amount"
|
||||
},
|
||||
"min_to_receive": {
|
||||
"type": "amount"
|
||||
},
|
||||
"fill_or_kill": {
|
||||
"type": "bool"
|
||||
},
|
||||
"expiration": {
|
||||
"type": "time"
|
||||
}
|
||||
}
|
||||
},
|
||||
"limit_order_create2": {
|
||||
"name": "Create limit order",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"owner": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"orderid": {
|
||||
"type": "int"
|
||||
},
|
||||
"amount_to_sell": {
|
||||
"type": "amount"
|
||||
},
|
||||
"exchange_rate": {
|
||||
"type": "object"
|
||||
},
|
||||
"fill_or_kill": {
|
||||
"type": "bool"
|
||||
},
|
||||
"expiration": {
|
||||
"type": "time"
|
||||
}
|
||||
}
|
||||
},
|
||||
"limit_order_cancel": {
|
||||
"name": "Cancel limit order",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"owner": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"orderid": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"claim_reward_balance": {
|
||||
"name": "Redeem rewards",
|
||||
"authority": "posting",
|
||||
"schema": {
|
||||
"account": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"reward_hive": {
|
||||
"type": "amount"
|
||||
},
|
||||
"reward_hbd": {
|
||||
"type": "amount"
|
||||
},
|
||||
"reward_vests": {
|
||||
"type": "amount"
|
||||
}
|
||||
}
|
||||
},
|
||||
"comment": {
|
||||
"name": "Post or comment",
|
||||
"authority": "posting",
|
||||
"schema": {
|
||||
"parent_author": {
|
||||
"type": "account",
|
||||
"defaultValue": ""
|
||||
},
|
||||
"parent_permlink": {
|
||||
"type": "string"
|
||||
},
|
||||
"author": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"permlink": {
|
||||
"type": "string"
|
||||
},
|
||||
"title": {
|
||||
"type": "string"
|
||||
},
|
||||
"body": {
|
||||
"type": "string"
|
||||
},
|
||||
"json_metadata": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"comment_options": {
|
||||
"name": "Post or comment options",
|
||||
"authority": "posting",
|
||||
"schema": {
|
||||
"author": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"permlink": {
|
||||
"type": "string"
|
||||
},
|
||||
"allow_curation_rewards": {
|
||||
"type": "bool",
|
||||
"defaultValue": true
|
||||
},
|
||||
"allow_votes": {
|
||||
"type": "bool",
|
||||
"defaultValue": true
|
||||
},
|
||||
"max_accepted_payout": {
|
||||
"type": "amount",
|
||||
"defaultValue": "1000000.000 SBD"
|
||||
},
|
||||
"percent_hbd": {
|
||||
"type": "int",
|
||||
"defaultValue": 10000
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"custom_json": {
|
||||
"name": "Custom operation",
|
||||
"authority": "posting",
|
||||
"schema": {
|
||||
"required_auths": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
},
|
||||
"required_posting_auths": {
|
||||
"name": "posting auths",
|
||||
"type": "array",
|
||||
"defaultValue": ["__signer"]
|
||||
},
|
||||
"id": {
|
||||
"type": "string"
|
||||
},
|
||||
"json": {
|
||||
"type": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"delete_comment": {
|
||||
"name": "Delete comment",
|
||||
"authority": "posting",
|
||||
"schema": {
|
||||
"author": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"permlink": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"account_update": {
|
||||
"name": "Update account (active)",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"account": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"owner": {
|
||||
"type": "object"
|
||||
},
|
||||
"active": {
|
||||
"type": "object"
|
||||
},
|
||||
"posting": {
|
||||
"type": "object"
|
||||
},
|
||||
"memo_key": {
|
||||
"type": "string"
|
||||
},
|
||||
"json_metadata": {
|
||||
"type": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"account_update2": {
|
||||
"name": "Update account (posting)",
|
||||
"authority": "posting",
|
||||
"schema": {
|
||||
"account": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"json_metadata": {
|
||||
"type": "json",
|
||||
"defaultValue": ""
|
||||
},
|
||||
"posting_json_metadata": {
|
||||
"type": "json"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"change_recovery_account": {
|
||||
"name": "Change recovery account",
|
||||
"authority": "owner",
|
||||
"schema": {
|
||||
"account_to_recover": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"new_recovery_account": {
|
||||
"type": "account"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"create_proposal": {
|
||||
"name": "Create proposal",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"creator": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"receiver": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"start_date": {
|
||||
"type": "time"
|
||||
},
|
||||
"end_date": {
|
||||
"type": "time"
|
||||
},
|
||||
"daily_pay": {
|
||||
"type": "amount"
|
||||
},
|
||||
"subject": {
|
||||
"type": "string"
|
||||
},
|
||||
"permlink": {
|
||||
"type": "string"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"remove_proposal": {
|
||||
"name": "Remove proposal",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"proposal_owner": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"proposal_ids": {
|
||||
"type": "array"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"update_proposal_votes": {
|
||||
"name": "Update proposal votes",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"voter": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"proposal_ids": {
|
||||
"type": "array"
|
||||
},
|
||||
"approve": {
|
||||
"type": "bool",
|
||||
"defaultValue": true
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"update_proposal": {
|
||||
"name": "Update proposal",
|
||||
"authority": "active",
|
||||
"schema": {
|
||||
"creator": {
|
||||
"type": "account",
|
||||
"defaultValue": "__signer"
|
||||
},
|
||||
"proposal_id": {
|
||||
"type": "int"
|
||||
},
|
||||
"daily_pay": {
|
||||
"type": "amount"
|
||||
},
|
||||
"subject": {
|
||||
"type": "string"
|
||||
},
|
||||
"permlink": {
|
||||
"type": "string"
|
||||
},
|
||||
"extensions": {
|
||||
"type": "array",
|
||||
"defaultValue": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
31
yarn.lock
31
yarn.lock
@ -1811,6 +1811,14 @@
|
||||
dependencies:
|
||||
any-observable "^0.3.0"
|
||||
|
||||
"@shopify/flash-list@^1.6.1":
|
||||
version "1.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@shopify/flash-list/-/flash-list-1.6.1.tgz#7a46d8ec4e125b8b7bf686777d932c7c950e00c7"
|
||||
integrity sha512-SlBlpP7+zol6D1SKaf402aS30Qgwdjwb8/Qn2CupYwXnTcu2l8TiXB766vcsIvKTqUO7ELfQnCwCq8NXx55FsQ==
|
||||
dependencies:
|
||||
recyclerlistview "4.2.0"
|
||||
tslib "2.4.0"
|
||||
|
||||
"@sideway/address@^4.1.3":
|
||||
version "4.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0"
|
||||
@ -7166,7 +7174,7 @@ lodash.camelcase@^4.3.0:
|
||||
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
||||
integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
|
||||
|
||||
lodash.debounce@^4.0.8:
|
||||
lodash.debounce@4.0.8, lodash.debounce@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
|
||||
@ -8662,7 +8670,7 @@ prompts@^2.0.1, prompts@^2.4.0:
|
||||
kleur "^3.0.3"
|
||||
sisteransi "^1.0.5"
|
||||
|
||||
prop-types@*, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.0, prop-types@^15.8.1:
|
||||
prop-types@*, prop-types@15.8.1, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.0, prop-types@^15.8.1:
|
||||
version "15.8.1"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
|
||||
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
|
||||
@ -9613,6 +9621,15 @@ recast@^0.20.4:
|
||||
source-map "~0.6.1"
|
||||
tslib "^2.0.1"
|
||||
|
||||
recyclerlistview@4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/recyclerlistview/-/recyclerlistview-4.2.0.tgz#a140149aaa470c9787a1426452651934240d69ef"
|
||||
integrity sha512-uuBCi0c+ggqHKwrzPX4Z/mJOzsBbjZEAwGGmlwpD/sD7raXixdAbdJ6BTcAmuWG50Cg4ru9p12M94Njwhr/27A==
|
||||
dependencies:
|
||||
lodash.debounce "4.0.8"
|
||||
prop-types "15.8.1"
|
||||
ts-object-utils "0.0.5"
|
||||
|
||||
reduce-flatten@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27"
|
||||
@ -10937,6 +10954,11 @@ tr46@~0.0.3:
|
||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
|
||||
|
||||
ts-object-utils@0.0.5:
|
||||
version "0.0.5"
|
||||
resolved "https://registry.yarnpkg.com/ts-object-utils/-/ts-object-utils-0.0.5.tgz#95361cdecd7e52167cfc5e634c76345e90a26077"
|
||||
integrity sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA==
|
||||
|
||||
ts-toolbelt@^6.15.1:
|
||||
version "6.15.5"
|
||||
resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz#cb3b43ed725cb63644782c64fbcad7d8f28c0a83"
|
||||
@ -10952,6 +10974,11 @@ tsconfig-paths@^3.14.1:
|
||||
minimist "^1.2.6"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
tslib@2.4.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
|
||||
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
|
||||
|
||||
tslib@^1.8.1, tslib@^1.9.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||
|
Loading…
Reference in New Issue
Block a user