Browse Source

BIG | Reffactoring

merge-requests/298/merge
Vitalik 2 years ago
parent
commit
84a566009a
  1. 7
      .flowconfig
  2. 1
      .gitignore
  3. 14
      android/app/build.gradle
  4. 22
      android/build.gradle
  5. 2
      android/gradle.properties
  6. 2
      ios/Podfile
  7. 571
      ios/Podfile.lock
  8. 130
      ios/taskme.xcodeproj/project.pbxproj
  9. 6289
      package-lock.json
  10. 41
      package.json
  11. 26
      src/App.tsx
  12. 1
      src/api/account/responses.interfaces.ts
  13. 14
      src/api/chats/requests.ts
  14. 2
      src/config/index.ts
  15. 10
      src/modules/chats/components/chats-list.component.tsx
  16. 16
      src/modules/chats/helpers/chats-helpers.helper.ts
  17. 7
      src/modules/chats/helpers/index.ts
  18. 16
      src/modules/chats/hooks/use-chat-messages.hook.ts
  19. 377
      src/modules/chats/hooks/use-chats-list.hook.ts
  20. 17
      src/modules/chats/screens/chat.tsx
  21. 8
      src/modules/contacts/hooks/use-fetch-contacts.hook.ts
  22. 6
      src/modules/contacts/smart-component/contacts-list.smart-component.tsx
  23. 62
      src/modules/root/components/net-status.component.tsx
  24. 3
      src/modules/root/hooks/use-net-connect.hook.ts
  25. 6
      src/services/domain/account.service.ts
  26. 10
      src/services/domain/auth.service.ts
  27. 3
      src/services/domain/chat-messages.service.ts
  28. 37
      src/services/domain/chats.service.ts
  29. 11
      src/services/domain/permissions.service.ts
  30. 45
      src/services/domain/taxonomies.service.ts
  31. 31
      src/services/system/network.service.ts
  32. 8
      src/services/system/real-time.service.ts
  33. 38
      src/shared/components/plugins/image-crop-picker.component.tsx
  34. 26
      src/shared/helpers/actions-sheet.helpers.ts
  35. 9
      src/shared/helpers/alert.helper.ts
  36. 25
      src/shared/helpers/index.ts
  37. 1
      src/shared/hooks/use-flat-list.hook.ts
  38. 9
      src/shared/themes/dark/navigation.ts
  39. 5
      src/shared/themes/interfaces/navigation.interface.ts
  40. 4
      src/shared/themes/light/navigation.ts
  41. 10
      src/store/shared/reducer.ts
  42. 7
      src/store/shared/selectors.ts
  43. 11
      src/store/shared/types.ts
  44. 2300
      yarn.lock

7
.flowconfig

@ -23,11 +23,12 @@ node_modules/react-native/flow/
[options] [options]
emoji=true emoji=true
esproposal.optional_chaining=enable
esproposal.nullish_coalescing=enable
exact_by_default=true exact_by_default=true
format.bracket_spacing=false
module.file_ext=.js module.file_ext=.js
module.file_ext=.json module.file_ext=.json
module.file_ext=.ios.js module.file_ext=.ios.js
@ -63,4 +64,4 @@ untyped-import
untyped-type-import untyped-type-import
[version] [version]
^0.137.0 ^0.158.0

1
.gitignore vendored

@ -20,6 +20,7 @@ DerivedData
*.hmap *.hmap
*.ipa *.ipa
*.xcuserstate *.xcuserstate
*.hprof
# Android/IntelliJ # Android/IntelliJ
# #

14
android/app/build.gradle

