[]merchant register
This commit is contained in:
parent
2acb336744
commit
307ed3b190
2
App.js
2
App.js
@ -11,9 +11,11 @@ import AppNavigator from 'navigations';
|
|||||||
import {Provider} from 'react-redux';
|
import {Provider} from 'react-redux';
|
||||||
import configureStore from 'store';
|
import configureStore from 'store';
|
||||||
import {PersistGate} from 'redux-persist/integration/react';
|
import {PersistGate} from 'redux-persist/integration/react';
|
||||||
|
import {enableLatestRenderer} from 'react-native-maps';
|
||||||
import 'moment/locale/id';
|
import 'moment/locale/id';
|
||||||
import 'utilities/i18';
|
import 'utilities/i18';
|
||||||
|
|
||||||
|
enableLatestRenderer();
|
||||||
const App = () => {
|
const App = () => {
|
||||||
const {persistor, store} = configureStore();
|
const {persistor, store} = configureStore();
|
||||||
return (
|
return (
|
||||||
|
@ -10,6 +10,9 @@
|
|||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.android.geo.API_KEY"
|
||||||
|
android:value="AIzaSyDQxgkmGEMFgK3quz0dAd4aWH9FiuCUOV4"/>
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
require_relative '../node_modules/react-native/scripts/react_native_pods'
|
require_relative '../node_modules/react-native/scripts/react_native_pods'
|
||||||
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
|
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
|
||||||
|
|
||||||
platform :ios, '12.4'
|
platform :ios, '13.0'
|
||||||
install! 'cocoapods', :deterministic_uuids => false
|
install! 'cocoapods', :deterministic_uuids => false
|
||||||
|
|
||||||
target 'ebogaMerchant' do
|
target 'ebogaMerchant' do
|
||||||
|
# React Native Maps dependencies
|
||||||
|
rn_maps_path = '../node_modules/react-native-maps'
|
||||||
|
pod 'react-native-google-maps', :path => rn_maps_path
|
||||||
|
|
||||||
config = use_native_modules!
|
config = use_native_modules!
|
||||||
|
|
||||||
|
|
||||||
# Flags change depending on the env values.
|
# Flags change depending on the env values.
|
||||||
flags = get_default_flags()
|
flags = get_default_flags()
|
||||||
|
|
||||||
|
@ -73,6 +73,30 @@ PODS:
|
|||||||
- FlipperKit/FlipperKitNetworkPlugin
|
- FlipperKit/FlipperKitNetworkPlugin
|
||||||
- fmt (6.2.1)
|
- fmt (6.2.1)
|
||||||
- glog (0.3.5)
|
- glog (0.3.5)
|
||||||
|
- Google-Maps-iOS-Utils (4.1.0):
|
||||||
|
- Google-Maps-iOS-Utils/Clustering (= 4.1.0)
|
||||||
|
- Google-Maps-iOS-Utils/Geometry (= 4.1.0)
|
||||||
|
- Google-Maps-iOS-Utils/GeometryUtils (= 4.1.0)
|
||||||
|
- Google-Maps-iOS-Utils/Heatmap (= 4.1.0)
|
||||||
|
- Google-Maps-iOS-Utils/QuadTree (= 4.1.0)
|
||||||
|
- GoogleMaps
|
||||||
|
- Google-Maps-iOS-Utils/Clustering (4.1.0):
|
||||||
|
- Google-Maps-iOS-Utils/QuadTree
|
||||||
|
- GoogleMaps
|
||||||
|
- Google-Maps-iOS-Utils/Geometry (4.1.0):
|
||||||
|
- GoogleMaps
|
||||||
|
- Google-Maps-iOS-Utils/GeometryUtils (4.1.0):
|
||||||
|
- GoogleMaps
|
||||||
|
- Google-Maps-iOS-Utils/Heatmap (4.1.0):
|
||||||
|
- Google-Maps-iOS-Utils/QuadTree
|
||||||
|
- GoogleMaps
|
||||||
|
- Google-Maps-iOS-Utils/QuadTree (4.1.0):
|
||||||
|
- GoogleMaps
|
||||||
|
- GoogleMaps (7.0.0):
|
||||||
|
- GoogleMaps/Maps (= 7.0.0)
|
||||||
|
- GoogleMaps/Base (7.0.0)
|
||||||
|
- GoogleMaps/Maps (7.0.0):
|
||||||
|
- GoogleMaps/Base
|
||||||
- hermes-engine (0.70.6)
|
- hermes-engine (0.70.6)
|
||||||
- libevent (2.1.12)
|
- libevent (2.1.12)
|
||||||
- OpenSSL-Universal (1.1.1100)
|
- OpenSSL-Universal (1.1.1100)
|
||||||
@ -302,6 +326,12 @@ PODS:
|
|||||||
- React-jsinspector (0.70.6)
|
- React-jsinspector (0.70.6)
|
||||||
- React-logger (0.70.6):
|
- React-logger (0.70.6):
|
||||||
- glog
|
- glog
|
||||||
|
- react-native-google-maps (1.3.2):
|
||||||
|
- Google-Maps-iOS-Utils (= 4.1.0)
|
||||||
|
- GoogleMaps (= 7.0.0)
|
||||||
|
- React-Core
|
||||||
|
- react-native-maps (1.3.2):
|
||||||
|
- React-Core
|
||||||
- react-native-safe-area-context (4.4.1):
|
- react-native-safe-area-context (4.4.1):
|
||||||
- RCT-Folly
|
- RCT-Folly
|
||||||
- RCTRequired
|
- RCTRequired
|
||||||
@ -435,6 +465,8 @@ DEPENDENCIES:
|
|||||||
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
|
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
|
||||||
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
|
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
|
||||||
- React-logger (from `../node_modules/react-native/ReactCommon/logger`)
|
- React-logger (from `../node_modules/react-native/ReactCommon/logger`)
|
||||||
|
- react-native-google-maps (from `../node_modules/react-native-maps`)
|
||||||
|
- react-native-maps (from `../node_modules/react-native-maps`)
|
||||||
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
|
||||||
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
|
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
|
||||||
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
|
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
|
||||||
@ -467,6 +499,8 @@ SPEC REPOS:
|
|||||||
- Flipper-RSocket
|
- Flipper-RSocket
|
||||||
- FlipperKit
|
- FlipperKit
|
||||||
- fmt
|
- fmt
|
||||||
|
- Google-Maps-iOS-Utils
|
||||||
|
- GoogleMaps
|
||||||
- libevent
|
- libevent
|
||||||
- OpenSSL-Universal
|
- OpenSSL-Universal
|
||||||
- SocketRocket
|
- SocketRocket
|
||||||
@ -515,6 +549,10 @@ EXTERNAL SOURCES:
|
|||||||
:path: "../node_modules/react-native/ReactCommon/jsinspector"
|
:path: "../node_modules/react-native/ReactCommon/jsinspector"
|
||||||
React-logger:
|
React-logger:
|
||||||
:path: "../node_modules/react-native/ReactCommon/logger"
|
:path: "../node_modules/react-native/ReactCommon/logger"
|
||||||
|
react-native-google-maps:
|
||||||
|
:path: "../node_modules/react-native-maps"
|
||||||
|
react-native-maps:
|
||||||
|
:path: "../node_modules/react-native-maps"
|
||||||
react-native-safe-area-context:
|
react-native-safe-area-context:
|
||||||
:path: "../node_modules/react-native-safe-area-context"
|
:path: "../node_modules/react-native-safe-area-context"
|
||||||
React-perflogger:
|
React-perflogger:
|
||||||
@ -569,6 +607,8 @@ SPEC CHECKSUMS:
|
|||||||
FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
|
FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
|
||||||
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
|
||||||
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
|
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
|
||||||
|
Google-Maps-iOS-Utils: 3343332b18dfd5be8f1f44edd7d481ace3da4d9a
|
||||||
|
GoogleMaps: 6e9c923ca035989709fcb5771544fda4cc5fa2a4
|
||||||
hermes-engine: 2af7b7a59128f250adfd86f15aa1d5a2ecd39995
|
hermes-engine: 2af7b7a59128f250adfd86f15aa1d5a2ecd39995
|
||||||
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
|
||||||
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
|
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
|
||||||
@ -587,6 +627,8 @@ SPEC CHECKSUMS:
|
|||||||
React-jsiexecutor: b4a65947391c658450151275aa406f2b8263178f
|
React-jsiexecutor: b4a65947391c658450151275aa406f2b8263178f
|
||||||
React-jsinspector: 60769e5a0a6d4b32294a2456077f59d0266f9a8b
|
React-jsinspector: 60769e5a0a6d4b32294a2456077f59d0266f9a8b
|
||||||
React-logger: 1623c216abaa88974afce404dc8f479406bbc3a0
|
React-logger: 1623c216abaa88974afce404dc8f479406bbc3a0
|
||||||
|
react-native-google-maps: 035ad2f9b4974f22af3d4d4c6993960a181b0aaf
|
||||||
|
react-native-maps: 085f614cf14d3637b2048bb9752da5b1c27c2886
|
||||||
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
|
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
|
||||||
React-perflogger: 8c79399b0500a30ee8152d0f9f11beae7fc36595
|
React-perflogger: 8c79399b0500a30ee8152d0f9f11beae7fc36595
|
||||||
React-RCTActionSheet: 7316773acabb374642b926c19aef1c115df5c466
|
React-RCTActionSheet: 7316773acabb374642b926c19aef1c115df5c466
|
||||||
@ -608,6 +650,6 @@ SPEC CHECKSUMS:
|
|||||||
Yoga: 99caf8d5ab45e9d637ee6e0174ec16fbbb01bcfc
|
Yoga: 99caf8d5ab45e9d637ee6e0174ec16fbbb01bcfc
|
||||||
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
|
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
|
||||||
|
|
||||||
PODFILE CHECKSUM: a700021d3d8e9f7f95b629963305cc2bdad8bd83
|
PODFILE CHECKSUM: c8cae34a1edb4622be93441776d459ca2bef90a2
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.11.3
|
||||||
|
@ -564,6 +564,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = ebogaMerchant/Info.plist;
|
INFOPLIST_FILE = ebogaMerchant/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
@ -589,6 +590,7 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
INFOPLIST_FILE = ebogaMerchant/Info.plist;
|
INFOPLIST_FILE = ebogaMerchant/Info.plist;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#import <React/RCTBundleURLProvider.h>
|
#import <React/RCTBundleURLProvider.h>
|
||||||
#import <React/RCTRootView.h>
|
#import <React/RCTRootView.h>
|
||||||
|
|
||||||
|
#import <GoogleMaps/GoogleMaps.h>
|
||||||
|
|
||||||
#import <React/RCTAppSetupUtils.h>
|
#import <React/RCTAppSetupUtils.h>
|
||||||
|
|
||||||
#if RCT_NEW_ARCH_ENABLED
|
#if RCT_NEW_ARCH_ENABLED
|
||||||
@ -31,6 +33,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
|
|||||||
|
|
||||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||||
{
|
{
|
||||||
|
[GMSServices provideAPIKey:@"AIzaSyAsUsHDC4CO5ZuqVllrTAJ-h6pCgY0MrQ8"];
|
||||||
RCTAppSetupPrepareApp(application);
|
RCTAppSetupPrepareApp(application);
|
||||||
|
|
||||||
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
|
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>NSLocationWhenInUseUsageDescription</key>
|
<key>NSLocationWhenInUseUsageDescription</key>
|
||||||
<string/>
|
<string></string>
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
<string>LaunchScreen</string>
|
<string>LaunchScreen</string>
|
||||||
<key>UIRequiredDeviceCapabilities</key>
|
<key>UIRequiredDeviceCapabilities</key>
|
||||||
|
@ -23,7 +23,10 @@
|
|||||||
"react": "18.1.0",
|
"react": "18.1.0",
|
||||||
"react-i18next": "^12.0.0",
|
"react-i18next": "^12.0.0",
|
||||||
"react-native": "0.70.6",
|
"react-native": "0.70.6",
|
||||||
|
"react-native-currency-input": "^1.1.0",
|
||||||
|
"react-native-dropdown-picker": "^5.4.3",
|
||||||
"react-native-localize": "^2.2.4",
|
"react-native-localize": "^2.2.4",
|
||||||
|
"react-native-maps": "^1.3.2",
|
||||||
"react-native-modal": "^13.0.1",
|
"react-native-modal": "^13.0.1",
|
||||||
"react-native-responsive-fontsize": "^0.5.1",
|
"react-native-responsive-fontsize": "^0.5.1",
|
||||||
"react-native-safe-area-context": "^4.4.1",
|
"react-native-safe-area-context": "^4.4.1",
|
||||||
|
@ -35,7 +35,7 @@ export default StyleSheet.create({
|
|||||||
},
|
},
|
||||||
smTitle: {
|
smTitle: {
|
||||||
fontFamily: FONTS.poppins[600],
|
fontFamily: FONTS.poppins[600],
|
||||||
fontSize: RFValue(14),
|
fontSize: RFValue(13),
|
||||||
color: Colors.TEXT,
|
color: Colors.TEXT,
|
||||||
marginTop: width * 0.005,
|
marginTop: width * 0.005,
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,96 @@
|
|||||||
import React from 'react';
|
import React, {useState} from 'react';
|
||||||
|
import {View, TextInput, StyleSheet, Dimensions, Text} from 'react-native';
|
||||||
|
import {Colors, FONTS} from 'global-styles';
|
||||||
|
import {RFValue} from 'react-native-responsive-fontsize';
|
||||||
|
import CurrencyInput from 'react-native-currency-input';
|
||||||
|
import {Icon} from 'components';
|
||||||
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
const _Currency = props => {
|
const _Currency = props => {
|
||||||
return null;
|
const {label, editable, note, error, required} = props;
|
||||||
|
const [isFocused, setIsFocused] = useState(false);
|
||||||
|
return (
|
||||||
|
<View style={styles.container}>
|
||||||
|
{label && (
|
||||||
|
<Text style={styles.label}>
|
||||||
|
{label}
|
||||||
|
{required && <Text style={{color: Colors.RED}}>*</Text>}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
<View style={styles.inputSection(editable)}>
|
||||||
|
<CurrencyInput
|
||||||
|
{...props}
|
||||||
|
prefix="Rp"
|
||||||
|
delimiter="."
|
||||||
|
minValue={0}
|
||||||
|
precision={0}
|
||||||
|
style={styles.input(isFocused)}
|
||||||
|
editable={editable}
|
||||||
|
onChange={e => setIsFocused(e.nativeEvent.text.length > 0)}
|
||||||
|
placeholderTextColor={Colors.GREY}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
{note && <Text style={styles.note}>{note}</Text>}
|
||||||
|
{error && (
|
||||||
|
<View style={styles.errorSection}>
|
||||||
|
<Icon name="error" type="MaterialIcons" style={styles.errorIcon} />
|
||||||
|
<Text style={styles.errorText}>{error}</Text>
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
_Currency.defaultProps = {
|
||||||
|
editable: true,
|
||||||
|
note: undefined,
|
||||||
|
error: undefined,
|
||||||
|
required: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {},
|
||||||
|
label: {
|
||||||
|
fontFamily: FONTS.poppins[600],
|
||||||
|
fontSize: RFValue(11.5),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
inputSection: editable => ({
|
||||||
|
height: width * 0.12,
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
borderRadius: width * 0.02,
|
||||||
|
marginVertical: width * 0.023,
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingHorizontal: width * 0.04,
|
||||||
|
backgroundColor: editable ? Colors.WHITE : Colors.DISABLED,
|
||||||
|
}),
|
||||||
|
input: isFocused => ({
|
||||||
|
fontFamily: FONTS.poppins[isFocused ? 500 : 400],
|
||||||
|
fontSize: RFValue(isFocused ? 13 : 12),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
}),
|
||||||
|
note: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(10),
|
||||||
|
color: Colors.TEXT_LIGHT,
|
||||||
|
marginTop: -width * 0.005,
|
||||||
|
},
|
||||||
|
errorSection: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
marginTop: width * 0.002,
|
||||||
|
},
|
||||||
|
errorIcon: {
|
||||||
|
color: Colors.RED,
|
||||||
|
},
|
||||||
|
errorText: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(10),
|
||||||
|
color: Colors.RED,
|
||||||
|
marginTop: -width * 0.001,
|
||||||
|
marginLeft: width * 0.01,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
export default _Currency;
|
export default _Currency;
|
||||||
|
383
src/components/Input/_maps.js
Normal file
383
src/components/Input/_maps.js
Normal file
@ -0,0 +1,383 @@
|
|||||||
|
import React, {useState} from 'react';
|
||||||
|
import {
|
||||||
|
View,
|
||||||
|
StyleSheet,
|
||||||
|
Dimensions,
|
||||||
|
Text,
|
||||||
|
TouchableOpacity,
|
||||||
|
TextInput,
|
||||||
|
} from 'react-native';
|
||||||
|
import {Colors, FONTS} from 'global-styles';
|
||||||
|
import {RFValue} from 'react-native-responsive-fontsize';
|
||||||
|
import {Icon} from 'components';
|
||||||
|
import Modal from 'react-native-modal';
|
||||||
|
import {useTranslation} from 'react-i18next';
|
||||||
|
import MapView, {PROVIDER_GOOGLE, Marker} from 'react-native-maps';
|
||||||
|
const {width, height} = Dimensions.get('window');
|
||||||
|
|
||||||
|
let coordinateX = {
|
||||||
|
latitude: 37.78825,
|
||||||
|
longitude: -122.4324,
|
||||||
|
latitudeDelta: 0.0922,
|
||||||
|
longitudeDelta: 0.0421,
|
||||||
|
};
|
||||||
|
|
||||||
|
const _Maps = props => {
|
||||||
|
const {t} = useTranslation();
|
||||||
|
const [modal, setModal] = useState(false);
|
||||||
|
const [coordinate, setCoordinate] = useState({});
|
||||||
|
const {label, note, error, required} = props;
|
||||||
|
return (
|
||||||
|
<View style={styles.container}>
|
||||||
|
{label && (
|
||||||
|
<Text style={styles.label}>
|
||||||
|
{label}
|
||||||
|
{required && <Text style={{color: Colors.RED}}>*</Text>}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
<TouchableOpacity
|
||||||
|
activeOpacity={0.5}
|
||||||
|
onPress={() => setModal(true)}
|
||||||
|
style={styles.inputSection}>
|
||||||
|
<Icon
|
||||||
|
name="map-marker-radius"
|
||||||
|
type="MaterialCommunityIcons"
|
||||||
|
style={styles.mapIcon}
|
||||||
|
/>
|
||||||
|
<Text style={styles.inputPlaceholder}>Pilih lokasi</Text>
|
||||||
|
</TouchableOpacity>
|
||||||
|
{note && <Text style={styles.note}>{note}</Text>}
|
||||||
|
{error && (
|
||||||
|
<View style={styles.errorSection}>
|
||||||
|
<Icon name="error" type="MaterialIcons" style={styles.errorIcon} />
|
||||||
|
<Text style={styles.errorText}>{error}</Text>
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<Modal isVisible={modal} style={styles.modal}>
|
||||||
|
<View style={styles.modalSection}>
|
||||||
|
<TouchableOpacity
|
||||||
|
onPress={() => setModal(false)}
|
||||||
|
style={styles.buttonClose}>
|
||||||
|
<Icon
|
||||||
|
name="close"
|
||||||
|
type="AntDesign"
|
||||||
|
style={styles.buttonCloseIcon}
|
||||||
|
/>
|
||||||
|
</TouchableOpacity>
|
||||||
|
<View style={styles.content}>
|
||||||
|
<View style={styles.header}>
|
||||||
|
<Text style={styles.title}>
|
||||||
|
{t('select_outlet_location_text')}
|
||||||
|
</Text>
|
||||||
|
{coordinate?.latitude ? (
|
||||||
|
<TouchableOpacity
|
||||||
|
onPress={() => setCoordinate({})}
|
||||||
|
style={styles.buttonSearch}>
|
||||||
|
<Icon
|
||||||
|
name="search"
|
||||||
|
type="Feather"
|
||||||
|
style={styles.searchIcon}
|
||||||
|
/>
|
||||||
|
</TouchableOpacity>
|
||||||
|
) : (
|
||||||
|
<View style={styles.inputSearchSection}>
|
||||||
|
<TextInput style={styles.input} placeholder="Cari" />
|
||||||
|
<Icon
|
||||||
|
name="search"
|
||||||
|
type="Feather"
|
||||||
|
style={styles.searchIcon}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{!coordinate?.latitude && (
|
||||||
|
<View style={styles.locationContainer}>
|
||||||
|
<TouchableOpacity
|
||||||
|
activeOpacity={0.7}
|
||||||
|
onPress={() =>
|
||||||
|
setCoordinate({
|
||||||
|
latitude: 37.78825,
|
||||||
|
longitude: -122.4324,
|
||||||
|
latitudeDelta: 0.0922,
|
||||||
|
longitudeDelta: 0.0421,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
style={styles.locationSection}>
|
||||||
|
<Icon
|
||||||
|
name="my-location"
|
||||||
|
type="MaterialIcons"
|
||||||
|
style={styles.myLoationIcon}
|
||||||
|
/>
|
||||||
|
<View style={styles.locationInfoSection(true)}>
|
||||||
|
<Text style={styles.locationInfoName}>
|
||||||
|
Warung Sop & Sate Sapi Pak Bayu
|
||||||
|
</Text>
|
||||||
|
<Text numberOfLines={2} style={styles.locationInfoAddress}>
|
||||||
|
Jl. Yudistiro No.2, RT.05/RW.11, Palgading, Sinduharjo,
|
||||||
|
Kec. Ngaglik, Kabupaten Sleman, Daerah Istimewa Yogyakarta
|
||||||
|
55581
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{coordinate?.latitude && (
|
||||||
|
<React.Fragment>
|
||||||
|
<View style={styles.mapSection}>
|
||||||
|
<MapView
|
||||||
|
provider={PROVIDER_GOOGLE} // remove if not using Google Maps
|
||||||
|
style={styles.map}
|
||||||
|
region={coordinate}>
|
||||||
|
<Marker
|
||||||
|
coordinate={coordinate}
|
||||||
|
title={'title'}
|
||||||
|
description={'description'}
|
||||||
|
/>
|
||||||
|
</MapView>
|
||||||
|
</View>
|
||||||
|
<View style={styles.buttonSection}>
|
||||||
|
<TouchableOpacity
|
||||||
|
activeOpacity={0.7}
|
||||||
|
onPress={() =>
|
||||||
|
setCoordinate({
|
||||||
|
latitude: 37.78825,
|
||||||
|
longitude: -122.4324,
|
||||||
|
latitudeDelta: 0.0922,
|
||||||
|
longitudeDelta: 0.0421,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
style={styles.locationSection}>
|
||||||
|
<Icon
|
||||||
|
name="my-location"
|
||||||
|
type="MaterialIcons"
|
||||||
|
style={styles.myLoationIcon}
|
||||||
|
/>
|
||||||
|
<View style={styles.locationInfoSection(false)}>
|
||||||
|
<Text style={styles.locationInfoName}>
|
||||||
|
Warung Sop & Sate Sapi Pak Bayu
|
||||||
|
</Text>
|
||||||
|
<Text
|
||||||
|
numberOfLines={2}
|
||||||
|
style={styles.locationInfoAddress}>
|
||||||
|
Jl. Yudistiro No.2, RT.05/RW.11, Palgading, Sinduharjo,
|
||||||
|
Kec. Ngaglik, Kabupaten Sleman, Daerah Istimewa
|
||||||
|
Yogyakarta 55581
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
</TouchableOpacity>
|
||||||
|
<TouchableOpacity
|
||||||
|
onPress={() => alert('saved')}
|
||||||
|
style={styles.button}>
|
||||||
|
<Text style={styles.buttonTitle}>{t('save')}</Text>
|
||||||
|
</TouchableOpacity>
|
||||||
|
</View>
|
||||||
|
</React.Fragment>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</Modal>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
_Maps.defaultProps = {
|
||||||
|
note: undefined,
|
||||||
|
error: undefined,
|
||||||
|
required: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {},
|
||||||
|
label: {
|
||||||
|
fontFamily: FONTS.poppins[600],
|
||||||
|
fontSize: RFValue(11.5),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
inputSection: {
|
||||||
|
height: width * 0.45,
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: Colors.DISABLED,
|
||||||
|
borderRadius: width * 0.02,
|
||||||
|
marginVertical: width * 0.023,
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center',
|
||||||
|
paddingHorizontal: width * 0.04,
|
||||||
|
backgroundColor: Colors.DISABLED,
|
||||||
|
flexDirection: 'row',
|
||||||
|
},
|
||||||
|
mapIcon: {
|
||||||
|
fontSize: RFValue(18),
|
||||||
|
color: Colors.PRIMARY,
|
||||||
|
},
|
||||||
|
inputPlaceholder: {
|
||||||
|
fontFamily: FONTS.poppins[500],
|
||||||
|
fontSize: RFValue(11),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
marginTop: width * 0.003,
|
||||||
|
marginLeft: width * 0.01,
|
||||||
|
},
|
||||||
|
note: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(10),
|
||||||
|
color: Colors.TEXT_LIGHT,
|
||||||
|
marginTop: -width * 0.005,
|
||||||
|
},
|
||||||
|
errorSection: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
marginTop: width * 0.002,
|
||||||
|
},
|
||||||
|
errorIcon: {
|
||||||
|
color: Colors.RED,
|
||||||
|
},
|
||||||
|
errorText: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(10),
|
||||||
|
color: Colors.RED,
|
||||||
|
marginTop: -width * 0.001,
|
||||||
|
marginLeft: width * 0.01,
|
||||||
|
},
|
||||||
|
|
||||||
|
// modal styled
|
||||||
|
modal: {
|
||||||
|
margin: 0,
|
||||||
|
},
|
||||||
|
modalSection: {
|
||||||
|
flex: 1,
|
||||||
|
margin: 0,
|
||||||
|
justifyContent: 'flex-end',
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
height: width * 1.9,
|
||||||
|
backgroundColor: Colors.WHITE,
|
||||||
|
// paddingVertical: width * 0.04,
|
||||||
|
// paddingHorizontal: width * 0.05,
|
||||||
|
borderTopLeftRadius: width * 0.05,
|
||||||
|
borderTopRightRadius: width * 0.05,
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
paddingVertical: width * 0.05,
|
||||||
|
paddingHorizontal: width * 0.05,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
fontFamily: FONTS.poppins[600],
|
||||||
|
fontSize: RFValue(13),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
inputSearchSection: {
|
||||||
|
height: width * 0.12,
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
borderRadius: width * 0.02,
|
||||||
|
marginVertical: width * 0.023,
|
||||||
|
justifyContent: 'center',
|
||||||
|
alignItems: 'center',
|
||||||
|
paddingHorizontal: width * 0.04,
|
||||||
|
backgroundColor: Colors.DISABLED,
|
||||||
|
flexDirection: 'row',
|
||||||
|
},
|
||||||
|
searchIcon: {
|
||||||
|
fontSize: RFValue(20),
|
||||||
|
color: Colors.GREY,
|
||||||
|
},
|
||||||
|
input: {
|
||||||
|
flex: 1,
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(13),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
locationContainer: {
|
||||||
|
paddingHorizontal: width * 0.05,
|
||||||
|
},
|
||||||
|
locationSection: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'flex-start',
|
||||||
|
marginBottom: width * 0.03,
|
||||||
|
},
|
||||||
|
myLoationIcon: {
|
||||||
|
fontSize: RFValue(16),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
marginRight: width * 0.03,
|
||||||
|
},
|
||||||
|
locationInfoSection: isBordered => ({
|
||||||
|
flex: 1,
|
||||||
|
borderBottomWidth: isBordered ? 1 : 0,
|
||||||
|
borderBottomColor: Colors.LINE_STROKE,
|
||||||
|
paddingBottom: width * 0.04,
|
||||||
|
}),
|
||||||
|
locationInfoName: {
|
||||||
|
fontFamily: FONTS.poppins[500],
|
||||||
|
fontSize: RFValue(12),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
marginTop: -width * 0.002,
|
||||||
|
marginBottom: width * 0.008,
|
||||||
|
},
|
||||||
|
locationInfoAddress: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(11),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
|
||||||
|
buttonSearch: {
|
||||||
|
position: 'absolute',
|
||||||
|
right: width * 0.05,
|
||||||
|
top: width * 0.046,
|
||||||
|
},
|
||||||
|
|
||||||
|
// maps section
|
||||||
|
mapSection: {
|
||||||
|
// height: width * 1.2,
|
||||||
|
height: height,
|
||||||
|
width: width,
|
||||||
|
},
|
||||||
|
map: {
|
||||||
|
flex: 1,
|
||||||
|
height: height - 0.5,
|
||||||
|
},
|
||||||
|
buttonClose: {
|
||||||
|
backgroundColor: Colors.WHITE,
|
||||||
|
width: width * 0.09,
|
||||||
|
height: width * 0.09,
|
||||||
|
borderRadius: width,
|
||||||
|
marginBottom: width * 0.03,
|
||||||
|
alignSelf: 'flex-end',
|
||||||
|
marginRight: width * 0.03,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
},
|
||||||
|
buttonCloseIcon: {
|
||||||
|
fontSize: RFValue(20),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
|
||||||
|
buttonSection: {
|
||||||
|
width: width,
|
||||||
|
backgroundColor: Colors.WHITE,
|
||||||
|
position: 'absolute',
|
||||||
|
bottom: 0,
|
||||||
|
height: width * 0.5,
|
||||||
|
paddingVertical: width * 0.05,
|
||||||
|
paddingHorizontal: width * 0.05,
|
||||||
|
borderTopLeftRadius: width * 0.04,
|
||||||
|
borderTopRightRadius: width * 0.04,
|
||||||
|
},
|
||||||
|
button: {
|
||||||
|
backgroundColor: Colors.PRIMARY,
|
||||||
|
height: width * 0.11,
|
||||||
|
borderRadius: width * 0.015,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
marginBottom: width * 0.05,
|
||||||
|
},
|
||||||
|
buttonTitle: {
|
||||||
|
fontFamily: FONTS.poppins[500],
|
||||||
|
color: Colors.WHITE,
|
||||||
|
fontSize: RFValue(12),
|
||||||
|
marginTop: width * 0.005,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default _Maps;
|
@ -6,16 +6,21 @@ import {Icon} from 'components';
|
|||||||
const {width} = Dimensions.get('window');
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
const _Phone = props => {
|
const _Phone = props => {
|
||||||
const {label, editable, note, error} = props;
|
const {label, editable, note, error, required} = props;
|
||||||
const [isFocused, setIsFocused] = useState(false);
|
const [isFocused, setIsFocused] = useState(false);
|
||||||
return (
|
return (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
{label && <Text style={styles.label}>{label}</Text>}
|
{label && (
|
||||||
|
<Text style={styles.label}>
|
||||||
|
{label} {required && <Text style={{color: Colors.RED}}>*</Text>}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
<View style={styles.inputSection(editable)}>
|
<View style={styles.inputSection(editable)}>
|
||||||
<View style={styles.numberIdSection}>
|
<View style={styles.numberIdSection}>
|
||||||
<Text style={styles.numberIdText}>🇮🇩 +62</Text>
|
<Text style={styles.numberIdText}>🇮🇩 +62</Text>
|
||||||
</View>
|
</View>
|
||||||
<TextInput
|
<TextInput
|
||||||
|
{...props}
|
||||||
style={styles.input(isFocused)}
|
style={styles.input(isFocused)}
|
||||||
editable={editable}
|
editable={editable}
|
||||||
keyboardType="decimal-pad"
|
keyboardType="decimal-pad"
|
||||||
@ -38,6 +43,7 @@ _Phone.defaultProps = {
|
|||||||
editable: true,
|
editable: true,
|
||||||
note: undefined,
|
note: undefined,
|
||||||
error: undefined,
|
error: undefined,
|
||||||
|
required: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
|
158
src/components/Input/_select.js
Normal file
158
src/components/Input/_select.js
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
import React, {useState} from 'react';
|
||||||
|
import {View, TextInput, StyleSheet, Dimensions, Text} from 'react-native';
|
||||||
|
import {Colors, FONTS} from 'global-styles';
|
||||||
|
import {RFValue} from 'react-native-responsive-fontsize';
|
||||||
|
import {Icon} from 'components';
|
||||||
|
import DropDownPicker from 'react-native-dropdown-picker';
|
||||||
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
|
const _Select = props => {
|
||||||
|
const {
|
||||||
|
label,
|
||||||
|
editable,
|
||||||
|
note,
|
||||||
|
error,
|
||||||
|
placeholder,
|
||||||
|
required,
|
||||||
|
data,
|
||||||
|
value,
|
||||||
|
onChangeValue,
|
||||||
|
searchable,
|
||||||
|
} = props;
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
const [items, setItems] = useState(data);
|
||||||
|
return (
|
||||||
|
<View style={styles.container(open)}>
|
||||||
|
{label && (
|
||||||
|
<Text style={styles.label}>
|
||||||
|
{label} {required && <Text style={{color: Colors.RED}}>*</Text>}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
<View style={styles.inputSection(editable)}>
|
||||||
|
<DropDownPicker
|
||||||
|
open={open}
|
||||||
|
value={value}
|
||||||
|
items={items}
|
||||||
|
disabled={!editable}
|
||||||
|
setOpen={setOpen}
|
||||||
|
setValue={onChangeValue}
|
||||||
|
setItems={setItems}
|
||||||
|
searchable={searchable}
|
||||||
|
placeholder={placeholder}
|
||||||
|
listMode="SCROLLVIEW"
|
||||||
|
scrollViewProps={{
|
||||||
|
nestedScrollEnabled: true,
|
||||||
|
}}
|
||||||
|
searchContainerStyle={{
|
||||||
|
borderBottomColor: Colors.LINE_STROKE,
|
||||||
|
}}
|
||||||
|
searchTextInputStyle={{
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
fontSize: RFValue(12),
|
||||||
|
}}
|
||||||
|
style={styles.dropdown}
|
||||||
|
placeholderStyle={styles.dropdownPlaceholder}
|
||||||
|
dropDownContainerStyle={styles.dropdownContent}
|
||||||
|
textStyle={styles.dropdownText}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
{note && <Text style={styles.note}>{note}</Text>}
|
||||||
|
{error && (
|
||||||
|
<View style={styles.errorSection}>
|
||||||
|
<Icon name="error" type="MaterialIcons" style={styles.errorIcon} />
|
||||||
|
<Text style={styles.errorText}>{error}</Text>
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
_Select.defaultProps = {
|
||||||
|
editable: true,
|
||||||
|
note: undefined,
|
||||||
|
error: undefined,
|
||||||
|
required: false,
|
||||||
|
placeholder: '',
|
||||||
|
data: [],
|
||||||
|
value: '',
|
||||||
|
onChangeValue: () => {},
|
||||||
|
searchable: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: isOpen => ({
|
||||||
|
zIndex: isOpen ? 10 : 1,
|
||||||
|
}),
|
||||||
|
label: {
|
||||||
|
fontFamily: FONTS.poppins[600],
|
||||||
|
fontSize: RFValue(11.5),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
inputSection: editable => ({
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
height: width * 0.12,
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
borderRadius: width * 0.02,
|
||||||
|
marginVertical: width * 0.023,
|
||||||
|
backgroundColor: editable ? Colors.WHITE : Colors.DISABLED,
|
||||||
|
}),
|
||||||
|
dropdown: {
|
||||||
|
height: width * 0.12,
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
borderRadius: width * 0.02,
|
||||||
|
paddingHorizontal: width * 0.04,
|
||||||
|
},
|
||||||
|
dropdownPlaceholder: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(12),
|
||||||
|
color: Colors.GREY,
|
||||||
|
},
|
||||||
|
dropdownContent: {
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
backgroundColor: Colors.WHITE,
|
||||||
|
},
|
||||||
|
dropdownText: {
|
||||||
|
fontFamily: FONTS.poppins[500],
|
||||||
|
fontSize: RFValue(13),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
note: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(10),
|
||||||
|
color: Colors.TEXT_LIGHT,
|
||||||
|
marginTop: -width * 0.005,
|
||||||
|
},
|
||||||
|
errorSection: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
marginTop: width * 0.002,
|
||||||
|
},
|
||||||
|
errorIcon: {
|
||||||
|
color: Colors.RED,
|
||||||
|
},
|
||||||
|
errorText: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(10),
|
||||||
|
color: Colors.RED,
|
||||||
|
marginTop: -width * 0.001,
|
||||||
|
marginLeft: width * 0.01,
|
||||||
|
},
|
||||||
|
numberIdSection: {
|
||||||
|
height: width * 0.11,
|
||||||
|
backgroundColor: Colors.DISABLED,
|
||||||
|
borderRightWidth: 1,
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
borderTopLeftRadius: width * 0.02,
|
||||||
|
borderBottomLeftRadius: width * 0.02,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
paddingHorizontal: width * 0.02,
|
||||||
|
},
|
||||||
|
numberIdText: {},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default _Select;
|
@ -6,13 +6,19 @@ import {Icon} from 'components';
|
|||||||
const {width} = Dimensions.get('window');
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
const _Text = props => {
|
const _Text = props => {
|
||||||
const {label, editable, note, error} = props;
|
const {label, editable, note, error, required} = props;
|
||||||
const [isFocused, setIsFocused] = useState(false);
|
const [isFocused, setIsFocused] = useState(false);
|
||||||
return (
|
return (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
{label && <Text style={styles.label}>{label}</Text>}
|
{label && (
|
||||||
|
<Text style={styles.label}>
|
||||||
|
{label}
|
||||||
|
{required && <Text style={{color: Colors.RED}}>*</Text>}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
<View style={styles.inputSection(editable)}>
|
<View style={styles.inputSection(editable)}>
|
||||||
<TextInput
|
<TextInput
|
||||||
|
{...props}
|
||||||
style={styles.input(isFocused)}
|
style={styles.input(isFocused)}
|
||||||
editable={editable}
|
editable={editable}
|
||||||
onChange={e => setIsFocused(e.nativeEvent.text.length > 0)}
|
onChange={e => setIsFocused(e.nativeEvent.text.length > 0)}
|
||||||
@ -34,6 +40,7 @@ _Text.defaultProps = {
|
|||||||
editable: true,
|
editable: true,
|
||||||
note: undefined,
|
note: undefined,
|
||||||
error: undefined,
|
error: undefined,
|
||||||
|
required: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
@ -55,7 +62,7 @@ const styles = StyleSheet.create({
|
|||||||
}),
|
}),
|
||||||
input: isFocused => ({
|
input: isFocused => ({
|
||||||
fontFamily: FONTS.poppins[isFocused ? 500 : 400],
|
fontFamily: FONTS.poppins[isFocused ? 500 : 400],
|
||||||
fontSize: RFValue(13),
|
fontSize: RFValue(isFocused ? 13 : 12),
|
||||||
color: Colors.TEXT,
|
color: Colors.TEXT,
|
||||||
}),
|
}),
|
||||||
note: {
|
note: {
|
||||||
|
@ -4,6 +4,8 @@ import React from 'react';
|
|||||||
import InputText from './_text';
|
import InputText from './_text';
|
||||||
import InputPhone from './_phone';
|
import InputPhone from './_phone';
|
||||||
import InputCurrency from './_currency';
|
import InputCurrency from './_currency';
|
||||||
|
import InputSelect from './_select';
|
||||||
|
import InputMaps from './_maps';
|
||||||
|
|
||||||
const Input = props => {
|
const Input = props => {
|
||||||
switch (props.type) {
|
switch (props.type) {
|
||||||
@ -13,11 +15,15 @@ const Input = props => {
|
|||||||
return <InputPhone {...props} />;
|
return <InputPhone {...props} />;
|
||||||
case 'currency':
|
case 'currency':
|
||||||
return <InputCurrency {...props} />;
|
return <InputCurrency {...props} />;
|
||||||
|
case 'select':
|
||||||
|
return <InputSelect {...props} />;
|
||||||
|
case 'maps':
|
||||||
|
return <InputMaps {...props} />;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Input.propTypes = {
|
Input.propTypes = {
|
||||||
type: PropTypes.oneOf(['text', 'phone', 'currency', 'dropdown']),
|
type: PropTypes.oneOf(['text', 'phone', 'currency', 'select', 'maps']),
|
||||||
};
|
};
|
||||||
|
|
||||||
Input.defaultProps = {
|
Input.defaultProps = {
|
||||||
|
45
src/components/Note/index.js
Normal file
45
src/components/Note/index.js
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {View, Text, Dimensions, StyleSheet} from 'react-native';
|
||||||
|
import {Icon} from 'components';
|
||||||
|
import {Colors, FONTS} from 'global-styles';
|
||||||
|
import {RFValue} from 'react-native-responsive-fontsize';
|
||||||
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
|
const Note = props => {
|
||||||
|
const {message} = props;
|
||||||
|
return (
|
||||||
|
<View style={styles.container}>
|
||||||
|
<Icon name="info" type="Feather" style={styles.icon} />
|
||||||
|
<View style={styles.messageSection}>
|
||||||
|
<Text style={styles.message}>{message}</Text>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
backgroundColor: Colors.BLUE,
|
||||||
|
paddingVertical: width * 0.03,
|
||||||
|
paddingHorizontal: width * 0.04,
|
||||||
|
borderRadius: width * 0.02,
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'flex-start',
|
||||||
|
minHeight: width * 0.17,
|
||||||
|
},
|
||||||
|
messageSection: {
|
||||||
|
paddingLeft: width * 0.02,
|
||||||
|
marginTop: -width * 0.004,
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(11.5),
|
||||||
|
color: Colors.WHITE,
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
fontSize: RFValue(14),
|
||||||
|
color: Colors.WHITE,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default Note;
|
@ -7,6 +7,7 @@ import ProductRegular from './Product/ProductRegular';
|
|||||||
import Button from './Button';
|
import Button from './Button';
|
||||||
import Header from './Header';
|
import Header from './Header';
|
||||||
import Input from './Input';
|
import Input from './Input';
|
||||||
|
import Note from './Note';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Container,
|
Container,
|
||||||
@ -18,4 +19,5 @@ export {
|
|||||||
Button,
|
Button,
|
||||||
Header,
|
Header,
|
||||||
Input,
|
Input,
|
||||||
|
Note,
|
||||||
};
|
};
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
/* eslint-disable prettier/prettier */
|
||||||
export default {
|
export default {
|
||||||
login: 'Login',
|
login: 'Login',
|
||||||
register: 'Register',
|
register: 'Register',
|
||||||
@ -10,4 +11,35 @@ export default {
|
|||||||
phone_issue: 'Problem Phone Number?',
|
phone_issue: 'Problem Phone Number?',
|
||||||
or_text: 'Or',
|
or_text: 'Or',
|
||||||
welcome_text: 'Welcome Again!',
|
welcome_text: 'Welcome Again!',
|
||||||
|
register_merchant_title: 'Registration is free of charge.',
|
||||||
|
register_merchant_subtitle: 'Enter the business owner`s information to start joining.',
|
||||||
|
partner_with_us_text: 'Partner with us',
|
||||||
|
full_name_of_business_owner_text: 'Full name of business owner',
|
||||||
|
full_name_of_business_owner_note: 'Fill in according to the name on the identity card.',
|
||||||
|
phone_number_business_owner_text: 'Business owner`s telephone number',
|
||||||
|
phone_number_business_owner_note: 'Please make sure the number listed is an active phone number and registered on WhatsApp.',
|
||||||
|
email_business_owner_text: 'Business owner e-mail',
|
||||||
|
email_business_owner_note: 'Please fill in with an active and correct email address.',
|
||||||
|
join_as_a_partner_text: 'Join as a partner',
|
||||||
|
merchant_registration_title: 'Merchant registration',
|
||||||
|
complete_your_business_data_text: 'Complete your business data.',
|
||||||
|
business_summary_title: 'Business Summary',
|
||||||
|
business_name_text: 'Business name',
|
||||||
|
business_name_note: 'Fill with [Restaurant/Brand Name], [Zone/Street Name].',
|
||||||
|
business_category_text: 'Business category',
|
||||||
|
average_daily_sales: 'Average daily sales',
|
||||||
|
average_monthly_sales: 'Average monthly sales',
|
||||||
|
outlet_summary_title: 'Outlet summary',
|
||||||
|
select_outlet_location_text: 'Select outlet location',
|
||||||
|
outlet_full_address_text: 'Outlet full address',
|
||||||
|
outlet_full_address_note: 'Please fill out the address completely by including your name Roads, sub-districts, districts, regencies/cities',
|
||||||
|
province_text: 'Province',
|
||||||
|
district_text: 'Districts',
|
||||||
|
postal_code_text: 'Postal code',
|
||||||
|
outlet_image_text: 'Outlet image',
|
||||||
|
outlet_image_note: 'Click to take a picture',
|
||||||
|
bank_account_information_title: 'Bank Account Information',
|
||||||
|
account_holder_name_text: 'Account holder name',
|
||||||
|
bank_name_text: 'Bank name',
|
||||||
|
account_number_text: 'Account number',
|
||||||
};
|
};
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
/* eslint-disable prettier/prettier */
|
||||||
export default {
|
export default {
|
||||||
login: 'Masuk',
|
login: 'Masuk',
|
||||||
register: 'Daftar',
|
register: 'Daftar',
|
||||||
@ -10,4 +11,35 @@ export default {
|
|||||||
phone_issue: 'No.Telepon Bermasalah?',
|
phone_issue: 'No.Telepon Bermasalah?',
|
||||||
or_text: 'Atau',
|
or_text: 'Atau',
|
||||||
welcome_text: 'Selamat Datang!',
|
welcome_text: 'Selamat Datang!',
|
||||||
|
register_merchant_title: 'Pendaftaran tidak dipungut biaya.',
|
||||||
|
register_merchant_subtitle: 'Masukkan informasi pemilik usaha untuk memulai bergabung.',
|
||||||
|
partner_with_us_text: 'Bermitra dengan kami',
|
||||||
|
full_name_of_business_owner_text: 'Nama lengkap pemilik usaha',
|
||||||
|
full_name_of_business_owner_note: 'Isi sesuai dengan nama pada kartu identitas.',
|
||||||
|
phone_number_business_owner_text: 'No.Telepon pemilik usaha',
|
||||||
|
phone_number_business_owner_note: 'Mohon pastikan nomor yang tertera adalah nomor telepon aktif dan terdaftar di WhatsApp.',
|
||||||
|
email_business_owner_text: 'Email pemilik usaha',
|
||||||
|
email_business_owner_note: 'Harap isi dengan alamat email yang aktif dan benar.',
|
||||||
|
join_as_a_partner_text: 'Gabung sebagai mitra',
|
||||||
|
merchant_registration_title: 'Pendaftaran merchant',
|
||||||
|
complete_your_business_data_text: 'Lengkapi data usaha anda.',
|
||||||
|
business_summary_title: 'Informasi Usaha',
|
||||||
|
business_name_text: 'Nama usaha',
|
||||||
|
business_name_note: 'Isi dengan [Nama Restoran/Merek], [Nama Zona/Jalan].',
|
||||||
|
business_category_text: 'Kategori usaha',
|
||||||
|
average_daily_sales: 'Pendapatan (Rp/Hari)',
|
||||||
|
average_monthly_sales: 'Pendapatan rata-rata (Rp/Tahun)',
|
||||||
|
outlet_summary_title: 'Informasi outlet',
|
||||||
|
select_outlet_location_text: 'Pilih lokasi lokasi outlet',
|
||||||
|
outlet_full_address_text: 'Alamat lengkap outlet',
|
||||||
|
outlet_full_address_note: 'Alamat harap diisi lengkap dengan mencantumkan nama Jalan, Kelurahan, Kecamatan, Kabupaten/Kota',
|
||||||
|
province_text: 'Provinsi',
|
||||||
|
district_text: 'Kabupaten',
|
||||||
|
postal_code_text: 'Kode POS',
|
||||||
|
outlet_image_text: 'Foto outlet',
|
||||||
|
outlet_image_note: 'Klik untuk mengambil gambar',
|
||||||
|
bank_account_information_title: 'Informasi Rekening Bank',
|
||||||
|
account_holder_name_text: 'Nama pemilik rekening',
|
||||||
|
bank_name_text: 'Nama bank',
|
||||||
|
account_number_text: 'No.Rekening',
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
|
/* eslint-disable prettier/prettier */
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {createNativeStackNavigator} from '@react-navigation/native-stack';
|
import {createNativeStackNavigator} from '@react-navigation/native-stack';
|
||||||
import {Login, Register} from 'scenes';
|
import {
|
||||||
|
Login,
|
||||||
|
Register,
|
||||||
|
BusinessProfileRegistration,
|
||||||
|
BusinessSummary,
|
||||||
|
OutletSummary,
|
||||||
|
BankAccount,
|
||||||
|
} from 'scenes';
|
||||||
|
|
||||||
const AuthStack = createNativeStackNavigator();
|
const AuthStack = createNativeStackNavigator();
|
||||||
|
|
||||||
@ -9,6 +17,10 @@ const AuthStackScreen = () => {
|
|||||||
<AuthStack.Navigator screenOptions={{headerShown: false}}>
|
<AuthStack.Navigator screenOptions={{headerShown: false}}>
|
||||||
<AuthStack.Screen name="Login" component={Login} />
|
<AuthStack.Screen name="Login" component={Login} />
|
||||||
<AuthStack.Screen name="Register" component={Register} />
|
<AuthStack.Screen name="Register" component={Register} />
|
||||||
|
<AuthStack.Screen name="BusinessProfileRegistration" component={BusinessProfileRegistration} />
|
||||||
|
<AuthStack.Screen name="BusinessSummary" component={BusinessSummary} />
|
||||||
|
<AuthStack.Screen name="OutletSummary" component={OutletSummary} />
|
||||||
|
<AuthStack.Screen name="BankAccount" component={BankAccount} />
|
||||||
</AuthStack.Navigator>
|
</AuthStack.Navigator>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
import React, {useState} from 'react';
|
||||||
|
import {View, ScrollView, TextInput} from 'react-native';
|
||||||
|
import {Container, Header, Note, Button, Input} from 'components';
|
||||||
|
import {Colors} from 'global-styles';
|
||||||
|
import {useTranslation} from 'react-i18next';
|
||||||
|
import styles from './styles';
|
||||||
|
|
||||||
|
const BANK = [
|
||||||
|
{label: 'Mandiri', value: 1},
|
||||||
|
{label: 'Bank Central Asia', value: 2},
|
||||||
|
{label: 'Bank Negara Indonesia (BNI)', value: 3},
|
||||||
|
];
|
||||||
|
|
||||||
|
const BankAccount = ({navigation}) => {
|
||||||
|
const [categorySelected, setCategorySelected] = useState(null);
|
||||||
|
const {t} = useTranslation();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Container backgroundColor={Colors.WHITE}>
|
||||||
|
<Header
|
||||||
|
navigation={navigation}
|
||||||
|
smTitle={t('bank_account_information_title')}
|
||||||
|
/>
|
||||||
|
<View style={styles.container}>
|
||||||
|
<ScrollView>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input type="text" required label={t('account_holder_name_text')} />
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="select"
|
||||||
|
required
|
||||||
|
label={t('bank_name_text')}
|
||||||
|
data={BANK}
|
||||||
|
value={categorySelected}
|
||||||
|
onChangeValue={val => setCategorySelected(val)}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
keyboardType="decimal-pad"
|
||||||
|
required
|
||||||
|
label={t('account_number_text')}
|
||||||
|
/>
|
||||||
|
</ScrollView>
|
||||||
|
<Button title="Simpan" onPress={() => navigation.goBack()} />
|
||||||
|
</View>
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BankAccount;
|
@ -0,0 +1,18 @@
|
|||||||
|
import {StyleSheet, Dimensions, Platform} from 'react-native';
|
||||||
|
import {RFValue} from 'react-native-responsive-fontsize';
|
||||||
|
import {Colors, FONTS} from 'global-styles';
|
||||||
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
|
export default StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
paddingHorizontal: width * 0.05,
|
||||||
|
},
|
||||||
|
infoSection: {
|
||||||
|
marginTop: width * 0.03,
|
||||||
|
marginBottom: width * 0.04,
|
||||||
|
},
|
||||||
|
spacing: {
|
||||||
|
marginVertical: width * 0.02,
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,79 @@
|
|||||||
|
import React, {useState} from 'react';
|
||||||
|
import {View, ScrollView, TextInput} from 'react-native';
|
||||||
|
import {Container, Header, Note, Button, Input} from 'components';
|
||||||
|
import {Colors} from 'global-styles';
|
||||||
|
import {useTranslation} from 'react-i18next';
|
||||||
|
import styles from './styles';
|
||||||
|
|
||||||
|
const BUSINESS_CATEGORY = [
|
||||||
|
{label: 'Makanan dan Minuman', value: 1},
|
||||||
|
{label: 'Kuliner Kue Tradisional', value: 2},
|
||||||
|
{label: 'Gorengan', value: 3},
|
||||||
|
{label: 'Street Food', value: 4},
|
||||||
|
{label: 'Aneka Keripik', value: 5},
|
||||||
|
{label: 'Minuman Dingin Kekinian', value: 6},
|
||||||
|
];
|
||||||
|
|
||||||
|
const BusinessSummary = ({navigation}) => {
|
||||||
|
const [categorySelected, setCategorySelected] = useState(null);
|
||||||
|
const [currency, setCurrency] = useState({
|
||||||
|
average_daily: null,
|
||||||
|
average_monthly: null,
|
||||||
|
});
|
||||||
|
const {t} = useTranslation();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Container backgroundColor={Colors.WHITE}>
|
||||||
|
<Header navigation={navigation} smTitle={t('business_summary_title')} />
|
||||||
|
<View style={styles.container}>
|
||||||
|
<ScrollView>
|
||||||
|
<View style={styles.infoSection}>
|
||||||
|
<Note message="Mohon masukkan informasi yang benar agar memudahkan saat verifikasi." />
|
||||||
|
</View>
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
required
|
||||||
|
placeholder="Cth: Toko Kue ABC, Pasaraya Blok M."
|
||||||
|
label={t('business_name_text')}
|
||||||
|
note={t('business_name_note')}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="select"
|
||||||
|
required
|
||||||
|
placeholder="Makanan dan Minuman"
|
||||||
|
label={t('business_category_text')}
|
||||||
|
data={BUSINESS_CATEGORY}
|
||||||
|
value={categorySelected}
|
||||||
|
onChangeValue={val => setCategorySelected(val)}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="currency"
|
||||||
|
required
|
||||||
|
value={currency.average_daily}
|
||||||
|
onChangeValue={val =>
|
||||||
|
setCurrency({...currency, average_daily: val})
|
||||||
|
}
|
||||||
|
placeholder="1.000.000"
|
||||||
|
label={t('average_daily_sales')}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="currency"
|
||||||
|
required
|
||||||
|
value={currency.average_monthly}
|
||||||
|
onChangeValue={val =>
|
||||||
|
setCurrency({...currency, average_monthly: val})
|
||||||
|
}
|
||||||
|
placeholder="3.000.000"
|
||||||
|
label={t('average_monthly_sales')}
|
||||||
|
/>
|
||||||
|
</ScrollView>
|
||||||
|
<Button title="Simpan" onPress={() => navigation.goBack()} />
|
||||||
|
</View>
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BusinessSummary;
|
@ -0,0 +1,18 @@
|
|||||||
|
import {StyleSheet, Dimensions, Platform} from 'react-native';
|
||||||
|
import {RFValue} from 'react-native-responsive-fontsize';
|
||||||
|
import {Colors, FONTS} from 'global-styles';
|
||||||
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
|
export default StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
paddingHorizontal: width * 0.05,
|
||||||
|
},
|
||||||
|
infoSection: {
|
||||||
|
marginTop: width * 0.03,
|
||||||
|
marginBottom: width * 0.04,
|
||||||
|
},
|
||||||
|
spacing: {
|
||||||
|
marginVertical: width * 0.02,
|
||||||
|
},
|
||||||
|
});
|
@ -0,0 +1,120 @@
|
|||||||
|
import React, {useState} from 'react';
|
||||||
|
import {View, ScrollView, Text, TouchableOpacity} from 'react-native';
|
||||||
|
import {Container, Header, Note, Button, Input, Icon} from 'components';
|
||||||
|
import {Colors} from 'global-styles';
|
||||||
|
import {useTranslation} from 'react-i18next';
|
||||||
|
import styles from './styles';
|
||||||
|
|
||||||
|
const PROVINCE = [
|
||||||
|
{label: 'DIY Yogyakarta', value: 1},
|
||||||
|
{label: 'Makassar', value: 2},
|
||||||
|
{label: 'Jakarta', value: 3},
|
||||||
|
{label: 'Bandung', value: 4},
|
||||||
|
{label: 'Surabaya', value: 5},
|
||||||
|
];
|
||||||
|
const DISTRICT = [
|
||||||
|
{label: 'DIY Yogyakarta', value: 1},
|
||||||
|
{label: 'Makassar', value: 2},
|
||||||
|
{label: 'Jakarta', value: 3},
|
||||||
|
{label: 'Bandung', value: 4},
|
||||||
|
{label: 'Surabaya', value: 5},
|
||||||
|
];
|
||||||
|
|
||||||
|
const OutletSummary = ({navigation}) => {
|
||||||
|
const [isSamePhone, setIsSamePhone] = useState(false);
|
||||||
|
const [phoneNumber, setPhoneNumber] = useState('');
|
||||||
|
const {t} = useTranslation();
|
||||||
|
|
||||||
|
const handleSelectBoxPhoneNumber = () => {
|
||||||
|
setIsSamePhone(!isSamePhone);
|
||||||
|
setPhoneNumber(isSamePhone ? '' : '089674462657');
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<Container backgroundColor={Colors.WHITE}>
|
||||||
|
<Header navigation={navigation} smTitle={t('outlet_summary_title')} />
|
||||||
|
<View style={styles.container}>
|
||||||
|
<ScrollView
|
||||||
|
showsVerticalScrollIndicator={false}
|
||||||
|
contentContainerStyle={styles.scrollview}>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="phone"
|
||||||
|
required
|
||||||
|
editable={!isSamePhone}
|
||||||
|
value={phoneNumber}
|
||||||
|
placeholder="08x xxx xxx"
|
||||||
|
label={t('phone_input')}
|
||||||
|
/>
|
||||||
|
<View style={styles.checkboxSection}>
|
||||||
|
<TouchableOpacity
|
||||||
|
onPress={() => handleSelectBoxPhoneNumber()}
|
||||||
|
style={styles.checkIconSection(isSamePhone)}>
|
||||||
|
<Icon name="check" type="Feather" style={styles.checkIcon} />
|
||||||
|
</TouchableOpacity>
|
||||||
|
<Text style={styles.checkboxTitle}>Gunakan No.Telepon pemilik</Text>
|
||||||
|
</View>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="maps"
|
||||||
|
required
|
||||||
|
label={t('select_outlet_location_text')}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
required
|
||||||
|
label={t('outlet_full_address_text')}
|
||||||
|
note={t('outlet_full_address_note')}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="select"
|
||||||
|
required
|
||||||
|
data={PROVINCE}
|
||||||
|
label={t('province_text')}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="select"
|
||||||
|
required
|
||||||
|
data={DISTRICT}
|
||||||
|
label={t('district_text')}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
keyboardType="decimal-pad"
|
||||||
|
required
|
||||||
|
label={t('postal_code_text')}
|
||||||
|
/>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<View style={styles.inputImageContainer}>
|
||||||
|
<Text style={styles.inputImageLabel}>{t('outlet_image_text')}</Text>
|
||||||
|
<View style={styles.inputImageSection}>
|
||||||
|
<View style={styles.inputImageIconSection}>
|
||||||
|
<Icon
|
||||||
|
name="camera"
|
||||||
|
type="Feather"
|
||||||
|
style={styles.inputImageIcon}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
<View style={styles.inputImageInfoSection}>
|
||||||
|
<Text style={styles.inputImageInfoLabel}>
|
||||||
|
{t('outlet_image_text')}
|
||||||
|
<Text style={{color: Colors.RED}}>*</Text>
|
||||||
|
</Text>
|
||||||
|
<Text style={styles.inputImageInfoSubLabel}>
|
||||||
|
{t('outlet_image_note')}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</ScrollView>
|
||||||
|
<View style={styles.spacing} />
|
||||||
|
<Button title="Simpan" onPress={() => navigation.goBack()} />
|
||||||
|
</View>
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default OutletSummary;
|
@ -0,0 +1,86 @@
|
|||||||
|
import {StyleSheet, Dimensions, Platform} from 'react-native';
|
||||||
|
import {RFValue} from 'react-native-responsive-fontsize';
|
||||||
|
import {Colors, FONTS} from 'global-styles';
|
||||||
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
|
export default StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
paddingHorizontal: width * 0.05,
|
||||||
|
},
|
||||||
|
scrollview: {
|
||||||
|
paddingBottom: width * 0.2,
|
||||||
|
},
|
||||||
|
spacing: {
|
||||||
|
marginVertical: width * 0.02,
|
||||||
|
},
|
||||||
|
checkboxSection: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
marginBottom: width * 0.02,
|
||||||
|
},
|
||||||
|
checkIconSection: isChecked => ({
|
||||||
|
width: width * 0.05,
|
||||||
|
height: width * 0.05,
|
||||||
|
borderRadius: width,
|
||||||
|
backgroundColor: isChecked ? Colors.PRIMARY : Colors.GREY,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
marginRight: width * 0.02,
|
||||||
|
alignSelf: 'flex-start',
|
||||||
|
}),
|
||||||
|
checkIcon: {
|
||||||
|
color: Colors.WHITE,
|
||||||
|
fontSize: RFValue(13),
|
||||||
|
},
|
||||||
|
checkboxTitle: {
|
||||||
|
fontFamily: FONTS.poppins[500],
|
||||||
|
fontSize: RFValue(11),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
|
||||||
|
inputImageContainer: {},
|
||||||
|
inputImageLabel: {
|
||||||
|
fontFamily: FONTS.poppins[600],
|
||||||
|
fontSize: RFValue(11.5),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
inputImageSection: {
|
||||||
|
height: width * 0.28,
|
||||||
|
borderWidth: 1,
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
borderRadius: width * 0.02,
|
||||||
|
marginVertical: width * 0.023,
|
||||||
|
backgroundColor: Colors.WHITE,
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
inputImageIconSection: {
|
||||||
|
height: '100%',
|
||||||
|
paddingHorizontal: width * 0.12,
|
||||||
|
borderColor: Colors.LINE_STROKE,
|
||||||
|
backgroundColor: Colors.DISABLED,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
borderRightWidth: 1,
|
||||||
|
borderTopLeftRadius: width * 0.02,
|
||||||
|
borderBottomLeftRadius: width * 0.02,
|
||||||
|
},
|
||||||
|
inputImageIcon: {
|
||||||
|
fontSize: RFValue(22),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
inputImageInfoSection: {
|
||||||
|
paddingHorizontal: width * 0.04,
|
||||||
|
},
|
||||||
|
inputImageInfoLabel: {
|
||||||
|
fontFamily: FONTS.poppins[600],
|
||||||
|
fontSize: RFValue(11.5),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
inputImageInfoSubLabel: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(11),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
});
|
91
src/scenes/Register/BusinessProfileRegistration/index.js
Normal file
91
src/scenes/Register/BusinessProfileRegistration/index.js
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {View, Text, TouchableOpacity, ScrollView} from 'react-native';
|
||||||
|
import {Container, Header, Note, Icon, Button} from 'components';
|
||||||
|
import {Colors} from 'global-styles';
|
||||||
|
import {useTranslation} from 'react-i18next';
|
||||||
|
import styles from './styles';
|
||||||
|
|
||||||
|
const BUSINESS_PROFILE = [
|
||||||
|
{
|
||||||
|
name: 'Informasi usaha',
|
||||||
|
completed: true,
|
||||||
|
route: 'BusinessSummary',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Informasi outlet',
|
||||||
|
completed: false,
|
||||||
|
route: 'OutletSummary',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Informasi rekening bank',
|
||||||
|
completed: false,
|
||||||
|
route: 'BankAccount',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Jam operasional',
|
||||||
|
completed: false,
|
||||||
|
route: 'BusinessSummary',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Kategori dan Menu makanan',
|
||||||
|
completed: false,
|
||||||
|
route: 'BusinessSummary',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const BusinessProfileRegistration = ({navigation}) => {
|
||||||
|
const {t} = useTranslation();
|
||||||
|
return (
|
||||||
|
<Container backgroundColor={Colors.WHITE}>
|
||||||
|
<Header
|
||||||
|
navigation={navigation}
|
||||||
|
smTitle={t('merchant_registration_title')}
|
||||||
|
/>
|
||||||
|
<View style={styles.container}>
|
||||||
|
<ScrollView>
|
||||||
|
<View style={styles.infoSection}>
|
||||||
|
<Text style={styles.title}>
|
||||||
|
{t('complete_your_business_data_text')}
|
||||||
|
</Text>
|
||||||
|
<Note message="Anda perlu melengkapi data usaha anda, dan menyetujui syarat & ketentuan yang berlaku." />
|
||||||
|
</View>
|
||||||
|
<View style={styles.profileDataSection}>
|
||||||
|
{BUSINESS_PROFILE.map((item, index) => (
|
||||||
|
<TouchableOpacity
|
||||||
|
activeOpacity={0.7}
|
||||||
|
key={index}
|
||||||
|
onPress={() => navigation.navigate(item.route)}
|
||||||
|
style={styles.itemSection}>
|
||||||
|
<View style={styles.checkIconSection(item.completed)}>
|
||||||
|
<Icon name="check" type="Feather" style={styles.checkIcon} />
|
||||||
|
</View>
|
||||||
|
<View style={styles.itemTitleSection}>
|
||||||
|
<Text style={styles.itemTitle}>{item.name}</Text>
|
||||||
|
</View>
|
||||||
|
<Icon
|
||||||
|
name="chevron-right"
|
||||||
|
type="Feather"
|
||||||
|
style={styles.chevronRight}
|
||||||
|
/>
|
||||||
|
</TouchableOpacity>
|
||||||
|
))}
|
||||||
|
</View>
|
||||||
|
</ScrollView>
|
||||||
|
<View style={styles.noteSecureSection}>
|
||||||
|
<Icon
|
||||||
|
name="shield-checkmark"
|
||||||
|
type="Ionicons"
|
||||||
|
style={styles.shieldIcon}
|
||||||
|
/>
|
||||||
|
<Text style={styles.noteSecureText}>
|
||||||
|
Data Anda akan diverifikasi oleh NasiBox. itu akan tetap aman dan
|
||||||
|
terjamin
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
<Button title="Kirim Data" />
|
||||||
|
</View>
|
||||||
|
</Container>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BusinessProfileRegistration;
|
86
src/scenes/Register/BusinessProfileRegistration/styles.js
Normal file
86
src/scenes/Register/BusinessProfileRegistration/styles.js
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import {StyleSheet, Dimensions, Platform} from 'react-native';
|
||||||
|
import {RFValue} from 'react-native-responsive-fontsize';
|
||||||
|
import {Colors, FONTS} from 'global-styles';
|
||||||
|
const {width} = Dimensions.get('window');
|
||||||
|
|
||||||
|
export default StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
paddingHorizontal: width * 0.05,
|
||||||
|
},
|
||||||
|
infoSection: {
|
||||||
|
marginTop: width * 0.03,
|
||||||
|
marginBottom: width * 0.08,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
fontFamily: FONTS.poppins[600],
|
||||||
|
fontSize: RFValue(15),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
marginBottom: width * 0.03,
|
||||||
|
},
|
||||||
|
subTitle: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(11),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
marginTop: width * 0.01,
|
||||||
|
},
|
||||||
|
spacing: {
|
||||||
|
marginVertical: width * 0.03,
|
||||||
|
},
|
||||||
|
profileDataSection: {},
|
||||||
|
itemSection: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
marginBottom: width * 0.05,
|
||||||
|
},
|
||||||
|
checkIconSection: isChecked => ({
|
||||||
|
width: width * 0.05,
|
||||||
|
height: width * 0.05,
|
||||||
|
borderRadius: width,
|
||||||
|
backgroundColor: isChecked ? Colors.PRIMARY : Colors.GREY,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
marginRight: width * 0.04,
|
||||||
|
alignSelf: 'flex-start',
|
||||||
|
}),
|
||||||
|
checkIcon: {
|
||||||
|
color: Colors.WHITE,
|
||||||
|
fontSize: RFValue(13),
|
||||||
|
},
|
||||||
|
itemTitleSection: {
|
||||||
|
flex: 1,
|
||||||
|
width: width,
|
||||||
|
marginRight: -width * 0.05,
|
||||||
|
borderBottomWidth: 1,
|
||||||
|
borderBottomColor: Colors.LINE_STROKE,
|
||||||
|
height: width * 0.09,
|
||||||
|
},
|
||||||
|
itemTitle: {
|
||||||
|
fontFamily: FONTS.poppins[600],
|
||||||
|
fontSize: RFValue(12),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
},
|
||||||
|
chevronRight: {
|
||||||
|
fontSize: RFValue(16),
|
||||||
|
color: Colors.GREY,
|
||||||
|
alignSelf: 'flex-start',
|
||||||
|
},
|
||||||
|
|
||||||
|
noteSecureSection: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'flex-start',
|
||||||
|
marginBottom: width * 0.04,
|
||||||
|
},
|
||||||
|
shieldIcon: {
|
||||||
|
fontSize: RFValue(13),
|
||||||
|
color: Colors.PRIMARY,
|
||||||
|
marginRight: width * 0.02,
|
||||||
|
},
|
||||||
|
noteSecureText: {
|
||||||
|
fontFamily: FONTS.poppins[400],
|
||||||
|
fontSize: RFValue(11),
|
||||||
|
color: Colors.TEXT,
|
||||||
|
marginTop: -width * 0.002,
|
||||||
|
},
|
||||||
|
buttonSection: {},
|
||||||
|
});
|
@ -3,38 +3,42 @@ import {View, Text, ScrollView} from 'react-native';
|
|||||||
import {Container, Header, Input, Button} from 'components';
|
import {Container, Header, Input, Button} from 'components';
|
||||||
import {Colors} from 'global-styles';
|
import {Colors} from 'global-styles';
|
||||||
import styles from './styles';
|
import styles from './styles';
|
||||||
|
import {useTranslation} from 'react-i18next';
|
||||||
const Register = ({navigation}) => {
|
const Register = ({navigation}) => {
|
||||||
|
const {t} = useTranslation();
|
||||||
return (
|
return (
|
||||||
<Container backgroundColor={Colors.WHITE}>
|
<Container backgroundColor={Colors.WHITE}>
|
||||||
<Header navigation={navigation} smTitle={'Bermitra dengan kami'} />
|
<Header navigation={navigation} smTitle={t('partner_with_us_text')} />
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.infoSection}>
|
<View style={styles.infoSection}>
|
||||||
<Text style={styles.title}>Pendaftaran tidak dipungut biaya.</Text>
|
<Text style={styles.title}>{t('register_merchant_title')}</Text>
|
||||||
<Text style={styles.subTitle}>
|
<Text style={styles.subTitle}>
|
||||||
Masukkan informasi pemilik usaha untuk memulai bergabung.
|
{t('register_merchant_subtitle')}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
type="text"
|
||||||
label="Nama lengkap pemilik usaha"
|
label={t('full_name_of_business_owner_text')}
|
||||||
note="Isi sesuai dengan nama pada kartu identitas."
|
note={t('full_name_of_business_owner_note')}
|
||||||
/>
|
/>
|
||||||
<View style={styles.spacing} />
|
<View style={styles.spacing} />
|
||||||
<Input
|
<Input
|
||||||
type="phone"
|
type="phone"
|
||||||
label="No.Telepon pemilik usaha"
|
label={t('phone_number_business_owner_text')}
|
||||||
note="Mohon pastikan nomor yang tertera adalah nomor telepon aktif dan terdaftar di WhatsApp."
|
note={t('phone_number_business_owner_note')}
|
||||||
/>
|
/>
|
||||||
<View style={styles.spacing} />
|
<View style={styles.spacing} />
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
type="text"
|
||||||
label="Email pemilik usaha"
|
label={t('email_business_owner_text')}
|
||||||
note="Harap isi dengan alamat email yang aktif dan benar."
|
note={t('email_business_owner_note')}
|
||||||
/>
|
/>
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
<Button title="Gabung sebagai mitra" onPress={() => alert('SIP')} />
|
<Button
|
||||||
|
title={t('join_as_a_partner_text')}
|
||||||
|
onPress={() => navigation.navigate('BusinessProfileRegistration')}
|
||||||
|
/>
|
||||||
</View>
|
</View>
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,15 @@
|
|||||||
import Login from './Login';
|
import Login from './Login';
|
||||||
import Register from './Register';
|
import Register from './Register';
|
||||||
|
import BusinessProfileRegistration from './Register/BusinessProfileRegistration';
|
||||||
|
import BusinessSummary from './Register/BusinessProfileRegistration/BusinessSummary';
|
||||||
|
import OutletSummary from './Register/BusinessProfileRegistration/OutletSummary';
|
||||||
|
import BankAccount from './Register/BusinessProfileRegistration/BankAccount';
|
||||||
|
|
||||||
export {Login, Register};
|
export {
|
||||||
|
Login,
|
||||||
|
Register,
|
||||||
|
BusinessProfileRegistration,
|
||||||
|
BusinessSummary,
|
||||||
|
OutletSummary,
|
||||||
|
BankAccount,
|
||||||
|
};
|
||||||
|
@ -12,3 +12,4 @@ export const RED = '#E42E2C';
|
|||||||
export const SHADOW = 'rgba(208, 207, 207, 0.25)';
|
export const SHADOW = 'rgba(208, 207, 207, 0.25)';
|
||||||
export const RED_SHADOW = 'rgba(253, 121, 91, 0.1)';
|
export const RED_SHADOW = 'rgba(253, 121, 91, 0.1)';
|
||||||
export const DISABLED = '#F9F9F9';
|
export const DISABLED = '#F9F9F9';
|
||||||
|
export const BLUE = '#2F89F6';
|
||||||
|
22
yarn.lock
22
yarn.lock
@ -1390,6 +1390,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
|
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
|
||||||
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
|
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
|
||||||
|
|
||||||
|
"@types/geojson@^7946.0.8":
|
||||||
|
version "7946.0.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249"
|
||||||
|
integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==
|
||||||
|
|
||||||
"@types/graceful-fs@^4.1.2":
|
"@types/graceful-fs@^4.1.2":
|
||||||
version "4.1.5"
|
version "4.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
|
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
|
||||||
@ -5755,6 +5760,16 @@ react-native-codegen@^0.70.6:
|
|||||||
jscodeshift "^0.13.1"
|
jscodeshift "^0.13.1"
|
||||||
nullthrows "^1.1.1"
|
nullthrows "^1.1.1"
|
||||||
|
|
||||||
|
react-native-currency-input@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-native-currency-input/-/react-native-currency-input-1.1.0.tgz#2f86e6ad4d47518df0c5ade06f5e0f5afa0aeb11"
|
||||||
|
integrity sha512-TNyqQ98pB6WdLJiEz5NIZWUT1zpzJNBUCGS+5PGO0QCmbssSA/n4zVC7+msX5Z0Wl+iwhpTPsCckDJeRIlxwKg==
|
||||||
|
|
||||||
|
react-native-dropdown-picker@^5.4.3:
|
||||||
|
version "5.4.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-native-dropdown-picker/-/react-native-dropdown-picker-5.4.3.tgz#adc16cfa52e8f3481220b377dd780040c3debf96"
|
||||||
|
integrity sha512-cwZzFcpyx/Stw3lZH2bvXxcsgwkR8c3rRZtOnlvyuN5pAplzA/9AiAxYlnJuspP9VvyU1XMePKOpgcHce6iyhA==
|
||||||
|
|
||||||
react-native-gradle-plugin@^0.70.3:
|
react-native-gradle-plugin@^0.70.3:
|
||||||
version "0.70.3"
|
version "0.70.3"
|
||||||
resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz#cbcf0619cbfbddaa9128701aa2d7b4145f9c4fc8"
|
resolved "https://registry.yarnpkg.com/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz#cbcf0619cbfbddaa9128701aa2d7b4145f9c4fc8"
|
||||||
@ -5770,6 +5785,13 @@ react-native-localize@^2.2.4:
|
|||||||
resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-2.2.4.tgz#3bc46ade48499ab9df61bf17a9b66633a5ba9bb9"
|
resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-2.2.4.tgz#3bc46ade48499ab9df61bf17a9b66633a5ba9bb9"
|
||||||
integrity sha512-gVmbyAEQQnBQ8vKlAQchFfIISeId3qT6Lc7LHmKF39nsYWX9KN4PHuG6Hk+7gduMI6IHKeZGKcLsOdh6wvN6cg==
|
integrity sha512-gVmbyAEQQnBQ8vKlAQchFfIISeId3qT6Lc7LHmKF39nsYWX9KN4PHuG6Hk+7gduMI6IHKeZGKcLsOdh6wvN6cg==
|
||||||
|
|
||||||
|
react-native-maps@^1.3.2:
|
||||||
|
version "1.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-native-maps/-/react-native-maps-1.3.2.tgz#8e30bfd9d934de02827253e5cde6c08a04f6356c"
|
||||||
|
integrity sha512-NB7HGRZOgxxXCWzrhIVucx/bsrEWANvk3DLci1ov4P9MQnEVQYQCCkTxsnaEvO191GeBOCRDyYn6jckqbfMtmg==
|
||||||
|
dependencies:
|
||||||
|
"@types/geojson" "^7946.0.8"
|
||||||
|
|
||||||
react-native-modal@^13.0.1:
|
react-native-modal@^13.0.1:
|
||||||
version "13.0.1"
|
version "13.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-13.0.1.tgz#691f1e646abb96fa82c1788bf18a16d585da37cd"
|
resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-13.0.1.tgz#691f1e646abb96fa82c1788bf18a16d585da37cd"
|
||||||
|
Loading…
Reference in New Issue
Block a user