├── .circleci
└── config.yml
├── .codacy.yml
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .gitignore
├── .travis.yml
├── .watchmanconfig
├── CHANGELOG.md
├── Dockerfile
├── Jenkinsfile.old
├── LICENSE
├── README.md
├── android
├── .settings
│ └── org.eclipse.buildship.core.prefs
├── Gemfile
├── Gemfile.lock
├── app
│ ├── .classpath
│ ├── .project
│ ├── .settings
│ │ └── org.eclipse.buildship.core.prefs
│ ├── BUCK
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ ├── debug
│ │ └── res
│ │ │ └── values
│ │ │ └── strings.xml
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ ├── appcenter-config.json
│ │ └── fonts
│ │ │ ├── Entypo.ttf
│ │ │ ├── EvilIcons.ttf
│ │ │ ├── Feather.ttf
│ │ │ ├── FontAwesome.ttf
│ │ │ ├── FontAwesome5_Brands.ttf
│ │ │ ├── FontAwesome5_Regular.ttf
│ │ │ ├── FontAwesome5_Solid.ttf
│ │ │ ├── Foundation.ttf
│ │ │ ├── Ionicons.ttf
│ │ │ ├── MaterialCommunityIcons.ttf
│ │ │ ├── MaterialIcons.ttf
│ │ │ ├── Octicons.ttf
│ │ │ ├── SimpleLineIcons.ttf
│ │ │ ├── Zocial.ttf
│ │ │ └── fontello.ttf
│ │ ├── java
│ │ └── com
│ │ │ └── monicahq
│ │ │ └── app
│ │ │ ├── MainActivity.java
│ │ │ └── MainApplication.java
│ │ └── res
│ │ ├── drawable-hdpi
│ │ └── launch_screen.png
│ │ ├── drawable-mdpi
│ │ └── launch_screen.png
│ │ ├── drawable-xhdpi
│ │ └── launch_screen.png
│ │ ├── drawable-xxhdpi
│ │ └── launch_screen.png
│ │ ├── drawable-xxxhdpi
│ │ └── launch_screen.png
│ │ ├── layout
│ │ └── launch_screen.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-ldpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── build.gradle
├── fastlane
│ ├── Appfile
│ ├── Fastfile
│ ├── Pluginfile
│ └── README.md
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── keystores
│ ├── BUCK
│ └── debug.keystore.properties
└── settings.gradle
├── app.json
├── babel.config.js
├── codecov.yml
├── commitlint.config.js
├── docs
├── change-splash-screens.md
└── running-the-app.md
├── e2e
├── config.json
├── i18n
│ └── index.ts
├── init.js
├── services
│ ├── form.ts
│ └── login.ts
└── tests
│ └── login.spec.ts
├── index.js
├── ios
├── Gemfile
├── Gemfile.lock
├── Monica-tvOS
│ └── Info.plist
├── Monica-tvOSTests
│ └── Info.plist
├── Monica.xcodeproj
│ ├── project.pbxproj
│ └── xcshareddata
│ │ └── xcschemes
│ │ ├── Monica-tvOS.xcscheme
│ │ └── Monica.xcscheme
├── Monica.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Monica
│ ├── AppCenter-Config.plist
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── Images.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon-20x20@2x.png
│ │ │ ├── Icon-20x20@3x.png
│ │ │ ├── Icon-29x29@1x.png
│ │ │ ├── Icon-29x29@2x.png
│ │ │ ├── Icon-29x29@3x.png
│ │ │ ├── Icon-40x40@2x.png
│ │ │ ├── Icon-40x40@3x.png
│ │ │ ├── Icon-60x60@2x.png
│ │ │ ├── Icon-60x60@3x.png
│ │ │ └── Icon-marketing-1024x1024.png
│ │ ├── Contents.json
│ │ └── LaunchImage.launchimage
│ │ │ ├── Contents.json
│ │ │ ├── iPhone Landscape iOS8 – Retina HD 5.5.png
│ │ │ ├── iPhone Portrait iOS 5,6 1x.png
│ │ │ ├── iPhone Portrait iOS5,6 – 2x.png
│ │ │ ├── iPhone Portrait iOS5,6 – Retina 4.png
│ │ │ ├── iPhone Portrait iOS7+ – 2x.png
│ │ │ ├── iPhone Portrait iOS7,8 – Retina 4.png
│ │ │ ├── iPhone Portrait iOS8 – Retina HD 4.7.png
│ │ │ ├── iPhone Portrait iOS8 – Retina HD 5.5.png
│ │ │ ├── iPhone X Landscape - iOS 11+.png
│ │ │ └── iPhone X Portrait - iOS 11+.png
│ ├── Info.plist
│ ├── Monica.entitlements
│ └── main.m
├── MonicaTests
│ ├── Info.plist
│ └── MonicaTests.m
├── Podfile
├── Podfile.lock
├── Pods
│ ├── AppCenter
│ │ └── AppCenter-SDK-Apple
│ │ │ └── iOS
│ │ │ ├── AppCenter.framework
│ │ │ ├── AppCenter
│ │ │ ├── Headers
│ │ │ │ ├── AppCenter.h
│ │ │ │ ├── MSAbstractLog.h
│ │ │ │ ├── MSAppCenter.h
│ │ │ │ ├── MSAppCenterErrors.h
│ │ │ │ ├── MSChannelDelegate.h
│ │ │ │ ├── MSChannelGroupProtocol.h
│ │ │ │ ├── MSChannelProtocol.h
│ │ │ │ ├── MSConstants.h
│ │ │ │ ├── MSCustomProperties.h
│ │ │ │ ├── MSDevice.h
│ │ │ │ ├── MSEnable.h
│ │ │ │ ├── MSLog.h
│ │ │ │ ├── MSLogWithProperties.h
│ │ │ │ ├── MSLogger.h
│ │ │ │ ├── MSService.h
│ │ │ │ ├── MSServiceAbstract.h
│ │ │ │ ├── MSWrapperLogger.h
│ │ │ │ └── MSWrapperSdk.h
│ │ │ └── Modules
│ │ │ │ └── module.modulemap
│ │ │ ├── AppCenterAnalytics.framework
│ │ │ ├── AppCenterAnalytics
│ │ │ ├── Headers
│ │ │ │ ├── AppCenterAnalytics.h
│ │ │ │ ├── MSAbstractLog.h
│ │ │ │ ├── MSAnalytics.h
│ │ │ │ ├── MSAnalyticsAuthenticationProvider.h
│ │ │ │ ├── MSAnalyticsAuthenticationProviderDelegate.h
│ │ │ │ ├── MSAnalyticsTransmissionTarget.h
│ │ │ │ ├── MSEventLog.h
│ │ │ │ ├── MSLogWithNameAndProperties.h
│ │ │ │ ├── MSLogWithProperties.h
│ │ │ │ ├── MSPropertyConfigurator.h
│ │ │ │ ├── MSService.h
│ │ │ │ └── MSServiceAbstract.h
│ │ │ └── Modules
│ │ │ │ └── module.modulemap
│ │ │ ├── AppCenterCrashes.framework
│ │ │ ├── AppCenterCrashes
│ │ │ ├── Headers
│ │ │ │ ├── AppCenterCrashes.h
│ │ │ │ ├── MSAbstractLog.h
│ │ │ │ ├── MSCrashHandlerSetupDelegate.h
│ │ │ │ ├── MSCrashes.h
│ │ │ │ ├── MSCrashesDelegate.h
│ │ │ │ ├── MSErrorAttachmentLog+Utility.h
│ │ │ │ ├── MSErrorAttachmentLog.h
│ │ │ │ ├── MSErrorReport.h
│ │ │ │ ├── MSService.h
│ │ │ │ ├── MSServiceAbstract.h
│ │ │ │ └── MSWrapperCrashesHelper.h
│ │ │ └── Modules
│ │ │ │ └── module.modulemap
│ │ │ └── LICENSE
│ ├── AppCenterReactNativeShared
│ │ └── AppCenterReactNativeShared
│ │ │ ├── AppCenterReactNativeShared.framework
│ │ │ ├── AppCenterReactNativeShared
│ │ │ ├── Headers
│ │ │ │ └── AppCenterReactNativeShared.h
│ │ │ └── Modules
│ │ │ │ └── module.modulemap
│ │ │ └── LICENSE.md
│ ├── Headers
│ │ └── Public
│ │ │ ├── AppCenter
│ │ │ ├── AppCenter
│ │ │ │ ├── AppCenter.h
│ │ │ │ ├── MSAbstractLog.h
│ │ │ │ ├── MSAppCenter.h
│ │ │ │ ├── MSAppCenterErrors.h
│ │ │ │ ├── MSChannelDelegate.h
│ │ │ │ ├── MSChannelGroupProtocol.h
│ │ │ │ ├── MSChannelProtocol.h
│ │ │ │ ├── MSConstants.h
│ │ │ │ ├── MSCustomProperties.h
│ │ │ │ ├── MSDevice.h
│ │ │ │ ├── MSEnable.h
│ │ │ │ ├── MSLog.h
│ │ │ │ ├── MSLogWithProperties.h
│ │ │ │ ├── MSLogger.h
│ │ │ │ ├── MSService.h
│ │ │ │ ├── MSServiceAbstract.h
│ │ │ │ ├── MSWrapperLogger.h
│ │ │ │ └── MSWrapperSdk.h
│ │ │ ├── AppCenterAnalytics
│ │ │ │ ├── AppCenterAnalytics.h
│ │ │ │ ├── MSAbstractLog.h
│ │ │ │ ├── MSAnalytics.h
│ │ │ │ ├── MSAnalyticsAuthenticationProvider.h
│ │ │ │ ├── MSAnalyticsAuthenticationProviderDelegate.h
│ │ │ │ ├── MSAnalyticsTransmissionTarget.h
│ │ │ │ ├── MSEventLog.h
│ │ │ │ ├── MSLogWithNameAndProperties.h
│ │ │ │ ├── MSLogWithProperties.h
│ │ │ │ ├── MSPropertyConfigurator.h
│ │ │ │ ├── MSService.h
│ │ │ │ └── MSServiceAbstract.h
│ │ │ └── AppCenterCrashes
│ │ │ │ ├── AppCenterCrashes.h
│ │ │ │ ├── MSAbstractLog.h
│ │ │ │ ├── MSCrashHandlerSetupDelegate.h
│ │ │ │ ├── MSCrashes.h
│ │ │ │ ├── MSCrashesDelegate.h
│ │ │ │ ├── MSErrorAttachmentLog+Utility.h
│ │ │ │ ├── MSErrorAttachmentLog.h
│ │ │ │ ├── MSErrorReport.h
│ │ │ │ ├── MSService.h
│ │ │ │ ├── MSServiceAbstract.h
│ │ │ │ └── MSWrapperCrashesHelper.h
│ │ │ └── AppCenterReactNativeShared
│ │ │ └── AppCenterReactNativeShared
│ │ │ └── AppCenterReactNativeShared.h
│ ├── Manifest.lock
│ ├── Pods.xcodeproj
│ │ └── project.pbxproj
│ └── Target Support Files
│ │ ├── Pods-Monica-tvOS
│ │ ├── Pods-Monica-tvOS-acknowledgements.markdown
│ │ ├── Pods-Monica-tvOS-acknowledgements.plist
│ │ ├── Pods-Monica-tvOS-dummy.m
│ │ ├── Pods-Monica-tvOS-frameworks.sh
│ │ ├── Pods-Monica-tvOS-resources.sh
│ │ ├── Pods-Monica-tvOS.debug.xcconfig
│ │ └── Pods-Monica-tvOS.release.xcconfig
│ │ ├── Pods-Monica-tvOSTests
│ │ ├── Pods-Monica-tvOSTests-acknowledgements.markdown
│ │ ├── Pods-Monica-tvOSTests-acknowledgements.plist
│ │ ├── Pods-Monica-tvOSTests-dummy.m
│ │ ├── Pods-Monica-tvOSTests-frameworks.sh
│ │ ├── Pods-Monica-tvOSTests-resources.sh
│ │ ├── Pods-Monica-tvOSTests.debug.xcconfig
│ │ └── Pods-Monica-tvOSTests.release.xcconfig
│ │ ├── Pods-Monica
│ │ ├── Pods-Monica-acknowledgements.markdown
│ │ ├── Pods-Monica-acknowledgements.plist
│ │ ├── Pods-Monica-dummy.m
│ │ ├── Pods-Monica-frameworks.sh
│ │ ├── Pods-Monica-resources.sh
│ │ ├── Pods-Monica.debug.xcconfig
│ │ └── Pods-Monica.release.xcconfig
│ │ └── Pods-MonicaTests
│ │ ├── Pods-MonicaTests-acknowledgements.markdown
│ │ ├── Pods-MonicaTests-acknowledgements.plist
│ │ ├── Pods-MonicaTests-dummy.m
│ │ ├── Pods-MonicaTests-frameworks.sh
│ │ ├── Pods-MonicaTests-resources.sh
│ │ ├── Pods-MonicaTests.debug.xcconfig
│ │ └── Pods-MonicaTests.release.xcconfig
├── devices.txt
└── fastlane
│ ├── Appfile
│ ├── Fastfile
│ └── README.md
├── jest.config.js
├── package.json
├── setupJest.ts
├── src
├── App.spec.tsx
├── App.tsx
├── CodePush.tsx
├── __mock__
│ └── contact.ts
├── api
│ ├── __tests__
│ │ ├── activities.spec.ts
│ │ ├── calls.spec.ts
│ │ ├── contacts.spec.ts
│ │ ├── debts.spec.ts
│ │ ├── gifts.spec.ts
│ │ ├── notes.spec.ts
│ │ ├── reminder.spec.ts
│ │ ├── tasks.spec.ts
│ │ └── user.spec.ts
│ ├── activities.ts
│ ├── calls.ts
│ ├── contacts.ts
│ ├── debts.ts
│ ├── gifts.ts
│ ├── index.ts
│ ├── notes.ts
│ ├── package.json
│ ├── reminders.ts
│ ├── tasks.ts
│ └── user.ts
├── assets
│ ├── icons
│ │ ├── activities.png
│ │ ├── activities@2x.png
│ │ ├── activities@3x.png
│ │ ├── debts.png
│ │ ├── debts@2x.png
│ │ ├── debts@3x.png
│ │ ├── gift.png
│ │ ├── gift@2x.png
│ │ ├── gift@3x.png
│ │ ├── notes.png
│ │ ├── notes@2x.png
│ │ ├── notes@3x.png
│ │ ├── phone.png
│ │ ├── phone@2x.png
│ │ ├── phone@3x.png
│ │ ├── reminders.png
│ │ ├── reminders@2x.png
│ │ ├── reminders@3x.png
│ │ ├── tasks.png
│ │ ├── tasks@2x.png
│ │ └── tasks@3x.png
│ ├── logo.png
│ ├── logo@2x.png
│ ├── logo@3x.png
│ └── package.json
├── components
│ ├── Back
│ │ ├── Back.android.tsx
│ │ ├── Back.ios.tsx
│ │ ├── Back.props.ts
│ │ ├── Back.styles.android.ts
│ │ ├── Back.styles.ios.ts
│ │ ├── __tests__
│ │ │ ├── Back.android.spec.tsx
│ │ │ ├── Back.ios.spec.tsx
│ │ │ ├── __snapshots__
│ │ │ │ ├── Back.android.spec.tsx.snap
│ │ │ │ └── Back.ios.spec.tsx.snap
│ │ │ ├── index.android.spec.ts
│ │ │ └── index.ios.spec.ts
│ │ └── index.ts
│ ├── BottomNav
│ │ ├── BottomNav.styles.ts
│ │ ├── BottomNav.tsx
│ │ ├── __tests__
│ │ │ ├── BottomNav.spec.tsx
│ │ │ └── __snapshots__
│ │ │ │ └── BottomNav.spec.tsx.snap
│ │ └── index.ts
│ ├── Button
│ │ ├── Button.android.tsx
│ │ ├── Button.ios.tsx
│ │ ├── Button.props.ts
│ │ ├── Button.styles.ts
│ │ ├── __tests__
│ │ │ ├── Button.android.spec.tsx
│ │ │ ├── Button.ios.spec.tsx
│ │ │ ├── __snapshots__
│ │ │ │ ├── Button.android.spec.tsx.snap
│ │ │ │ └── Button.ios.spec.tsx.snap
│ │ │ ├── index.android.spec.ts
│ │ │ └── index.ios.spec.ts
│ │ └── index.ts
│ ├── Checkbox
│ │ ├── Checkbox.android.tsx
│ │ ├── Checkbox.ios.tsx
│ │ ├── Checkbox.props.ts
│ │ ├── Checkbox.styles.ts
│ │ ├── __tests__
│ │ │ ├── Checkbox.android.spec.tsx
│ │ │ ├── Checkbox.ios.spec.tsx
│ │ │ ├── __snapshots__
│ │ │ │ ├── Checkbox.android.spec.tsx.snap
│ │ │ │ └── Checkbox.ios.spec.tsx.snap
│ │ │ ├── index.android.spec.ts
│ │ │ └── index.ios.spec.ts
│ │ └── index.ts
│ ├── ContactAvatar
│ │ ├── ContactAvatar.styles.ts
│ │ ├── ContactAvatar.tsx
│ │ ├── __tests__
│ │ │ ├── ContactAvatar.spec.tsx
│ │ │ └── __snapshots__
│ │ │ │ └── ContactAvatar.spec.tsx.snap
│ │ └── index.ts
│ ├── ContactListItem
│ │ ├── ContactListItem.styles.ts
│ │ ├── ContactListItem.tsx
│ │ ├── __tests__
│ │ │ ├── ContactListItem.spec.tsx
│ │ │ └── __snapshots__
│ │ │ │ └── ContactListItem.spec.tsx.snap
│ │ └── index.ts
│ ├── EmptyActivity
│ │ ├── EmptyActivities.styles.ts
│ │ ├── EmptyActivity.tsx
│ │ ├── __tests__
│ │ │ ├── EmptyActivity.spec.tsx
│ │ │ └── __snapshots__
│ │ │ │ └── EmptyActivity.spec.tsx.snap
│ │ └── index.ts
│ ├── FontelloIcon
│ │ ├── FontelloIcon.ts
│ │ ├── config.json
│ │ ├── fontello.ttf
│ │ └── index.ts
│ ├── LastTwoYearsStatistics
│ │ ├── LastTwoYearsStatistics.styles.ts
│ │ ├── LastTwoYearsStatistics.tsx
│ │ ├── __tests__
│ │ │ ├── LastTwoYearsStatistics.spec.tsx
│ │ │ └── __snapshots__
│ │ │ │ └── LastTwoYearsStatistics.spec.tsx.snap
│ │ └── index.ts
│ ├── ListItem
│ │ ├── ListItem.styles.ts
│ │ ├── ListItem.tsx
│ │ ├── __tests__
│ │ │ ├── ListItem.spec.tsx
│ │ │ └── __snapshots__
│ │ │ │ └── ListItem.spec.tsx.snap
│ │ └── index.ts
│ ├── Navbar
│ │ ├── Navbar.android.tsx
│ │ ├── Navbar.ios.tsx
│ │ ├── Navbar.props.ts
│ │ ├── Navbar.styles.ts
│ │ ├── __tests__
│ │ │ ├── Navbar.android.spec.tsx
│ │ │ ├── Navbar.ios.spec.tsx
│ │ │ ├── __snapshots__
│ │ │ │ ├── Navbar.android.spec.tsx.snap
│ │ │ │ └── Navbar.ios.spec.tsx.snap
│ │ │ ├── index.android.spec.ts
│ │ │ └── index.ios.spec.ts
│ │ ├── back
│ │ │ ├── NavbarIOSBack.styles.ts
│ │ │ ├── NavbarIOSBack.tsx
│ │ │ └── __tests__
│ │ │ │ ├── NavbarIOSBack.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ └── NavbarIOSBack.spec.tsx.snap
│ │ └── index.ts
│ ├── Tabbar
│ │ ├── Tabbar.styles.ts
│ │ ├── Tabbar.tsx
│ │ └── __tests__
│ │ │ ├── Tabbar.android.spec.tsx
│ │ │ ├── Tabbar.ios.spec.tsx
│ │ │ └── __snapshots__
│ │ │ ├── Tabbar.android.spec.tsx.snap
│ │ │ └── Tabbar.ios.spec.tsx.snap
│ ├── Touchable
│ │ ├── Touchable.tsx
│ │ ├── __tests__
│ │ │ ├── Touchable.spec.tsx
│ │ │ └── __snapshots__
│ │ │ │ └── Touchable.spec.tsx.snap
│ │ └── index.ts
│ ├── form
│ │ ├── ContactChooser
│ │ │ ├── ContactChooser.styles.ts
│ │ │ ├── ContactChooser.tsx
│ │ │ ├── __tests__
│ │ │ │ ├── ContactChooser.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── ContactChooser.spec.tsx.snap
│ │ │ └── index.ts
│ │ ├── FormListItem
│ │ │ ├── FormListItem.styles.ts
│ │ │ ├── FormListItem.tsx
│ │ │ ├── __tests__
│ │ │ │ ├── FormListItem.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── FormListItem.spec.tsx.snap
│ │ │ └── index.ts
│ │ ├── Switch
│ │ │ ├── Switch.styles.ts
│ │ │ ├── Switch.tsx
│ │ │ ├── __tests__
│ │ │ │ ├── Switch.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── Switch.spec.tsx.snap
│ │ │ └── index.ts
│ │ └── TextInput
│ │ │ ├── TextInput.styles.ts
│ │ │ ├── TextInput.tsx
│ │ │ ├── __tests__
│ │ │ ├── TextInput.spec.tsx
│ │ │ ├── TextInput.styles.android.spec.ts
│ │ │ ├── TextInput.styles.ios.spec.ts
│ │ │ └── __snapshots__
│ │ │ │ └── TextInput.spec.tsx.snap
│ │ │ └── index.ts
│ ├── index.ts
│ └── package.json
├── containers
│ ├── ActionSheet
│ │ ├── ActionSheet.tsx
│ │ ├── ActionSheetContainer.ts
│ │ └── index.ts
│ ├── CodePush
│ │ ├── CodePush.tsx
│ │ └── CodePushContainer.tsx
│ ├── Contacts
│ │ ├── Contacts.styles.ts
│ │ ├── Contacts.tsx
│ │ ├── ContactsContainer.ts
│ │ ├── Navbar
│ │ │ ├── Navbar.android.tsx
│ │ │ ├── Navbar.ios.tsx
│ │ │ ├── Navbar.props.ts
│ │ │ ├── Navbar.styles.ts
│ │ │ ├── Navbar.ts
│ │ │ └── __tests__
│ │ │ │ ├── Navbar.ios.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ └── Navbar.ios.spec.tsx.snap
│ │ ├── __tests__
│ │ │ ├── Contacts.spec.tsx
│ │ │ └── __snapshots__
│ │ │ │ └── Contacts.spec.tsx.snap
│ │ └── assets
│ │ │ ├── no-contacts.png
│ │ │ ├── no-contacts@2x.png
│ │ │ ├── no-contacts@3x.png
│ │ │ ├── no-results.png
│ │ │ ├── no-results@2x.png
│ │ │ └── no-results@3x.png
│ └── InitialState
│ │ ├── InitialState.ts
│ │ └── InitialStateContainer.ts
├── i18n
│ ├── index.ts
│ ├── locales
│ │ ├── en
│ │ │ ├── activities.ts
│ │ │ ├── auth.ts
│ │ │ ├── calls.ts
│ │ │ ├── common.ts
│ │ │ ├── contacts.ts
│ │ │ ├── debts.ts
│ │ │ ├── gifts.ts
│ │ │ ├── index.ts
│ │ │ ├── notes.ts
│ │ │ ├── reminders.ts
│ │ │ ├── settings.ts
│ │ │ └── tasks.ts
│ │ └── fr
│ │ │ ├── activities.ts
│ │ │ ├── auth.ts
│ │ │ ├── calls.ts
│ │ │ ├── common.ts
│ │ │ ├── contacts.ts
│ │ │ ├── debts.ts
│ │ │ ├── gifts.ts
│ │ │ ├── index.ts
│ │ │ ├── notes.ts
│ │ │ ├── reminders.ts
│ │ │ ├── settings.ts
│ │ │ └── tasks.ts
│ └── package.json
├── models
│ ├── actions.ts
│ ├── activity.ts
│ ├── call.ts
│ ├── contact.ts
│ ├── debt.ts
│ ├── gift.ts
│ ├── index.ts
│ ├── note.ts
│ ├── operations.ts
│ ├── package.json
│ ├── reminder.ts
│ └── task.ts
├── navigator
│ ├── AppNavigator.tsx
│ ├── AppStack.ts
│ ├── AuthStack.ts
│ ├── NavigationService.ts
│ ├── TabsNavigator.ts
│ └── package.json
├── package.json
├── pages
│ ├── AddContactScreen.tsx
│ ├── Auth
│ │ ├── Launch
│ │ │ ├── Launch.tsx
│ │ │ ├── LaunchScreen.ts
│ │ │ ├── __tests__
│ │ │ │ ├── Launch.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── Launch.spec.tsx.snap
│ │ │ └── assets
│ │ │ │ ├── launch.png
│ │ │ │ ├── launch@2x.png
│ │ │ │ └── launch@3x.png
│ │ └── Login
│ │ │ ├── Login.tsx
│ │ │ ├── LoginScreen.ts
│ │ │ ├── __tests__
│ │ │ ├── Login.spec.tsx
│ │ │ ├── LoginScreen.spec.ts
│ │ │ └── __snapshots__
│ │ │ │ └── Login.spec.tsx.snap
│ │ │ ├── assets
│ │ │ ├── login.png
│ │ │ ├── login@2x.png
│ │ │ └── login@3x.png
│ │ │ └── form
│ │ │ ├── LoginForm.model.ts
│ │ │ ├── LoginForm.tsx
│ │ │ ├── LoginFormContainer.ts
│ │ │ └── __tests__
│ │ │ └── LoginFormContainer.spec.ts
│ ├── ChooseContacts
│ │ ├── ChooseContacts.tsx
│ │ └── ChooseContactsScreen.ts
│ ├── Contact
│ │ ├── Contact.styles.ts
│ │ ├── Contact.tsx
│ │ ├── ContactActivityRow
│ │ │ ├── ContactActivityRow.styles.ts
│ │ │ ├── ContactActivityRow.tsx
│ │ │ └── __tests__
│ │ │ │ ├── ContactActivityRow.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ └── ContactActivityRow.spec.tsx.snap
│ │ ├── ContactInfos
│ │ │ ├── Contact.styles.tsx
│ │ │ ├── Contact.tsx
│ │ │ ├── ContactInfos.tsx
│ │ │ ├── Meet.styles.tsx
│ │ │ ├── Meet.tsx
│ │ │ ├── Relationships.styles.tsx
│ │ │ ├── Relationships.tsx
│ │ │ ├── Work.styles.tsx
│ │ │ ├── Work.tsx
│ │ │ └── __tests__
│ │ │ │ ├── Contact.spec.tsx
│ │ │ │ ├── ContactInfos.spec.tsx
│ │ │ │ ├── Meet.spec.tsx
│ │ │ │ ├── Relationships.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ ├── Contact.spec.tsx.snap
│ │ │ │ ├── ContactInfos.spec.tsx.snap
│ │ │ │ ├── Meet.spec.tsx.snap
│ │ │ │ └── Relationships.spec.tsx.snap
│ │ ├── ContactScreen.ts
│ │ └── __tests__
│ │ │ └── Contact.spec.tsx
│ ├── Contacts
│ │ ├── Contacts.tsx
│ │ └── ContactsScreen.ts
│ ├── DashboardScreen.tsx
│ ├── Entities
│ │ ├── Activities
│ │ │ └── List
│ │ │ │ ├── ActivitiesList.styles.ts
│ │ │ │ ├── ActivitiesList.tsx
│ │ │ │ ├── ActivitiesListScreen.ts
│ │ │ │ ├── __tests__
│ │ │ │ ├── ActivitiesList.spec.tsx
│ │ │ │ ├── ActivitiesListScreen.spec.ts
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── ActivitiesList.spec.tsx.snap
│ │ │ │ └── assets
│ │ │ │ ├── empty-activities.png
│ │ │ │ ├── empty-activities@2x.png
│ │ │ │ └── empty-activities@3x.png
│ │ ├── Calls
│ │ │ └── List
│ │ │ │ ├── CallsList.styles.ts
│ │ │ │ ├── CallsList.tsx
│ │ │ │ ├── CallsListScreen.ts
│ │ │ │ ├── __tests__
│ │ │ │ ├── CallsList.spec.tsx
│ │ │ │ ├── CallsListScreen.spec.ts
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── CallsList.spec.tsx.snap
│ │ │ │ └── assets
│ │ │ │ ├── empty-calls.png
│ │ │ │ ├── empty-calls@2x.png
│ │ │ │ └── empty-calls@3x.png
│ │ ├── Debts
│ │ │ └── List
│ │ │ │ ├── DebtsList.styles.tsx
│ │ │ │ ├── DebtsList.tsx
│ │ │ │ ├── DebtsListScreen.tsx
│ │ │ │ ├── __tests__
│ │ │ │ ├── DebtsList.spec.tsx
│ │ │ │ ├── DebtsListScreen.spec.ts
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── DebtsList.spec.tsx.snap
│ │ │ │ └── assets
│ │ │ │ ├── empty-debts.png
│ │ │ │ ├── empty-debts@2x.png
│ │ │ │ └── empty-debts@3x.png
│ │ ├── Gifts
│ │ │ └── List
│ │ │ │ ├── GiftsList.styles.ts
│ │ │ │ ├── GiftsList.tsx
│ │ │ │ ├── GiftsListScreen.ts
│ │ │ │ ├── __tests__
│ │ │ │ ├── GiftsList.spec.tsx
│ │ │ │ └── GiftsListScreen.spec.ts
│ │ │ │ └── assets
│ │ │ │ ├── empty-gifts.png
│ │ │ │ ├── empty-gifts@2x.png
│ │ │ │ └── empty-gifts@3x.png
│ │ ├── Notes
│ │ │ ├── List
│ │ │ │ ├── NotesList.styles.ts
│ │ │ │ ├── NotesList.tsx
│ │ │ │ ├── NotesListScreen.ts
│ │ │ │ ├── __tests__
│ │ │ │ │ ├── NotesList.spec.tsx
│ │ │ │ │ ├── NotesListScreen.spec.ts
│ │ │ │ │ └── __snapshots__
│ │ │ │ │ │ └── NotesList.spec.tsx.snap
│ │ │ │ └── assets
│ │ │ │ │ ├── empty-notes.png
│ │ │ │ │ ├── empty-notes@2x.png
│ │ │ │ │ └── empty-notes@3x.png
│ │ │ └── Upsert
│ │ │ │ ├── NoteUpsert.tsx
│ │ │ │ ├── NoteUpsertScreen.tsx
│ │ │ │ ├── NotesUpsert.style.ts
│ │ │ │ ├── __tests__
│ │ │ │ ├── NoteUpsert.spec.tsx
│ │ │ │ ├── NoteUpsertScreen.spec.tsx
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── NoteUpsert.spec.tsx.snap
│ │ │ │ └── form
│ │ │ │ ├── NoteForm.model.ts
│ │ │ │ ├── NoteForm.styles.ts
│ │ │ │ ├── NoteForm.tsx
│ │ │ │ └── NoteFormContainer.tsx
│ │ ├── Reminders
│ │ │ └── List
│ │ │ │ ├── RemindersList.styles.ts
│ │ │ │ ├── RemindersList.tsx
│ │ │ │ ├── RemindersListScreen.ts
│ │ │ │ ├── __tests__
│ │ │ │ ├── RemindersList.spec.tsx
│ │ │ │ ├── RemindersListScreen.spec.ts
│ │ │ │ └── __snapshots__
│ │ │ │ │ └── RemindersList.spec.tsx.snap
│ │ │ │ └── assets
│ │ │ │ ├── empty-reminders.png
│ │ │ │ ├── empty-reminders@2x.png
│ │ │ │ └── empty-reminders@3x.png
│ │ └── Tasks
│ │ │ └── List
│ │ │ ├── TasksList.styles.ts
│ │ │ ├── TasksList.tsx
│ │ │ ├── TasksListScreen.ts
│ │ │ ├── __tests__
│ │ │ ├── TasksList.spec.tsx
│ │ │ ├── TasksListScreen.spec.ts
│ │ │ └── __snapshots__
│ │ │ │ └── TasksList.spec.tsx.snap
│ │ │ └── assets
│ │ │ ├── empty-tasks.png
│ │ │ ├── empty-tasks@2x.png
│ │ │ └── empty-tasks@3x.png
│ ├── JournalScreen.tsx
│ └── Settings
│ │ ├── Settings.styles.ts
│ │ ├── Settings.tsx
│ │ ├── SettingsScreen.ts
│ │ └── __tests__
│ │ ├── Settings.spec.tsx
│ │ ├── SettingsScreen.spec.ts
│ │ └── __snapshots__
│ │ └── Settings.spec.tsx.snap
├── redux
│ ├── activities
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ ├── operations.spec.ts
│ │ │ └── reducer.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ ├── beta
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ ├── operations.spec.ts
│ │ │ └── reducers.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ ├── calls
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ ├── operations.spec.ts
│ │ │ └── reducer.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ ├── configureStore.ts
│ ├── contacts
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ └── operations.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ ├── debts
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ ├── operations.spec.ts
│ │ │ └── reducer.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ ├── gifts
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ ├── operations.spec.ts
│ │ │ └── reducer.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ ├── notes
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ ├── operations.spec.ts
│ │ │ └── reducer.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ ├── package.json
│ ├── reminders
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ ├── operations.spec.ts
│ │ │ └── reducer.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ ├── rootReducer.ts
│ ├── tasks
│ │ ├── __tests__
│ │ │ ├── actions.spec.ts
│ │ │ ├── operations.spec.ts
│ │ │ └── reducer.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
│ └── user
│ │ ├── __tests__
│ │ ├── actions.spec.ts
│ │ ├── operations.spec.ts
│ │ └── reducer.spec.ts
│ │ ├── actions.ts
│ │ ├── index.ts
│ │ ├── operations.ts
│ │ ├── reducer.ts
│ │ └── types.ts
├── storage-keys.ts
├── theme
│ ├── appScreen.ts
│ ├── index.ts
│ ├── package.json
│ └── preAuthScreen.ts
└── utils
│ ├── __tests__
│ ├── contacts.spec.ts
│ └── gifts.spec.ts
│ ├── contacts.ts
│ ├── gifts.ts
│ └── package.json
├── tsconfig.json
├── tslint.json
├── wallaby.js
└── yarn.lock
/.codacy.yml:
--------------------------------------------------------------------------------
1 | engines:
2 | rubocop:
3 | enabled: true
4 | duplication:
5 | enabled: true
6 | metrics:
7 | enabled: true
8 | coverage:
9 | enabled: true
10 |
11 | exclude_paths:
12 | - '*.spec.ts'
13 | - '**/__tests__/**'
14 | - 'ios/**/*'
15 | - 'android/**/*'
16 | - 'e2e/**/*'
17 | - 'e2e/*'
18 | - 'jest.config.js'
19 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*]
2 | end_of_line = lf
3 | insert_final_newline = true
4 | indent_style = space
5 | indent_size = 2
6 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pbxproj -text
2 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | # language: objective-c
2 | os: osx
3 | osx_image: xcode9.4
4 |
5 | env:
6 | # - VERSION=iPhone7
7 | - VERSION=iPhoneX
8 | # - VERSION=iPhone5s
9 | - VERSION=iPhoneSE
10 |
11 | cache:
12 | directories:
13 | - node_modules
14 |
15 | install:
16 | - brew tap wix/brew
17 | - brew install applesimutils
18 | - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
19 | - export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
20 | - nvm install stable
21 | - nvm use stable
22 |
23 | # - npm install -g react-native-cli
24 | # - npm install -g detox-cli
25 | - npm install
26 | # - cd ios && pod install && cd ..
27 | # - detox clean-framework-cache && detox build-framework-cache
28 |
29 | script:
30 | - npm run test:e2e:build:ci -- -c ios.sim.release.${VERSION} > /dev/null
31 | - npm run test:e2e:ci -- -c ios.sim.release.${VERSION}
32 |
33 |
--------------------------------------------------------------------------------
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:8.11
2 |
3 | WORKDIR /opt/project
4 |
5 | RUN npm i -g yarn
6 |
7 | # cache deps
8 | COPY .cache/package.json package.json
9 | COPY .cache/yarn.lock yarn.lock
10 | RUN yarn
11 |
12 | COPY package.json package.json
13 | COPY yarn.lock yarn.lock
14 | RUN yarn
15 |
16 | CMD sleep 300
17 |
--------------------------------------------------------------------------------
/Jenkinsfile.old:
--------------------------------------------------------------------------------
1 | def dockerImage
2 |
3 | pipeline {
4 | agent any;
5 | stages {
6 | stage('Build docker image') {
7 | steps {
8 | script {
9 | dockerImage = docker.build("build")
10 | }
11 | }
12 | }
13 | stage('Run Tests') {
14 | parallel {
15 | stage('Test') {
16 | steps {
17 | script {
18 | dockerImage.inside {
19 | sh 'yarn'
20 | sh 'yarn test --runInBand --coverage'
21 | }
22 | }
23 | }
24 | }
25 | stage('Check typescript') {
26 | steps {
27 | script {
28 | dockerImage.inside {
29 | sh 'yarn'
30 | sh 'yarn tsc'
31 | }
32 | }
33 | }
34 | }
35 | }
36 | }
37 | }
38 | post {
39 | always {
40 | cleanWs()
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/android/.settings/org.eclipse.buildship.core.prefs:
--------------------------------------------------------------------------------
1 | #Tue Jan 16 00:29:07 EST 2018
2 | connection.project.dir=
3 |
--------------------------------------------------------------------------------
/android/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 |
5 | plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
6 | eval_gemfile(plugins_path) if File.exist?(plugins_path)
7 |
--------------------------------------------------------------------------------
/android/app/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/android/app/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | app
4 | Project app created by Buildship.
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 | org.eclipse.buildship.core.gradleprojectbuilder
15 |
16 |
17 |
18 |
19 |
20 | org.eclipse.jdt.core.javanature
21 | org.eclipse.buildship.core.gradleprojectnature
22 |
23 |
24 |
--------------------------------------------------------------------------------
/android/app/.settings/org.eclipse.buildship.core.prefs:
--------------------------------------------------------------------------------
1 | #Tue Jan 16 00:29:07 EST 2018
2 | connection.project.dir=..
3 |
--------------------------------------------------------------------------------
/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/android/app/src/debug/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | NEVER_SEND
4 | NEVER_SEND
5 | Monica Dev
6 |
7 |
--------------------------------------------------------------------------------
/android/app/src/main/assets/appcenter-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "app_secret": "5436460a-3b7b-4761-8e4b-77f0499f9067"
3 | }
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Entypo.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/Entypo.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/EvilIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/EvilIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Feather.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/Feather.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/FontAwesome.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Foundation.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/Foundation.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Ionicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/Ionicons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/MaterialIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/MaterialIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Octicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/Octicons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/SimpleLineIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/SimpleLineIcons.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/Zocial.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/Zocial.ttf
--------------------------------------------------------------------------------
/android/app/src/main/assets/fonts/fontello.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/assets/fonts/fontello.ttf
--------------------------------------------------------------------------------
/android/app/src/main/java/com/monicahq/app/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.monicahq.app;
2 |
3 | import com.facebook.react.ReactActivity;
4 | import android.os.Bundle;
5 | import org.devio.rn.splashscreen.SplashScreen;
6 |
7 | public class MainActivity extends ReactActivity {
8 |
9 | @Override
10 | protected void onCreate(Bundle savedInstanceState) {
11 | SplashScreen.show(this);
12 | super.onCreate(savedInstanceState);
13 | }
14 |
15 | /**
16 | * Returns the name of the main component registered from JavaScript.
17 | * This is used to schedule rendering of the component.
18 | */
19 | @Override
20 | protected String getMainComponentName() {
21 | return "Monica";
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/launch_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/drawable-hdpi/launch_screen.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/launch_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/drawable-mdpi/launch_screen.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/launch_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/drawable-xhdpi/launch_screen.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/launch_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/drawable-xxhdpi/launch_screen.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxxhdpi/launch_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/drawable-xxxhdpi/launch_screen.png
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/launch_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/mipmap-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #000000
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | ALWAYS_SEND
4 | ALWAYS_SEND
5 | Monica
6 |
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | json_key_file "mobile-creds/android/play-store.json" # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
2 | package_name "com.monicahq.app" # e.g. com.krausefx.app
3 |
--------------------------------------------------------------------------------
/android/fastlane/Pluginfile:
--------------------------------------------------------------------------------
1 | # Autogenerated by fastlane
2 | #
3 | # Ensure this file is checked in to source control!
4 |
5 | gem 'fastlane-plugin-increment_version_code'
6 | gem 'fastlane-plugin-versioning_android'
7 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
6 |
--------------------------------------------------------------------------------
/android/keystores/BUCK:
--------------------------------------------------------------------------------
1 | keystore(
2 | name = "debug",
3 | properties = "debug.keystore.properties",
4 | store = "debug.keystore",
5 | visibility = [
6 | "PUBLIC",
7 | ],
8 | )
9 |
--------------------------------------------------------------------------------
/android/keystores/debug.keystore.properties:
--------------------------------------------------------------------------------
1 | key.store=debug.keystore
2 | key.alias=androiddebugkey
3 | key.store.password=android
4 | key.alias.password=android
5 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Monica",
3 | "displayName": "Monica"
4 | }
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['module:metro-react-native-babel-preset'],
3 | plugins: ['@babel/plugin-transform-runtime'],
4 | exclude: ['**/*.png', '**/*.gif']
5 | }
--------------------------------------------------------------------------------
/codecov.yml:
--------------------------------------------------------------------------------
1 | codecov:
2 | allow_coverage_offsets: false
3 | ignore:
4 | - "tools"
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {extends: ['@commitlint/config-conventional']};
2 |
--------------------------------------------------------------------------------
/docs/change-splash-screens.md:
--------------------------------------------------------------------------------
1 | ## Instructions to change splash screens
2 |
3 | https://medium.com/handlebar-labs/how-to-add-a-splash-screen-to-a-react-native-app-ios-and-android-30a3cec835ae
4 |
--------------------------------------------------------------------------------
/e2e/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "setupTestFrameworkScriptFile" : "./init.js",
3 | "transform": {
4 | "^.+\\.ts?$": "ts-jest",
5 | "^.+\\.tsx?$": "ts-jest"
6 | },
7 | "testMatch": [
8 | "**/*.spec.{ts,tsx}"
9 | ],
10 | "moduleFileExtensions": [
11 | "ts",
12 | "tsx",
13 | "js",
14 | "jsx",
15 | "json",
16 | "node"
17 | ],
18 | "transformIgnorePatterns": [
19 | "node_modules/(?!(jest-)?react-native|react-navigation|moment)"
20 | ],
21 | "globals": {
22 | "jest": true
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/e2e/i18n/index.ts:
--------------------------------------------------------------------------------
1 | import i18next = require('i18next');
2 | import en from '../../src/i18n/locales/en';
3 |
4 | i18next.init({
5 | lng: 'e ',
6 | fallbackLng: 'en',
7 | resources: {en},
8 | });
9 |
10 | export const I18n = i18next;
11 |
--------------------------------------------------------------------------------
/e2e/init.js:
--------------------------------------------------------------------------------
1 | const detox = require('detox');
2 | const config = require('../package.json').detox;
3 |
4 | // Set the default test timeout of 120s
5 | jest.setTimeout(120000);
6 |
7 | beforeAll(async () => {
8 | await detox.init(config);
9 | });
10 |
11 | afterAll(async () => {
12 | await detox.cleanup();
13 | });
14 |
--------------------------------------------------------------------------------
/e2e/services/login.ts:
--------------------------------------------------------------------------------
1 | export class LoginPage {
2 | public static async get() {
3 | await device.reloadReactNative();
4 | await element(by.id('goToLogin')).tap();
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | import {AppRegistry} from 'react-native';
2 | import {App} from './src/App';
3 |
4 | console.disableYellowBox = true;
5 |
6 | AppRegistry.registerComponent('Monica', () => App);
7 |
--------------------------------------------------------------------------------
/ios/Gemfile:
--------------------------------------------------------------------------------
1 | source "https://rubygems.org"
2 |
3 | gem "fastlane"
4 |
--------------------------------------------------------------------------------
/ios/Monica-tvOSTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 0.7.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 33
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ios/Monica.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Monica.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Monica/AppCenter-Config.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AppSecret
6 | d5ddac46-248a-464a-a5da-cbc45b85f975
7 |
8 |
--------------------------------------------------------------------------------
/ios/Monica/AppDelegate.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015-present, Facebook, Inc.
3 | * All rights reserved.
4 | *
5 | * This source code is licensed under the BSD-style license found in the
6 | * LICENSE file in the root directory of this source tree. An additional grant
7 | * of patent rights can be found in the PATENTS file in the same directory.
8 | */
9 |
10 | #import
11 |
12 | @interface AppDelegate : UIResponder
13 |
14 | @property (nonatomic, strong) UIWindow *window;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-marketing-1024x1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/AppIcon.appiconset/Icon-marketing-1024x1024.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Landscape iOS8 – Retina HD 5.5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Landscape iOS8 – Retina HD 5.5.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS 5,6 1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS 5,6 1x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS5,6 – 2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS5,6 – 2x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS5,6 – Retina 4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS5,6 – Retina 4.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS7+ – 2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS7+ – 2x.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS7,8 – Retina 4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS7,8 – Retina 4.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS8 – Retina HD 4.7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS8 – Retina HD 4.7.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS8 – Retina HD 5.5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone Portrait iOS8 – Retina HD 5.5.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone X Landscape - iOS 11+.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone X Landscape - iOS 11+.png
--------------------------------------------------------------------------------
/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone X Portrait - iOS 11+.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Monica/Images.xcassets/LaunchImage.launchimage/iPhone X Portrait - iOS 11+.png
--------------------------------------------------------------------------------
/ios/Monica/Monica.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | aps-environment
6 | development
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Monica/main.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015-present, Facebook, Inc.
3 | * All rights reserved.
4 | *
5 | * This source code is licensed under the BSD-style license found in the
6 | * LICENSE file in the root directory of this source tree. An additional grant
7 | * of patent rights can be found in the PATENTS file in the same directory.
8 | */
9 |
10 | #import
11 |
12 | #import "AppDelegate.h"
13 |
14 | int main(int argc, char * argv[]) {
15 | @autoreleasepool {
16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/ios/MonicaTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 0.7.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 33
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | # platform :ios, '9.0'
3 |
4 | target 'Monica' do
5 | pod 'AppCenter/Crashes', '~> 1.9.0'
6 | pod 'AppCenter/Analytics', '~> 1.9.0'
7 | pod 'AppCenterReactNativeShared', '~> 1.8.1'
8 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
9 | # use_frameworks!
10 |
11 | # Pods for Monica
12 |
13 |
14 | platform :ios, '9.0'
15 | target 'MonicaTests' do
16 | inherit! :search_paths
17 | # Pods for testing
18 | end
19 |
20 | end
21 |
22 | target 'Monica-tvOS' do
23 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
24 | # use_frameworks!
25 |
26 | # Pods for Monica-tvOS
27 |
28 | target 'Monica-tvOSTests' do
29 | inherit! :search_paths
30 | # Pods for testing
31 | end
32 |
33 | end
34 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - AppCenter/Analytics (1.9.0):
3 | - AppCenter/Core
4 | - AppCenter/Core (1.9.0)
5 | - AppCenter/Crashes (1.9.0):
6 | - AppCenter/Core
7 | - AppCenterReactNativeShared (1.8.1):
8 | - AppCenter/Core (= 1.9.0)
9 |
10 | DEPENDENCIES:
11 | - AppCenter/Analytics (~> 1.9.0)
12 | - AppCenter/Crashes (~> 1.9.0)
13 | - AppCenterReactNativeShared (~> 1.8.1)
14 |
15 | SPEC REPOS:
16 | https://github.com/cocoapods/specs.git:
17 | - AppCenter
18 | - AppCenterReactNativeShared
19 |
20 | SPEC CHECKSUMS:
21 | AppCenter: 3cf7b9387549e9703dab068793e404013e8c0cc1
22 | AppCenterReactNativeShared: 3d804f256b964e040d902d1a215d7866fedae55d
23 |
24 | PODFILE CHECKSUM: a3ee1981cffe88e44a942c6814aa5e3b6c001f4c
25 |
26 | COCOAPODS: 1.5.3
27 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/AppCenter:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/AppCenter
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/AppCenter.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "MSAbstractLog.h"
4 | #import "MSAppCenter.h"
5 | #import "MSAppCenterErrors.h"
6 | #import "MSChannelDelegate.h"
7 | #import "MSChannelGroupProtocol.h"
8 | #import "MSChannelProtocol.h"
9 | #import "MSConstants.h"
10 | #import "MSDevice.h"
11 | #import "MSEnable.h"
12 | #import "MSLog.h"
13 | #import "MSLogWithProperties.h"
14 | #import "MSLogger.h"
15 | #import "MSService.h"
16 | #import "MSServiceAbstract.h"
17 | #import "MSWrapperLogger.h"
18 | #import "MSWrapperSdk.h"
19 |
20 | #if !TARGET_OS_TV
21 | #import "MSCustomProperties.h"
22 | #endif
23 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSAbstractLog.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @interface MSAbstractLog : NSObject
4 |
5 | @end
6 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSAppCenterErrors.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | NS_ASSUME_NONNULL_BEGIN
4 |
5 | #pragma mark - Domain
6 |
7 | extern NSString *const kMSACErrorDomain;
8 |
9 | #pragma mark - Log
10 |
11 | // Error codes
12 | NS_ENUM(NSInteger){kMSACLogInvalidContainerErrorCode = 1};
13 |
14 | // Error descriptions
15 | extern NSString const *kMSACLogInvalidContainerErrorDesc;
16 |
17 | #pragma mark - Connection
18 |
19 | // Error codes
20 | NS_ENUM(NSInteger){kMSACConnectionSuspendedErrorCode = 100,
21 | kMSACConnectionHttpErrorCode = 101};
22 |
23 | // Error descriptions
24 | extern NSString const *kMSACConnectionHttpErrorDesc;
25 | extern NSString const *kMSACConnectionSuspendedErrorDesc;
26 |
27 | // Error user info keys
28 | extern NSString const *kMSACConnectionHttpCodeErrorKey;
29 |
30 | NS_ASSUME_NONNULL_END
31 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSEnable.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | /**
4 | * Protocol to define an instance that can be enabled/disabled.
5 | */
6 | @protocol MSEnable
7 |
8 | @required
9 |
10 | /**
11 | * Enable/disable this instance and delete data on disabled state.
12 | *
13 | * @param isEnabled A boolean value set to YES to enable the instance or NO to
14 | * disable it.
15 | * @param deleteData A boolean value set to YES to delete data or NO to keep
16 | * it.
17 | */
18 | - (void)setEnabled:(BOOL)isEnabled andDeleteDataOnDisabled:(BOOL)deleteData;
19 |
20 | @end
21 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSLogWithProperties.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "MSAbstractLog.h"
4 |
5 | @interface MSLogWithProperties : MSAbstractLog
6 |
7 | /**
8 | * Additional key/value pair parameters. [optional]
9 | */
10 | @property(nonatomic) NSDictionary *properties;
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSService.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | /**
4 | * Protocol declaring service logic.
5 | */
6 | @protocol MSService
7 |
8 | /**
9 | * Enable/disable this service.
10 | *
11 | * @param isEnabled whether this service is enabled or not.
12 | * @see isEnabled
13 | */
14 | + (void)setEnabled:(BOOL)isEnabled;
15 |
16 | /**
17 | * Is this service enabled.
18 | *
19 | * @return a boolean whether this service is enabled or not.
20 | * @see setEnabled:
21 | */
22 | + (BOOL)isEnabled;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSWrapperLogger.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "MSConstants.h"
4 |
5 | /**
6 | * This is a utility for producing App Center style log messages. It is only
7 | * intended for use by App Center services and wrapper SDKs of App Center.
8 | */
9 | @interface MSWrapperLogger : NSObject
10 |
11 | + (void)MSWrapperLog:(MSLogMessageProvider)message
12 | tag:(NSString *)tag
13 | level:(MSLogLevel)level;
14 |
15 | @end
16 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Modules/module.modulemap:
--------------------------------------------------------------------------------
1 | framework module AppCenter {
2 | umbrella header "AppCenter.h"
3 |
4 | export *
5 | module * { export * }
6 |
7 | link framework "Foundation"
8 | link framework "CoreTelephony"
9 | link framework "SystemConfiguration"
10 | link framework "UIKit"
11 | link "sqlite3"
12 | link "z"
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/AppCenterAnalytics:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/AppCenterAnalytics
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/AppCenterAnalytics.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "MSAbstractLog.h"
4 | #import "MSAnalytics.h"
5 | #import "MSAnalyticsTransmissionTarget.h"
6 | #import "MSAnalyticsAuthenticationProvider.h"
7 | #import "MSAnalyticsAuthenticationProviderDelegate.h"
8 | #import "MSEventLog.h"
9 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSAbstractLog.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @interface MSAbstractLog : NSObject
4 |
5 | @end
6 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSEventLog.h:
--------------------------------------------------------------------------------
1 | #import "MSLogWithNameAndProperties.h"
2 |
3 | @interface MSEventLog : MSLogWithNameAndProperties
4 |
5 | /**
6 | * Unique identifier for this event.
7 | */
8 | @property(nonatomic, copy) NSString *eventId;
9 |
10 | @end
11 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSLogWithNameAndProperties.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "MSLogWithProperties.h"
4 |
5 | @interface MSLogWithNameAndProperties : MSLogWithProperties
6 |
7 | /**
8 | * Name of the event.
9 | */
10 | @property(nonatomic, copy) NSString *name;
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSLogWithProperties.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "MSAbstractLog.h"
4 |
5 | @interface MSLogWithProperties : MSAbstractLog
6 |
7 | /**
8 | * Additional key/value pair parameters. [optional]
9 | */
10 | @property(nonatomic) NSDictionary *properties;
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSService.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | /**
4 | * Protocol declaring service logic.
5 | */
6 | @protocol MSService
7 |
8 | /**
9 | * Enable/disable this service.
10 | *
11 | * @param isEnabled whether this service is enabled or not.
12 | * @see isEnabled
13 | */
14 | + (void)setEnabled:(BOOL)isEnabled;
15 |
16 | /**
17 | * Is this service enabled.
18 | *
19 | * @return a boolean whether this service is enabled or not.
20 | * @see setEnabled:
21 | */
22 | + (BOOL)isEnabled;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Modules/module.modulemap:
--------------------------------------------------------------------------------
1 | framework module AppCenterAnalytics {
2 | umbrella header "AppCenterAnalytics.h"
3 |
4 | export *
5 | module * { export * }
6 |
7 | link framework "Foundation"
8 | link framework "UIKit"
9 | }
10 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/AppCenterCrashes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/AppCenterCrashes
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/AppCenterCrashes.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "MSCrashHandlerSetupDelegate.h"
4 | #import "MSCrashes.h"
5 | #import "MSCrashesDelegate.h"
6 | #import "MSErrorAttachmentLog+Utility.h"
7 | #import "MSErrorAttachmentLog.h"
8 | #import "MSWrapperCrashesHelper.h"
9 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSAbstractLog.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @interface MSAbstractLog : NSObject
4 |
5 | @end
6 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSService.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | /**
4 | * Protocol declaring service logic.
5 | */
6 | @protocol MSService
7 |
8 | /**
9 | * Enable/disable this service.
10 | *
11 | * @param isEnabled whether this service is enabled or not.
12 | * @see isEnabled
13 | */
14 | + (void)setEnabled:(BOOL)isEnabled;
15 |
16 | /**
17 | * Is this service enabled.
18 | *
19 | * @return a boolean whether this service is enabled or not.
20 | * @see setEnabled:
21 | */
22 | + (BOOL)isEnabled;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Modules/module.modulemap:
--------------------------------------------------------------------------------
1 | framework module AppCenterCrashes {
2 | umbrella header "AppCenterCrashes.h"
3 |
4 | export *
5 | module * { export * }
6 |
7 | link framework "Foundation"
8 | link "c++"
9 | link "z"
10 | }
11 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenterReactNativeShared/AppCenterReactNativeShared/AppCenterReactNativeShared.framework/AppCenterReactNativeShared:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/ios/Pods/AppCenterReactNativeShared/AppCenterReactNativeShared/AppCenterReactNativeShared.framework/AppCenterReactNativeShared
--------------------------------------------------------------------------------
/ios/Pods/AppCenterReactNativeShared/AppCenterReactNativeShared/AppCenterReactNativeShared.framework/Headers/AppCenterReactNativeShared.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | @class MSWrapperSdk;
4 |
5 | @interface AppCenterReactNativeShared : NSObject
6 |
7 | + (void) setAppSecret: (NSString *)secret;
8 |
9 | + (NSString *) getAppSecret;
10 |
11 | + (void) configureAppCenter;
12 |
13 | + (MSWrapperSdk *) getWrapperSdk;
14 |
15 | + (void) setWrapperSdk:(MSWrapperSdk *)sdk;
16 |
17 | + (void) setStartAutomatically:(BOOL)shouldStartAutomatically;
18 |
19 | @end
20 |
--------------------------------------------------------------------------------
/ios/Pods/AppCenterReactNativeShared/AppCenterReactNativeShared/AppCenterReactNativeShared.framework/Modules/module.modulemap:
--------------------------------------------------------------------------------
1 | framework module AppCenterReactNativeShared {
2 | umbrella header "AppCenterReactNativeShared.h"
3 |
4 | export *
5 | module * { export * }
6 |
7 | link framework "Foundation"
8 | }
9 |
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/AppCenter.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/AppCenter.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSAbstractLog.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSAbstractLog.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSAppCenter.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSAppCenter.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSAppCenterErrors.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSAppCenterErrors.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSChannelDelegate.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSChannelDelegate.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSChannelGroupProtocol.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSChannelGroupProtocol.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSChannelProtocol.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSChannelProtocol.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSConstants.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSConstants.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSCustomProperties.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSCustomProperties.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSDevice.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSDevice.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSEnable.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSEnable.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSLog.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSLog.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSLogWithProperties.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSLogWithProperties.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSLogger.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSLogger.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSService.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSService.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSServiceAbstract.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSServiceAbstract.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSWrapperLogger.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSWrapperLogger.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenter/MSWrapperSdk.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenter.framework/Headers/MSWrapperSdk.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/AppCenterAnalytics.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/AppCenterAnalytics.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSAbstractLog.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSAbstractLog.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSAnalytics.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSAnalytics.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSAnalyticsAuthenticationProvider.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSAnalyticsAuthenticationProvider.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSAnalyticsAuthenticationProviderDelegate.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSAnalyticsAuthenticationProviderDelegate.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSAnalyticsTransmissionTarget.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSAnalyticsTransmissionTarget.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSEventLog.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSEventLog.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSLogWithNameAndProperties.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSLogWithNameAndProperties.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSLogWithProperties.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSLogWithProperties.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSPropertyConfigurator.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSPropertyConfigurator.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSService.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSService.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterAnalytics/MSServiceAbstract.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterAnalytics.framework/Headers/MSServiceAbstract.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/AppCenterCrashes.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/AppCenterCrashes.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSAbstractLog.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSAbstractLog.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSCrashHandlerSetupDelegate.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSCrashHandlerSetupDelegate.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSCrashes.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSCrashes.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSCrashesDelegate.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSCrashesDelegate.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSErrorAttachmentLog+Utility.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSErrorAttachmentLog+Utility.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSErrorAttachmentLog.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSErrorAttachmentLog.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSErrorReport.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSErrorReport.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSService.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSService.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSServiceAbstract.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSServiceAbstract.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenter/AppCenterCrashes/MSWrapperCrashesHelper.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenter/AppCenter-SDK-Apple/iOS/AppCenterCrashes.framework/Headers/MSWrapperCrashesHelper.h
--------------------------------------------------------------------------------
/ios/Pods/Headers/Public/AppCenterReactNativeShared/AppCenterReactNativeShared/AppCenterReactNativeShared.h:
--------------------------------------------------------------------------------
1 | ../../../../AppCenterReactNativeShared/AppCenterReactNativeShared/AppCenterReactNativeShared.framework/Headers/AppCenterReactNativeShared.h
--------------------------------------------------------------------------------
/ios/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - AppCenter/Analytics (1.9.0):
3 | - AppCenter/Core
4 | - AppCenter/Core (1.9.0)
5 | - AppCenter/Crashes (1.9.0):
6 | - AppCenter/Core
7 | - AppCenterReactNativeShared (1.8.1):
8 | - AppCenter/Core (= 1.9.0)
9 |
10 | DEPENDENCIES:
11 | - AppCenter/Analytics (~> 1.9.0)
12 | - AppCenter/Crashes (~> 1.9.0)
13 | - AppCenterReactNativeShared (~> 1.8.1)
14 |
15 | SPEC REPOS:
16 | https://github.com/cocoapods/specs.git:
17 | - AppCenter
18 | - AppCenterReactNativeShared
19 |
20 | SPEC CHECKSUMS:
21 | AppCenter: 3cf7b9387549e9703dab068793e404013e8c0cc1
22 | AppCenterReactNativeShared: 3d804f256b964e040d902d1a215d7866fedae55d
23 |
24 | PODFILE CHECKSUM: a3ee1981cffe88e44a942c6814aa5e3b6c001f4c
25 |
26 | COCOAPODS: 1.5.3
27 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOS/Pods-Monica-tvOS-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 | Generated by CocoaPods - https://cocoapods.org
4 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOS/Pods-Monica-tvOS-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Generated by CocoaPods - https://cocoapods.org
18 | Title
19 |
20 | Type
21 | PSGroupSpecifier
22 |
23 |
24 | StringsTable
25 | Acknowledgements
26 | Title
27 | Acknowledgements
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOS/Pods-Monica-tvOS-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_Monica_tvOS : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_Monica_tvOS
5 | @end
6 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOS/Pods-Monica-tvOS.debug.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | OTHER_LDFLAGS = $(inherited) -ObjC
3 | PODS_BUILD_DIR = ${BUILD_DIR}
4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
6 | PODS_ROOT = ${SRCROOT}/Pods
7 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOS/Pods-Monica-tvOS.release.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | OTHER_LDFLAGS = $(inherited) -ObjC
3 | PODS_BUILD_DIR = ${BUILD_DIR}
4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
6 | PODS_ROOT = ${SRCROOT}/Pods
7 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOSTests/Pods-Monica-tvOSTests-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 | Generated by CocoaPods - https://cocoapods.org
4 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOSTests/Pods-Monica-tvOSTests-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Generated by CocoaPods - https://cocoapods.org
18 | Title
19 |
20 | Type
21 | PSGroupSpecifier
22 |
23 |
24 | StringsTable
25 | Acknowledgements
26 | Title
27 | Acknowledgements
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOSTests/Pods-Monica-tvOSTests-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_Monica_tvOSTests : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_Monica_tvOSTests
5 | @end
6 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOSTests/Pods-Monica-tvOSTests.debug.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | OTHER_LDFLAGS = $(inherited) -ObjC
3 | PODS_BUILD_DIR = ${BUILD_DIR}
4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
6 | PODS_ROOT = ${SRCROOT}/Pods
7 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica-tvOSTests/Pods-Monica-tvOSTests.release.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | OTHER_LDFLAGS = $(inherited) -ObjC
3 | PODS_BUILD_DIR = ${BUILD_DIR}
4 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
6 | PODS_ROOT = ${SRCROOT}/Pods
7 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-Monica/Pods-Monica-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_Monica : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_Monica
5 | @end
6 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-MonicaTests/Pods-MonicaTests-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 | Generated by CocoaPods - https://cocoapods.org
4 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-MonicaTests/Pods-MonicaTests-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Generated by CocoaPods - https://cocoapods.org
18 | Title
19 |
20 | Type
21 | PSGroupSpecifier
22 |
23 |
24 | StringsTable
25 | Acknowledgements
26 | Title
27 | Acknowledgements
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-MonicaTests/Pods-MonicaTests-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_MonicaTests : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_MonicaTests
5 | @end
6 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-MonicaTests/Pods-MonicaTests.debug.xcconfig:
--------------------------------------------------------------------------------
1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AppCenter/AppCenter-SDK-Apple/iOS" "${PODS_ROOT}/AppCenterReactNativeShared/AppCenterReactNativeShared"
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AppCenter" "${PODS_ROOT}/Headers/Public/AppCenterReactNativeShared"
4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AppCenter" -isystem "${PODS_ROOT}/Headers/Public/AppCenterReactNativeShared"
5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreTelephony" -framework "Foundation" -framework "SystemConfiguration" -framework "UIKit"
6 | PODS_BUILD_DIR = ${BUILD_DIR}
7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
9 | PODS_ROOT = ${SRCROOT}/Pods
10 |
--------------------------------------------------------------------------------
/ios/Pods/Target Support Files/Pods-MonicaTests/Pods-MonicaTests.release.xcconfig:
--------------------------------------------------------------------------------
1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/AppCenter/AppCenter-SDK-Apple/iOS" "${PODS_ROOT}/AppCenterReactNativeShared/AppCenterReactNativeShared"
2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/AppCenter" "${PODS_ROOT}/Headers/Public/AppCenterReactNativeShared"
4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/AppCenter" -isystem "${PODS_ROOT}/Headers/Public/AppCenterReactNativeShared"
5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "CoreTelephony" -framework "Foundation" -framework "SystemConfiguration" -framework "UIKit"
6 | PODS_BUILD_DIR = ${BUILD_DIR}
7 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
9 | PODS_ROOT = ${SRCROOT}/Pods
10 |
--------------------------------------------------------------------------------
/ios/devices.txt:
--------------------------------------------------------------------------------
1 | Device ID Device Name
2 | d988d298307e29bd646dca1f58c14825cf5a82bd Theo's Iphone SE
3 |
--------------------------------------------------------------------------------
/ios/fastlane/Appfile:
--------------------------------------------------------------------------------
1 | app_identifier "com.monicahq.app" # The bundle identifier of your app
2 | apple_id "rfreyd@fastmail.fm" # Your Apple email address
3 |
4 | itc_team_id "118957839" # iTunes Connect Team ID
5 | team_id "MVHSH3DLRY" # Developer Portal Team ID
6 |
7 | # For more information about the Appfile, see:
8 | # https://docs.fastlane.tools/advanced/#appfile
9 |
--------------------------------------------------------------------------------
/ios/fastlane/README.md:
--------------------------------------------------------------------------------
1 | fastlane documentation
2 | ================
3 | # Installation
4 |
5 | Make sure you have the latest version of the Xcode command line tools installed:
6 |
7 | ```
8 | xcode-select --install
9 | ```
10 |
11 | Install _fastlane_ using
12 | ```
13 | [sudo] gem install fastlane -NV
14 | ```
15 | or alternatively using `brew cask install fastlane`
16 |
17 | # Available Actions
18 | ## iOS
19 | ### ios beta
20 | ```
21 | fastlane ios beta
22 | ```
23 | Push a new beta build to TestFlight
24 | ### ios certificates
25 | ```
26 | fastlane ios certificates
27 | ```
28 |
29 | ### ios version
30 | ```
31 | fastlane ios version
32 | ```
33 |
34 |
35 | ----
36 |
37 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run.
38 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools).
39 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools).
40 |
--------------------------------------------------------------------------------
/src/App.spec.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | // import 'react-native';
3 | // import renderer from 'react-test-renderer';
4 | // import {App} from './App';
5 | // TODO
6 |
7 | describe('App', () => {
8 | it('renders correctly', () => {
9 | expect(true).toBe(true);
10 | // renderer.create();
11 | });
12 | });
13 |
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {Provider} from 'react-redux';
3 |
4 | import configureStore from '@redux/configureStore';
5 | import {CodePushContainer} from '@src/containers/CodePush/CodePushContainer';
6 | import {AppNavigator} from '@src/navigator/AppNavigator';
7 | import {codePush} from './CodePush';
8 |
9 | const store = configureStore();
10 |
11 | class MainApp extends PureComponent<{}, {}> {
12 | public render() {
13 | return [, ];
14 | }
15 | }
16 |
17 | class AppWithoutCodePush extends PureComponent<{}, {}> {
18 | public render() {
19 | return (
20 |
21 |
22 |
23 | );
24 | }
25 | }
26 |
27 | export const App = codePush(AppWithoutCodePush);
28 |
--------------------------------------------------------------------------------
/src/CodePush.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import RNCodePush from 'react-native-code-push';
3 |
4 | export const codePush = (Component: React.ComponentType): React.ComponentType =>
5 | RNCodePush({
6 | checkFrequency: RNCodePush.CheckFrequency.MANUAL,
7 | })(Component);
8 |
--------------------------------------------------------------------------------
/src/api/activities.ts:
--------------------------------------------------------------------------------
1 | export class Activities {
2 | private api;
3 |
4 | constructor(api) {
5 | this.api = api;
6 | }
7 |
8 | public async getAllByContact(
9 | contactId: number,
10 | page: number,
11 | limit: number = 20
12 | ) {
13 | try {
14 | const resp = await this.api.get(
15 | '/api/contacts/' + contactId + '/activities',
16 | {
17 | body: {page, limit},
18 | }
19 | );
20 | return resp.body;
21 | } catch (err) {
22 | throw err;
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/api/calls.ts:
--------------------------------------------------------------------------------
1 | export class Calls {
2 | private api;
3 |
4 | constructor(api) {
5 | this.api = api;
6 | }
7 |
8 | public async getAllByContact(
9 | contactId: number,
10 | page: number,
11 | limit: number = 20
12 | ) {
13 | try {
14 | const resp = await this.api.get('/api/contacts/' + contactId + '/calls', {
15 | body: {page, limit},
16 | });
17 | return resp.body;
18 | } catch (err) {
19 | throw err;
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/api/contacts.ts:
--------------------------------------------------------------------------------
1 | export class Contacts {
2 | private api;
3 |
4 | constructor(api) {
5 | this.api = api;
6 | }
7 |
8 | public async getAll(page: number, limit: number = 20, query?: string) {
9 | try {
10 | const resp = await this.api.get('/api/contacts?with=contactfields', {
11 | body: {page, limit, query},
12 | });
13 | return resp.body;
14 | } catch (err) {
15 | throw err;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/api/debts.ts:
--------------------------------------------------------------------------------
1 | export class Debts {
2 | private api;
3 |
4 | constructor(api) {
5 | this.api = api;
6 | }
7 |
8 | public async getAllByContact(
9 | contactId: number,
10 | page: number,
11 | limit: number = 20
12 | ) {
13 | try {
14 | const resp = await this.api.get('/api/contacts/' + contactId + '/debts', {
15 | body: {page, limit},
16 | });
17 | return resp.body;
18 | } catch (err) {
19 | throw err;
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/api/gifts.ts:
--------------------------------------------------------------------------------
1 | export class Gifts {
2 | private api;
3 |
4 | constructor(api) {
5 | this.api = api;
6 | }
7 |
8 | public async getAllByContact(
9 | contactId: number,
10 | page: number,
11 | limit: number = 20
12 | ) {
13 | try {
14 | const resp = await this.api.get('/api/contacts/' + contactId + '/gifts', {
15 | body: {page, limit},
16 | });
17 | return resp.body;
18 | } catch (err) {
19 | throw err;
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/api/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@api"
3 | }
4 |
--------------------------------------------------------------------------------
/src/api/reminders.ts:
--------------------------------------------------------------------------------
1 | export class Reminders {
2 | private api;
3 |
4 | constructor(api) {
5 | this.api = api;
6 | }
7 |
8 | public async getAllByContact(
9 | contactId: number,
10 | page: number,
11 | limit: number = 20
12 | ) {
13 | try {
14 | const resp = await this.api.get(
15 | '/api/contacts/' + contactId + '/reminders',
16 | {
17 | body: {page, limit},
18 | }
19 | );
20 | return resp.body;
21 | } catch (err) {
22 | throw err;
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/api/tasks.ts:
--------------------------------------------------------------------------------
1 | type sortType =
2 | | 'completed_at'
3 | | '-completed_at'
4 | | 'created_at'
5 | | '-created_at'
6 | | 'updated_at'
7 | | '-updated_at';
8 |
9 | export class Tasks {
10 | private api;
11 |
12 | constructor(api) {
13 | this.api = api;
14 | }
15 |
16 | public async getAllByContact(
17 | contactId: number,
18 | page: number,
19 | limit: number = 20,
20 | sort: sortType = 'completed_at'
21 | ) {
22 | try {
23 | const resp = await this.api.get('/api/contacts/' + contactId + '/tasks', {
24 | body: {sort, page, limit},
25 | });
26 | return resp.body;
27 | } catch (err) {
28 | throw err;
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/api/user.ts:
--------------------------------------------------------------------------------
1 | export class User {
2 | private api;
3 |
4 | constructor(api) {
5 | this.api = api;
6 | }
7 |
8 | public async login(email: string, password: string) {
9 | try {
10 | const resp = await this.api.post('/oauth/login', {
11 | body: {
12 | email,
13 | password,
14 | },
15 | });
16 | return resp.body;
17 | } catch (err) {
18 | throw err;
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/assets/icons/activities.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/activities.png
--------------------------------------------------------------------------------
/src/assets/icons/activities@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/activities@2x.png
--------------------------------------------------------------------------------
/src/assets/icons/activities@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/activities@3x.png
--------------------------------------------------------------------------------
/src/assets/icons/debts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/debts.png
--------------------------------------------------------------------------------
/src/assets/icons/debts@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/debts@2x.png
--------------------------------------------------------------------------------
/src/assets/icons/debts@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/debts@3x.png
--------------------------------------------------------------------------------
/src/assets/icons/gift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/gift.png
--------------------------------------------------------------------------------
/src/assets/icons/gift@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/gift@2x.png
--------------------------------------------------------------------------------
/src/assets/icons/gift@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/gift@3x.png
--------------------------------------------------------------------------------
/src/assets/icons/notes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/notes.png
--------------------------------------------------------------------------------
/src/assets/icons/notes@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/notes@2x.png
--------------------------------------------------------------------------------
/src/assets/icons/notes@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/notes@3x.png
--------------------------------------------------------------------------------
/src/assets/icons/phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/phone.png
--------------------------------------------------------------------------------
/src/assets/icons/phone@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/phone@2x.png
--------------------------------------------------------------------------------
/src/assets/icons/phone@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/phone@3x.png
--------------------------------------------------------------------------------
/src/assets/icons/reminders.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/reminders.png
--------------------------------------------------------------------------------
/src/assets/icons/reminders@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/reminders@2x.png
--------------------------------------------------------------------------------
/src/assets/icons/reminders@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/reminders@3x.png
--------------------------------------------------------------------------------
/src/assets/icons/tasks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/tasks.png
--------------------------------------------------------------------------------
/src/assets/icons/tasks@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/tasks@2x.png
--------------------------------------------------------------------------------
/src/assets/icons/tasks@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/icons/tasks@3x.png
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/logo.png
--------------------------------------------------------------------------------
/src/assets/logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/logo@2x.png
--------------------------------------------------------------------------------
/src/assets/logo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/assets/logo@3x.png
--------------------------------------------------------------------------------
/src/assets/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@assets"
3 | }
4 |
--------------------------------------------------------------------------------
/src/components/Back/Back.android.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {TouchableWithoutFeedback} from 'react-native';
3 | import Icon from 'react-native-vector-icons/MaterialIcons';
4 |
5 | import {IBackProps} from './Back.props';
6 | import {styles} from './Back.styles.android';
7 |
8 | export class Back extends PureComponent {
9 | public render() {
10 | const {onPress} = this.props;
11 | return (
12 |
13 |
14 |
15 | );
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/components/Back/Back.ios.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {TouchableOpacity} from 'react-native';
3 | import Icon from 'react-native-vector-icons/Ionicons';
4 |
5 | import {hitSlop} from '@theme';
6 | import {IBackProps} from './Back.props';
7 | import {styles} from './Back.styles.ios';
8 |
9 | export class Back extends PureComponent {
10 | public render() {
11 | const {onPress} = this.props;
12 | return (
13 |
14 |
15 |
16 | );
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/components/Back/Back.props.ts:
--------------------------------------------------------------------------------
1 | export interface IBackProps {
2 | onPress: (...args) => any;
3 | }
4 |
--------------------------------------------------------------------------------
/src/components/Back/Back.styles.android.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | icon: {
5 | position: 'absolute',
6 | top: 16,
7 | left: 8,
8 | },
9 | });
10 |
--------------------------------------------------------------------------------
/src/components/Back/Back.styles.ios.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | icon: {
5 | position: 'absolute',
6 | top: 25,
7 | left: 15,
8 | },
9 | });
10 |
--------------------------------------------------------------------------------
/src/components/Back/__tests__/Back.android.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {Back} from '../Back.android';
5 |
6 | describe('Components', () => {
7 | describe('Back', () => {
8 | describe('Android', () => {
9 | it('should renders correctly', () => {
10 | const onPress = jest.fn();
11 | expect(toJson(shallow())).toMatchSnapshot();
12 | });
13 |
14 | it('should call onPress when taping the icon', () => {
15 | const onPress = jest.fn();
16 | const button = shallow();
17 | button.prop('onPress')();
18 | expect(onPress).toHaveBeenCalledTimes(1);
19 | expect(onPress).toHaveBeenCalledWith();
20 | });
21 | });
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/src/components/Back/__tests__/Back.ios.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {Back} from '../Back.ios';
5 |
6 | describe('Components', () => {
7 | describe('Back', () => {
8 | describe('IOS', () => {
9 | it('should renders correctly', () => {
10 | const onPress = jest.fn();
11 | expect(toJson(shallow())).toMatchSnapshot();
12 | });
13 |
14 | it('should call onPress when taping the icon', () => {
15 | const onPress = jest.fn();
16 | const button = shallow();
17 | button.prop('onPress')();
18 | expect(onPress).toHaveBeenCalledTimes(1);
19 | expect(onPress).toHaveBeenCalledWith();
20 | });
21 | });
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/src/components/Back/__tests__/__snapshots__/Back.android.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Components Back Android should renders correctly 1`] = `
4 |
7 |
20 |
21 | `;
22 |
--------------------------------------------------------------------------------
/src/components/Back/__tests__/__snapshots__/Back.ios.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Components Back IOS should renders correctly 1`] = `
4 |
23 |
29 |
30 | `;
31 |
--------------------------------------------------------------------------------
/src/components/Back/__tests__/index.android.spec.ts:
--------------------------------------------------------------------------------
1 | import {Back} from '../index';
2 |
3 | jest.mock('../Back.android', () => ({Back: 'android'}));
4 | jest.mock('../Back.ios', () => ({Back: 'ios'}));
5 |
6 | jest.mock('react-native', () => ({
7 | Platform: {
8 | OS: 'android',
9 | },
10 | }));
11 |
12 | describe('Components', () => {
13 | describe('Back Index', () => {
14 | describe('android', () => {
15 | it('should return the android version', () => {
16 | expect(Back).toBe('android');
17 | });
18 | });
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Back/__tests__/index.ios.spec.ts:
--------------------------------------------------------------------------------
1 | import {Back} from '../index';
2 |
3 | jest.mock('../Back.android', () => ({Back: 'android'}));
4 | jest.mock('../Back.ios', () => ({Back: 'ios'}));
5 |
6 | jest.mock('react-native', () => ({
7 | Platform: {
8 | OS: 'ios',
9 | },
10 | }));
11 |
12 | describe('Components', () => {
13 | describe('Back Index', () => {
14 | describe('ios', () => {
15 | it('should return the ios version', () => {
16 | expect(Back).toBe('ios');
17 | });
18 | });
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Back/index.ts:
--------------------------------------------------------------------------------
1 | import {Platform} from 'react-native';
2 | import {Back as BackAndroid} from './Back.android';
3 | import {Back as BackIOS} from './Back.ios';
4 |
5 | export const Back = Platform.OS === 'ios' ? BackIOS : BackAndroid;
6 |
--------------------------------------------------------------------------------
/src/components/BottomNav/BottomNav.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | bottomNav: {
5 | paddingVertical: 15,
6 | borderTopWidth: 1 / PixelRatio.get(),
7 | borderColor: '#E2E4E5',
8 | width: '100%',
9 | flexDirection: 'row',
10 | justifyContent: 'center',
11 | },
12 | bottomLinkText: {
13 | color: '#1361cb',
14 | },
15 | });
16 |
--------------------------------------------------------------------------------
/src/components/BottomNav/BottomNav.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {Text, TouchableOpacity, View} from 'react-native';
3 | import {hitSlop} from '../../theme';
4 | import {styles} from './BottomNav.styles';
5 |
6 | interface IBottomNavProps {
7 | onPress: (...args) => any;
8 | title: string;
9 | linkTitle: string;
10 | }
11 |
12 | export class BottomNav extends PureComponent {
13 | public render() {
14 | const {onPress, title, linkTitle} = this.props;
15 |
16 | return (
17 |
18 | {title}
19 |
20 | {linkTitle}
21 |
22 |
23 | );
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/components/BottomNav/index.ts:
--------------------------------------------------------------------------------
1 | export * from './BottomNav';
2 |
--------------------------------------------------------------------------------
/src/components/Button/Button.props.ts:
--------------------------------------------------------------------------------
1 | export interface IButtonProps {
2 | id?: string;
3 | onPress: (...args) => any;
4 | children?: string;
5 | loading?: boolean;
6 | title?: string;
7 | disabled?: boolean;
8 | loadingTitle?: string;
9 | }
10 |
--------------------------------------------------------------------------------
/src/components/Button/Button.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | button: {
5 | height: 45,
6 | borderRadius: 5,
7 | marginVertical: 10,
8 | backgroundColor: 'rgb(43, 187, 72)',
9 | justifyContent: 'center',
10 | alignItems: 'center',
11 | width: '100%',
12 | flexDirection: 'row',
13 | },
14 | activityIndicator: {
15 | marginLeft: 10,
16 | },
17 | buttonDisabled: {
18 | backgroundColor: 'rgba(43, 187, 72, 0.4)',
19 | },
20 | buttonText: {
21 | color: 'white',
22 | textAlign: 'center',
23 | fontWeight: 'bold',
24 | },
25 | });
26 |
--------------------------------------------------------------------------------
/src/components/Button/__tests__/index.android.spec.ts:
--------------------------------------------------------------------------------
1 | import {Button} from '../index';
2 |
3 | jest.mock('../Button.android', () => ({Button: 'android'}));
4 | jest.mock('../Button.ios', () => ({Button: 'ios'}));
5 |
6 | jest.mock('react-native', () => ({
7 | Platform: {
8 | OS: 'android',
9 | },
10 | }));
11 |
12 | describe('Components', () => {
13 | describe('Button Index', () => {
14 | describe('android', () => {
15 | it('should return the android version', () => {
16 | expect(Button).toBe('android');
17 | });
18 | });
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Button/__tests__/index.ios.spec.ts:
--------------------------------------------------------------------------------
1 | import {Button} from '../index';
2 |
3 | jest.mock('../Button.android', () => ({Button: 'android'}));
4 | jest.mock('../Button.ios', () => ({Button: 'ios'}));
5 |
6 | jest.mock('react-native', () => ({
7 | Platform: {
8 | OS: 'ios',
9 | },
10 | }));
11 |
12 | describe('Components', () => {
13 | describe('Button Index', () => {
14 | describe('ios', () => {
15 | it('should return the ios version', () => {
16 | expect(Button).toBe('ios');
17 | });
18 | });
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Button/index.ts:
--------------------------------------------------------------------------------
1 | import {Platform} from 'react-native';
2 | import {Button as ButtonAndroid} from './Button.android';
3 | import {Button as ButtonIOS} from './Button.ios';
4 |
5 | export const Button = Platform.OS === 'ios' ? ButtonIOS : ButtonAndroid;
6 |
--------------------------------------------------------------------------------
/src/components/Checkbox/Checkbox.android.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {View} from 'react-native';
3 | import Icon from 'react-native-vector-icons/Ionicons';
4 |
5 | import {ICheckboxProps} from './Checkbox.props';
6 | import {styles} from './Checkbox.styles';
7 |
8 | export class Checkbox extends PureComponent {
9 | public render() {
10 | const {checked} = this.props;
11 |
12 | return (
13 |
19 | {checked && }
20 |
21 | );
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/components/Checkbox/Checkbox.ios.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {View} from 'react-native';
3 | import Icon from 'react-native-vector-icons/Ionicons';
4 |
5 | import {ICheckboxProps} from './Checkbox.props';
6 | import {styles} from './Checkbox.styles';
7 |
8 | export class Checkbox extends PureComponent {
9 | public render() {
10 | const {checked} = this.props;
11 |
12 | return (
13 |
19 | {checked && }
20 |
21 | );
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/components/Checkbox/Checkbox.props.ts:
--------------------------------------------------------------------------------
1 | export interface ICheckboxProps {
2 | checked: boolean;
3 | }
4 |
--------------------------------------------------------------------------------
/src/components/Checkbox/Checkbox.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | const radius = 10;
4 |
5 | export const styles = StyleSheet.create({
6 | container: {
7 | width: radius * 2,
8 | height: radius * 2,
9 | borderRadius: radius,
10 | alignItems: 'center',
11 | justifyContent: 'center',
12 | },
13 | checkedContainer: {
14 | backgroundColor: '#057CFC',
15 | },
16 | uncheckedContainer: {
17 | borderColor: '#979797',
18 | borderWidth: 1 / PixelRatio.get(),
19 | },
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Checkbox/__tests__/Checkbox.android.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {Checkbox} from '../Checkbox.android';
5 |
6 | describe('Components', () => {
7 | describe('Checkbox Android', () => {
8 | // const defaultOnPress = {
9 | // onPress: () => {
10 | // return;
11 | // },
12 | // };
13 |
14 | it('should renders correctly', () => {
15 | expect(toJson(shallow())).toMatchSnapshot();
16 | expect(toJson(shallow())).toMatchSnapshot();
17 | });
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/src/components/Checkbox/__tests__/Checkbox.ios.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {Checkbox} from '../Checkbox.ios';
5 |
6 | describe('Components', () => {
7 | describe('Checkbox IOS', () => {
8 | // const defaultOnPress = {
9 | // onPress: () => {
10 | // return;
11 | // },
12 | // };
13 |
14 | it('should renders correctly', () => {
15 | expect(toJson(shallow())).toMatchSnapshot();
16 | expect(toJson(shallow())).toMatchSnapshot();
17 | });
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/src/components/Checkbox/__tests__/index.android.spec.ts:
--------------------------------------------------------------------------------
1 | import {Checkbox} from '../index';
2 |
3 | jest.mock('../Checkbox.android', () => ({Checkbox: 'android'}));
4 | jest.mock('../Checkbox.ios', () => ({Checkbox: 'ios'}));
5 |
6 | jest.mock('react-native', () => ({
7 | Platform: {
8 | OS: 'android',
9 | },
10 | }));
11 |
12 | describe('Components', () => {
13 | describe('Checkbox Index', () => {
14 | describe('android', () => {
15 | it('should return the android version', () => {
16 | expect(Checkbox).toBe('android');
17 | });
18 | });
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Checkbox/__tests__/index.ios.spec.ts:
--------------------------------------------------------------------------------
1 | import {Checkbox} from '../index';
2 |
3 | jest.mock('../Checkbox.android', () => ({Checkbox: 'android'}));
4 | jest.mock('../Checkbox.ios', () => ({Checkbox: 'ios'}));
5 |
6 | jest.mock('react-native', () => ({
7 | Platform: {
8 | OS: 'ios',
9 | },
10 | }));
11 |
12 | describe('Components', () => {
13 | describe('Checkbox Index', () => {
14 | describe('ios', () => {
15 | it('should return the ios version', () => {
16 | expect(Checkbox).toBe('ios');
17 | });
18 | });
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Checkbox/index.ts:
--------------------------------------------------------------------------------
1 | import {Platform} from 'react-native';
2 | import {Checkbox as CheckboxAndroid} from './Checkbox.android';
3 | import {Checkbox as CheckboxIOS} from './Checkbox.ios';
4 |
5 | export const Checkbox = Platform.OS === 'ios' ? CheckboxIOS : CheckboxAndroid;
6 |
--------------------------------------------------------------------------------
/src/components/ContactAvatar/ContactAvatar.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | avatar: {
5 | borderRadius: 3,
6 | justifyContent: 'center',
7 | },
8 | text: {
9 | fontSize: 20,
10 | color: 'white',
11 | textAlign: 'center',
12 | },
13 | });
14 |
--------------------------------------------------------------------------------
/src/components/ContactAvatar/index.ts:
--------------------------------------------------------------------------------
1 | export * from './ContactAvatar';
2 |
--------------------------------------------------------------------------------
/src/components/ContactListItem/ContactListItem.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | flexDirection: 'row',
6 | paddingHorizontal: 10,
7 | paddingVertical: 3,
8 | },
9 | image: {
10 | borderRadius: 3,
11 | height: 50,
12 | width: 50,
13 | },
14 | textContainer: {
15 | justifyContent: 'center',
16 | paddingHorizontal: 10,
17 | },
18 | });
19 |
--------------------------------------------------------------------------------
/src/components/ContactListItem/index.ts:
--------------------------------------------------------------------------------
1 | export * from './ContactListItem';
2 |
--------------------------------------------------------------------------------
/src/components/EmptyActivity/EmptyActivities.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | flex: 1,
6 | alignItems: 'center',
7 | backgroundColor: 'white',
8 | },
9 | image: {
10 | marginBottom: 20,
11 | },
12 | textContainer: {
13 | paddingHorizontal: 60,
14 | },
15 | title: {
16 | textAlign: 'center',
17 | marginBottom: 10,
18 | },
19 | subtitle: {
20 | fontSize: 13,
21 | textAlign: 'center',
22 | },
23 | });
24 |
--------------------------------------------------------------------------------
/src/components/EmptyActivity/EmptyActivity.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {Image, Text, View} from 'react-native';
3 |
4 | import {commonStyles} from '@theme';
5 | import {styles} from './EmptyActivities.styles';
6 |
7 | interface IEmptyActivityProps {
8 | title: string;
9 | subtitle?: string;
10 | image: number | {uri: string};
11 | }
12 |
13 | export class EmptyActivity extends PureComponent {
14 | public render() {
15 | const {title, subtitle, image} = this.props;
16 | return (
17 |
18 |
19 |
20 |
21 |
22 | {title}
23 | {subtitle && {subtitle}}
24 |
25 |
26 |
27 |
28 | );
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/components/EmptyActivity/__tests__/EmptyActivity.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {EmptyActivity} from '../EmptyActivity';
5 |
6 | describe('Components', () => {
7 | describe('EmptyActivity', () => {
8 | it('should renders correctly with no subtitle', () => {
9 | expect(
10 | toJson(shallow())
11 | ).toMatchSnapshot();
12 | });
13 |
14 | it('should renders correctly with a subtitle', () => {
15 | expect(
16 | toJson(
17 | shallow(
18 |
19 | )
20 | )
21 | ).toMatchSnapshot();
22 | });
23 | });
24 | });
25 |
--------------------------------------------------------------------------------
/src/components/EmptyActivity/index.ts:
--------------------------------------------------------------------------------
1 | export * from './EmptyActivity';
2 |
--------------------------------------------------------------------------------
/src/components/FontelloIcon/FontelloIcon.ts:
--------------------------------------------------------------------------------
1 | import {createIconSetFromFontello} from 'react-native-vector-icons';
2 | // tslint:disable-next-line:no-var-requires
3 | const fontelloConfig = require('./config.json');
4 | export const FontelloIcon = createIconSetFromFontello(fontelloConfig);
5 |
--------------------------------------------------------------------------------
/src/components/FontelloIcon/fontello.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/components/FontelloIcon/fontello.ttf
--------------------------------------------------------------------------------
/src/components/FontelloIcon/index.ts:
--------------------------------------------------------------------------------
1 | export * from './FontelloIcon';
2 |
--------------------------------------------------------------------------------
/src/components/LastTwoYearsStatistics/LastTwoYearsStatistics.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | marginVertical: 15,
6 | flexDirection: 'row',
7 | alignItems: 'center',
8 | borderRadius: 3,
9 | borderColor: 'grey',
10 | borderWidth: 1 / PixelRatio.get(),
11 | },
12 | leftContainer: {
13 | paddingHorizontal: 10,
14 | paddingVertical: 7,
15 | flex: 1,
16 | },
17 | rightContainer: {
18 | paddingHorizontal: 10,
19 | paddingVertical: 7,
20 | flex: 1,
21 | borderColor: 'grey',
22 | borderLeftWidth: 1 / PixelRatio.get(),
23 | },
24 | image: {
25 | marginHorizontal: 10,
26 | },
27 | count: {
28 | fontSize: 25,
29 | },
30 | text: {
31 | color: '#355974',
32 | },
33 | });
34 |
--------------------------------------------------------------------------------
/src/components/LastTwoYearsStatistics/__tests__/LastTwoYearsStatistics.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {LastTwoYearsStatistics} from '../LastTwoYearsStatistics';
5 |
6 | describe('Components', () => {
7 | describe('LastTwoYearsStatistics', () => {
8 | it('should renders correctly', () => {
9 | expect(
10 | toJson(
11 | shallow(
12 |
19 | )
20 | )
21 | ).toMatchSnapshot();
22 | });
23 | });
24 | });
25 |
--------------------------------------------------------------------------------
/src/components/LastTwoYearsStatistics/index.ts:
--------------------------------------------------------------------------------
1 | export * from './LastTwoYearsStatistics';
2 |
--------------------------------------------------------------------------------
/src/components/ListItem/ListItem.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | row: {
5 | flexDirection: 'row',
6 | paddingVertical: 10,
7 | },
8 | notLastRow: {
9 | borderBottomColor: '#96A5B3',
10 | borderBottomWidth: 1 / PixelRatio.get(),
11 | },
12 | typeText: {
13 | marginLeft: 2,
14 | color: '#96A5B3',
15 | },
16 | });
17 |
--------------------------------------------------------------------------------
/src/components/ListItem/ListItem.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {Text, View} from 'react-native';
3 |
4 | import {commonStyles} from '@theme';
5 | import {styles} from './ListItem.styles';
6 |
7 | interface IListItemProps {
8 | title: string;
9 | subtitle?: string;
10 | infoRight?: string;
11 | lastItem?: boolean;
12 | }
13 |
14 | export class ListItem extends PureComponent {
15 | public render() {
16 | const {title, infoRight, subtitle, lastItem} = this.props;
17 |
18 | return (
19 |
20 | {title}
21 | {subtitle && {subtitle}}
22 | {infoRight && }
23 | {infoRight && {infoRight}}
24 |
25 | );
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/components/ListItem/index.ts:
--------------------------------------------------------------------------------
1 | export * from './ListItem';
2 |
--------------------------------------------------------------------------------
/src/components/Navbar/Navbar.props.ts:
--------------------------------------------------------------------------------
1 | import {ReactNode} from 'react';
2 |
3 | export interface INavbarProps {
4 | title: string | ReactNode;
5 | onBack?: any;
6 | rightTitle?: string;
7 | rightAction?: (...args) => void;
8 | rightIcon?: string;
9 | }
10 |
--------------------------------------------------------------------------------
/src/components/Navbar/Navbar.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | import {contraintTop} from '@theme';
4 |
5 | export const styles = StyleSheet.create({
6 | navbar: {
7 | marginTop: contraintTop,
8 | },
9 | });
10 |
--------------------------------------------------------------------------------
/src/components/Navbar/__tests__/Navbar.ios.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {View} from 'react-native';
5 | import {Navbar} from '../Navbar.ios';
6 |
7 | describe('Components', () => {
8 | describe('Navbar IOS', () => {
9 | const onPress = jest.fn();
10 |
11 | it('should renders correctly', () => {
12 | expect(
13 | toJson(shallow())
14 | ).toMatchSnapshot();
15 |
16 | expect(toJson(shallow())).toMatchSnapshot();
17 | expect(toJson(shallow(} />))).toMatchSnapshot();
18 | });
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Navbar/__tests__/__snapshots__/Navbar.android.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Components Navbar Android should renders correctly 1`] = `
4 |
19 | `;
20 |
21 | exports[`Components Navbar Android should renders correctly 2`] = `
22 |
36 | `;
37 |
--------------------------------------------------------------------------------
/src/components/Navbar/__tests__/index.android.spec.ts:
--------------------------------------------------------------------------------
1 | import {Navbar} from '../index';
2 |
3 | jest.mock('../Navbar.android', () => ({Navbar: 'android'}));
4 | jest.mock('../Navbar.ios', () => ({Navbar: 'ios'}));
5 |
6 | jest.mock('react-native', () => ({
7 | Platform: {
8 | OS: 'android',
9 | },
10 | }));
11 | jest.mock('react-native-vector-icons/MaterialIcons');
12 |
13 | describe('Components', () => {
14 | describe('Navbar Index', () => {
15 | describe('android', () => {
16 | it('should return the android version', () => {
17 | expect(Navbar).toBe('android');
18 | });
19 | });
20 | });
21 | });
22 |
--------------------------------------------------------------------------------
/src/components/Navbar/__tests__/index.ios.spec.ts:
--------------------------------------------------------------------------------
1 | import {Navbar} from '../index';
2 |
3 | jest.mock('../Navbar.android', () => ({Navbar: 'android'}));
4 | jest.mock('../Navbar.ios', () => ({Navbar: 'ios'}));
5 |
6 | jest.mock('react-native', () => ({
7 | Platform: {
8 | OS: 'ios',
9 | },
10 | }));
11 |
12 | describe('Components', () => {
13 | describe('Navbar Index', () => {
14 | describe('ios', () => {
15 | it('should return the ios version', () => {
16 | expect(Navbar).toBe('ios');
17 | });
18 | });
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/components/Navbar/back/NavbarIOSBack.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | leftButton: {
5 | flexDirection: 'row',
6 | alignItems: 'center',
7 | paddingLeft: 12,
8 | },
9 | });
10 |
--------------------------------------------------------------------------------
/src/components/Navbar/back/NavbarIOSBack.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {TouchableOpacity} from 'react-native';
3 | import Icon from 'react-native-vector-icons/Ionicons';
4 |
5 | import {hitSlop} from '@theme';
6 | import {styles} from './NavbarIOSBack.styles';
7 |
8 | interface INavbarIOSBackProps {
9 | onPress: (...args) => any;
10 | }
11 |
12 | export class NavbarIOSBack extends PureComponent {
13 | public render() {
14 | const {onPress} = this.props;
15 |
16 | return (
17 |
22 |
23 |
24 | );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/components/Navbar/back/__tests__/NavbarIOSBack.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {NavbarIOSBack} from '../NavbarIOSBack';
5 |
6 | describe('Components', () => {
7 | describe('NavbarIOSBack', () => {
8 | const onPress = jest.fn();
9 | it('should renders correctly', () => {
10 | expect(
11 | toJson(shallow())
12 | ).toMatchSnapshot();
13 | });
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/src/components/Navbar/back/__tests__/__snapshots__/NavbarIOSBack.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Components NavbarIOSBack should renders correctly 1`] = `
4 |
23 |
29 |
30 | `;
31 |
--------------------------------------------------------------------------------
/src/components/Navbar/index.ts:
--------------------------------------------------------------------------------
1 | import {Platform} from 'react-native';
2 | import {Navbar as NavbarAndroid} from './Navbar.android';
3 | import {Navbar as NavbarIOS} from './Navbar.ios';
4 |
5 | export const Navbar = Platform.OS === 'ios' ? NavbarIOS : NavbarAndroid;
6 |
--------------------------------------------------------------------------------
/src/components/Tabbar/Tabbar.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | import {contraintBottom} from '@theme';
4 | export const textColor = '#8d8d8d';
5 | export const activeTextColor = '#1361cb';
6 | export const iconSize = 25;
7 |
8 | export const styles = StyleSheet.create({
9 | tabContainer: {
10 | flexDirection: 'row',
11 | height: 48 + contraintBottom,
12 | paddingBottom: contraintBottom,
13 | backgroundColor: '#F8F7F7',
14 | borderColor: '#979797',
15 | borderTopWidth: 1 / PixelRatio.get(),
16 | },
17 | tab: {
18 | flex: 1,
19 | alignItems: 'center',
20 | justifyContent: 'center',
21 | padding: 4,
22 | },
23 | text: {
24 | fontSize: 10,
25 | color: textColor,
26 | },
27 | textActive: {
28 | color: activeTextColor,
29 | },
30 | });
31 |
--------------------------------------------------------------------------------
/src/components/Touchable/Touchable.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {
3 | Platform,
4 | TouchableNativeFeedback,
5 | TouchableOpacity,
6 | View,
7 | ViewStyle,
8 | } from 'react-native';
9 |
10 | interface ITouchableProps {
11 | style?: ViewStyle;
12 | onPress: (...args) => any;
13 | children;
14 | }
15 |
16 | export class Touchable extends PureComponent {
17 | public render() {
18 | const {style, onPress, children} = this.props;
19 | return Platform.OS === 'ios' ? (
20 |
21 | {children}
22 |
23 | ) : (
24 |
25 | {children}
26 |
27 | );
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/components/Touchable/__tests__/__snapshots__/Touchable.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Components Touchable android should renders correctly 1`] = `
4 |
7 |
8 |
9 |
10 |
11 | `;
12 |
13 | exports[`Components Touchable ios should renders correctly 1`] = `
14 |
18 |
19 |
20 |
21 | `;
22 |
--------------------------------------------------------------------------------
/src/components/Touchable/index.ts:
--------------------------------------------------------------------------------
1 | export * from './Touchable';
2 |
--------------------------------------------------------------------------------
/src/components/form/ContactChooser/ContactChooser.styles.ts:
--------------------------------------------------------------------------------
1 | import {primaryColor} from '@theme';
2 | import {StyleSheet} from 'react-native';
3 |
4 | export const borderColor = '#b5b5b5';
5 |
6 | const height = 30;
7 |
8 | export const styles = StyleSheet.create({
9 | container: {
10 | flexDirection: 'row',
11 | height,
12 | alignItems: 'center',
13 | },
14 | title: {
15 | flex: 1,
16 | flexDirection: 'row',
17 | height,
18 | alignItems: 'center',
19 | },
20 | errorText: {
21 | color: 'red',
22 | },
23 | contactName: {
24 | marginLeft: 10,
25 | flex: 1,
26 | },
27 | edit: {
28 | color: primaryColor,
29 | },
30 | });
31 |
--------------------------------------------------------------------------------
/src/components/form/ContactChooser/index.ts:
--------------------------------------------------------------------------------
1 | export * from './ContactChooser';
2 |
--------------------------------------------------------------------------------
/src/components/form/FormListItem/FormListItem.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const borderColor = '#b5b5b5';
4 |
5 | export const styles = StyleSheet.create({
6 | container: {
7 | paddingVertical: 15,
8 | paddingHorizontal: 15,
9 | borderColor,
10 | borderBottomWidth: 1 / PixelRatio.get(),
11 | width: '100%',
12 | },
13 | last: {
14 | borderBottomWidth: 0,
15 | },
16 | });
17 |
--------------------------------------------------------------------------------
/src/components/form/FormListItem/FormListItem.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {View} from 'react-native';
3 |
4 | import {styles} from './FormListItem.styles';
5 |
6 | interface IFormListItemProps {
7 | last?: boolean;
8 | }
9 |
10 | export class FormListItem extends PureComponent {
11 | public static defaultProps = {
12 | last: false,
13 | };
14 | public render() {
15 | const {children, last} = this.props;
16 |
17 | return (
18 |
19 | {children}
20 |
21 | );
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/components/form/FormListItem/index.ts:
--------------------------------------------------------------------------------
1 | export * from './FormListItem';
2 |
--------------------------------------------------------------------------------
/src/components/form/Switch/Switch.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const borderColor = '#b5b5b5';
4 |
5 | const height = 30;
6 |
7 | export const styles = StyleSheet.create({
8 | container: {
9 | flexDirection: 'row',
10 | height,
11 | alignItems: 'center',
12 | },
13 | title: {
14 | flex: 1,
15 | flexDirection: 'row',
16 | height,
17 | alignItems: 'center',
18 | },
19 | errorText: {
20 | color: 'red',
21 | },
22 | });
23 |
--------------------------------------------------------------------------------
/src/components/form/Switch/index.ts:
--------------------------------------------------------------------------------
1 | export * from './Switch';
2 |
--------------------------------------------------------------------------------
/src/components/form/TextInput/TextInput.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, Platform, StyleSheet} from 'react-native';
2 |
3 | export const borderColor = '#b5b5b5';
4 |
5 | export const styles = StyleSheet.create({
6 | flexRow: {
7 | flexDirection: 'row',
8 | },
9 | title: {
10 | width: '100%',
11 | flexDirection: 'row',
12 | },
13 | errorText: {
14 | width: '100%',
15 | color: 'red',
16 | },
17 | textInput: {
18 | height: 40,
19 | width: '100%',
20 | borderColor,
21 | borderBottomWidth: Platform.OS === 'ios' ? 1 / PixelRatio.get() : 0,
22 | marginBottom: 20,
23 | },
24 | titleMultine: {
25 | fontSize: 11,
26 | },
27 | });
28 |
--------------------------------------------------------------------------------
/src/components/form/TextInput/__tests__/TextInput.styles.android.spec.ts:
--------------------------------------------------------------------------------
1 | import {styles} from '../TextInput.styles';
2 |
3 | jest.mock('Platform', () => ({
4 | OS: 'android',
5 | }));
6 |
7 | describe('Components', () => {
8 | describe('TextInputStyles', () => {
9 | it('android should renders correctly', () => {
10 | expect((styles.textInput as any).borderBottomWidth).toEqual(0);
11 | });
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/src/components/form/TextInput/__tests__/TextInput.styles.ios.spec.ts:
--------------------------------------------------------------------------------
1 | import {styles} from '../TextInput.styles';
2 |
3 | jest.mock('Platform', () => ({
4 | OS: 'ios',
5 | }));
6 |
7 | describe('Components', () => {
8 | describe('TextInputStyles', () => {
9 | it('ios should renders correctly', () => {
10 | expect((styles.textInput as any).borderBottomWidth).toEqual(0.5);
11 | });
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/src/components/form/TextInput/index.ts:
--------------------------------------------------------------------------------
1 | export * from './TextInput';
2 |
--------------------------------------------------------------------------------
/src/components/index.ts:
--------------------------------------------------------------------------------
1 | export * from './Button';
2 | export * from './Back';
3 | export * from './BottomNav';
4 | export * from './ContactListItem';
5 | export * from './Navbar';
6 | export * from './Navbar/back/NavbarIOSBack';
7 | export * from './ContactAvatar';
8 | export * from './Touchable';
9 | export * from './FontelloIcon';
10 | export * from './EmptyActivity';
11 | export * from './Checkbox';
12 | export * from './LastTwoYearsStatistics';
13 | export * from './ListItem';
14 | export * from './form/Switch';
15 | export * from './form/TextInput';
16 | export * from './form/FormListItem';
17 | export * from './form/ContactChooser';
18 |
--------------------------------------------------------------------------------
/src/components/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@components"
3 | }
4 |
--------------------------------------------------------------------------------
/src/containers/ActionSheet/ActionSheetContainer.ts:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {navigate} from '@navigator/NavigationService';
4 | import {ActionSheet} from './ActionSheet';
5 |
6 | export const ActionSheetContainer = connect(
7 | null,
8 | dispatch => ({
9 | navigate: routeName => navigate(routeName),
10 | }),
11 | null,
12 | {withRef: true}
13 | )(ActionSheet);
14 |
--------------------------------------------------------------------------------
/src/containers/ActionSheet/index.ts:
--------------------------------------------------------------------------------
1 | export {ActionSheetContainer as ActionSheet} from './ActionSheetContainer';
2 |
--------------------------------------------------------------------------------
/src/containers/CodePush/CodePushContainer.tsx:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {IRootState} from '@models';
4 | import {CodePush} from './CodePush';
5 |
6 | export const CodePushContainer = connect((state: IRootState) => ({
7 | beta: state.beta,
8 | }))(CodePush);
9 |
--------------------------------------------------------------------------------
/src/containers/Contacts/Contacts.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | header: {
5 | marginVertical: 10,
6 | flexDirection: 'row',
7 | paddingHorizontal: 5,
8 | },
9 | headerCentered: {
10 | alignSelf: 'center',
11 | },
12 | });
13 |
--------------------------------------------------------------------------------
/src/containers/Contacts/ContactsContainer.ts:
--------------------------------------------------------------------------------
1 | import {IRootState} from '@redux/rootReducer';
2 | import {connect} from 'react-redux';
3 |
4 | import {getContacts, searchContacts} from '@redux/contacts';
5 | import {Contacts} from './Contacts';
6 |
7 | export const ContactsContainer = connect(
8 | (state: IRootState) => {
9 | const isSearching = state.searchContacts.query !== '';
10 | const obj = isSearching ? state.searchContacts : state.getAllContacts;
11 |
12 | return {
13 | isSearching,
14 | contacts: obj.items.map(item => state.contacts[item]),
15 | isFetching: obj.isFetching,
16 | count: obj.count,
17 | };
18 | },
19 | dispatch => {
20 | return {
21 | getContacts: () => dispatch(getContacts()),
22 | searchContacts: query => dispatch(searchContacts(query)),
23 | };
24 | }
25 | )(Contacts);
26 |
--------------------------------------------------------------------------------
/src/containers/Contacts/Navbar/Navbar.props.ts:
--------------------------------------------------------------------------------
1 | export interface INavbarProps {
2 | onSearchTextChanged: (query) => void;
3 | onBack?: (...args) => any;
4 | }
5 |
--------------------------------------------------------------------------------
/src/containers/Contacts/Navbar/Navbar.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | import {contraintTop} from '@theme';
4 |
5 | export const styles = StyleSheet.create({
6 | navbar: {
7 | marginTop: contraintTop,
8 | },
9 | navbarLogo: {
10 | marginTop: 7,
11 | marginLeft: 8,
12 | },
13 | searchBar: {
14 | width: 245,
15 | height: 35,
16 | marginTop: 4,
17 | },
18 | });
19 |
--------------------------------------------------------------------------------
/src/containers/Contacts/Navbar/Navbar.ts:
--------------------------------------------------------------------------------
1 | import {Platform} from 'react-native';
2 | import {Navbar as NavbarAndroid} from './Navbar.android';
3 | import {Navbar as NavbarIOS} from './Navbar.ios';
4 |
5 | export const Navbar = Platform.OS === 'ios' ? NavbarIOS : NavbarAndroid;
6 |
--------------------------------------------------------------------------------
/src/containers/Contacts/assets/no-contacts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/containers/Contacts/assets/no-contacts.png
--------------------------------------------------------------------------------
/src/containers/Contacts/assets/no-contacts@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/containers/Contacts/assets/no-contacts@2x.png
--------------------------------------------------------------------------------
/src/containers/Contacts/assets/no-contacts@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/containers/Contacts/assets/no-contacts@3x.png
--------------------------------------------------------------------------------
/src/containers/Contacts/assets/no-results.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/containers/Contacts/assets/no-results.png
--------------------------------------------------------------------------------
/src/containers/Contacts/assets/no-results@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/containers/Contacts/assets/no-results@2x.png
--------------------------------------------------------------------------------
/src/containers/Contacts/assets/no-results@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/containers/Contacts/assets/no-results@3x.png
--------------------------------------------------------------------------------
/src/containers/InitialState/InitialStateContainer.ts:
--------------------------------------------------------------------------------
1 | import {connect, MapDispatchToProps} from 'react-redux';
2 |
3 | import {navigate} from '@navigator/NavigationService';
4 | import {subscribeBeta} from '@redux/beta';
5 | import {getContacts} from '@redux/contacts';
6 | import {setToken} from '@redux/user';
7 | import {InitialState} from './InitialState';
8 |
9 | export const InitialStateContainer = connect(
10 | null,
11 | // TODO
12 | (dispatch: MapDispatchToProps) => ({
13 | navigate: routeName => navigate(routeName),
14 | setToken: token => dispatch(setToken(token)),
15 | getContacts: () => dispatch(getContacts()),
16 | subscribeBeta: isSubscribed => dispatch(subscribeBeta(isSubscribed)),
17 | })
18 | )(InitialState);
19 |
--------------------------------------------------------------------------------
/src/i18n/index.ts:
--------------------------------------------------------------------------------
1 | import i18next from 'i18next';
2 | import moment from 'moment';
3 | import DeviceInfo from 'react-native-device-info';
4 |
5 | import en from './locales/en';
6 | import fr from './locales/fr';
7 |
8 | import 'moment/src/locale/fr';
9 |
10 | const locale = DeviceInfo.getDeviceLocale();
11 | moment.locale([locale, 'en']);
12 |
13 | i18next.init({
14 | lng: locale,
15 | fallbackLng: 'en',
16 | resources: {en, fr},
17 | // @ts-ignore TODO Fix this
18 | debug: __DEV__ && !(global as any).jest,
19 | });
20 |
21 | export const I18n = i18next;
22 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/activities.ts:
--------------------------------------------------------------------------------
1 | export const activities = {
2 | activities: 'Activities',
3 | emptyTitle: 'Have you done an activity with {{name}} lately?',
4 | emptySubtitle: 'Keep track of what you’ve done.',
5 | };
6 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/auth.ts:
--------------------------------------------------------------------------------
1 | export const auth = {
2 | launch1: `Keep track of every interaction with your friend and family!`,
3 | launch2: `Remember when you last called, what you talked about, the name of their kids or what they prefer to eat!`,
4 | signinTitle: `Sign in with your account`,
5 | yourEmail: 'Your email',
6 | emailPlaceholder: 'email@example.com',
7 | yourPassword: 'Your password',
8 | signin: 'Sign in',
9 | signinIn: 'Signin in',
10 | badCredentials: 'Bad credentials',
11 | };
12 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/calls.ts:
--------------------------------------------------------------------------------
1 | export const calls = {
2 | calls: 'Phone calls',
3 | emptyTitle: 'Enter details about phone calls you make.',
4 | emptySubtitle: 'So you can refer to it at a later time.',
5 | };
6 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/common.ts:
--------------------------------------------------------------------------------
1 | export const common = {
2 | search: 'Search',
3 | lastUpdated: 'Last updated on {{- date}}',
4 | dashboard: 'Dashboard',
5 | add: 'Add',
6 | journal: 'Journal',
7 | settings: 'Settings',
8 | cancel: 'Cancel',
9 | yearDisplay: 'In {{year}}',
10 | getstarted: 'Get started',
11 | yourMonicaUrl: 'Your Monica server url',
12 | edit: 'Edit',
13 |
14 | form: {
15 | required: 'Is required',
16 | invalid: 'Is invalid',
17 | },
18 | };
19 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/contacts.ts:
--------------------------------------------------------------------------------
1 | export const contacts = {
2 | contacts: 'Contacts',
3 | countHeader: {
4 | before: 'You have',
5 | after: 'contact',
6 | after_plural: 'contacts',
7 | },
8 |
9 | age: '{{age}} years old',
10 | add: 'Add a contact',
11 | none: 'No contact found.',
12 | addOne: 'To add your first contact, use the “+” button below.',
13 | search: 'Search your contacts',
14 |
15 | relationships: {
16 | relationships: 'Relationships',
17 | relations: 'Relations',
18 | none: 'No relationship',
19 | },
20 | meet: {
21 | how: 'How you met',
22 | through: 'Met through {{name}}',
23 | none: 'No meet information',
24 | },
25 | work: {
26 | work: 'Work info',
27 | none: 'No work information',
28 | },
29 | contact: {
30 | contact: 'Contact',
31 | none: 'No contact information',
32 | },
33 |
34 | chooser: {
35 | noContact: 'No contact',
36 | },
37 | };
38 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/debts.ts:
--------------------------------------------------------------------------------
1 | export const debts = {
2 | debts: 'Debts',
3 | youOwe: 'You owe',
4 | owesYou: '{{name}} owes you',
5 | emptyTitle: 'Money doesn’t buy happiness.',
6 | emptySubtitle:
7 | 'But having no debts that you owe is a way to stay happy in your friendship.',
8 | };
9 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/gifts.ts:
--------------------------------------------------------------------------------
1 | export const gifts = {
2 | gifts: 'Gifts',
3 | offered: 'offered',
4 | idea: 'idea',
5 | emptyTitle:
6 | 'Is there a better way to show how much you appreciate someone than to offer a gift?',
7 | emptySubtitle: 'Yes, there is. But a gift is still a nice touch.',
8 | };
9 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/index.ts:
--------------------------------------------------------------------------------
1 | import {activities} from './activities';
2 | import {auth} from './auth';
3 | import {calls} from './calls';
4 | import {common} from './common';
5 | import {contacts} from './contacts';
6 | import {debts} from './debts';
7 | import {gifts} from './gifts';
8 | import {notes} from './notes';
9 | import {reminders} from './reminders';
10 | import {settings} from './settings';
11 | import {tasks} from './tasks';
12 |
13 | export default {
14 | activities,
15 | auth,
16 | calls,
17 | common,
18 | contacts,
19 | debts,
20 | gifts,
21 | notes,
22 | reminders,
23 | tasks,
24 | settings,
25 | };
26 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/notes.ts:
--------------------------------------------------------------------------------
1 | export const notes = {
2 | notes: 'Notes',
3 | edit: 'Edit a note',
4 | add: 'Add a note',
5 | emptyTitle: 'Notes are great to record precious details about your contacts.',
6 | emptySubtitle: 'Just write down what you have in mind.',
7 | save: 'Done',
8 | chooseContact: 'Choose a contact for this note',
9 | form: {
10 | body: 'Content',
11 | is_favorited: 'Favorite',
12 | },
13 | };
14 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/reminders.ts:
--------------------------------------------------------------------------------
1 | export const reminders = {
2 | reminders: 'Reminders',
3 | emptyTitle: 'Be reminded at the right time, for things that matter.',
4 | emptySubtitle: 'Your memory might let you down - we won’t.',
5 | frequency: {
6 | year: 'every year',
7 | month: 'every month',
8 | day: 'every day',
9 | one_time: 'one time',
10 | },
11 | };
12 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/settings.ts:
--------------------------------------------------------------------------------
1 | export const settings = {
2 | settings: 'Settings',
3 | betaInstall: 'Enable advanced features.',
4 | betaInstallExplanation: `If enabled, you'll have access to features reserved for users with a deep knowledge of how Monica works.`,
5 | version: 'Version: {{version}}',
6 | logout: 'Logout',
7 | freepik1: 'Most illustrations used in this app come from Freepik',
8 | freepik2: 'Designed by freepik.com',
9 | };
10 |
--------------------------------------------------------------------------------
/src/i18n/locales/en/tasks.ts:
--------------------------------------------------------------------------------
1 | export const tasks = {
2 | tasks: 'Tasks',
3 | emptyTitle: 'You have no excuses not to be multitask anymore.',
4 | emptySubtitle: 'Let Monica manage stuff for you.',
5 | };
6 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/activities.ts:
--------------------------------------------------------------------------------
1 | export const activities = {
2 | activities: 'Activités',
3 | };
4 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/auth.ts:
--------------------------------------------------------------------------------
1 | export const auth = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/calls.ts:
--------------------------------------------------------------------------------
1 | export const calls = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/common.ts:
--------------------------------------------------------------------------------
1 | export const common = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/contacts.ts:
--------------------------------------------------------------------------------
1 | export const contacts = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/debts.ts:
--------------------------------------------------------------------------------
1 | export const debts = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/gifts.ts:
--------------------------------------------------------------------------------
1 | export const gifts = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/index.ts:
--------------------------------------------------------------------------------
1 | import {activities} from './activities';
2 | import {auth} from './auth';
3 | import {calls} from './calls';
4 | import {common} from './common';
5 | import {contacts} from './contacts';
6 | import {debts} from './debts';
7 | import {gifts} from './gifts';
8 | import {notes} from './notes';
9 | import {reminders} from './reminders';
10 | import {settings} from './settings';
11 | import {tasks} from './tasks';
12 |
13 | export default {
14 | activities,
15 | auth,
16 | calls,
17 | common,
18 | contacts,
19 | debts,
20 | gifts,
21 | notes,
22 | reminders,
23 | tasks,
24 | settings,
25 | };
26 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/notes.ts:
--------------------------------------------------------------------------------
1 | export const notes = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/reminders.ts:
--------------------------------------------------------------------------------
1 | export const reminders = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/settings.ts:
--------------------------------------------------------------------------------
1 | export const settings = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/locales/fr/tasks.ts:
--------------------------------------------------------------------------------
1 | export const tasks = {};
2 |
--------------------------------------------------------------------------------
/src/i18n/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@i18n"
3 | }
4 |
--------------------------------------------------------------------------------
/src/models/actions.ts:
--------------------------------------------------------------------------------
1 | import {ActionType} from 'typesafe-actions';
2 |
3 | import * as activitiesActions from '@redux/activities/actions';
4 | import * as betaActions from '@redux/beta/actions';
5 | import * as callsActions from '@redux/calls/actions';
6 |
7 | import * as contactsActions from '@redux/contacts/actions';
8 | import * as debtsActions from '@redux/debts/actions';
9 | import * as giftsActions from '@redux/gifts/actions';
10 | import * as notesActions from '@redux/notes/actions';
11 | import * as remindersActions from '@redux/reminders/actions';
12 | import * as tasksActions from '@redux/tasks/actions';
13 | import * as userActions from '@redux/user/actions';
14 |
15 | const actions = {
16 | activitiesActions,
17 | betaActions,
18 | callsActions,
19 | contactsActions,
20 | debtsActions,
21 | giftsActions,
22 | notesActions,
23 | remindersActions,
24 | tasksActions,
25 | userActions,
26 | };
27 |
28 | export type IRootAction = ActionType;
29 |
--------------------------------------------------------------------------------
/src/models/activity.ts:
--------------------------------------------------------------------------------
1 | export interface IActivity {
2 | id: number;
3 | /** The name of the activity */
4 | summary: string;
5 | date_it_happened: string;
6 | /** An optional comment */
7 | description: string;
8 | }
9 |
--------------------------------------------------------------------------------
/src/models/call.ts:
--------------------------------------------------------------------------------
1 | export interface ICall {
2 | id: number;
3 | called_at: string;
4 | content: string;
5 | }
6 |
--------------------------------------------------------------------------------
/src/models/debt.ts:
--------------------------------------------------------------------------------
1 | import {IContact} from '@models';
2 |
3 | export interface IDebt {
4 | id: number;
5 | amount: number;
6 | contact: IContact;
7 | in_debt: 'yes' | 'no';
8 | reason: string;
9 | }
10 |
--------------------------------------------------------------------------------
/src/models/gift.ts:
--------------------------------------------------------------------------------
1 | export interface IGift {
2 | id: number;
3 | name: string;
4 | has_been_offered: boolean;
5 | is_an_idea: boolean;
6 | description: string;
7 | }
8 |
--------------------------------------------------------------------------------
/src/models/index.ts:
--------------------------------------------------------------------------------
1 | export {IRootState} from '@redux/rootReducer';
2 | export {IRootAction} from './actions';
3 | export * from './contact';
4 | export * from './activity';
5 | export * from './call';
6 | export * from './debt';
7 | export * from './gift';
8 | export * from './note';
9 | export * from './reminder';
10 | export * from './task';
11 |
12 | export interface IPageCountByContact {
13 | [contactId: number]: number;
14 | }
15 |
16 | export interface IMetaStatistics {
17 | [year: string]: number;
18 | }
19 |
--------------------------------------------------------------------------------
/src/models/note.ts:
--------------------------------------------------------------------------------
1 | import {IContact} from '@models';
2 |
3 | export interface INote {
4 | id: number;
5 | created_at: string;
6 | body: string;
7 | contact: IContact;
8 | is_favorited: boolean;
9 | }
10 |
--------------------------------------------------------------------------------
/src/models/operations.ts:
--------------------------------------------------------------------------------
1 | export {IBetaSubscribeOperation} from '@redux/beta';
2 | export {IUserLogoutOperation, IUserSetTokenOperation} from '@redux/user';
3 | export {IContactsGetOperation, IContactsSearchOperation} from '@redux/contacts';
4 | export {IActivitiesGetByContactOperation} from '@redux/activities';
5 | export {ICallsGetByContactOperation} from '@redux/calls';
6 | export {IDebtsGetByContactOperation} from '@redux/debts';
7 | export {IGiftsGetByContactOperation} from '@redux/gifts';
8 | export {INotesGetByContactOperation} from '@redux/notes';
9 | export {IRemindersGetByContactOperation} from '@redux/reminders';
10 | export {ITasksGetByContactOperation} from '@redux/tasks';
11 |
--------------------------------------------------------------------------------
/src/models/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@models"
3 | }
4 |
--------------------------------------------------------------------------------
/src/models/reminder.ts:
--------------------------------------------------------------------------------
1 | export interface IReminder {
2 | id: number;
3 | title: string;
4 | description: string;
5 | next_expected_date: string;
6 | frequency_type: 'one_time' | 'year' | 'month' | 'day';
7 | }
8 |
--------------------------------------------------------------------------------
/src/models/task.ts:
--------------------------------------------------------------------------------
1 | export interface ITask {
2 | id: number;
3 | title: string;
4 | description: string;
5 | completed: boolean;
6 | }
7 |
--------------------------------------------------------------------------------
/src/navigator/AppNavigator.tsx:
--------------------------------------------------------------------------------
1 | import React, {Component} from 'react';
2 | import {createSwitchNavigator} from 'react-navigation';
3 |
4 | import {InitialStateContainer} from '@src/containers/InitialState/InitialStateContainer';
5 | import {setTopLevelNavigator} from './NavigationService';
6 |
7 | import {AppStack} from './AppStack';
8 | import {AuthStack} from './AuthStack';
9 |
10 | export const SwitchNavigator = createSwitchNavigator(
11 | {
12 | AuthLoading: {
13 | screen: InitialStateContainer,
14 | },
15 | Auth: AuthStack,
16 | App: AppStack,
17 | },
18 | {
19 | initialRouteName: 'AuthLoading',
20 | }
21 | );
22 |
23 | export class AppNavigator extends Component {
24 | public render() {
25 | return (
26 | {
28 | setTopLevelNavigator(navigatorRef);
29 | }}
30 | />
31 | );
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/navigator/AuthStack.ts:
--------------------------------------------------------------------------------
1 | import {createStackNavigator} from 'react-navigation';
2 |
3 | import {LaunchScreen} from '@src/pages/Auth/Launch/LaunchScreen';
4 | import {LoginScreen} from '@src/pages/Auth/Login/LoginScreen';
5 |
6 | export const AuthStack = createStackNavigator(
7 | {
8 | Launch: {
9 | screen: LaunchScreen,
10 | },
11 | Login: {
12 | screen: LoginScreen,
13 | },
14 | },
15 | {
16 | navigationOptions: {header: null},
17 | }
18 | );
19 |
--------------------------------------------------------------------------------
/src/navigator/NavigationService.ts:
--------------------------------------------------------------------------------
1 | import {NavigationActions, StackActions} from 'react-navigation';
2 |
3 | let navigator;
4 |
5 | export const setTopLevelNavigator = navigatorRef => {
6 | navigator = navigatorRef;
7 | };
8 |
9 | export const navigate = (routeName: string, params?: any) => {
10 | navigator.dispatch(
11 | NavigationActions.navigate({
12 | routeName,
13 | params,
14 | })
15 | );
16 | };
17 |
18 | export const pop = () => {
19 | navigator.dispatch(StackActions.pop());
20 | };
21 |
22 | export type INavigateAction = typeof navigate;
23 | export type IPopAction = typeof pop;
24 |
--------------------------------------------------------------------------------
/src/navigator/TabsNavigator.ts:
--------------------------------------------------------------------------------
1 | import {createBottomTabNavigator} from 'react-navigation';
2 |
3 | import {Tabbar} from '../components/Tabbar/Tabbar';
4 |
5 | import {ContactsScreen} from '@src/pages/Contacts/ContactsScreen';
6 | // import {DashboardScreen} from '@src/pages/DashboardScreen';
7 | // import {JournalScreen} from '@src/pages/JournalScreen';
8 | import {SettingsScreen} from '@src/pages/Settings/SettingsScreen';
9 |
10 | export const TabsNavigator = createBottomTabNavigator(
11 | {
12 | // Dashboard: {
13 | // screen: DashboardScreen,
14 | // },
15 | Contacts: {
16 | screen: ContactsScreen,
17 | },
18 | // Journal: {
19 | // screen: JournalScreen,
20 | // },
21 | Settings: {
22 | screen: SettingsScreen,
23 | },
24 | },
25 | {
26 | tabBarComponent: Tabbar,
27 | }
28 | );
29 |
--------------------------------------------------------------------------------
/src/navigator/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@navigator"
3 | }
4 |
--------------------------------------------------------------------------------
/src/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@src"
3 | }
4 |
--------------------------------------------------------------------------------
/src/pages/AddContactScreen.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 | import {View} from 'react-native';
3 | import {connect} from 'react-redux';
4 |
5 | import {Navbar} from '@components';
6 | import {I18n} from '@i18n';
7 | import {IPopAction, pop as popAction} from '@navigator/NavigationService';
8 | import {appScreensStyles} from '@theme';
9 |
10 | interface IAddContactProps {
11 | pop: IPopAction;
12 | }
13 |
14 | export class AddContact extends PureComponent {
15 | public render() {
16 | const {pop} = this.props;
17 | return (
18 |
19 |
20 |
21 | );
22 | }
23 | }
24 |
25 | export const AddContactScreen = connect(
26 | null,
27 | dispatch => ({
28 | pop: () => popAction(),
29 | })
30 | )(AddContact);
31 |
--------------------------------------------------------------------------------
/src/pages/Auth/Launch/LaunchScreen.ts:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {navigate} from '@navigator/NavigationService';
4 | import {Launch} from './Launch';
5 |
6 | export const LaunchScreen = connect(
7 | null,
8 | dispatch => {
9 | return {
10 | navigate: routeName => () => navigate(routeName),
11 | };
12 | }
13 | )(Launch);
14 |
--------------------------------------------------------------------------------
/src/pages/Auth/Launch/__tests__/Launch.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import toJson from 'enzyme-to-json';
3 | import React from 'react';
4 | import {Launch} from '../Launch';
5 |
6 | const emptyFunc = () => () => {
7 | return;
8 | };
9 |
10 | describe('Components', () => {
11 | describe('Launch', () => {
12 | it('should renders correctly', () => {
13 | const tree = shallow();
14 | expect(toJson(tree)).toMatchSnapshot();
15 | });
16 | });
17 | });
18 |
--------------------------------------------------------------------------------
/src/pages/Auth/Launch/assets/launch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Auth/Launch/assets/launch.png
--------------------------------------------------------------------------------
/src/pages/Auth/Launch/assets/launch@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Auth/Launch/assets/launch@2x.png
--------------------------------------------------------------------------------
/src/pages/Auth/Launch/assets/launch@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Auth/Launch/assets/launch@3x.png
--------------------------------------------------------------------------------
/src/pages/Auth/Login/LoginScreen.ts:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {navigate, pop} from '@navigator/NavigationService';
4 | import {setToken} from '@redux/user';
5 | import {Login} from './Login';
6 |
7 | export const mapDispatchToProps = dispatch => {
8 | return {
9 | navigate: routeName => () => navigate(routeName),
10 | navigateToAppStack: () => navigate('App'),
11 | pop,
12 | setToken: token => dispatch(setToken(token)),
13 | };
14 | };
15 |
16 | export const LoginScreen = connect(
17 | null,
18 | mapDispatchToProps
19 | )(Login);
20 |
--------------------------------------------------------------------------------
/src/pages/Auth/Login/assets/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Auth/Login/assets/login.png
--------------------------------------------------------------------------------
/src/pages/Auth/Login/assets/login@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Auth/Login/assets/login@2x.png
--------------------------------------------------------------------------------
/src/pages/Auth/Login/assets/login@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Auth/Login/assets/login@3x.png
--------------------------------------------------------------------------------
/src/pages/Auth/Login/form/LoginForm.model.ts:
--------------------------------------------------------------------------------
1 | export interface IProps {
2 | onSuccess: (values: any) => void;
3 | }
4 | export interface IValues {
5 | email: string;
6 | password: string;
7 | url: string;
8 | }
9 |
--------------------------------------------------------------------------------
/src/pages/ChooseContacts/ChooseContacts.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 |
3 | import {I18n} from '@i18n';
4 | import {IContact} from '@models';
5 | import {ContactsContainer} from '../../containers/Contacts/ContactsContainer';
6 |
7 | interface IContactsProps {
8 | navigation: any;
9 | pop: any;
10 | }
11 |
12 | export class ChooseContacts extends PureComponent {
13 | public render() {
14 | const {pop} = this.props;
15 |
16 | return (
17 |
22 | );
23 | }
24 |
25 | private onPress = (contactId: IContact) => () => {
26 | const {navigation} = this.props;
27 | navigation.state.params.returnData(contactId);
28 | navigation.goBack();
29 | };
30 | }
31 |
--------------------------------------------------------------------------------
/src/pages/ChooseContacts/ChooseContactsScreen.ts:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {pop} from '@navigator/NavigationService';
4 | import {ChooseContacts} from './ChooseContacts';
5 |
6 | export const ChooseContactsScreen = connect(
7 | null,
8 | (dispatch, props) => {
9 | return {
10 | pop: () => pop(),
11 | };
12 | }
13 | )(ChooseContacts);
14 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactActivityRow/ContactActivityRow.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | flexDirection: 'row',
6 | height: 50,
7 | alignItems: 'center',
8 | },
9 | image: {
10 | marginLeft: 5,
11 | marginRight: 10,
12 | },
13 | border: {
14 | height: 1 / PixelRatio.get(),
15 | backgroundColor: '#E2E4E5',
16 | },
17 | icon: {
18 | marginLeft: 10,
19 | },
20 | });
21 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/Contact.styles.tsx:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | marginTop: 5,
6 | },
7 | noInformation: {
8 | marginVertical: 30,
9 | textAlign: 'center',
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/Meet.styles.tsx:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | marginTop: 5,
6 | },
7 | noInformation: {
8 | marginVertical: 30,
9 | textAlign: 'center',
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/Relationships.styles.tsx:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | marginTop: 5,
6 | },
7 | noFamily: {
8 | marginVertical: 30,
9 | textAlign: 'center',
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/Work.styles.tsx:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | marginTop: 5,
6 | },
7 | noWorkInfo: {
8 | marginVertical: 30,
9 | textAlign: 'center',
10 | },
11 | });
12 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/__tests__/Contact.spec.tsx:
--------------------------------------------------------------------------------
1 | import {contact1} from '@src/__mock__/contact';
2 | import {shallow} from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 | import React from 'react';
5 | import {Contact} from '../Contact';
6 |
7 | describe('Pages', () => {
8 | describe('Contact / Contact', () => {
9 | it('should renders correctly', () => {
10 | expect(toJson(shallow())).toMatchSnapshot();
11 | });
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/__tests__/ContactInfos.spec.tsx:
--------------------------------------------------------------------------------
1 | import {contact1} from '@src/__mock__/contact';
2 | import {shallow} from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 | import React from 'react';
5 | import {ContactInfos} from '../ContactInfos';
6 |
7 | describe('Pages', () => {
8 | describe('Contact / ContactInfos', () => {
9 | it('should renders correctly', () => {
10 | expect(
11 | toJson(shallow())
12 | ).toMatchSnapshot();
13 | });
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/__tests__/Meet.spec.tsx:
--------------------------------------------------------------------------------
1 | import {contact1} from '@src/__mock__/contact';
2 | import {shallow} from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 | import React from 'react';
5 | import {Meet} from '../Meet';
6 |
7 | describe('Pages', () => {
8 | describe('Contact / Meet', () => {
9 | it('should renders correctly', () => {
10 | expect(toJson(shallow())).toMatchSnapshot();
11 | });
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/__tests__/Relationships.spec.tsx:
--------------------------------------------------------------------------------
1 | import {contact1} from '@src/__mock__/contact';
2 | import {shallow} from 'enzyme';
3 | import toJson from 'enzyme-to-json';
4 | import React from 'react';
5 | import {Relationships} from '../Relationships';
6 |
7 | describe('Pages', () => {
8 | describe('Contact / Relationships', () => {
9 | it('should renders correctly', () => {
10 | expect(
11 | toJson(shallow())
12 | ).toMatchSnapshot();
13 | });
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/__tests__/__snapshots__/Contact.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Pages Contact / Contact should renders correctly 1`] = `
4 |
11 |
16 |
21 |
22 | `;
23 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/__tests__/__snapshots__/Meet.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Pages Contact / Meet should renders correctly 1`] = `
4 |
11 |
16 |
21 |
22 | `;
23 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactInfos/__tests__/__snapshots__/Relationships.spec.tsx.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`Pages Contact / Relationships should renders correctly 1`] = `
4 |
11 |
19 | No relationship
20 |
21 |
22 | `;
23 |
--------------------------------------------------------------------------------
/src/pages/Contact/ContactScreen.ts:
--------------------------------------------------------------------------------
1 | import {IRootState} from '@models';
2 | import {connect, MapDispatchToProps} from 'react-redux';
3 |
4 | import {navigate, pop} from '@navigator/NavigationService';
5 | import {Contact} from './Contact';
6 |
7 | export interface IContactProps {
8 | navigation: {
9 | state: {
10 | params: number;
11 | };
12 | };
13 | }
14 |
15 | export const ContactScreen = connect(
16 | (state: IRootState, props: IContactProps) => ({
17 | contact: state.contacts[props.navigation.state.params],
18 | }),
19 | // TODO
20 | (dispatch: MapDispatchToProps) => ({
21 | pop,
22 | navigate: (routeName, contactId) => () => navigate(routeName, contactId),
23 | })
24 | )(Contact);
25 |
--------------------------------------------------------------------------------
/src/pages/Contact/__tests__/Contact.spec.tsx:
--------------------------------------------------------------------------------
1 | import {shallow} from 'enzyme';
2 | import React from 'react';
3 | import {Contact} from '../Contact';
4 |
5 | describe('Pages', () => {
6 | describe('Contact', () => {
7 | const pop = jest.fn();
8 | const navigate = jest.fn();
9 | navigate.mockReturnValue(jest.fn());
10 | const contact = {
11 | statistics: {
12 | number_of_calls: 0,
13 | number_of_activities: 0,
14 | number_of_reminders: 0,
15 | number_of_tasks: 0,
16 | number_of_notes: 0,
17 | number_of_gifts: 0,
18 | number_of_debts: 0,
19 | },
20 | };
21 |
22 | it('should not have a componentWillReceiveProps method', () => {
23 | const tree = shallow(
24 |
25 | );
26 | expect(tree.instance().componentWillMount).toBeUndefined();
27 | });
28 | });
29 | });
30 |
--------------------------------------------------------------------------------
/src/pages/Contacts/Contacts.tsx:
--------------------------------------------------------------------------------
1 | import React, {PureComponent} from 'react';
2 |
3 | import {IContact} from '@models';
4 | import {ContactsContainer} from '../../containers/Contacts/ContactsContainer';
5 |
6 | interface IContactsProps {
7 | navigateToContact: (contact: IContact) => any;
8 | }
9 |
10 | export class Contacts extends PureComponent {
11 | public render() {
12 | const {navigateToContact} = this.props;
13 |
14 | return ;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/pages/Contacts/ContactsScreen.ts:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {IContact} from '@models';
4 | import {navigate} from '@navigator/NavigationService';
5 | import {Contacts} from './Contacts';
6 |
7 | export const ContactsScreen = connect(
8 | null,
9 | dispatch => {
10 | return {
11 | navigateToContact: (contact: IContact) => () =>
12 | navigate('Contact', contact.id),
13 | };
14 | }
15 | )(Contacts);
16 |
--------------------------------------------------------------------------------
/src/pages/DashboardScreen.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {View} from 'react-native';
3 |
4 | import {Navbar} from '@components';
5 | import {I18n} from '@i18n';
6 | import {appScreensStyles} from '@theme';
7 |
8 | export const DashboardScreen = () => (
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/src/pages/Entities/Activities/List/ActivitiesList.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | headerContainer: {
5 | backgroundColor: 'white',
6 | paddingHorizontal: 15,
7 | },
8 | activityContainer: {
9 | paddingVertical: 20,
10 | paddingHorizontal: 15,
11 | backgroundColor: 'white',
12 | borderColor: '#E2E4E5',
13 | borderBottomWidth: 1 / PixelRatio.get(),
14 | },
15 | textLeft: {
16 | color: '#355974',
17 | },
18 | textRight: {
19 | color: '#97A5B2',
20 | },
21 | textInfo: {
22 | marginTop: 5,
23 | fontSize: 14,
24 | },
25 | });
26 |
--------------------------------------------------------------------------------
/src/pages/Entities/Activities/List/assets/empty-activities.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Activities/List/assets/empty-activities.png
--------------------------------------------------------------------------------
/src/pages/Entities/Activities/List/assets/empty-activities@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Activities/List/assets/empty-activities@2x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Activities/List/assets/empty-activities@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Activities/List/assets/empty-activities@3x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Calls/List/CallsList.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | headerContainer: {
5 | backgroundColor: 'white',
6 | paddingHorizontal: 15,
7 | },
8 | callContainer: {
9 | paddingVertical: 20,
10 | paddingHorizontal: 15,
11 | backgroundColor: 'white',
12 | borderColor: '#E2E4E5',
13 | borderBottomWidth: 1 / PixelRatio.get(),
14 | },
15 | textLeft: {
16 | color: '#355974',
17 | },
18 | textRight: {
19 | color: '#97A5B2',
20 | },
21 | textInfo: {
22 | marginTop: 5,
23 | fontSize: 14,
24 | },
25 | });
26 |
--------------------------------------------------------------------------------
/src/pages/Entities/Calls/List/CallsListScreen.ts:
--------------------------------------------------------------------------------
1 | import {IRootState} from '@models';
2 | import {connect} from 'react-redux';
3 |
4 | import {pop} from '@navigator/NavigationService';
5 | import {getCallsByContact} from '@redux/calls';
6 | import {CallsList} from './CallsList';
7 |
8 | export const mapStateToProps = (state: IRootState, {navigation}) => {
9 | const contact = state.contacts[navigation.state.params];
10 | return {
11 | calls: (contact.calls || []).map(callId => state.calls[callId]),
12 | isFetching: state.getCallsByContact.isFetching,
13 | statistics: state.getCallsByContact.statistics,
14 | };
15 | };
16 |
17 | export const mapDispatchToProps = (dispatch, {navigation}) => ({
18 | pop,
19 | getCallsByContact: () => dispatch(getCallsByContact(navigation.state.params)),
20 | });
21 |
22 | export const CallsListScreen = connect(
23 | mapStateToProps,
24 | mapDispatchToProps
25 | )(CallsList);
26 |
--------------------------------------------------------------------------------
/src/pages/Entities/Calls/List/assets/empty-calls.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Calls/List/assets/empty-calls.png
--------------------------------------------------------------------------------
/src/pages/Entities/Calls/List/assets/empty-calls@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Calls/List/assets/empty-calls@2x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Calls/List/assets/empty-calls@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Calls/List/assets/empty-calls@3x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Debts/List/DebtsList.styles.tsx:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | import {primaryColor} from '@theme';
4 |
5 | export const styles = StyleSheet.create({
6 | debtContainer: {
7 | paddingVertical: 20,
8 | paddingHorizontal: 15,
9 | backgroundColor: 'white',
10 | borderColor: '#E2E4E5',
11 | borderBottomWidth: 1 / PixelRatio.get(),
12 | },
13 | headerContainer: {
14 | flexDirection: 'row',
15 | marginBottom: 10,
16 | },
17 | badge: {
18 | paddingHorizontal: 5,
19 | paddingVertical: 2,
20 | borderRadius: 5,
21 | },
22 | badgeText: {
23 | color: 'white',
24 | fontSize: 13,
25 | },
26 | badgeSuccess: {
27 | backgroundColor: primaryColor,
28 | },
29 | badgeError: {
30 | backgroundColor: 'red',
31 | },
32 | amountText: {
33 | marginTop: 2,
34 | marginLeft: 6,
35 | },
36 | reasonText: {
37 | fontSize: 13,
38 | },
39 | });
40 |
--------------------------------------------------------------------------------
/src/pages/Entities/Debts/List/DebtsListScreen.tsx:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {pop} from '@navigator/NavigationService';
4 | import {getDebtsByContact} from '@redux/debts';
5 | import {DebtsList} from './DebtsList';
6 |
7 | export const mapStateToProps = (state, {navigation}) => {
8 | const contact = state.contacts[navigation.state.params];
9 | return {
10 | debts: (contact.debts || []).map(noteId => state.debts[noteId]),
11 | isFetching: state.getDebtsByContact.isFetching,
12 | };
13 | };
14 |
15 | export const mapDispatchToProps = (dispatch, {navigation}) => ({
16 | pop,
17 | getDebtsByContact: () => dispatch(getDebtsByContact(navigation.state.params)),
18 | });
19 |
20 | export const DebtsListScreen = connect(
21 | mapStateToProps,
22 | mapDispatchToProps
23 | )(DebtsList);
24 |
--------------------------------------------------------------------------------
/src/pages/Entities/Debts/List/assets/empty-debts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Debts/List/assets/empty-debts.png
--------------------------------------------------------------------------------
/src/pages/Entities/Debts/List/assets/empty-debts@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Debts/List/assets/empty-debts@2x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Debts/List/assets/empty-debts@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Debts/List/assets/empty-debts@3x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Gifts/List/GiftsList.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | import {primaryColor} from '@theme';
4 |
5 | export const styles = StyleSheet.create({
6 | giftContainer: {
7 | paddingVertical: 20,
8 | paddingHorizontal: 15,
9 | backgroundColor: 'white',
10 | borderColor: '#E2E4E5',
11 | borderBottomWidth: 1 / PixelRatio.get(),
12 | },
13 | descriptionText: {
14 | color: '#818181',
15 | fontSize: 14,
16 | marginTop: 5,
17 | },
18 | badgeContainer: {
19 | flexDirection: 'row',
20 | marginTop: 10,
21 | },
22 | badge: {
23 | paddingHorizontal: 5,
24 | paddingVertical: 2,
25 | borderRadius: 5,
26 | backgroundColor: primaryColor,
27 | },
28 | badgeText: {
29 | color: 'white',
30 | fontSize: 13,
31 | },
32 | });
33 |
--------------------------------------------------------------------------------
/src/pages/Entities/Gifts/List/GiftsListScreen.ts:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {pop} from '@navigator/NavigationService';
4 | import {getGiftsByContact} from '@redux/gifts';
5 | import {GiftsList} from './GiftsList';
6 |
7 | export const mapStateToProps = (state, {navigation}) => {
8 | const contact = state.contacts[navigation.state.params];
9 | return {
10 | gifts: (contact.gifts || []).map(giftId => state.gifts[giftId]),
11 | isFetching: state.getGiftsByContact.isFetching,
12 | };
13 | };
14 |
15 | export const mapDispatchToProps = (dispatch, {navigation}) => ({
16 | pop,
17 | getGiftsByContact: () => dispatch(getGiftsByContact(navigation.state.params)),
18 | });
19 |
20 | export const GiftsListScreen = connect(
21 | mapStateToProps,
22 | mapDispatchToProps
23 | )(GiftsList);
24 |
--------------------------------------------------------------------------------
/src/pages/Entities/Gifts/List/assets/empty-gifts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Gifts/List/assets/empty-gifts.png
--------------------------------------------------------------------------------
/src/pages/Entities/Gifts/List/assets/empty-gifts@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Gifts/List/assets/empty-gifts@2x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Gifts/List/assets/empty-gifts@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Gifts/List/assets/empty-gifts@3x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Notes/List/NotesList.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | noteContainer: {
5 | paddingVertical: 20,
6 | paddingHorizontal: 15,
7 | backgroundColor: 'white',
8 | borderColor: '#E2E4E5',
9 | borderBottomWidth: 1 / PixelRatio.get(),
10 | },
11 | date: {
12 | fontSize: 12,
13 | marginBottom: 8,
14 | flex: 1,
15 | },
16 | favorite: {
17 | position: 'relative',
18 | bottom: 3,
19 | },
20 | });
21 |
--------------------------------------------------------------------------------
/src/pages/Entities/Notes/List/assets/empty-notes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Notes/List/assets/empty-notes.png
--------------------------------------------------------------------------------
/src/pages/Entities/Notes/List/assets/empty-notes@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Notes/List/assets/empty-notes@2x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Notes/List/assets/empty-notes@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Notes/List/assets/empty-notes@3x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Notes/Upsert/NotesUpsert.style.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | container: {
5 | backgroundColor: 'white',
6 | borderColor: '#E2E4E5',
7 | borderBottomWidth: 1 / PixelRatio.get(),
8 | },
9 | });
10 |
--------------------------------------------------------------------------------
/src/pages/Entities/Notes/Upsert/form/NoteForm.model.ts:
--------------------------------------------------------------------------------
1 | import {IContact, INote} from '@models';
2 | import {ReactNode, RefObject} from 'react';
3 |
4 | export interface IProps {
5 | onSuccess?: (values: IValues) => void;
6 | note?: INote;
7 | ref?: RefObject;
8 | contact: IContact;
9 | }
10 | export interface IValues {
11 | contact: IContact;
12 | body: string;
13 | is_favorited: boolean;
14 | }
15 |
--------------------------------------------------------------------------------
/src/pages/Entities/Notes/Upsert/form/NoteForm.styles.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | field: {
5 | height: 200,
6 | },
7 | });
8 |
--------------------------------------------------------------------------------
/src/pages/Entities/Reminders/List/RemindersListScreen.ts:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {pop} from '@navigator/NavigationService';
4 | import {getRemindersByContact} from '@redux/reminders';
5 | import {RemindersList} from './RemindersList';
6 |
7 | export const mapStateToProps = (state, {navigation}) => {
8 | const contact = state.contacts[navigation.state.params];
9 | return {
10 | reminders: (contact.reminders || []).map(
11 | reminderId => state.reminders[reminderId]
12 | ),
13 | isFetching: state.getRemindersByContact.isFetching,
14 | };
15 | };
16 |
17 | export const mapDispatchToProps = (dispatch, {navigation}) => ({
18 | pop,
19 | getRemindersByContact: () =>
20 | dispatch(getRemindersByContact(navigation.state.params)),
21 | });
22 |
23 | export const RemindersListScreen = connect(
24 | mapStateToProps,
25 | mapDispatchToProps
26 | )(RemindersList);
27 |
--------------------------------------------------------------------------------
/src/pages/Entities/Reminders/List/assets/empty-reminders.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Reminders/List/assets/empty-reminders.png
--------------------------------------------------------------------------------
/src/pages/Entities/Reminders/List/assets/empty-reminders@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Reminders/List/assets/empty-reminders@2x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Reminders/List/assets/empty-reminders@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Reminders/List/assets/empty-reminders@3x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Tasks/List/TasksList.styles.ts:
--------------------------------------------------------------------------------
1 | import {PixelRatio, StyleSheet} from 'react-native';
2 |
3 | export const styles = StyleSheet.create({
4 | taskContainer: {
5 | paddingVertical: 10,
6 | paddingHorizontal: 15,
7 | backgroundColor: 'white',
8 | borderColor: '#E2E4E5',
9 | borderBottomWidth: 1 / PixelRatio.get(),
10 | flexDirection: 'row',
11 | },
12 | descriptionText: {
13 | color: '#818181',
14 | fontSize: 14,
15 | marginTop: 5,
16 | },
17 | textContainer: {
18 | paddingLeft: 15,
19 | paddingRight: 30,
20 | },
21 | });
22 |
--------------------------------------------------------------------------------
/src/pages/Entities/Tasks/List/TasksListScreen.ts:
--------------------------------------------------------------------------------
1 | import {connect} from 'react-redux';
2 |
3 | import {pop} from '@navigator/NavigationService';
4 | import {getTasksByContact} from '@redux/tasks';
5 | import {TasksList} from './TasksList';
6 |
7 | export const mapStateToProps = (state, {navigation}) => {
8 | const contact = state.contacts[navigation.state.params];
9 | return {
10 | tasks: (contact.tasks || []).map(taskId => state.tasks[taskId]),
11 | isFetching: state.getTasksByContact.isFetching,
12 | };
13 | };
14 |
15 | export const mapDispatchToProps = (dispatch, {navigation}) => ({
16 | pop,
17 | getTasksByContact: () => dispatch(getTasksByContact(navigation.state.params)),
18 | });
19 |
20 | export const TasksListScreen = connect(
21 | mapStateToProps,
22 | mapDispatchToProps
23 | )(TasksList);
24 |
--------------------------------------------------------------------------------
/src/pages/Entities/Tasks/List/assets/empty-tasks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Tasks/List/assets/empty-tasks.png
--------------------------------------------------------------------------------
/src/pages/Entities/Tasks/List/assets/empty-tasks@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Tasks/List/assets/empty-tasks@2x.png
--------------------------------------------------------------------------------
/src/pages/Entities/Tasks/List/assets/empty-tasks@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/monicahq/old_mobile_app/c2579cb341182d5fd745027bf523d51edd0a517b/src/pages/Entities/Tasks/List/assets/empty-tasks@3x.png
--------------------------------------------------------------------------------
/src/pages/JournalScreen.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {View} from 'react-native';
3 |
4 | import {Navbar} from '@components';
5 | import {I18n} from '@i18n';
6 | import {appScreensStyles} from '@theme';
7 |
8 | export const JournalScreen = () => (
9 |
10 |
11 |
12 | );
13 |
--------------------------------------------------------------------------------
/src/pages/Settings/SettingsScreen.ts:
--------------------------------------------------------------------------------
1 | import {navigate} from '@navigator/NavigationService';
2 | import {subscribeBeta} from '@redux/beta';
3 | import {logout} from '@redux/user';
4 | import {connect} from 'react-redux';
5 |
6 | import {Settings} from './Settings';
7 |
8 | export const mapStateToProps = state => ({
9 | beta: state.beta.isSubscribed,
10 | });
11 |
12 | export const mapDispatchToProps = dispatch => ({
13 | logout: () => dispatch(logout()),
14 | goToLaunchScreen: () => navigate('Auth'),
15 | subscribeBeta: isSubscribed => dispatch(subscribeBeta(isSubscribed)),
16 | });
17 |
18 | export const SettingsScreen = connect(
19 | mapStateToProps,
20 | mapDispatchToProps
21 | )(Settings);
22 |
--------------------------------------------------------------------------------
/src/redux/activities/actions.ts:
--------------------------------------------------------------------------------
1 | import {IActivity, IMetaStatistics} from '@models';
2 | import {action} from 'typesafe-actions';
3 | import * as types from './types';
4 |
5 | export const getActivitiesByContactFetched = (contactId: number) =>
6 | action(types.GET_ACTIVITIES_BY_CONTACT_FETCHED, {
7 | contactId,
8 | });
9 |
10 | export const getActivitiesByContactSuccess = (
11 | contactId: number,
12 | activities: IActivity[],
13 | statistics: IMetaStatistics
14 | ) =>
15 | action(types.GET_ACTIVITIES_BY_CONTACT_SUCCESS, {
16 | activities,
17 | contactId,
18 | statistics,
19 | });
20 |
21 | export const getActivitiesByContactFailed = (error: Error) =>
22 | action(types.GET_ACTIVITIES_BY_CONTACT_FAILED, {
23 | error,
24 | });
25 |
--------------------------------------------------------------------------------
/src/redux/activities/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/activities/types.ts:
--------------------------------------------------------------------------------
1 | export const GET_ACTIVITIES_BY_CONTACT_FETCHED =
2 | 'Contacts/GET_ACTIVITIES_BY_CONTACT_FETCHED';
3 | export const GET_ACTIVITIES_BY_CONTACT_SUCCESS =
4 | 'Contacts/GET_ACTIVITIES_BY_CONTACT_SUCCESS';
5 | export const GET_ACTIVITIES_BY_CONTACT_FAILED =
6 | 'Contacts/GET_ACTIVITIES_BY_CONTACT_FAILED';
7 |
--------------------------------------------------------------------------------
/src/redux/beta/__tests__/actions.spec.ts:
--------------------------------------------------------------------------------
1 | import {subscribeBeta} from '../actions';
2 | import * as types from '../types';
3 |
4 | describe('Redux', () => {
5 | describe('Beta', () => {
6 | describe('Actions', () => {
7 | it('subscribeBeta true', () => {
8 | expect(subscribeBeta(true)).toEqual({
9 | type: types.SUBSCRIBE_BETA,
10 | payload: {
11 | isSubscribed: true,
12 | },
13 | });
14 | });
15 |
16 | it('subscribeBeta false', () => {
17 | expect(subscribeBeta(false)).toEqual({
18 | type: types.SUBSCRIBE_BETA,
19 | payload: {isSubscribed: false},
20 | });
21 | });
22 | });
23 | });
24 | });
25 |
--------------------------------------------------------------------------------
/src/redux/beta/actions.ts:
--------------------------------------------------------------------------------
1 | import {action} from 'typesafe-actions';
2 | import * as types from './types';
3 |
4 | export const subscribeBeta = (isSubscribed: boolean) =>
5 | action(types.SUBSCRIBE_BETA, {
6 | isSubscribed,
7 | });
8 |
--------------------------------------------------------------------------------
/src/redux/beta/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/beta/operations.ts:
--------------------------------------------------------------------------------
1 | import {AsyncStorage} from 'react-native';
2 |
3 | import {betaKey} from '@src/storage-keys';
4 | import * as actions from './actions';
5 |
6 | export type IBetaSubscribeOperation = typeof subscribeBeta;
7 |
8 | export function subscribeBeta(isSubscribed: boolean) {
9 | if (isSubscribed) {
10 | AsyncStorage.setItem(betaKey, 'true');
11 | } else {
12 | AsyncStorage.removeItem(betaKey);
13 | }
14 | return actions.subscribeBeta(isSubscribed);
15 | }
16 |
--------------------------------------------------------------------------------
/src/redux/beta/reducer.ts:
--------------------------------------------------------------------------------
1 | import {IRootAction} from '@models';
2 | import * as types from './types';
3 |
4 | export interface IBetaState {
5 | readonly ready: boolean;
6 | readonly isSubscribed: boolean;
7 | }
8 |
9 | const initialState: IBetaState = {
10 | ready: false,
11 | isSubscribed: false,
12 | };
13 |
14 | export const betaReducer = (
15 | state = initialState,
16 | action: IRootAction
17 | ): IBetaState => {
18 | switch (action.type) {
19 | case types.SUBSCRIBE_BETA:
20 | return {
21 | ready: true,
22 | isSubscribed: action.payload.isSubscribed,
23 | };
24 | }
25 |
26 | return state;
27 | };
28 |
--------------------------------------------------------------------------------
/src/redux/beta/types.ts:
--------------------------------------------------------------------------------
1 | export const SUBSCRIBE_BETA = 'Beta/SUBSCRIBE';
2 |
--------------------------------------------------------------------------------
/src/redux/calls/actions.ts:
--------------------------------------------------------------------------------
1 | import {ICall, IMetaStatistics} from '@models';
2 | import {action} from 'typesafe-actions';
3 | import * as types from './types';
4 |
5 | export const getCallsByContactFetched = (contactId: number) =>
6 | action(types.GET_CALLS_BY_CONTACT_FETCHED, {
7 | contactId,
8 | });
9 |
10 | export const getCallsByContactSuccess = (
11 | contactId: number,
12 | calls: ICall[],
13 | statistics: IMetaStatistics
14 | ) =>
15 | action(types.GET_CALLS_BY_CONTACT_SUCCESS, {
16 | calls,
17 | contactId,
18 | statistics,
19 | });
20 |
21 | export const getCallsByContactFailed = (error: Error) =>
22 | action(types.GET_CALLS_BY_CONTACT_FAILED, {
23 | error,
24 | });
25 |
--------------------------------------------------------------------------------
/src/redux/calls/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/calls/types.ts:
--------------------------------------------------------------------------------
1 | export const GET_CALLS_BY_CONTACT_FETCHED =
2 | 'Contacts/GET_CALLS_BY_CONTACT_FETCHED';
3 | export const GET_CALLS_BY_CONTACT_SUCCESS =
4 | 'Contacts/GET_CALLS_BY_CONTACT_SUCCESS';
5 | export const GET_CALLS_BY_CONTACT_FAILED =
6 | 'Contacts/GET_CALLS_BY_CONTACT_FAILED';
7 |
--------------------------------------------------------------------------------
/src/redux/configureStore.ts:
--------------------------------------------------------------------------------
1 | import {applyMiddleware, compose, createStore} from 'redux';
2 | import createDebounce from 'redux-debounced';
3 | import {composeWithDevTools} from 'redux-devtools-extension';
4 | import thunk from 'redux-thunk';
5 |
6 | import rootReducer, {IRootState} from './rootReducer';
7 |
8 | const enhancers = [createDebounce(), thunk];
9 |
10 | export default function configureStore(initialState?: IRootState) {
11 | const c: any = __DEV__ ? composeWithDevTools : compose;
12 | const enhancer = c(applyMiddleware(...enhancers));
13 |
14 | // TODO remove any
15 | return createStore(rootReducer, initialState! as any, enhancer);
16 | }
17 |
--------------------------------------------------------------------------------
/src/redux/contacts/actions.ts:
--------------------------------------------------------------------------------
1 | import {IContact} from '@models';
2 | import {action} from 'typesafe-actions';
3 | import * as types from './types';
4 |
5 | /**
6 | * Actions
7 | */
8 |
9 | export const getContactsFetched = () => action(types.GET_ALL_FETCHED);
10 |
11 | export const getContactsSuccess = (items: IContact[], count: number) =>
12 | action(types.GET_ALL_SUCCESS, {
13 | items,
14 | count,
15 | });
16 |
17 | export const getContactsFailed = (error: Error) =>
18 | action(types.GET_ALL_FAILED, {
19 | error,
20 | });
21 |
22 | export const searchContactsFetched = (query: string) =>
23 | action(types.SEARCH_FETCHED, {
24 | query,
25 | });
26 |
27 | export const searchContactsSuccess = (items: IContact[], count: number) =>
28 | action(types.SEARCH_SUCCESS, {
29 | items,
30 | count,
31 | });
32 |
33 | export const searchContactsFailed = (error: Error) =>
34 | action(types.SEARCH_FAILED, {
35 | error,
36 | });
37 |
--------------------------------------------------------------------------------
/src/redux/contacts/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/contacts/types.ts:
--------------------------------------------------------------------------------
1 | export const GET_ALL_FETCHED = 'Contacts/GET_ALL_FETCHED';
2 | export const GET_ALL_SUCCESS = 'Contacts/GET_ALL_SUCCESS';
3 | export const GET_ALL_FAILED = 'Contacts/GET_ALL_FAILED';
4 |
5 | export const SEARCH_FETCHED = 'Contacts/SEARCH_FETCHED';
6 | export const SEARCH_SUCCESS = 'Contacts/SEARCH_SUCCESS';
7 | export const SEARCH_FAILED = 'Contacts/SEARCH_FAILED';
8 |
--------------------------------------------------------------------------------
/src/redux/debts/actions.ts:
--------------------------------------------------------------------------------
1 | import {IDebt} from '@models';
2 | import {action} from 'typesafe-actions';
3 | import * as types from './types';
4 |
5 | export const getDebtsByContactFetched = (contactId: number) =>
6 | action(types.GET_DEBTS_BY_CONTACT_FETCHED, {
7 | contactId,
8 | });
9 |
10 | export const getDebtsByContactSuccess = (contactId: number, debts: IDebt[]) =>
11 | action(types.GET_DEBTS_BY_CONTACT_SUCCESS, {
12 | debts,
13 | contactId,
14 | });
15 |
16 | export const getDebtsByContactFailed = (error: Error) =>
17 | action(types.GET_DEBTS_BY_CONTACT_FAILED, {
18 | error,
19 | });
20 |
--------------------------------------------------------------------------------
/src/redux/debts/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/debts/types.ts:
--------------------------------------------------------------------------------
1 | export const GET_DEBTS_BY_CONTACT_FETCHED =
2 | 'Contacts/GET_DEBTS_BY_CONTACT_FETCHED';
3 | export const GET_DEBTS_BY_CONTACT_SUCCESS =
4 | 'Contacts/GET_DEBTS_BY_CONTACT_SUCCESS';
5 | export const GET_DEBTS_BY_CONTACT_FAILED =
6 | 'Contacts/GET_DEBTS_BY_CONTACT_FAILED';
7 |
--------------------------------------------------------------------------------
/src/redux/gifts/actions.ts:
--------------------------------------------------------------------------------
1 | import {IGift} from '@models';
2 | import {action} from 'typesafe-actions';
3 | import * as types from './types';
4 |
5 | export const getGiftsByContactFetched = (contactId: number) =>
6 | action(types.GET_GIFTS_BY_CONTACT_FETCHED, {
7 | contactId,
8 | });
9 |
10 | export const getGiftsByContactSuccess = (contactId: number, gifts: IGift[]) =>
11 | action(types.GET_GIFTS_BY_CONTACT_SUCCESS, {
12 | gifts,
13 | contactId,
14 | });
15 |
16 | export const getGiftsByContactFailed = (error: Error) =>
17 | action(types.GET_GIFTS_BY_CONTACT_FAILED, {
18 | error,
19 | });
20 |
--------------------------------------------------------------------------------
/src/redux/gifts/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/gifts/types.ts:
--------------------------------------------------------------------------------
1 | export const GET_GIFTS_BY_CONTACT_FETCHED =
2 | 'Contacts/GET_GIFTS_BY_CONTACT_FETCHED';
3 | export const GET_GIFTS_BY_CONTACT_SUCCESS =
4 | 'Contacts/GET_GIFTS_BY_CONTACT_SUCCESS';
5 | export const GET_GIFTS_BY_CONTACT_FAILED =
6 | 'Contacts/GET_GIFTS_BY_CONTACT_FAILED';
7 |
--------------------------------------------------------------------------------
/src/redux/notes/actions.ts:
--------------------------------------------------------------------------------
1 | import {INote} from '@models';
2 | import {action} from 'typesafe-actions';
3 | import * as types from './types';
4 |
5 | export const getNotesByContactFetched = (contactId: number) =>
6 | action(types.GET_NOTES_BY_CONTACT_FETCHED, {
7 | contactId,
8 | });
9 |
10 | export const getNotesByContactSuccess = (contactId: number, notes: INote[]) =>
11 | action(types.GET_NOTES_BY_CONTACT_SUCCESS, {
12 | notes,
13 | contactId,
14 | });
15 |
16 | export const getNotesByContactFailed = (error: Error) =>
17 | action(types.GET_NOTES_BY_CONTACT_FAILED, {
18 | error,
19 | });
20 |
21 | export const updateNote = (note: INote) => action(types.UPDATE_NOTE, note);
22 |
23 | export const addNote = (note: INote) => action(types.ADD_NOTE, note);
24 | export const updateNoteId = (noteId: any, newId: any) =>
25 | action(types.UPDATE_NOTE_ID, {noteId, newId});
26 |
27 | export const deleteNote = (note: INote, id?: any) =>
28 | action(types.DELETE_NOTE, {note, id});
29 |
--------------------------------------------------------------------------------
/src/redux/notes/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/notes/types.ts:
--------------------------------------------------------------------------------
1 | export const GET_NOTES_BY_CONTACT_FETCHED =
2 | 'Contacts/GET_NOTES_BY_CONTACT_FETCHED';
3 | export const GET_NOTES_BY_CONTACT_SUCCESS =
4 | 'Contacts/GET_NOTES_BY_CONTACT_SUCCESS';
5 | export const GET_NOTES_BY_CONTACT_FAILED =
6 | 'Contacts/GET_NOTES_BY_CONTACT_FAILED';
7 | export const UPDATE_NOTE = 'Contacts/NOTE_UPDATE';
8 | export const UPDATE_NOTE_ID = 'Contacts/UPDATE_NOTE_ID';
9 | export const ADD_NOTE = 'Contacts/NOTE_ADD';
10 | export const DELETE_NOTE = 'Contacts/NOTE_DELETE';
11 |
--------------------------------------------------------------------------------
/src/redux/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@redux"
3 | }
4 |
--------------------------------------------------------------------------------
/src/redux/reminders/actions.ts:
--------------------------------------------------------------------------------
1 | import {IReminder} from '@models';
2 | import {action} from 'typesafe-actions';
3 | import * as types from './types';
4 |
5 | export const getRemindersByContactFetched = (contactId: number) =>
6 | action(types.GET_REMINDERS_BY_CONTACT_FETCHED, {
7 | contactId,
8 | });
9 |
10 | export const getRemindersByContactSuccess = (
11 | contactId: number,
12 | reminders: IReminder[]
13 | ) =>
14 | action(types.GET_REMINDERS_BY_CONTACT_SUCCESS, {
15 | reminders,
16 | contactId,
17 | });
18 |
19 | export const getRemindersByContactFailed = (error: Error) =>
20 | action(types.GET_REMINDERS_BY_CONTACT_FAILED, {
21 | error,
22 | });
23 |
--------------------------------------------------------------------------------
/src/redux/reminders/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/reminders/types.ts:
--------------------------------------------------------------------------------
1 | export const GET_REMINDERS_BY_CONTACT_FETCHED =
2 | 'Contacts/GET_REMINDERS_BY_CONTACT_FETCHED';
3 | export const GET_REMINDERS_BY_CONTACT_SUCCESS =
4 | 'Contacts/GET_REMINDERS_BY_CONTACT_SUCCESS';
5 | export const GET_REMINDERS_BY_CONTACT_FAILED =
6 | 'Contacts/GET_REMINDERS_BY_CONTACT_FAILED';
7 |
--------------------------------------------------------------------------------
/src/redux/tasks/actions.ts:
--------------------------------------------------------------------------------
1 | import {ITask} from '@models';
2 | import {action} from 'typesafe-actions';
3 | import * as types from './types';
4 |
5 | export const getTasksByContactFetched = (contactId: number) =>
6 | action(types.GET_TASKS_BY_CONTACT_FETCHED, {
7 | contactId,
8 | });
9 |
10 | export const getTasksByContactSuccess = (contactId: number, tasks: ITask[]) =>
11 | action(types.GET_TASKS_BY_CONTACT_SUCCESS, {
12 | tasks,
13 | contactId,
14 | });
15 |
16 | export const getTasksByContactFailed = (error: Error) =>
17 | action(types.GET_TASKS_BY_CONTACT_FAILED, {
18 | error,
19 | });
20 |
--------------------------------------------------------------------------------
/src/redux/tasks/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/tasks/types.ts:
--------------------------------------------------------------------------------
1 | export const GET_TASKS_BY_CONTACT_FETCHED =
2 | 'Contacts/GET_TASKS_BY_CONTACT_FETCHED';
3 | export const GET_TASKS_BY_CONTACT_SUCCESS =
4 | 'Contacts/GET_TASKS_BY_CONTACT_SUCCESS';
5 | export const GET_TASKS_BY_CONTACT_FAILED =
6 | 'Contacts/GET_TASKS_BY_CONTACT_FAILED';
7 |
--------------------------------------------------------------------------------
/src/redux/user/__tests__/actions.spec.ts:
--------------------------------------------------------------------------------
1 | import {logout, setToken} from '../actions';
2 | import * as types from '../types';
3 |
4 | describe('Redux', () => {
5 | describe('User', () => {
6 | describe('Actions', () => {
7 | it('logout', () => {
8 | expect(logout()).toEqual({
9 | type: types.LOGOUT,
10 | });
11 | });
12 |
13 | it('setToken', () => {
14 | const token = 'my-token';
15 | expect(setToken(token)).toEqual({
16 | type: types.SET_TOKEN,
17 | payload: {
18 | token,
19 | },
20 | });
21 | });
22 | });
23 | });
24 | });
25 |
--------------------------------------------------------------------------------
/src/redux/user/__tests__/reducer.spec.ts:
--------------------------------------------------------------------------------
1 | import {logout, setToken} from '../actions';
2 | import {tokenReducer} from '../reducer';
3 |
4 | describe('Redux', () => {
5 | describe('User', () => {
6 | describe('Token Reducer', () => {
7 | it('should return the initial state', () => {
8 | expect(tokenReducer(undefined, {} as any)).toBe(null);
9 | });
10 |
11 | it('should handle setToken action', () => {
12 | const token = 'my-token';
13 | expect(tokenReducer(undefined, setToken(token))).toBe(token);
14 | });
15 |
16 | it('should handle logout action', () => {
17 | const token = 'my-token';
18 | expect(tokenReducer(token, logout())).toBe(null);
19 | });
20 | });
21 | });
22 | });
23 |
--------------------------------------------------------------------------------
/src/redux/user/actions.ts:
--------------------------------------------------------------------------------
1 | import {action} from 'typesafe-actions';
2 | import * as types from './types';
3 |
4 | export const setToken = (token: string) =>
5 | action(types.SET_TOKEN, {
6 | token,
7 | });
8 |
9 | export const logout = () => action(types.LOGOUT);
10 |
--------------------------------------------------------------------------------
/src/redux/user/index.ts:
--------------------------------------------------------------------------------
1 | export * from './operations';
2 |
--------------------------------------------------------------------------------
/src/redux/user/operations.ts:
--------------------------------------------------------------------------------
1 | import {AsyncStorage} from 'react-native';
2 |
3 | import {API} from '@api';
4 | import {tokenKey} from '@src/storage-keys';
5 | import * as actions from './actions';
6 |
7 | export type IUserSetTokenOperation = typeof setToken;
8 | export type IUserLogoutOperation = typeof logout;
9 |
10 | export function setToken(token: string) {
11 | API.setToken(token);
12 | // AsyncStorage.setItem(userKey, JSON.stringify(user));
13 | AsyncStorage.setItem(tokenKey, token);
14 | return actions.setToken(token);
15 | }
16 |
17 | export function logout() {
18 | API.setToken(null);
19 | // AsyncStorage.removeItem(userKey);
20 | AsyncStorage.removeItem(tokenKey);
21 | return actions.logout();
22 | }
23 |
--------------------------------------------------------------------------------
/src/redux/user/reducer.ts:
--------------------------------------------------------------------------------
1 | import {IRootAction} from '@models';
2 | import * as types from './types';
3 |
4 | export type ITokenState = string;
5 |
6 | export const tokenReducer = (
7 | state: ITokenState = null,
8 | action: IRootAction
9 | ): ITokenState => {
10 | switch (action.type) {
11 | case types.SET_TOKEN:
12 | return action.payload.token;
13 | case types.LOGOUT:
14 | return null;
15 | }
16 |
17 | return state;
18 | };
19 |
--------------------------------------------------------------------------------
/src/redux/user/types.ts:
--------------------------------------------------------------------------------
1 | export const SET_TOKEN = 'User/SET_TOKEN';
2 | export const LOGOUT = 'User/LOGOUT';
3 |
--------------------------------------------------------------------------------
/src/storage-keys.ts:
--------------------------------------------------------------------------------
1 | export const betaKey = '@Beta/key';
2 | export const tokenKey = '@User/token';
3 | export const urlKey = '@Api/url';
4 |
--------------------------------------------------------------------------------
/src/theme/appScreen.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const appScreensStyles = StyleSheet.create({
4 | container: {
5 | flex: 1,
6 | backgroundColor: 'white',
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/src/theme/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@theme"
3 | }
4 |
--------------------------------------------------------------------------------
/src/theme/preAuthScreen.ts:
--------------------------------------------------------------------------------
1 | import {StyleSheet} from 'react-native';
2 |
3 | export const preAuthScreensStyles = StyleSheet.create({
4 | container: {
5 | flex: 1,
6 | alignItems: 'center',
7 | justifyContent: 'center',
8 | backgroundColor: 'white',
9 | },
10 | centeredBlock: {
11 | paddingHorizontal: 30,
12 | width: '100%',
13 | justifyContent: 'center',
14 | alignItems: 'center',
15 | },
16 | primaryText: {
17 | fontSize: 18,
18 | fontWeight: 'bold',
19 | marginTop: 40,
20 | marginBottom: 20,
21 | textAlign: 'center',
22 | },
23 | secondaryText: {
24 | color: '#97A5B2',
25 | marginBottom: 20,
26 | textAlign: 'center',
27 | },
28 | });
29 |
--------------------------------------------------------------------------------
/src/utils/__tests__/gifts.spec.ts:
--------------------------------------------------------------------------------
1 | import {getLabel} from '../gifts';
2 |
3 | describe('Utils', () => {
4 | describe('Gifts', () => {
5 | describe('getLabel', () => {
6 | it('should display has been offered label', () => {
7 | const gift = {
8 | has_been_offered: true,
9 | };
10 | expect(getLabel(gift as any)).toBe('offered');
11 | });
12 |
13 | it('should display is an idea label', () => {
14 | const gift = {
15 | is_an_idea: true,
16 | };
17 | expect(getLabel(gift as any)).toBe('idea');
18 | });
19 |
20 | it('should return undefined in any other case', () => {
21 | const gift = {};
22 | expect(getLabel(gift as any)).toBe(undefined);
23 | });
24 | });
25 | });
26 | });
27 |
--------------------------------------------------------------------------------
/src/utils/gifts.ts:
--------------------------------------------------------------------------------
1 | import {I18n} from '@i18n';
2 | import {IGift} from '@models';
3 |
4 | export const getLabel = (gift: IGift) => {
5 | if (gift.has_been_offered) {
6 | return I18n.t('gifts:offered');
7 | }
8 | if (gift.is_an_idea) {
9 | return I18n.t('gifts:idea');
10 | }
11 | };
12 |
--------------------------------------------------------------------------------
/src/utils/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@utils"
3 | }
4 |
--------------------------------------------------------------------------------
/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["tslint:latest", "tslint-react", "tslint-config-prettier"],
3 | "rulesDirectory": [
4 | "tslint-plugin-prettier"
5 | ],
6 | "rules": {
7 | "prettier": [true, {
8 | "singleQuote": true,
9 | "trailingComma": "es5",
10 | "bracketSpacing": false
11 | }],
12 | "no-console": {
13 | "severity": "warning",
14 | "options": ["log", "info", "time"]
15 | },
16 | "no-submodule-imports": false,
17 | "no-string-literal": false,
18 | "object-literal-sort-keys": false,
19 | "max-file-line-count": [true, 300],
20 | "no-unused-variable": true,
21 | "no-unused-expression": true,
22 | "cyclomatic-complexity": [true, 20],
23 | "semicolon": [true, "always", "ignore-bound-class-methods"],
24 | "no-implicit-dependencies": false,
25 | "max-classes-per-file": false
26 | }
27 | }
28 |
--------------------------------------------------------------------------------