Browse Source

Init new version

pull/2/head
Vitalik 1 year ago
commit
9429f248d3
  1. 29
      .babelrc
  2. 2
      .bundle/config
  3. 4
      .eslintrc.js
  4. 74
      .gitignore
  5. 1
      .node-version
  6. 0
      .npmrc
  7. 7
      .prettierrc.js
  8. 1
      .watchmanconfig
  9. 12
      App.tsx
  10. 6
      Gemfile
  11. 100
      Gemfile.lock
  12. 14
      __tests__/App-test.tsx
  13. 170
      android/app/build.gradle
  14. BIN
      android/app/debug.keystore
  15. 10
      android/app/proguard-rules.pro
  16. 13
      android/app/src/debug/AndroidManifest.xml
  17. 75
      android/app/src/debug/java/com/taskme2/ReactNativeFlipper.java
  18. 25
      android/app/src/main/AndroidManifest.xml
  19. 35
      android/app/src/main/java/com/taskme2/MainActivity.java
  20. 62
      android/app/src/main/java/com/taskme2/MainApplication.java
  21. 36
      android/app/src/main/res/drawable/rn_edit_text_material.xml
  22. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  23. BIN
      android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
  24. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  25. BIN
      android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  26. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  27. BIN
      android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
  28. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  29. BIN
      android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
  30. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  31. BIN
      android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
  32. 3
      android/app/src/main/res/values/strings.xml
  33. 9
      android/app/src/main/res/values/styles.xml
  34. 20
      android/app/src/release/java/com/taskme2/ReactNativeFlipper.java
  35. 21
      android/build.gradle
  36. 44
      android/gradle.properties
  37. BIN
      android/gradle/wrapper/gradle-wrapper.jar
  38. 5
      android/gradle/wrapper/gradle-wrapper.properties
  39. 234
      android/gradlew
  40. 89
      android/gradlew.bat
  41. 4
      android/settings.gradle
  42. 4
      app.json
  43. 7
      babel.config.js
  44. 44
      index.js
  45. 11
      ios/.xcode.env
  46. 60
      ios/Podfile
  47. 884
      ios/Podfile.lock
  48. 706
      ios/taskme2.xcodeproj/project.pbxproj
  49. 88
      ios/taskme2.xcodeproj/xcshareddata/xcschemes/taskme2.xcscheme
  50. 10
      ios/taskme2.xcworkspace/contents.xcworkspacedata
  51. 8
      ios/taskme2.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  52. 6
      ios/taskme2/AppDelegate.h
  53. 36
      ios/taskme2/AppDelegate.mm
  54. 53
      ios/taskme2/Images.xcassets/AppIcon.appiconset/Contents.json
  55. 6
      ios/taskme2/Images.xcassets/Contents.json
  56. 60
      ios/taskme2/Info.plist
  57. 47
      ios/taskme2/LaunchScreen.storyboard
  58. 10
      ios/taskme2/main.m
  59. 24
      ios/taskme2Tests/Info.plist
  60. 66
      ios/taskme2Tests/taskme2Tests.m
  61. 17
      metro.config.js
  62. 29706
      package-lock.json
  63. 121
      package.json
  64. 40
      src/App.tsx
  65. 10
      src/api/account/requests.interfaces.ts
  66. 34
      src/api/account/requests.ts
  67. 10
      src/api/account/responses.interfaces.ts
  68. 18
      src/api/auth/requests.interfaces.ts
  69. 33
      src/api/auth/requests.ts
  70. 4
      src/api/auth/responses.interfaces.ts
  71. 67
      src/api/chat-messages/requests.interfaces.ts
  72. 121
      src/api/chat-messages/requests.ts
  73. 7
      src/api/chat-messages/responses.interfaces.ts
  74. 24
      src/api/chats-members/requests.interfaces.ts
  75. 15
      src/api/chats-members/requests.ts
  76. 37
      src/api/chats/requests.interfaces.ts
  77. 69
      src/api/chats/requests.ts
  78. 17
      src/api/chats/responses.interfaces.ts
  79. 20
      src/api/comments/requests.interfaces.ts
  80. 25
      src/api/comments/requests.ts
  81. 27
      src/api/comments/responses.interfaces.ts
  82. 26
      src/api/comments/transform.ts
  83. 10
      src/api/configs/requests.ts
  84. 14
      src/api/configs/responses.interfaces.ts
  85. 8
      src/api/contacts/requests.interface.ts
  86. 31
      src/api/contacts/requests.ts
  87. 12
      src/api/contacts/responses.interfaces.ts
  88. 10
      src/api/factories/requests.ts
  89. 3
      src/api/factories/responses.interface.ts
  90. 62
      src/api/http.decorstors.ts
  91. 155
      src/api/http.service.ts
  92. 3
      src/api/http.types.ts
  93. 13
      src/api/index.ts
  94. 4
      src/api/notifications/requests.interfaces.ts
  95. 6
      src/api/notifications/requests.ts
  96. 7
      src/api/permissions/requests.ts
  97. 8
      src/api/permissions/responses.interfaces.ts
  98. 6
      src/api/phone-number/requests.interfaces.ts
  99. 20
      src/api/phone-number/requests.ts
  100. 7
      src/api/tasks-documents/requests.interfaces.ts
  101. Some files were not shown because too many files have changed in this diff Show More

29
.babelrc

@ -0,0 +1,29 @@
{
"plugins": [
[
"module-resolver",
{
"root": [
"./src"
],
"alias": {
"@": "./src",
"$components": "./src/shared/components"
}
}
],
[
"babel-plugin-inline-import",
{
"extensions": [
".svg",
]
}
]
],
"env": {
"production": {
"plugins": ["transform-remove-console"]
}
}
}

2
.bundle/config

@ -0,0 +1,2 @@
BUNDLE_PATH: "vendor/bundle"
BUNDLE_FORCE_RUBY_PLATFORM: 1

4
.eslintrc.js

@ -0,0 +1,4 @@
module.exports = {
root: true,
extends: '@react-native-community',
};

74
.gitignore vendored

@ -0,0 +1,74 @@
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
*.hprof
# Android/IntelliJ
#
build/
.idea
.gradle
local.properties
*.iml
# node.js
#
node_modules/
npm-debug.log
yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/
*/fastlane/report.xml
*/fastlane/Preview.html
*/fastlane/screenshots
# Bundle artifact
*.jsbundle
# CocoaPods
/ios/Pods/
*/*.hprof
/android/*.hprof
# Visual Studio Code
#
.vscode/
./vendor
./vendor/*
vendor

1
.node-version

@ -0,0 +1 @@
18

7
.prettierrc.js

@ -0,0 +1,7 @@
module.exports = {
arrowParens: 'avoid',
bracketSameLine: true,
bracketSpacing: false,
singleQuote: true,
trailingComma: 'all',
};

1
.watchmanconfig

@ -0,0 +1 @@
{}

12
App.tsx

@ -0,0 +1,12 @@
import React from 'react';
import {SafeAreaView, Text} from 'react-native';
function App(): JSX.Element {
return (
<SafeAreaView>
<Text>test</Text>
</SafeAreaView>
);
}
export default App;

6
Gemfile

@ -0,0 +1,6 @@
source 'https://rubygems.org'
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby '>= 2.6.10'
gem 'cocoapods', '>= 1.11.3'

100
Gemfile.lock

@ -0,0 +1,100 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.6)
rexml
activesupport (6.1.7.3)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
addressable (2.8.4)
public_suffix (>= 2.0.2, < 6.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
atomos (0.1.3)
claide (1.1.0)
cocoapods (1.12.1)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.12.1)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 1.6.0, < 2.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
cocoapods-search (>= 1.0.0, < 2.0)
cocoapods-trunk (>= 1.6.0, < 2.0)
cocoapods-try (>= 1.1.0, < 2.0)
colored2 (~> 3.1)
escape (~> 0.0.4)
fourflusher (>= 2.3.0, < 3.0)
gh_inspector (~> 1.0)
molinillo (~> 0.8.0)
nap (~> 1.0)
ruby-macho (>= 2.3.0, < 3.0)
xcodeproj (>= 1.21.0, < 2.0)
cocoapods-core (1.12.1)
activesupport (>= 5.0, < 8)
addressable (~> 2.8)
algoliasearch (~> 1.0)
concurrent-ruby (~> 1.1)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
netrc (~> 0.11)
public_suffix (~> 4.0)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (1.6.3)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.1)
cocoapods-trunk (1.6.0)
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored2 (3.1.2)
concurrent-ruby (1.2.2)
escape (0.0.4)
ethon (0.16.0)
ffi (>= 1.15.0)
ffi (1.15.5)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3)
httpclient (2.8.3)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
json (2.6.3)
minitest (5.18.0)
molinillo (0.8.0)
nanaimo (0.3.0)
nap (1.1.0)
netrc (0.11.0)
public_suffix (4.0.7)
rexml (3.2.5)
ruby-macho (2.5.1)
typhoeus (1.4.0)
ethon (>= 0.9.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
zeitwerk (2.6.8)
PLATFORMS
ruby
DEPENDENCIES
cocoapods (>= 1.11.3)
RUBY VERSION
ruby 2.6.10p210
BUNDLED WITH
1.17.2

14
__tests__/App-test.tsx

@ -0,0 +1,14 @@
/**
* @format
*/
import 'react-native';
import React from 'react';
import App from '../App';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
it('renders correctly', () => {
renderer.create(<App />);
});

170
android/app/build.gradle

@ -0,0 +1,170 @@
apply plugin: "com.android.application"
apply plugin: "com.facebook.react"
import com.android.build.OutputFile
/**
* This is the configuration block to customize your React Native Android app.
* By default you don't need to apply any configuration, just uncomment the lines you need.
*/
react {
/* Folders */
// The root of your project, i.e. where "package.json" lives. Default is '..'
// root = file("../")
// The folder where the react-native NPM package is. Default is ../node_modules/react-native
// reactNativeDir = file("../node_modules/react-native")
// The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen
// codegenDir = file("../node_modules/react-native-codegen")
// The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
// cliFile = file("../node_modules/react-native/cli.js")
/* Variants */
// The list of variants to that are debuggable. For those we're going to
// skip the bundling of the JS bundle and the assets. By default is just 'debug'.
// If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
// debuggableVariants = ["liteDebug", "prodDebug"]
/* Bundling */
// A list containing the node command and its flags. Default is just 'node'.
// nodeExecutableAndArgs = ["node"]
//
// The command to run when bundling. By default is 'bundle'
// bundleCommand = "ram-bundle"
//
// The path to the CLI configuration file. Default is empty.
// bundleConfig = file(../rn-cli.config.js)
//
// The name of the generated asset file containing your JS bundle
// bundleAssetName = "MyApplication.android.bundle"
//
// The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
// entryFile = file("../js/MyApplication.android.js")
//
// A list of extra flags to pass to the 'bundle' commands.
// See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
// extraPackagerArgs = []
/* Hermes Commands */
// The hermes compiler command to run. By default it is 'hermesc'
// hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
//
// The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
// hermesFlags = ["-O", "-output-source-map"]
}
/**
* Set this to true to create four separate APKs instead of one,
* one for each native architecture. This is useful if you don't
* use App Bundles (https://developer.android.com/guide/app-bundle/)
* and want to have separate APKs to upload to the Play Store.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Set this to true to Run Proguard on Release builds to minify the Java bytecode.
*/
def enableProguardInReleaseBuilds = false
/**
* The preferred build flavor of JavaScriptCore (JSC)
*
* For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Private function to get the list of Native Architectures you want to build.
* This reads the value from reactNativeArchitectures in your gradle.properties
* file and works together with the --active-arch-only flag of react-native run-android.
*/
def reactNativeArchitectures() {
def value = project.getProperties().get("reactNativeArchitectures")
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
}
android {
ndkVersion rootProject.ext.ndkVersion
compileSdkVersion rootProject.ext.compileSdkVersion
namespace "com.taskme2"
defaultConfig {
applicationId "com.taskme2"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include (*reactNativeArchitectures())
}
}
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
defaultConfig.versionCode * 1000 + versionCodes.get(abi)
}
}
}
}
dependencies {
// The version of react-native is set by the React Native Gradle Plugin
implementation("com.facebook.react:react-android")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
exclude group:'com.squareup.okhttp3', module:'okhttp'
}
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
if (hermesEnabled.toBoolean()) {
implementation("com.facebook.react:hermes-android")
} else {
implementation jscFlavor
}
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

