Commit 4ab396ac authored by Nguyen Danh Khanh's avatar Nguyen Danh Khanh

init project

parents
Pipeline #154 failed with stages
[android]
target = Google Inc.:Google APIs:23
[maven_repositories]
central = https://repo1.maven.org/maven2
# Windows files
[*.bat]
end_of_line = crlf
module.exports = {
root: true,
extends: '@react-native-community',
};
[ignore]
; We fork some components by platform
.*/*[.]android.js
; Ignore "BUCK" generated dirs
<PROJECT_ROOT>/\.buckd/
; Ignore polyfills
node_modules/react-native/Libraries/polyfills/.*
; Flow doesn't support platforms
.*/Libraries/Utilities/LoadingView.js
[untyped]
.*/node_modules/@react-native-community/cli/.*/.*
[include]
[libs]
node_modules/react-native/interface.js
node_modules/react-native/flow/
[options]
emoji=true
esproposal.optional_chaining=enable
esproposal.nullish_coalescing=enable
exact_by_default=true
module.file_ext=.js
module.file_ext=.json
module.file_ext=.ios.js
munge_underscores=true
module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
suppress_type=$FlowIssue
suppress_type=$FlowFixMe
suppress_type=$FlowFixMeProps
suppress_type=$FlowFixMeState
[lints]
sketchy-null-number=warn
sketchy-null-mixed=warn
sketchy-number=warn
untyped-type-import=warn
nonstrict-import=warn
deprecated-type=warn
unsafe-getters-setters=warn
unnecessary-invariant=warn
signature-verification-failure=warn
[strict]
deprecated-type
nonstrict-import
sketchy-null
unclear-type
unsafe-getters-setters
untyped-import
untyped-type-import
[version]
^0.137.0
# Windows files should use crlf line endings
# https://help.github.com/articles/dealing-with-line-endings/
*.bat text eol=crlf
# 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
# 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/
module.exports = {
bracketSpacing: false,
jsxBracketSameLine: true,
singleQuote: true,
trailingComma: 'all',
arrowParens: 'avoid',
};
{}
\ No newline at end of file
import React from 'react';
import { Provider } from 'react-redux';
import AppContainer from './src/navigation/RootStackNavigation';
import { PersistGate } from 'redux-persist/integration/react'
import {store, persistor } from "./src/redux/store"
const App = () => {
return (
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<AppContainer />
</PersistGate>
</Provider >
)
}
export default App
\ No newline at end of file
/**
* @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 />);
});
# To learn about Buck see [Docs](https://buckbuild.com/).
# To run your application with Buck:
# - install Buck
# - `npm start` - to start the packager
# - `cd android`
# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
# - `buck install -r android/app` - compile, install and run application
#
load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
lib_deps = []
create_aar_targets(glob(["libs/*.aar"]))
create_jar_targets(glob(["libs/*.jar"]))
android_library(
name = "all-libs",
exported_deps = lib_deps,
)
android_library(
name = "app-code",
srcs = glob([
"src/main/java/**/*.java",
]),
deps = [
":all-libs",
":build_config",
":res",
],
)
android_build_config(
name = "build_config",
package = "com.reactnativebase",
)
android_resource(
name = "res",
package = "com.reactnativebase",
res = "src/main/res",
)
android_binary(
name = "app",
keystore = "//android/keystores:debug",
manifest = "src/main/AndroidManifest.xml",
package_type = "debug",
deps = [
":app-code",
],
)
apply plugin: "com.android.application"
import com.android.build.OutputFile
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
* and bundleReleaseJsAndAssets).
* These basically call `react-native bundle` with the correct arguments during the Android build
* cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
* bundle directly from the development server. Below you can see all the possible configurations
* and their defaults. If you decide to add a configuration block, make sure to add it before the
* `apply from: "../../node_modules/react-native/react.gradle"` line.
*
* project.ext.react = [
* // the name of the generated asset file containing your JS bundle
* bundleAssetName: "index.android.bundle",
*
* // the entry file for bundle generation. If none specified and
* // "index.android.js" exists, it will be used. Otherwise "index.js" is
* // default. Can be overridden with ENTRY_FILE environment variable.
* entryFile: "index.android.js",
*
* // https://reactnative.dev/docs/performance#enable-the-ram-format
* bundleCommand: "ram-bundle",
*
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
* // whether to bundle JS and assets in release mode
* bundleInRelease: true,
*
* // whether to bundle JS and assets in another build variant (if configured).
* // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
* // The configuration property can be in the following formats
* // 'bundleIn${productFlavor}${buildType}'
* // 'bundleIn${buildType}'
* // bundleInFreeDebug: true,
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
* // whether to disable dev mode in custom build variants (by default only disabled in release)
* // for example: to disable dev mode in the staging build type (if configured)
* devDisabledInStaging: true,
* // The configuration property can be in the following formats
* // 'devDisabledIn${productFlavor}${buildType}'
* // 'devDisabledIn${buildType}'
*
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
* // where to put the JS bundle asset in debug mode
* jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
*
* // where to put the JS bundle asset in release mode
* jsBundleDirRelease: "$buildDir/intermediates/assets/release",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in debug mode
* resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
*
* // where to put drawable resources / React Native assets, e.g. the ones you use via
* // require('./image.png')), in release mode
* resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
*
* // by default the gradle tasks are skipped if none of the JS files or assets change; this means
* // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
* // date; if you have any other folders that you want to ignore for performance reasons (gradle
* // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
* // for example, you might want to remove it from here.
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
* nodeExecutableAndArgs: ["node"],
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
* ]
*/
project.ext.react = [
enableHermes: false, // clean and rebuild if changing
]
apply from: "../../node_modules/react-native/react.gradle"
/**
* Set this to true to create two separate APKs instead of one:
* - An APK that only works on ARM devices
* - An APK that only works on x86 devices
* The advantage is the size of the APK is reduced by about 4MB.
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
/**
* The preferred build flavor of JavaScriptCore.
*
* 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:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and mirrored here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/
def enableHermes = project.ext.react.get("enableHermes", false);
android {
ndkVersion rootProject.ext.ndkVersion
compileSdkVersion rootProject.ext.compileSdkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.reactnativebase"
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 "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
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 {
implementation fileTree(dir: "libs", include: ["*.jar"])
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
exclude group:'com.facebook.fbjni'
}
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
exclude group:'com.facebook.flipper'
exclude group:'com.squareup.okhttp3', module:'okhttp'
}
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
exclude group:'com.facebook.flipper'
}
if (enableHermes) {
def hermesPath = "../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
"""Helper definitions to glob .aar and .jar targets"""
def create_aar_targets(aarfiles):
for aarfile in aarfiles:
name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
lib_deps.append(":" + name)
android_prebuilt_aar(
name = name,
aar = aarfile,
)
def create_jar_targets(jarfiles):
for jarfile in jarfiles:
name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
lib_deps.append(":" + name)
prebuilt_jar(
name = name,
binary_jar = jarfile,
)
# 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:
<?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" />
</application>
</manifest>
/**
* Copyright (c) Facebook, Inc. and its 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.reactnativebase;
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.react.ReactFlipperPlugin;
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.modules.network.NetworkingModule;
import okhttp3.OkHttpClient;
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 ReactFlipperPlugin());
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 ReactInstanceManager.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());
}
}
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.reactnativebase">
<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|screenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
package com.reactnativebase;
import com.facebook.react.ReactActivity;
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 "ReactNativeBase";
}
}
package com.reactnativebase;
import android.app.Application;
import android.content.Context;
import com.facebook.react.PackageList;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost =
new ReactNativeHost(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
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
/**
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
*
* @param context
* @param reactInstanceManager
*/
private static void initializeFlipper(
Context context, ReactInstanceManager reactInstanceManager) {
if (BuildConfig.DEBUG) {
try {
/*
We use reflection here to pick up the class that initializes Flipper,
since Flipper library is not available in release mode
*/
Class<?> aClass = Class.forName("com.reactnativebase.ReactNativeFlipper");
aClass
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
.invoke(null, context, reactInstanceManager);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
<resources>
<string name="app_name">ReactNativeBase</string>
</resources>
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:textColor">#000000</item>
</style>
</resources>
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
buildToolsVersion = "29.0.3"
minSdkVersion = 21
compileSdkVersion = 29
targetSdkVersion = 29
ndkVersion = "20.1.5948944"
}
repositories {
google()
jcenter()
}
dependencies {
classpath("com.android.tools.build:gradle:4.1.0")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
maven { url 'https://www.jitpack.io' }
}
}
# 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: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# 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.75.1
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#!/usr/bin/env sh
#
# Copyright 2015 the original author or 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 UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$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 "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# 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
;;
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" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
@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
rootProject.name = 'ReactNativeBase'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'
{
"name": "ReactNativeBase",
"displayName": "ReactNativeBase"
}
\ No newline at end of file
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
};
/**
* @format
*/
import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
AppRegistry.registerComponent(appName, () => App);
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, '10.0'
target 'ReactNativeBase' do
config = use_native_modules!
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => false
)
target 'ReactNativeBaseTests' do
inherit! :complete
# Pods for testing
end
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable the next line.
use_flipper!()
post_install do |installer|
react_native_post_install(installer)
end
end
\ No newline at end of file
PODS:
- boost-for-react-native (1.63.0)
- CocoaAsyncSocket (7.6.5)
- DoubleConversion (1.1.6)
- FBLazyVector (0.64.2)
- FBReactNativeSpec (0.64.2):
- RCT-Folly (= 2020.01.13.00)
- RCTRequired (= 0.64.2)
- RCTTypeSafety (= 0.64.2)
- React-Core (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- Flipper (0.75.1):
- Flipper-Folly (~> 2.5)
- Flipper-RSocket (~> 1.3)
- Flipper-DoubleConversion (1.1.7)
- Flipper-Folly (2.5.3):
- boost-for-react-native
- Flipper-DoubleConversion
- Flipper-Glog
- libevent (~> 2.1.12)
- OpenSSL-Universal (= 1.1.180)
- Flipper-Glog (0.3.6)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.3.1):
- Flipper-Folly (~> 2.5)
- FlipperKit (0.75.1):
- FlipperKit/Core (= 0.75.1)
- FlipperKit/Core (0.75.1):
- Flipper (~> 0.75.1)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- FlipperKit/CppBridge (0.75.1):
- Flipper (~> 0.75.1)
- FlipperKit/FBCxxFollyDynamicConvert (0.75.1):
- Flipper-Folly (~> 2.5)
- FlipperKit/FBDefines (0.75.1)
- FlipperKit/FKPortForwarding (0.75.1):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- FlipperKit/FlipperKitHighlightOverlay (0.75.1)
- FlipperKit/FlipperKitLayoutPlugin (0.75.1):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- FlipperKit/FlipperKitLayoutTextSearchable (0.75.1)
- FlipperKit/FlipperKitNetworkPlugin (0.75.1):
- FlipperKit/Core
- FlipperKit/FlipperKitReactPlugin (0.75.1):
- FlipperKit/Core
- FlipperKit/FlipperKitUserDefaultsPlugin (0.75.1):
- FlipperKit/Core
- FlipperKit/SKIOSNetworkPlugin (0.75.1):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- glog (0.3.5)
- libevent (2.1.12)
- OpenSSL-Universal (1.1.180)
- RCT-Folly (2020.01.13.00):
- boost-for-react-native
- DoubleConversion
- glog
- RCT-Folly/Default (= 2020.01.13.00)
- RCT-Folly/Default (2020.01.13.00):
- boost-for-react-native
- DoubleConversion
- glog
- RCTRequired (0.64.2)
- RCTTypeSafety (0.64.2):
- FBLazyVector (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTRequired (= 0.64.2)
- React-Core (= 0.64.2)
- React (0.64.2):
- React-Core (= 0.64.2)
- React-Core/DevSupport (= 0.64.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-RCTActionSheet (= 0.64.2)
- React-RCTAnimation (= 0.64.2)
- React-RCTBlob (= 0.64.2)
- React-RCTImage (= 0.64.2)
- React-RCTLinking (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- React-RCTSettings (= 0.64.2)
- React-RCTText (= 0.64.2)
- React-RCTVibration (= 0.64.2)
- React-callinvoker (0.64.2)
- React-Core (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/CoreModulesHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/Default (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/DevSupport (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-jsinspector (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTActionSheetHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTAnimationHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTBlobHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTImageHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTLinkingHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTNetworkHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTSettingsHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTTextHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTVibrationHeaders (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-Core/RCTWebSocket (0.64.2):
- glog
- RCT-Folly (= 2020.01.13.00)
- React-Core/Default (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsiexecutor (= 0.64.2)
- React-perflogger (= 0.64.2)
- Yoga
- React-CoreModules (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.2)
- React-Core/CoreModulesHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTImage (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-cxxreact (0.64.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-callinvoker (= 0.64.2)
- React-jsi (= 0.64.2)
- React-jsinspector (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-runtimeexecutor (= 0.64.2)
- React-jsi (0.64.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-jsi/Default (= 0.64.2)
- React-jsi/Default (0.64.2):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-jsiexecutor (0.64.2):
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-perflogger (= 0.64.2)
- React-jsinspector (0.64.2)
- react-native-safe-area-context (3.2.0):
- React-Core
- React-perflogger (0.64.2)
- React-RCTActionSheet (0.64.2):
- React-Core/RCTActionSheetHeaders (= 0.64.2)
- React-RCTAnimation (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.2)
- React-Core/RCTAnimationHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTBlob (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- React-Core/RCTBlobHeaders (= 0.64.2)
- React-Core/RCTWebSocket (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTImage (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.2)
- React-Core/RCTImageHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- React-RCTNetwork (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTLinking (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- React-Core/RCTLinkingHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTNetwork (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.2)
- React-Core/RCTNetworkHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTSettings (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.64.2)
- React-Core/RCTSettingsHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-RCTText (0.64.2):
- React-Core/RCTTextHeaders (= 0.64.2)
- React-RCTVibration (0.64.2):
- FBReactNativeSpec (= 0.64.2)
- RCT-Folly (= 2020.01.13.00)
- React-Core/RCTVibrationHeaders (= 0.64.2)
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (= 0.64.2)
- React-runtimeexecutor (0.64.2):
- React-jsi (= 0.64.2)
- ReactCommon/turbomodule/core (0.64.2):
- DoubleConversion
- glog
- RCT-Folly (= 2020.01.13.00)
- React-callinvoker (= 0.64.2)
- React-Core (= 0.64.2)
- React-cxxreact (= 0.64.2)
- React-jsi (= 0.64.2)
- React-perflogger (= 0.64.2)
- RNCMaskedView (0.1.11):
- React
- RNGestureHandler (1.10.3):
- React-Core
- RNReanimated (2.2.0):
- DoubleConversion
- FBLazyVector
- FBReactNativeSpec
- glog
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React
- React-callinvoker
- React-Core
- React-Core/DevSupport
- React-Core/RCTWebSocket
- React-CoreModules
- React-cxxreact
- React-jsi
- React-jsiexecutor
- React-jsinspector
- React-RCTActionSheet
- React-RCTAnimation
- React-RCTBlob
- React-RCTImage
- React-RCTLinking
- React-RCTNetwork
- React-RCTSettings
- React-RCTText
- React-RCTVibration
- ReactCommon/turbomodule/core
- Yoga
- RNScreens (3.4.0):
- React-Core
- React-RCTImage
- Yoga (1.14.0)
- YogaKit (1.18.1):
- Yoga (~> 1.14)
DEPENDENCIES:
- 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`)
- Flipper (~> 0.75.1)
- Flipper-DoubleConversion (= 1.1.7)
- Flipper-Folly (~> 2.5.3)
- Flipper-Glog (= 0.3.6)
- Flipper-PeerTalk (~> 0.0.4)
- Flipper-RSocket (~> 1.3)
- FlipperKit (~> 0.75.1)
- FlipperKit/Core (~> 0.75.1)
- FlipperKit/CppBridge (~> 0.75.1)
- FlipperKit/FBCxxFollyDynamicConvert (~> 0.75.1)
- FlipperKit/FBDefines (~> 0.75.1)
- FlipperKit/FKPortForwarding (~> 0.75.1)
- FlipperKit/FlipperKitHighlightOverlay (~> 0.75.1)
- FlipperKit/FlipperKitLayoutPlugin (~> 0.75.1)
- FlipperKit/FlipperKitLayoutTextSearchable (~> 0.75.1)
- FlipperKit/FlipperKitNetworkPlugin (~> 0.75.1)
- FlipperKit/FlipperKitReactPlugin (~> 0.75.1)
- FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.75.1)
- FlipperKit/SKIOSNetworkPlugin (~> 0.75.1)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- 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-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-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-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- 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-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`)
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
trunk:
- boost-for-react-native
- CocoaAsyncSocket
- Flipper
- Flipper-DoubleConversion
- Flipper-Folly
- Flipper-Glog
- Flipper-PeerTalk
- Flipper-RSocket
- FlipperKit
- libevent
- OpenSSL-Universal
- YogaKit
EXTERNAL SOURCES:
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"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.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-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-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-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
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-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"
RNCMaskedView:
:path: "../node_modules/@react-native-community/masked-view"
RNGestureHandler:
:path: "../node_modules/react-native-gesture-handler"
RNReanimated:
:path: "../node_modules/react-native-reanimated"
RNScreens:
:path: "../node_modules/react-native-screens"
Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
FBLazyVector: e686045572151edef46010a6f819ade377dfeb4b
FBReactNativeSpec: a594324149e509e84ea69092ba6b08bb7926da01
Flipper: d3da1aa199aad94455ae725e9f3aa43f3ec17021
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
Flipper-Folly: 755929a4f851b2fb2c347d533a23f191b008554c
Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: 127954abe8b162fcaf68d2134d34dc2bd7076154
FlipperKit: 8a20b5c5fcf9436cac58551dc049867247f64b00
glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c
RCTRequired: 6d3e854f0e7260a648badd0d44fc364bc9da9728
RCTTypeSafety: c1f31d19349c6b53085766359caac425926fafaa
React: bda6b6d7ae912de97d7a61aa5c160db24aa2ad69
React-callinvoker: 9840ea7e8e88ed73d438edb725574820b29b5baa
React-Core: b5e385da7ce5f16a220fc60fd0749eae2c6120f0
React-CoreModules: 17071a4e2c5239b01585f4aa8070141168ab298f
React-cxxreact: 9be7b6340ed9f7c53e53deca7779f07cd66525ba
React-jsi: 67747b9722f6dab2ffe15b011bcf6b3f2c3f1427
React-jsiexecutor: 80c46bd381fd06e418e0d4f53672dc1d1945c4c3
React-jsinspector: cc614ec18a9ca96fd275100c16d74d62ee11f0ae
react-native-safe-area-context: f0906bf8bc9835ac9a9d3f97e8bde2a997d8da79
React-perflogger: 25373e382fed75ce768a443822f07098a15ab737
React-RCTActionSheet: af7796ba49ffe4ca92e7277a5d992d37203f7da5
React-RCTAnimation: 6a2e76ab50c6f25b428d81b76a5a45351c4d77aa
React-RCTBlob: 02a2887023e0eed99391b6445b2e23a2a6f9226d
React-RCTImage: ce5bf8e7438f2286d9b646a05d6ab11f38b0323d
React-RCTLinking: ccd20742de14e020cb5f99d5c7e0bf0383aefbd9
React-RCTNetwork: dfb9d089ab0753e5e5f55fc4b1210858f7245647
React-RCTSettings: b14aef2d83699e48b410fb7c3ba5b66cd3291ae2
React-RCTText: 41a2e952dd9adc5caf6fb68ed46b275194d5da5f
React-RCTVibration: 24600e3b1aaa77126989bc58b6747509a1ba14f3
React-runtimeexecutor: a9904c6d0218fb9f8b19d6dd88607225927668f9
ReactCommon: 149906e01aa51142707a10665185db879898e966
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211
RNReanimated: 9c13c86454bfd54dab7505c1a054470bfecd2563
RNScreens: 21b73c94c9117e1110a79ee0ee80c93ccefed8ce
Yoga: 575c581c63e0d35c9a83f4b46d01d63abc1100ac
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
PODFILE CHECKSUM: e06ccf3e8ade9d29c7aeb4e70874c40098955bd2
COCOAPODS: 1.10.1
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
00E356F31AD99517003FC87E /* ReactNativeBaseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* ReactNativeBaseTests.m */; };
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
555A881C294218662D7DB72C /* libPods-ReactNativeBase-ReactNativeBaseTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D738A5E166D77B9C096FFEC /* libPods-ReactNativeBase-ReactNativeBaseTests.a */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
AD86860E26732EE44E6A6230 /* libPods-ReactNativeBase.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 313149D470D5923D3454C54E /* libPods-ReactNativeBase.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
remoteInfo = ReactNativeBase;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
00E356EE1AD99517003FC87E /* ReactNativeBaseTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ReactNativeBaseTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* ReactNativeBaseTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReactNativeBaseTests.m; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* ReactNativeBase.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReactNativeBase.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = ReactNativeBase/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = ReactNativeBase/AppDelegate.m; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = ReactNativeBase/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ReactNativeBase/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ReactNativeBase/main.m; sourceTree = "<group>"; };
313149D470D5923D3454C54E /* libPods-ReactNativeBase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeBase.a"; sourceTree = BUILT_PRODUCTS_DIR; };
4D738A5E166D77B9C096FFEC /* libPods-ReactNativeBase-ReactNativeBaseTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ReactNativeBase-ReactNativeBaseTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ReactNativeBase/LaunchScreen.storyboard; sourceTree = "<group>"; };
A08E1DCF7C649EE3D867B6D3 /* Pods-ReactNativeBase-ReactNativeBaseTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeBase-ReactNativeBaseTests.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeBase-ReactNativeBaseTests/Pods-ReactNativeBase-ReactNativeBaseTests.release.xcconfig"; sourceTree = "<group>"; };
AB29A0B6146FAF0578D99A78 /* Pods-ReactNativeBase.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeBase.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeBase/Pods-ReactNativeBase.debug.xcconfig"; sourceTree = "<group>"; };
B61B03653BD3463E3B018B36 /* Pods-ReactNativeBase-ReactNativeBaseTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeBase-ReactNativeBaseTests.debug.xcconfig"; path = "Target Support Files/Pods-ReactNativeBase-ReactNativeBaseTests/Pods-ReactNativeBase-ReactNativeBaseTests.debug.xcconfig"; sourceTree = "<group>"; };
DF6CAC9696B476D38EF96D2D /* Pods-ReactNativeBase.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ReactNativeBase.release.xcconfig"; path = "Target Support Files/Pods-ReactNativeBase/Pods-ReactNativeBase.release.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 = (
555A881C294218662D7DB72C /* libPods-ReactNativeBase-ReactNativeBaseTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
AD86860E26732EE44E6A6230 /* libPods-ReactNativeBase.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
00E356EF1AD99517003FC87E /* ReactNativeBaseTests */ = {
isa = PBXGroup;
children = (
00E356F21AD99517003FC87E /* ReactNativeBaseTests.m */,
00E356F01AD99517003FC87E /* Supporting Files */,
);
path = ReactNativeBaseTests;
sourceTree = "<group>";
};
00E356F01AD99517003FC87E /* Supporting Files */ = {
isa = PBXGroup;
children = (
00E356F11AD99517003FC87E /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
13B07FAE1A68108700A75B9A /* ReactNativeBase */ = {
isa = PBXGroup;
children = (
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
13B07FB71A68108700A75B9A /* main.m */,
);
name = ReactNativeBase;
sourceTree = "<group>";
};
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
313149D470D5923D3454C54E /* libPods-ReactNativeBase.a */,
4D738A5E166D77B9C096FFEC /* libPods-ReactNativeBase-ReactNativeBaseTests.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
47C1251EA4EC0380E378BC90 /* Pods */ = {
isa = PBXGroup;
children = (
AB29A0B6146FAF0578D99A78 /* Pods-ReactNativeBase.debug.xcconfig */,
DF6CAC9696B476D38EF96D2D /* Pods-ReactNativeBase.release.xcconfig */,
B61B03653BD3463E3B018B36 /* Pods-ReactNativeBase-ReactNativeBaseTests.debug.xcconfig */,
A08E1DCF7C649EE3D867B6D3 /* Pods-ReactNativeBase-ReactNativeBaseTests.release.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
);
name = Libraries;
sourceTree = "<group>";
};
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
13B07FAE1A68108700A75B9A /* ReactNativeBase */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* ReactNativeBaseTests */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
47C1251EA4EC0380E378BC90 /* Pods */,
);
indentWidth = 2;
sourceTree = "<group>";
tabWidth = 2;
usesTabs = 0;
};
83CBBA001A601CBA00E9B192 /* Products */ = {
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* ReactNativeBase.app */,
00E356EE1AD99517003FC87E /* ReactNativeBaseTests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
00E356ED1AD99517003FC87E /* ReactNativeBaseTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactNativeBaseTests" */;
buildPhases = (
3C2191890FF302801798479F /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
28987692EAC7066DC0A62C43 /* [CP] Embed Pods Frameworks */,
16C81D527AD473EDEDC51278 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
00E356F51AD99517003FC87E /* PBXTargetDependency */,
);
name = ReactNativeBaseTests;
productName = ReactNativeBaseTests;
productReference = 00E356EE1AD99517003FC87E /* ReactNativeBaseTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
13B07F861A680F5B00A75B9A /* ReactNativeBase */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeBase" */;
buildPhases = (
45CA89EE549CF899E898E51D /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
02CAF85110F359126825DDA9 /* [CP] Embed Pods Frameworks */,
A52A73DD324E4FBD70849546 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = ReactNativeBase;
productName = ReactNativeBase;
productReference = 13B07F961A680F5B00A75B9A /* ReactNativeBase.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 "ReactNativeBase" */;
compatibilityVersion = "Xcode 12.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 83CBB9F61A601CBA00E9B192;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* ReactNativeBase */,
00E356ED1AD99517003FC87E /* ReactNativeBaseTests */,
);
};
/* 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 = (
);
name = "Bundle React Native code and images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
};
02CAF85110F359126825DDA9 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase/Pods-ReactNativeBase-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase/Pods-ReactNativeBase-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase/Pods-ReactNativeBase-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
16C81D527AD473EDEDC51278 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase-ReactNativeBaseTests/Pods-ReactNativeBase-ReactNativeBaseTests-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase-ReactNativeBaseTests/Pods-ReactNativeBase-ReactNativeBaseTests-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase-ReactNativeBaseTests/Pods-ReactNativeBase-ReactNativeBaseTests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
28987692EAC7066DC0A62C43 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase-ReactNativeBaseTests/Pods-ReactNativeBase-ReactNativeBaseTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase-ReactNativeBaseTests/Pods-ReactNativeBase-ReactNativeBaseTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase-ReactNativeBaseTests/Pods-ReactNativeBase-ReactNativeBaseTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
3C2191890FF302801798479F /* [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-ReactNativeBase-ReactNativeBaseTests-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;
};
45CA89EE549CF899E898E51D /* [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-ReactNativeBase-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;
};
A52A73DD324E4FBD70849546 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase/Pods-ReactNativeBase-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase/Pods-ReactNativeBase-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-ReactNativeBase/Pods-ReactNativeBase-resources.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 /* ReactNativeBaseTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 13B07F861A680F5B00A75B9A /* ReactNativeBase */;
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B61B03653BD3463E3B018B36 /* Pods-ReactNativeBase-ReactNativeBaseTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = ReactNativeBaseTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
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)/ReactNativeBase.app/ReactNativeBase";
};
name = Debug;
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = A08E1DCF7C649EE3D867B6D3 /* Pods-ReactNativeBase-ReactNativeBaseTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
INFOPLIST_FILE = ReactNativeBaseTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
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)/ReactNativeBase.app/ReactNativeBase";
};
name = Release;
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = AB29A0B6146FAF0578D99A78 /* Pods-ReactNativeBase.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = ReactNativeBase/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = ReactNativeBase;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = DF6CAC9696B476D38EF96D2D /* Pods-ReactNativeBase.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 1;
INFOPLIST_FILE = ReactNativeBase/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = ReactNativeBase;
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 = "gnu++0x";
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*]" = "arm64 ";
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 = 10.0;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = (
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
83CBBA211A601CBA00E9B192 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
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*]" = "arm64 ";
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 = 10.0;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = (
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "ReactNativeBaseTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
00E356F61AD99517003FC87E /* Debug */,
00E356F71AD99517003FC87E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "ReactNativeBase" */ = {
isa = XCConfigurationList;
buildConfigurations = (
13B07F941A680F5B00A75B9A /* Debug */,
13B07F951A680F5B00A75B9A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "ReactNativeBase" */ = {
isa = XCConfigurationList;
buildConfigurations = (
83CBBA201A601CBA00E9B192 /* Debug */,
83CBBA211A601CBA00E9B192 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}
<?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 = "ReactNativeBase.app"
BlueprintName = "ReactNativeBase"
ReferencedContainer = "container:ReactNativeBase.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 = "ReactNativeBaseTests.xctest"
BlueprintName = "ReactNativeBaseTests"
ReferencedContainer = "container:ReactNativeBase.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 = "ReactNativeBase.app"
BlueprintName = "ReactNativeBase"
ReferencedContainer = "container:ReactNativeBase.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "ReactNativeBase.app"
BlueprintName = "ReactNativeBase"
ReferencedContainer = "container:ReactNativeBase.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:ReactNativeBase.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
#import <React/RCTBridgeDelegate.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
@property (nonatomic, strong) UIWindow *window;
@end
#import "AppDelegate.h"
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#ifdef FB_SONARKIT_ENABLED
#import <FlipperKit/FlipperClient.h>
#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h>
#import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h>
#import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h>
#import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h>
#import <FlipperKitReactPlugin/FlipperKitReactPlugin.h>
static void InitializeFlipper(UIApplication *application) {
FlipperClient *client = [FlipperClient sharedClient];
SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
[client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
[client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
[client addPlugin:[FlipperKitReactPlugin new]];
[client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
[client start];
}
#endif
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
#ifdef FB_SONARKIT_ENABLED
InitializeFlipper(application);
#endif
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"ReactNativeBase"
initialProperties:nil];
if (@available(iOS 13.0, *)) {
rootView.backgroundColor = [UIColor systemBackgroundColor];
} else {
rootView.backgroundColor = [UIColor whiteColor];
}
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}
@end
{
"images" : [
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
\ No newline at end of file
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
<?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>ReactNativeBase</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>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</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/>
</dict>
</plist>
<?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="ReactNativeBase" 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>
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
<?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>
#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 ReactNativeBaseTests : XCTestCase
@end
@implementation ReactNativeBaseTests
- (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
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: true,
},
}),
},
};
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "reactnativebase",
"version": "0.0.1",
"private": true,
"scripts": {
"android": "npx react-native run-android",
"ios": "react-native run-ios",
"start": "react-native start --reset-cache",
"test": "jest",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
"clean:android": "cd android/ && ./gradlew clean",
"jetify": "npx jetify",
"build-release": "cd android && ./gradlew bundleRelease",
"release-device": "npx react-native run-android --variant=release"
},
"dependencies": {
"@react-native-async-storage/async-storage": "^1.15.5",
"@react-native-community/checkbox": "^0.5.8",
"@react-native-community/masked-view": "^0.1.11",
"@react-navigation/bottom-tabs": "^5.11.11",
"@react-navigation/drawer": "^5.12.5",
"@react-navigation/native": "^5.9.4",
"@react-navigation/stack": "^5.14.5",
"@reduxjs/toolkit": "^1.6.0",
"axios": "^0.21.1",
"react": "17.0.1",
"react-native": "0.64.2",
"react-native-gesture-handler": "^1.10.3",
"react-native-reanimated": "^2.2.0",
"react-native-safe-area-context": "^3.2.0",
"react-native-screens": "^3.4.0",
"react-native-vector-icons": "^8.1.0",
"react-redux": "^7.2.4",
"redux": "^4.1.0",
"redux-logger": "^3.0.6",
"redux-persist": "^6.0.0",
"redux-saga": "^1.1.3"
},
"devDependencies": {
"@babel/core": "^7.12.9",
"@babel/runtime": "^7.12.5",
"@react-native-community/eslint-config": "^2.0.0",
"@types/react": "^17.0.11",
"@types/react-native": "^0.64.10",
"@types/redux-logger": "^3.0.8",
"babel-jest": "^26.6.3",
"eslint": "7.14.0",
"jest": "^26.6.3",
"metro-react-native-babel-preset": "^0.64.0",
"react-native-typescript-transformer": "^1.2.13",
"react-test-renderer": "17.0.1",
"typescript": "^4.3.4"
},
"jest": {
"preset": "react-native"
}
}
module.exports = {
getTransformModulePath() {
return require.resolve('react-native-typescript-transformer');
},
getSourceExts() {
return ['ts', 'tsx'];
}
};
\ No newline at end of file
{"page":1,"size":10,"total_elements":6,"total_pages":1,"last":true,
"data":[
{"inv_id":1115245,"drg_store_id":2086,"drug_id":1039746,"drg_drug_cd":"S00000001","drg_drug_name":" SÁNG MẮT-f ","lot":"","quantity":40.000000,"exp_date":"","mfg_date":"","drug_unit_id":2348352,"unit_cd":"","unit_name":"Viên","price":4323.00,"created_date":"2021-06-30T18:42:43.000+0700","updated_date":null,"updated_user":"0964913998","account_id":null,"active_flg":1,"active_ingredient":"","company_name":"Công ty TNHH Dược phẩm FITO Pharma","company_code":"","image_url":"https://medlinknhathuoclongdev.s3.ap-southeast-1.amazonaws.com/1625055046800_images.jpg","employee_commissions":0.00,"loyalty_flg":0,"direction_for_use":"","package_desc":"Hộp 40 viên Hộp 100 viên","dosage":"","vat_percent":0,"drg_barcode":"774056",
"units":[
{"drug_unit_id":2348352,"unit_id":14,"unit_name":"Viên","unit_qty":1,"default_flg":1,"price":1000.00,"price_before_vat":1000.00,"drug_id":1039746}]},
{"inv_id":1115247,"drg_store_id":2086,"drug_id":1039746,"drg_drug_cd":"S00000001","drg_drug_name":" SÁNG MẮT-f ","lot":"343","quantity":1000.000000,"exp_date":"20230720","mfg_date":"","drug_unit_id":2348352,"unit_cd":"","unit_name":"Viên","price":4323.00,"created_date":"2021-07-03T14:05:04.000+0700","updated_date":null,"updated_user":"0964913998","account_id":null,"active_flg":1,"active_ingredient":"","company_name":"Công ty TNHH Dược phẩm FITO Pharma","company_code":"","image_url":"https://medlinknhathuoclongdev.s3.ap-southeast-1.amazonaws.com/1625055046800_images.jpg","employee_commissions":0.00,"loyalty_flg":0,"direction_for_use":"","package_desc":"Hộp 40 viên Hộp 100 viên","dosage":"","vat_percent":0,"drg_barcode":"774056",
"units":[
{"drug_unit_id":2348352,"unit_id":14,"unit_name":"Viên","unit_qty":1,"default_flg":1,"price":1000.00,"price_before_vat":1000.00,"drug_id":1039746}]},
{"inv_id":1115248,"drg_store_id":2086,"drug_id":1039751,"drg_drug_cd":"S00000006","drg_drug_name":" Advotinib 100mg","lot":"3421a","quantity":2000.000000,"exp_date":"20210730","mfg_date":"","drug_unit_id":2348357,"unit_cd":"","unit_name":"Viên","price":1000.00,"created_date":"2021-07-04T17:39:13.000+0700","updated_date":null,"updated_user":"0964913998","account_id":null,"active_flg":1,"active_ingredient":"","company_name":"Remedica Ltd. ","company_code":"","image_url":"","employee_commissions":0.00,"loyalty_flg":0,"direction_for_use":"","package_desc":"hộp 6 vỉ x 10 viên","dosage":"","vat_percent":0,"drg_barcode":"816339",
"units":[
{"drug_unit_id":2348357,"unit_id":14,"unit_name":"Viên","unit_qty":1,"default_flg":1,"price":1000.00,"price_before_vat":1000.00,"drug_id":1039751}]},
{"inv_id":1115246,"drg_store_id":2086,"drug_id":1039747,"drg_drug_cd":"S00000002","drg_drug_name":" BERBERAL F 50mg","lot":"234232","quantity":1000.000000,"exp_date":"20220715","mfg_date":"","drug_unit_id":2348353,"unit_cd":"","unit_name":"Viên","price":2333.00,"created_date":"2021-07-03T14:05:04.000+0700","updated_date":null,"updated_user":"0964913998","account_id":null,"active_flg":1,"active_ingredient":"","company_name":"Công ty CPDP 2-9 TPHCM","company_code":"","image_url":"","employee_commissions":0.00,"loyalty_flg":0,"direction_for_use":"","package_desc":"","dosage":"","vat_percent":0,"drg_barcode":"574406",
"units":[
{"drug_unit_id":2348353,"unit_id":14,"unit_name":"Viên","unit_qty":1,"default_flg":1,"price":1000.00,"price_before_vat":1000.00,"drug_id":1039747}]},
{"inv_id":1115250,"drg_store_id":2086,"drug_id":1039749,"drg_drug_cd":"S00000004","drg_drug_name":" Cefixim 200mg ","lot":"123","quantity":1122.000000,"exp_date":"20210706","mfg_date":"","drug_unit_id":2348355,"unit_cd":"","unit_name":"Viên","price":12299.00,"created_date":"2021-07-04T17:39:13.000+0700","updated_date":null,"updated_user":"0964913998","account_id":null,"active_flg":1,"active_ingredient":"","company_name":"Chi nhánh công ty CP Armepharco- XN DP 150","company_code":"","image_url":"","employee_commissions":0.00,"loyalty_flg":0,"direction_for_use":"","package_desc":"Hộp 2 vỉ x 10 v","dosage":"","vat_percent":0,"drg_barcode":"946764",
"units":[
{"drug_unit_id":2348355,"unit_id":14,"unit_name":"Viên","unit_qty":1,"default_flg":1,"price":1000.00,"price_before_vat":1000.00,"drug_id":1039749}]},
{"inv_id":1115249,"drg_store_id":2086,"drug_id":1039752,"drg_drug_cd":"S00000007","drg_drug_name":" KALI CLORID 500 mg ","lot":"231","quantity":10000.000000,"exp_date":"20210730","mfg_date":"","drug_unit_id":2348358,"unit_cd":"","unit_name":"Viên","price":2000.00,"created_date":"2021-07-04T17:39:13.000+0700","updated_date":null,"updated_user":"0964913998","account_id":null,"active_flg":1,"active_ingredient":"","company_name":"Công ty CPDP 2/9","company_code":"","image_url":"","employee_commissions":0.00,"loyalty_flg":0,"direction_for_use":"","package_desc":"Chai 100 v","dosage":"","vat_percent":0,"drg_barcode":"746851",
"units":[
{"drug_unit_id":2348358,"unit_id":14,"unit_name":"Viên","unit_qty":1,"default_flg":1,"price":1000.00,"price_before_vat":1000.00,"drug_id":1039752}
]}
]
}
\ No newline at end of file
import client from "./config";
export let token = null;
export interface LoginRequest{
login_id: string;
password: string;
}
export default {
login(params: LoginRequest) {
const url = `/auth/signin`;
return client.post(url, params).then((response:any) => {
token = response.data.access_token;
console.log('/////////////////////////////////////////////',token)
return response;
});
},
register(params: {
store_name: string;
phone_no: string;
email: string;
password: string;
company_name: string;
company_type: number;
address: string;
}) {
const url = `/auth/signup`;
return client.post(url, params).then((response:any) => {
return response;
});
},
verifyAccount(login_id: number, token: string) {
const url = `auth/verify?login_id=${login_id}&token=${token}`;
return client.get(url);
},
checkAccountExist: (login_id:string) => {
const url = `auth/check/account?login_id=${login_id}`;
return client.get(url);
},
confirmChangePassWord: (password:string, token:string) =>{
const url = `auth/forgot-password?password=${password}&token=${token}`;
return client.get(url);
}
};
// const navigation = useNavigation();
// export const loginRequest = async (article: object) => {
// try {
// const baseURL= config.axiosConfig().baseURL
// const response = await axios
// .post(`${baseURL}/api/auth/signin`, article)
// console.log(response.status)
// gotoMain()
// } catch (error) {
// if (axios.isAxiosError(error)) {
// handleAxiosError(error);
// } else {
// handleUnexpectedError(error);
// }
// }
// }
// const gotoMain = () => {
// navigation.navigate('Main')
// }
// const handleAxiosError = (error: object) => {
// console.log(error)
// alert('Thông tin đăng nhập không đúng')
// }
// const handleUnexpectedError = (error: object) => {
// console.log(error)
// }
import axios from 'axios';
import config from '../configs';
import store from "../redux/store";
const apiLogRequest = (apiName: any, axiosRequest: any) => {
console.group &&
console.group(
'%cAPI Request',
'color:white;font-weight:bold;background:#0194ff;padding:2px 6px',
apiName
);
console.log('HTTP Method\t\t', axiosRequest.method.toUpperCase());
console.log('Endpoint\t\t', axiosRequest.url);
axiosRequest.data && console.log('Request Body\t', axiosRequest.data);
console.log('AXIOS Request\t', axiosRequest);
console.groupEnd && console.groupEnd();
};
const apiLogResponse = (apiName: any, axiosResponse: any) => {
console.log(axiosResponse);
console.group &&
console.group(
'%cAPI Response',
'color:white;font-weight:bold;background:green;padding:2px 6px',
apiName
);
console.log('HTTP Method\t\t', axiosResponse.config.method.toUpperCase());
console.log('Endpoint\t\t', axiosResponse.config.url);
axiosResponse.config.data && console.log('Request Body\t', axiosResponse.config.data);
axiosResponse.data && console.log('Response Body\t', axiosResponse.data);
console.log('AXIOS Response\t', axiosResponse);
console.groupEnd && console.groupEnd();
};
const apiLogError = (apiName: any, error: any) => {
console.log('error', error);
console.group &&
console.group(
'%cAPI Response',
'color:white;font-weight:bold;background:red;padding:2px 6px',
apiName
);
console.log('HTTP Method\t\t', error.config.method.toUpperCase());
console.log('Endpoint\t\t', error.config.url);
error && error.config.data && console.log('Request Body\t', error.config.data);
error && error.data && console.log('Response Body\t', error.data);
console.log('AXIOS Error\t', error);
console.groupEnd && console.groupEnd();
};
const client = axios.create({
baseURL: config.axiosConfig().baseURL,
timeout: config.axiosConfig().timeout,
headers: {
'Content-Type': 'application/json',
},
});
client.interceptors.request.use(
request => {
const token = store.getState().auth.token;
request.headers.Authorization = token;
return request;
}
);
client.interceptors.response.use(
response => {
return response;
},
error => {
if (error.response && error.response.status === 401) {
const token = store.getState().auth.token;
}
if (process.env.NODE_ENV === "development") {
if (error.response) {
const apiName = error.config.apiName || 'UNKNOWN';
apiLogError(apiName, error.response);
} else if (error.request) {
const apiName = error.config.headers['X_HEADER_API_LOG'] || 'UNKNOWN';
apiLogError(apiName, error.request);
} else {
console.log('API Error', error.message);
}
}
throw error;
}
)
// enable request logging for dev
if (process.env.NODE_ENV === 'development') {
client.interceptors.request.use(
request => {
const apiName = 'UNKNOWN';
apiLogRequest(apiName, request);
return request;
},
error => {
console.log('API Error', error);
return error;
}
);
client.interceptors.response.use(
response => {
apiLogResponse("UNKNOWN", response)
return response;
}
);
}
export default client;
import axios from "axios";
import config from "../configs"
const revenueRequest = async () => {
const body = {
"from_time": "2021-07-01T00:00:00", "to_time": "2021-07-31T24:00:00", "type": "day", "employee_id": 0
}
const header = {
headers: {
'Authorization': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIzNjQ5LTAiLCJpYXQiOjE2MjUwNTMxNDAsImV4cCI6MTYyNTEzOTU0MH0.57_ShCN58-4ZkX7BrIQUViY5E9JaTD9IqWPNzvHI7Lw94FTRpmzOgLApK4XH9_JqsyTmHByq7s1wB7PY7Fdw6Q'
}
}
const baseURL = config.axiosConfig().baseURL
try {
const response = await axios.post(`${baseURL}/report/revenue`, body, header)
console.log('Total Revenue',response.data.data[0].total_revenue)
console.log('total', response.data.total)
return response
} catch (error) {
if (axios.isAxiosError(error)) {
handleAxiosError(error);
} else {
handleUnexpectedError(error);
}
}
}
const handleAxiosError = (error: object) => {
console.log(error)
}
const handleUnexpectedError = (error: object) => {
console.log(error)
}
// export default revenueRequest
const dashboardRequest = async (token:string) => {
const body = {
}
const header = {
headers: {
'Authorization': token
}
}
const baseURL = config.axiosConfig().baseURL
try {
const response = await axios.get(`${baseURL}/report/dashboard`, header)
const res = response.data
// const today_total_revenue = res.today_total_revenue
// const this_month_revenue = res.this_month_revenue
// const last_month_revenue = res.last_month_revenue
// const today_total_invoice = res.today_total_invoice
// const today_total_import = res.today_total_import
// const today_total_export = res.today_total_export
// const expire_time_products = res.expire_time_products
// const total_drug_about_to_expire = res.total_drug_about_to_expire
// const out_of_stock_product = res.out_of_stock_product
console.log('Data: ',response.data)
console.log('total: ', response.data.today_total_revenue)
// return {today_total_revenue, this_month_revenue, last_month_revenue,
// today_total_invoice, today_total_import, today_total_export,
// expire_time_products, total_drug_about_to_expire, out_of_stock_product}
return res
} catch (error) {
if (axios.isAxiosError(error)) {
handleAxiosError(error);
} else {
handleUnexpectedError(error);
}
}
}
export default dashboardRequest
\ No newline at end of file
import auth from './auth';
import product from './product';
export default {
auth,
product
}
\ No newline at end of file
import axios from 'axios'
import config from '../configs'
import { store } from '../redux/store'
export function* getListProducts() {
const body = {
"drug_barcode": "",
"drug_name": "",
"company": "",
"status": null,
"quantity": 1,
"exp_date": true
}
const header = {
headers: {
'Authorization': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIzNjQ5LTAiLCJpYXQiOjE2MjUzOTI5MzIsImV4cCI6MTYyNTQ3OTMzMn0.l_z2ABgvD51hDJmI-mOGM9gOpBTlhyp3UPUNDTbsdWAcZ0KTzeLmJXhV81HdH2S3_mtmM_bGlHCnPi_wHueBkw'
}
}
const baseURL = config.axiosConfig().baseURL
const url = `${baseURL}/inventory/product?page=1&size=10`
return axios.post(url, body, header)
.then(response => {
let resJson = response.data
return resJson
})
.catch(
function (error) {
console.log('Show error notification!')
return Promise.reject(error)
}
)
}
\ No newline at end of file
import client from "./config";
export let token = null;
export interface LoginRequest{
login_id: string;
password: string;
drg_store_id?: number;
}
export default {
login(params: LoginRequest) {
const url = `/auth/signin`;
return client.post(url, params).then((response:any) => {
token = response.data.access_token;
return response;
});
},
register(params: {
store_name: string;
phone_no: string;
email: string;
password: string;
company_name: string;
company_type: number;
address: string;
}) {
const url = `/auth/signup`;
return client.post(url, params).then((response:any) => {
return response;
});
},
verifyAccount(login_id: number, token: string) {
const url = `auth/verify?login_id=${login_id}&token=${token}`;
return client.get(url);
},
checkAccountExist: (login_id:string) => {
const url = `auth/check/account?login_id=${login_id}`;
return client.get(url);
},
confirmChangePassWord: (password:string, token:string) =>{
const url = `auth/forgot-password?password=${password}&token=${token}`;
return client.get(url);
}
};
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
buttonAuth: {
marginTop: 10,
backgroundColor: 'white',
height: 40,
alignItems: 'center',
justifyContent: 'center',
borderRadius: 5,
},
buttonAuthText: {
color: '#61A02C',
fontWeight: 'bold',
fontSize: 16,
},
});
export default styles;
\ No newline at end of file
import React from 'react';
import { Text, TouchableOpacity } from 'react-native';
import styles from './index.style'
type Props = {
textButton: string,
onPress?(): void,
}
const AuthButton = (props: Props) => {
return (
<TouchableOpacity
style={styles.buttonAuth}
onPress={props.onPress}
>
<Text style={styles.buttonAuthText}>{props.textButton}</Text>
</TouchableOpacity>
);
};
export default AuthButton;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
inputLogin: {
flexDirection: "row",
height: 40,
alignItems: "center",
borderBottomColor: '#FFFFFF',
borderBottomWidth: 0.5,
},
inputText: {
paddingLeft: 5,
paddingBottom: 8,
width: '100%',
},
validateText: {
color: 'red',
fontSize: 11,
marginLeft: 0,
alignItems: "center",
},
});
export default styles;
\ No newline at end of file
import React from 'react';
import { View, Text, Image, TextInput } from 'react-native';
import styles from './index.style'
type Props = {
textValidate?: string;
icon: string;
placeholder: string;
onChangeText?(text:string): void;
}
const AuthInput = (props: Props) => {
return (
<View>
<View style={styles.inputLogin}>
<Image source={require("../../assets/icon/iconAuth/iconUser.png")} />
<TextInput style={styles.inputText}
placeholder={props.placeholder}
onChangeText={props.onChangeText} />
</View>
<Text style={styles.validateText}>{props.textValidate}</Text>
</View>
);
};
export default AuthInput;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
container: {
height: 60,
display: "flex",
flexDirection: "row",
alignItems:"center",
justifyContent: "center",
backgroundColor:"#61A02C",
},
leftContainer: {
height: '50%',
marginLeft: 10,
marginRight: 5,
justifyContent: "center",
},
centerContainer: {
// height: '50%',
flex: 6,
marginLeft: 5,
marginRight: 5,
justifyContent: "center",
},
rightContainer: {
height: '50%',
marginLeft: 5,
marginRight: 20,
flex: 2,
justifyContent: "center",
alignItems: 'flex-end'
}
});
export default styles;
\ No newline at end of file
/**
*
* @format
* @flow strict-local
*/
import React, { ReactElement } from 'react';
import { View } from 'react-native';
import styles from './index.style'
type Props = {
style?: object;
styleLeft?: object;
styleCenter?: object;
styleRight?: object;
elementLeft?: ReactElement;
elementCenter?: ReactElement;
elementRight?: ReactElement;
}
const Header = (props: Props) => {
return (
<View style={[styles.container, props.style]}>
<View style={[styles.leftContainer, props.styleLeft]}>
{props.elementLeft}
</View>
<View style={[styles.centerContainer, props.styleCenter]}>
{props.elementCenter}
</View>
<View style={[styles.rightContainer, props.styleRight]}>
{props.elementRight}
</View>
</View>
);
};
export default Header;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
inputText: {
paddingLeft: 15,
fontSize: 16,
color: 'white'
},
});
export default styles;
\ No newline at end of file
import React from 'react';
import { View, Text, Image, TextInput } from 'react-native';
import styles from './index.style'
type Props = {
placeholder: string;
onChangeText?(text: string): void;
}
const HeaderTextInput = (props: Props) => {
return (
<TextInput style={styles.inputText}
placeholder={props.placeholder}
onChangeText={props.onChangeText} />
);
};
export default HeaderTextInput;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
title: {
justifyContent: 'center',
alignItems: 'center',
color: 'white',
fontSize: 20,
fontWeight: 'bold',
}
});
export default styles;
\ No newline at end of file
/**
*
* @format
* @flow strict-local
*/
import React from 'react';
import { View, Text } from 'react-native';
import styles from './index.style'
type Props = {
title: string,
}
const HeaderTitle = (props: Props) => {
return (
<Text style={styles.title}>{props.title}</Text>
);
};
export default HeaderTitle;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
container: {
backgroundColor: "white",
flexDirection: 'row',
height: 96,
margin: 5,
borderRadius: 5,
padding: 5,
},
imageItem: {
width: 86,
height: 86,
marginRight: 8,
},
textItem: {
fontSize: 18,
},
});
export default styles;
\ No newline at end of file
import React from 'react';
import { View, Text, Image } from 'react-native';
import styles from './index.style'
type Props = {
}
const HomeRepositoryItem = (props: Props) => {
return (
<View style={styles.container}>
<Image source={require('../../assets/icon/iconMedlink/icon-medlink.png')}
style={styles.imageItem}/>
<View >
<Text style={styles.textItem}>Paradon</Text>
<Text style={styles.textItem}>Price: </Text>
</View>
</View>
);
};
export default HomeRepositoryItem;
\ No newline at end of file
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
containerIconMedlink: {
backgroundColor: "#61A02C",
alignItems: 'center',
justifyContent: 'center'
},
iconMedlink: {
height: 40,
width: 40,
},
});
export default styles;
\ No newline at end of file
import React, { ReactElement } from 'react';
import { View, Image } from 'react-native';
import styles from './index.style'
type Props = {
}
const IconMedlink = (props: Props) => {
return (
<View style={styles.containerIconMedlink}>
<Image style={styles.iconMedlink}
source={require('../../assets/icon/iconMedlink/icon-medlink.png')} />
</View>
);
};
export default IconMedlink;
\ No newline at end of file
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
inputLogin: {
flexDirection: "row",
height: 40,
alignItems: "center",
borderBottomColor: '#FFFFFF',
borderBottomWidth: 0.5,
},
inputText: {
paddingLeft: 5,
paddingBottom: 8,
width: '100%',
},
validateText: {
color: 'red',
fontSize: 11,
marginLeft: 0,
alignItems: "center",
},
});
export default styles;
\ No newline at end of file
import React from 'react';
import { View, Text, Image, TextInput } from 'react-native';
import styles from './index.style'
type Props = {
drg_drug_cd: string, drg_drug_name: string, price: number, quantity: number
}
const ItemCartProduct = (props: Props) => {
return (
<View>
<Text>
{`${props.drg_drug_cd} - ${props.drg_drug_name}`}
</Text>
<Text>
{`Giá: ${props.price} - Số lượng: ${props.quantity} - Tổng: ${props.price*props.quantity}VNĐ`}
</Text>
</View>
);
};
export default ItemCartProduct;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
inputLogin: {
flexDirection: "row",
height: 40,
alignItems: "center",
borderBottomColor: '#FFFFFF',
borderBottomWidth: 0.5,
},
inputText: {
paddingLeft: 5,
paddingBottom: 8,
width: '100%',
},
validateText: {
color: 'red',
fontSize: 11,
marginLeft: 0,
alignItems: "center",
},
});
export default styles;
\ No newline at end of file
import React from 'react';
import { View, Text, Image, TextInput } from 'react-native';
import styles from './index.style'
type Props = {
drg_drug_cd: string, drg_drug_name: string, lot: string, quantity: number, exp_date:string
}
const ItemProduct = (props: Props) => {
return (
<View>
<Text>
{`${props.drg_drug_cd} - ${props.drg_drug_name}`}
</Text>
<Text>
{`Lô: ${props.lot} - Số lượng: ${props.quantity} - HSD: ${props.exp_date}`}
</Text>
</View>
);
};
export default ItemProduct;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
containerIcon: {
backgroundColor: "#61A02C",
alignItems: 'center',
justifyContent: 'center'
},
icon: {
height: 20,
width: 20,
},
});
export default styles;
\ No newline at end of file
import React, { ReactElement } from 'react';
import { View, Image } from 'react-native';
import styles from './index.style'
type Props = {
}
const TabIcon = (props: Props) => {
return (
<View style={styles.containerIcon}>
<Image style={{width: 20, height: 20}}
source={require('../../assets/icon/iconTab/icon-tab-home.png')} />
</View>
);
};
export default TabIcon;
\ No newline at end of file
export default {
axiosConfig: () => {
return {
baseURL: "https://medlink-apiv2.ecomedic.vn/api",
timeout: 20000,
responseType: 'json'
}
},
version: "1.8.7"
}
\ No newline at end of file
export const EXPERT_TIME = 86400000
\ No newline at end of file
export type Cart = {
products: Product[]
}
export type Product = {
drg_drug_cd: string,
drg_drug_name: string,
drug_id: number,
drug_unit_id: number,
inv_id: number,
lot: string,
price: number,
unit_name: string,
quantity: number,
base_quantity: number,
discount: number,
discount_type: string,
discount_unit: number,
import_price: number,
promotion_flg: number,
unit_id: number
}
\ No newline at end of file
export type Invoice = {
invoice_type: number,
amount: number,
amount_paid: number,
amount_debt: number,
amount_vat: number,
discount_amount: number,
status: number,
currency: string,
pay_method: string,
note: string,
customer_code: string,
customer_name: string,
pay_reference: string,
customer_phone_no: string,
ecoin_minus: number,
ecoin_plus: number,
issue_datetime: string,
customer_id: number
}
export type Product = {
inv_id: number,
drug_id: number,
drg_drug_cd: string,
lot: string,
drg_drug_name: string,
quantity: number,
base_quantity: number,
price: number,
dosage: string,
discount: number,
unit_id: number,
unit_name: string,
promotion_flg: number,
employee_commissions: number,
import_price: number
}
\ No newline at end of file
export type Data = {
account_id: null,
active_flg: number,
active_ingredient: string,
company_code: string,
company_name: string,
created_date: string
direction_for_use: string
dosage: string
drg_barcode: string
drg_drug_cd: string
drg_drug_name: string
drg_store_id: number
drug_id: number
drug_unit_id: number
employee_commissions: number
exp_date: string
image_url: string
inv_id: number
lot: string
loyalty_flg: number
mfg_date: string
package_desc: string
price: number
quantity: number
unit_cd: string
unit_name: string
updated_date: null
updated_user: string
vat_percent: number
units: Unit[]
}
type Unit = {
default_flg: number
drug_id: number
drug_unit_id: number
price: number
price_before_vat: number
unit_id: number
unit_name: string
unit_qty: number
}
\ No newline at end of file
import 'react-native-gesture-handler';
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import AuthFlash from "../screens/AuthFlash";
import AuthLogin from "../screens/AuthLogin";
import AuthRegistration from "../screens/AuthRegistration";
import AuthVerify from "../screens/AuthVerify";
import AuthForgotPassword from "../screens/AuthForgotPassword";
import TabNavigator from "./TabNavigator"
const RootStack = createStackNavigator();
const AuthStack = createStackNavigator();
function AuthStackScreen() {
return (
<AuthStack.Navigator screenOptions={{ headerShown: false }}>
<AuthStack.Screen name="AuthFlash" component={AuthFlash} />
<AuthStack.Screen name="AuthLogin" component={AuthLogin} />
<AuthStack.Screen name="AuthRegistration" component={AuthRegistration} />
<AuthStack.Screen name="AuthForgotPassword" component={AuthForgotPassword} />
<AuthStack.Screen name="AuthVerify" component={AuthVerify} />
</AuthStack.Navigator>
);
}
export default function RootStackScreen() {
return (
<NavigationContainer>{/* Rest of your app code */}
<RootStack.Navigator screenOptions={{ headerShown: false }}>
<RootStack.Screen name="Auth" component={AuthStackScreen} />
<RootStack.Screen name="Main" component={TabNavigator} />
</RootStack.Navigator>
</NavigationContainer>
);
}
import * as React from 'react';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { Text, Image } from 'react-native';
import TabIcon from '../components/TabIcon';
import Product from "../screens/ProductList"
import ProductDetail from "../screens/ProductDetails"
import Home from "../screens/Home"
import HomeCreateBill from "../screens/HomeCreateBill"
import HomeBill from "../screens/HomeBill"
import HomeRepository from "../screens/HomeRepository"
import HomeProductCreate from "../screens/HomeProductCreate"
import Invoice from "../screens/InvoiceList"
import Order from "../screens/Order"
import History from "../screens/History"
import Profile from "../screens/Profile"
import { createStackNavigator } from '@react-navigation/stack';
const ProductStack = createStackNavigator();
const HomeStack = createStackNavigator();
const InvoiceStack = createStackNavigator();
const OrderStack = createStackNavigator();
const HistoryStack = createStackNavigator();
const ProfileStack = createStackNavigator();
function ProductStackScreen() {
return (
<ProductStack.Navigator screenOptions={{ headerShown: false }}>
<ProductStack.Screen
name="Products"
component={Product}
/>
<ProductStack.Screen
name="productDetail"
component={ProductDetail}
/>
</ProductStack.Navigator>
);
}
function HomeStackScreen() {
return (
<HomeStack.Navigator screenOptions={{ headerShown: false }}>
<HomeStack.Screen name="Home" component={Home} />
<HomeBillStack.Screen name="HomeBill" component={HomeBill} />
<HomeStack.Screen name="HomeBillStackScreen" component={HomeBillStackScreen} />
<HomeStack.Screen name="HomeRepository" component={HomeRepository} />
</HomeStack.Navigator>
);
}
const HomeBillStack = createStackNavigator()
function HomeBillStackScreen() {
return (
<HomeBillStack.Navigator screenOptions={{ headerShown: false }}>
<HomeBillStack.Screen name="HomeCreateBill" component={HomeCreateBill} />
<HomeBillStack.Screen name="HomeProductCreate" component={HomeProductCreate} />
</HomeBillStack.Navigator>
)
}
function InvoiceStackScreen() {
return (
<InvoiceStack.Navigator screenOptions={{ headerShown: false }}>
<InvoiceStack.Screen
name="Invoice"
component={Invoice}
/>
</InvoiceStack.Navigator>
);
}
function OrderStackScreen() {
return (
<OrderStack.Navigator screenOptions={{ headerShown: false }}>
<OrderStack.Screen
name="Home"
component={Order}
/>
</OrderStack.Navigator>
);
}
function HistoryStackScreen() {
return (
<HistoryStack.Navigator screenOptions={{ headerShown: false }}>
<HistoryStack.Screen
name="Home"
component={History}
/>
</HistoryStack.Navigator>
);
}
function ProfileStackScreen() {
return (
<ProfileStack.Navigator screenOptions={{ headerShown: false }}>
<ProfileStack.Screen
name="Home"
component={Profile}
/>
</ProfileStack.Navigator>
);
}
const Tab = createBottomTabNavigator();
// const _renderTabIcon = () => {
// <Image source={require('../assets/icon/iconTab/icon-home1')}/>
// }
export default function TabNavigator() {
return (
<Tab.Navigator initialRouteName="Product"
tabBarOptions={{
labelStyle: {
fontSize: 11,
},
activeTintColor: 'green',
inactiveTintColor: 'grey'
}}
>
<Tab.Screen name="Home" component={HomeStackScreen}
options={{
tabBarIcon: () =>
<Image style={{width: 20, height: 20}}
source={require('../assets/icon/iconTab/icon-tab-home.png')} />
}} />
<Tab.Screen name="Hoá đơn" component={InvoiceStackScreen}
options={{
tabBarIcon: () =>
<Image style={{width: 20, height: 20}}
source={require('../assets/icon/iconTab/icon-tab-invoice.png')} />
}} />
<Tab.Screen name="Đặt hàng" component={OrderStackScreen}
options={{
tabBarIcon: () =>
<Image style={{width: 20, height: 20}}
source={require('../assets/icon/iconTab/icon-tab-order.png')} />
}} />
<Tab.Screen name="Lịch sử" component={HistoryStackScreen}
options={{
tabBarIcon: () =>
<Image style={{width: 20, height: 20}}
source={require('../assets/icon/iconTab/icon-tab-history.png')} />
}} />
<Tab.Screen name="Hồ sơ" component={ProfileStackScreen}
options={{
tabBarIcon: () =>
<Image style={{width: 20, height: 20}}
source={require('../assets/icon/iconTab/icon-tab-profile.png')} />
}} />
</Tab.Navigator>
);
}
\ No newline at end of file
type Data = {
}
export function loginSuccess(token: string) {
return {
type: 'LOGIN_SUCCESS',
payload: token
}
}
\ No newline at end of file
import { Product } from "../../model/cart";
import Types from "../types";
export function addProductToCart(data: Product) {
return {
type: Types.ADD_PRODUCT_TO_CART,
payload: data
}
}
import { Product } from "../../model/invoice";
export function addProductToInvoice(data: Product) {
return {
type: 'ADD_PRODUCT_INVOICE',
payload: data
}
}
\ No newline at end of file
import { Data } from "../../model/product";
import Types from "../types";
export function addProductFromApi(data: Data) {
return {
type: Types.ADD_PRODUCT_FROM_API,
payload: data
}
}
export function addProductFromApiListener(data: string) {
return {
type: Types.ADD_PRODUCT_FROM_API_LISTENER,
payload: data
}
}
\ No newline at end of file
import { AnyAction, createSlice } from "@reduxjs/toolkit";
import Types from "../types";
type ActionType = {
type: string
payload: AnyAction
};
export interface InitStateAuth {
username: string
password: string
token: string | null
}
const initialState : InitStateAuth = {
username: "",
password: "",
token: null
}
// const auth = createSlice({
// name: 'auth',
// initialState,
// reducers: {
// loginSuccess(state, action) {
// state.token = action.payload.token
// }
// }
// })
// const { loginSuccess } = auth.actions
interface CounterState {
username: string
password: string
token: string | null
}
// const authReducer = (state = initialState, action: AnyAction) => {
// const { type, payload } = action;
// switch (type) {
// case Types.LOGIN: {
// return {
// ...state,
// isLogin: payload,
// };
// }
// default:
// return state;
// }
// }
function productReducer(state = initialState, action: ActionType) {
const payload = action.payload
switch (action.type) {
case 'LOGIN_SUCCESS':
return {
...state,
token: payload,
};
default:
return state
}
}
// export default authReducer
export default productReducer
import { AnyAction } from "redux";
import { Cart } from "../../model/cart";
import productSaga from '../sagas/productSaga';
import Types from '../types'
const initState: Cart = {
products: []
}
function cartReducer(state: Cart = initState, action: AnyAction) {
const payload = action.payload
switch (action.type) {
case Types.ADD_PRODUCT_TO_CART:
const products = state.products
return {
...state,
products: [payload, ...products],
};
default:
return state
}
}
export default cartReducer
\ No newline at end of file
import { combineReducers } from "@reduxjs/toolkit";
import auth, { InitStateAuth } from "./auth"
import invoice, { InitStateInvoice } from './invoice'
import cart from './cart'
import { Cart } from "../../model/cart";
export type RootState = {
auth: InitStateAuth,
invoice: InitStateInvoice,
}
const rootReducer = combineReducers({
auth,
invoice,
cart,
});
export default rootReducer;
\ No newline at end of file
import { AnyAction } from "redux";
import { Invoice, Product } from "../../model/invoice";
import productSaga from '../sagas/productSaga';
import Types from '../types'
export type InitStateInvoice = {
invoice: Invoice;
products: Product[];
};
const defaultInvoice = {
invoice_type: 0,
amount: 0,
amount_paid: 0,
amount_debt: 0,
amount_vat: 0,
discount_amount: 0,
status: 0,
currency: "",
pay_method: "CS",
note: "",
customer_code: "",
customer_name: "",
pay_reference: "",
customer_phone_no: "",
ecoin_minus: 0,
ecoin_plus: 0,
issue_datetime: "",
customer_id: 0
}
const initState: InitStateInvoice = {
invoice: defaultInvoice,
products: []
}
function invoiceReducer(state: InitStateInvoice = initState, action: AnyAction) {
const payload = action.payload
switch (action.type) {
case Types.ADD_PRODUCT_INVOICE:
const products = state.products
return {
...state,
invoices: [action.payload, ...products],
};
default:
return state
}
}
// export default authReducer
export default invoiceReducer
\ No newline at end of file
import { AnyAction } from "redux";
import { Data } from "../../model/product";
import productSaga from '../sagas/productSaga';
import Types from '../types'
type InitStateProduct = {
page: number,
size: number,
total_elements: number,
total_pages: number,
last: boolean,
data: Data[],
};
const defaultUnit = {
default_flg: 0,
drug_id: 0,
drug_unit_id: 0,
price: 0,
price_before_vat: 0,
unit_id: 0,
unit_name: '',
unit_qty: 0,
}
const defaultData = {
account_id: null,
active_flg: 0,
active_ingredient: '',
company_code: '',
company_name: '',
created_date: '',
direction_for_use: '',
dosage: '',
drg_barcode: '',
drg_drug_cd: '',
drg_drug_name: '',
drg_store_id: 0,
drug_id: 0,
drug_unit_id: 0,
employee_commissions: 0,
exp_date: '',
image_url: "https://medlinknhathuoclongdev.s3.ap-southeast-1.amazonaws.com/1625055046800_images.jpg",
inv_id: '',
lot: '',
loyalty_flg: 0,
mfg_date: '',
package_desc: '',
price: 0,
quantity: 0,
unit_cd: '',
unit_name: '',
updated_date: null,
updated_user: '',
vat_percent: 0,
unit: [defaultUnit]
}
const initState: InitStateProduct = {
page: 1,
size: 10,
total_elements: 0,
total_pages: 1,
last: true,
data: [defaultData]
}
function invoiceReducer(state: InitStateProduct = initState, action: AnyAction) {
const payload = action.payload
switch (action.type) {
case Types.ADD_PRODUCT_FROM_API:
const data = state.data
return {
...state,
// data: [payload, ...data],
data: payload
};
case Types.ADD_PRODUCT_FROM_API_LISTENER:
return state
default:
return state
}
}
// export default authReducer
export default invoiceReducer
\ No newline at end of file
import { all } from '@redux-saga/core/effects'
import productSaga from './productSaga'
function* helloSaga() {
console.log('Hello Saga')
}
export default function* rootSaga() {
console.log('Create Root saga')
yield all([helloSaga(), productSaga()])
}
\ No newline at end of file
import { takeEvery, put, call } from '@redux-saga/core/effects'
import { useSelector } from 'react-redux'
import { AnyAction } from 'redux'
import { getListProducts } from '../../api/listProduct'
import Types from '../types'
// import { ADD_PRODUCT, ADD_PRODUCT_API, ADD_PRODUCT_INVOICE } from '../actions/productAction'
function* fetchDataSaga(action:AnyAction) {
console.log(action)
try {
const data:any = yield call(getListProducts)
console.log('SAGA: ', data.data) //response: object chua data
yield put({ type: Types.ADD_PRODUCT_FROM_API, payload: data.data })
}
catch (e) {
console.log('ProductSaga/Reducer: ERROR! ', e)
}
}
export default function* productSaga() {
console.log('Listening Request API Product')
yield takeEvery(Types.ADD_PRODUCT_FROM_API_LISTENER, fetchDataSaga)
}
\ No newline at end of file
import rootReducer from '../reducers';
import { createStore, applyMiddleware, combineReducers } from 'redux';
import { configureStore } from '@reduxjs/toolkit';
import logger from 'redux-logger';
import createSagaMiddleware from 'redux-saga';
import rootSaga from '../sagas'
import { persistStore, persistReducer } from 'redux-persist'
// import storage from 'redux-persist/lib/storage' // defaults to localStorage
import AsyncStorage from '@react-native-async-storage/async-storage';
const sagaMiddleware = createSagaMiddleware()
const persistConfig = {
key: 'root',
storage: AsyncStorage
}
const persistedReducer = persistReducer(persistConfig, rootReducer)
// const middleware = logger, sagaMiddleware);
const store = createStore(
persistedReducer,
applyMiddleware(logger, sagaMiddleware)
)
sagaMiddleware.run(rootSaga)
const persistor = persistStore(store)
export { store, persistor }
\ No newline at end of file
const Types = {
LOGIN_SUCCESS: 'LOGIN_SUCCESS',
CLEAR_USER: 'CLEAR_USER',
SAVE_ACCOUNT: 'SAVE_ACCOUNT',
CLEAR_ACCOUNT: 'CLEAR_ACCOUNT',
LIST_NEW_ORDER: 'LIST_NEW_ORDER',
LIST_PAYMENT: 'LIST_PAYMENT',
LOGIN: 'LOGIN',
SPLASH: 'SPLASH',
LIST_PRODUCT: 'LIST_PRODUCT',
LIST_MEDICINE: 'LIST_MEDICINE',
CUSTOMER_INFO: 'CUSTOMER_INFO',
INVOICE: 'INVOICE',
LOG_OUT: 'LOG_OUT',
RESET_INVOICE: 'RESET_INVOICE',
ADD_PRODUCT_INVOICE:'ADD_PRODUCT_INVOICE',
ADD_PRODUCT_FROM_API: 'ADD_PRODUCT_FROM_API',
ADD_PRODUCT_FROM_API_LISTENER: 'ADD_PRODUCT_FROM_API_LISTENER',
ADD_PRODUCT_TO_CART: 'ADD_PRODUCT_TO_CART',
};
export default Types
\ No newline at end of file
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
flatImage: {
width: '100%',
height: '100%',
},
});
export default styles;
\ No newline at end of file
import React from 'react';
import { useSelector } from 'react-redux';
import { useNavigation } from '@react-navigation/native';
import {
SafeAreaView,
Image
} from 'react-native';
import styles from './index.style';
const App = () => {
const navigation = useNavigation()
const token = useSelector(state => state.auth.token)
console.log('Flat: ', token, '\n')
if(token == null) navigation.navigate('AuthLogin')
else navigation.navigate('Main')
return (
<SafeAreaView >
<Image style={styles.flatImage}
source={require('../../assets/icon/iconAuth/flat-screen.jpg')}/>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
container: {
backgroundColor: '#61A02C',
flex: 1,
alignItems: 'center',
justifyContent: 'space-between'
},
titleForgotPassword: {
fontWeight: 'bold',
color: 'white',
fontSize: 23,
marginTop: '30%',
},
authInputContainer: {
width: '66%',
marginLeft:'17%',
marginRight: '17%',
},
textUnderInput: {
fontStyle: 'italic',
color: 'white',
},
buttonRegister: {
backgroundColor: 'transparent',
alignItems: 'center',
justifyContent: 'center',
marginTop: 5,
},
register: {
marginBottom: 23,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center'
},
buttonRegisterText: {
textDecorationLine: 'underline',
color: 'white'
},
registerText: {
color: 'white',
marginTop: 5.5,
}
});
export default styles;
\ No newline at end of file
import React, { useState } from 'react';
import {
SafeAreaView,
Image,
View,
Text,
TouchableOpacity,
} from 'react-native';
import styles from './index.style';
import AuthInput from '../../components/AuthInput';
import AuthButton from '../../components/AuthButton';
import { StackNavigationProp } from '@react-navigation/stack';
import { useNavigation } from '@react-navigation/native';
const App = ({ }) => {
const navigation = useNavigation()
const [email, setEmail] = useState('')
const submitForm = () => {
forgotPasswordRequest()
}
const forgotPasswordRequest = () => {
}
const _renderTitle = () => (
<Text style={styles.titleForgotPassword}>Quên mật khẩu</Text>
)
const _renderInput = () => (
<View style={styles.authInputContainer}>
<AuthInput
textValidate=''
icon='../../assets/icon/iconAuth/iconUser.png'
placeholder='Tên truy cập hoặc Email'
onChangeText={(text) => setEmail(text)} />
<Text style={styles.textUnderInput}>Nhập địa chỉ Email đã dùng để đăng ký</Text>
<AuthButton textButton='Gửi yêu cầu'
onPress={() => submitForm()}/>
</View>
)
const _renderFooter = () => (
<View style={styles.register}>
<Text style={styles.registerText}>Bạn chưa có tài khoản? </Text>
<TouchableOpacity
style={styles.buttonRegister}
onPress={() => navigation.navigate('AuthRegistration')}>
<Text style={styles.buttonRegisterText}>Đăng ký tại đây</Text>
</TouchableOpacity>
</View>
)
return (
<SafeAreaView style={styles.container}>
{_renderTitle()}
{_renderInput()}
{_renderFooter()}
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
allContainer: {
backgroundColor: '#61A02C',
flex: 1,
},
containerIconMedlink: {
backgroundColor: "#61A02C",
alignItems: 'center',
marginBottom: 15,
},
iconMedlink: {
height: 120,
width: 120,
},
textMedlink: {
fontWeight: 'bold',
color: 'white'
},
container: {
flex: 1,
marginTop: '35%',
width: '64%',
marginLeft:'18%',
marginRight: '18%',
justifyContent: 'space-between'
},
inputText: {
paddingLeft: 5,
},
checkBox: {
flexDirection: 'row',
marginLeft: -8,
marginTop: 15,
},
checkBoxText: {
paddingTop: 5,
color: 'white'
},
buttonAuth: {
marginTop: 30,
backgroundColor: 'white',
height: 40,
alignItems: 'center',
justifyContent: 'center',
borderRadius: 5,
},
buttonAuthText: {
color: '#61A02C',
fontWeight: 'bold',
},
buttonForgot: {
backgroundColor: 'transparent',
alignItems: 'center',
justifyContent: 'center',
marginTop: 5,
},
buttonForgotText: {
fontWeight: 'bold',
color: 'white'
},
buttonRegister: {
backgroundColor: 'transparent',
alignItems: 'center',
justifyContent: 'center',
marginTop: 5,
},
register: {
flexDirection: 'row',
alignItems: 'center',
marginBottom: 23,
},
buttonRegisterText: {
textDecorationLine: 'underline',
color: 'white'
},
registerText: {
color: 'white',
marginTop: 5.5,
}
});
export default styles;
\ No newline at end of file
import React, { useState } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { loginSuccess } from '../../redux/actions/auth';
import {
SafeAreaView,
Image,
View,
Text,
TouchableOpacity,
} from 'react-native';
import CheckBox from '@react-native-community/checkbox';
import styles from './index.style';
import AuthInput from '../../components/AuthInput';
import AuthButton from '../../components/AuthButton';
import { useNavigation } from '@react-navigation/native';
import axios from 'axios';
import config from "../../configs"
import auth from '../../api/auth';
const App = () => {
const [isSavePassword, setIsSavePassword] = useState(false)
const navigation = useNavigation();
const [userName, setUserName] = useState('')
const [password, setPassword] = useState('')
//-----------------------------------------------------------------------------------//
const loginRequest1 = () => {
auth.login({ login_id: userName, password: password })
}
//-----------------------------------------------------------------------------------//
const [info, setInfo] = useState('')
const [token, setToken] = useState('')
const dispatch = useDispatch();
const addToRedux = () => {
dispatch(loginSuccess(token))
}
const submitForm = () => {
loginRequest()
}
const loginRequest = async () => {
const article = {
login_id: userName,
password: password
}
const baseURL = config.axiosConfig().baseURL
try {
const response = await axios.post(`${baseURL}/auth/signin`, article)
setInfo(response.data)
console.log('Login: ', response.data)
setToken(response.data.access_token)
console.log('Login: ', response.data.access_token)
dispatch(loginSuccess(response.data.access_token))
gotoMain()
} catch (error) {
if (axios.isAxiosError(error)) {
handleAxiosError(error);
} else {
handleUnexpectedError(error);
}
}
}
const gotoMain = () => {
navigation.navigate('Main')
}
const handleAxiosError = (error: object) => {
console.log(error)
alert('Thông tin đăng nhập không đúng')
}
const handleUnexpectedError = (error: object) => {
console.log(error)
}
//---------------------------------------------------------------------------------------//
const _renderLogo = () => (
<View style={styles.containerIconMedlink}>
<Image style={styles.iconMedlink}
source={require('../../assets/icon/iconMedlink/icon-medlink.png')} />
<Text style={styles.textMedlink}>MEDLINK</Text>
</View>
)
const _renderInput = () => (
<View>
<AuthInput
textValidate='Vui lòng nhập đúng email hoặc số điện thoại'
icon='../../assets/icon/iconAuth/iconUser.png'
placeholder='Email / Số điện thoại'
onChangeText={(text) => setUserName(text)} />
<AuthInput
textValidate='Mật khẩu phải lớn hơn 6 ký tự'
icon='../../assets/icon/iconAuth/iconPass.png'
placeholder='Mật khẩu'
onChangeText={(text) => setPassword(text)} />
<View style={styles.checkBox}>
<CheckBox
disabled={false}
value={isSavePassword}
onValueChange={(newValue) => setIsSavePassword(newValue)}
/>
<Text style={styles.checkBoxText}>Lưu mật khẩu</Text>
</View>
<AuthButton textButton='Đăng nhập'
onPress={() => submitForm()}
/>
<TouchableOpacity
style={styles.buttonForgot}
onPress={() => navigation.navigate('AuthForgotPassword')}
>
<Text style={styles.buttonForgotText}>Quên mật khẩu?</Text>
</TouchableOpacity>
</View>
)
const _renderFooter = () => (
<View style={styles.register}>
<Text style={styles.registerText}>Bạn chưa có tài khoản? </Text>
<TouchableOpacity
style={styles.buttonForgot}
onPress={() => navigation.navigate('AuthRegistration')} >
<Text style={styles.buttonRegisterText}>Đăng ký tại đây</Text>
</TouchableOpacity>
</View>
)
return (
<SafeAreaView style={styles.allContainer}>
<View style={styles.container}>
{_renderLogo()}
{_renderInput()}
{_renderFooter()}
</View>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
container: {
backgroundColor: '#61A02C',
flex: 1,
alignItems: 'center',
justifyContent: 'space-between'
},
forgotPassword: {
fontWeight: 'bold',
color: 'white',
fontSize: 23,
marginTop: '30%',
},
authInputContainer: {
width: '66%',
marginLeft:'17%',
marginRight: '17%',
},
textUnderInput: {
fontStyle: 'italic',
color: 'white',
},
buttonRegister: {
backgroundColor: 'transparent',
alignItems: 'center',
justifyContent: 'center',
marginTop: 5,
},
register: {
marginBottom: 23,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center'
},
buttonRegisterText: {
textDecorationLine: 'underline',
color: 'white'
},
registerText: {
color: 'white',
marginTop: 5.5,
},
checkBox: {
flexDirection: 'row',
marginLeft: -8,
marginTop: 10,
},
box: {
},
checkBoxText: {
color: 'white'
},
viewInfo: {
marginTop: 15,
alignItems: 'center',
},
textInfo: {
color: 'white',
fontSize: 18,
},
textHotline: {
color: 'white',
fontSize: 18,
fontWeight: 'bold',
},
});
export default styles;
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import {
SafeAreaView,
View,
Text,
TouchableOpacity,
} from 'react-native';
import styles from './index.style';
import AuthInput from '../../components/AuthInput';
import AuthButton from '../../components/AuthButton';
import CheckBox from '@react-native-community/checkbox';
import axios from 'axios';
const App = ({}) => {
const [isCheck1, setIsCheck1] = useState(false)
const [isCheck2, setIsCheck2] = useState(false)
const _renderTitle = () => (
<Text style={styles.forgotPassword}>Đăng ký tài khoản</Text>
)
const _renderInput = () => (
<View style={styles.authInputContainer}>
<AuthInput
textValidate='Tên nhà thuốc phải có ít nhất 4 ký tự'
icon='../../assets/icon/iconAuth/iconUser.png'
placeholder='Tên nhà thuốc *' />
<AuthInput
textValidate='Số điện thoại không hợp lệ'
icon='../../assets/icon/iconAuth/iconUser.png'
placeholder='Số điện thoại *' />
<AuthInput
textValidate='Mật khẩu phải lớn hơn 6 ký tự'
icon='../../assets/icon/iconAuth/iconUser.png'
placeholder='Mật khẩu *' />
<AuthInput
textValidate='Xác nhận mật khẩu không chính xác'
icon='../../assets/icon/iconAuth/iconUser.png'
placeholder='Xác nhận mật khẩu *' />
{_renderCheckBox()}
<AuthButton textButton='Đăng ký' />
<View style={styles.viewInfo}>
<Text style={styles.textInfo}>Hotline hỗ trợ </Text>
<Text style={styles.textHotline}>0969 191 355</Text>
</View>
</View>
)
const _renderCheckBox = () => (
<View>
<View style={styles.checkBox}>
<CheckBox
style={styles.box}
disabled={false}
value={isCheck1}
onValueChange={(newValue) => setIsCheck1(newValue)}
/>
<Text style={styles.checkBoxText}>Tôi đồng ý với điều khoản và chính sách bảo mật của Medlink</Text>
</View>
<View style={styles.checkBox}>
<CheckBox
style={styles.box}
disabled={false}
value={isCheck2}
onValueChange={(newValue) => setIsCheck2(newValue)}
/>
<Text style={styles.checkBoxText}>Tôi chấp nhận và cho phép chia sẻ các thông tin
cần thiết để sử dụng dịch vụ của Medlink</Text>
</View>
</View>
)
return (
< SafeAreaView style={styles.container} >
{_renderTitle()}
{_renderInput()}
<View></View>
</SafeAreaView >
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
highlight: {
fontWeight: '700',
},
leftHeader: {
},
centerHeader: {
alignItems:"center"
},
rightHeader:{
alignItems:"center"
}
});
export default styles;
\ No newline at end of file
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React from 'react';
import {
SafeAreaView,
ScrollView,
StatusBar,
useColorScheme,
View,
Text
} from 'react-native';
import { Colors } from 'react-native/Libraries/NewAppScreen';
import styles from './index.style';
import Header from '../../components/Header';
const App = () => {
const isDarkMode = useColorScheme() === 'dark';
const backgroundStyle = {
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
};
const _renderLeft = () => {
return (
<View style={ styles.leftHeader }>
<Text>Left</Text>
</View>
)
}
const _renderCenter = () => {
return (
<View style={ styles.centerHeader }>
<Text>Center</Text>
</View>
)
}
const _renderRight = () => {
return (
<View style={ styles.rightHeader }>
<Text>Right</Text>
</View>
)
}
return (
<SafeAreaView style={ backgroundStyle }>
<StatusBar barStyle={ isDarkMode ? 'light-content' : 'dark-content' } />
<Header
elementLeft={ _renderLeft() }
elementCenter={ _renderCenter() }
elementRight={ _renderRight() }
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic"
style={ backgroundStyle }>
<View
style={ {
backgroundColor: isDarkMode ? Colors.black : Colors.white,
} }>
<Text style={ styles.sectionTitle }>Verify</Text>
</View>
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
leftHeader: {
width: 25,
height: 25,
},
rightHeader: {
width: 25,
height: 25
}
});
export default styles;
\ No newline at end of file
import React from 'react';
import {
SafeAreaView,
ScrollView,
View,
Text,
TouchableOpacity, Image
} from 'react-native';
import styles from './index.style';
import Header from '../../components/Header';
import HeaderTextInput from '../../components/HeaderTextInput'
const App = () => {
const _renderHeaderLeft = () => {
return (
<Image style={styles.leftHeader}
source={require('../../assets/icon/iconHeader/icon-search.png')}/>
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTextInput placeholder='Tìm kiếm đơn hàng' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity>
<Image style={styles.rightHeader}
source={require('../../assets/icon/iconHeader/icon-add.png')} />
</TouchableOpacity>
)
}
return (
<SafeAreaView >
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic">
<View>
<Text style={styles.sectionTitle}>Invoice</Text>
</View>
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
rightHeader: {
width: 25,
height: 25
},
container: {
marginBottom: 61
},
billButtonContainer: {
flexDirection: "row",
height: 120,
},
billButton: {
flex: 1,
backgroundColor: 'white',
justifyContent: 'space-evenly',
alignItems: 'center',
marginTop: 8,
margin: 3,
borderRadius: 5,
},
billButtonIcon: {
width: 50,
height: 50
},
billButtonText: {
},
todayInfoContainer: {
height: 150,
backgroundColor: 'white',
justifyContent: 'space-evenly',
margin: 3,
borderRadius: 5,
paddingLeft: 8,
paddingRight: 8,
},
todayText: {
fontSize: 18,
},
infoContainer: {
flexDirection: 'row',
justifyContent: 'space-between',
paddingRight: 23,
paddingLeft: 23,
},
statisticContainer: {
height:300,
backgroundColor: 'white',
margin: 3,
},
});
export default styles;
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import {
SafeAreaView,
ScrollView, RefreshControl,
View,
Text,
TouchableOpacity, Image
} from 'react-native';
import { useSelector, useDispatch } from 'react-redux';
import { useNavigation } from '@react-navigation/native';
import styles from './index.style';
import Header from '../../components/Header';
import IconMedlink from '../../components/IconMedlink';
import HeaderTitle from '../../components/HeaderTitle';
import dashboardRequest from '../../api/homeRevenue';
//------------------------------------------------------------
import axios from "axios";
import config from "../../configs"
import { RootState } from '../../redux/reducers';
const App = () => {
const navigation = useNavigation();
//------------------------------------------------------
// const [todayRevenue, setTodayRevenue] = useState(0) // doanh thu hom nay
// const [thisMonthRevenue, setThisMonthRevenue] = useState(0) // doanh thu thang nay
// const [lastMonthRevenue, setLastMonthRevenue] = useState(0) // doanh thu thang truoc
// const [todayInvoice, setTodayInvoice] = useState(0)
// const [todayExport, setTodayExport] = useState(0) // hoa don hom nay
// const [totalImport, setTodayImport] = useState(0) // nhap kho hom nay
// const [etd, setEtd] = useState(0) // da het han
// const [ate, setAte] = useState(0) // sap het han
// const [osp, setOsp] = useState(0) // sap het trong kho
// type totalDashboard = {
// today_total_revenue: any| undefined
// this_month_revenue: any | undefined
// last_month_revenue: number
// today_total_invoice: number
// today_total_import: number
// today_total_export: number
// expire_time_products: number
// total_drug_about_to_expire: number
// out_of_stock_product: number
// }
// const totalDashboard = dashboardRequest()
// const a = totalDashboard.today_total_revenue
// setTodayRevenue(totalDashboard.today_total_revenue)
// setThisMonthRevenue(totalDashboard.this_month_revenue)
// setLastMonthRevenue(totalDashboard.last_month_revenue)
// setTodayInvoice(totalDashboard.today_total_invoice)
// setTodayImport(totalDashboard.today_total_import)
// setTodayExport(totalDashboard.today_total_export)
// setEtd(totalDashboard.expire_time_products)
// setAte(totalDashboard.total_drug_about_to_expire)
// setOsp(totalDashboard.out_of_stock_product)
// const revenueAll = dashboardRequest()
// console.log(revenueAll)
// dashboardRequest()
//------------------------------------------------------------------------------------
const token = useSelector((state:RootState) => state.auth.token)
console.log('Home: ', token, '\n')
//------------------------------------------------------------------------------------
//------------------------------------------------------
const [todayRevenue, setTodayRevenue] = useState(0) // doanh thu hom nay
const [thisMonthRevenue, setThisMonthRevenue] = useState(0) // doanh thu thang nay
const [lastMonthRevenue, setLastMonthRevenue] = useState(0) // doanh thu thang truoc
const [todayInvoice, setTodayInvoice] = useState(0)
const [todayExport, setTodayExport] = useState(0) // hoa don hom nay
const [todayImport, setTodayImport] = useState(0) // nhap kho hom nay
const [etd, setEtd] = useState(0) // da het han
const [ate, setAte] = useState(0) // sap het han
const [osp, setOsp] = useState(0) // sap het trong kho
const dashboardRequest1 = async () => {
const body = {
}
const header = {
headers: {
'Authorization': token
}
}
const baseURL = config.axiosConfig().baseURL
try {
const response = await axios.get(`${baseURL}/report/dashboard`, header)
const totalDashboard = response.data
setTodayRevenue(totalDashboard.today_total_revenue)
setThisMonthRevenue(totalDashboard.this_month_revenue)
setLastMonthRevenue(totalDashboard.last_month_revenue)
setTodayInvoice(totalDashboard.today_total_invoice)
setTodayImport(totalDashboard.today_total_import)
setTodayExport(totalDashboard.today_total_export)
setEtd(totalDashboard.expire_time_products)
setAte(totalDashboard.total_drug_about_to_expire)
setOsp(totalDashboard.out_of_stock_product)
// console.log('Revenue:', todayRevenue)
// console.log('import', todayExport)
console.log('Data: ', response.data)
console.log('total: ', response.data.today_total_revenue)
// return {today_total_revenue, this_month_revenue, last_month_revenue,
// today_total_invoice, today_total_import, today_total_export,
// expire_time_products, total_drug_about_to_expire, out_of_stock_product}
return totalDashboard
} catch (error) {
if (axios.isAxiosError(error)) {
handleAxiosError(error);
} else {
handleUnexpectedError(error);
}
}
}
const handleAxiosError = (error: object) => {
console.log(error)
}
const handleUnexpectedError = (error: object) => {
console.log(error)
}
//---------------------------------------------------------
// Prevent goBack------------------------------------------
React.useEffect(
() =>
navigation.addListener('beforeRemove', (e) => {
e.preventDefault();
}), []
)
//---------------------------------------------------------
useEffect(() => {
dashboardRequest1()
return () => {
}
}, [])
//---------------------------------------------------------
const _renderHeader = () => {
return (
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
)
}
const _renderHeaderLeft = () => {
return (
<IconMedlink />
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTitle title='Khánh Medlink' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity>
<Image style={styles.rightHeader}
source={require('../../assets/icon/iconHeader/icon-notice.png')} />
</TouchableOpacity>
)
}
const _renderButtonBill = () => {
return (
<View style={styles.billButtonContainer}>
<TouchableOpacity style={styles.billButton}
onPress={() => navigation.navigate('HomeBillStackScreen')} >
<Image style={styles.billButtonIcon}
source={require('../../assets/icon/iconHome/icon-bill-create.png')} />
<Text style={styles.billButtonText}>Tạo đơn</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.billButton}
onPress={() => navigation.navigate('HomeBill')} >
<Image style={styles.billButtonIcon}
source={require('../../assets/icon/iconHome/icon-bill.png')} />
<Text style={styles.billButtonText}>Hoá đơn</Text>
</TouchableOpacity>
<TouchableOpacity style={styles.billButton}
onPress={() => navigation.navigate('HomeRepository')} >
<Image style={styles.billButtonIcon}
source={require('../../assets/icon/iconHome/icon-storage.png')} />
<Text style={styles.billButtonText}>Kho</Text>
</TouchableOpacity>
</View>
)
}
// const [todayRevenue, setTodayRevenue] = useState(0) // doanh thu hom nay
// const [thisMonthRevenue, setThisMonthRevenue] = useState(0) // doanh thu thang nay
// const [lastMonthRevenue, setLastMonthRevenue] = useState(0) // doanh thu thang truoc
// const [todayInvoice, setTodayInvoice] = useState(0)
// const [todayExport, setTodayExport] = useState(0) // hoa don hom nay
// const [totalImport, setTodayImport] = useState(0) // nhap kho hom nay
// const [etd, setEtd] = useState(0) // da het han
// const [ate, setAte] = useState(0) // sap het han
// const [osp, setOsp] = useState(0) // sap het trong kho
const _renderRevenue = () => {
return (
<View style={styles.todayInfoContainer}>
<Text style={styles.todayText}>DOANH SỐ</Text>
<View style={styles.infoContainer}>
<Text>{`Hôm nay: `}</Text>
<Text>{`${todayRevenue} đ`}</Text>
</View>
<View style={styles.infoContainer}>
<Text>{`Tháng này`}:</Text>
<Text>{`${thisMonthRevenue} đ`}</Text>
</View>
<View style={styles.infoContainer}>
<Text>{`Tháng trước:`}</Text>
<Text>{`${lastMonthRevenue} đ`}</Text>
</View>
</View>
)
}
const _renderTodayReport = () => {
return (
<View style={styles.todayInfoContainer}>
<Text style={styles.todayText}>BÁO CÁO TRONG NGÀY:</Text>
<View style={styles.infoContainer}>
<Text>{`Hoá đơn: `}</Text>
<Text>{`${todayInvoice} (đơn)`}</Text>
</View>
<View style={styles.infoContainer}>
<Text>{`Nhập kho`}:</Text>
<Text>{`${todayImport} (phiếu)`}</Text>
</View>
<View style={styles.infoContainer}>
<Text>{`Xuất kho:`}</Text>
<Text>{`${todayExport} (phiếu)`}</Text>
</View>
</View>
)
}
const _renderStatistic = () => {
return (
<View style={styles.statisticContainer}>
<Text>Thống kê</Text>
</View>
)
}
const _renderWaring = () => (
<View>
<View style={styles.todayInfoContainer}>
<Text style={styles.todayText}>CẢNH BÁO HẾT HẠN:</Text>
<View style={styles.infoContainer}>
<Text>{`Đã hết hạn `}</Text>
<Text>{`${etd} (sp)`}</Text>
</View>
<View style={styles.infoContainer}>
<Text>{`Sắp hết hạn`}:</Text>
<Text>{`${ate} (sp)`}</Text>
</View>
<View style={styles.infoContainer}>
<Text>{`Sắp hết trong kho:`}</Text>
<Text>{`${osp} (sp)`}</Text>
</View>
</View>
</View>
)
const wait = (timeout: number) => {
return new Promise(resolve => setTimeout(resolve, timeout));
}
const [refreshing, setRefreshing] = React.useState(false);
const onRefresh = React.useCallback(() => {
setRefreshing(true);
wait(500).then(() => setRefreshing(false));
}, []);
return (
<SafeAreaView>
{_renderHeader()}
<ScrollView style={styles.container}
refreshControl={
<RefreshControl
refreshing={refreshing}
onRefresh={onRefresh}
/>
}>
{_renderButtonBill()}
{_renderRevenue()}
{_renderTodayReport()}
{_renderStatistic()}
{_renderWaring()}
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
highlight: {
fontWeight: '700',
},
rightHeader: {
width: 25,
height: 25
}
});
export default styles;
\ No newline at end of file
import React from 'react';
import {
SafeAreaView,
ScrollView,
View,
Text,
TouchableOpacity, Image
} from 'react-native';
import styles from './index.style';
import Header from '../../components/Header';
import IconMedlink from '../../components/IconMedlink';
import HeaderTitle from '../../components/HeaderTitle';
const App = () => {
const _renderHeaderLeft = () => {
return (
<IconMedlink />
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTitle title='Khánh Medlink' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity>
<Image style={styles.rightHeader}
source={require('../../assets/icon/iconHeader/icon-notice.png')} />
</TouchableOpacity>
)
}
return (
<SafeAreaView >
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic">
<View>
<Text style={styles.sectionTitle}>Bill</Text>
</View>
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
rightHeader: {
width: 40,
height: 40,
},
container: {
paddingBottom: 50,
marginBottom: 50,
},
buttonAdd: {
height: 150,
backgroundColor: 'white',
justifyContent: 'space-evenly',
alignItems: 'center',
alignContent: 'center',
marginTop: 3,
marginBottom: 3,
borderRadius: 5,
paddingLeft: 100,
paddingRight: 100,
paddingBottom: 10
},
iconAdd: {
flex: 1,
height: 80,
width: 80,
},
textAdd: {
color: 'grey'
},
billDateContainer: {
height: 180,
backgroundColor: 'white',
marginTop: 6,
padding: 15,
justifyContent: 'space-between',
},
lineContainer: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
flex: 1,
},
lineLeftContainer: {
flexDirection: 'row',
justifyContent: 'space-between',
width: '50%'
},
input: {
flex: 1,
borderWidth: 0.8,
borderColor: 'grey',
color: 'black',
textAlign: 'left',
margin: 1,
padding: 0,
paddingLeft: 10,
},
customerContainer: {
height: 100,
backgroundColor: 'white',
marginTop: 6,
padding: 5,
paddingLeft: 15,
justifyContent: 'space-between'
},
buttonAddCustomer: {
flexDirection: 'row',
alignItems: 'center'
},
inputCustomerContainer: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center'
},
inputCustomer: {
borderWidth: 0.8,
height: 25,
width: '50%',
padding: 0,
paddingLeft: 5,
borderColor: 'grey'
},
noteContainer: {
flexDirection: 'row',
backgroundColor: 'white',
marginTop: 6,
padding: 5,
paddingLeft: 15,
alignItems: 'center',
justifyContent: 'space-between'
},
noteTitleContainer: {
flexDirection: 'row',
alignItems: 'center'
}
});
export default styles;
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import {
SafeAreaView,
TextInput,
View,
Text,
TouchableOpacity, Image,
ScrollView,
FlatList, Button
} from 'react-native';
import { useSelector } from 'react-redux';
import { useNavigation } from '@react-navigation/core';
import styles from './index.style';
import Header from '../../components/Header';
import IconMedlink from '../../components/IconMedlink';
import HeaderTitle from '../../components/HeaderTitle';
import { Data } from "../../model/product";
//-------------------------------------------------------------------
import axios from "axios";
import config from "../../configs"
import ItemCartProduct from '../../components/ItemCartProduct';
import { RootState } from '../../redux/reducers';
const App = () => {
const navigation = useNavigation()
const _renderHeaderLeft = () => {
return (
<IconMedlink />
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTitle title='Tạo đơn' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity>
<Image style={styles.rightHeader}
source={require('../../assets/icon/iconHeader/icon-scan-2.png')} />
</TouchableOpacity>
)
}
const _renderHeader = () => (
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
)
const _renderButtonAdd = () => (
<TouchableOpacity style={styles.buttonAdd}
onPress={() => navigation.navigate('HomeProductCreate')}
>
<Image style={styles.iconAdd}
source={require('../../assets/icon/iconHome/icon-cart-2.jpg')} />
<Text style={styles.textAdd}>Đơn hàng của bạn chưa có</Text>
<Text style={styles.textAdd}>sản phẩm nào</Text>
</TouchableOpacity>
)
/////////////////////////////////////////////////////////////////////////////
const products = useSelector((state) => state.product)
console.log('///////////////////////////////////////////////////////////////////////////////\n', products)
const [product, setProduct] = useState(products)
useEffect(() => {
setProduct(products);
}, [products]);
//----------------------------------------------------------------------------------------
const cartProducts = useSelector((state:RootState) => state.cart.products)
console.log('CART: ', cartProducts)
const sumCart = (product: Array<Data>) => {
let sum = 0
for (let i = 0; i <= product.length; i++) {
let price = product[i].price
let quantity = product[i].quantity
sum += price * quantity
console.log('Tong:', sum)
}
return sum
}
// const totalAmount = sumCart(cartProducts)
// console.log('TONG: CART', totalAmount)
const _renderCart = (product: Data) => {
return (
<View >
<ItemCartProduct
drg_drug_cd={product.drg_drug_cd}
drg_drug_name={product.drg_drug_name}
price={product.price}
quantity={product.quantity}
/>
</View>
)
}
//----------------------------------------------------------------------------------------
const [amount, setAmount] = useState(35264)
const [amountPaid, setAmountPaid] = useState('0')
const [amountVat, setAmountVat] = useState('')
const [discount, setDiscount] = useState(0)
const [note, setNote] = useState('')
const [currentPaid, setCurrentPaid] = useState(0)
const _renderBillDate = () => (
<View style={styles.billDateContainer}>
<View style={styles.lineContainer}>
<Text>Ngày bán</Text>
<View style={styles.lineLeftContainer}>
<TextInput style={styles.input}
placeholder='2021-07-05'
placeholderTextColor='black' />
</View>
</View>
<View style={styles.lineContainer}>
<Text>Tổng tiền</Text>
<Text>{`35264 VNĐ`}</Text>
</View>
<View style={styles.lineContainer}>
<Text>VAT</Text>
<View style={styles.lineLeftContainer}>
<View></View>
<TextInput style={styles.input} placeholder='10%' placeholderTextColor='black' />
</View>
</View>
<View style={styles.lineContainer}>
<Text>Giảm giá</Text>
<View style={styles.lineLeftContainer}>
<TextInput style={styles.input} placeholder='0' placeholderTextColor='black'
onChangeText={(value) => { setAmount(Number(value)) }} />
<TextInput style={styles.input} placeholder='VNĐ' placeholderTextColor='black' />
</View>
</View>
</View>
)
//----------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------
const token = useSelector((state:RootState) => state.auth.token);
console.log('BillToken: ', token)
const submit = () => {
console.log('Sending....')
createInvoice()
}
const createInvoice = async () => {
console.log('create....')
const invoice = {
'amount_debt': 0, 'currency': "VNĐ", 'customer_code': "", 'customer_id': 0, 'customer_name': "", 'customer_phone_no': "", 'discount_amount': 0,
'discount_amount_inv': 0, 'discount_type': "VNĐ", 'ecoin_minus': 0, 'ecoin_plus': 0, 'img_url': "", 'invoice_type': 0, 'is_debit': false,
'issue_datetime': "2021-07-05T15:45:16+07:00", 'pay_method': "CS", 'pay_reference': "\"\"", 'status': 2, 'vat': 10,
//--------------------
'amount': amount,
'amount_paid': amount*1.1,
'amount_vat': amount*0.1,
'current_pay': 40000,
'note': note,
}
const newProduct = {
base_quantity: 1,
discount: 0,
discount_type: "VNĐ",
discount_unit: 0,
dosage: cartProducts.dosage,
drg_drug_cd: cartProducts.drg_drug_cd,
drg_drug_name: cartProducts.drg_drug_name,
drug_id: cartProducts.drug_id,
drug_unit_id: cartProducts.drug_unit_id,
import_price: 0,
inv_id: cartProducts.inv_id,
lot: cartProducts.lot,
price: cartProducts.price,
promotion_flg: 0,
quantity: 2,
unit_id: 14,
unit_name: "Viên"
}
console.log('function', cartProducts)
const body = {
'invoice': invoice,
'products': cartProducts
}
console.log('function', body)
const header = {
headers: {
'Authorization': token
}
}
const baseURL = config.axiosConfig().baseURL
try {
const response = await axios.post(`${baseURL}/invoice`, body, header)
// const totalDashboard = response.data
// console.log('Data: ', response.data)
// console.log('total: ', response.data.today_total_revenue)
console.log(response)
return response
} catch (error) {
if (axios.isAxiosError(error)) {
handleAxiosError(error);
} else {
handleUnexpectedError(error);
}
}
}
const handleAxiosError = (error: object) => {
console.log(error)
}
const handleUnexpectedError = (error: object) => {
console.log(error)
}
//----------------------------------------------------------------------------------------
const _renderCustomerInfo = () => (
<View style={styles.customerContainer}>
<Text>Khách hàng: Vãng lai</Text>
<TouchableOpacity style={styles.buttonAddCustomer}>
<Image
source={require('../../assets/icon/iconHome/icon-customer.png')} />
<Text style={{ color: 'blue' }}> Thêm khách hàng</Text>
</TouchableOpacity>
<View style={styles.inputCustomerContainer}>
<Text>Khách trả:</Text>
<TextInput style={styles.inputCustomer}
placeholder='0' placeholderTextColor='black'
keyboardType='numeric'
onChangeText={(value) => setCurrentPaid(Number(value))}
></TextInput>
</View>
</View>
)
const _renderNote = () => (
<View style={styles.noteContainer} >
<View style={styles.noteTitleContainer}>
<Image
source={require('../../assets/icon/iconHome/icon-customer.png')} />
<Text style={{ color: 'blue' }}> Ghi chú</Text>
</View>
<TextInput style={styles.input} onChangeText={(text) => setNote(text)} />
</View>
)
return (
<SafeAreaView >
{_renderHeader()}
<ScrollView style={styles.container}>
{_renderButtonAdd()}
<FlatList
data={cartProducts}
renderItem={({ item }) => _renderCart(item)}
keyExtractor={(item) => item}
/>
{_renderBillDate()}
{_renderCustomerInfo()}
{_renderNote()}
<Button onPress={() => submit()} title='SEND'></Button>
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
rightHeader: {
fontWeight: 'bold',
fontSize: 15,
color: 'white'
},
container: {
alignItems: 'center',
justifyContent: 'center'
},
containerInput: {
backgroundColor: 'white',
borderRadius: 1,
width: '70%',
margin: '15%',
},
input: {
borderWidth: 1,
margin: 3,
},
buttonSubmit: {
backgroundColor: 'green',
height: 40,
width: 60,
borderRadius: 20,
alignItems: 'center',
justifyContent: 'center'
}
});
export default styles;
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux'
import {
SafeAreaView,
Text,
TouchableOpacity,
View, FlatList
} from 'react-native';
import { useNavigation } from '@react-navigation/core';
import styles from './index.style';
import Header from '../../components/Header';
import IconMedlink from '../../components/IconMedlink';
import HeaderTitle from '../../components/HeaderTitle';
import { addProductToInvoice } from '../../redux/actions/invoice';
import { ScrollView } from 'react-native-gesture-handler';
import { addProductFromApiListener } from '../../redux/actions/product';
import ItemProduct from '../../components/ItemProduct';
import { addProductToCart } from '../../redux/actions/cart';
import { Cart, Product } from "../../model/cart";
import { Data } from '../../model/product';
const App = () => {
//data product-------------------------------------------------------
const products = useSelector(state => state.product.data)
console.log('Product: ', products)
//-------------------------------------------------------------------
const _renderHeaderLeft = () => {
return (
<IconMedlink />
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTitle title='Sản phẩm trong kho' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity onPress={() => navigation.goBack()}>
<Text style={styles.rightHeader}>Hoàn thành</Text>
</TouchableOpacity>
)
}
const _renderHeader = () => (
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
)
const _renderListProduct = (product: Data) => {
const product1 = product
return (
<TouchableOpacity onPress={() => { addToCart(product) }}>
<ItemProduct
drg_drug_cd={product.drg_drug_cd}
drg_drug_name={product.drg_drug_name}
lot={product.lot}
quantity={product.quantity}
exp_date={product.exp_date}
/>
</TouchableOpacity>
)
}
const addToCart = (product: Data) => {
const data = {
drg_drug_cd: product.drg_drug_cd,
drg_drug_name: product.drg_drug_name,
drug_id: product.drug_id,
drug_unit_id: product.drug_unit_id,
inv_id: product.inv_id,
lot: product.lot,
price: product.price,
unit_name: product.unit_name,
quantity: 2,
base_quantity: 1,
discount: 0,
discount_type: "VNĐ",
discount_unit: 0,
import_price: 0,
promotion_flg: 0,
unit_id: 14
}
dispatch(addProductToCart(data))
}
const _renderButtonSubmit = () => (
<TouchableOpacity style={styles.buttonSubmit}
onPress={() => { }}>
<Text>TẠO</Text>
</TouchableOpacity>
)
//------------------------------------------------------------
const navigation = useNavigation()
const dispatch = useDispatch()
useEffect(() => {
dispatch(addProductFromApiListener(''))
return () => { }
}, [])
//------------------------------------------------------------
return (
<SafeAreaView>
{_renderHeader()}
<View >
<FlatList
data={products}
renderItem={({ item }) => _renderListProduct(item)}
/>
{_renderButtonSubmit()}
</View>
</SafeAreaView>
);
}
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
highlight: {
fontWeight: '700',
},
rightHeader: {
fontWeight: 'bold',
fontSize: 15,
color: 'white'
}
});
export default styles;
\ No newline at end of file
import React from 'react';
import {
SafeAreaView,
Text,
TouchableOpacity, Image
} from 'react-native';
import styles from './index.style';
import Header from '../../components/Header';
import IconMedlink from '../../components/IconMedlink';
import HeaderTitle from '../../components/HeaderTitle';
import HomeRepositoryItem from '../../components/HomeRepositoryItem'
import { useNavigation } from '@react-navigation/core';
const App = () => {
const navigation = useNavigation()
const _renderHeaderLeft = () => {
return (
<IconMedlink />
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTitle title='Sản phẩm trong kho' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity onPress={() => navigation.navigate('HomeProductCreate')}>
<Text style={styles.rightHeader}>Thêm</Text>
</TouchableOpacity>
)
}
const _renderHeader = () => (
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
)
const _renderItem = () => (
<HomeRepositoryItem />
)
return (
<SafeAreaView >
{_renderHeader()}
{_renderItem()}
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
highlight: {
fontWeight: '700',
},
rightHeader: {
fontWeight: 'bold',
fontSize: 15,
color: 'white'
}
});
export default styles;
\ No newline at end of file
import React from 'react';
import {
SafeAreaView,
ScrollView,
View,
Text,
TouchableOpacity, Image
} from 'react-native';
import styles from './index.style';
import Header from '../../components/Header';
import IconMedlink from '../../components/IconMedlink';
import HeaderTitle from '../../components/HeaderTitle';
const App = () => {
const _renderHeaderLeft = () => {
return (
<IconMedlink />
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTitle title='Nhà thuốc Medlink' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity>
<Text style={styles.rightHeader}>Mới nhất</Text>
</TouchableOpacity>
)
}
return (
<SafeAreaView >
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic">
<View>
<Text style={styles.sectionTitle}>Invoice</Text>
</View>
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
leftHeader: {
width: 25,
height: 25,
},
rightHeader: {
width: 25,
height: 25
}
});
export default styles;
\ No newline at end of file
import React from 'react';
import {
SafeAreaView,
ScrollView,
View,
Text,
TouchableOpacity, Image
} from 'react-native';
import styles from './index.style';
import Header from '../../components/Header';
import HeaderTextInput from '../../components/HeaderTextInput'
const App = () => {
const _renderHeaderLeft = () => {
return (
<Image style={styles.leftHeader}
source={require('../../assets/icon/iconHeader/icon-search.png')}/>
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTextInput placeholder='Tìm kiếm sản phẩm' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity>
<Image style={styles.rightHeader}
source={require('../../assets/icon/iconHeader/icon-add.png')} />
</TouchableOpacity>
)
}
return (
<SafeAreaView >
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic">
<View>
<Text style={styles.sectionTitle}>Invoice</Text>
</View>
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
highlight: {
fontWeight: '700',
},
leftHeader: {
},
centerHeader: {
alignItems:"center"
},
rightHeader:{
alignItems:"center"
}
});
export default styles;
\ No newline at end of file
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React from 'react';
import {
SafeAreaView,
ScrollView,
StatusBar,
useColorScheme,
View,
Text
} from 'react-native';
import { Colors } from 'react-native/Libraries/NewAppScreen';
import styles from './index.style';
import Header from '../../components/Header';
const App = () => {
const isDarkMode = useColorScheme() === 'dark';
const backgroundStyle = {
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
};
const _renderLeft = () => {
return (
<View style={ styles.leftHeader }>
<Text>Left</Text>
</View>
)
}
const _renderCenter = () => {
return (
<View style={ styles.centerHeader }>
<Text>Center</Text>
</View>
)
}
const _renderRight = () => {
return (
<View style={ styles.rightHeader }>
<Text>Right</Text>
</View>
)
}
return (
<SafeAreaView style={ backgroundStyle }>
<StatusBar barStyle={ isDarkMode ? 'light-content' : 'dark-content' } />
<Header
elementLeft={ _renderLeft() }
elementCenter={ _renderCenter() }
elementRight={ _renderRight() }
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic"
style={ backgroundStyle }>
<View
style={ {
backgroundColor: isDarkMode ? Colors.black : Colors.white,
} }>
<Text style={ styles.sectionTitle }>Verify</Text>
</View>
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
highlight: {
fontWeight: '700',
},
leftHeader: {
},
centerHeader: {
alignItems:"center"
},
rightHeader:{
alignItems:"center"
}
});
export default styles;
\ No newline at end of file
/**
* Sample React Native App
* https://github.com/facebook/react-native
*
* @format
* @flow strict-local
*/
import React from 'react';
import {
SafeAreaView,
ScrollView,
StatusBar,
useColorScheme,
View,
Text
} from 'react-native';
import { Colors } from 'react-native/Libraries/NewAppScreen';
import styles from './index.style';
import Header from '../../components/Header';
const App = () => {
const isDarkMode = useColorScheme() === 'dark';
const backgroundStyle = {
backgroundColor: isDarkMode ? Colors.darker : Colors.lighter,
};
const _renderLeft = () => {
return (
<View style={ styles.leftHeader }>
<Text>Left</Text>
</View>
)
}
const _renderCenter = () => {
return (
<View style={ styles.centerHeader }>
<Text>Center</Text>
</View>
)
}
const _renderRight = () => {
return (
<View style={ styles.rightHeader }>
<Text>Right</Text>
</View>
)
}
return (
<SafeAreaView style={ backgroundStyle }>
<StatusBar barStyle={ isDarkMode ? 'light-content' : 'dark-content' } />
<Header
elementLeft={ _renderLeft() }
elementCenter={ _renderCenter() }
elementRight={ _renderRight() }
/>
<ScrollView
contentInsetAdjustmentBehavior="automatic"
style={ backgroundStyle }>
<View
style={ {
backgroundColor: isDarkMode ? Colors.black : Colors.white,
} }>
<Text style={ styles.sectionTitle }>Verify</Text>
</View>
</ScrollView>
</SafeAreaView>
);
};
export default App;
import { StyleSheet } from "react-native";
const styles = StyleSheet.create({
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
sectionTitle: {
fontSize: 24,
fontWeight: '600',
},
sectionDescription: {
marginTop: 8,
fontSize: 18,
fontWeight: '400',
},
highlight: {
fontWeight: '700',
},
rightHeader: {
fontWeight: 'bold',
fontSize: 15,
color: 'white'
}
});
export default styles;
\ No newline at end of file
import React from 'react';
import {
SafeAreaView,
Text,
TouchableOpacity, Image
} from 'react-native';
import styles from './index.style';
import Header from '../../components/Header';
import IconMedlink from '../../components/IconMedlink';
import HeaderTitle from '../../components/HeaderTitle';
import { useNavigation } from '@react-navigation/native';
import { useSelector, useDispatch } from 'react-redux';
import { loginSuccess } from '../../redux/actions/auth';
const App = () => {
const _renderHeaderLeft = () => {
return (
<IconMedlink />
)
}
const _renderHeaderCenter = () => {
return (
<HeaderTitle title='Khánh Medlink' />
)
}
const _renderHeaderRight = () => {
return (
<TouchableOpacity onPress={() => {logOut()}}>
<Text style={styles.rightHeader}>Đăng xuất</Text>
</TouchableOpacity>
)
}
/////////////////////////////////////////////////////////////
const dispatch = useDispatch()
const navigation = useNavigation()
const logOut = () => {
const token = ''
dispatch(loginSuccess(token))
navigation.navigate('AuthLogin')
}
return (
<SafeAreaView >
<Header
elementLeft={_renderHeaderLeft()}
elementCenter={_renderHeaderCenter()}
elementRight={_renderHeaderRight()}
/>
</SafeAreaView>
);
};
export default App;
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
// "allowJs": true, /* Allow javascript files to be compiled. */
// "checkJs": true, /* Report errors in .js files. */
"jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
// "sourceMap": true, /* Generates corresponding '.map' file. */
// "outFile": "./", /* Concatenate and emit output to single file. */
// "outDir": "./", /* Redirect output structure to the directory. */
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
// "composite": true, /* Enable project compilation */
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
// "removeComments": true, /* Do not emit comments to output. */
// "noEmit": true, /* Do not emit outputs. */
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
/* Strict Type-Checking Options */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* Enable strict null checks. */
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
/* Additional Checks */
// "noUnusedLocals": true, /* Report errors on unused locals. */
// "noUnusedParameters": true, /* Report errors on unused parameters. */
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */
/* Module Resolution Options */
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
// "typeRoots": [], /* List of folders to include type definitions from. */
// "types": [], /* Type declaration files to be included in compilation. */
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
/* Source Map Options */
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
/* Experimental Options */
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
/* Advanced Options */
"skipLibCheck": true, /* Skip type checking of declaration files. */
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment