Browse Source

Merge | Merge with master

resend-code
Oksana Stepanenko 3 years ago
parent
commit
afafca9cb9
  1. 428
      ios/Podfile.lock
  2. 6
      ios/taskme.xcodeproj/project.pbxproj
  3. 14658
      package-lock.json
  4. 6
      package.json
  5. 4
      src/api/account/requests.ts
  6. 1
      src/api/contacts/requests.interface.ts
  7. 2
      src/api/contacts/requests.ts
  8. 7
      src/api/factories/requests.ts
  9. 3
      src/api/factories/responses.interface.ts
  10. 11
      src/modules/account/atoms/account-title.atom.tsx
  11. 27
      src/modules/account/atoms/edit-avatar.atom.tsx
  12. 29
      src/modules/account/hooks/use-account-editor.hook.ts
  13. 31
      src/modules/account/screens/account.screen.tsx
  14. 24
      src/modules/account/validations/edit-account.validator.ts
  15. 8
      src/modules/contacts/components/contacts-list.component.tsx
  16. 4
      src/modules/contacts/configs/contact-detail.config.ts
  17. 18
      src/modules/contacts/hooks/use-fetch-contacts.hook.ts
  18. 22
      src/modules/contacts/smart-component/contacts-list.smart-component.tsx
  19. 4
      src/modules/tasks/screens/select-task-executors.screen.tsx
  20. 6
      src/modules/users/components/selected-users-row.component.tsx
  21. 6
      src/modules/users/components/user-list-item.component.tsx
  22. 6
      src/modules/users/components/user-row-card.component.tsx
  23. 1
      src/modules/users/components/user-select-list.component.tsx
  24. 10
      src/modules/users/components/user-square-card.component.tsx
  25. 10
      src/modules/users/smart-components/users-select-list.smart-component.tsx
  26. 2
      src/services/domain/auth.service.ts
  27. 4
      src/services/domain/contacts.service.ts
  28. 14
      src/services/domain/factories.service.ts
  29. 6
      src/shared/components/buttons/button.component.tsx
  30. 13
      src/shared/components/elements/avatar.component.tsx
  31. 4
      src/shared/components/forms/form-search-with-btn.component.tsx
  32. 50
      src/shared/components/forms/form-text-input-with-icon.component.tsx
  33. 3
      src/shared/helpers/index.ts
  34. 5
      src/shared/helpers/linking.helper.ts
  35. 10
      src/shared/interfaces/factories.interfaces.ts
  36. 3
      src/shared/interfaces/index.ts
  37. 7
      src/shared/themes/interfaces/shared-components.interface.ts
  38. 8
      src/shared/themes/light/shared-components.ts
  39. 10
      src/store/account/reducer.ts
  40. 11
      src/store/account/selectors.ts
  41. 14
      src/store/account/types.ts
  42. 46
      yarn.lock

428
ios/Podfile.lock