BIN
android/app/debug.keystore

Binary file not shown.

10
android/app/proguard-rules.pro vendored

@ -0,0 +1,10 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:

13
android/app/src/debug/AndroidManifest.xml

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:usesCleartextTraffic="true"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
</application>
</manifest>

75
android/app/src/debug/java/com/taskme2/ReactNativeFlipper.java

@ -0,0 +1,75 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.taskme2;
import android.content.Context;
import com.facebook.flipper.android.AndroidFlipperClient;
import com.facebook.flipper.android.utils.FlipperUtils;
import com.facebook.flipper.core.FlipperClient;
import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
import com.facebook.flipper.plugins.inspector.DescriptorMapping;
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
import com.facebook.react.ReactInstanceEventListener;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.network.NetworkingModule;
import okhttp3.OkHttpClient;
/**
* Class responsible of loading Flipper inside your React Native application. This is the debug
* flavor of it. Here you can add your own plugins and customize the Flipper setup.
*/
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
if (FlipperUtils.shouldEnableFlipper(context)) {
final FlipperClient client = AndroidFlipperClient.getInstance(context);
client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
client.addPlugin(new DatabasesFlipperPlugin(context));
client.addPlugin(new SharedPreferencesFlipperPlugin(context));
client.addPlugin(CrashReporterPlugin.getInstance());
NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
NetworkingModule.setCustomClientBuilder(
new NetworkingModule.CustomClientBuilder() {
@Override
public void apply(OkHttpClient.Builder builder) {
builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
}
});
client.addPlugin(networkFlipperPlugin);
client.start();
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
// Hence we run if after all native modules have been initialized
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if (reactContext == null) {
reactInstanceManager.addReactInstanceEventListener(
new ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext reactContext) {
reactInstanceManager.removeReactInstanceEventListener(this);
reactContext.runOnNativeModulesQueueThread(
new Runnable() {
@Override
public void run() {
client.addPlugin(new FrescoFlipperPlugin());
}
});
}
});
} else {
client.addPlugin(new FrescoFlipperPlugin());
}
}
}
}

25
android/app/src/main/AndroidManifest.xml

@ -0,0 +1,25 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

35
android/app/src/main/java/com/taskme2/MainActivity.java

@ -0,0 +1,35 @@
package com.taskme2;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.defaults.DefaultReactActivityDelegate;
public class MainActivity extends ReactActivity {
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
@Override
protected String getMainComponentName() {
return "taskme2";
}
/**
* Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
* DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
* (aka React 18) with two boolean flags.
*/
@Override
protected ReactActivityDelegate createReactActivityDelegate() {
return new DefaultReactActivityDelegate(
this,
getMainComponentName(),
// If you opted-in for the New Architecture, we enable the Fabric Renderer.
DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled
// If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18).
DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled
);
}
}

62
android/app/src/main/java/com/taskme2/MainApplication.java

@ -0,0 +1,62 @@
package com.taskme2;
import android.app.Application;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
import com.facebook.react.defaults.DefaultReactNativeHost;
import com.facebook.soloader.SoLoader;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new DefaultReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
@Override
protected boolean isNewArchEnabled() {
return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
}
@Override
protected Boolean isHermesEnabled() {
return BuildConfig.IS_HERMES_ENABLED;
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
// If you opted-in for the New Architecture, we load the native entry point for this app.
DefaultNewArchitectureEntryPoint.load();
}
ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
}

36
android/app/src/main/res/drawable/rn_edit_text_material.xml

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material"
android:insetRight="@dimen/abc_edit_text_inset_horizontal_material"
android:insetTop="@dimen/abc_edit_text_inset_top_material"
android:insetBottom="@dimen/abc_edit_text_inset_bottom_material">
<selector>
<!--
This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I).
The item below with state_pressed="false" and state_focused="false" causes a NullPointerException.
NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)'
<item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR.
-->
<item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/>
</selector>
</inset>

BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

3
android/app/src/main/res/values/strings.xml

@ -0,0 +1,3 @@
<resources>
<string name="app_name">taskme2</string>
</resources>

9
android/app/src/main/res/values/styles.xml

@ -0,0 +1,9 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
</style>
</resources>

20
android/app/src/release/java/com/taskme2/ReactNativeFlipper.java

@ -0,0 +1,20 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*/
package com.taskme2;
import android.content.Context;
import com.facebook.react.ReactInstanceManager;
/**
* Class responsible of loading Flipper inside your React Native application. This is the release
* flavor of it so it's empty as we don't want to load Flipper.
*/
public class ReactNativeFlipper {
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
// Do nothing as we don't want to initialize Flipper on Release.
}
}

21
android/build.gradle

@ -0,0 +1,21 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "33.0.0"
minSdkVersion = 21
compileSdkVersion = 33
targetSdkVersion = 33
// We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
ndkVersion = "23.1.7779620"
}
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:7.3.1")
classpath("com.facebook.react:react-native-gradle-plugin")
}
}

44
android/gradle.properties

@ -0,0 +1,44 @@
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app's APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
# Version of flipper SDK to use with React Native
FLIPPER_VERSION=0.125.0
# Use this property to specify which architecture you want to build.
# You can also override it from the CLI using
# ./gradlew <task> -PreactNativeArchitectures=x86_64
reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
# Use this property to enable support to the new architecture.
# This will allow you to use TurboModules and the Fabric render in
# your application. You should enable this flag either if you want
# to write custom TurboModules/Fabric components OR use libraries that
# are providing them.
newArchEnabled=false
# Use this property to enable or disable the Hermes JS engine.
# If set to false, you will be using JSC instead.
hermesEnabled=true

BIN
android/gradle/wrapper/gradle-wrapper.jar vendored

Binary file not shown.

5
android/gradle/wrapper/gradle-wrapper.properties vendored

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

234
android/gradlew vendored

@ -0,0 +1,234 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

89
android/gradlew.bat vendored

@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

4
android/settings.gradle

@ -0,0 +1,4 @@
rootProject.name = 'taskme2'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
includeBuild('../node_modules/react-native-gradle-plugin')

4
app.json

@ -0,0 +1,4 @@
{
"name": "taskme2",
"displayName": "taskme2"
}

7
babel.config.js

@ -0,0 +1,7 @@
module.exports = function (api) {
api.cache(true);
return {
presets: ['module:metro-react-native-babel-preset'],
plugins: ['react-native-reanimated/plugin'],
};
};

44
index.js

@ -0,0 +1,44 @@
/**
* @format
*/
import {Alert, AppRegistry} from 'react-native';
import App from './src/App';
import {name as appName} from './app.json';
import {gestureHandlerRootHOC} from 'react-native-gesture-handler';
import {
setJSExceptionHandler,
setNativeExceptionHandler,
} from 'react-native-exception-handler';
import '@/services/system/skeleton-data.service';
const errorHandler = (e, isFatal) => {
if (isFatal) {
Alert.alert(
'Unexpected error occurred',
`
Error: ${isFatal ? 'Fatal:' : ''} ${e.name} ${e.message}
We will need to restart the app.
`,
[
{
text: 'Restart',
onPress: () => {},
},
],
);
} else {
console.log(e); // So that we can see it in the ADB logs in case of Android if needed
}
};
setJSExceptionHandler(errorHandler);
setNativeExceptionHandler(errorString => {
Alert.alert(JSON.stringify(errorString));
});
AppRegistry.registerComponent(appName, () => gestureHandlerRootHOC(App));

11
ios/.xcode.env

@ -0,0 +1,11 @@
# This `.xcode.env` file is versioned and is used to source the environment
# used when running script phases inside Xcode.
# To customize your local environment, you can create an `.xcode.env.local`
# file that is not versioned.
# NODE_BINARY variable contains the PATH to the node executable.
#
# Customize the NODE_BINARY variable here.
# For example, to use nvm with brew, add the following line
# . "$(brew --prefix nvm)/nvm.sh" --no-use
export NODE_BINARY=$(command -v node)

60
ios/Podfile

