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

1
.gitignore vendored

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

14
android/app/build.gradle

@ -19,8 +19,15 @@ apply from: "../../node_modules/react-native/react.gradle" @@ -19,8 +19,15 @@ apply from: "../../node_modules/react-native/react.gradle"
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
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);
android {
ndkVersion rootProject.ext.ndkVersion
@ -66,6 +73,11 @@ android { @@ -66,6 +73,11 @@ android {
buildTypes {
debug {
signingConfig signingConfigs.debug
if (nativeArchitectures) {
ndk {
abiFilters nativeArchitectures.split(',')
}
}
}
release {
@ -131,7 +143,7 @@ dependencies { @@ -131,7 +143,7 @@ dependencies {
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
from configurations.implementation
into 'libs'
}

22
android/build.gradle

@ -2,22 +2,22 @@ @@ -2,22 +2,22 @@
buildscript {
ext {
buildToolsVersion = "29.0.3"
buildToolsVersion = "30.0.2 "
minSdkVersion = 24
compileSdkVersion = 29
targetSdkVersion = 29
compileSdkVersion = 30
targetSdkVersion = 30
kotlinVersion = '1.5.0'
ndkVersion = "22.0.7026061"
androidXCore = "1.7.0"
}
repositories {
google()
jcenter()
// Configure the Maven repository address for the HMS Core SDK.
mavenCentral()
maven {url 'https://developer.huawei.com/repo/'}
}
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 "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
// NOTE: Do not place your application dependencies here; they belong
@ -27,20 +27,22 @@ buildscript { @@ -27,20 +27,22 @@ buildscript {
allprojects {
repositories {
mavenCentral()
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
maven { url 'https://www.jitpack.io' }
maven { url 'https://maven.google.com' }
// Configure the Maven repository address for the HMS Core SDK.
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 @@ -25,7 +25,7 @@ android.useAndroidX=true
android.enableJetifier=true
# 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.daemon=true

2
ios/Podfile

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

571
ios/Podfile.lock

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

130
ios/taskme.xcodeproj/project.pbxproj

@ -13,16 +13,16 @@ @@ -13,16 +13,16 @@
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
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 */; };
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 */; };
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 */; };
351C4708CAEFBEEF00A7751B /* libPods-taskme.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E0D9841D5E19D48DB27B6E8F /* libPods-taskme.a */; };
5244945D26B7EA27006A5FAB /* fontello.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5244945C26B7EA27006A5FAB /* fontello.ttf */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
E1A9811C9E140ECC9EE00615 /* libPods-taskme.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A67EF2793DF34630DF8428E /* libPods-taskme.a */; };
F7524E431D1FCB68DF75F11A /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1875C61D4A5C25FC075EDF51 /* libPods-OneSignalNotificationServiceExtension.a */; };
C6C66451B8D8A43356F937FF /* libPods-taskme-taskmeTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CD3F4AE12EA96D8B388B80A0 /* libPods-taskme-taskmeTests.a */; };
D63F37C0F7E8F6E6EF6EC377 /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 568BFAB32545F9E80E3CE9AB /* libPods-OneSignalNotificationServiceExtension.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -57,7 +57,6 @@ @@ -57,7 +57,6 @@
/* End PBXCopyFilesBuildPhase 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; };
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>"; };
@ -76,32 +75,33 @@ @@ -76,32 +75,33 @@
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
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>"; };
@ -112,7 +112,7 @@ @@ -112,7 +112,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
15A240E2A6D8A43F0ED0FB1D /* libPods-taskme-taskmeTests.a in Frameworks */,
C6C66451B8D8A43356F937FF /* libPods-taskme-taskmeTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -120,7 +120,7 @@ @@ -120,7 +120,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
F7524E431D1FCB68DF75F11A /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */,
D63F37C0F7E8F6E6EF6EC377 /* libPods-OneSignalNotificationServiceExtension.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -128,7 +128,7 @@ @@ -128,7 +128,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
E1A9811C9E140ECC9EE00615 /* libPods-taskme.a in Frameworks */,
351C4708CAEFBEEF00A7751B /* libPods-taskme.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -182,9 +182,9 @@ @@ -182,9 +182,9 @@
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
1875C61D4A5C25FC075EDF51 /* libPods-OneSignalNotificationServiceExtension.a */,
8A67EF2793DF34630DF8428E /* libPods-taskme.a */,
B98C6B3676786E12016A3B65 /* libPods-taskme-taskmeTests.a */,
568BFAB32545F9E80E3CE9AB /* libPods-OneSignalNotificationServiceExtension.a */,
E0D9841D5E19D48DB27B6E8F /* libPods-taskme.a */,
CD3F4AE12EA96D8B388B80A0 /* libPods-taskme-taskmeTests.a */,
);
name = Frameworks;
sourceTree = "<group>";
@ -254,12 +254,12 @@ @@ -254,12 +254,12 @@
B362F9321C4BC54C6EBF6F61 /* Pods */ = {
isa = PBXGroup;
children = (
4D4A3C52CD04EF7DE81F26E9 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */,
37D9710EF24F0880F098FE22 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */,
2929AE903C2818917F4F8BD3 /* Pods-taskme.debug.xcconfig */,
26D9C4DB7C57AD8DF41BBF0C /* Pods-taskme.release.xcconfig */,
002266F6E63A359C134149B0 /* Pods-taskme-taskmeTests.debug.xcconfig */,
8C051622AF0774A320C586E0 /* Pods-taskme-taskmeTests.release.xcconfig */,
CA7BDCAB23D83BAF356D9DBE /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */,
9F1E9EA99BBF6F20FB9B6BE5 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */,
6AA472CCC56965932E472EED /* Pods-taskme.debug.xcconfig */,
BB07B0CEB6720B5EE3DAF7A7 /* Pods-taskme.release.xcconfig */,
E2035F61C1A93F52B7D8B11F /* Pods-taskme-taskmeTests.debug.xcconfig */,
A8D35AA5042664E90B10AD3A /* Pods-taskme-taskmeTests.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@ -271,12 +271,12 @@ @@ -271,12 +271,12 @@
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "taskmeTests" */;
buildPhases = (
05A63358E397D0C7F23A716D /* [CP] Check Pods Manifest.lock */,
CEE028E836B1A9C2F855F8A9 /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
81AFD8B4B669B76565FC34DB /* [CP] Embed Pods Frameworks */,
C7F1A036CDBAB8D78CEF801C /* [CP] Copy Pods Resources */,
C249A1A94BF022E793058B45 /* [CP] Embed Pods Frameworks */,
2FA95D1E1C99B2A13D05EF47 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -292,7 +292,7 @@ @@ -292,7 +292,7 @@
isa = PBXNativeTarget;
buildConfigurationList = 0480F72A27CBC3D10039631F /* Build configuration list for PBXNativeTarget "OneSignalNotificationServiceExtension" */;
buildPhases = (
203325252E357358819A84A8 /* [CP] Check Pods Manifest.lock */,
198567C5BC3502B493889F27 /* [CP] Check Pods Manifest.lock */,
0480F71E27CBC3D10039631F /* Sources */,
0480F71F27CBC3D10039631F /* Frameworks */,
0480F72027CBC3D10039631F /* Resources */,
@ -310,15 +310,15 @@ @@ -310,15 +310,15 @@
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "taskme" */;
buildPhases = (
F7944BC36807E9149D112EEE /* [CP] Check Pods Manifest.lock */,
27274524B14EFAE59C70445B /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
0480F72D27CBC3D10039631F /* Embed App Extensions */,
47FE39BEBA6C7E1BC744F8EA /* [CP] Embed Pods Frameworks */,
6D6EE9CE83351AABBA201734 /* [CP] Copy Pods Resources */,
7DCC28BD4E54265E720A02D8 /* [CP] Embed Pods Frameworks */,
8ECA3C1F6A1F7B960BD088ED /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -421,7 +421,7 @@ @@ -421,7 +421,7 @@
shellPath = /bin/sh;
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;
buildActionMask = 2147483647;
files = (
@ -436,14 +436,14 @@ @@ -436,14 +436,14 @@
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-taskme-taskmeTests-checkManifestLockResult.txt",
"$(DERIVED_FILE_DIR)/Pods-OneSignalNotificationServiceExtension-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
203325252E357358819A84A8 /* [CP] Check Pods Manifest.lock */ = {
27274524B14EFAE59C70445B /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -458,82 +458,82 @@ @@ -458,82 +458,82 @@
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-OneSignalNotificationServiceExtension-checkManifestLockResult.txt",
"$(DERIVED_FILE_DIR)/Pods-taskme-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
47FE39BEBA6C7E1BC744F8EA /* [CP] Embed Pods Frameworks */ = {
2FA95D1E1C99B2A13D05EF47 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
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 = (
"${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;
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;
};
6D6EE9CE83351AABBA201734 /* [CP] Copy Pods Resources */ = {
7DCC28BD4E54265E720A02D8 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
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 = (
"${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;
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;
};
81AFD8B4B669B76565FC34DB /* [CP] Embed Pods Frameworks */ = {
8ECA3C1F6A1F7B960BD088ED /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
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 = (
"${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;
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;
};
C7F1A036CDBAB8D78CEF801C /* [CP] Copy Pods Resources */ = {
C249A1A94BF022E793058B45 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
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 = (
"${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;
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;
};
F7944BC36807E9149D112EEE /* [CP] Check Pods Manifest.lock */ = {
CEE028E836B1A9C2F855F8A9 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -548,7 +548,7 @@ @@ -548,7 +548,7 @@
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-taskme-checkManifestLockResult.txt",
"$(DERIVED_FILE_DIR)/Pods-taskme-taskmeTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@ -621,7 +621,7 @@ @@ -621,7 +621,7 @@
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 002266F6E63A359C134149B0 /* Pods-taskme-taskmeTests.debug.xcconfig */;
baseConfigurationReference = E2035F61C1A93F52B7D8B11F /* Pods-taskme-taskmeTests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
@ -649,7 +649,7 @@ @@ -649,7 +649,7 @@
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 8C051622AF0774A320C586E0 /* Pods-taskme-taskmeTests.release.xcconfig */;
baseConfigurationReference = A8D35AA5042664E90B10AD3A /* Pods-taskme-taskmeTests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
@ -674,7 +674,7 @@ @@ -674,7 +674,7 @@
};
0480F72B27CBC3D10039631F /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 4D4A3C52CD04EF7DE81F26E9 /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */;
baseConfigurationReference = CA7BDCAB23D83BAF356D9DBE /* Pods-OneSignalNotificationServiceExtension.debug.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@ -715,7 +715,7 @@ @@ -715,7 +715,7 @@
};
0480F72C27CBC3D10039631F /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 37D9710EF24F0880F098FE22 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */;
baseConfigurationReference = 9F1E9EA99BBF6F20FB9B6BE5 /* Pods-OneSignalNotificationServiceExtension.release.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
@ -756,7 +756,7 @@ @@ -756,7 +756,7 @@
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 2929AE903C2818917F4F8BD3 /* Pods-taskme.debug.xcconfig */;
baseConfigurationReference = 6AA472CCC56965932E472EED /* Pods-taskme.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@ -764,7 +764,7 @@ @@ -764,7 +764,7 @@
CODE_SIGN_ENTITLEMENTS = taskme/taskme.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 101;
CURRENT_PROJECT_VERSION = 103;
DEVELOPMENT_TEAM = HQ3J3TDPR2;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
@ -794,7 +794,7 @@ @@ -794,7 +794,7 @@
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 26D9C4DB7C57AD8DF41BBF0C /* Pods-taskme.release.xcconfig */;
baseConfigurationReference = BB07B0CEB6720B5EE3DAF7A7 /* Pods-taskme.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@ -802,7 +802,7 @@ @@ -802,7 +802,7 @@
CODE_SIGN_ENTITLEMENTS = taskme/taskme.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 101;
CURRENT_PROJECT_VERSION = 103;
DEVELOPMENT_TEAM = HQ3J3TDPR2;
ENABLE_BITCODE = NO;
"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 @@ @@ -14,7 +14,6 @@
},
"dependencies": {
"@bitalikrty/redux-create-reducer": "^1.0.0",
"@expo/react-native-action-sheet": "^3.13.0",
"@gorhom/bottom-sheet": "^4.1.5",
"@miblanchard/react-native-slider": "^2.1.0",
"@react-native-async-storage/async-storage": "^1.15.8",
@ -22,7 +21,8 @@ @@ -22,7 +21,8 @@
"@react-native-community/clipboard": "^1.5.1",
"@react-native-community/netinfo": "^9.0.0",
"@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/native": "^6.0.2",
"@react-navigation/native-stack": "^6.1.0",
@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
"@types/react-native-drawer": "^2.5.5",
"@types/react-native-video": "^5.0.13",
"axios": "^0.21.1",
"buffer": "^6.0.3",
"cachios": "^3.0.0",
"events": "^3.3.0",
"jet-tools": "^1.1.0",
@ -39,8 +40,8 @@ @@ -39,8 +40,8 @@
"moment": "^2.29.1",
"oa-react-native-clear-cache": "^1.0.3",
"path": "^0.12.7",
"react": "17.0.1",
"react-native": "^0.64.3",
"react": "^17.0.2",
"react-native": "^0.66.4",
"react-native-app-badge": "^0.1.5",
"react-native-audio-recorder-player": "^3.4.0",
"react-native-autolink": "^4.0.0",
@ -66,7 +67,6 @@ @@ -66,7 +67,6 @@
"react-native-make": "^1.0.1",
"react-native-masked-text": "^1.13.0",
"react-native-modal": "^13.0.1",
"react-native-offline": "^6.0.0",
"react-native-onesignal": "^4.3.7",
"react-native-orientation-locker": "^1.3.1",
"react-native-pager-view": "^5.4.4",
@ -90,7 +90,7 @@ @@ -90,7 +90,7 @@
"react-native-video": "^5.2.0",
"react-native-video-controls": "^2.8.1",
"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",
"reactotron-react-native": "^5.0.1",
"reactotron-redux": "^3.1.3",
@ -104,6 +104,7 @@ @@ -104,6 +104,7 @@
"@babel/runtime": "^7.12.5",
"@bam.tech/react-native-make": "^3.0.3",
"@react-native-community/eslint-config": "^2.0.0",
"@rnx-kit/dep-check": "^1.12.16",
"@types/lodash": "^4.14.171",
"@types/react-native": "^0.64.12",
"babel-core": "^7.0.0-bridge.0",
@ -114,13 +115,37 @@ @@ -114,13 +115,37 @@
"eslint": "7.14.0",
"icon-set-creator": "^0.1.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",
"react-native-svg-app-icon": "^0.5.0",
"react-native-svg-transformer": "^0.14.3",
"react-test-renderer": "17.0.1"
"react-test-renderer": "^17.0.2"
},
"jest": {
"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' @@ -7,12 +7,10 @@ import { ThemeProvider } from './shared/themes'
import Orientation from 'react-native-orientation-locker'
import { LogBox } from 'react-native'
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 { 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.ignoreAllLogs() //Ignore all log notifications
@ -24,17 +22,15 @@ const App: FC = () => { @@ -24,17 +22,15 @@ const App: FC = () => {
}, [])
return (
<ThemeProvider key="theme-provider">
<BottomSheetModalProvider key="bottom-sheet">
<NetworkProvider key="network-provider">
<ActionSheetProvider key="action-sheet">
<Provider store={store} key="provider">
<Navigation />
</Provider>
</ActionSheetProvider>
</NetworkProvider>
</BottomSheetModalProvider>
</ThemeProvider>
<SafeAreaProvider>
<ThemeProvider key="theme-provider">
<BottomSheetModalProvider key="bottom-sheet">
<Provider store={store} key="provider">
<Navigation />
</Provider>
</BottomSheetModalProvider>
</ThemeProvider>
</SafeAreaProvider>
)
}

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

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

14
src/api/chats/requests.ts

@ -8,7 +8,10 @@ import * as res from './responses.interfaces' @@ -8,7 +8,10 @@ import * as res from './responses.interfaces'
export const createChatGroupReq = (
params: req.ICreateGroupChat,
): 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 = (
@ -22,7 +25,10 @@ export const getChatsListReq = ( @@ -22,7 +25,10 @@ export const getChatsListReq = (
params: { limit: 20 },
},
): ApiResponse<res.IFetchChatList> => {
return http.get<res.IFetchChatList>('chats', params)
return http.get<res.IFetchChatList>('chats', {
params: params.params,
// needCache: true,
})
}
export const getChatDetailReq = (
@ -55,9 +61,9 @@ export const unfixChatReq = (chatId: number) => { @@ -55,9 +61,9 @@ export const unfixChatReq = (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) => {
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 = { @@ -10,7 +10,7 @@ export const dynamicConfig = {
// socketUrl: 'http://46.101.170.206:5000',
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',
}

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

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

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

@ -0,0 +1,16 @@ @@ -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 @@ @@ -1,4 +1,5 @@
export * from './get-time-from-message-send.helper'
export * from './get-header-chat-info.helper'
export * from './chat-messages.helper'
export * from './chats-helpers.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 = ( @@ -226,12 +226,6 @@ export const useChatMessages = (
})
}
const onProfilePress = (authorId: number) => {
nav.navigate(RouteKey.ContactDetail, {
contactId: authorId,
})
}
const onPressMessagePreview = async (id: number) => {
if (_.find(messages, message => message.id === id)) setScrollToId(id)
else loadMessage(id)
@ -391,7 +385,14 @@ export const useChatMessages = ( @@ -391,7 +385,14 @@ export const useChatMessages = (
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, [
chatId,
@ -420,7 +421,6 @@ export const useChatMessages = ( @@ -420,7 +421,6 @@ export const useChatMessages = (
},
resetList,
onLongPress,
onProfilePress,
replyTo,
setReplyToMessage: setReplyTo,
onPressMessagePreview,

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

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

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

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

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

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

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

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

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

@ -1,25 +1,39 @@ @@ -1,25 +1,39 @@
import { Txt, useTheme } from '@/shared'
import { $size, Txt, useTheme } from '@/shared'
import { PartialTheme } from '@/shared/themes/interfaces'
import React, { FC } from 'react'
import { StyleSheet, View } from 'react-native'
import React, { FC, useMemo } from 'react'
import { ActivityIndicator, StyleSheet, View } from 'react-native'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
interface INetStatusProps {
status: 'online' | 'try' | 'loos'
}
export const NetStatus: FC<INetStatusProps> = ({ status }) => {
const { styles } = useTheme(createStyles)
console.log(status)
const { styles, theme } = useTheme(createStyles)
const insets = useSafeAreaInsets()
const paddingTop = useMemo(() => {
if (insets.top > 15) return insets.top + 10
else return 15
}, [insets])
if (status === 'online') return null
return (
<View style={styles.container}>
{status === 'try' ? (
<Txt>Проблеми з мережею, перевірка підключення</Txt>
) : (
<Txt>З'єднання відсутні</Txt>
)}
</View>
<>
<View style={[styles.container, { paddingTop }]}>
{status === 'try' ? (
<View style={styles.txtRow}>
<Txt style={styles.txt}>Перевірка підключення</Txt>
<ActivityIndicator color={theme.netStatus.textColor} />
</View>
) : (
<Txt style={styles.txt}>З'єднання відсутнє</Txt>
)}
</View>
{status === 'loos' ? <View style={styles.overflow}></View> : null}
</>
)
}
@ -29,9 +43,29 @@ const createStyles = (theme: PartialTheme) => @@ -29,9 +43,29 @@ const createStyles = (theme: PartialTheme) =>
position: 'absolute',
top: 0,
left: 0,
backgroundColor: '#000',
backgroundColor: theme.netStatus.backgroundColor,
zIndex: 9999,
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 = () => { @@ -17,7 +17,7 @@ export const useNetConnect = () => {
}
const checkConnect = async () => {
const state = await NetInfo.refresh()
const state = await NetInfo.fetch()
if (state.isConnected) setCheckCount(0)
else setCheckCount(checkCount + 1)
}
@ -36,7 +36,6 @@ export const useNetConnect = () => { @@ -36,7 +36,6 @@ export const useNetConnect = () => {
}, [checkCount])
useEffect(() => {
console.log('is connected')
internetConnectionHandler()
}, [isConnected])

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

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

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

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

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

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

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

@ -6,6 +6,7 @@ import { @@ -6,6 +6,7 @@ import {
createPersonalChatReq,
deleteChatByIdReq,
editGroupChatReq,
exportMessagesToFileReq,
getChatDetailReq,
getChatsListReq,
setChatMutedReq,
@ -24,7 +25,11 @@ import { @@ -24,7 +25,11 @@ import {
} from '@/api/chats/responses.interfaces'
import { SetChats, SetUnreadMessagesCount } from '@/store/chats'
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 (
params: ICreateGroupChat,
@ -101,6 +106,35 @@ const getUnreadMessagesCount = async () => { @@ -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 = {
fetch,
fetchDetails,
@ -110,4 +144,5 @@ export const chatsService = { @@ -110,4 +144,5 @@ export const chatsService = {
setChatMuted,
getUnreadMessagesCount,
createPersonalChat,
shareChat,
}

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

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

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

@ -15,12 +15,30 @@ import { @@ -15,12 +15,30 @@ import {
SaveReasonTaxonomies,
SetLoadingTaxonomies,
} from '@/store/taxonomies'
import AsyncStorage from '@react-native-async-storage/async-storage'
const fetchReasons = async () => {
const fetchReasons = async (version?: string) => {
try {
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) {
console.log(e)
throw e
@ -29,11 +47,26 @@ const fetchReasons = async () => { @@ -29,11 +47,26 @@ const fetchReasons = async () => {
}
}
const fetchGroups = async () => {
const fetchGroups = async (version?: string) => {
try {
simpleDispatch(new SetLoadingTaxonomies({ loading: true }))
const { data } = await fetchTaxonomiesReq(TaxonomyTypes.Category)
simpleDispatch(new SaveGroupTaxonomies({ items: data }))
let items: any
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) {
console.log(e)
throw e

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

@ -1,29 +1,30 @@ @@ -1,29 +1,30 @@
import { NavigationModuleKey } from '@/shared/enums'
import { SetNavigationModule } from '@/store/shared'
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 init = async (): Promise<boolean> => {
const isConnected = await checkInternetConnection(
TEST_CONNECTION_LINK,
3000,
false,
)
// const isConnected = await checkInternetConnection(
// TEST_CONNECTION_LINK,
// 3000,
// false,
// )
if (!isConnected) onOffline()
// if (!isConnected) onOffline()
return isConnected
// return isConnected
return true
}
const onOffline = () => {
simpleDispatch(
new SetNavigationModule({
module: NavigationModuleKey.NoInternetConnection,
}),
)
}
// const onOffline = () => {
// simpleDispatch(
// new SetNavigationModule({
// module: NavigationModuleKey.NoInternetConnection,
// }),
// )
// }
export const networkService = {
init,

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

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
import { config } from '@/config'
import { socketEvents } from '@/shared/events'
import { Alert } from 'react-native'
import io from 'socket.io-client'
import { GlobalContainerService } from './global-container.service'
@ -14,6 +15,7 @@ export class SocketIo { @@ -14,6 +15,7 @@ export class SocketIo {
this.socket = io(config.socketUrl, {
transports: ['websocket', 'polling'],
reconnection: true,
secure: true,
})
this._on('connect', () => {
this.emit('join-user', store().getState().account.account)
@ -68,9 +70,9 @@ export class SocketIo { @@ -68,9 +70,9 @@ export class SocketIo {
this._onSocketSendEvent('push-notification')
// this._on('reconnect_attempt', error => {
// console.log('SOCKET reconnect_attempt', error)
// })
this._on('reconnect_attempt', error => {
console.log('SOCKET reconnect_attempt', error)
})
}
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' @@ -2,6 +2,7 @@ import React, { FC, useCallback, useState } from 'react'
import { mediaService } from '@/services/system/media.service'
import { useActionSheet } from '@expo/react-native-action-sheet'
import { TouchableOpacity, ViewStyle } from 'react-native'
import { appEvents } from '@/shared/events'
interface IImageCropPickerProps {
children: (preview: string, onPressRemove: () => void) => React.ReactNode
@ -13,20 +14,19 @@ interface IImageCropPickerProps { @@ -13,20 +14,19 @@ interface IImageCropPickerProps {
export const ImageCropPicker: FC<IImageCropPickerProps> = props => {
const [preview, setPreview] = useState(null)
const { showActionSheetWithOptions } = useActionSheet()
const actions = [() => loadFromCamera(), () => loadPicker(), () => null]
const onPress = () => {
showActionSheetWithOptions(
{
options: ['Фото з камери', 'Фото з галереї', 'Скасувати'],
cancelButtonIndex: 2,
showSeparators: true,
},
index => actions[index](),
)
appEvents.emit('openActionSheet', {
items: [
{
name: 'Фото з камери',
onPress: () => loadFromCamera(),
},
{
name: 'Фото з галереї',
onPress: () => loadPicker(),
},
],
})
}
const loadFromCamera = async () => {
@ -40,16 +40,14 @@ export const ImageCropPicker: FC<IImageCropPickerProps> = props => { @@ -40,16 +40,14 @@ export const ImageCropPicker: FC<IImageCropPickerProps> = props => {
height: 400,
cropperCircleOverlay: true,
})
console.log(image)
onSuccessUpload(image)
}
const onSuccessUpload = useCallback(
async image => {
setPreview(`data:${image.mime};base64,${image.data}`)
props.onChange(image)
},
[props.onChange],
)
const onSuccessUpload = async image => {
setPreview(image.uri)
props.onChange(image)
}
const onPressRemove = () => {
setPreview(null)

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

@ -1,26 +0,0 @@ @@ -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 @@ @@ -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 @@ @@ -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 './platform.helper'
export * from './image.helpers'
export * from './name.helpers'
export * from './fs.helpers'
export * from './get-error-code.helpers'
export * from './image.helpers'
export * from './is-soon-birthday.helper'
export * from './title-by-count.helper'
export * from './theme-helpers'
export * from './linking.helper'
export * from './actions-sheet.helpers'
export * from './transforms.helpers'
export * from './text.helpers'
export * from './date.helpers'
export * from './fs.helpers'
export * from './name.helpers'
export * from './platform.helper'
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 './chat-message-preview-text.helper'
export * from './transforms.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>) => { @@ -115,7 +115,6 @@ export const useFlatList = <T>(props: IProps<T>) => {
const loadAll = () => {
if (!loadParams.current.count) return
setLoadParams({ limit: loadParams.current.count })
}

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

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
import { NavigationColors } from '../interfaces/navigation.interface'
import { colors } from './colors'
export const navigation: NavigationColors = {
tabBar: {
@ -9,7 +10,11 @@ export const navigation: NavigationColors = { @@ -9,7 +10,11 @@ export const navigation: NavigationColors = {
indicator: {
$bg: '#EEEEEE',
$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 { @@ -10,4 +10,9 @@ export interface NavigationColors {
$border: string
}
}
netStatus: {
backgroundColor: string
textColor: string
}
}

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

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

10
src/store/shared/reducer.ts

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

7
src/store/shared/selectors.ts

@ -1,8 +1,11 @@ @@ -1,8 +1,11 @@
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 selectNetConnect = (store: RootState) => store.shared.isNetConnect

11
src/store/shared/types.ts

@ -20,8 +20,17 @@ export class SetIsForbidden implements Action { @@ -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 {
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