@ -2,14 +2,14 @@ PODS: @@ -2,14 +2,14 @@ PODS:
- boost-for-react-native (1.63.0)
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- FBLazyVector (0.64.2)
- FBReactNativeSpec (0.64.2):
- FBLazyVector (0.64.3)
- FBReactNativeSpec (0.64.3):
- RCT-Folly (= 2020.01.13.00)
- RCTRequired (= 0.64.2)
- RCTTypeSafety (= 0.64.2)
- React-Core (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- RCTRequired (= 0.64.3)
- RCTTypeSafety (= 0.64.3)
- React-Core (= 0.64.3)
- React-jsi (= 0.64.3)
- ReactCommon/turbomodule/core (= 0.64.3)
- Flipper (0.75.1):
- Flipper-Folly (~> 2.5)
- Flipper-RSocket (~> 1.3)
@ -72,190 +72,190 @@ PODS: @@ -72,190 +72,190 @@ PODS:
- boost-for-react-native
- DoubleConversion
- glog
- RCTRequired (0.64.2)
- RCTTypeSafety (0.64.2):
- FBLazyVector (= 0.64.2)
- RCTRequired (0.64.3)
- RCTTypeSafety (0.64.3):
- FBLazyVector (= 0.64.3)
- RCT-Folly (= 2020.01.13.00)
- RCTRequired (= 0.64.2)
- React-Core (= 0.64.2)
- React (0.64.2):
- React-Core (= 0.64.2)
- React-Core/DevSupport (= 0.64.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-RCTActionSheet (= 0.64.2)
- React-RCTAnimation (= 0.64.2)
- React-RCTBlob (= 0.64.2)
- React-RCTImage (= 0.64.2)
- React-RCTLinking (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- React-RCTSettings (= 0.64.2)
- React-RCTText (= 0.64.2)
- React-RCTVibration (= 0.64.2)
- React-callinvoker (0.64.2)
- React-Core (0.64.2):
- 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):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- 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)
- Yoga
- React-Core/CoreModulesHeaders (0.64.2):
- React-Core/CoreModulesHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/Default (0.64.2):
- React-Core/Default (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/DevSupport (0.64.2):
- React-Core/DevSupport (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-jsinspector (= 0.64.2)
- React-perflogger (= 0.64.2)
- 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)
- Yoga
- React-Core/RCTActionSheetHeaders (0.64.2):
- React-Core/RCTActionSheetHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTAnimationHeaders (0.64.2):
- React-Core/RCTAnimationHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTBlobHeaders (0.64.2):
- React-Core/RCTBlobHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTImageHeaders (0.64.2):
- React-Core/RCTImageHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTLinkingHeaders (0.64.2):
- React-Core/RCTLinkingHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTNetworkHeaders (0.64.2):
- React-Core/RCTNetworkHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTSettingsHeaders (0.64.2):
- React-Core/RCTSettingsHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTTextHeaders (0.64.2):
- React-Core/RCTTextHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTVibrationHeaders (0.64.2):
- React-Core/RCTVibrationHeaders (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-jsiexecutor (= 0.64.3)
- React-perflogger (= 0.64.3)
- Yoga
- React-Core/RCTWebSocket (0.64.2):
- React-Core/RCTWebSocket (0.64.3):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- 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)
- Yoga
- React-CoreModules (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- React-CoreModules (0.64.3):
- FBReactNativeSpec (= 0.64.3)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.2)
- React-Core/CoreModulesHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTImage (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-cxxreact (0.64.2):
- 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)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-callinvoker (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsinspector (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-runtimeexecutor (= 0.64.2)
- React-jsi (0.64.2):
- 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)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-jsi/Default (= 0.64.2)
- React-jsi/Default (0.64.2):
- React-jsi/Default (= 0.64.3)
- React-jsi/Default (0.64.3):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-jsiexecutor (0.64.2):
- React-jsiexecutor (0.64.3):
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-jsinspector (0.64.2)
- React-cxxreact (= 0.64.3)
- React-jsi (= 0.64.3)
- React-perflogger (= 0.64.3)
- React-jsinspector (0.64.3)
- react-native-clear-cache (1.0.3):
- React
- react-native-date-picker (3.4.3):
@ -270,70 +270,70 @@ PODS: @@ -270,70 +270,70 @@ PODS:
- React-Core
- react-native-splash-screen (3.2.0):
- React
- React-perflogger (0.64.2)
- React-RCTActionSheet (0.64.2):
- React-Core/RCTActionSheetHeaders (= 0.64.2)
- React-RCTAnimation (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- 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.2)
- React-Core/RCTAnimationHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTBlob (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- 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.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTImage (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- 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.2)
- React-Core/RCTImageHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTLinking (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- React-Core/RCTLinkingHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTNetwork (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- 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.2)
- React-Core/RCTNetworkHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTSettings (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- 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.2)
- React-Core/RCTSettingsHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTText (0.64.2):
- React-Core/RCTTextHeaders (= 0.64.2)
- React-RCTVibration (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- 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.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-runtimeexecutor (0.64.2):
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (0.64.2):
- 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):
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-callinvoker (= 0.64.2)
- React-Core (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-perflogger (= 0.64.2)
- 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)
- RNCAsyncStorage (1.15.8):
- React-Core
- RNCPicker (1.16.6):
@ -342,12 +342,12 @@ PODS: @@ -342,12 +342,12 @@ PODS:
- React-Core
- RNGestureHandler (1.10.3):
- React-Core
- RNImageCropPicker (0.36.2):
- RNImageCropPicker (0.37.2):
- React-Core
- React-RCTImage
- RNImageCropPicker/QBImagePickerController (= 0.36.2)
- RNImageCropPicker/QBImagePickerController (= 0.37.2)
- TOCropViewController
- RNImageCropPicker/QBImagePickerController (0.36.2):
- RNImageCropPicker/QBImagePickerController (0.37.2):
- React-Core
- React-RCTImage
- TOCropViewController
@ -548,8 +548,8 @@ SPEC CHECKSUMS: @@ -548,8 +548,8 @@ SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
FBLazyVector: e686045572151edef46010a6f819ade377dfeb4b
FBReactNativeSpec: cc04672e92156b8b87bd3f3de29d1d1fda9c7ba2
FBLazyVector: c71c5917ec0ad2de41d5d06a5855f6d5eda06971
FBReactNativeSpec: 50ac84ed135478e1b20e25b4c165cd57b2ce1988
Flipper: d3da1aa199aad94455ae725e9f3aa43f3ec17021
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
Flipper-Folly: 755929a4f851b2fb2c347d533a23f191b008554c
@ -560,49 +560,49 @@ SPEC CHECKSUMS: @@ -560,49 +560,49 @@ SPEC CHECKSUMS:
glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
Permission-Camera: 0db4fd6e1c556c1cf47f38b989a8084cea3ec3dd
Permission-PhotoLibrary: 9dcf80d1353d81b9f1e210c34291591236aaf2b6
Permission-Camera: 1f383e3f9a38ba393c63ba9b09a4726f94eda769
Permission-PhotoLibrary: 9b75dcdaa23295b99cbe655113aee41bae4c5d52
RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c
RCTRequired: 6d3e854f0e7260a648badd0d44fc364bc9da9728
RCTTypeSafety: c1f31d19349c6b53085766359caac425926fafaa
React: bda6b6d7ae912de97d7a61aa5c160db24aa2ad69
React-callinvoker: 9840ea7e8e88ed73d438edb725574820b29b5baa
React-Core: b5e385da7ce5f16a220fc60fd0749eae2c6120f0
React-CoreModules: 17071a4e2c5239b01585f4aa8070141168ab298f
React-cxxreact: 9be7b6340ed9f7c53e53deca7779f07cd66525ba
React-jsi: 67747b9722f6dab2ffe15b011bcf6b3f2c3f1427
React-jsiexecutor: 80c46bd381fd06e418e0d4f53672dc1d1945c4c3
React-jsinspector: cc614ec18a9ca96fd275100c16d74d62ee11f0ae
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
react-native-clear-cache: 28bce59b33cd809e0afe903786787b4409d1c1fb
react-native-date-picker: 201b481c94dcb7678f4712477ad026dd7793305b
react-native-netinfo: 7cb7877ff31ebeb3d03ce0b4fbb616f121ddd859
react-native-netinfo: 0f64266bbaa1989ebd51b43ee1723d582f6b3e47
react-native-orientation-locker: 998c0744e26624407dac068c04c605b4af7304a2
react-native-pager-view: 5ab4d0b4b44d89f77310cb3eb8129745f274ce55
react-native-safe-area-context: 61c8c484a3a9e7d1fda19f7b1794b35bbfd2262a
react-native-pager-view: f21658a2e12eced35ef998250375e4e4dc9b8487
react-native-safe-area-context: 8465df05de8106c584b117f0e027e17174d6e02e
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
React-perflogger: 25373e382fed75ce768a443822f07098a15ab737
React-RCTActionSheet: af7796ba49ffe4ca92e7277a5d992d37203f7da5
React-RCTAnimation: 6a2e76ab50c6f25b428d81b76a5a45351c4d77aa
React-RCTBlob: 02a2887023e0eed99391b6445b2e23a2a6f9226d
React-RCTImage: ce5bf8e7438f2286d9b646a05d6ab11f38b0323d
React-RCTLinking: ccd20742de14e020cb5f99d5c7e0bf0383aefbd9
React-RCTNetwork: dfb9d089ab0753e5e5f55fc4b1210858f7245647
React-RCTSettings: b14aef2d83699e48b410fb7c3ba5b66cd3291ae2
React-RCTText: 41a2e952dd9adc5caf6fb68ed46b275194d5da5f
React-RCTVibration: 24600e3b1aaa77126989bc58b6747509a1ba14f3
React-runtimeexecutor: a9904c6d0218fb9f8b19d6dd88607225927668f9
ReactCommon: 149906e01aa51142707a10665185db879898e966
RNCAsyncStorage: e8b8d6320a0dd90eb610fb0d0b1ef90596697c69
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
RNCAsyncStorage: 0f655864a81214d1c5a9bf0faf79d86dc25c383e
RNCPicker: c3a3d481bec16624ed84a3c2a64c92fdc5515960
RNDeviceInfo: cc7de0772378f85d8f36ae439df20f05c590a651
RNDeviceInfo: 0d6865ab0a57d9192bdd4e4f5894340b846c3e53
RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211
RNImageCropPicker: 35a3ceb837446fa11547704709bb22b5fac6d584
RNPermissions: 4b54095940aea8c03fa3e6c92d4ac3647b31ed4e
RNImageCropPicker: 448d3c6e923fde3466b49caf3c2457c2a0ba02dd
RNPermissions: b3588a19e12bff03fe21bc46911fd32343666dc0
RNScreens: eb0dfb2d6b21d2d7f980ad46b14eb306d2f1062e
RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f
RNVectorIcons: f67a1abce2ec73e62fe4606e8110e95a832bc859
TOCropViewController: 3105367e808b7d3d886a74ff59bf4804e7d3ab38
Yoga: 575c581c63e0d35c9a83f4b46d01d63abc1100ac
Yoga: e6ecf3fa25af9d4c87e94ad7d5d292eedef49749
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
PODFILE CHECKSUM: 7c42e987d85f19fed87d9ce656708219fc97fe5b

6
ios/taskme.xcodeproj/project.pbxproj

@ -500,10 +500,9 @@ @@ -500,10 +500,9 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 15;
CURRENT_PROJECT_VERSION = 19;
DEVELOPMENT_TEAM = HQ3J3TDPR2;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=*]" = "";
INFOPLIST_FILE = taskme/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = (
@ -536,10 +535,9 @@ @@ -536,10 +535,9 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 15;
CURRENT_PROJECT_VERSION = 19;
DEVELOPMENT_TEAM = HQ3J3TDPR2;
ENABLE_BITCODE = NO;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
INFOPLIST_FILE = taskme/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = (

14658
package-lock.json generated

File diff suppressed because it is too large Load Diff

6
package.json

@ -31,14 +31,14 @@ @@ -31,14 +31,14 @@
"moment": "^2.29.1",
"oa-react-native-clear-cache": "^1.0.3",
"react": "17.0.1",
"react-native": "0.64.2",
"react-native": "^0.64.3",
"react-native-date-picker": "^3.4.3",
"react-native-device-info": "^8.3.3",
"react-native-draggable-switch": "^1.1.1",
"react-native-drawer": "^2.5.1",
"react-native-expire-storage": "0.0.3",
"react-native-gesture-handler": "^1.10.3",
"react-native-image-crop-picker": "^0.36.2",
"react-native-image-crop-picker": "^0.37.2",
"react-native-keyboard-aware-scroll-view": "^0.9.5",
"react-native-make": "^1.0.1",
"react-native-masked-text": "^1.13.0",
@ -81,4 +81,4 @@ @@ -81,4 +81,4 @@
"jest": {
"preset": "react-native"
}
}
}

4
src/api/account/requests.ts

@ -20,3 +20,7 @@ export const updateAccountReq = ( @@ -20,3 +20,7 @@ export const updateAccountReq = (
): ApiResponse<IFetchAccountResponse> => {
return http.patch('account', payload)
}
export const removeAvatarReq = () => {
return http.delete('account/avatar')
}

1
src/api/contacts/requests.interface.ts

@ -2,4 +2,5 @@ import { AxiosRequestConfig } from 'axios' @@ -2,4 +2,5 @@ import { AxiosRequestConfig } from 'axios'
export interface IFetchContactsPayload extends AxiosRequestConfig {
soonBirthday: boolean
searchString: string
}

2
src/api/contacts/requests.ts

@ -13,7 +13,7 @@ export const fetchContactsReq = ( @@ -13,7 +13,7 @@ export const fetchContactsReq = (
}
export const fetchContactDetailReq = (params: {
contactId: number
contactId: string
}): ApiResponse<IFetchContactDetailRes> => {
return http.get<IFetchContactDetailRes>(`contacts/${params.contactId}`)
}

7
src/api/factories/requests.ts

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
import http from '../http.service'
import { ApiResponse } from '../http.types'
import { IGetMyFactoriesResponse } from './responses.interface'
export const fetchMyFactoriesReq = (): ApiResponse<IGetMyFactoriesResponse> => {
return http.get<IGetMyFactoriesResponse>('factories')
}

3
src/api/factories/responses.interface.ts

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
import { IFactory } from '@/shared/interfaces'
export type IGetMyFactoriesResponse = IFactory[]

11
src/modules/account/atoms/account-title.atom.tsx

@ -9,17 +9,22 @@ interface IAccountTitleAtomProps { @@ -9,17 +9,22 @@ interface IAccountTitleAtomProps {
firstName: string
lastName: string
position: string
myFactoryName?: string
}
export const AccountTitleAtom = (props: IAccountTitleAtomProps) => {
const { styles } = useTheme(createStyles)
const getSubText = () => {
if (props.myFactoryName)
return `${props.myFactoryName}, ${props.position}`
else return props.position
}
return (
<View style={styles.titleWrap}>
<Txt style={styles.title}>
{`${props.firstName} ${props.lastName}`}
</Txt>
<Txt style={styles.description}>{props.position}</Txt>
<Txt style={styles.description}>{getSubText()}</Txt>
</View>
)
}
@ -28,7 +33,7 @@ const createStyles = (theme: PartialTheme) => @@ -28,7 +33,7 @@ const createStyles = (theme: PartialTheme) =>
StyleSheet.create({
titleWrap: {
marginTop: $size(20, 18),
marginBottom: $size(30,25),
marginBottom: $size(30, 25),
alignItems: 'center',
},
title: {

27
src/modules/account/atoms/edit-avatar.atom.tsx

@ -2,18 +2,20 @@ import { $size, Avatar, hasImageUrl, IconComponent } from '@/shared' @@ -2,18 +2,20 @@ import { $size, Avatar, hasImageUrl, IconComponent } from '@/shared'
import { useTheme } from '@/shared/hooks/use-theme.hook'
import { PartialTheme } from '@/shared/themes/interfaces'
import React, { FC } from 'react'
import { StyleSheet, View } from 'react-native'
import { StyleSheet, TouchableOpacity, View } from 'react-native'
interface IEditAvatarAtomProps {
avatarUrl: string
firstName: string
preview: string
onPressRemove: () => void
}
export const EditAvatarAtom: FC<IEditAvatarAtomProps> = ({
avatarUrl,
firstName,
preview,
onPressRemove,
}) => {
const {
styles,
@ -39,6 +41,17 @@ export const EditAvatarAtom: FC<IEditAvatarAtomProps> = ({ @@ -39,6 +41,17 @@ export const EditAvatarAtom: FC<IEditAvatarAtomProps> = ({
color={changePhotoIcon.$icon}
/>
</View>
{avatarUrl ? (
<TouchableOpacity
style={styles.removePhotoBtn}
onPress={() => onPressRemove()}>
<IconComponent
name={'xcircle-1'}
size={$size(25)}
color={changePhotoIcon.$icon}
/>
</TouchableOpacity>
) : null}
</View>
)
}
@ -69,4 +82,16 @@ const createStyles = ({ @@ -69,4 +82,16 @@ const createStyles = ({
right: 0,
bottom: 0,
},
removePhotoBtn: {
width: $size(36),
height: $size(36),
borderRadius: 100,
backgroundColor: changePhotoIcon.$bg,
alignItems: 'center',
justifyContent: 'center',
zIndex: 2,
position: 'absolute',
right: 0,
top: 0,
},
})

29
src/modules/account/hooks/use-account-editor.hook.ts

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
import { updateAccountReq, updateAvatarReq } from '@/api'
import { removeAvatarReq, updateAccountReq, updateAvatarReq } from '@/api'
import { accountService } from '@/services/domain'
import { appEvents, useForm } from '@/shared'
import { selectAccount } from '@/store/account'
@ -10,6 +10,7 @@ import { validateEditAccount } from '../validations' @@ -10,6 +10,7 @@ import { validateEditAccount } from '../validations'
interface IForm {
firstName: string
lastName: string
middleName?: string
position: string
avatarUrl: string
phoneNumber: string
@ -24,6 +25,7 @@ export const useAccountEditor = () => { @@ -24,6 +25,7 @@ export const useAccountEditor = () => {
const account = useSelector(selectAccount)
const accountInfo = account.info
const [isLoading, setLoading] = useState(false)
const [isDeleteAvatar, setDeleteAvatar] = useState(false)
const form = useForm<IForm>(
{
@ -43,6 +45,7 @@ export const useAccountEditor = () => { @@ -43,6 +45,7 @@ export const useAccountEditor = () => {
email: account.email,
innerPhoneNumber: accountInfo.innerPhoneNumber,
personalPhoneNumber: accountInfo.personalPhoneNumber,
middleName: accountInfo.middleName,
}
}, [account])
@ -72,6 +75,7 @@ export const useAccountEditor = () => { @@ -72,6 +75,7 @@ export const useAccountEditor = () => {
try {
await updateAvatar()
await updateInfo()
if (isDeleteAvatar) removeAvatar()
appEvents.emit('openInfoModal', {
title: 'Успіх!',
message: 'Данні оновлені.',
@ -90,7 +94,6 @@ export const useAccountEditor = () => { @@ -90,7 +94,6 @@ export const useAccountEditor = () => {
const updateAvatar = async () => {
if (!form.values.avatar) return null
console.log(form.values.avatar)
const { data } = await updateAvatarReq({
avatar: form.values.avatar,
})
@ -105,5 +108,25 @@ export const useAccountEditor = () => { @@ -105,5 +108,25 @@ export const useAccountEditor = () => {
return data
}
return { form, submit: preSubmit, isLoading }
const removeAvatar = async () => {
await removeAvatarReq()
accountService.setAccount({
...account,
info: { ...account.info, avatarUrl: null },
})
setDeleteAvatar(false)
}
const onPressRemoveAvatar = async () => {
setDeleteAvatar(true)
form.setFormField('avatar', null)
form.setFormField('avatarUrl', null)
}
return {
form,
submit: preSubmit,
isLoading,
removeAvatar: onPressRemoveAvatar,
}
}

31
src/modules/account/screens/account.screen.tsx

@ -27,13 +27,16 @@ import { @@ -27,13 +27,16 @@ import {
import { useAuthorization } from '@/modules/auth/hooks'
import { PartialTheme } from '@/shared/themes/interfaces'
import { useTheme } from '@/shared/hooks/use-theme.hook'
import { useSelector } from 'react-redux'
import { selectMyFactoryName } from '@/store/account'
interface IProps extends IRouteParams {}
export const AccountScreen: FC<IProps> = ({ navigation }) => {
const { styles } = useTheme(createStyles)
const { form, submit, isLoading } = useAccountEditor()
const { form, submit, isLoading, removeAvatar } = useAccountEditor()
const myFactoryName = useSelector(selectMyFactoryName)
const { logout } = useAuthorization({})
const { scrollRef, onFocusLastElement, onBlurLastElement } =
useAndroidPaddingKeyboard(true)
@ -79,6 +82,7 @@ export const AccountScreen: FC<IProps> = ({ navigation }) => { @@ -79,6 +82,7 @@ export const AccountScreen: FC<IProps> = ({ navigation }) => {
avatarUrl={values.avatarUrl}
firstName={values.firstName}
preview={preview}
onPressRemove={() => removeAvatar()}
/>
)}
</ImageCropPicker>
@ -87,6 +91,7 @@ export const AccountScreen: FC<IProps> = ({ navigation }) => { @@ -87,6 +91,7 @@ export const AccountScreen: FC<IProps> = ({ navigation }) => {
firstName={values.firstName}
lastName={values.lastName}
position={values.position}
myFactoryName={myFactoryName}
/>
<FakeDateInputWithModal
@ -96,6 +101,30 @@ export const AccountScreen: FC<IProps> = ({ navigation }) => { @@ -96,6 +101,30 @@ export const AccountScreen: FC<IProps> = ({ navigation }) => {
error={errors.dateOfBirth}
/>
<TextInputWithIcon
title="Імя"
value={values.firstName}
iconName="usersquare-1"
onChange={v => setFormField('firstName', v)}
error={errors.firstName}
/>
<TextInputWithIcon
title="Прізвище"
value={values.lastName}
iconName="usersquare-1"
onChange={v => setFormField('lastName', v)}
error={errors.lastName}
/>
<TextInputWithIcon
title="По-батькові"
value={values.middleName}
iconName="usersquare-1"
onChange={v => setFormField('middleName', v)}
error={errors.middleName}
/>
<TextInputWithIcon
title="Посада"
value={values.position}

24
src/modules/account/validations/edit-account.validator.ts

@ -31,6 +31,28 @@ const constraints = { @@ -31,6 +31,28 @@ const constraints = {
message: '^Мінімальна довжина становить 2 символи',
},
},
firstName: {
presence: presenceCost,
length: {
minimum: 2,
message: '^Мінімальна довжина становить 2 символи',
},
},
lastName: {
presence: presenceCost,
length: {
minimum: 2,
message: '^Мінімальна довжина становить 2 символи',
},
},
middleName: {
presence: presenceCost,
length: {
minimum: 2,
message: '^Мінімальна довжина становить 2 символи',
},
},
innerPhoneNumber: {
presence: presenceCost,
length: {
@ -61,9 +83,7 @@ const constraints = { @@ -61,9 +83,7 @@ const constraints = {
}
export const validateEditAccount = <T>(data: T) => {
console.log('data', data)
const errors = validate(data, constraints)
console.log(errors)
if (_.isEmpty(errors)) return null
_.each(errors, (it, key, arr) => {

8
src/modules/contacts/components/contacts-list.component.tsx

@ -1,19 +1,17 @@ @@ -1,19 +1,17 @@
import { IContact, Loading, NotFound } from '@/shared'
import _ from 'lodash'
import React, { FC, useCallback } from 'react'
import { FlatList, RefreshControl, Text, ViewStyle } from 'react-native'
import { FlatList, RefreshControl, ViewStyle } from 'react-native'
import { ContactRowCard } from './contact-row-card.component'
interface IProps {
contacts: IContact[]
style?: ViewStyle
contentContainerStyle?: ViewStyle
onPressCard: (id: number) => void
onPressCard: (phone: string) => void
onPressInfo: (id: number) => void
loadMore: () => void
onRefresh: () => void
Header: JSX.Element
isLoading?: boolean
isLoadingMore?: boolean
}
@ -28,7 +26,6 @@ export const ContactsList: FC<IProps> = ({ @@ -28,7 +26,6 @@ export const ContactsList: FC<IProps> = ({
isLoading,
isLoadingMore,
onRefresh,
Header,
}) => {
const itemToRender = useCallback(
item => (
@ -56,7 +53,6 @@ export const ContactsList: FC<IProps> = ({ @@ -56,7 +53,6 @@ export const ContactsList: FC<IProps> = ({
showsHorizontalScrollIndicator={false}
initialNumToRender={20}
keyExtractor={item => `${item.userId}${item.firstName}`}
// ListHeaderComponent={Header}
ListEmptyComponent={<NotFound text="Контакти не знайдені" />}
refreshControl={
<RefreshControl refreshing={isLoading} onRefresh={onRefresh} />

4
src/modules/contacts/configs/contact-detail.config.ts

@ -7,21 +7,25 @@ export const getContactDetailConfig = (contactDetail: any) => { @@ -7,21 +7,25 @@ export const getContactDetailConfig = (contactDetail: any) => {
},
{
title: 'Тел. робочий',
type: 'phone-number',
iconName: 'phone-1',
value: contactDetail?.workPhoneNumber,
},
{
title: 'Тел. особистий',
type: 'phone-number',
iconName: 'phone-1',
value: contactDetail?.personalPhoneNumber,
},
{
title: 'Тел. внутрішній',
type: 'phone-number',
iconName: 'phone-1',
value: contactDetail?.innerPhoneNumber,
},
{
title: 'E-mail',
type: 'email',
iconName: 'email',
value: contactDetail?.email,
},

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

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
import { createFullName, isSoonBirthday } from '@/shared/helpers'
import { useEffect, useMemo, useState } from 'react'
import { useEffect, useState } from 'react'
import { IContact, useFlatList } from '@/shared'
import { contactsService } from '@/services/domain'
@ -17,29 +17,35 @@ export const useFetchContacts = () => { @@ -17,29 +17,35 @@ export const useFetchContacts = () => {
} = useFlatList<IContact>({
fetchItems: params => contactsService.fetch({ ...params }),
needInit: true,
serrializatorItems: items => {
return items.map((it: IContact) => {
serrializatorItems: items =>
items.map((it: IContact) => {
return {
userId: it.userId,
fullName: createFullName(it.firstName, it.lastName),
isSoonBirthday: isSoonBirthday(it.dateOfBirth),
avatarUrl: it.avatarUrl,
}
})
},
}),
loadParams: {
sort: 'DESC',
sortField: 'id',
searchString,
soonBirthday: false,
},
limit: 20,
})
const setSearchString = (value: string) => {
setLoadParams({ searchString: value })
}
const setBirthday = value => {
setLoadParams({ soonBirthday: value })
}
useEffect(() => {
setSearchString(searchString)
}, [searchString])
return {
contacts,
isLoading,

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

@ -1,8 +1,9 @@ @@ -1,8 +1,9 @@
import { contactsService } from '@/services/domain'
import { $size, RouteKey } from '@/shared'
import { callPhoneNumber } from '@/shared/helpers'
import { useTheme } from '@/shared/hooks/use-theme.hook'
import { PartialTheme } from '@/shared/themes/interfaces'
import React, { FC } from 'react'
import { ScrollView, StyleSheet, View } from 'react-native'
import { StyleSheet, View } from 'react-native'
import { SearchFieldWitchIcon } from '../atoms'
import { ContactsList } from '../components'
import { useFetchContacts } from '../hooks'
@ -26,6 +27,14 @@ export const ContactsSmartList: FC<IProps> = ({ navigate }) => { @@ -26,6 +27,14 @@ export const ContactsSmartList: FC<IProps> = ({ navigate }) => {
resetFlatList,
} = useFetchContacts()
const onPressCard = async (contactId: string) => {
const {
data: { phoneNumber },
} = await contactsService.fetchDetail({ contactId })
callPhoneNumber(phoneNumber)
}
return (
<>
<View style={styles.content}>
@ -33,15 +42,13 @@ export const ContactsSmartList: FC<IProps> = ({ navigate }) => { @@ -33,15 +42,13 @@ export const ContactsSmartList: FC<IProps> = ({ navigate }) => {
searchString={searchString}
placeholder={'Знайти контакт'}
isActiveBirthday={onlyWithBirthday}
onChange={text => setSearchVal(text)}
onChange={setSearchVal}
onPressIcon={() => setBirthday(!onlyWithBirthday)}
/>
<ContactsList
contacts={contacts}
onPressCard={id =>
navigate(RouteKey.ContactDetail, { contactId: id })
}
onPressCard={onPressCard}
onPressInfo={id =>
navigate(RouteKey.ContactDetail, { contactId: id })
}
@ -50,14 +57,13 @@ export const ContactsSmartList: FC<IProps> = ({ navigate }) => { @@ -50,14 +57,13 @@ export const ContactsSmartList: FC<IProps> = ({ navigate }) => {
isLoading={isLoading}
isLoadingMore={isLoadingNext}
onRefresh={resetFlatList}
Header={<View></View>}
/>
</View>
</>
)
}
const createStyles = (theme: PartialTheme) =>
const createStyles = () =>
StyleSheet.create({
content: {
paddingHorizontal: $size(16, 14),

4
src/modules/tasks/screens/select-task-executors.screen.tsx

@ -24,7 +24,7 @@ export const SelectTaskExecutorsScreen: FC<IProps> = ({ @@ -24,7 +24,7 @@ export const SelectTaskExecutorsScreen: FC<IProps> = ({
const renderContent = () => {
if (isLoading) return renderLoader()
return (
<View>
<View style={{ flex: 1, paddingBottom: $size(20) }}>
{items?.length ? (
<SelectedUsersRow
selectedUsers={selectedUsers.map(it => ({
@ -46,7 +46,7 @@ export const SelectTaskExecutorsScreen: FC<IProps> = ({ @@ -46,7 +46,7 @@ export const SelectTaskExecutorsScreen: FC<IProps> = ({
return (
<ScreenLayout
header={{
title: 'Обрати користувачів',
title: 'Додати виконавця',
goBack: () => navigation.goBack(),
style: { marginBottom: $size(20, 18), paddingTop: $size(10, 10) },
}}

6
src/modules/users/components/selected-users-row.component.tsx

@ -24,10 +24,12 @@ export const SelectedUsersRow: FC<IProps> = ({ @@ -24,10 +24,12 @@ export const SelectedUsersRow: FC<IProps> = ({
}) => {
const { styles } = useTheme(createStyles)
if (_.isEmpty(selectedUsers)) return <></>
return (
<ScrollView
horizontal
contentContainerStyle={!_.isEmpty(selectedUsers) && styles.contentContainer}
contentContainerStyle={styles.contentContainer}
showsHorizontalScrollIndicator={false}>
{selectedUsers.map(item => (
<UserSquareCard
@ -44,6 +46,8 @@ export const SelectedUsersRow: FC<IProps> = ({ @@ -44,6 +46,8 @@ export const SelectedUsersRow: FC<IProps> = ({
const createStyles = (theme: PartialTheme) =>
StyleSheet.create({
contentContainer: {
flex: 1,
flexGrow: 1,
marginBottom: $size(20, 15),
marginHorizontal: $size(10),
},

6
src/modules/users/components/user-list-item.component.tsx

@ -24,8 +24,8 @@ export const UserListItem: FC<IProps> = ({ @@ -24,8 +24,8 @@ export const UserListItem: FC<IProps> = ({
<View style={styles.container}>
<Avatar
imageUrl={hasImageUrl(imageUri, userName)}
maxHeight={$size(35)}
maxWidth={$size(35)}
maxHeight={$size(35, 32)}
maxWidth={$size(35, 32)}
textStyle={{ fontSize: $size(20, 18), fontWeight: '500' }}
/>
@ -49,7 +49,7 @@ const createStyles = (theme: PartialTheme) => @@ -49,7 +49,7 @@ const createStyles = (theme: PartialTheme) =>
},
userName: {
fontSize: $size(16, 14),
fontWeight: '500',
fontWeight: '400',
marginLeft: $size(20, 16),
color: theme.$textPrimary
},

6
src/modules/users/components/user-row-card.component.tsx

@ -22,8 +22,8 @@ export const UserRowCard: FC<IProps> = ({ @@ -22,8 +22,8 @@ export const UserRowCard: FC<IProps> = ({
<View style={styles.contentWrap}>
<Avatar
imageUrl={hasImageUrl(imageUri, userName)}
maxHeight={$size(35)}
maxWidth={$size(35)}
maxHeight={$size(35, 30)}
maxWidth={$size(35, 30)}
textStyle={{ fontSize: $size(20, 18), fontWeight: '500' }}
/>
@ -49,7 +49,7 @@ const createStyles = (theme: PartialTheme) => @@ -49,7 +49,7 @@ const createStyles = (theme: PartialTheme) =>
userName: {
color: theme.$textPrimary,
fontSize: $size(16, 14),
fontWeight: '500',
fontWeight: '300',
marginLeft: $size(20, 16),
},
})

1
src/modules/users/components/user-select-list.component.tsx

@ -32,6 +32,7 @@ export const UsersSelectList: FC<IProps> = ({ @@ -32,6 +32,7 @@ export const UsersSelectList: FC<IProps> = ({
onEndReached={() => loadMore()}
renderItem={({ item }) => (
<UserListItem
imageUri={item.avatarUrl}
isChecked={item.isSelected}
onSelectItem={() =>
!item.isSelected

10
src/modules/users/components/user-square-card.component.tsx

@ -61,12 +61,13 @@ const createStyles = (theme: PartialTheme) => @@ -61,12 +61,13 @@ const createStyles = (theme: PartialTheme) =>
position: 'absolute',
backgroundColor: theme.iconComponent.$primaryColor,
borderRadius: 100,
width: $size(25),
height: $size(25),
width: $size(24, 23),
height: $size(24, 23),
alignItems: 'center',
justifyContent: 'center',
top: 0,
top: $size(10),
right: 0,
},
avatarWrap: {
width: $size(75, 70),
@ -77,7 +78,8 @@ const createStyles = (theme: PartialTheme) => @@ -77,7 +78,8 @@ const createStyles = (theme: PartialTheme) =>
justifyContent: 'center',
},
avatarTitle: {
fontWeight: isAndroid('bold', '500'),
fontWeight: isAndroid('normal', '400'),
fontSize: $size(16, 14),
textAlign: 'center'
},
})

10
src/modules/users/smart-components/users-select-list.smart-component.tsx

@ -34,7 +34,7 @@ export const UsersSelectListSmart: FC<IProps> = props => { @@ -34,7 +34,7 @@ export const UsersSelectListSmart: FC<IProps> = props => {
}))
return (
<>
<View style={{flex: 1, flexGrow: 300}}>
<SearchWithBtn
containerStyle={styles.container}
searchValue={searchString}
@ -56,7 +56,7 @@ export const UsersSelectListSmart: FC<IProps> = props => { @@ -56,7 +56,7 @@ export const UsersSelectListSmart: FC<IProps> = props => {
simpleDispatch(new UnselectUser({ id }))
}
loadMore={() => loadMore()}
contentContainerStyle={[styles.contentContainerStyle, !_.isEmpty(selectedUsers) && styles.smallContainer]}
contentContainerStyle={styles.contentContainerStyle}
/>
<View style={styles.btnWrap}>
@ -66,7 +66,7 @@ export const UsersSelectListSmart: FC<IProps> = props => { @@ -66,7 +66,7 @@ export const UsersSelectListSmart: FC<IProps> = props => {
onPress={() => props.onSubmit()}
/>
</View>
</>
</View>
)
}
@ -77,10 +77,6 @@ const createStyles = (theme: PartialTheme) => @@ -77,10 +77,6 @@ const createStyles = (theme: PartialTheme) =>
},
contentContainerStyle: {
paddingHorizontal: $size(18, 16),
minHeight: '65%',
},
smallContainer: {
maxHeight: '52%',
},
btnWrap: {
borderTopColor: theme.$border,

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

@ -14,6 +14,7 @@ import { Reset } from '@/store/shared' @@ -14,6 +14,7 @@ import { Reset } from '@/store/shared'
import { ResetTokens } from '@/store/auth'
import { taxonomiesService } from './taxonomies.service'
import { permissionsService } from './permissions.service'
import { factoriesService } from './factories.service'
let phoneNumber: string
@ -64,6 +65,7 @@ const loadDataAfterAuth = async () => { @@ -64,6 +65,7 @@ const loadDataAfterAuth = async () => {
permissionsService.loadPermissionsForUsers(),
taxonomiesService.fetchGroups(),
taxonomiesService.fetchReasons(),
factoriesService.loadFactories(),
])
}

4
src/services/domain/contacts.service.ts

@ -7,14 +7,12 @@ import { @@ -7,14 +7,12 @@ import {
IFetchContactDetailRes,
IFetchContactsRes,
} from '@/api/contacts/responses.interfaces'
import { IRequestConfig } from '@/api/http.service'
import { ApiResponse } from '@/api/http.types'
const fetch = async (
params: IFetchContactsPayload,
): ApiResponse<IFetchContactsRes> => {
try {
console.log(params)
const contacts = await fetchContactsReq(params)
return contacts
@ -24,7 +22,7 @@ const fetch = async ( @@ -24,7 +22,7 @@ const fetch = async (
}
const fetchDetail = async (params: {
contactId: number
contactId: string
}): ApiResponse<IFetchContactDetailRes> => {
try {
const contactDetail = await fetchContactDetailReq(params)

14
src/services/domain/factories.service.ts

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
import { fetchMyFactoriesReq } from '@/api/factories/requests'
import { SaveFactories } from '@/store/account'
import { simpleDispatch } from '@/store/store-helpers'
const loadFactories = async () => {
try {
const { data } = await fetchMyFactoriesReq()
if (data) simpleDispatch(new SaveFactories({ factories: data }))
} catch (e) {}
}
export const factoriesService = {
loadFactories,
}

6
src/shared/components/buttons/button.component.tsx

@ -75,7 +75,7 @@ export const Button: FC<ButtonProps> = ({ type = 'primary', ...props }) => { @@ -75,7 +75,7 @@ export const Button: FC<ButtonProps> = ({ type = 'primary', ...props }) => {
const createStyles = (theme: PartialTheme) =>
StyleSheet.create({
basicBtn: {
height: $size(46, 40),
height: $size(56, 50),
borderRadius: $size(10, 6),
width: '100%',
flexDirection: 'row',
@ -94,7 +94,7 @@ const createStyles = (theme: PartialTheme) => @@ -94,7 +94,7 @@ const createStyles = (theme: PartialTheme) =>
},
primaryTxt: {
color: theme.primaryBtn.$text,
fontWeight: '400'
fontWeight: '400',
},
borderWrap: {
@ -104,6 +104,6 @@ const createStyles = (theme: PartialTheme) => @@ -104,6 +104,6 @@ const createStyles = (theme: PartialTheme) =>
},
borderTxt: {
color: theme.borderBtn.$text,
fontWeight: '500'
fontWeight: '500',
},
})

13
src/shared/components/elements/avatar.component.tsx

@ -2,7 +2,14 @@ import { Txt } from '@/shared' @@ -2,7 +2,14 @@ import { Txt } from '@/shared'
import { useTheme } from '@/shared/hooks/use-theme.hook'
import { PartialTheme } from '@/shared/themes/interfaces'
import React, { FC } from 'react'
import { StyleSheet, TextStyle, View, ViewStyle, Image } from 'react-native'
import {
StyleSheet,
TextStyle,
View,
ViewStyle,
Image,
Platform,
} from 'react-native'
interface IProps {
imageUrl: string
@ -33,7 +40,7 @@ export const Avatar: FC<IProps> = ({ @@ -33,7 +40,7 @@ export const Avatar: FC<IProps> = ({
style={{
width: maxWidth,
height: maxHeight,
borderRadius: 100,
borderRadius: Platform.OS === 'ios' ? 1000 : 100,
}}
source={{ uri: imageUrl }}
resizeMode="cover"
@ -54,7 +61,7 @@ const createStyles = (theme: PartialTheme) => @@ -54,7 +61,7 @@ const createStyles = (theme: PartialTheme) =>
borderRadius: 100,
},
noImage: {
color: theme.iconComponent.$primaryDarker,
color: theme.iconComponent.$secondaryColor,
},
image: {
flex: 1,

4
src/shared/components/forms/form-search-with-btn.component.tsx

@ -39,10 +39,10 @@ const createStyles = (theme: PartialTheme) => @@ -39,10 +39,10 @@ const createStyles = (theme: PartialTheme) =>
btnContainer: {
padding: $size(5),
borderRadius: 10,
backgroundColor: theme.primaryBtn.$bg,
backgroundColor: theme.secondaryBtn.$bg,
},
btnText: {
marginHorizontal: $size(20, 18),
color: theme.primaryBtn.$text,
color: theme.secondaryBtn.$text,
},
})

50
src/shared/components/forms/form-text-input-with-icon.component.tsx

@ -1,9 +1,10 @@ @@ -1,9 +1,10 @@
import { $size } from '@/shared/helpers'
import { $size, callPhoneNumber, sendEmail } from '@/shared/helpers'
import { useTheme } from '@/shared/hooks/use-theme.hook'
import { PartialTheme } from '@/shared/themes/interfaces'
import React, { FC } from 'react'
import {
KeyboardTypeOptions,
Pressable,
StyleSheet,
Text,
TextInput,
@ -16,6 +17,7 @@ import { IconComponent, Txt } from '../elements' @@ -16,6 +17,7 @@ import { IconComponent, Txt } from '../elements'
interface IProps {
title: string
value: string
type?: 'default' | 'phone-number' | 'email'
placeholder?: string
iconName: string
editable?: boolean
@ -31,35 +33,49 @@ export const TextInputWithIcon: FC<IProps> = ({ @@ -31,35 +33,49 @@ export const TextInputWithIcon: FC<IProps> = ({
value,
iconName,
editable = true,
type = 'default',
onChange,
style,
keybordType,
inputProps = {},
error,
}) => {
const isDefaultType = type === 'default'
const viewPointerEventType = isDefaultType ? 'auto' : 'none'
const onPressInput = {
['email']: () => sendEmail(value),
['phone-number']: () => callPhoneNumber(value),
}
const { styles, theme, onCls } = useTheme(createStyles)
return (
<View style={[styles.container, style]}>
<Txt style={styles.title}>{title}</Txt>
<View style={onCls(Boolean(error), 'inputWrap')}>
<TextInput
editable={editable}
style={styles.input}
value={value}
onChangeText={onChange}
keyboardType={keybordType}
{...inputProps}
/>
<Pressable disabled={isDefaultType} onPress={onPressInput[type]}>
<View
pointerEvents={viewPointerEventType}
style={onCls(Boolean(error), 'inputWrap')}>
<TextInput
editable={editable}
style={styles.input}
value={value}
onChangeText={onChange}
keyboardType={keybordType}
{...inputProps}
/>
<IconComponent
name={iconName}
size={$size(20, 18)}
style={styles.icon}
color={theme.iconComponent.$primaryColor}
/>
</View>
</Pressable>
<IconComponent
name={iconName}
size={$size(20, 18)}
style={styles.icon}
color={theme.iconComponent.$primaryColor}
/>
</View>
{error && <Text style={styles.error}>{error}</Text>}
</View>
)

3
src/shared/helpers/index.ts

@ -6,4 +6,5 @@ export * from './name.helpers' @@ -6,4 +6,5 @@ export * from './name.helpers'
export * from './get-error-code.helpers'
export * from './is-soon-birthday.helper'
export * from './title-by-count.helper'
export * from './theme-helpers'
export * from './theme-helpers'
export * from './linking.helper'

5
src/shared/helpers/linking.helper.ts

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
import { Linking } from "react-native";
export const callPhoneNumber = (phoneNumber: string) => Linking.openURL(`tel:${phoneNumber}`)
export const sendEmail = (to: string) => Linking.openURL(`mailto:${to}`)

10
src/shared/interfaces/factories.interfaces.ts

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
export interface IFactory {
id: number
parentId?: number
description?: string
directorId: number
authorId: number
name: string
shortName: string
children?: IFactory[]
}

3
src/shared/interfaces/index.ts

@ -6,4 +6,5 @@ export * from './taxonomy.interfaces' @@ -6,4 +6,5 @@ export * from './taxonomy.interfaces'
export * from './contact.interfaces'
export * from './pagination.interfaces'
export * from './tasks.interfaces'
export * from './comments.interfaces'
export * from './comments.interfaces'
export * from './factories.interfaces'

7
src/shared/themes/interfaces/shared-components.interface.ts

@ -4,6 +4,13 @@ export interface ButtonsColors { @@ -4,6 +4,13 @@ export interface ButtonsColors {
$text: string
$border: string
}
secondaryBtn: {
$bg: string
$text: string
$border: string
}
borderBtn: {
$bg: string
$text: string

8
src/shared/themes/light/shared-components.ts

@ -8,6 +8,12 @@ export const sharedComponentsColors: SharedComponentsColors = { @@ -8,6 +8,12 @@ export const sharedComponentsColors: SharedComponentsColors = {
$border: '#9F2843',
},
secondaryBtn: {
$bg: '#fbe4e7',
$text: '#9F2843',
$border: '#fbe4e7',
},
borderBtn: {
$bg: '#F8F8F8',
$text: '#7F7F7F',
@ -35,7 +41,7 @@ export const sharedComponentsColors: SharedComponentsColors = { @@ -35,7 +41,7 @@ export const sharedComponentsColors: SharedComponentsColors = {
$darkIcon: colors.$textPrimary,
$secondaryColor: '#9E2743',
$iconBg: colors.$primary,
$primaryBg: '#EAEAEA',
$primaryBg: '#fbe4e7',
$selectedIcon: '#DE253B',
},

10
src/store/account/reducer.ts

@ -1,15 +1,17 @@ @@ -1,15 +1,17 @@
import { IUser } from '@/shared'
import { IFactory, IUser } from '@/shared'
import { createReducer } from '@bitalikrty/redux-create-reducer'
import { TAccountActions } from './types'
export interface IAccountState {
account?: IUser
isLoading: boolean
factories: IFactory[]
}
const initialState: IAccountState = {
account: null,
isLoading: false,
factories: [],
}
export const accountReducer = createReducer<IAccountState, TAccountActions>(
@ -29,6 +31,12 @@ export const accountReducer = createReducer<IAccountState, TAccountActions>( @@ -29,6 +31,12 @@ export const accountReducer = createReducer<IAccountState, TAccountActions>(
}
},
SET_FACTORIES: (state, action) => {
return {
...state,
factories: action.payload.factories,
}
},
RESET_ACCOUNT: () => {
return initialState
},

11
src/store/account/selectors.ts

@ -1,7 +1,16 @@ @@ -1,7 +1,16 @@
import { RootState } from '@/store'
import * as _ from 'lodash'
export const selectAccount = (state: RootState) => state.account.account
export const selectRole = (state: RootState) => state.account.account.role
export const selectId = (state: RootState) => state.account.account.id
export const selectId = (state: RootState) => state.account.account.id
export const selectMyFactoryName = (state: RootState) => {
const factories = state.account.factories
if (_.isEmpty(factories)) return ''
const factory = factories[0]
return factory.name
}

14
src/store/account/types.ts

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
import { IUser } from '@/shared'
import { IFactory, IUser } from '@/shared'
import { Action } from 'redux'
export class SaveAccount implements Action {
@ -13,8 +13,18 @@ export class SetLoadingAccount implements Action { @@ -13,8 +13,18 @@ export class SetLoadingAccount implements Action {
constructor(public readonly payload: { isLoading: boolean }) {}
}
export class SaveFactories implements Action {
readonly type = 'SET_FACTORIES'
constructor(public readonly payload: { factories: IFactory[] }) {}
}
export class ResetAccount {
readonly type = 'RESET_ACCOUNT'
}
export type TAccountActions = SaveAccount | SetLoadingAccount | ResetAccount
export type TAccountActions =
| SaveAccount
| SetLoadingAccount
| SaveFactories
| ResetAccount

46
yarn.lock

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
"resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz"
"version" "7.15.0"
"@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.9", "@babel/core@^7.7.5":
"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.9", "@babel/core@^7.4.0-0", "@babel/core@^7.7.5":
"integrity" "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw=="
"resolved" "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz"
"version" "7.15.0"
@ -1190,7 +1190,7 @@ @@ -1190,7 +1190,7 @@
"@react-navigation/elements" "^1.1.0"
"warn-once" "^0.1.0"
"@react-navigation/native@^6.0.2":
"@react-navigation/native@^6.0.0", "@react-navigation/native@^6.0.2":
"integrity" "sha512-HDqEwgvQ4Cu16vz8jQ55lfyNK9CGbECI1wM9cPOcUa+gkOQEDZ/95VFfFjGGflXZs3ybPvGXlMC4ZAyh1CcO6w=="
"resolved" "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.2.tgz"
"version" "6.0.2"
@ -1433,7 +1433,7 @@ @@ -1433,7 +1433,7 @@
"eslint-scope" "^5.0.0"
"eslint-utils" "^2.0.0"
"@typescript-eslint/parser@^3.1.0":
"@typescript-eslint/parser@^3.0.0", "@typescript-eslint/parser@^3.1.0":
"integrity" "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw=="
"resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz"
"version" "3.10.1"
@ -1525,7 +1525,7 @@ @@ -1525,7 +1525,7 @@
"resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz"
"version" "7.2.0"
"acorn@^7.1.1", "acorn@^7.4.0":
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.1.1", "acorn@^7.4.0":
"integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
"resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
"version" "7.4.1"
@ -3243,7 +3243,7 @@ @@ -3243,7 +3243,7 @@
"resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
"version" "2.1.0"
"eslint@7.14.0":
"eslint@*", "eslint@^3 || ^4 || ^5 || ^6 || ^7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^3.17.0 || ^4 || ^5 || ^6 || ^7", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@>= 4.12.1", "eslint@>= 5.0.0", "eslint@>=2.0.0", "eslint@>=3.14.1", "eslint@>=4.19.1", "eslint@>=5", "eslint@>=6", "eslint@7.14.0":
"integrity" "sha512-5YubdnPXrlrYAFCKybPuHIAH++PINe1pmKNc5wQRB9HSbqIK1ywAnntE3Wwua4giKu0bjligf1gLF6qxMGOYRA=="
"resolved" "https://registry.npmjs.org/eslint/-/eslint-7.14.0.tgz"
"version" "7.14.0"
@ -4677,7 +4677,7 @@ @@ -4677,7 +4677,7 @@
"jest-regex-util" "^26.0.0"
"jest-snapshot" "^26.6.2"
"jest-resolve@^26.6.2":
"jest-resolve@*", "jest-resolve@^26.6.2":
"integrity" "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ=="
"resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz"
"version" "26.6.2"
@ -6294,7 +6294,7 @@ @@ -6294,7 +6294,7 @@
dependencies:
"fast-diff" "^1.1.2"
"prettier@^2.0.2":
"prettier@^2.0.2", "prettier@>= 1.13.0":
"integrity" "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ=="
"resolved" "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz"
"version" "2.3.2"
@ -6521,7 +6521,7 @@ @@ -6521,7 +6521,7 @@
"resolved" "https://registry.npmjs.org/react-native-orientation-locker/-/react-native-orientation-locker-1.3.1.tgz"
"version" "1.3.1"
"react-native-pager-view@^5.4.4":
"react-native-pager-view@*", "react-native-pager-view@^5.4.4":
"integrity" "sha512-5zyol+FZ9X4N4OEz92IyaFFROR3KtgAgTmgqlUvG59Eigf+f6aWs5fvcbWwzuz/AlLZbrxIDrnLmSpMUOK57ww=="
"resolved" "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-5.4.4.tgz"
"version" "5.4.4"
@ -6536,12 +6536,12 @@ @@ -6536,12 +6536,12 @@
"resolved" "https://registry.npmjs.org/react-native-raw-bottom-sheet/-/react-native-raw-bottom-sheet-2.2.0.tgz"
"version" "2.2.0"
"react-native-safe-area-context@^3.3.0":
"react-native-safe-area-context@^3.3.0", "react-native-safe-area-context@>= 3.0.0":
"integrity" "sha512-IrCNx56LO9RJ75yCf2CSSO1ceLj3mvxTAF+HWnehaeRIfF4pIcIn3WEUlXulFiha641OKS5X0+1XZCbbQ7pITA=="
"resolved" "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.3.0.tgz"
"version" "3.3.0"
"react-native-screens@^3.6.0":
"react-native-screens@^3.6.0", "react-native-screens@>= 3.0.0":
"integrity" "sha512-emQmSu+B6cOIjJH2OIgpuxd9zCD6xz7/oo5GCetyjsM5qR3sMnVgOxqtK99xPu9XJH/8k7MplXbtJgtk/PHXwA=="
"resolved" "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.6.0.tgz"
"version" "3.6.0"
@ -6581,7 +6581,7 @@ @@ -6581,7 +6581,7 @@
"sharp" ">=0.23.0"
"svg2vectordrawable" "2.6.26"
"react-native-svg@9.13":
"react-native-svg@*", "react-native-svg@9.13":
"integrity" "sha512-vjjuJhEhQCwWjqsgWyGy6/C/LIBM2REDxB40FU1PMhi8T3zQUwUHnA6M15pJKlQG8vaZyA+QnLyIVhjtujRgig=="
"resolved" "https://registry.npmjs.org/react-native-svg/-/react-native-svg-9.13.6.tgz"
"version" "9.13.6"
@ -6608,7 +6608,11 @@ @@ -6608,7 +6608,11 @@
"prop-types" "^15.7.2"
"yargs" "^16.1.1"
<<<<<<< HEAD
"react-native@*", "react-native@^0.0.0-0 || ^0.60.6 || ^0.61.5 || ^0.62.2 || ^0.63.2 || ^0.64.0 || ^0.65.0 || 1000.0.0", "react-native@^0.62.0", "react-native@>=0.40.0", "react-native@>=0.42.0", "react-native@>=0.48.4", "react-native@>=0.50.0", "react-native@>=0.57", "react-native@>=0.57.0", "react-native@>=0.59", "react-native@>=0.59.0-rc.0 <1.0.x", "react-native@>=0.61.5", "react-native@>=0.63.3", "react-native@>=0.64.0-rc.0 || 0.0.0-*", "react-native@0.63.2", "react-native@0.64.2":
=======
"react-native@*", "react-native@^0.0.0-0 || ^0.60.6 || ^0.61.5 || ^0.62.2 || ^0.63.2 || ^0.64.0 || ^0.65.0 || 1000.0.0", "react-native@^0.62.0", "react-native@>=0.40.0", "react-native@>=0.42.0", "react-native@>=0.48.4", "react-native@>=0.50.0", "react-native@>=0.57", "react-native@>=0.57.0", "react-native@>=0.59", "react-native@>=0.61.5", "react-native@>=0.63.3", "react-native@>=0.64.0-rc.0 || 0.0.0-*", "react-native@0.63.2", "react-native@0.64.2":
>>>>>>> 180634a49afd70734cd081cadf40bb94e4110d84
"integrity" "sha512-Ty/fFHld9DcYsFZujXYdeVjEhvSeQcwuTGXezyoOkxfiGEGrpL/uwUZvMzwShnU4zbbTKDu2PAm/uwuOittRGA=="
"resolved" "https://registry.npmjs.org/react-native/-/react-native-0.64.2.tgz"
"version" "0.64.2"
@ -6681,23 +6685,23 @@ @@ -6681,23 +6685,23 @@
"react-shallow-renderer" "^16.13.1"
"scheduler" "^0.20.1"
"react@^17.0.2":
"integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="
"resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
"version" "17.0.2"
"react@*", "react@^15.2.1 || 16.0.0-alpha.6 || 16.0.0-alpha.12 || 16.0.0-beta.5 || ^16.0.0", "react@^16.0.0 || ^17.0.0", "react@^16.8", "react@^16.8.0 || ^17.0.0", "react@^16.8.1", "react@^16.8.3 || ^17", "react@>=16.13.1", "react@>=16.3.0", "react@>=16.9.0", "react@16 || 17", "react@16.13.1", "react@17.0.1":
"integrity" "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w=="
"resolved" "https://registry.npmjs.org/react/-/react-17.0.1.tgz"
"version" "17.0.1"
dependencies:
"loose-envify" "^1.1.0"
"object-assign" "^4.1.1"
"react@17.0.1":
"integrity" "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w=="
"resolved" "https://registry.npmjs.org/react/-/react-17.0.1.tgz"
"version" "17.0.1"
"react@^17.0.2":
"integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="
"resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
"version" "17.0.2"
dependencies:
"loose-envify" "^1.1.0"
"object-assign" "^4.1.1"
"reactotron-core-client@2.8.10":
"reactotron-core-client@^2.5.0", "reactotron-core-client@2.8.10":
"integrity" "sha512-SYRO4OCutJzfWMnaULUGVyETZnMDCU5ECNflXyM3Z5Gnfxp/wV6d7jYonhfxHdpU/aGb4Eg15C22myOCXSu6HQ=="
"resolved" "https://registry.npmjs.org/reactotron-core-client/-/reactotron-core-client-2.8.10.tgz"
"version" "2.8.10"
@ -6786,7 +6790,7 @@ @@ -6786,7 +6790,7 @@
dependencies:
"resolve" "^1.1.6"
"redux@^4.0.0", "redux@^4.1.1":
"redux@*", "redux@^4.0.0", "redux@^4.0.1", "redux@^4.1.1":
"integrity" "sha512-hZQZdDEM25UY2P493kPYuKqviVwZ58lEmGQNeQ+gXa+U0gYPUBf7NKYazbe3m+bs/DzM/ahN12DbF+NG8i0CWw=="
"resolved" "https://registry.npmjs.org/redux/-/redux-4.1.1.tgz"
"version" "4.1.1"

Loading…
Cancel
Save