@ -0,0 +1,60 @@
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, min_ios_version_supported
prepare_react_native_project!
# If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
# because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
#
# To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
# ```js
# module.exports = {
# dependencies: {
# ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
# ```
flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
linkage = ENV['USE_FRAMEWORKS']
if linkage != nil
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
use_frameworks! :linkage => linkage.to_sym
end
target 'taskme2' do
config = use_native_modules!
# Flags change depending on the env values.
flags = get_default_flags()
use_react_native!(
:path => config[:reactNativePath],
# Hermes is now enabled by default. Disable by setting this flag to false.
# Upcoming versions of React Native may rely on get_default_flags(), but
# we make it explicit here to aid in the React Native upgrade process.
:hermes_enabled => flags[:hermes_enabled],
:fabric_enabled => flags[:fabric_enabled],
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
:flipper_configuration => flipper_config,
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
target 'taskme2Tests' do
inherit! :complete
# Pods for testing
end
post_install do |installer|
react_native_post_install(
installer,
# Set `mac_catalyst_enabled` to `true` in order to apply patches
# necessary for Mac Catalyst builds
:mac_catalyst_enabled => false
)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
end
end

884
ios/Podfile.lock

@ -0,0 +1,884 @@
PODS:
- boost (1.76.0)
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- FBLazyVector (0.71.9)
- FBReactNativeSpec (0.71.9):
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.71.9)
- RCTTypeSafety (= 0.71.9)
- React-Core (= 0.71.9)
- React-jsi (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- ffmpeg-kit-ios-https (5.1)
- ffmpeg-kit-react-native (5.1.0):
- ffmpeg-kit-react-native/https (= 5.1.0)
- React-Core
- ffmpeg-kit-react-native/https (5.1.0):
- ffmpeg-kit-ios-https (= 5.1)
- React-Core
- Flipper (0.125.0):
- Flipper-Folly (~> 2.6)
- Flipper-RSocket (~> 1.4)
- Flipper-Boost-iOSX (1.76.0.1.11)
- Flipper-DoubleConversion (3.2.0.1)
- Flipper-Fmt (7.1.7)
- Flipper-Folly (2.6.10):
- Flipper-Boost-iOSX
- Flipper-DoubleConversion
- Flipper-Fmt (= 7.1.7)
- Flipper-Glog
- libevent (~> 2.1.12)
- OpenSSL-Universal (= 1.1.1100)
- Flipper-Glog (0.5.0.5)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.4.3):
- Flipper-Folly (~> 2.6)
- FlipperKit (0.125.0):
- FlipperKit/Core (= 0.125.0)
- FlipperKit/Core (0.125.0):
- Flipper (~> 0.125.0)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- SocketRocket (~> 0.6.0)
- FlipperKit/CppBridge (0.125.0):
- Flipper (~> 0.125.0)
- FlipperKit/FBCxxFollyDynamicConvert (0.125.0):
- Flipper-Folly (~> 2.6)
- FlipperKit/FBDefines (0.125.0)
- FlipperKit/FKPortForwarding (0.125.0):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- FlipperKit/FlipperKitHighlightOverlay (0.125.0)
- FlipperKit/FlipperKitLayoutHelpers (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutHelpers
- YogaKit (~> 1.18)
- FlipperKit/FlipperKitLayoutPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutHelpers
- FlipperKit/FlipperKitLayoutIOSDescriptors
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- FlipperKit/FlipperKitLayoutTextSearchable (0.125.0)
- FlipperKit/FlipperKitNetworkPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitReactPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/SKIOSNetworkPlugin (0.125.0):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- fmt (6.2.1)
- glog (0.3.5)
- hermes-engine (0.71.9):
- hermes-engine/Pre-built (= 0.71.9)
- hermes-engine/Pre-built (0.71.9)
- JitsiWebRTC (111.0.2)
- libevent (2.1.12)
- libwebp (1.2.4):
- libwebp/demux (= 1.2.4)
- libwebp/mux (= 1.2.4)
- libwebp/webp (= 1.2.4)
- libwebp/demux (1.2.4):
- libwebp/webp
- libwebp/mux (1.2.4):
- libwebp/demux
- libwebp/webp (1.2.4)
- OpenSSL-Universal (1.1.1100)
- RCT-Folly (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCT-Folly/Default (= 2021.07.22.00)
- RCT-Folly/Default (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCT-Folly/Futures (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- libevent
- RCTRequired (0.71.9)
- RCTTypeSafety (0.71.9):
- FBLazyVector (= 0.71.9)
- RCTRequired (= 0.71.9)
- React-Core (= 0.71.9)
- React (0.71.9):
- React-Core (= 0.71.9)
- React-Core/DevSupport (= 0.71.9)
- React-Core/RCTWebSocket (= 0.71.9)
- React-RCTActionSheet (= 0.71.9)
- React-RCTAnimation (= 0.71.9)
- React-RCTBlob (= 0.71.9)
- React-RCTImage (= 0.71.9)
- React-RCTLinking (= 0.71.9)
- React-RCTNetwork (= 0.71.9)
- React-RCTSettings (= 0.71.9)
- React-RCTText (= 0.71.9)
- React-RCTVibration (= 0.71.9)
- React-callinvoker (0.71.9)
- React-Codegen (0.71.9):
- FBReactNativeSpec
- hermes-engine
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React-Core
- React-jsi
- React-jsiexecutor
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- React-Core (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.71.9)
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/CoreModulesHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/Default (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/DevSupport (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.71.9)
- React-Core/RCTWebSocket (= 0.71.9)
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-jsinspector (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTActionSheetHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTAnimationHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTBlobHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTImageHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTLinkingHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTNetworkHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTSettingsHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTTextHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTVibrationHeaders (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-Core/RCTWebSocket (0.71.9):
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.71.9)
- React-cxxreact (= 0.71.9)
- React-hermes
- React-jsi (= 0.71.9)
- React-jsiexecutor (= 0.71.9)
- React-perflogger (= 0.71.9)
- Yoga
- React-CoreModules (0.71.9):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.71.9)
- React-Codegen (= 0.71.9)
- React-Core/CoreModulesHeaders (= 0.71.9)
- React-jsi (= 0.71.9)
- React-RCTBlob
- React-RCTImage (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- React-cxxreact (0.71.9):
- boost (= 1.76.0)
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.71.9)
- React-jsi (= 0.71.9)
- React-jsinspector (= 0.71.9)
- React-logger (= 0.71.9)
- React-perflogger (= 0.71.9)
- React-runtimeexecutor (= 0.71.9)
- React-hermes (0.71.9):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- RCT-Folly/Futures (= 2021.07.22.00)
- React-cxxreact (= 0.71.9)
- React-jsi
- React-jsiexecutor (= 0.71.9)
- React-jsinspector (= 0.71.9)
- React-perflogger (= 0.71.9)
- React-jsi (0.71.9):
- boost (= 1.76.0)
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-jsiexecutor (0.71.9):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.71.9)
- React-jsi (= 0.71.9)
- React-perflogger (= 0.71.9)
- React-jsinspector (0.71.9)
- React-logger (0.71.9):
- glog
- react-native-cameraroll (5.6.0):
- React-Core
- react-native-date-picker (4.2.13):
- React-Core
- react-native-document-picker (9.0.1):
- React-Core
- react-native-html-to-pdf (0.12.0):
- React-Core
- react-native-image-picker (5.6.0):
- React-Core
- react-native-netinfo (9.3.10):
- React-Core
- react-native-pager-view (6.2.0):
- React-Core
- react-native-restart (0.0.27):
- React-Core
- react-native-safe-area-context (4.7.1):
- React-Core
- react-native-splash-screen (3.3.0):
- React-Core
- react-native-video (5.2.1):
- React-Core
- react-native-video/Video (= 5.2.1)
- react-native-video/Video (5.2.1):
- React-Core
- react-native-webrtc (111.0.1):
- JitsiWebRTC (~> 111.0.0)
- React-Core
- React-perflogger (0.71.9)
- React-RCTActionSheet (0.71.9):
- React-Core/RCTActionSheetHeaders (= 0.71.9)
- React-RCTAnimation (0.71.9):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.71.9)
- React-Codegen (= 0.71.9)
- React-Core/RCTAnimationHeaders (= 0.71.9)
- React-jsi (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- React-RCTAppDelegate (0.71.9):
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React-Core
- ReactCommon/turbomodule/core
- React-RCTBlob (0.71.9):
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.71.9)
- React-Core/RCTBlobHeaders (= 0.71.9)
- React-Core/RCTWebSocket (= 0.71.9)
- React-jsi (= 0.71.9)
- React-RCTNetwork (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- React-RCTImage (0.71.9):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.71.9)
- React-Codegen (= 0.71.9)
- React-Core/RCTImageHeaders (= 0.71.9)
- React-jsi (= 0.71.9)
- React-RCTNetwork (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- React-RCTLinking (0.71.9):
- React-Codegen (= 0.71.9)
- React-Core/RCTLinkingHeaders (= 0.71.9)
- React-jsi (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- React-RCTNetwork (0.71.9):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.71.9)
- React-Codegen (= 0.71.9)
- React-Core/RCTNetworkHeaders (= 0.71.9)
- React-jsi (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- React-RCTSettings (0.71.9):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.71.9)
- React-Codegen (= 0.71.9)
- React-Core/RCTSettingsHeaders (= 0.71.9)
- React-jsi (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- React-RCTText (0.71.9):
- React-Core/RCTTextHeaders (= 0.71.9)
- React-RCTVibration (0.71.9):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.71.9)
- React-Core/RCTVibrationHeaders (= 0.71.9)
- React-jsi (= 0.71.9)
- ReactCommon/turbomodule/core (= 0.71.9)
- React-runtimeexecutor (0.71.9):
- React-jsi (= 0.71.9)
- ReactCommon/turbomodule/bridging (0.71.9):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.71.9)
- React-Core (= 0.71.9)
- React-cxxreact (= 0.71.9)
- React-jsi (= 0.71.9)
- React-logger (= 0.71.9)
- React-perflogger (= 0.71.9)
- ReactCommon/turbomodule/core (0.71.9):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.71.9)
- React-Core (= 0.71.9)
- React-cxxreact (= 0.71.9)
- React-jsi (= 0.71.9)
- React-logger (= 0.71.9)
- React-perflogger (= 0.71.9)
- rn-fetch-blob (0.12.0):
- React-Core
- RNAudioRecorderPlayer (3.5.3):
- React-Core
- RNCAsyncStorage (1.18.2):
- React-Core
- RNCClipboard (1.5.1):
- React-Core
- RNClearAppCache (1.0.2):
- React
- RNCPicker (2.4.10):
- React-Core
- RNDeviceInfo (10.6.0):
- React-Core
- RNFastImage (8.6.3):
- React-Core
- SDWebImage (~> 5.11.1)
- SDWebImageWebPCoder (~> 0.8.4)
- RNFS (2.20.0):
- React-Core
- RNGestureHandler (2.11.0):
- React-Core
- RNImageCropPicker (0.40.0):
- React-Core
- React-RCTImage
- RNImageCropPicker/QBImagePickerController (= 0.40.0)
- TOCropViewController
- RNImageCropPicker/QBImagePickerController (0.40.0):
- React-Core
- React-RCTImage
- TOCropViewController
- RNPermissions (3.8.4):
- React-Core
- RNReanimated (3.4.1):
- DoubleConversion
- FBLazyVector
- FBReactNativeSpec
- glog
- hermes-engine
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React-callinvoker
- React-Core
- React-Core/DevSupport
- React-Core/RCTWebSocket
- React-CoreModules
- React-cxxreact
- React-hermes
- React-jsi
- React-jsiexecutor
- React-jsinspector
- React-RCTActionSheet
- React-RCTAnimation
- React-RCTBlob
- React-RCTImage
- React-RCTLinking
- React-RCTNetwork
- React-RCTSettings
- React-RCTText
- ReactCommon/turbomodule/core
- Yoga
- RNScreens (3.23.0):
- React-Core
- React-RCTImage
- RNShare (9.2.3):
- React-Core
- RNSoundLevel (1.1.5):
- React
- RNSVG (13.10.0):
- React-Core
- RNVectorIcons (10.0.0):
- React-Core
- SDWebImage (5.11.1):
- SDWebImage/Core (= 5.11.1)
- SDWebImage/Core (5.11.1)
- SDWebImageWebPCoder (0.8.5):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.10)
- SocketRocket (0.6.0)
- TOCropViewController (2.6.1)
- Yoga (1.14.0)
- YogaKit (1.18.1):
- Yoga (~> 1.14)
DEPENDENCIES:
- boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- ffmpeg-kit-react-native (from `../node_modules/ffmpeg-kit-react-native`)
- Flipper (= 0.125.0)
- Flipper-Boost-iOSX (= 1.76.0.1.11)
- Flipper-DoubleConversion (= 3.2.0.1)
- Flipper-Fmt (= 7.1.7)
- Flipper-Folly (= 2.6.10)
- Flipper-Glog (= 0.5.0.5)
- Flipper-PeerTalk (= 0.0.4)
- Flipper-RSocket (= 1.4.3)
- FlipperKit (= 0.125.0)
- FlipperKit/Core (= 0.125.0)
- FlipperKit/CppBridge (= 0.125.0)
- FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0)
- FlipperKit/FBDefines (= 0.125.0)
- FlipperKit/FKPortForwarding (= 0.125.0)
- FlipperKit/FlipperKitHighlightOverlay (= 0.125.0)
- FlipperKit/FlipperKitLayoutPlugin (= 0.125.0)
- FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0)
- FlipperKit/FlipperKitNetworkPlugin (= 0.125.0)
- FlipperKit/FlipperKitReactPlugin (= 0.125.0)
- FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0)
- FlipperKit/SKIOSNetworkPlugin (= 0.125.0)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
- libevent (~> 2.1.12)
- OpenSSL-Universal (= 1.1.1100)
- RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- React-Codegen (from `build/generated/ios`)
- React-Core (from `../node_modules/react-native/`)
- React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)"
- react-native-date-picker (from `../node_modules/react-native-date-picker`)
- react-native-document-picker (from `../node_modules/react-native-document-picker`)
- react-native-html-to-pdf (from `../node_modules/react-native-html-to-pdf`)
- react-native-image-picker (from `../node_modules/react-native-image-picker`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
- react-native-pager-view (from `../node_modules/react-native-pager-view`)
- react-native-restart (from `../node_modules/react-native-restart`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-splash-screen (from `../node_modules/react-native-splash-screen`)
- react-native-video (from `../node_modules/react-native-video`)
- react-native-webrtc (from `../node_modules/react-native-webrtc`)
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
- React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
- React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
- React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
- React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
- React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
- React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- rn-fetch-blob (from `../node_modules/rn-fetch-blob`)
- RNAudioRecorderPlayer (from `../node_modules/react-native-audio-recorder-player`)
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
- "RNClearAppCache (from `../node_modules/@aks-dev/react-native-clear-app-cache`)"
- "RNCPicker (from `../node_modules/@react-native-picker/picker`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFastImage (from `../node_modules/react-native-fast-image`)
- RNFS (from `../node_modules/react-native-fs`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`)
- RNPermissions (from `../node_modules/react-native-permissions`)
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- RNShare (from `../node_modules/react-native-share`)
- RNSoundLevel (from `../node_modules/react-native-sound-level`)
- RNSVG (from `../node_modules/react-native-svg`)
- RNVectorIcons (from `../node_modules/react-native-vector-icons`)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
trunk:
- CocoaAsyncSocket
- ffmpeg-kit-ios-https
- Flipper
- Flipper-Boost-iOSX
- Flipper-DoubleConversion
- Flipper-Fmt
- Flipper-Folly
- Flipper-Glog
- Flipper-PeerTalk
- Flipper-RSocket
- FlipperKit
- fmt
- JitsiWebRTC
- libevent
- libwebp
- OpenSSL-Universal
- SDWebImage
- SDWebImageWebPCoder
- SocketRocket
- TOCropViewController
- YogaKit
EXTERNAL SOURCES:
boost:
:podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
FBLazyVector:
:path: "../node_modules/react-native/Libraries/FBLazyVector"
FBReactNativeSpec:
:path: "../node_modules/react-native/React/FBReactNativeSpec"
ffmpeg-kit-react-native:
:path: "../node_modules/ffmpeg-kit-react-native"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
hermes-engine:
:podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
RCT-Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
RCTRequired:
:path: "../node_modules/react-native/Libraries/RCTRequired"
RCTTypeSafety:
:path: "../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../node_modules/react-native/"
React-callinvoker:
:path: "../node_modules/react-native/ReactCommon/callinvoker"
React-Codegen:
:path: build/generated/ios
React-Core:
:path: "../node_modules/react-native/"
React-CoreModules:
:path: "../node_modules/react-native/React/CoreModules"
React-cxxreact:
:path: "../node_modules/react-native/ReactCommon/cxxreact"
React-hermes:
:path: "../node_modules/react-native/ReactCommon/hermes"
React-jsi:
:path: "../node_modules/react-native/ReactCommon/jsi"
React-jsiexecutor:
:path: "../node_modules/react-native/ReactCommon/jsiexecutor"
React-jsinspector:
:path: "../node_modules/react-native/ReactCommon/jsinspector"
React-logger:
:path: "../node_modules/react-native/ReactCommon/logger"
react-native-cameraroll:
:path: "../node_modules/@react-native-camera-roll/camera-roll"
react-native-date-picker:
:path: "../node_modules/react-native-date-picker"
react-native-document-picker:
:path: "../node_modules/react-native-document-picker"
react-native-html-to-pdf:
:path: "../node_modules/react-native-html-to-pdf"
react-native-image-picker:
:path: "../node_modules/react-native-image-picker"
react-native-netinfo:
:path: "../node_modules/@react-native-community/netinfo"
react-native-pager-view:
:path: "../node_modules/react-native-pager-view"
react-native-restart:
:path: "../node_modules/react-native-restart"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-splash-screen:
:path: "../node_modules/react-native-splash-screen"
react-native-video:
:path: "../node_modules/react-native-video"
react-native-webrtc:
:path: "../node_modules/react-native-webrtc"
React-perflogger:
:path: "../node_modules/react-native/ReactCommon/reactperflogger"
React-RCTActionSheet:
:path: "../node_modules/react-native/Libraries/ActionSheetIOS"
React-RCTAnimation:
:path: "../node_modules/react-native/Libraries/NativeAnimation"
React-RCTAppDelegate:
:path: "../node_modules/react-native/Libraries/AppDelegate"
React-RCTBlob:
:path: "../node_modules/react-native/Libraries/Blob"
React-RCTImage:
:path: "../node_modules/react-native/Libraries/Image"
React-RCTLinking:
:path: "../node_modules/react-native/Libraries/LinkingIOS"
React-RCTNetwork:
:path: "../node_modules/react-native/Libraries/Network"
React-RCTSettings:
:path: "../node_modules/react-native/Libraries/Settings"
React-RCTText:
:path: "../node_modules/react-native/Libraries/Text"
React-RCTVibration:
:path: "../node_modules/react-native/Libraries/Vibration"
React-runtimeexecutor:
:path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
ReactCommon:
:path: "../node_modules/react-native/ReactCommon"
rn-fetch-blob:
:path: "../node_modules/rn-fetch-blob"
RNAudioRecorderPlayer:
:path: "../node_modules/react-native-audio-recorder-player"
RNCAsyncStorage:
:path: "../node_modules/@react-native-async-storage/async-storage"
RNCClipboard:
:path: "../node_modules/@react-native-community/clipboard"
RNClearAppCache:
:path: "../node_modules/@aks-dev/react-native-clear-app-cache"
RNCPicker:
:path: "../node_modules/@react-native-picker/picker"
RNDeviceInfo:
:path: "../node_modules/react-native-device-info"
RNFastImage:
:path: "../node_modules/react-native-fast-image"
RNFS:
:path: "../node_modules/react-native-fs"
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
RNImageCropPicker:
:path: "../node_modules/react-native-image-crop-picker"
RNPermissions:
:path: "../node_modules/react-native-permissions"
RNReanimated:
:path: "../node_modules/react-native-reanimated"
RNScreens:
:path: "../node_modules/react-native-screens"
RNShare:
:path: "../node_modules/react-native-share"
RNSoundLevel:
:path: "../node_modules/react-native-sound-level"
RNSVG:
:path: "../node_modules/react-native-svg"
RNVectorIcons:
:path: "../node_modules/react-native-vector-icons"
Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
boost: 57d2868c099736d80fcd648bf211b4431e51a558
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
FBLazyVector: 223c9b54fd7fcae08cb20a9920f504170258992e
FBReactNativeSpec: e98eafbc9a9a4a20ae749ec5b1d0ec3424ee20c5
ffmpeg-kit-ios-https: 8dffbe1623a2f227be98fc314294847a97f818e4
ffmpeg-kit-react-native: 56ecfcd21536379dd123eade87c3b6fd55f12030
Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0
Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541
FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
hermes-engine: ddccc9f87dc272c3872572355d8e85052b573a0f
JitsiWebRTC: 80f62908fcf2a1160e0d14b584323fb6e6be630b
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
RCTRequired: edad2afb54f1621f3515ac77a02f395653e3e05d
RCTTypeSafety: 2ebaa8a715c275a3ceef4dfe1c5233a0cc536025
React: 44c6663ce20856fa777246f152e9c7b7360b148a
React-callinvoker: 751caf06a3fa033e479e95cccdec1845c9ffb64a
React-Codegen: 3390e5c63fba98ff7561898e533b3be2c66b411a
React-Core: 2fa4ecdecd7efc9e7569051de99c96e2976b0da0
React-CoreModules: 32195bf4fbc5af270c6c2f2023a695f267990951
React-cxxreact: c57134abb3cee91c8e76135705582bff3adbe63f
React-hermes: 23ba7f9e51f556c7ba4e645da8f287f2e6230ad7
React-jsi: 9b87185ac7f26fdac1df228e3e30842eefc9f3f8
React-jsiexecutor: f2759b459772b281f569181a75d48ed2f4df6416
React-jsinspector: f4ccc5e774f1f7530f55f5367826f7158e3146aa
React-logger: 48c0f8e4e2314c50661a827019b506c172328049
react-native-cameraroll: 755bcc628148a90a7c9cf3f817a252be3a601bc5
react-native-date-picker: 04e866ba4e7857f83abd504ad42e787f0f02ae00
react-native-document-picker: 2b8f18667caee73a96708a82b284a4f40b30a156
react-native-html-to-pdf: 4c5c6e26819fe202971061594058877aa9b25265
react-native-image-picker: db60857e03d63721f19b6f4027de20429ddd9cba
react-native-netinfo: ccbe1085dffd16592791d550189772e13bf479e2
react-native-pager-view: 0ccb8bf60e2ebd38b1f3669fa3650ecce81db2df
react-native-restart: 7595693413fe3ca15893702f2c8306c62a708162
react-native-safe-area-context: 9697629f7b2cda43cf52169bb7e0767d330648c2
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
react-native-video: c26780b224543c62d5e1b2a7244a5cd1b50e8253
react-native-webrtc: 2702afae1e59882b423e6077768ca0d1e6fc42ed
React-perflogger: 78c280669d99aef163e23331366f5914a7298dae
React-RCTActionSheet: 2698ce0f5d8fea91977c591c83de66b501c6d41d
React-RCTAnimation: d9d448c8cc86549b0aa2c9f0c00d18c1efcebda5
React-RCTAppDelegate: 2c8f0a99c839c381f1b5a837188ae47a20f1c1fa
React-RCTBlob: 22f492cc6d3770e2733568603499fff32d6f244c
React-RCTImage: 35125bdce3f7844fd143ca08157e5b99510489d8
React-RCTLinking: 6737cc82844e5b459759808b9328c3629b1508d9
React-RCTNetwork: f3fba5d794183275c12f3b7e5059b51f4c011a33
React-RCTSettings: 61bdfc057d87071f1829663800faa4411ca82df1
React-RCTText: ce7d4ed9473d9e58d4f0b17ef94fd954e8703072
React-RCTVibration: 2dd0f31c4bd4294861a227e5cc12163e0c74b623
React-runtimeexecutor: daf24a52db50b4d9af59d6b2295e70c5dd99da50
ReactCommon: ae1d021a0416d97e4c7ff9761d684c7eac504b18
rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba
RNAudioRecorderPlayer: 6638283925b46808310c9fdf803ebabc3abdbadc
RNCAsyncStorage: ddc4ee162bfd41b0d2c68bf2d95acd81dd7f1f93
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
RNClearAppCache: 26d6211fbecf44060e76cc08f9b8439680f5a04b
RNCPicker: 0bc2f0a29abcca7b7ed44a2d036aac9ab6d25700
RNDeviceInfo: 475a4c447168d0ad4c807e48ef5e0963a0f4eb1b
RNFastImage: 5c9c9fed9c076e521b3f509fe79e790418a544e8
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688
RNGestureHandler: 026038a97d4c8649ce397a22e162ca58b4e6c230
RNImageCropPicker: 486e2f7e2b0461ce24321f751410dce1b3b49e6d
RNPermissions: daf6696301cf49872d6082345083446b0fe59fad
RNReanimated: 6c5ec9e66b9d6a14e3f57c5f607f7c5169b6607e
RNScreens: 6a8a3c6b808aa48dca1780df7b73ea524f602c63
RNShare: da6d90b6dc332f51f86498041d6e34211f96b630
RNSoundLevel: 3dd5d2f6431e47f806233600936deb636a0d9800
RNSVG: 80584470ff1ffc7994923ea135a3e5ad825546b9
RNVectorIcons: 8b5bb0fa61d54cd2020af4f24a51841ce365c7e9
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
SocketRocket: fccef3f9c5cedea1353a9ef6ada904fde10d6608
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
Yoga: 540948b36b46e9469992c4d30ddcc21110b8afe5
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
PODFILE CHECKSUM: 768057e2e875f93ce8defbeb7d060dfab0eb3a23
COCOAPODS: 1.12.1

706
ios/taskme2.xcodeproj/project.pbxproj

@ -0,0 +1,706 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
00E356F31AD99517003FC87E /* taskme2Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* taskme2Tests.m */; };
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
331EB3F0DD322F0D1B2DA16C /* libPods-taskme2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0FD9FA6914F2DA8781CBD173 /* libPods-taskme2.a */; };
41B967CD27101BB7DAE20A1F /* libPods-taskme2-taskme2Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 527F61C1DD2E37B4CB3A2F5C /* libPods-taskme2-taskme2Tests.a */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
remoteInfo = taskme2;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
00E356EE1AD99517003FC87E /* taskme2Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = taskme2Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* taskme2Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = taskme2Tests.m; sourceTree = "<group>"; };
0AC2880E5264076073DF865D /* Pods-taskme2-taskme2Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.release.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.release.xcconfig"; sourceTree = "<group>"; };
0FD9FA6914F2DA8781CBD173 /* libPods-taskme2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme2.a"; sourceTree = BUILT_PRODUCTS_DIR; };
13B07F961A680F5B00A75B9A /* taskme2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = taskme2.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = taskme2/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = taskme2/AppDelegate.mm; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = taskme2/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = taskme2/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = taskme2/main.m; sourceTree = "<group>"; };
527F61C1DD2E37B4CB3A2F5C /* libPods-taskme2-taskme2Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-taskme2-taskme2Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
6D9AB5D106199D173D35A220 /* Pods-taskme2.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.debug.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.debug.xcconfig"; sourceTree = "<group>"; };
73C040992F14443E396EB91F /* Pods-taskme2.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2.release.xcconfig"; path = "Target Support Files/Pods-taskme2/Pods-taskme2.release.xcconfig"; sourceTree = "<group>"; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = taskme2/LaunchScreen.storyboard; sourceTree = "<group>"; };
821D0F756B605E607EC149FE /* Pods-taskme2-taskme2Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-taskme2-taskme2Tests.debug.xcconfig"; path = "Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests.debug.xcconfig"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
00E356EB1AD99517003FC87E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
41B967CD27101BB7DAE20A1F /* libPods-taskme2-taskme2Tests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
331EB3F0DD322F0D1B2DA16C /* libPods-taskme2.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
00E356EF1AD99517003FC87E /* taskme2Tests */ = {
isa = PBXGroup;
children = (
00E356F21AD99517003FC87E /* taskme2Tests.m */,
00E356F01AD99517003FC87E /* Supporting Files */,
);
path = taskme2Tests;
sourceTree = "<group>";
};
00E356F01AD99517003FC87E /* Supporting Files */ = {
isa = PBXGroup;
children = (
00E356F11AD99517003FC87E /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
13B07FAE1A68108700A75B9A /* taskme2 */ = {
isa = PBXGroup;
children = (
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.mm */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
13B07FB71A68108700A75B9A /* main.m */,
);
name = taskme2;
sourceTree = "<group>";
};
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
0FD9FA6914F2DA8781CBD173 /* libPods-taskme2.a */,
527F61C1DD2E37B4CB3A2F5C /* libPods-taskme2-taskme2Tests.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
);
name = Libraries;
sourceTree = "<group>";
};
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
13B07FAE1A68108700A75B9A /* taskme2 */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* taskme2Tests */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
BBD78D7AC51CEA395F1C20DB /* Pods */,
);
indentWidth = 2;
sourceTree = "<group>";
tabWidth = 2;
usesTabs = 0;
};
83CBBA001A601CBA00E9B192 /* Products */ = {
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* taskme2.app */,
00E356EE1AD99517003FC87E /* taskme2Tests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
BBD78D7AC51CEA395F1C20DB /* Pods */ = {
isa = PBXGroup;
children = (
6D9AB5D106199D173D35A220 /* Pods-taskme2.debug.xcconfig */,
73C040992F14443E396EB91F /* Pods-taskme2.release.xcconfig */,
821D0F756B605E607EC149FE /* Pods-taskme2-taskme2Tests.debug.xcconfig */,
0AC2880E5264076073DF865D /* Pods-taskme2-taskme2Tests.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
00E356ED1AD99517003FC87E /* taskme2Tests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "taskme2Tests" */;
buildPhases = (
A5DE24D79F33D432DF4B226D /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
C02CAD0DF223CD1CDAE396D6 /* [CP] Embed Pods Frameworks */,
064D19E25D6E401EB2248F3B /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
00E356F51AD99517003FC87E /* PBXTargetDependency */,
);
name = taskme2Tests;
productName = taskme2Tests;
productReference = 00E356EE1AD99517003FC87E /* taskme2Tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
13B07F861A680F5B00A75B9A /* taskme2 */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "taskme2" */;
buildPhases = (
C70469C45B82A08695475397 /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
F6DF47B7E17A0C6FFB685404 /* [CP] Embed Pods Frameworks */,
82D11052B26BBE7B04DCAD66 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = taskme2;
productName = taskme2;
productReference = 13B07F961A680F5B00A75B9A /* taskme2.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1210;
TargetAttributes = {
00E356ED1AD99517003FC87E = {
CreatedOnToolsVersion = 6.2;
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
LastSwiftMigration = 1120;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "taskme2" */;
compatibilityVersion = "Xcode 12.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 83CBB9F61A601CBA00E9B192;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* taskme2 */,
00E356ED1AD99517003FC87E /* taskme2Tests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
00E356EC1AD99517003FC87E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8E1A680F5B00A75B9A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"$(SRCROOT)/.xcode.env.local",
"$(SRCROOT)/.xcode.env",
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
};
064D19E25D6E401EB2248F3B /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
82D11052B26BBE7B04DCAD66 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-resources.sh\"\n";
showEnvVarsInLog = 0;
};
A5DE24D79F33D432DF4B226D /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-taskme2-taskme2Tests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
C02CAD0DF223CD1CDAE396D6 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2-taskme2Tests/Pods-taskme2-taskme2Tests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
C70469C45B82A08695475397 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-taskme2-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
F6DF47B7E17A0C6FFB685404 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-taskme2/Pods-taskme2-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
FD10A7F022414F080027D42C /* Start Packager */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Start Packager";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
00E356EA1AD99517003FC87E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
00E356F31AD99517003FC87E /* taskme2Tests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 13B07F861A680F5B00A75B9A /* taskme2 */;
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 821D0F756B605E607EC149FE /* Pods-taskme2-taskme2Tests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = taskme2Tests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
"$(inherited)",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/taskme2.app/taskme2";
};
name = Debug;
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 0AC2880E5264076073DF865D /* Pods-taskme2-taskme2Tests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
INFOPLIST_FILE = taskme2Tests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
"$(inherited)",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/taskme2.app/taskme2";
};
name = Release;
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 6D9AB5D106199D173D35A220 /* Pods-taskme2.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 7LY53JU2YB;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = taskme2/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = taskme2;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 73C040992F14443E396EB91F /* Pods-taskme2.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 7LY53JU2YB;
INFOPLIST_FILE = taskme2/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = taskme2;
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
83CBBA201A601CBA00E9B192 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = (
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG",
"-DFOLLY_MOBILE=1",
"-DFOLLY_USE_LIBCPP=1",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
};
name = Debug;
};
83CBBA211A601CBA00E9B192 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = (
"\"$(SDKROOT)/usr/lib/swift\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_CPLUSPLUSFLAGS = (
"$(OTHER_CFLAGS)",
"-DFOLLY_NO_CONFIG",
"-DFOLLY_MOBILE=1",
"-DFOLLY_USE_LIBCPP=1",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "taskme2Tests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
00E356F61AD99517003FC87E /* Debug */,
00E356F71AD99517003FC87E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "taskme2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
13B07F941A680F5B00A75B9A /* Debug */,
13B07F951A680F5B00A75B9A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "taskme2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
83CBBA201A601CBA00E9B192 /* Debug */,
83CBBA211A601CBA00E9B192 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}

88
ios/taskme2.xcodeproj/xcshareddata/xcschemes/taskme2.xcscheme

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1210"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "taskme2.app"
BlueprintName = "taskme2"
ReferencedContainer = "container:taskme2.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
BuildableName = "taskme2Tests.xctest"
BlueprintName = "taskme2Tests"
ReferencedContainer = "container:taskme2.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "taskme2.app"
BlueprintName = "taskme2"
ReferencedContainer = "container:taskme2.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "taskme2.app"
BlueprintName = "taskme2"
ReferencedContainer = "container:taskme2.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

10
ios/taskme2.xcworkspace/contents.xcworkspacedata generated

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:taskme2.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

8
ios/taskme2.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

6
ios/taskme2/AppDelegate.h

@ -0,0 +1,6 @@
#import <RCTAppDelegate.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : RCTAppDelegate
@end

36
ios/taskme2/AppDelegate.mm

@ -0,0 +1,36 @@
#import "AppDelegate.h"
#import <React/RCTBundleURLProvider.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.moduleName = @"taskme2";
// You can add your custom initial props in the dictionary below.
// They will be passed down to the ViewController used by React Native.
self.initialProps = @{};
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}
/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
///
/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
/// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`.
- (BOOL)concurrentRootEnabled
{
return true;
}
@end

53
ios/taskme2/Images.xcassets/AppIcon.appiconset/Contents.json

@ -0,0 +1,53 @@
{
"images" : [
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

6
ios/taskme2/Images.xcassets/Contents.json

@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

60
ios/taskme2/Info.plist

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>taskme2</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
</dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>NSCameraUsageDescription</key>
<string>Camera permission description</string>
<key>NSMicrophoneUsageDescription</key>
<string>Microphone permission description</string>
</dict>
</plist>

47
ios/taskme2/LaunchScreen.storyboard

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="taskme2" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
<rect key="frame" x="0.0" y="202" width="375" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="MN2-I3-ftu">
<rect key="frame" x="0.0" y="626" width="375" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<constraints>
<constraint firstItem="Bcu-3y-fUS" firstAttribute="bottom" secondItem="MN2-I3-ftu" secondAttribute="bottom" constant="20" id="OZV-Vh-mqD"/>
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/>
<constraint firstItem="MN2-I3-ftu" firstAttribute="centerX" secondItem="Bcu-3y-fUS" secondAttribute="centerX" id="akx-eg-2ui"/>
<constraint firstItem="MN2-I3-ftu" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" id="i1E-0Y-4RG"/>
<constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
<constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" symbolic="YES" id="x7j-FC-K8j"/>
</constraints>
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="52.173913043478265" y="375"/>
</scene>
</scenes>
</document>

10
ios/taskme2/main.m

@ -0,0 +1,10 @@
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

24
ios/taskme2Tests/Info.plist

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

66
ios/taskme2Tests/taskme2Tests.m

@ -0,0 +1,66 @@
#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import <React/RCTLog.h>
#import <React/RCTRootView.h>
#define TIMEOUT_SECONDS 600
#define TEXT_TO_LOOK_FOR @"Welcome to React"
@interface taskme2Tests : XCTestCase
@end
@implementation taskme2Tests
- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
{
if (test(view)) {
return YES;
}
for (UIView *subview in [view subviews]) {
if ([self findSubviewInView:subview matching:test]) {
return YES;
}
}
return NO;
}
- (void)testRendersWelcomeScreen
{
UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
BOOL foundElement = NO;
__block NSString *redboxError = nil;
#ifdef DEBUG
RCTSetLogFunction(
^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
if (level >= RCTLogLevelError) {
redboxError = message;
}
});
#endif
while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
[[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
foundElement = [self findSubviewInView:vc.view
matching:^BOOL(UIView *view) {
if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
return YES;
}
return NO;
}];
}
#ifdef DEBUG
RCTSetLogFunction(RCTDefaultLogFunction);
#endif
XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
}
@end

17
metro.config.js

@ -0,0 +1,17 @@
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
}),
},
};