@ -19,8 +19,15 @@ apply from: "../../node_modules/react-native/react.gradle"
def enableSeparateBuildPerCPUArchitecture = false def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false def enableProguardInReleaseBuilds = false
def jscFlavor = 'org.webkit:android-jsc:+' def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Architectures to build native code for in debug.
*/
def nativeArchitectures = project.getProperties().get("reactNativeDebugArchitectures")
def enableHermes = project.ext.react.get("enableHermes", false); def enableHermes = project.ext.react.get("enableHermes", false);
android { android {
ndkVersion rootProject.ext.ndkVersion ndkVersion rootProject.ext.ndkVersion
@ -66,6 +73,11 @@ android {
buildTypes { buildTypes {
debug { debug {
signingConfig signingConfigs.debug signingConfig signingConfigs.debug
if (nativeArchitectures) {
ndk {
abiFilters nativeArchitectures.split(',')
}
}
} }
release { release {
@ -131,7 +143,7 @@ dependencies {
// Run this once to be able to run the application with BUCK // Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use // puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) { task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile from configurations.implementation
into 'libs' into 'libs'
} }

22
android/build.gradle

@ -2,22 +2,22 @@
buildscript { buildscript {
ext { ext {
buildToolsVersion = "29.0.3" buildToolsVersion = "30.0.2 "
minSdkVersion = 24 minSdkVersion = 24
compileSdkVersion = 29 compileSdkVersion = 30
targetSdkVersion = 29 targetSdkVersion = 30
kotlinVersion = '1.5.0' kotlinVersion = '1.5.0'
ndkVersion = "22.0.7026061" ndkVersion = "22.0.7026061"
androidXCore = "1.7.0"
} }
repositories { repositories {
google() google()
jcenter() mavenCentral()
// Configure the Maven repository address for the HMS Core SDK.
maven {url 'https://developer.huawei.com/repo/'} maven {url 'https://developer.huawei.com/repo/'}
} }
dependencies { dependencies {
classpath("com.android.tools.build:gradle:4.0.1") classpath("com.android.tools.build:gradle:4.2.2")
classpath 'com.huawei.agconnect:agcp:1.6.0.300' classpath 'com.huawei.agconnect:agcp:1.6.0.300'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
@ -27,20 +27,22 @@ buildscript {
allprojects { allprojects {
repositories { repositories {
mavenCentral()
mavenLocal() mavenLocal()
maven { maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android") url("$rootDir/../node_modules/react-native/android")
} }
maven { maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist") url("$rootDir/../node_modules/jsc-android/dist")
} }
google() google()
jcenter()
maven { url 'https://www.jitpack.io' } maven { url 'https://www.jitpack.io' }
maven { url 'https://maven.google.com' } maven { url 'https://maven.google.com' }
// Configure the Maven repository address for the HMS Core SDK.
maven {url 'https://developer.huawei.com/repo/'} maven {url 'https://developer.huawei.com/repo/'}
jcenter() {
content {
includeModule("com.yqritc", "android-scalablevideoview")
}
}
} }
} }

2
android/gradle.properties

@ -25,7 +25,7 @@ android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
# Version of flipper SDK to use with React Native # Version of flipper SDK to use with React Native
FLIPPER_VERSION=0.75.1 FLIPPER_VERSION=0.99.0
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError
org.gradle.daemon=true org.gradle.daemon=true

2
ios/Podfile

@ -37,7 +37,7 @@ target 'taskme' do
post_install do |installer| post_install do |installer|
react_native_post_install(installer) react_native_post_install(installer)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
end end
end end

571
ios/Podfile.lock

@ -1,14 +1,15 @@
PODS: PODS:
- boost-for-react-native (1.63.0) - boost (1.76.0)
- DoubleConversion (1.1.6) - DoubleConversion (1.1.6)
- FBLazyVector (0.64.3) - FBLazyVector (0.66.4)
- FBReactNativeSpec (0.64.3): - FBReactNativeSpec (0.66.4):
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.64.3) - RCTRequired (= 0.66.4)
- RCTTypeSafety (= 0.64.3) - RCTTypeSafety (= 0.66.4)
- React-Core (= 0.64.3) - React-Core (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- fmt (6.2.1)
- glog (0.3.5) - glog (0.3.5)
- libwebp (1.2.1): - libwebp (1.2.1):
- libwebp/demux (= 1.2.1) - libwebp/demux (= 1.2.1)
@ -19,214 +20,219 @@ PODS:
- libwebp/mux (1.2.1): - libwebp/mux (1.2.1):
- libwebp/demux - libwebp/demux
- libwebp/webp (1.2.1) - libwebp/webp (1.2.1)
- OneSignal (3.11.1): - OneSignal (3.11.2):
- OneSignal/OneSignalCore (= 3.11.1) - OneSignal/OneSignalCore (= 3.11.2)
- OneSignal/OneSignalExtension (= 3.11.1) - OneSignal/OneSignalExtension (= 3.11.2)
- OneSignal/OneSignalOutcomes (= 3.11.1) - OneSignal/OneSignalOutcomes (= 3.11.2)
- OneSignal/OneSignalCore (3.11.1) - OneSignal/OneSignalCore (3.11.2)
- OneSignal/OneSignalExtension (3.11.1): - OneSignal/OneSignalExtension (3.11.2):
- OneSignal/OneSignalCore - OneSignal/OneSignalCore
- OneSignal/OneSignalOutcomes - OneSignal/OneSignalOutcomes
- OneSignal/OneSignalOutcomes (3.11.1): - OneSignal/OneSignalOutcomes (3.11.2):
- OneSignal/OneSignalCore - OneSignal/OneSignalCore
- OneSignalXCFramework (3.10.1) - OneSignalXCFramework (3.10.1)
- Permission-Camera (3.2.0): - Permission-Camera (3.2.0):
- RNPermissions - RNPermissions
- Permission-PhotoLibrary (3.2.0): - Permission-PhotoLibrary (3.2.0):
- RNPermissions - RNPermissions
- RCT-Folly (2020.01.13.00): - RCT-Folly (2021.06.28.00-v2):
- boost-for-react-native - boost
- DoubleConversion - DoubleConversion
- fmt (~> 6.2.1)
- glog - glog
- RCT-Folly/Default (= 2020.01.13.00) - RCT-Folly/Default (= 2021.06.28.00-v2)
- RCT-Folly/Default (2020.01.13.00): - RCT-Folly/Default (2021.06.28.00-v2):
- boost-for-react-native - boost
- DoubleConversion - DoubleConversion
- fmt (~> 6.2.1)
- glog - glog
- RCTRequired (0.64.3) - RCTRequired (0.66.4)
- RCTTypeSafety (0.64.3): - RCTTypeSafety (0.66.4):
- FBLazyVector (= 0.64.3) - FBLazyVector (= 0.66.4)
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.64.3) - RCTRequired (= 0.66.4)
- React-Core (= 0.64.3) - React-Core (= 0.66.4)
- React (0.64.3): - React (0.66.4):
- React-Core (= 0.64.3) - React-Core (= 0.66.4)
- React-Core/DevSupport (= 0.64.3) - React-Core/DevSupport (= 0.66.4)
- React-Core/RCTWebSocket (= 0.64.3) - React-Core/RCTWebSocket (= 0.66.4)
- React-RCTActionSheet (= 0.64.3) - React-RCTActionSheet (= 0.66.4)
- React-RCTAnimation (= 0.64.3) - React-RCTAnimation (= 0.66.4)
- React-RCTBlob (= 0.64.3) - React-RCTBlob (= 0.66.4)
- React-RCTImage (= 0.64.3) - React-RCTImage (= 0.66.4)
- React-RCTLinking (= 0.64.3) - React-RCTLinking (= 0.66.4)
- React-RCTNetwork (= 0.64.3) - React-RCTNetwork (= 0.66.4)
- React-RCTSettings (= 0.64.3) - React-RCTSettings (= 0.66.4)
- React-RCTText (= 0.64.3) - React-RCTText (= 0.66.4)
- React-RCTVibration (= 0.64.3) - React-RCTVibration (= 0.66.4)
- React-callinvoker (0.64.3) - React-callinvoker (0.66.4)
- React-Core (0.64.3): - React-Core (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.64.3) - React-Core/Default (= 0.66.4)
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/CoreModulesHeaders (0.64.3): - React-Core/CoreModulesHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/Default (0.64.3): - React-Core/Default (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/DevSupport (0.64.3): - React-Core/DevSupport (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.64.3) - React-Core/Default (= 0.66.4)
- React-Core/RCTWebSocket (= 0.64.3) - React-Core/RCTWebSocket (= 0.66.4)
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-jsinspector (= 0.64.3) - React-jsinspector (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTActionSheetHeaders (0.64.3): - React-Core/RCTActionSheetHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTAnimationHeaders (0.64.3): - React-Core/RCTAnimationHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTBlobHeaders (0.64.3): - React-Core/RCTBlobHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTImageHeaders (0.64.3): - React-Core/RCTImageHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTLinkingHeaders (0.64.3): - React-Core/RCTLinkingHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTNetworkHeaders (0.64.3): - React-Core/RCTNetworkHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTSettingsHeaders (0.64.3): - React-Core/RCTSettingsHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTTextHeaders (0.64.3): - React-Core/RCTTextHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTVibrationHeaders (0.64.3): - React-Core/RCTVibrationHeaders (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default - React-Core/Default
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-Core/RCTWebSocket (0.64.3): - React-Core/RCTWebSocket (0.66.4):
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.64.3) - React-Core/Default (= 0.66.4)
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsiexecutor (= 0.64.3) - React-jsiexecutor (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- Yoga - Yoga
- React-CoreModules (0.64.3): - React-CoreModules (0.66.4):
- FBReactNativeSpec (= 0.64.3) - FBReactNativeSpec (= 0.66.4)
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.64.3) - RCTTypeSafety (= 0.66.4)
- React-Core/CoreModulesHeaders (= 0.64.3) - React-Core/CoreModulesHeaders (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-RCTImage (= 0.64.3) - React-RCTImage (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- React-cxxreact (0.64.3): - React-cxxreact (0.66.4):
- boost-for-react-native (= 1.63.0) - boost (= 1.76.0)
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.64.3) - React-callinvoker (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-jsinspector (= 0.64.3) - React-jsinspector (= 0.66.4)
- React-perflogger (= 0.64.3) - React-logger (= 0.66.4)
- React-runtimeexecutor (= 0.64.3) - React-perflogger (= 0.66.4)
- React-jsi (0.64.3): - React-runtimeexecutor (= 0.66.4)
- boost-for-react-native (= 1.63.0) - React-jsi (0.66.4):
- boost (= 1.76.0)
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-jsi/Default (= 0.64.3) - React-jsi/Default (= 0.66.4)
- React-jsi/Default (0.64.3): - React-jsi/Default (0.66.4):
- boost-for-react-native (= 1.63.0) - boost (= 1.76.0)
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-jsiexecutor (0.64.3): - React-jsiexecutor (0.66.4):
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-perflogger (= 0.64.3) - React-perflogger (= 0.66.4)
- React-jsinspector (0.64.3) - React-jsinspector (0.66.4)
- React-logger (0.66.4):
- glog
- react-native-cameraroll (4.1.2): - react-native-cameraroll (4.1.2):
- React-Core - React-Core
- react-native-clear-cache (1.0.3): - react-native-clear-cache (1.0.3):
@ -239,7 +245,7 @@ PODS:
- React-Core - React-Core
- react-native-image-picker (4.7.1): - react-native-image-picker (4.7.1):
- React-Core - React-Core
- react-native-netinfo (6.2.1): - react-native-netinfo (9.0.0):
- React-Core - React-Core
- react-native-onesignal (4.3.7): - react-native-onesignal (4.3.7):
- OneSignalXCFramework (= 3.10.1) - OneSignalXCFramework (= 3.10.1)
@ -261,70 +267,71 @@ PODS:
- react-native-video/Video (= 5.2.0) - react-native-video/Video (= 5.2.0)
- react-native-video/Video (5.2.0): - react-native-video/Video (5.2.0):
- React-Core - React-Core
- React-perflogger (0.64.3) - React-perflogger (0.66.4)
- React-RCTActionSheet (0.64.3): - React-RCTActionSheet (0.66.4):
- React-Core/RCTActionSheetHeaders (= 0.64.3) - React-Core/RCTActionSheetHeaders (= 0.66.4)
- React-RCTAnimation (0.64.3): - React-RCTAnimation (0.66.4):
- FBReactNativeSpec (= 0.64.3) - FBReactNativeSpec (= 0.66.4)
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.64.3) - RCTTypeSafety (= 0.66.4)
- React-Core/RCTAnimationHeaders (= 0.64.3) - React-Core/RCTAnimationHeaders (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- React-RCTBlob (0.64.3): - React-RCTBlob (0.66.4):
- FBReactNativeSpec (= 0.64.3) - FBReactNativeSpec (= 0.66.4)
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/RCTBlobHeaders (= 0.64.3) - React-Core/RCTBlobHeaders (= 0.66.4)
- React-Core/RCTWebSocket (= 0.64.3) - React-Core/RCTWebSocket (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-RCTNetwork (= 0.64.3) - React-RCTNetwork (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- React-RCTImage (0.64.3): - React-RCTImage (0.66.4):
- FBReactNativeSpec (= 0.64.3) - FBReactNativeSpec (= 0.66.4)
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.64.3) - RCTTypeSafety (= 0.66.4)
- React-Core/RCTImageHeaders (= 0.64.3) - React-Core/RCTImageHeaders (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-RCTNetwork (= 0.64.3) - React-RCTNetwork (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- React-RCTLinking (0.64.3): - React-RCTLinking (0.66.4):
- FBReactNativeSpec (= 0.64.3) - FBReactNativeSpec (= 0.66.4)
- React-Core/RCTLinkingHeaders (= 0.64.3) - React-Core/RCTLinkingHeaders (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- React-RCTNetwork (0.64.3): - React-RCTNetwork (0.66.4):
- FBReactNativeSpec (= 0.64.3) - FBReactNativeSpec (= 0.66.4)
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.64.3) - RCTTypeSafety (= 0.66.4)
- React-Core/RCTNetworkHeaders (= 0.64.3) - React-Core/RCTNetworkHeaders (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- React-RCTSettings (0.64.3): - React-RCTSettings (0.66.4):
- FBReactNativeSpec (= 0.64.3) - FBReactNativeSpec (= 0.66.4)
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.64.3) - RCTTypeSafety (= 0.66.4)
- React-Core/RCTSettingsHeaders (= 0.64.3) - React-Core/RCTSettingsHeaders (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- React-RCTText (0.64.3): - React-RCTText (0.66.4):
- React-Core/RCTTextHeaders (= 0.64.3) - React-Core/RCTTextHeaders (= 0.66.4)
- React-RCTVibration (0.64.3): - React-RCTVibration (0.66.4):
- FBReactNativeSpec (= 0.64.3) - FBReactNativeSpec (= 0.66.4)
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-Core/RCTVibrationHeaders (= 0.64.3) - React-Core/RCTVibrationHeaders (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- ReactCommon/turbomodule/core (= 0.64.3) - ReactCommon/turbomodule/core (= 0.66.4)
- React-runtimeexecutor (0.64.3): - React-runtimeexecutor (0.66.4):
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- ReactCommon/turbomodule/core (0.64.3): - ReactCommon/turbomodule/core (0.66.4):
- DoubleConversion - DoubleConversion
- glog - glog
- RCT-Folly (= 2020.01.13.00) - RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.64.3) - React-callinvoker (= 0.66.4)
- React-Core (= 0.64.3) - React-Core (= 0.66.4)
- React-cxxreact (= 0.64.3) - React-cxxreact (= 0.66.4)
- React-jsi (= 0.64.3) - React-jsi (= 0.66.4)
- React-perflogger (= 0.64.3) - React-logger (= 0.66.4)
- React-perflogger (= 0.66.4)
- ReactNativeExceptionHandler (2.10.10): - ReactNativeExceptionHandler (2.10.10):
- React-Core - React-Core
- rn-fetch-blob (0.12.0): - rn-fetch-blob (0.12.0):
@ -335,7 +342,7 @@ PODS:
- React-Core - React-Core
- RNCClipboard (1.5.1): - RNCClipboard (1.5.1):
- React-Core - React-Core
- RNCPicker (1.16.6): - RNCPicker (2.4.1):
- React-Core - React-Core
- RNCPushNotificationIOS (1.10.1): - RNCPushNotificationIOS (1.10.1):
- React-Core - React-Core
@ -388,7 +395,7 @@ PODS:
- React-RCTText - React-RCTText
- ReactCommon/turbomodule/core - ReactCommon/turbomodule/core
- Yoga - Yoga
- RNScreens (3.6.0): - RNScreens (3.13.1):
- React-Core - React-Core
- React-RCTImage - React-RCTImage
- RNShare (7.4.1): - RNShare (7.4.1):
@ -402,13 +409,14 @@ PODS:
- SDWebImage (5.11.1): - SDWebImage (5.11.1):
- SDWebImage/Core (= 5.11.1) - SDWebImage/Core (= 5.11.1)
- SDWebImage/Core (5.11.1) - SDWebImage/Core (5.11.1)
- SDWebImageWebPCoder (0.8.4): - SDWebImageWebPCoder (0.8.5):
- libwebp (~> 1.0) - libwebp (~> 1.0)
- SDWebImage/Core (~> 5.10) - SDWebImage/Core (~> 5.10)
- TOCropViewController (2.6.1) - TOCropViewController (2.6.1)
- Yoga (1.14.0) - Yoga (1.14.0)
DEPENDENCIES: DEPENDENCIES:
- boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
@ -429,6 +437,7 @@ DEPENDENCIES:
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)" - "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)"
- react-native-clear-cache (from `../node_modules/oa-react-native-clear-cache`) - react-native-clear-cache (from `../node_modules/oa-react-native-clear-cache`)
- react-native-date-picker (from `../node_modules/react-native-date-picker`) - react-native-date-picker (from `../node_modules/react-native-date-picker`)
@ -479,7 +488,7 @@ DEPENDENCIES:
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- boost-for-react-native - fmt
- libwebp - libwebp
- OneSignal - OneSignal
- OneSignalXCFramework - OneSignalXCFramework
@ -488,6 +497,8 @@ SPEC REPOS:
- TOCropViewController - TOCropViewController
EXTERNAL SOURCES: EXTERNAL SOURCES:
boost:
:podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
DoubleConversion: DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
FBLazyVector: FBLazyVector:
@ -522,6 +533,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/jsiexecutor" :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
React-jsinspector: React-jsinspector:
:path: "../node_modules/react-native/ReactCommon/jsinspector" :path: "../node_modules/react-native/ReactCommon/jsinspector"
React-logger:
:path: "../node_modules/react-native/ReactCommon/logger"
react-native-cameraroll: react-native-cameraroll:
:path: "../node_modules/@react-native-community/cameraroll" :path: "../node_modules/@react-native-community/cameraroll"
react-native-clear-cache: react-native-clear-cache:
@ -618,78 +631,80 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga" :path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS: SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c boost: a7c83b31436843459a1961bfd74b96033dc77234
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
FBLazyVector: c71c5917ec0ad2de41d5d06a5855f6d5eda06971 FBLazyVector: e5569e42a1c79ca00521846c223173a57aca1fe1
FBReactNativeSpec: 50ac84ed135478e1b20e25b4c165cd57b2ce1988 FBReactNativeSpec: fe08c1cd7e2e205718d77ad14b34957cce949b58
glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 5337263514dd6f09803962437687240c5dc39aa4
libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc
OneSignal: 60902887c93f91e9b5599583e7df5f55b2144755 OneSignal: 8861a1407c321ca1ae59d3adca6286eb7caf9d6e
OneSignalXCFramework: fe027712118f2862ab193b72270487f11450ea63 OneSignalXCFramework: fe027712118f2862ab193b72270487f11450ea63
Permission-Camera: 9eb618fd601ae4a674b072c3b0d37f109d7b91e5 Permission-Camera: 53efcbb755b0e8bdf253dbb27cc7559ccfce8480
Permission-PhotoLibrary: 900e7e33012bd5e02e5859cb65d5bb2134259c64 Permission-PhotoLibrary: 7bec836dcdd04a0bfb200c314f1aae06d4476357
RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c RCT-Folly: a21c126816d8025b547704b777a2ba552f3d9fa9
RCTRequired: d34bf57e17cb6e3b2681f4809b13843c021feb6c RCTRequired: 4bf86c70714490bca4bf2696148638284622644b
RCTTypeSafety: 8dab4933124ed39bb0c1d88d74d61b1eb950f28f RCTTypeSafety: c475a7059eb77935fa53d2c17db299893f057d5d
React: ef700aeb19afabff83a9cc5799ac955a9c6b5e0f React: f64af14e3f2c50f6f2c91a5fd250e4ff1b3c3459
React-callinvoker: 5547633d44f3e114b17c03c660ccb5faefd9ed2d React-callinvoker: b74e4ae80287780dcdf0cab262bcb581eeef56e7
React-Core: 3858d60185d71567962468bf176d582e36e4e25b React-Core: 3eb7432bad96ff1d25aebc1defbae013fee2fd0e
React-CoreModules: 29b3397adac0c04915cf93089328664868510717 React-CoreModules: ad9e1fd5650e16666c57a08328df86fd7e480cb9
React-cxxreact: 7e6cc1f4cdfcd40e483dd228fa8a3d3e0ed16f4a React-cxxreact: 02633ff398cf7e91a2c1e12590d323c4a4b8668a
React-jsi: a8b09c29521c798f1783348b37b511ba7b3dbeb3 React-jsi: 805c41a927d6499fb811772acb971467d9204633
React-jsiexecutor: df6abc9fafbecb8e5b7a5fbc5e6d4bd017d594d5 React-jsiexecutor: 94ce921e1d8ce7023366873ec371f3441383b396
React-jsinspector: 34e23860273a23695342f58eed3ffd3ba10c31e0 React-jsinspector: d0374f7509d407d2264168b6d0fad0b54e300b85
React-logger: 933f80c97c633ee8965d609876848148e3fef438
react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866 react-native-cameraroll: 2957f2bce63ae896a848fbe0d5352c1bd4d20866
react-native-clear-cache: 28bce59b33cd809e0afe903786787b4409d1c1fb react-native-clear-cache: 28bce59b33cd809e0afe903786787b4409d1c1fb
react-native-date-picker: 201b481c94dcb7678f4712477ad026dd7793305b react-native-date-picker: 201b481c94dcb7678f4712477ad026dd7793305b
react-native-document-picker: 772d04a4bc5c35da9abe27b08ac271420ae3f9ef react-native-document-picker: 429972f7ece4463aa5bcdd789622b3a674a3c5d1
react-native-html-to-pdf: 4c5c6e26819fe202971061594058877aa9b25265 react-native-html-to-pdf: 4c5c6e26819fe202971061594058877aa9b25265
react-native-image-picker: 27c3726557dac6e224a17c564c16cdc7fb952f79 react-native-image-picker: 5fe0a96bef4935bbdfb02f59b910bf40d5526109
react-native-netinfo: 877946c7b4eb85a639cf1ea31333dadc2be999a1 react-native-netinfo: 5b664b2945a8f02102b296f0f812bddd6827ed9c
react-native-onesignal: 9cb94608abf49ab78fb660f4cca0cd08e4da9742 react-native-onesignal: 7643517fe655b94cfda8e697ec16f9b9135648b8
react-native-orientation-locker: 998c0744e26624407dac068c04c605b4af7304a2 react-native-orientation-locker: 998c0744e26624407dac068c04c605b4af7304a2
react-native-pager-view: f21658a2e12eced35ef998250375e4e4dc9b8487 react-native-pager-view: 5ab4d0b4b44d89f77310cb3eb8129745f274ce55
react-native-print: 1ae7a4ce4bf673b975f2ec9c4e00ad0c9b60e8aa react-native-print: 1ae7a4ce4bf673b975f2ec9c4e00ad0c9b60e8aa
react-native-restart: 8af4579c94638f38bd9074ec477ebf087de87dc5 react-native-restart: 45c8dca02491980f2958595333cbccd6877cb57e
react-native-safe-area-context: 8465df05de8106c584b117f0e027e17174d6e02e react-native-safe-area-context: 61c8c484a3a9e7d1fda19f7b1794b35bbfd2262a
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865 react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-video: 77ce22be7abff9e373527ca10106a99dea3ba56c react-native-video: a4c2635d0802f983594b7057e1bce8f442f0ad28
React-perflogger: cc76a4254d19640f1d8ad1c66fdee800414b805c React-perflogger: 93075d8931c32cd1fce8a98c15d2d5ccc4d891bd
React-RCTActionSheet: 7448f049318d8d7e8a9a1ebb742ada721757eea8 React-RCTActionSheet: 7d3041e6761b4f3044a37079ddcb156575fb6d89
React-RCTAnimation: fb9b3fa1a4a9f5e6ab01b3368693ce69860ba76a React-RCTAnimation: 743e88b55ac62511ae5c2e22803d4f503f2a3a13
React-RCTBlob: a2e7056601c599c19884992f08ebacae810426f9 React-RCTBlob: bee3a2f98fa7fc25c957c8643494244f74bea0a0
React-RCTImage: 5a46c12327d0d6f6844a1fe38baa92a1e02847e8 React-RCTImage: 19fc9e29b06cc38611c553494f8d3040bf78c24e
React-RCTLinking: 63dd8305591e1def35267557ed42918aec9eb30b React-RCTLinking: dc799503979c8c711126d66328e7ce8f25c2848f
React-RCTNetwork: d0516e39a5f736b2bff671c3e03804200161dcd3 React-RCTNetwork: 417e4e34cf3c19eaa5fd4e9eb20180d662a799ce
React-RCTSettings: a09566b14f1649f6c8a39ad1a174bb5c0631bb09 React-RCTSettings: 4df89417265af26501a7e0e9192a34d3d9848dff
React-RCTText: 04a2f0a281f715f0aed4f515717fafd64510e2c8 React-RCTText: f8a21c3499ab322326290fa9b701ae29aa093aa5
React-RCTVibration: c7f845861e79eae13dc1e8217a3cf47a3945b504 React-RCTVibration: e3ffca672dd3772536cb844274094b0e2c31b187
React-runtimeexecutor: 493d9abb8b23c3f84e19ae221eeba92cadcb70dc React-runtimeexecutor: dec32ee6f2e2a26e13e58152271535fadff5455a
ReactCommon: 8fea6422328e2fc093e25c9fac67adbcf0f04fb4 ReactCommon: 57b69f6383eafcbd7da625bfa6003810332313c4
ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60 ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
RNAudioRecorderPlayer: 4482e03d9336c8d8ba41825af227f74f41ba0a01 RNAudioRecorderPlayer: 001f01049754e978c43af97162452c8563d5794a
RNCAsyncStorage: 0f655864a81214d1c5a9bf0faf79d86dc25c383e RNCAsyncStorage: e8b8d6320a0dd90eb610fb0d0b1ef90596697c69
RNCClipboard: 5e299c6df8e0c98f3d7416b86ae563d3a9f768a3 RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNCPicker: c3a3d481bec16624ed84a3c2a64c92fdc5515960 RNCPicker: abc646b53a3d28ccfa3232c927a0ca52e0cf024d
RNCPushNotificationIOS: 089da3b657e1e3d464f38195fd2e3069608ef5af RNCPushNotificationIOS: 87b8d16d3ede4532745e05b03c42cff33a36cc45
RNDeviceInfo: 0d6865ab0a57d9192bdd4e4f5894340b846c3e53 RNDeviceInfo: cc7de0772378f85d8f36ae439df20f05c590a651
RNFastImage: 1f2cab428712a4baaf78d6169eaec7f622556dd7 RNFastImage: 1f2cab428712a4baaf78d6169eaec7f622556dd7
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211 RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211
RNImageCropPicker: 448d3c6e923fde3466b49caf3c2457c2a0ba02dd RNImageCropPicker: 448d3c6e923fde3466b49caf3c2457c2a0ba02dd
RNPermissions: bf844d392fe0ecbfbd2e4ae2b88cc32f2f09b369 RNPermissions: f7ebe52db07c00901127966ca080b4ec6a6ceb0a
RNReanimated: 58e7b950e0172235ff8296dd39ec145f9577e301 RNReanimated: e8afbe2a9e08e9e778ea72ddb1a8533445812621
RNScreens: eb0dfb2d6b21d2d7f980ad46b14eb306d2f1062e RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19
RNShare: 2074af48908436c310847c6c47ebb6129db1dc89 RNShare: 2074af48908436c310847c6c47ebb6129db1dc89
RNSoundLevel: a02f3bfbb81aeec256de4e41d7fc967b32e3faf1 RNSoundLevel: 3dd5d2f6431e47f806233600936deb636a0d9800
RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f
RNVectorIcons: f67a1abce2ec73e62fe4606e8110e95a832bc859 RNVectorIcons: f67a1abce2ec73e62fe4606e8110e95a832bc859
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815 SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
Yoga: e6ecf3fa25af9d4c87e94ad7d5d292eedef49749 Yoga: e7dc4e71caba6472ff48ad7d234389b91dadc280
PODFILE CHECKSUM: 08b7d007885579803f4a8533ea82622e0abf9ea0 PODFILE CHECKSUM: 84095de8933a4dd5453dfc3e9b9434cdd134be0d
COCOAPODS: 1.11.3 COCOAPODS: 1.11.3

130
ios/taskme.xcodeproj/project.pbxproj

@ -13,16 +13,16 @@
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
15A240E2A6D8A43F0ED0FB1D /* libPods-taskme-taskmeTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B98C6B3676786E12016A3B65 /* libPods-taskme-taskmeTests.a */; };
1CEA5DFB26FCA6F700BCC3E1 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CEA5DFA26FCA6F700BCC3E1 /* File.swift */; }; 1CEA5DFB26FCA6F700BCC3E1 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CEA5DFA26FCA6F700BCC3E1 /* File.swift */; };
2987B7362760E7DD00D6426B /* Gilroy-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2987B7322760E7DD00D6426B /* Gilroy-Bold.ttf */; }; 2987B7362760E7DD00D6426B /* Gilroy-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2987B7322760E7DD00D6426B /* Gilroy-Bold.ttf */; };
2987B7372760E7DD00D6426B /* Gilroy-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2987B7332760E7DD00D6426B /* Gilroy-Regular.ttf */; }; 2987B7372760E7DD00D6426B /* Gilroy-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2987B7332760E7DD00D6426B /* Gilroy-Regular.ttf */; };
2987B7382760E7DD00D6426B /* Gilroy-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2987B7342760E7DD00D6426B /* Gilroy-Medium.ttf */; }; 2987B7382760E7DD00D6426B /* Gilroy-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2987B7342760E7DD00D6426B /* Gilroy-Medium.ttf */; };
2987B7392760E7DD00D6426B /* Gilroy-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2987B7352760E7DD00D6426B /* Gilroy-Semibold.ttf */; }; 2987B7392760E7DD00D6426B /* Gilroy-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2987B7352760E7DD00D6426B /* Gilroy-Semibold.ttf */; };
351C4708CAEFBEEF00A7751B /* libPods-taskme.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E0D9841D5E19D48DB27B6E8F /* libPods-taskme.a */; };
5244945D26B7EA27006A5FAB /* fontello.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5244945C26B7EA27006A5FAB /* fontello.ttf */; }; 5244945D26B7EA27006A5FAB /* fontello.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5244945C26B7EA27006A5FAB /* fontello.ttf */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
E1A9811C9E140ECC9EE00615 /* libPods-taskme.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A67EF2793DF34630DF8428E /* libPods-taskme.a */; }; C6C66451B8D8A43356F937FF /* libPods-taskme-taskmeTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD3F4AE12EA96D8B388B80A0 /* libPods-taskme-taskmeTests.a */; };
F7524E431D1FCB68DF75F11A /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1875C61D4A5C25FC075EDF51 /* libPods-OneSignalNotificationServiceExtension.a */; }; D63F37C0F7E8F6E6EF6EC377 /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 568BFAB32545F9E80E3CE9AB /* libPods-OneSignalNotificationServiceExtension.a */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
@ -57,7 +57,6 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
002266F6E63A359C134149B0 /* Pods-taskme-taskmeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme-taskmeTests.debug.xcconfig"; path = "Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests.debug.xcconfig"; sourceTree = "<group>"; };
00E356EE1AD99517003FC87E /* taskmeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = taskmeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356EE1AD99517003FC87E /* taskmeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = taskmeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* taskmeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = taskmeTests.m; sourceTree = "<group>"; }; 00E356F21AD99517003FC87E /* taskmeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = taskmeTests.m; sourceTree = "<group>"; };
@ -76,32 +75,33 @@
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = taskme/Info.plist; sourceTree = "<group>"; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = taskme/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = taskme/main.m; sourceTree = "<group>"; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = taskme/main.m; sourceTree = "<group>"; };
14C92B86EBCC43CBA49665B8 /* 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>"; }; 14C92B86EBCC43CBA49665B8 /* 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>"; };
1875C61D4A5C25FC075EDF51 /* libPods-OneSignalNotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OneSignalNotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
1CEA5DF926FCA6F600BCC3E1 /* taskme-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "taskme-Bridging-Header.h"; sourceTree = "<group>"; }; 1CEA5DF926FCA6F600BCC3E1 /* taskme-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "taskme-Bridging-Header.h"; sourceTree = "<group>"; };
1CEA5DFA26FCA6F700BCC3E1 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = "<group>"; }; 1CEA5DFA26FCA6F700BCC3E1 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = "<group>"; };
1F5EF60061E54FB0AF25C308 /* 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>"; }; 1F5EF60061E54FB0AF25C308 /* 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>"; };
26D9C4DB7C57AD8DF41BBF0C /* Pods-taskme.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme.release.xcconfig"; path = "Target Support Files/Pods-taskme/Pods-taskme.release.xcconfig"; sourceTree = "<group>"; };
2929AE903C2818917F4F8BD3 /* Pods-taskme.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme.debug.xcconfig"; path = "Target Support Files/Pods-taskme/Pods-taskme.debug.xcconfig"; sourceTree = "<group>"; };
2987B7322760E7DD00D6426B /* Gilroy-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Gilroy-Bold.ttf"; path = "../src/assets/fonts/Gilroy-Bold.ttf"; sourceTree = "<group>"; }; 2987B7322760E7DD00D6426B /* Gilroy-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Gilroy-Bold.ttf"; path = "../src/assets/fonts/Gilroy-Bold.ttf"; sourceTree = "<group>"; };
2987B7332760E7DD00D6426B /* Gilroy-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Gilroy-Regular.ttf"; path = "../src/assets/fonts/Gilroy-Regular.ttf"; sourceTree = "<group>"; }; 2987B7332760E7DD00D6426B /* Gilroy-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Gilroy-Regular.ttf"; path = "../src/assets/fonts/Gilroy-Regular.ttf"; sourceTree = "<group>"; };
2987B7342760E7DD00D6426B /* Gilroy-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Gilroy-Medium.ttf"; path = "../src/assets/fonts/Gilroy-Medium.ttf"; sourceTree = "<group>"; }; 2987B7342760E7DD00D6426B /* Gilroy-Medium.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Gilroy-Medium.ttf"; path = "../src/assets/fonts/Gilroy-Medium.ttf"; sourceTree = "<group>"; };
2987B7352760E7DD00D6426B /* Gilroy-Semibold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Gilroy-Semibold.ttf"; path = "../src/assets/fonts/Gilroy-Semibold.ttf"; sourceTree = "<group>"; }; 2987B7352760E7DD00D6426B /* Gilroy-Semibold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Gilroy-Semibold.ttf"; path = "../src/assets/fonts/Gilroy-Semibold.ttf"; sourceTree = "<group>"; };
37D9710EF24F0880F098FE22 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.release.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.release.xcconfig"; sourceTree = "<group>"; };
3E0132E085B040ECBA70742C /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; }; 3E0132E085B040ECBA70742C /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
4D4A3C52CD04EF7DE81F26E9 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; sourceTree = "<group>"; };
5244945C26B7EA27006A5FAB /* fontello.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = fontello.ttf; path = ../src/assets/fonts/fontello.ttf; sourceTree = "<group>"; }; 5244945C26B7EA27006A5FAB /* fontello.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = fontello.ttf; path = ../src/assets/fonts/fontello.ttf; sourceTree = "<group>"; };
568BFAB32545F9E80E3CE9AB /* libPods-OneSignalNotificationServiceExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-OneSignalNotificationServiceExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; };
5F7AB8195E5548089203A788 /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = "<group>"; }; 5F7AB8195E5548089203A788 /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = "<group>"; };
60AB903BA8B3443CB0797A7E /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; }; 60AB903BA8B3443CB0797A7E /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
6268C41675EF4A2BB24E4DDE /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; }; 6268C41675EF4A2BB24E4DDE /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; };
6AA472CCC56965932E472EED /* Pods-taskme.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme.debug.xcconfig"; path = "Target Support Files/Pods-taskme/Pods-taskme.debug.xcconfig"; sourceTree = "<group>"; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = taskme/LaunchScreen.storyboard; sourceTree = "<group>"; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = taskme/LaunchScreen.storyboard; sourceTree = "<group>"; };
8A67EF2793DF34630DF8428E /* libPods-taskme.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme.a"; sourceTree = BUILT_PRODUCTS_DIR; };
8C051622AF0774A320C586E0 /* Pods-taskme-taskmeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme-taskmeTests.release.xcconfig"; path = "Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests.release.xcconfig"; sourceTree = "<group>"; };
918F5914B4544E6F9A0FB6C4 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; }; 918F5914B4544E6F9A0FB6C4 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
9F1E9EA99BBF6F20FB9B6BE5 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.release.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.release.xcconfig"; sourceTree = "<group>"; };
A00A5743695C40A480A9D8CD /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; }; A00A5743695C40A480A9D8CD /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; };
A8D35AA5042664E90B10AD3A /* Pods-taskme-taskmeTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme-taskmeTests.release.xcconfig"; path = "Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests.release.xcconfig"; sourceTree = "<group>"; };
AAC5712FBCC645558F9D6659 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; }; AAC5712FBCC645558F9D6659 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
B98C6B3676786E12016A3B65 /* libPods-taskme-taskmeTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme-taskmeTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; BB07B0CEB6720B5EE3DAF7A7 /* Pods-taskme.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme.release.xcconfig"; path = "Target Support Files/Pods-taskme/Pods-taskme.release.xcconfig"; sourceTree = "<group>"; };
CA195349B72A48B4A46E3330 /* 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>"; }; CA195349B72A48B4A46E3330 /* 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>"; };
CA7BDCAB23D83BAF356D9DBE /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; path = "Target Support Files/Pods-OneSignalNotificationServiceExtension/Pods-OneSignalNotificationServiceExtension.debug.xcconfig"; sourceTree = "<group>"; };
CD3F4AE12EA96D8B388B80A0 /* libPods-taskme-taskmeTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme-taskmeTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
DE06A1D2EC694C6CAB3459FA /* 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>"; }; DE06A1D2EC694C6CAB3459FA /* 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>"; };
E0D9841D5E19D48DB27B6E8F /* libPods-taskme.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme.a"; sourceTree = BUILT_PRODUCTS_DIR; };
E2035F61C1A93F52B7D8B11F /* Pods-taskme-taskmeTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme-taskmeTests.debug.xcconfig"; path = "Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests.debug.xcconfig"; sourceTree = "<group>"; };
E3A1F8EB6AEC40E899F663AD /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; }; E3A1F8EB6AEC40E899F663AD /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
F0A3EAEF5BF94A2580145235 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; }; F0A3EAEF5BF94A2580145235 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
@ -112,7 +112,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
15A240E2A6D8A43F0ED0FB1D /* libPods-taskme-taskmeTests.a in Frameworks */, C6C66451B8D8A43356F937FF /* libPods-taskme-taskmeTests.a in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -120,7 +120,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F7524E431D1FCB68DF75F11A /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */, D63F37C0F7E8F6E6EF6EC377 /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -128,7 +128,7 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
E1A9811C9E140ECC9EE00615 /* libPods-taskme.a in Frameworks */, 351C4708CAEFBEEF00A7751B /* libPods-taskme.a in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -182,9 +182,9 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
1875C61D4A5C25FC075EDF51 /* libPods-OneSignalNotificationServiceExtension.a */, 568BFAB32545F9E80E3CE9AB /* libPods-OneSignalNotificationServiceExtension.a */,
8A67EF2793DF34630DF8428E /* libPods-taskme.a */, E0D9841D5E19D48DB27B6E8F /* libPods-taskme.a */,
B98C6B3676786E12016A3B65 /* libPods-taskme-taskmeTests.a */, CD3F4AE12EA96D8B388B80A0 /* libPods-taskme-taskmeTests.a */,
); );
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
@ -254,12 +254,12 @@
B362F9321C4BC54C6EBF6F61 /* Pods */ = { B362F9321C4BC54C6EBF6F61 /* Pods */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
4D4A3C52CD04EF7DE81F26E9 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */, CA7BDCAB23D83BAF356D9DBE /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */,
37D9710EF24F0880F098FE22 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */, 9F1E9EA99BBF6F20FB9B6BE5 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */,
2929AE903C2818917F4F8BD3 /* Pods-taskme.debug.xcconfig */, 6AA472CCC56965932E472EED /* Pods-taskme.debug.xcconfig */,
26D9C4DB7C57AD8DF41BBF0C /* Pods-taskme.release.xcconfig */, BB07B0CEB6720B5EE3DAF7A7 /* Pods-taskme.release.xcconfig */,
002266F6E63A359C134149B0 /* Pods-taskme-taskmeTests.debug.xcconfig */, E2035F61C1A93F52B7D8B11F /* Pods-taskme-taskmeTests.debug.xcconfig */,
8C051622AF0774A320C586E0 /* Pods-taskme-taskmeTests.release.xcconfig */, A8D35AA5042664E90B10AD3A /* Pods-taskme-taskmeTests.release.xcconfig */,
); );
path = Pods; path = Pods;
sourceTree = "<group>"; sourceTree = "<group>";
@ -271,12 +271,12 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "taskmeTests" */; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "taskmeTests" */;
buildPhases = ( buildPhases = (
05A63358E397D0C7F23A716D /* [CP] Check Pods Manifest.lock */, CEE028E836B1A9C2F855F8A9 /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */, 00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */, 00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */, 00E356EC1AD99517003FC87E /* Resources */,
81AFD8B4B669B76565FC34DB /* [CP] Embed Pods Frameworks */, C249A1A94BF022E793058B45 /* [CP] Embed Pods Frameworks */,
C7F1A036CDBAB8D78CEF801C /* [CP] Copy Pods Resources */, 2FA95D1E1C99B2A13D05EF47 /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
@ -292,7 +292,7 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 0480F72A27CBC3D10039631F /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */; buildConfigurationList = 0480F72A27CBC3D10039631F /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */;
buildPhases = ( buildPhases = (
203325252E357358819A84A8 /* [CP] Check Pods Manifest.lock */, 198567C5BC3502B493889F27 /* [CP] Check Pods Manifest.lock */,
0480F71E27CBC3D10039631F /* Sources */, 0480F71E27CBC3D10039631F /* Sources */,
0480F71F27CBC3D10039631F /* Frameworks */, 0480F71F27CBC3D10039631F /* Frameworks */,
0480F72027CBC3D10039631F /* Resources */, 0480F72027CBC3D10039631F /* Resources */,
@ -310,15 +310,15 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "taskme" */; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "taskme" */;
buildPhases = ( buildPhases = (
F7944BC36807E9149D112EEE /* [CP] Check Pods Manifest.lock */, 27274524B14EFAE59C70445B /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */, FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */, 13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */, 13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
0480F72D27CBC3D10039631F /* Embed App Extensions */, 0480F72D27CBC3D10039631F /* Embed App Extensions */,
47FE39BEBA6C7E1BC744F8EA /* [CP] Embed Pods Frameworks */, 7DCC28BD4E54265E720A02D8 /* [CP] Embed Pods Frameworks */,
6D6EE9CE83351AABBA201734 /* [CP] Copy Pods Resources */, 8ECA3C1F6A1F7B960BD088ED /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
@ -421,7 +421,7 @@
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n"; shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
}; };
05A63358E397D0C7F23A716D /* [CP] Check Pods Manifest.lock */ = { 198567C5BC3502B493889F27 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -436,14 +436,14 @@
outputFileListPaths = ( outputFileListPaths = (
); );
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-taskme-taskmeTests-checkManifestLockResult.txt", "$(DERIVED_FILE_DIR)/Pods-OneSignalNotificationServiceExtension-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; 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"; 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; showEnvVarsInLog = 0;
}; };
203325252E357358819A84A8 /* [CP] Check Pods Manifest.lock */ = { 27274524B14EFAE59C70445B /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -458,82 +458,82 @@
outputFileListPaths = ( outputFileListPaths = (
); );
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-OneSignalNotificationServiceExtension-checkManifestLockResult.txt", "$(DERIVED_FILE_DIR)/Pods-taskme-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; 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"; 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; showEnvVarsInLog = 0;
}; };
47FE39BEBA6C7E1BC744F8EA /* [CP] Embed Pods Frameworks */ = { 2FA95D1E1C99B2A13D05EF47 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-frameworks-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-resources-${CONFIGURATION}-input-files.xcfilelist",
); );
name = "[CP] Embed Pods Frameworks"; name = "[CP] Copy Pods Resources";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-frameworks-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-resources-${CONFIGURATION}-output-files.xcfilelist",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-resources.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
6D6EE9CE83351AABBA201734 /* [CP] Copy Pods Resources */ = { 7DCC28BD4E54265E720A02D8 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-resources-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-frameworks-${CONFIGURATION}-input-files.xcfilelist",
); );
name = "[CP] Copy Pods Resources"; name = "[CP] Embed Pods Frameworks";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-resources-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-resources.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-frameworks.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
81AFD8B4B669B76565FC34DB /* [CP] Embed Pods Frameworks */ = { 8ECA3C1F6A1F7B960BD088ED /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-resources-${CONFIGURATION}-input-files.xcfilelist",
); );
name = "[CP] Embed Pods Frameworks"; name = "[CP] Copy Pods Resources";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-resources-${CONFIGURATION}-output-files.xcfilelist",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme/Pods-taskme-resources.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
C7F1A036CDBAB8D78CEF801C /* [CP] Copy Pods Resources */ = { C249A1A94BF022E793058B45 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
); );
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-resources-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
); );
name = "[CP] Copy Pods Resources"; name = "[CP] Embed Pods Frameworks";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-resources-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-resources.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme-taskmeTests/Pods-taskme-taskmeTests-frameworks.sh\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
F7944BC36807E9149D112EEE /* [CP] Check Pods Manifest.lock */ = { CEE028E836B1A9C2F855F8A9 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
@ -548,7 +548,7 @@
outputFileListPaths = ( outputFileListPaths = (
); );
outputPaths = ( outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-taskme-checkManifestLockResult.txt", "$(DERIVED_FILE_DIR)/Pods-taskme-taskmeTests-checkManifestLockResult.txt",
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
@ -621,7 +621,7 @@
/* Begin XCBuildConfiguration section */ /* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = { 00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 002266F6E63A359C134149B0 /* Pods-taskme-taskmeTests.debug.xcconfig */; baseConfigurationReference = E2035F61C1A93F52B7D8B11F /* Pods-taskme-taskmeTests.debug.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
@ -649,7 +649,7 @@
}; };
00E356F71AD99517003FC87E /* Release */ = { 00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 8C051622AF0774A320C586E0 /* Pods-taskme-taskmeTests.release.xcconfig */; baseConfigurationReference = A8D35AA5042664E90B10AD3A /* Pods-taskme-taskmeTests.release.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
@ -674,7 +674,7 @@
}; };
0480F72B27CBC3D10039631F /* Debug */ = { 0480F72B27CBC3D10039631F /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 4D4A3C52CD04EF7DE81F26E9 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */; baseConfigurationReference = CA7BDCAB23D83BAF356D9DBE /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */;
buildSettings = { buildSettings = {
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@ -715,7 +715,7 @@
}; };
0480F72C27CBC3D10039631F /* Release */ = { 0480F72C27CBC3D10039631F /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 37D9710EF24F0880F098FE22 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */; baseConfigurationReference = 9F1E9EA99BBF6F20FB9B6BE5 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */;
buildSettings = { buildSettings = {
CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@ -756,7 +756,7 @@
}; };
13B07F941A680F5B00A75B9A /* Debug */ = { 13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 2929AE903C2818917F4F8BD3 /* Pods-taskme.debug.xcconfig */; baseConfigurationReference = 6AA472CCC56965932E472EED /* Pods-taskme.debug.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@ -764,7 +764,7 @@
CODE_SIGN_ENTITLEMENTS = taskme/taskme.entitlements; CODE_SIGN_ENTITLEMENTS = taskme/taskme.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 101; CURRENT_PROJECT_VERSION = 103;
DEVELOPMENT_TEAM = HQ3J3TDPR2; DEVELOPMENT_TEAM = HQ3J3TDPR2;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
@ -794,7 +794,7 @@
}; };
13B07F951A680F5B00A75B9A /* Release */ = { 13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration; isa = XCBuildConfiguration;
baseConfigurationReference = 26D9C4DB7C57AD8DF41BBF0C /* Pods-taskme.release.xcconfig */; baseConfigurationReference = BB07B0CEB6720B5EE3DAF7A7 /* Pods-taskme.release.xcconfig */;
buildSettings = { buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@ -802,7 +802,7 @@
CODE_SIGN_ENTITLEMENTS = taskme/taskme.entitlements; CODE_SIGN_ENTITLEMENTS = taskme/taskme.entitlements;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 101; CURRENT_PROJECT_VERSION = 103;
DEVELOPMENT_TEAM = HQ3J3TDPR2; DEVELOPMENT_TEAM = HQ3J3TDPR2;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";

6289
package-lock.json generated

File diff suppressed because it is too large Load Diff

41
package.json

@ -14,7 +14,6 @@
}, },
"dependencies": { "dependencies": {
"@bitalikrty/redux-create-reducer": "^1.0.0", "@bitalikrty/redux-create-reducer": "^1.0.0",
"@expo/react-native-action-sheet": "^3.13.0",
"@gorhom/bottom-sheet": "^4.1.5", "@gorhom/bottom-sheet": "^4.1.5",
"@miblanchard/react-native-slider": "^2.1.0", "@miblanchard/react-native-slider": "^2.1.0",
"@react-native-async-storage/async-storage": "^1.15.8", "@react-native-async-storage/async-storage": "^1.15.8",
@ -22,7 +21,8 @@
"@react-native-community/clipboard": "^1.5.1", "@react-native-community/clipboard": "^1.5.1",
"@react-native-community/netinfo": "^9.0.0", "@react-native-community/netinfo": "^9.0.0",
"@react-native-community/push-notification-ios": "^1.10.1", "@react-native-community/push-notification-ios": "^1.10.1",
"@react-native-picker/picker": "^1.16.6", "@react-native-picker/picker": "^2.4.1",
"@react-native/normalize-color": "^2.0.0",
"@react-navigation/bottom-tabs": "^6.0.5", "@react-navigation/bottom-tabs": "^6.0.5",
"@react-navigation/native": "^6.0.2", "@react-navigation/native": "^6.0.2",
"@react-navigation/native-stack": "^6.1.0", "@react-navigation/native-stack": "^6.1.0",
@ -30,6 +30,7 @@
"@types/react-native-drawer": "^2.5.5", "@types/react-native-drawer": "^2.5.5",
"@types/react-native-video": "^5.0.13", "@types/react-native-video": "^5.0.13",
"axios": "^0.21.1", "axios": "^0.21.1",
"buffer": "^6.0.3",
"cachios": "^3.0.0", "cachios": "^3.0.0",
"events": "^3.3.0", "events": "^3.3.0",
"jet-tools": "^1.1.0", "jet-tools": "^1.1.0",
@ -39,8 +40,8 @@
"moment": "^2.29.1", "moment": "^2.29.1",
"oa-react-native-clear-cache": "^1.0.3", "oa-react-native-clear-cache": "^1.0.3",
"path": "^0.12.7", "path": "^0.12.7",
"react": "17.0.1", "react": "^17.0.2",
"react-native": "^0.64.3", "react-native": "^0.66.4",
"react-native-app-badge": "^0.1.5", "react-native-app-badge": "^0.1.5",
"react-native-audio-recorder-player": "^3.4.0", "react-native-audio-recorder-player": "^3.4.0",
"react-native-autolink": "^4.0.0", "react-native-autolink": "^4.0.0",
@ -66,7 +67,6 @@
"react-native-make": "^1.0.1", "react-native-make": "^1.0.1",
"react-native-masked-text": "^1.13.0", "react-native-masked-text": "^1.13.0",
"react-native-modal": "^13.0.1", "react-native-modal": "^13.0.1",
"react-native-offline": "^6.0.0",
"react-native-onesignal": "^4.3.7", "react-native-onesignal": "^4.3.7",
"react-native-orientation-locker": "^1.3.1", "react-native-orientation-locker": "^1.3.1",
"react-native-pager-view": "^5.4.4", "react-native-pager-view": "^5.4.4",
@ -90,7 +90,7 @@
"react-native-video": "^5.2.0", "react-native-video": "^5.2.0",
"react-native-video-controls": "^2.8.1", "react-native-video-controls": "^2.8.1",
"react-native-video-player": "^0.12.0", "react-native-video-player": "^0.12.0",
"react-native-wheel-pick": "^1.1.1", "react-native-wheel-pick": "^1.1.7",
"react-redux": "^7.2.4", "react-redux": "^7.2.4",
"reactotron-react-native": "^5.0.1", "reactotron-react-native": "^5.0.1",
"reactotron-redux": "^3.1.3", "reactotron-redux": "^3.1.3",
@ -104,6 +104,7 @@
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@bam.tech/react-native-make": "^3.0.3", "@bam.tech/react-native-make": "^3.0.3",
"@react-native-community/eslint-config": "^2.0.0", "@react-native-community/eslint-config": "^2.0.0",
"@rnx-kit/dep-check": "^1.12.16",
"@types/lodash": "^4.14.171", "@types/lodash": "^4.14.171",
"@types/react-native": "^0.64.12", "@types/react-native": "^0.64.12",
"babel-core": "^7.0.0-bridge.0", "babel-core": "^7.0.0-bridge.0",
@ -114,13 +115,37 @@
"eslint": "7.14.0", "eslint": "7.14.0",
"icon-set-creator": "^0.1.3", "icon-set-creator": "^0.1.3",
"jest": "^26.6.3", "jest": "^26.6.3",
"metro-react-native-babel-preset": "^0.64.0", "metro-react-native-babel-preset": "^0.66.2",
"patch-package": "^6.4.7", "patch-package": "^6.4.7",
"react-native-svg-app-icon": "^0.5.0", "react-native-svg-app-icon": "^0.5.0",
"react-native-svg-transformer": "^0.14.3", "react-native-svg-transformer": "^0.14.3",
"react-test-renderer": "17.0.1" "react-test-renderer": "^17.0.2"
}, },
"jest": { "jest": {
"preset": "react-native" "preset": "react-native"
},
"rnx-kit": {
"reactNativeVersion": "^0.64",
"kitType": "app",
"capabilities": [
"animation",
"babel-preset-react-native",
"core",
"core-android",
"core-ios",
"filesystem",
"gestures",
"jest",
"modal",
"navigation/native",
"navigation/stack",
"netinfo",
"react",
"react-test-renderer",
"safe-area",
"screens",
"storage",
"svg"
]
} }
} }

26
src/App.tsx

@ -7,12 +7,10 @@ import { ThemeProvider } from './shared/themes'
import Orientation from 'react-native-orientation-locker' import Orientation from 'react-native-orientation-locker'
import { LogBox } from 'react-native' import { LogBox } from 'react-native'
import { appService } from './services/app.service' import { appService } from './services/app.service'
import { NetworkProvider } from 'react-native-offline'
import { ActionSheetProvider } from '@expo/react-native-action-sheet'
import 'react-native-gesture-handler' import 'react-native-gesture-handler'
import { BottomSheetModalProvider } from '@gorhom/bottom-sheet' import { BottomSheetModalProvider } from '@gorhom/bottom-sheet'
import axios from 'axios'
import { fetchGroupsWithTasksCountReq } from './api' import { SafeAreaProvider } from 'react-native-safe-area-context'
LogBox.ignoreLogs(['Warning: ...', 'Require cycle: ...']) // Ignore log notification by message LogBox.ignoreLogs(['Warning: ...', 'Require cycle: ...']) // Ignore log notification by message
LogBox.ignoreAllLogs() //Ignore all log notifications LogBox.ignoreAllLogs() //Ignore all log notifications
@ -24,17 +22,15 @@ const App: FC = () => {
}, []) }, [])
return ( return (
<ThemeProvider key="theme-provider"> <SafeAreaProvider>
<BottomSheetModalProvider key="bottom-sheet"> <ThemeProvider key="theme-provider">
<NetworkProvider key="network-provider"> <BottomSheetModalProvider key="bottom-sheet">
<ActionSheetProvider key="action-sheet"> <Provider store={store} key="provider">
<Provider store={store} key="provider"> <Navigation />
<Navigation /> </Provider>
</Provider> </BottomSheetModalProvider>
</ActionSheetProvider> </ThemeProvider>
</NetworkProvider> </SafeAreaProvider>
</BottomSheetModalProvider>
</ThemeProvider>
) )
} }

1
src/api/account/responses.interfaces.ts

@ -6,4 +6,5 @@ export interface IGetAccountCacheInfoResponse {
accountV?: string accountV?: string
permissionsV?: string permissionsV?: string
taxonomiesV?: string
} }

14
src/api/chats/requests.ts

@ -8,7 +8,10 @@ import * as res from './responses.interfaces'
export const createChatGroupReq = ( export const createChatGroupReq = (
params: req.ICreateGroupChat, params: req.ICreateGroupChat,
): ApiResponse<res.NewChatGroupId> => { ): ApiResponse<res.NewChatGroupId> => {
return http.post<res.NewChatGroupId>('chats/group-chat', convertToFormData(params)) return http.post<res.NewChatGroupId>(
'chats/group-chat',
convertToFormData(params),
)
} }
export const createPersonalChatReq = ( export const createPersonalChatReq = (
@ -22,7 +25,10 @@ export const getChatsListReq = (
params: { limit: 20 }, params: { limit: 20 },
}, },
): ApiResponse<res.IFetchChatList> => { ): ApiResponse<res.IFetchChatList> => {
return http.get<res.IFetchChatList>('chats', params) return http.get<res.IFetchChatList>('chats', {
params: params.params,
// needCache: true,
})
} }
export const getChatDetailReq = ( export const getChatDetailReq = (
@ -55,9 +61,9 @@ export const unfixChatReq = (chatId: number) => {
} }
export const setChatUnreadReq = (chatId: number) => { export const setChatUnreadReq = (chatId: number) => {
return http.post(`chats/${chatId}/unread`,{}, {}, 'common/') return http.post(`chats/${chatId}/unread`, {}, {}, 'common/')
} }
export const setChatReadReq = (chatId: number) => { export const setChatReadReq = (chatId: number) => {
return http.post(`chats/${chatId}/read`,{}, {}, 'common/') return http.post(`chats/${chatId}/read`, {}, {}, 'common/')
} }

2
src/config/index.ts

@ -10,7 +10,7 @@ export const dynamicConfig = {
// socketUrl: 'http://46.101.170.206:5000', // socketUrl: 'http://46.101.170.206:5000',
baseUrl: 'https://taskme-api.work-jetup.site', baseUrl: 'https://taskme-api.work-jetup.site',
socketUrl: 'https://taskme-api.work-jetup.site/', socketUrl: 'https://taskme-api.work-jetup.site',
oneSignalKey: '8b9066f5-8c3f-49f7-bef4-c5ab621f9d27', oneSignalKey: '8b9066f5-8c3f-49f7-bef4-c5ab621f9d27',
} }

10
src/modules/chats/components/chats-list.component.tsx

@ -12,7 +12,13 @@ import { getMessagePreviewText } from '@/shared/helpers'
import { useTheme } from '@/shared/hooks/use-theme.hook' import { useTheme } from '@/shared/hooks/use-theme.hook'
import { PartialTheme } from '@/shared/themes/interfaces' import { PartialTheme } from '@/shared/themes/interfaces'
import React, { FC, useCallback } from 'react' import React, { FC, useCallback } from 'react'
import { ActivityIndicator, StyleSheet, View, ViewStyle } from 'react-native' import {
ActivityIndicator,
FlatList,
StyleSheet,
View,
ViewStyle,
} from 'react-native'
import Animated from 'react-native-reanimated' import Animated from 'react-native-reanimated'
import { ChatCardActionEnum } from '../enums' import { ChatCardActionEnum } from '../enums'
import { SwipableChatRowCardSmart } from '../smart-components' import { SwipableChatRowCardSmart } from '../smart-components'
@ -93,7 +99,7 @@ export const ChatsList: FC<IProps> = ({
return ( return (
<View style={[styles.container, style]}> <View style={[styles.container, style]}>
<Animated.FlatList <FlatList
keyExtractor={it => `${it.id}`} keyExtractor={it => `${it.id}`}
ListHeaderComponent={header} ListHeaderComponent={header}
data={chats ? chats : []} data={chats ? chats : []}

16
src/modules/chats/helpers/chats-helpers.helper.ts

@ -0,0 +1,16 @@
import { IChatMessage } from '@/shared'
import _ from 'lodash'
export const isChatInList = (chats: any[], chatId: number) => {
const chatIds = chats.map(it => Number(it.id))
return _.includes(chatIds, Number(chatId))
}
export const getChatIdFromMessages = (data: {
message: IChatMessage | IChatMessage[]
}) => {
if (_.isArray(data.message) && !_.isEmpty(data.message))
return data.message[0].chatId
return (data.message as IChatMessage).chatId
}

7
src/modules/chats/helpers/index.ts

@ -1,4 +1,5 @@
export * from './get-time-from-message-send.helper' export * from './chat-messages.helper'
export * from './get-header-chat-info.helper' export * from './chats-helpers.helper'
export * from './get-chat-info.helper' export * from './get-chat-info.helper'
export * from './chat-messages.helper' export * from './get-header-chat-info.helper'
export * from './get-time-from-message-send.helper'

16
src/modules/chats/hooks/use-chat-messages.hook.ts

@ -226,12 +226,6 @@ export const useChatMessages = (
}) })
} }
const onProfilePress = (authorId: number) => {
nav.navigate(RouteKey.ContactDetail, {
contactId: authorId,
})
}
const onPressMessagePreview = async (id: number) => { const onPressMessagePreview = async (id: number) => {
if (_.find(messages, message => message.id === id)) setScrollToId(id) if (_.find(messages, message => message.id === id)) setScrollToId(id)
else loadMessage(id) else loadMessage(id)
@ -391,7 +385,14 @@ export const useChatMessages = (
useEventsListener('onDeleteMessage', onMessageDeleted, [chatId, messages]) useEventsListener('onDeleteMessage', onMessageDeleted, [chatId, messages])
useSocketListener('chat/new-message', onNewMessage, [chatId, messages]) useSocketListener(
'chat/new-message',
data => {
console.log('NEW MESSAGE')
onNewMessage(data)
},
[chatId, messages],
)
useSocketListener('chat/delete-message', onMessageDeleted, [ useSocketListener('chat/delete-message', onMessageDeleted, [
chatId, chatId,
@ -420,7 +421,6 @@ export const useChatMessages = (
}, },
resetList, resetList,
onLongPress, onLongPress,
onProfilePress,
replyTo, replyTo,
setReplyToMessage: setReplyTo, setReplyToMessage: setReplyTo,
onPressMessagePreview, onPressMessagePreview,

377
src/modules/chats/hooks/use-chats-list.hook.ts

@ -1,11 +1,10 @@
import { useEffect } from 'react' import { useCallback, useEffect } from 'react'
import { useState } from 'react' import { useState } from 'react'
import { import {
appEvents, appEvents,
ChatMemberRole, ChatMemberRole,
ChatType, ChatType,
IChat, IChat,
IChatMessage,
RouteKey, RouteKey,
useEventsListener, useEventsListener,
useFlatList, useFlatList,
@ -23,17 +22,15 @@ import { ChatCardActionEnum } from '../enums'
import { useSelector } from 'react-redux' import { useSelector } from 'react-redux'
import { selectId } from '@/store/account' import { selectId } from '@/store/account'
import { import {
exportMessagesToFileReq,
fixChatReq, fixChatReq,
getChatsListReq,
setChatReadReq, setChatReadReq,
setChatUnreadReq, setChatUnreadReq,
unfixChatReq, unfixChatReq,
} from '@/api' } from '@/api'
import { Buffer } from 'buffer'
import { fsService } from '@/services/system' import { showUknowError } from '@/shared/helpers/alert.helper'
import Share from 'react-native-share' import { getChatIdFromMessages, isChatInList } from '../helpers'
import RNFS from 'react-native-fs'
import { Alert, Platform } from 'react-native'
export const useChatList = () => { export const useChatList = () => {
const nav = useNav() const nav = useNav()
@ -50,52 +47,27 @@ export const useChatList = () => {
isLoadingNext, isLoadingNext,
_setItems, _setItems,
} = useFlatList<IChat>({ } = useFlatList<IChat>({
fetchItems: params => chatsService.fetch(params), fetchItems: getChatsListReq,
needInit: true, needInit: true,
clearWhenReload: false, clearWhenReload: false,
limit: 10,
}) })
useEffect(() => { useEffect(() => {
if (searchString || searchString === '') setLoadParams({ searchString }) if (searchString !== null) setLoadParams({ searchString })
}, [searchString]) }, [searchString])
const handleError = () => const reloadIfIncludes = useCallback(
appEvents.emit('openInfoModal', { (chatId: number) => {
title: 'Виникла помилка, ', if (isChatInList(chats, chatId)) resetFlatList()
message: 'спробуйте будь-ласка пізніше', },
pressButtonText: 'Продовжити', [chats],
}) )
const presentInList = (chatId: number) => {
const chatIds = chats.map(it => it.id)
return _.includes(chatIds, chatId)
}
const reloadIfIncludes = (chatId: number) => {
if (presentInList(Number(chatId))) resetFlatList()
}
const onReadChat = (data: { chatId: number }) => {
const chat = _.find(chats, chat => chat.id === data.chatId)
if (!chat || (chat?.unreadMessagesCount <= 0 && !chat?.isChatUnread))
return
const newChats = chats.map(it => { const onEdit = useCallback(
if (it.id === data.chatId) { (chatId: number) => nav.navigate(RouteKey.GroupChatDetail, { chatId }),
return { [nav.navigate],
...it, )
unreadMessagesCount: 0,
isChatUnread: false,
}
}
return it
})
_setItems(newChats)
}
const onEdit = (chatId: number) =>
nav.navigate(RouteKey.GroupChatDetail, { chatId })
const onRead = async (chatId: number, data?: Partial<IChat>) => { const onRead = async (chatId: number, data?: Partial<IChat>) => {
const chat = _.find(chats, chat => chat.id === chatId) const chat = _.find(chats, chat => chat.id === chatId)
@ -119,45 +91,44 @@ export const useChatList = () => {
const setUnread = async (chatId: number) => { const setUnread = async (chatId: number) => {
try { try {
await setChatUnreadReq(chatId) await setChatUnreadReq(chatId)
const newChats = chats.map(it => {
if (it.id === chatId) {
return {
...it,
isChatUnread: true,
}
}
return it
})
_setItems(newChats) _setItems(
_.clone(chats).map(it => {
if (it.id === chatId) it.isChatUnread = true
return it
}),
)
} catch (e) { } catch (e) {
handleError() showUknowError()
} }
} }
const handleDeleteForMe = async (chatId: number) => { const handleDeleteForMe = useCallback(
const chat = _.find(chats, chat => chat.id === chatId) async (chatId: number) => {
const chat = _.find(chats, chat => chat.id === chatId)
appEvents.emit('openConfirmModal', {
title: 'Ви впевнені, що хочете \n видалити чат?', appEvents.emit('openConfirmModal', {
buttonToHighlight: 'allow', title: 'Ви впевнені, що хочете \n видалити чат?',
allowBtnAction: async () => buttonToHighlight: 'allow',
await chatMembersService.deleteMember( allowBtnAction: async () =>
{ chatId }, await chatMembersService.deleteMember(
chat.unreadMessagesCount, { chatId },
), chat.unreadMessagesCount,
notAllowBtnAction: () => {}, ),
}) notAllowBtnAction: () => {},
} })
},
[chats],
)
const handleDeleteForAll = async (chatId: number) => { const handleDeleteForAll = useCallback(async (chatId: number) => {
appEvents.emit('openConfirmModal', { appEvents.emit('openConfirmModal', {
title: 'Ви впевнені, що хочете \n видалити чат?', title: 'Ви впевнені, що хочете \n видалити чат?',
buttonToHighlight: 'allow', buttonToHighlight: 'allow',
allowBtnAction: async () => await chatsService.deleteById(chatId), allowBtnAction: async () => await chatsService.deleteById(chatId),
notAllowBtnAction: () => {}, notAllowBtnAction: () => {},
}) })
} }, [])
const onDelete = (chatId: number) => { const onDelete = (chatId: number) => {
const chat = _.find(chats, chat => chat.id === chatId) const chat = _.find(chats, chat => chat.id === chatId)
@ -185,28 +156,19 @@ export const useChatList = () => {
} else handleDeleteForMe(chatId) } else handleDeleteForMe(chatId)
} }
const getPinnedList = () => { const handleClearForMe = useCallback(
return chats.filter(it => it.isChatFixed) async (chatId: number, unreadCount: number) => {
}
const handleClearForMe = async (chatId: number, unreadCount: number) => {
try {
await chatMessagesService.clearChatMessages({ chatId }, unreadCount) await chatMessagesService.clearChatMessages({ chatId }, unreadCount)
} catch (e) { },
handleError() [],
} )
}
const handleClearForAll = async (chatId: number) => { const handleClearForAll = useCallback(async (chatId: number) => {
try { await chatMessagesService.clearChatMessages({
await chatMessagesService.clearChatMessages({ chatId,
chatId, deleteForAll: true,
deleteForAll: true, })
}) }, [])
} catch (e) {
handleError()
}
}
const onClear = (chatId: number) => { const onClear = (chatId: number) => {
const chat = _.find(chats, chat => chat.id === chatId) const chat = _.find(chats, chat => chat.id === chatId)
@ -232,7 +194,7 @@ export const useChatList = () => {
try { try {
const chatIndex = chats.findIndex(it => it.id === chatId) const chatIndex = chats.findIndex(it => it.id === chatId)
if (chats[chatIndex].isChatFixed) return unPin(chatId) if (chats[chatIndex].isChatFixed) return unPin(chatId)
const pinned = getPinnedList() const pinned = chats.filter(it => it.isChatFixed)
if (pinned.length > 4) { if (pinned.length > 4) {
appEvents.emit('openInfoModal', { appEvents.emit('openInfoModal', {
title: 'Максимум закріпленних чатів ', title: 'Максимум закріпленних чатів ',
@ -254,14 +216,14 @@ export const useChatList = () => {
}) })
_setItems(newList) _setItems(newList)
} catch (e) { } catch (e) {
handleError() showUknowError()
} }
} }
const unPin = async (chatId: number) => { const unPin = async (chatId: number) => {
try { try {
await unfixChatReq(chatId) await unfixChatReq(chatId)
const pinned = getPinnedList() const pinned = chats.filter(it => it.isChatFixed)
const lastPinnedIndex = chats.findIndex( const lastPinnedIndex = chats.findIndex(
it => it.id === pinned[pinned.length - 1].id, it => it.id === pinned[pinned.length - 1].id,
) )
@ -274,70 +236,7 @@ export const useChatList = () => {
}) })
_setItems(newList) _setItems(newList)
} catch (e) { } catch (e) {
handleError() showUknowError()
}
}
const onShare = async (chatId: number) => {
try {
const { data }: Record<string, any> = await exportMessagesToFileReq(
{
chatId,
},
)
const base64 = Buffer.from(data.file).toString('base64')
if (Platform.OS === 'ios') {
const path = await fsService.writeFile({
content: Buffer.from(data.file).toString(),
fileName: data.fileName,
})
Share.open({
url: path,
})
} else {
Share.open({
urls: [`data:text/plain;base64,${base64}`],
filenames: [`chat-${chatId}.txt`],
})
// appEvents.emit('openActionSheet', {
// items: [
// {
// name: 'Завантажити',
// onPress: async () => {
// const path = await fsService.writeFile({
// content: Buffer.from(data.file).toString(),
// fileName: data.fileName,
// })
// await fsService.dowloadByRNB(path, 'txt')
// appEvents.emit('openInfoModal', {
// title: 'Файл успішно завантажено!',
// message:
// 'Файл викачаний в папку "Завантаження"',
// onPressOk: () => {},
// })
// },
// },
// {
// name: 'Поділитись',
// onPress: () => {
// Share.open({
// urls: [`data:text/plain;base64,${base64}`],
// filenames: [`chat-${chatId}.txt`],
// })
// },
// },
// ],
// })
}
} catch (e) {
appEvents.emit('openInfoModal', {
title: 'Сталась помилка!',
message: 'Спробуйте будь-ласка пізніше.',
onPressOk: () => {},
})
} }
} }
@ -347,7 +246,7 @@ export const useChatList = () => {
[ChatCardActionEnum.DELETE]: onDelete, [ChatCardActionEnum.DELETE]: onDelete,
[ChatCardActionEnum.PIN]: onPin, [ChatCardActionEnum.PIN]: onPin,
[ChatCardActionEnum.CLEAR]: onClear, [ChatCardActionEnum.CLEAR]: onClear,
[ChatCardActionEnum.SHARE]: onShare, [ChatCardActionEnum.SHARE]: chatsService.shareChat,
} }
const handleChatAction = ( const handleChatAction = (
@ -358,81 +257,101 @@ export const useChatList = () => {
actions[actionType](chatId, data) actions[actionType](chatId, data)
} }
const getChatIdFromData = (data: { const onReadChat = useCallback(
message: IChatMessage | IChatMessage[] (data: { chatId: number }) => {
}) => { const chat = _.find(chats, chat => chat.id === data.chatId)
if (_.isArray(data.message) && !_.isEmpty(data.message)) if (
return data.message[0].chatId !chat ||
(chat?.unreadMessagesCount <= 0 && !chat?.isChatUnread)
return (data.message as IChatMessage).chatId )
} return
const onNewMessage = (data: { message: IChatMessage | IChatMessage[] }) => {
const chatId = getChatIdFromData(data)
reloadIfIncludes(chatId)
}
const onMessageDeleted = (data: { messageId: number; chatId: number }) => {
reloadIfIncludes(data?.chatId)
}
const onMessageDeletedForMe = (data: {
messageId: number
chatId: number
}) => {
const chat = _.find(chats, chat => chat.id === data.chatId)
if (chat && chat.lastMessage.id === data.messageId) resetFlatList()
}
const onClearChat = (data: { chatId: number }) => {
reloadIfIncludes(data?.chatId)
}
const onDeleteChat = (data: { chatId: number }) => {
reloadIfIncludes(data?.chatId)
}
const onEditChat = (data: { chatId: number }) => {
reloadIfIncludes(data?.chatId)
}
const onClearAllChats = () => {
const newChats = chats.map(it => ({
...it,
lastMessage: null,
lastMessageDate: it.createdAt,
unreadMessagesCount: 0,
isChatUnread: false,
}))
_setItems(newChats)
}
const onDeleteAllChats = () => _setItems([]) _setItems(
chats.map(it => {
if (it.id !== data.chatId) return it
return {
...it,
unreadMessagesCount: 0,
isChatUnread: false,
}
}),
)
},
[chats],
)
useEventsListener('onReadChat', onReadChat, [chats]) useEventsListener('onReadChat', onReadChat, [chats])
useEventsListener('onClearAllChats', onClearAllChats, [chats]) useSocketListener(
'chat/delete-message',
useEventsListener('onDeleteAllChats', onDeleteAllChats, [chats]) ({ chatId }) => reloadIfIncludes(chatId),
[reloadIfIncludes],
useEventsListener('onDeleteChatForMe', onDeleteChat, [chats]) )
useEventsListener('onDeleteMessage', onMessageDeletedForMe, [chats]) useSocketListener(
'chat/delete-chat',
useEventsListener('onClearChatForMe', onClearChat, [chats]) ({ chatId }) => reloadIfIncludes(chatId),
[reloadIfIncludes],
)
useEventsListener(
'onDeleteChatForMe',
({ chatId }) => reloadIfIncludes(chatId),
[reloadIfIncludes],
)
useEventsListener('onDeleteAllChats', () => _setItems([]), [_setItems])
useEventsListener(
'onDeleteMessage',
(data: { messageId: number; chatId: number }) => {
const chat = _.find(chats, chat => chat.id === data.chatId)
if (chat && chat.lastMessage.id === data.messageId) resetFlatList()
},
[chats],
)
useEventsListener(
'onClearChatForMe',
({ chatId }) => reloadIfIncludes(chatId),
[reloadIfIncludes],
)
useSocketListener('chat/new-chat', resetFlatList, []) useSocketListener('chat/new-chat', resetFlatList, [])
useSocketListener('chat/new-message', onNewMessage, [chats]) useSocketListener(
'chat/new-message',
useSocketListener('chat/delete-message', onMessageDeleted, [chats]) data => reloadIfIncludes(getChatIdFromMessages(data)),
[reloadIfIncludes],
useSocketListener('chat/clear-chat', onClearChat, [chats]) )
useSocketListener('chat/delete-chat', onDeleteChat, [chats]) useSocketListener(
'chat/clear-chat',
useSocketListener('chat/edit-chat', onEditChat, [chats]) ({ chatId }) => reloadIfIncludes(chatId),
[reloadIfIncludes],
)
useSocketListener(
'chat/edit-chat',
({ chatId }) => reloadIfIncludes(chatId),
[reloadIfIncludes],
)
useEventsListener(
'onClearAllChats',
() => {
_setItems(
chats.map(it => ({
...it,
lastMessage: null,
lastMessageDate: it.createdAt,
unreadMessagesCount: 0,
isChatUnread: false,
})),
)
},
[chats, _setItems],
)
return { return {
chats: chats as IChat[], chats: chats as IChat[],

17
src/modules/chats/screens/chat.tsx

@ -6,6 +6,8 @@ import {
getFont, getFont,
IRouteParams, IRouteParams,
MessageType, MessageType,
RouteKey,
useNav,
} from '@/shared' } from '@/shared'
import React, { useCallback, useMemo, useState } from 'react' import React, { useCallback, useMemo, useState } from 'react'
import { AttachmentsMenu } from '@/modules/chats/atoms' import { AttachmentsMenu } from '@/modules/chats/atoms'
@ -31,12 +33,13 @@ import {
import _ from 'lodash' import _ from 'lodash'
import { chatMessagesService } from '@/services/domain' import { chatMessagesService } from '@/services/domain'
interface IProps extends IRouteParams { } interface IProps extends IRouteParams {}
export const ChatConversation = ({ navigation }: IProps) => { export const ChatConversation = ({ navigation }: IProps) => {
const accountId = useSelector(selectId) const accountId = useSelector(selectId)
const selectedChatId = useSelector(selectSelectedChatId) const selectedChatId = useSelector(selectSelectedChatId)
const [isMenuOpen, setMenuOpen] = useState(false) const [isMenuOpen, setMenuOpen] = useState(false)
const nav = useNav()
const { headerChatInfo, chatDetails, isLoading } = const { headerChatInfo, chatDetails, isLoading } =
useChatDetails(selectedChatId) useChatDetails(selectedChatId)
@ -47,7 +50,6 @@ export const ChatConversation = ({ navigation }: IProps) => {
onLongPress, onLongPress,
loadMore, loadMore,
loadEarlier, loadEarlier,
onProfilePress,
state, state,
replyTo, replyTo,
setReplyToMessage, setReplyToMessage,
@ -122,6 +124,15 @@ export const ChatConversation = ({ navigation }: IProps) => {
await chatMessagesService.sendVoiceMsg(chatDetails.id, filePath) await chatMessagesService.sendVoiceMsg(chatDetails.id, filePath)
} }
const onProfilePress = useCallback(
(authorId: number) => {
nav.navigate(RouteKey.ContactDetail, {
contactId: authorId,
})
},
[nav],
)
const onPressMenuItem = async (name: string) => { const onPressMenuItem = async (name: string) => {
setMenuOpen(false) setMenuOpen(false)
await handlePressMenuItem(name, selectedChatId) await handlePressMenuItem(name, selectedChatId)
@ -152,7 +163,7 @@ export const ChatConversation = ({ navigation }: IProps) => {
return chatDetails?.pinedMessages[currentPinedInd]?.type === return chatDetails?.pinedMessages[currentPinedInd]?.type ===
MessageType.Forwarded MessageType.Forwarded
? chatDetails?.pinedMessages[currentPinedInd]?.content ? chatDetails?.pinedMessages[currentPinedInd]?.content
?.originalMessage ?.originalMessage
: chatDetails?.pinedMessages[currentPinedInd] : chatDetails?.pinedMessages[currentPinedInd]
} }

8
src/modules/contacts/hooks/use-fetch-contacts.hook.ts

@ -2,9 +2,12 @@ import { createFullName, isSoonBirthday } from '@/shared/helpers'
import { useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { IContact, useFlatList } from '@/shared' import { IContact, useFlatList } from '@/shared'
import { contactsService } from '@/services/domain' import { contactsService } from '@/services/domain'
import { useSelector } from 'react-redux'
import { selectNetConnect } from '@/store/shared'
export const useFetchContacts = () => { export const useFetchContacts = () => {
const [searchString, setSearchVal] = useState<string>(null) const [searchString, setSearchVal] = useState<string>(null)
const isNetConnect = useSelector(selectNetConnect)
const { const {
items: contacts, items: contacts,
@ -14,6 +17,7 @@ export const useFetchContacts = () => {
resetFlatList, resetFlatList,
setLoadParams, setLoadParams,
loadParams, loadParams,
isInit,
} = useFlatList<IContact>({ } = useFlatList<IContact>({
fetchItems: params => contactsService.fetch({ ...params }), fetchItems: params => contactsService.fetch({ ...params }),
needInit: true, needInit: true,
@ -39,6 +43,10 @@ export const useFetchContacts = () => {
if (searchString !== null) setLoadParams({ searchString }) if (searchString !== null) setLoadParams({ searchString })
}, [searchString]) }, [searchString])
useEffect(() => {
if (isNetConnect === true && !isInit) resetFlatList()
}, [isNetConnect])
return { return {
contacts, contacts,
isLoading, isLoading,

6
src/modules/contacts/smart-component/contacts-list.smart-component.tsx

@ -1,5 +1,6 @@
import { $size, RouteKey } from '@/shared' import { $size, RouteKey } from '@/shared'
import { useTheme } from '@/shared/hooks/use-theme.hook' import { useTheme } from '@/shared/hooks/use-theme.hook'
import { selectNetConnect } from '@/store/shared'
import { useNavigation } from '@react-navigation/native' import { useNavigation } from '@react-navigation/native'
import React, { useState } from 'react' import React, { useState } from 'react'
import { import {
@ -8,12 +9,12 @@ import {
StyleSheet, StyleSheet,
View, View,
} from 'react-native' } from 'react-native'
import { useSelector } from 'react-redux'
import { SearchFieldWitchIcon } from '../atoms' import { SearchFieldWitchIcon } from '../atoms'
import { ContactsList } from '../components' import { ContactsList } from '../components'
import { getReverseColors, getStraightColors, IBorderColor } from '../configs' import { getReverseColors, getStraightColors, IBorderColor } from '../configs'
import { useFetchContacts } from '../hooks' import { useFetchContacts } from '../hooks'
export const ContactsSmartList = () => { export const ContactsSmartList = () => {
const { styles, theme } = useTheme(createStyles) const { styles, theme } = useTheme(createStyles)
const navigate: any = useNavigation().navigate const navigate: any = useNavigation().navigate
@ -48,8 +49,7 @@ export const ContactsSmartList = () => {
return offset >= searchFieldHeight return offset >= searchFieldHeight
} }
const newContactList = () => const newContactList = () => (contacts ? contacts : null)
contacts ? contacts : null
return ( return (
<> <>

62
src/modules/root/components/net-status.component.tsx

@ -1,25 +1,39 @@
import { Txt, useTheme } from '@/shared' import { $size, Txt, useTheme } from '@/shared'
import { PartialTheme } from '@/shared/themes/interfaces' import { PartialTheme } from '@/shared/themes/interfaces'
import React, { FC } from 'react' import React, { FC, useMemo } from 'react'
import { StyleSheet, View } from 'react-native' import { ActivityIndicator, StyleSheet, View } from 'react-native'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
interface INetStatusProps { interface INetStatusProps {
status: 'online' | 'try' | 'loos' status: 'online' | 'try' | 'loos'
} }
export const NetStatus: FC<INetStatusProps> = ({ status }) => { export const NetStatus: FC<INetStatusProps> = ({ status }) => {
const { styles } = useTheme(createStyles) const { styles, theme } = useTheme(createStyles)
console.log(status)
const insets = useSafeAreaInsets()
const paddingTop = useMemo(() => {
if (insets.top > 15) return insets.top + 10
else return 15
}, [insets])
if (status === 'online') return null if (status === 'online') return null
return ( return (
<View style={styles.container}> <>
{status === 'try' ? ( <View style={[styles.container, { paddingTop }]}>
<Txt>Проблеми з мережею, перевірка підключення</Txt> {status === 'try' ? (
) : ( <View style={styles.txtRow}>
<Txt>З'єднання відсутні</Txt> <Txt style={styles.txt}>Перевірка підключення</Txt>
)} <ActivityIndicator color={theme.netStatus.textColor} />
</View> </View>
) : (
<Txt style={styles.txt}>З'єднання відсутнє</Txt>
)}
</View>
{status === 'loos' ? <View style={styles.overflow}></View> : null}
</>
) )
} }
@ -29,9 +43,29 @@ const createStyles = (theme: PartialTheme) =>
position: 'absolute', position: 'absolute',
top: 0, top: 0,
left: 0, left: 0,
backgroundColor: '#000', backgroundColor: theme.netStatus.backgroundColor,
zIndex: 9999, zIndex: 9999,
width: '100%', width: '100%',
height: 50, paddingBottom: 15,
},
txt: {
color: theme.netStatus.textColor,
textAlign: 'center',
fontSize: $size(14),
marginRight: 10,
},
txtRow: {
justifyContent: 'center',
alignItems: 'center',
flexDirection: 'row',
},
overflow: {
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
backgroundColor: 'rgba(0,0,0,.1)',
zIndex: 9998,
}, },
}) })

3
src/modules/root/hooks/use-net-connect.hook.ts

@ -17,7 +17,7 @@ export const useNetConnect = () => {
} }
const checkConnect = async () => { const checkConnect = async () => {
const state = await NetInfo.refresh() const state = await NetInfo.fetch()
if (state.isConnected) setCheckCount(0) if (state.isConnected) setCheckCount(0)
else setCheckCount(checkCount + 1) else setCheckCount(checkCount + 1)
} }
@ -36,7 +36,6 @@ export const useNetConnect = () => {
}, [checkCount]) }, [checkCount])
useEffect(() => { useEffect(() => {
console.log('is connected')
internetConnectionHandler() internetConnectionHandler()
}, [isConnected]) }, [isConnected])

6
src/services/domain/account.service.ts

@ -16,8 +16,12 @@ const loadAccount = async (version?: string) => {
if (!account) { if (!account) {
const { data } = await fetchAccount() const { data } = await fetchAccount()
await AsyncStorage.setItem(`acc${version}`, JSON.stringify(data))
account = data account = data
if (version)
await AsyncStorage.setItem(
`acc${version}`,
JSON.stringify(data),
)
} }
simpleDispatch(new SaveAccount({ account })) simpleDispatch(new SaveAccount({ account }))

10
src/services/domain/auth.service.ts

@ -68,7 +68,7 @@ export const autoAuth = async () => {
const cacheInfo = await loadCacheInfo() const cacheInfo = await loadCacheInfo()
await loadDataAfterAuth(cacheInfo) await loadDataAfterAuth(cacheInfo)
loadNotImportantData() loadNotImportantData(cacheInfo)
NavigationService.setModule(NavigationModuleKey.User) NavigationService.setModule(NavigationModuleKey.User)
} catch (e) { } catch (e) {
@ -87,10 +87,12 @@ const loadDataAfterAuth = async (
setAppIsReady() setAppIsReady()
} }
const loadNotImportantData = async () => { const loadNotImportantData = async (
cacheInfo: IGetAccountCacheInfoResponse = {},
) => {
await factoriesService.loadFactories().catch(() => {}) await factoriesService.loadFactories().catch(() => {})
await taxonomiesService.fetchGroups().catch(() => {}) await taxonomiesService.fetchGroups(cacheInfo.taxonomiesV).catch(() => {})
await taxonomiesService.fetchReasons().catch(() => {}) await taxonomiesService.fetchReasons(cacheInfo.taxonomiesV).catch(() => {})
await contactsService.fetchBirthdayCountToday().catch(() => {}) await contactsService.fetchBirthdayCountToday().catch(() => {})
await tasksService.getUnreadTasksCount().catch(() => {}) await tasksService.getUnreadTasksCount().catch(() => {})

3
src/services/domain/chat-messages.service.ts

@ -21,7 +21,7 @@ import {
import { IFetchChatMessagesList } from '@/api/chat-messages/responses.interfaces' import { IFetchChatMessagesList } from '@/api/chat-messages/responses.interfaces'
import { ApiResponse } from '@/api/http.types' import { ApiResponse } from '@/api/http.types'
import { appEvents, IChatMessage } from '@/shared' import { appEvents, IChatMessage } from '@/shared'
import { runActionByType } from '@/shared/helpers' import { runActionByType, showUknowError } from '@/shared/helpers'
import { SetUnreadMessagesCount } from '@/store/chats' import { SetUnreadMessagesCount } from '@/store/chats'
import { simpleDispatch } from '@/store/store-helpers' import { simpleDispatch } from '@/store/store-helpers'
import { Alert } from 'react-native' import { Alert } from 'react-native'
@ -111,6 +111,7 @@ const clearChatMessages = async (
count: unreadMessagesCount, count: unreadMessagesCount,
}) })
} catch (err) { } catch (err) {
showUknowError()
console.log('ERROR ON CLEAR CHAT', err) console.log('ERROR ON CLEAR CHAT', err)
} }
} }

37
src/services/domain/chats.service.ts

@ -6,6 +6,7 @@ import {
createPersonalChatReq, createPersonalChatReq,
deleteChatByIdReq, deleteChatByIdReq,
editGroupChatReq, editGroupChatReq,
exportMessagesToFileReq,
getChatDetailReq, getChatDetailReq,
getChatsListReq, getChatsListReq,
setChatMutedReq, setChatMutedReq,
@ -24,7 +25,11 @@ import {
} from '@/api/chats/responses.interfaces' } from '@/api/chats/responses.interfaces'
import { SetChats, SetUnreadMessagesCount } from '@/store/chats' import { SetChats, SetUnreadMessagesCount } from '@/store/chats'
import { IChatDetails } from '@/shared/interfaces' import { IChatDetails } from '@/shared/interfaces'
import { Platform } from 'react-native'
import Share from 'react-native-share'
import { fsService } from '../system'
import { showUknowError } from '@/shared/helpers'
import { Buffer } from 'buffer'
const createGroupChat = async ( const createGroupChat = async (
params: ICreateGroupChat, params: ICreateGroupChat,
@ -101,6 +106,35 @@ const getUnreadMessagesCount = async () => {
} }
} }
const shareChat = async (chatId: number) => {
try {
const { data }: Record<string, any> = await exportMessagesToFileReq({
chatId,
})
const base64 = Buffer.from(data.file).toString('base64')
if (Platform.OS === 'ios') {
const path = await fsService.writeFile({
content: Buffer.from(data.file).toString(),
fileName: data.fileName,
})
Share.open({
url: path,
})
} else {
Share.open({
urls: [`data:text/plain;base64,${base64}`],
filenames: [`chat-${chatId}.txt`],
})
}
} catch (e) {
console.log(e)
showUknowError()
}
}
export const chatsService = { export const chatsService = {
fetch, fetch,
fetchDetails, fetchDetails,
@ -110,4 +144,5 @@ export const chatsService = {
setChatMuted, setChatMuted,
getUnreadMessagesCount, getUnreadMessagesCount,
createPersonalChat, createPersonalChat,
shareChat,
} }

11
src/services/domain/permissions.service.ts

@ -20,7 +20,7 @@ class PermissionsService extends Service {
public async loadPermissionsForUsers(version?: string) { public async loadPermissionsForUsers(version?: string) {
simpleDispatch(new SetLoadingPermissions({ isLoading: true })) simpleDispatch(new SetLoadingPermissions({ isLoading: true }))
try { try {
let permissions let permissions = null
if (version) { if (version) {
const cached = await AsyncStorage.getItem(`prm${version}`) const cached = await AsyncStorage.getItem(`prm${version}`)
if (cached) permissions = JSON.parse(cached) if (cached) permissions = JSON.parse(cached)
@ -28,10 +28,11 @@ class PermissionsService extends Service {
if (!permissions) { if (!permissions) {
const { data } = await fetchUserPermissionsReq() const { data } = await fetchUserPermissionsReq()
await AsyncStorage.setItem( if (version)
`prm${version}`, await AsyncStorage.setItem(
JSON.stringify(data), `prm${version}`,
) JSON.stringify(data),
)
permissions = data permissions = data
} }

45
src/services/domain/taxonomies.service.ts

@ -15,12 +15,30 @@ import {
SaveReasonTaxonomies, SaveReasonTaxonomies,
SetLoadingTaxonomies, SetLoadingTaxonomies,
} from '@/store/taxonomies' } from '@/store/taxonomies'
import AsyncStorage from '@react-native-async-storage/async-storage'
const fetchReasons = async () => { const fetchReasons = async (version?: string) => {
try { try {
simpleDispatch(new SetLoadingTaxonomies({ loading: true })) simpleDispatch(new SetLoadingTaxonomies({ loading: true }))
const { data } = await fetchTaxonomiesReq(TaxonomyTypes.Reason)
simpleDispatch(new SaveReasonTaxonomies({ items: data })) let items: any
if (version) {
const cached = await AsyncStorage.getItem(`resons${version}`)
if (cached) items = JSON.parse(cached)
}
if (!items) {
const { data } = await fetchTaxonomiesReq(TaxonomyTypes.Reason)
items = data
if (version)
await AsyncStorage.setItem(
`resons${version}`,
JSON.stringify(data),
)
}
simpleDispatch(new SaveReasonTaxonomies({ items }))
} catch (e) { } catch (e) {
console.log(e) console.log(e)
throw e throw e
@ -29,11 +47,26 @@ const fetchReasons = async () => {
} }
} }
const fetchGroups = async () => { const fetchGroups = async (version?: string) => {
try { try {
simpleDispatch(new SetLoadingTaxonomies({ loading: true })) simpleDispatch(new SetLoadingTaxonomies({ loading: true }))
const { data } = await fetchTaxonomiesReq(TaxonomyTypes.Category) let items: any
simpleDispatch(new SaveGroupTaxonomies({ items: data }))
if (version) {
const cached = await AsyncStorage.getItem(`groups${version}`)
if (cached) items = JSON.parse(cached)
}
if (!items) {
const { data } = await fetchTaxonomiesReq(TaxonomyTypes.Reason)
items = data
if (version)
await AsyncStorage.setItem(
`groups${version}`,
JSON.stringify(data),
)
}
simpleDispatch(new SaveGroupTaxonomies({ items }))
} catch (e) { } catch (e) {
console.log(e) console.log(e)
throw e throw e

31
src/services/system/network.service.ts

@ -1,29 +1,30 @@
import { NavigationModuleKey } from '@/shared/enums' import { NavigationModuleKey } from '@/shared/enums'
import { SetNavigationModule } from '@/store/shared' import { SetNavigationModule } from '@/store/shared'
import { simpleDispatch } from '@/store/store-helpers' import { simpleDispatch } from '@/store/store-helpers'
import { checkInternetConnection } from 'react-native-offline' // import { checkInternetConnection } from 'react-native-offline'
const TEST_CONNECTION_LINK = 'https://www.google.com/' const TEST_CONNECTION_LINK = 'https://www.google.com/'
const init = async (): Promise<boolean> => { const init = async (): Promise<boolean> => {
const isConnected = await checkInternetConnection( // const isConnected = await checkInternetConnection(
TEST_CONNECTION_LINK, // TEST_CONNECTION_LINK,
3000, // 3000,
false, // false,
) // )
if (!isConnected) onOffline() // if (!isConnected) onOffline()
return isConnected // return isConnected
return true
} }
const onOffline = () => { // const onOffline = () => {
simpleDispatch( // simpleDispatch(
new SetNavigationModule({ // new SetNavigationModule({
module: NavigationModuleKey.NoInternetConnection, // module: NavigationModuleKey.NoInternetConnection,
}), // }),
) // )
} // }
export const networkService = { export const networkService = {
init, init,

8
src/services/system/real-time.service.ts

@ -1,5 +1,6 @@
import { config } from '@/config' import { config } from '@/config'
import { socketEvents } from '@/shared/events' import { socketEvents } from '@/shared/events'
import { Alert } from 'react-native'
import io from 'socket.io-client' import io from 'socket.io-client'
import { GlobalContainerService } from './global-container.service' import { GlobalContainerService } from './global-container.service'
@ -14,6 +15,7 @@ export class SocketIo {
this.socket = io(config.socketUrl, { this.socket = io(config.socketUrl, {
transports: ['websocket', 'polling'], transports: ['websocket', 'polling'],
reconnection: true, reconnection: true,
secure: true,
}) })
this._on('connect', () => { this._on('connect', () => {
this.emit('join-user', store().getState().account.account) this.emit('join-user', store().getState().account.account)
@ -68,9 +70,9 @@ export class SocketIo {
this._onSocketSendEvent('push-notification') this._onSocketSendEvent('push-notification')
// this._on('reconnect_attempt', error => { this._on('reconnect_attempt', error => {
// console.log('SOCKET reconnect_attempt', error) console.log('SOCKET reconnect_attempt', error)
// }) })
} }
static instance: SocketIo = null static instance: SocketIo = null

38
src/shared/components/plugins/image-crop-picker.component.tsx

@ -2,6 +2,7 @@ import React, { FC, useCallback, useState } from 'react'
import { mediaService } from '@/services/system/media.service' import { mediaService } from '@/services/system/media.service'
import { useActionSheet } from '@expo/react-native-action-sheet' import { useActionSheet } from '@expo/react-native-action-sheet'
import { TouchableOpacity, ViewStyle } from 'react-native' import { TouchableOpacity, ViewStyle } from 'react-native'
import { appEvents } from '@/shared/events'
interface IImageCropPickerProps { interface IImageCropPickerProps {
children: (preview: string, onPressRemove: () => void) => React.ReactNode children: (preview: string, onPressRemove: () => void) => React.ReactNode
@ -13,20 +14,19 @@ interface IImageCropPickerProps {
export const ImageCropPicker: FC<IImageCropPickerProps> = props => { export const ImageCropPicker: FC<IImageCropPickerProps> = props => {
const [preview, setPreview] = useState(null) const [preview, setPreview] = useState(null)
const { showActionSheetWithOptions } = useActionSheet()
const actions = [() => loadFromCamera(), () => loadPicker(), () => null]
const onPress = () => { const onPress = () => {
showActionSheetWithOptions( appEvents.emit('openActionSheet', {
{ items: [
options: ['Фото з камери', 'Фото з галереї', 'Скасувати'], {
cancelButtonIndex: 2, name: 'Фото з камери',
onPress: () => loadFromCamera(),
showSeparators: true, },
}, {
index => actions[index](), name: 'Фото з галереї',
) onPress: () => loadPicker(),
},
],
})
} }
const loadFromCamera = async () => { const loadFromCamera = async () => {
@ -40,16 +40,14 @@ export const ImageCropPicker: FC<IImageCropPickerProps> = props => {
height: 400, height: 400,
cropperCircleOverlay: true, cropperCircleOverlay: true,
}) })
console.log(image)
onSuccessUpload(image) onSuccessUpload(image)
} }
const onSuccessUpload = useCallback( const onSuccessUpload = async image => {
async image => { setPreview(image.uri)
setPreview(`data:${image.mime};base64,${image.data}`) props.onChange(image)
props.onChange(image) }
},
[props.onChange],
)
const onPressRemove = () => { const onPressRemove = () => {
setPreview(null) setPreview(null)

26
src/shared/helpers/actions-sheet.helpers.ts

@ -1,26 +0,0 @@
interface IOption {
name: string
onPress: () => void
}
export const prepareOptionsForActionSheet = async (options: IOption[]) => {
const names = []
const actions = []
let index = 0
for (const item of options) {
names[index] = item.name
actions[index] = item.onPress
await index++
}
const onPress = index => {
if (actions[index]) actions[index]
}
return {
names,
onPress,
}
}

9
src/shared/helpers/alert.helper.ts

@ -0,0 +1,9 @@
import { appEvents } from '../events'
export const showUknowError = () => {
appEvents.emit('openInfoModal', {
title: 'Виникла помилка, ',
message: 'спробуйте будь-ласка пізніше',
pressButtonText: 'Продовжити',
})
}

25
src/shared/helpers/index.ts

@ -1,19 +1,20 @@
export * from './style.helpers' export * from './alert.helper'
export * from './api.helpers'
export * from './chat-message-preview-text.helper'
export * from './date.helpers'
export * from './exceptions.helpers' export * from './exceptions.helpers'
export * from './platform.helper' export * from './fs.helpers'
export * from './image.helpers'
export * from './name.helpers'
export * from './get-error-code.helpers' export * from './get-error-code.helpers'
export * from './image.helpers'
export * from './is-soon-birthday.helper' export * from './is-soon-birthday.helper'
export * from './title-by-count.helper'
export * from './theme-helpers'
export * from './linking.helper' export * from './linking.helper'
export * from './actions-sheet.helpers' export * from './name.helpers'
export * from './transforms.helpers' export * from './platform.helper'
export * from './text.helpers'
export * from './date.helpers'
export * from './fs.helpers'
export * from './scroll-event.helpers' export * from './scroll-event.helpers'
export * from './style.helpers'
export * from './text.helpers'
export * from './theme-helpers'
export * from './title-by-count.helper'
export * from './touch-event.helpers' export * from './touch-event.helpers'
export * from './chat-message-preview-text.helper' export * from './transforms.helpers'
export * from './url.helpers' export * from './url.helpers'

1
src/shared/hooks/use-flat-list.hook.ts

@ -115,7 +115,6 @@ export const useFlatList = <T>(props: IProps<T>) => {
const loadAll = () => { const loadAll = () => {
if (!loadParams.current.count) return if (!loadParams.current.count) return
setLoadParams({ limit: loadParams.current.count }) setLoadParams({ limit: loadParams.current.count })
} }

9
src/shared/themes/dark/navigation.ts

@ -1,4 +1,5 @@
import { NavigationColors } from '../interfaces/navigation.interface' import { NavigationColors } from '../interfaces/navigation.interface'
import { colors } from './colors'
export const navigation: NavigationColors = { export const navigation: NavigationColors = {
tabBar: { tabBar: {
@ -9,7 +10,11 @@ export const navigation: NavigationColors = {
indicator: { indicator: {
$bg: '#EEEEEE', $bg: '#EEEEEE',
$txt: '#000', $txt: '#000',
$border: '#000' $border: '#000',
} },
},
netStatus: {
backgroundColor: '#FFD78B',
textColor: colors.$textPrimary,
}, },
} }

5
src/shared/themes/interfaces/navigation.interface.ts

@ -10,4 +10,9 @@ export interface NavigationColors {
$border: string $border: string
} }
} }
netStatus: {
backgroundColor: string
textColor: string
}
} }

4
src/shared/themes/light/navigation.ts

@ -13,4 +13,8 @@ export const navigation: NavigationColors = {
$border: colors.$layoutBg, $border: colors.$layoutBg,
}, },
}, },
netStatus: {
backgroundColor: '#FFD78B',
textColor: colors.$textPrimary,
},
} }

10
src/store/shared/reducer.ts

@ -6,12 +6,14 @@ export interface ISharedState {
activeNavigationModule: NavigationModuleKey activeNavigationModule: NavigationModuleKey
prevModule: NavigationModuleKey prevModule: NavigationModuleKey
isForbidden: ConstrainBoolean isForbidden: ConstrainBoolean
isNetConnect: boolean
} }
const initialState: ISharedState = { const initialState: ISharedState = {
activeNavigationModule: NavigationModuleKey.Pending, activeNavigationModule: NavigationModuleKey.Pending,
prevModule: null, prevModule: null,
isForbidden: false, isForbidden: false,
isNetConnect: true,
} }
export const sharedReducer = createReducer<ISharedState, TAuthActions>( export const sharedReducer = createReducer<ISharedState, TAuthActions>(
@ -32,11 +34,19 @@ export const sharedReducer = createReducer<ISharedState, TAuthActions>(
} }
}, },
SET_NET_CONNECT: (state, action) => {
return {
...state,
isNetConnect: action.payload,
}
},
RESET: () => { RESET: () => {
return { return {
activeNavigationModule: NavigationModuleKey.Auth, activeNavigationModule: NavigationModuleKey.Auth,
prevModule: null, prevModule: null,
isForbidden: false, isForbidden: false,
isNetConnect: true,
} }
}, },
}, },

7
src/store/shared/selectors.ts

@ -1,8 +1,11 @@
import { RootState } from '@/store' import { RootState } from '@/store'
export const selectActiveNavigationModule = (store: RootState) => store.shared.activeNavigationModule export const selectActiveNavigationModule = (store: RootState) =>
store.shared.activeNavigationModule
export const selectPrevActiveModule = (store: RootState) => store.shared.prevModule export const selectPrevActiveModule = (store: RootState) =>
store.shared.prevModule
export const selectIsForbidden = (store: RootState) => store.shared.isForbidden export const selectIsForbidden = (store: RootState) => store.shared.isForbidden
export const selectNetConnect = (store: RootState) => store.shared.isNetConnect

11
src/store/shared/types.ts

@ -20,8 +20,17 @@ export class SetIsForbidden implements Action {
) {} ) {}
} }
export class SetNetConnect implements Action {
readonly type = 'SET_NET_CONNECT'
constructor(public readonly payload: boolean) {}
}
export class Reset { export class Reset {
readonly type = 'RESET' readonly type = 'RESET'
} }
export type TAuthActions = SetNavigationModule | SetIsForbidden | Reset export type TAuthActions =
| SetNavigationModule
| SetIsForbidden
| Reset
| SetNetConnect

2300
yarn.lock

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save