29706
package-lock.json generated

File diff suppressed because it is too large Load Diff

121
package.json

@ -0,0 +1,121 @@
{
"name": "taskme2",
"version": "0.0.1",
"private": true,
"scripts": {
"android": "react-native run-android",
"ios": "react-native run-ios",
"lint": "eslint .",
"start": "react-native start",
"test": "jest",
"postinstall": "react-native setup-ios-permissions && pod-install"
},
"dependencies": {
"@aks-dev/react-native-clear-app-cache": "^1.0.2",
"@bitalikrty/redux-create-reducer": "^1.0.0",
"@gorhom/bottom-sheet": "^4.4.7",
"@miblanchard/react-native-slider": "^2.1.0",
"@react-native-async-storage/async-storage": "^1.18.2",
"@react-native-camera-roll/camera-roll": "^5.6.0",
"@react-native-community/clipboard": "^1.5.1",
"@react-native-community/netinfo": "^9.3.10",
"@react-native-picker/picker": "^2.4.10",
"@react-navigation/bottom-tabs": "^6.5.7",
"@react-navigation/native": "^6.1.6",
"@react-navigation/native-stack": "^6.9.12",
"@react-navigation/stack": "^6.3.16",
"axios": "^1.4.0",
"buffer": "^6.0.3",
"cachios": "^4.0.0",
"deprecated-react-native-prop-types": "^4.1.0",
"ffmpeg-kit-react-native": "^5.1.0",
"jet-tools": "^1.3.0",
"lodash": "^4.17.21",
"mime": "^3.0.0",
"moment": "^2.29.4",
"path": "^0.12.7",
"react": "18.2.0",
"react-native": "0.71.9",
"react-native-app-badge": "^0.1.5",
"react-native-audio-recorder-player": "^3.5.3",
"react-native-autolink": "^4.1.0",
"react-native-calendars": "^1.1298.0",
"react-native-clear-cache": "^1.1.0",
"react-native-controlled-mentions": "^2.2.5",
"react-native-date-picker": "^4.2.13",
"react-native-device-info": "^10.6.0",
"react-native-document-picker": "^9.0.1",
"react-native-draggable-switch": "^1.1.1",
"react-native-drawer": "^2.5.1",
"react-native-expire-storage": "^0.0.3",
"react-native-fast-image": "^8.6.3",
"react-native-fs": "^2.20.0",
"react-native-gesture-handler": "^2.11.0",
"react-native-html-to-pdf": "^0.12.0",
"react-native-image-crop-picker": "^0.40.0",
"react-native-image-picker": "^5.6.0",
"react-native-keyboard-aware-scroll-view": "^0.9.5",
"react-native-masked-text": "^1.13.0",
"react-native-modal": "^13.0.1",
"react-native-pager-view": "^6.2.0",
"react-native-permissions": "^3.8.4",
"react-native-raw-bottom-sheet": "^2.2.0",
"react-native-reanimated": "^3.4.1",
"react-native-restart": "^0.0.27",
"react-native-safe-area-context": "^4.7.1",
"react-native-screens": "^3.23.0",
"react-native-shadow-2": "^7.0.8",
"react-native-share": "^9.2.3",
"react-native-sound-level": "^1.1.5",
"react-native-splash-screen": "^3.3.0",
"react-native-svg": "^13.10.0",
"react-native-swiper": "^1.6.0",
"react-native-tab-view": "^3.5.2",
"react-native-vector-icons": "^10.0.0",
"react-native-video": "^5.2.1",
"react-native-webrtc": "^111.0.1",
"react-native-wheel-pick": "^1.2.2",
"react-redux": "^8.1.2",
"redux": "^4.2.1",
"rn-fetch-blob": "^0.12.0",
"socket.io-client": "^4.5.0",
"validate.js": "^0.13.1"
},
"devDependencies": {
"@babel/core": "^7.20.0",
"@babel/preset-env": "^7.20.0",
"@babel/runtime": "^7.20.0",
"@react-native-community/eslint-config": "^3.2.0",
"@tsconfig/react-native": "^2.0.2",
"@types/jest": "^29.2.1",
"@types/react": "^18.0.24",
"@types/react-native-drawer": "^2.5.5",
"@types/react-native-sqlite-storage": "^6.0.0",
"@types/react-native-video": "^5.0.14",
"@types/react-test-renderer": "^18.0.0",
"babel-jest": "^29.2.1",
"babel-plugin-inline-import": "^3.0.0",
"babel-plugin-module-resolver": "^5.0.0",
"eslint": "^8.19.0",
"jest": "^29.2.1",
"metro-react-native-babel-preset": "0.73.9",
"pod-install": "^0.1.38",
"prettier": "^2.4.1",
"react-native-make": "^1.0.1",
"react-test-renderer": "18.2.0",
"reactotron-react-native": "^5.0.3",
"reactotron-redux": "^3.1.3",
"typescript": "4.8.4"
},
"jest": {
"preset": "react-native"
},
"reactNativePermissionsIOS": [
"Camera",
"Contacts",
"MediaLibrary",
"Microphone",
"Notifications",
"PhotoLibrary"
]
}

40
src/App.tsx

@ -0,0 +1,40 @@
import React, { FC, useEffect } from 'react'
import { Provider } from 'react-redux'
import { Navigation } from './modules/root'
import store from './store'
import './services/system/reactron.service'
import { ThemeProvider } from './shared/themes'
// import Orientation from 'react-native-orientation-locker'
import { LogBox } from 'react-native'
import { appService } from './services/app.service'
import 'react-native-gesture-handler'
import { BottomSheetModalProvider } from '@gorhom/bottom-sheet'
import { SafeAreaProvider } from 'react-native-safe-area-context'
import { GestureHandlerRootView } from 'react-native-gesture-handler'
LogBox.ignoreLogs(['Warning: ...', 'Require cycle: ...']) // Ignore log notification by message
LogBox.ignoreAllLogs() //Ignore all log notifications
const App: FC = () => {
useEffect(() => {
appService.initApp()
// Orientation.lockToPortrait()
}, [])
return (
<SafeAreaProvider>
<ThemeProvider key="theme-provider">
<BottomSheetModalProvider key="bottom-sheet">
<GestureHandlerRootView style={{ flex: 1 }}>
<Provider store={store} key="provider">
<Navigation />
</Provider>
</GestureHandlerRootView>
</BottomSheetModalProvider>
</ThemeProvider>
</SafeAreaProvider>
)
}
export default App

10
src/api/account/requests.interfaces.ts

@ -0,0 +1,10 @@
export interface IUpdateAccountPayload {
email?: string
personalPhoneNumber?: string
innerPhoneNumber?: string
position?: string
dateOfBirth?: string
firstName?: string
lastName?: string
middleName?: string
}

34
src/api/account/requests.ts

@ -0,0 +1,34 @@
import { convertToFormData } from '@/shared/helpers/api.helpers'
import http from '../http.service'
import { ApiResponse } from '../http.types'
import {
IFetchAccountResponse,
IGetAccountCacheInfoResponse,
} from './responses.interfaces'
import { IUpdateAccountPayload } from './requests.interfaces'
export const fetchAccount = (): ApiResponse<IFetchAccountResponse> => {
return http.get<IFetchAccountResponse>('account', {})
}
export const fetchAccountCacheInfoReq = () => {
return http.get<IGetAccountCacheInfoResponse>('account/cache-info', {})
}
export const updateAvatarReq = (avatar: unknown) => {
return http.put<{ avatarUrl: string }>(
'account/avatar',
convertToFormData(avatar),
{ timeout: 30000 },
)
}
export const updateAccountReq = (
payload: IUpdateAccountPayload,
): ApiResponse<IFetchAccountResponse> => {
return http.patch('account', payload)
}
export const removeAvatarReq = () => {
return http.delete('account/avatar')
}

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

@ -0,0 +1,10 @@
import { IUser } from '@/shared'
export interface IFetchAccountResponse extends IUser {}
export interface IGetAccountCacheInfoResponse {
accountV?: string
permissionsV?: string
taxonomiesV?: string
}

18
src/api/auth/requests.interfaces.ts

@ -0,0 +1,18 @@
export interface IRequestConfirmationCodePayload {
phoneNumber: string
}
export interface IFinishLoginPayload {
code: string
phoneNumber: string
deviceName: string
}
export interface IRefreshTokenPayload {
refreshToken: string
}
export interface ILogoutPayload {
refreshToken: string
deviceUuid?: string
}

33
src/api/auth/requests.ts

@ -0,0 +1,33 @@
import http from '../http.service'
import { ApiResponse } from '../http.types'
import {
IFinishLoginPayload,
ILogoutPayload,
IRefreshTokenPayload,
IRequestConfirmationCodePayload,
} from './requests.interfaces'
import { IAuthSuccessResponse } from './responses.interfaces'
export const requestConfirmationCode = (
params: IRequestConfirmationCodePayload,
): ApiResponse<void | number> => {
return http.post<void>('auth', params)
}
export const finishLogin = (
params: IFinishLoginPayload,
): ApiResponse<IAuthSuccessResponse> => {
return http.post<IAuthSuccessResponse>('auth/confirm-code', params)
}
export const resetSessionReq = (
params: IRefreshTokenPayload,
): ApiResponse<IAuthSuccessResponse> => {
return http.post<IAuthSuccessResponse>('auth/refresh-token', params)
}
export const signOut = (
params: ILogoutPayload,
): ApiResponse<IAuthSuccessResponse> => {
return http.post<IAuthSuccessResponse>('auth/logout', params)
}

4
src/api/auth/responses.interfaces.ts

@ -0,0 +1,4 @@
export interface IAuthSuccessResponse {
accessToken: string
refreshToken: string
}

67
src/api/chat-messages/requests.interfaces.ts

@ -0,0 +1,67 @@
import { IFile, IPagination } from '@/shared'
import { AxiosRequestConfig } from 'axios'
export interface IFetchChatMessages extends AxiosRequestConfig, IPagination {
chatId: number | string
fromId?: number
toId?: number
}
export interface IClearChatPayload {
chatId?: number | string
deleteForAll?: boolean
}
export interface IDeleteMessageParams extends AxiosRequestConfig {
deleteForAll?: boolean
}
export interface IDeleteMessageData {
messageId: number
params?: IDeleteMessageParams
}
export interface ISendTextMessage {
chatId: number | string
message: string
mentionsMessage?: string
replyToId?: number
offlineKey?: string
}
export interface IEditTextMessage {
newMessage: string
messageId: number
}
export interface ISendStickerMessage {
chatId: number | string
sticker: string
replyToId?: number
offlineKey?: string
}
export interface ISendFileMessages {
chatId: number | string
files: IFile[]
filesNames?: string[]
replyToId?: number
offlineKey?: string[]
}
export interface ISendFileMessage {
chatId: number | string
file: IFile
fileName: string
replyToId?: number
offlineKey?: string
}
export interface IExportMessagesToFile extends AxiosRequestConfig {
chatId: number
}
export interface IForwardMessage {
chatsIds: (number | string)[]
messageId: number
}

121
src/api/chat-messages/requests.ts

@ -0,0 +1,121 @@
import { prepareFormData } from './../../shared/helpers/fs.helpers'
import { ApiResponse } from '../http.types'
import * as req from './requests.interfaces'
import * as res from './responses.interfaces'
import http from '../http.service'
import { convertToFormData } from '@/shared/helpers/api.helpers'
export const getChatMessagesListReq = (params: {
params: req.IFetchChatMessages
}): ApiResponse<res.IFetchChatMessagesList> => {
return http.get<res.IFetchChatMessagesList>('chats-messages', params)
}
export const clearChatReq = (data?: req.IClearChatPayload) => {
return http.post('chats-messages/clear-chat', data)
}
export const deleteMessageByIdReq = (
messageId: number,
params?: req.IDeleteMessageParams,
): ApiResponse<void> => {
return http.delete<void>(`chats-messages/${messageId}`, { params })
}
export const sendTextMessageReq = (
data: req.ISendTextMessage,
): ApiResponse<void> => {
return http.post<void>('chats-messages/text-message', data)
}
export const editTextMessageReq = (data: req.IEditTextMessage) => {
return http.patch<void>('chats-messages/text-message', data)
}
export const sendStickerMessageReq = (
data: req.ISendStickerMessage,
): ApiResponse<void> => {
return http.post<void>('chats-messages/sticker-message', data)
}
export const sendFileMessageReq = (
data: req.ISendFileMessages,
): ApiResponse<void> => {
const formData = createFormData(data)
return http.post<void>('chats-messages/file-message', formData)
}
export const sendImageMessageReq = (
data: req.ISendFileMessages,
): ApiResponse<void> => {
const formData = createFormData(data)
return http.post<void>('chats-messages/image-message', formData)
}
export const sendVideoMessageReq = (
data: req.ISendFileMessages,
): ApiResponse<void> => {
const formData = createFormData(data)
return http.post<void>('chats-messages/video-message', formData)
}
export const sendAudioMessageReq = (data: req.ISendFileMessages) => {
const formData = createFormData(data)
return http.post<void>('chats-messages/audio-message', formData)
}
export const unreadMessagesCountReq =
(): ApiResponse<res.IGetUnreadMessagesCountResponse> => {
return http.get('chats-messages/unread-messages-count')
}
// V2
export const storeImageMessageReq = (data: req.ISendFileMessage) => {
return http.post(
'chats-messages/image',
convertToFormData(data),
null,
'common/',
)
}
export const storeVideoMessageReq = (data: req.ISendFileMessage) => {
return http.post(
'chats-messages/video',
convertToFormData(data),
null,
'common/',
)
}
export const pinMessageReq = (messageId: number) => {
return http.post<void>(`chats-messages/${messageId}/pin`, {}, {}, 'common/')
}
export const unpinMessageReq = (messageId: number) => {
return http.post<void>(
`chats-messages/${messageId}/unpin`,
{},
{},
'common/',
)
}
export const exportMessagesToFileReq = (params: req.IExportMessagesToFile) => {
return http.get('chats-messages/export-to-file', { params })
}
export const forwardMessageReq = (data: req.IForwardMessage) => {
return http.post<void>('chats-messages/forward-message', data)
}
const createFormData = (data: req.ISendFileMessages) => {
const formData = new FormData()
formData.append('chatId', data.chatId.toString())
if (data.replyToId) formData.append('replyToId', data.replyToId.toString())
data.files.map(it => prepareFormData(it, formData))
return formData
}

7
src/api/chat-messages/responses.interfaces.ts

@ -0,0 +1,7 @@
import { IChatMessage, IPaginationResult } from "@/shared";
export interface IFetchChatMessagesList extends IPaginationResult<IChatMessage> { }
export interface IGetUnreadMessagesCountResponse {
count: number
}

24
src/api/chats-members/requests.interfaces.ts

@ -0,0 +1,24 @@
import { ChatMemberRole } from '@/shared';
export interface IAddNewMember {
chatId: number | string
usersIds: number[]
}
export interface IChangeMemberRole {
memberId?: number | string
// при зміні ролі учасника, доданого в офлайн режимі, у нього
// ще нема реального memberId, тому в цьому випадку ми передаємо
// userId i chatId для однозначного визначення учасника, якому
// змінюється роль у даному чаті
userId?: number
chatId?: number | string
role: ChatMemberRole
}
export interface IDeleteMember {
chatId?: number | string // вказується, коли користувач сам видаляється з чату
memberId?: number | string // вказується, коли адмін чату видаляє учасника
userId?: number // вказується, якщо потрібно видалити користувача, доданого офлайн
deleteAll?: boolean // вказується, коли користувач сам видаляється з усіх його чатів
}

15
src/api/chats-members/requests.ts

@ -0,0 +1,15 @@
import http from '../http.service'
import { ApiResponse } from '../http.types'
import * as req from './requests.interfaces'
export const addNewMemberReq = (params: req.IAddNewMember): ApiResponse<void> => {
return http.post<void>('chats-members', params )
}
export const changeMemberRoleReq = (params: req.IChangeMemberRole): ApiResponse<void> => {
return http.post<void>('chats-members/change-role', params )
}
export const deleteMemberReq = (params: req.IDeleteMember): ApiResponse<void> => {
return http.delete<void>('chats-members', { params })
}

37
src/api/chats/requests.interfaces.ts

@ -0,0 +1,37 @@
import { IFile, IPagination } from '@/shared'
import { AxiosRequestConfig } from 'axios'
import { IRequestConfig } from '../http.service'
export interface ICreateGroupChat {
name: string
previewImg?: IFile
usersIds: number[]
}
export interface ICreatePersonalChat {
userId: number
offlineKey?: string
}
export interface IFetchChatsParams extends AxiosRequestConfig, IPagination {}
export interface IFetchChatDetail extends IRequestConfig {
id: number
}
export interface IEditGroupChat {
chatId: number | string
data: {
name?: string
previewImg?: IFile
}
}
export interface ISetChatMuted {
chatId: number | string
isChatMuted: boolean
}
export interface IFixChatPayload {
chatId: number | string
order: number
}

69
src/api/chats/requests.ts

@ -0,0 +1,69 @@
import { IRequestConfig } from '@/api/http.service'
import { convertToFormData } from '@/shared/helpers/api.helpers'
import http from '../http.service'
import { ApiResponse } from '../http.types'
import * as req from './requests.interfaces'
import * as res from './responses.interfaces'
export const createChatGroupReq = (
params: req.ICreateGroupChat,
): ApiResponse<res.NewChatGroupId> => {
return http.post<res.NewChatGroupId>(
'chats/group-chat',
convertToFormData(params),
)
}
export const createPersonalChatReq = (
data: req.ICreatePersonalChat,
): ApiResponse<res.NewChatGroupId> => {
return http.post<res.NewChatGroupId>('chats/personal-chat', data)
}
export const getChatsListReq = (
params: IRequestConfig = {
params: { limit: 20 },
},
): ApiResponse<res.IFetchChatList> => {
return http.get<res.IFetchChatList>('chats', {
params: params.params,
// needCache: true,
})
}
export const getChatDetailReq = (
params: req.IFetchChatDetail,
): ApiResponse<res.IFetchChatDetail> => {
return http.get<res.IFetchChatDetail>(`chats/${params.id}`)
}
export const editGroupChatReq = (
chatId: number,
data: req.IEditGroupChat,
): ApiResponse<void> => {
return http.patch<void>(`chats/${chatId}`, convertToFormData(data))
}
export const setChatMutedReq = (data: req.ISetChatMuted): ApiResponse<void> => {
return http.post<void>('chats/set-muted', data)
}
export const deleteChatByIdReq = (chatId: number): ApiResponse<void> => {
return http.delete<void>(`chats/${chatId}`)
}
export const fixChatReq = ({ chatId, ...data }: req.IFixChatPayload) => {
return http.post<void>(`chats/${chatId}/fix`, data, {}, 'common/')
}
export const unfixChatReq = (chatId: number) => {
return http.delete(`chats/${chatId}/unfix`, {}, 'common/')
}
export const setChatUnreadReq = (chatId: number) => {
return http.post(`chats/${chatId}/unread`, {}, {}, 'common/')
}
export const setChatReadReq = (chatId: number) => {
return http.post(`chats/${chatId}/read`, {}, {}, 'common/')
}

17
src/api/chats/responses.interfaces.ts

@ -0,0 +1,17 @@
import { IChat, IChatDetails, IPaginationResult } from '@/shared'
export type NewChatGroupId = number
export interface IFetchChatList extends IPaginationResult<IChat> {}
export interface IFetchChatDetail extends IChatDetails {}
export interface IPotentialChatMember {
userId: number
firstName: string
middleName: string
lastName: string
avatarUrl: string
}
export interface IFetchPotentialChatMembersResponse
extends IPaginationResult<IPotentialChatMember> {}

20
src/api/comments/requests.interfaces.ts

@ -0,0 +1,20 @@
export interface ICreateComment {
taskId: number | string
content: string
key?: string
}
export interface IReadComments {
ids: number[]
}
export interface IEditComment {
content: string
}
export interface IEditCommentPayload {
data: IEditComment,
commentId: number | string
}
export interface IReadComment {
ids: number[]
}

25
src/api/comments/requests.ts

@ -0,0 +1,25 @@
import { ApiResponse } from '@/api/http.types'
import http from '../http.service'
import * as Res from './responses.interfaces'
import * as Req from './requests.interfaces'
export const createComment = (
data: Req.ICreateComment,
): ApiResponse<Res.ICommentListItem> => {
return http.post<Res.ICommentListItem>('tasks-comments', data)
}
export const fetchComments = (params: {
taskId: number
}): ApiResponse<Res.ICommentsList> => {
return http.get<Res.ICommentsList>(`tasks-comments`, { params })
}
export const editComment = (data: Req.IEditComment, commentId: number) => {
return http.put<any>(`tasks-comments/${commentId}`, data)
}
export const deleteComment = (commentId: number | string) => {
return http.delete<any>(`tasks-comments/${commentId}`)
}
export const readComments = (data: Req.IReadComment) => {
return http.post<any>('tasks-comments/read', data)
}

27
src/api/comments/responses.interfaces.ts

@ -0,0 +1,27 @@
export interface IComment {
id: number
content: string
authorId: number
createdAt: string
readByUsersIds: number[]
updatedAt: string
}
export interface IUserInComment {
userId: number
firstName: string
lastName: string
avatarUrl: string
}
export interface ICommentListItem {
id: number | string
content: string
authorId: number
createdAt: string
updatedAt: string
readByUsersId: number[],
author: IUserInComment
}
export interface ICommentsList extends Array<ICommentListItem> { }

26
src/api/comments/transform.ts

@ -0,0 +1,26 @@
import { createFullName, ICommentFullInfo } from '@/shared'
import * as Res from './responses.interfaces'
export const transformCommentsInList = (
items: Res.ICommentListItem[],
): ICommentFullInfo[] => {
return items.map(item => {
const transformedItem = {
...item,
author: null,
}
if (item.author) {
transformedItem.author = {
id: item.author.userId,
fullName: createFullName(
item.author.firstName,
item.author.lastName,
),
avatarUrl: item.author.avatarUrl,
}
}
return transformedItem
})
}

10
src/api/configs/requests.ts

@ -0,0 +1,10 @@
import http from "../http.service";
import * as Res from "./responses.interfaces";
const fetchFilesLimitsConfig = () => {
return http.get<Res.IGetFilesConfigRes>("configs/files-config", {}, 'common/');
};
export const configsApi = {
fetchFilesLimitsConfig
};

14
src/api/configs/responses.interfaces.ts

@ -0,0 +1,14 @@
interface IFilesConfigResp {
avatarWidth?: string;
avatarHeight?: string;
avatarSize?: string;
avatarTypes?: string;
taskFilesSize?: string;
taskFilesTypes?: string;
chatFilesSize?: string;
chatVideosSize?: string;
}
export interface IGetFilesConfigRes {
config: IFilesConfigResp;
}

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

@ -0,0 +1,8 @@
import { IPagination } from '@/shared'
import { AxiosRequestConfig } from 'axios'
export interface IFetchContactsPayload extends AxiosRequestConfig, IPagination {
soonBirthday?: boolean
searchString?: string
ids?: number[]
}

31
src/api/contacts/requests.ts

@ -0,0 +1,31 @@
import { IFetchContactsPayload } from './requests.interface'
import {
IFetchBirthdayCountTodayRes,
IFetchContactDetailRes,
IFetchContactsRes,
} from './responses.interfaces'
import http from '../http.service'
import { ApiResponse } from '../http.types'
export const fetchContactsReq = (
params: IFetchContactsPayload,
): ApiResponse<IFetchContactsRes> => {
return http.get<IFetchContactsRes>('contacts', { ...params })
}
export const fetchContactDetailReq = (params: {
contactId: string
}): ApiResponse<IFetchContactDetailRes> => {
return http.get<IFetchContactDetailRes>(`contacts/${params.contactId}`)
}
export const fetchBirthdayCountTodayReq =
(): ApiResponse<IFetchBirthdayCountTodayRes> => {
return http.get<IFetchBirthdayCountTodayRes>(
`contacts/today-birthday-count`,
{
needCache: true,
ttl: 60 * 5,
},
)
}

12
src/api/contacts/responses.interfaces.ts

@ -0,0 +1,12 @@
import { IContact, IContactDetail } from '@/shared'
export interface IFetchContactsRes {
items: IContact[]
count: number
}
export interface IFetchContactDetailRes extends IContactDetail { }
export interface IFetchBirthdayCountTodayRes {
count: number
}

10
src/api/factories/requests.ts

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

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

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

62
src/api/http.decorstors.ts

@ -0,0 +1,62 @@
import { useIsConnected } from 'react-native-offline';
import AsyncStorage from '@react-native-async-storage/async-storage'
import { AxiosRequestConfig, AxiosResponse } from 'axios'
import { ApiResponse } from './http.types'
const isConnected = useIsConnected()
const PREFIX = '@http-offline'
const getAsyncStorageKey = key => `${PREFIX}/${key}`
const setToStorage = async (key: string, data: unknown) => {
await AsyncStorage.setItem(getAsyncStorageKey(key), JSON.stringify(data))
}
const getFromStorage = async (key: string) => {
try {
const data = await AsyncStorage.getItem(getAsyncStorageKey(key))
return JSON.parse(data)
} catch (e) {
return null
}
}
export const OfflineDecorator = async <T>(
requestCall: () => ApiResponse<T>,
key: string,
): ApiResponse<T> => {
if (isConnected) {
const response: AxiosResponse<T> = await requestCall()
setToStorage(key, response.data)
return response
} else {
const data = await getFromStorage(key)
return {
data,
status: 200,
statusText: 'Ok',
headers: {},
config: null,
}
}
}
export const generateKeyFromRequest = (
url: string,
params?: AxiosRequestConfig,
) => {
let result = url
if (params) {
if (params.params && Object.keys(params.params).length) {
const keys = Object.keys(params.params)
const toResult: string[] = []
keys.map((it: string) =>
toResult.push(`${it}=${JSON.stringify(params.params[it])}`),
)
toResult.sort()
result = `${url}?${toResult.join('&')}`
}
}
return result
}

155
src/api/http.service.ts

@ -0,0 +1,155 @@
import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'
import cachios from 'cachios'
import { config } from '@/config'
import { GlobalContainerService } from '@/services/system/global-container.service'
import Storage from 'react-native-expire-storage'
import { authService } from '@/services/domain'
import { SetIsForbidden } from '@/store/shared'
import { simpleDispatch } from '@/store/store-helpers'
import { getErrorCode } from '@/shared/helpers'
const store = () => GlobalContainerService.get('store')
const axiosInstance = axios.create({
baseURL: config.baseUrl,
headers: {
'Content-Type': 'application/json',
},
timeout: 6000,
})
axiosInstance.interceptors.request.use((config: any) => {
const token = store().getState().auth.accessToken
if (token) {
config.headers['authorization'] = `Bearer ${token}`
}
return config
})
const cachiosInstance = cachios.create(axiosInstance)
cachiosInstance.cache = {
get: async (cacheKey: string) => {
const res = await Storage.getItem(cacheKey)
return res ? res : undefined
},
set: async (cacheKey: string, cacheValue: any, ttl: number) => {
await Storage.setItem(cacheKey, cacheValue, ttl)
},
}
// Параметр tryAgainOnError використовується у вийняткових випадках, коли
// не потрібно поновлювати сесію та повторювати запит при помилці на попередній
// спробі зі статусом 401
// Наприклад, якщо повторний запит потрібно надсилати уже з іншими даними
const request = async <T>(
func: Function,
retryCount = 0,
tryAgainOnError = true,
): Promise<AxiosResponse<T>> => {
try {
let response = await func()
return response as any as AxiosResponse
} catch (e: any) {
console.log('error network', e)
if (e?.code === 'ECONNABORTED' && retryCount <= 2) {
return request(func, retryCount + 1)
}
if (getErrorCode(e) === 401 && tryAgainOnError) {
await authService.refreshSession()
return (await func()) as any as AxiosResponse
}
if (getErrorCode(e) === 403) {
simpleDispatch(new SetIsForbidden({ isForbidden: true }))
}
throw e
}
}
export interface ICacheRequestConfig extends AxiosRequestConfig {
ttl?: number
force?: boolean
needCache?: true
}
export interface IRequestConfig extends AxiosRequestConfig {}
interface INonCacheRequestConfig extends AxiosRequestConfig {
needCache?: false
}
type GetRequstConfig = ICacheRequestConfig | INonCacheRequestConfig
const api = {
get: <T>(
url: string,
params?: GetRequstConfig,
prefix = '/app/',
tryAgainOnError = true,
) => {
if (params && params.needCache) {
if (!params.ttl) params.ttl = 60 * 60 * 5
return request<T>(() =>
cachiosInstance.get(`${prefix}${url}`, params),
)
} else {
return request<T>(
() => axiosInstance.get<T>(`${prefix}${url}`, params),
undefined,
tryAgainOnError,
)
}
},
post: <T>(
url: string,
data: any,
params?: AxiosRequestConfig,
prefix = '/app/',
tryAgainOnError = true,
) =>
request<T>(
() => axiosInstance.post<T>(`${prefix}${url}`, data, params),
undefined,
tryAgainOnError,
),
put: <T>(
url: string,
data: any,
params?: AxiosRequestConfig,
prefix = '/app/',
tryAgainOnError = true,
) =>
request<T>(
() => axiosInstance.put<T>(`${prefix}${url}`, data, params),
undefined,
tryAgainOnError,
),
patch: <T>(
url: string,
data: any,
params?: AxiosRequestConfig,
prefix = '/app/',
tryAgainOnError = true,
) =>
request<T>(
() => axiosInstance.patch<T>(`${prefix}${url}`, data, params),
undefined,
tryAgainOnError,
),
delete: <T>(
url: string,
params?: AxiosRequestConfig,
prefix = '/app/',
tryAgainOnError = true,
) =>
request<T>(
() => axiosInstance.delete<T>(`${prefix}${url}`, params),
undefined,
tryAgainOnError,
),
}
export default api

3
src/api/http.types.ts

@ -0,0 +1,3 @@
import { AxiosResponse } from 'axios'
export type ApiResponse<T> = Promise<AxiosResponse<T>>

13
src/api/index.ts

@ -0,0 +1,13 @@
export * from './auth/requests'
export * from './account/requests'
export * from './phone-number/requests'
export * from './users/requests'
export * from './taxonomies/requests'
export * from './tasks/requests'
export * from './permissions/requests'
export * from './chats/requests'
export * from './notifications/requests'
export * from './chats-members/requests'
export * from './chat-messages/requests'
export * from './tasks-documents/requests'
export * from './configs/requests'

4
src/api/notifications/requests.interfaces.ts

@ -0,0 +1,4 @@
export interface ISaveDevicePayload {
deviceUuid: string,
notificationUserId: string
}

6
src/api/notifications/requests.ts

@ -0,0 +1,6 @@
import http from '../http.service'
import * as Req from './requests.interfaces'
export const saveUserDeviceReq = (payload: Req.ISaveDevicePayload) => {
return http.post('notifications/device', payload)
}

7
src/api/permissions/requests.ts

@ -0,0 +1,7 @@
import { ApiResponse } from "../http.types"
import http from '../http.service'
import { IFetchUserPermissions } from "./responses.interfaces"
export const fetchUserPermissionsReq = (): ApiResponse<IFetchUserPermissions> => {
return http.get<IFetchUserPermissions>('permissions/my', {})
}

8
src/api/permissions/responses.interfaces.ts

@ -0,0 +1,8 @@
import { PermissionsActions } from "@/shared";
export interface IFetchUserPermissions {
user: {
[userId: string]: PermissionsActions[]
},
tabs?: Record<string, PermissionsActions[]>
}

6
src/api/phone-number/requests.interfaces.ts

@ -0,0 +1,6 @@
export interface IConfirmPhoneNumberChange {
phoneNumber: string
newPhoneNumber: string
code: string
deviceName: string
}

20
src/api/phone-number/requests.ts

@ -0,0 +1,20 @@
import { ApiResponse } from '../http.types'
import http from '../http.service'
import { IConfirmPhoneNumberChange } from './requests.interfaces'
import { ITokenPair } from '@/shared'
export const checkIfPhoneNumberExists = (
phoneNumber: string,
): ApiResponse<boolean> => {
return http.get<boolean>(`phone-numbers/does-exist/${phoneNumber}`, {})
}
export const requestPhoneNumberChange = (): ApiResponse<void> => {
return http.post<void>('phone-numbers/request-change', {})
}
export const confirmPhoneNumberChange = (
params: IConfirmPhoneNumberChange,
): ApiResponse<ITokenPair> => {
return http.patch<ITokenPair>('phone-numbers/confirm-change', params)
}

7
src/api/tasks-documents/requests.interfaces.ts

@ -0,0 +1,7 @@
import { IFile } from "@/shared";
export interface AddTaskDocumentsParams {
taskId: number | string,
files: IFile[]
fileNames?: string[]
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save