Compare commits
10 Commits
ac6dae7d17
...
main
Author | SHA1 | Date | |
---|---|---|---|
6fe3884879 | |||
e399376c0a | |||
0cd9e1500b | |||
91e93d4c10 | |||
e2b74911f2 | |||
711bd2f852 | |||
e8c61edeb0 | |||
081a637463 | |||
a077d93029 | |||
06b8f2ab80 |
2
App.tsx
@ -1,6 +1,8 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import RootStack from './src/navigation/RootStack';
|
import RootStack from './src/navigation/RootStack';
|
||||||
import { NavigationContainer } from '@react-navigation/native';
|
import { NavigationContainer } from '@react-navigation/native';
|
||||||
|
import AsyncStorage from 'react-native';
|
||||||
|
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
return (
|
return (
|
||||||
|
1335
android/app/src/main/assets/index.android.bundle
Normal file
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 132 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 208 B |
After Width: | Height: | Size: 186 B |
After Width: | Height: | Size: 489 B |
After Width: | Height: | Size: 100 B |
After Width: | Height: | Size: 653 B |
After Width: | Height: | Size: 220 B |
After Width: | Height: | Size: 141 B |
After Width: | Height: | Size: 258 B |
After Width: | Height: | Size: 134 B |
After Width: | Height: | Size: 334 B |
After Width: | Height: | Size: 201 B |
After Width: | Height: | Size: 483 B |
After Width: | Height: | Size: 167 B |
After Width: | Height: | Size: 502 B |
After Width: | Height: | Size: 266 B |
After Width: | Height: | Size: 728 B |
After Width: | Height: | Size: 207 B |
After Width: | Height: | Size: 645 B |
After Width: | Height: | Size: 332 B |
After Width: | Height: | Size: 928 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 9.1 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 22 KiB |
@ -1,4 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<color name="ic_launcher_background">#2B3A51</color>
|
<color name="ic_launcher_background">#FFFFFF</color>
|
||||||
</resources>
|
</resources>
|
BIN
assets/images/welcome-image.jpg
Normal file
After Width: | Height: | Size: 167 KiB |
1980
ios/Podfile.lock
Normal file
@ -7,178 +7,168 @@
|
|||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
018030A229AC497CBD97C525 /* NotoSans_SemiCondensed-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F5B97FA0433741E1A9BC333B /* NotoSans_SemiCondensed-Medium.ttf */; };
|
||||||
|
07F22F8FEFF241F989D8ECD1 /* NotoSans_ExtraCondensed-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2D5B8FBD021A4E7A8BC24C19 /* NotoSans_ExtraCondensed-BoldItalic.ttf */; };
|
||||||
|
08C81580077940A59B1FA1CC /* NotoSans_ExtraCondensed-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 350B2043EDCF4BAB8870796E /* NotoSans_ExtraCondensed-Light.ttf */; };
|
||||||
0C80B921A6F3F58F76C31292 /* libPods-mpaspor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-mpaspor.a */; };
|
0C80B921A6F3F58F76C31292 /* libPods-mpaspor.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-mpaspor.a */; };
|
||||||
|
10A6F9D7A4B443FE8CEB61A0 /* NotoSans_ExtraCondensed-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 95EB6F2F20F24550A3DE73F2 /* NotoSans_ExtraCondensed-SemiBoldItalic.ttf */; };
|
||||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||||
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
|
174B2A74F408417EB9D451D5 /* NotoSans_SemiCondensed-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C182B410FF2843ECA3C54FA5 /* NotoSans_SemiCondensed-BoldItalic.ttf */; };
|
||||||
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
|
|
||||||
C1234C1921EA4308B8BE3F42 /* NotoSans-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3E04D39223E34B76B5924912 /* NotoSans-Black.ttf */; };
|
|
||||||
D2EB77056AF547E49E63334F /* NotoSans-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 387647589F2E4609A2AAE3D2 /* NotoSans-BlackItalic.ttf */; };
|
|
||||||
AC26F11BBF524E72AF26FEA2 /* NotoSans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C114C3F71AA04B778369EA89 /* NotoSans-Bold.ttf */; };
|
|
||||||
195ADAD5821241119A6BA3CC /* NotoSans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9675AF4AE623457DA439469F /* NotoSans-BoldItalic.ttf */; };
|
|
||||||
3ACCF5CB2A4D48719A1D5FF0 /* NotoSans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 540C63F381574B83AD80E694 /* NotoSans-ExtraBold.ttf */; };
|
|
||||||
569E5CC1E05D4B7185858CF1 /* NotoSans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5B9C25EB27EB426CA307D054 /* NotoSans-ExtraBoldItalic.ttf */; };
|
|
||||||
EF09B3110E42468A8B63690B /* NotoSans-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6D0E0E916D894072B379D1A6 /* NotoSans-ExtraLight.ttf */; };
|
|
||||||
81111C0421CA4D8388D13B4B /* NotoSans-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0407698A36C645E89ECEE46A /* NotoSans-ExtraLightItalic.ttf */; };
|
|
||||||
87F1361A0FE547D093AB988B /* NotoSans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 89E495E1B8B1403DBE9B3C18 /* NotoSans-Italic.ttf */; };
|
|
||||||
24766699D92E461AB4D29DF3 /* NotoSans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 981C1B1736F444ABA63EA8B3 /* NotoSans-Light.ttf */; };
|
|
||||||
C7974D91F6154C3F899A580B /* NotoSans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9810080F44BB45AF9E271B95 /* NotoSans-LightItalic.ttf */; };
|
|
||||||
B8F925FC82104E83AA4E3B55 /* NotoSans-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BC657944C69C450F8CBDCE65 /* NotoSans-Medium.ttf */; };
|
|
||||||
35545FC9A957491FB97BEB0B /* NotoSans-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 306D5A08D36A4FD3A2D60AA6 /* NotoSans-MediumItalic.ttf */; };
|
|
||||||
DD09EA0B30064D56B063EEA6 /* NotoSans-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FB70298C3DDE435593072128 /* NotoSans-Regular.ttf */; };
|
|
||||||
ABC64905536D495199653037 /* NotoSans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B4805B39BE79459DBF47199C /* NotoSans-SemiBold.ttf */; };
|
|
||||||
FED256B6C7D1407381944829 /* NotoSans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9A4F5DBEC4C043D399F4AD09 /* NotoSans-SemiBoldItalic.ttf */; };
|
|
||||||
18E2698ADBD9484FBAE1B3D4 /* NotoSans-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2BA758DFF5F34ACABB6EE75B /* NotoSans-Thin.ttf */; };
|
18E2698ADBD9484FBAE1B3D4 /* NotoSans-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2BA758DFF5F34ACABB6EE75B /* NotoSans-Thin.ttf */; };
|
||||||
F2A33A19277E48F1AF8981DC /* NotoSans-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2B68B3AD2C4C407C91F69A1C /* NotoSans-ThinItalic.ttf */; };
|
195ADAD5821241119A6BA3CC /* NotoSans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9675AF4AE623457DA439469F /* NotoSans-BoldItalic.ttf */; };
|
||||||
B6F3D97F2CCE4E938805A5E9 /* NotoSans_Condensed-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 51B2BAA003544315B3E4617C /* NotoSans_Condensed-Black.ttf */; };
|
1B29E81E37A943E1A7E055B7 /* NotoSans_SemiCondensed-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B150E7DEFD7F476BA0B11D46 /* NotoSans_SemiCondensed-Black.ttf */; };
|
||||||
AF410E50367D439FBDED5409 /* NotoSans_Condensed-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 869814428B704007B4D0B145 /* NotoSans_Condensed-BlackItalic.ttf */; };
|
20444ECF33404AB4A5ABFB7E /* NotoSans_SemiCondensed-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 89513AF6267E430A82A839F4 /* NotoSans_SemiCondensed-Light.ttf */; };
|
||||||
91E54F1E53FE4B6993CF5B4C /* NotoSans_Condensed-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7EF8E3D480F4077B28318E6 /* NotoSans_Condensed-Bold.ttf */; };
|
24766699D92E461AB4D29DF3 /* NotoSans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 981C1B1736F444ABA63EA8B3 /* NotoSans-Light.ttf */; };
|
||||||
E534417E9EFF45A6BAE66C69 /* NotoSans_Condensed-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0070E7DA12E345B9BFDCAEAD /* NotoSans_Condensed-BoldItalic.ttf */; };
|
|
||||||
777C2162E0F44374ABC7321E /* NotoSans_Condensed-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5C1274B686464220BFCBE2D9 /* NotoSans_Condensed-ExtraBold.ttf */; };
|
|
||||||
31B29DD7B5524D23B348C975 /* NotoSans_Condensed-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B1BAB27ADCCE4EAFB01AF108 /* NotoSans_Condensed-ExtraBoldItalic.ttf */; };
|
|
||||||
27F10B1EFED04299927B40A1 /* NotoSans_Condensed-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0C6D6EFE50AF468980A2BA9E /* NotoSans_Condensed-ExtraLight.ttf */; };
|
27F10B1EFED04299927B40A1 /* NotoSans_Condensed-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0C6D6EFE50AF468980A2BA9E /* NotoSans_Condensed-ExtraLight.ttf */; };
|
||||||
FEB5C32AB0AB4124AF18BB8A /* NotoSans_Condensed-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A7D6B4AB8DB546B58352462D /* NotoSans_Condensed-ExtraLightItalic.ttf */; };
|
2C17EEBBB81A453391C37368 /* NotoSans_ExtraCondensed-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7945520A406472284207CF7 /* NotoSans_ExtraCondensed-ExtraLight.ttf */; };
|
||||||
|
31B29DD7B5524D23B348C975 /* NotoSans_Condensed-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B1BAB27ADCCE4EAFB01AF108 /* NotoSans_Condensed-ExtraBoldItalic.ttf */; };
|
||||||
|
321DA40E7EE24B7690339BF7 /* NotoSans_Condensed-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4019D9A927784261B56E8BE1 /* NotoSans_Condensed-MediumItalic.ttf */; };
|
||||||
|
341576DE6218441AB77584B5 /* NotoSans_SemiCondensed-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C82157C4886244A2A6D7728E /* NotoSans_SemiCondensed-Thin.ttf */; };
|
||||||
|
35545FC9A957491FB97BEB0B /* NotoSans-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 306D5A08D36A4FD3A2D60AA6 /* NotoSans-MediumItalic.ttf */; };
|
||||||
|
3ACCF5CB2A4D48719A1D5FF0 /* NotoSans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 540C63F381574B83AD80E694 /* NotoSans-ExtraBold.ttf */; };
|
||||||
|
4422DAB346B24BBBABD402A3 /* NotoSans_ExtraCondensed-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DD739AD811BA4F2CA5AECED9 /* NotoSans_ExtraCondensed-Regular.ttf */; };
|
||||||
|
4872248669114150ACF0D112 /* NotoSans_SemiCondensed-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 124F2DF781294D1DBDE6C49F /* NotoSans_SemiCondensed-ExtraLight.ttf */; };
|
||||||
|
4AED30DF2C1C480A87D87826 /* NotoSans_SemiCondensed-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 20DE3E556C0744C381959A7F /* NotoSans_SemiCondensed-Bold.ttf */; };
|
||||||
|
4CA356E2E8AC40DB9632B414 /* NotoSans_SemiCondensed-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8F6B29F0B5B0422F915B82E3 /* NotoSans_SemiCondensed-ExtraBold.ttf */; };
|
||||||
|
4E12A87BCBF045F38321D834 /* NotoSans_ExtraCondensed-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AEAD78DC746948D4991E047C /* NotoSans_ExtraCondensed-ExtraLightItalic.ttf */; };
|
||||||
50291E8241334322BAD0EC3E /* NotoSans_Condensed-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1C5321370EBB45AE81411009 /* NotoSans_Condensed-Italic.ttf */; };
|
50291E8241334322BAD0EC3E /* NotoSans_Condensed-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1C5321370EBB45AE81411009 /* NotoSans_Condensed-Italic.ttf */; };
|
||||||
|
524060ADA38A436DA2CCC421 /* NotoSans_ExtraCondensed-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1E312E62C57E4916B811AE4A /* NotoSans_ExtraCondensed-LightItalic.ttf */; };
|
||||||
|
550678CC552C454BB78A27D4 /* NotoSans_SemiCondensed-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7C676367EB7B413C89B4A665 /* NotoSans_SemiCondensed-LightItalic.ttf */; };
|
||||||
|
569E5CC1E05D4B7185858CF1 /* NotoSans-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5B9C25EB27EB426CA307D054 /* NotoSans-ExtraBoldItalic.ttf */; };
|
||||||
|
58D77207B0C04ECB9B04DF2D /* NotoSans_ExtraCondensed-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FDC32FD5C6CE466E8B6950DB /* NotoSans_ExtraCondensed-ExtraBoldItalic.ttf */; };
|
||||||
|
59EF9D0696F24AF193023C6E /* NotoSans_SemiCondensed-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 99C0037E4ABE4114857454EA /* NotoSans_SemiCondensed-MediumItalic.ttf */; };
|
||||||
|
60C49B5715A64D76A83B175D /* NotoSans_Condensed-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 76FE0CF9610448C083902876 /* NotoSans_Condensed-Thin.ttf */; };
|
||||||
|
6B060C019EAE4BEDB54B3615 /* NotoSans_SemiCondensed-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0E72669D8E5A4AD2B67FD8B5 /* NotoSans_SemiCondensed-ExtraBoldItalic.ttf */; };
|
||||||
|
72FE3574D3744CDEAFE87EDF /* NotoSans_SemiCondensed-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5EE0CB7DD07B4E1C9151BE2B /* NotoSans_SemiCondensed-BlackItalic.ttf */; };
|
||||||
|
731251CB912C456899BC4BEA /* NotoSans_ExtraCondensed-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B46C4579A7CC4F5CB68265EA /* NotoSans_ExtraCondensed-Thin.ttf */; };
|
||||||
|
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
|
||||||
|
777C2162E0F44374ABC7321E /* NotoSans_Condensed-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5C1274B686464220BFCBE2D9 /* NotoSans_Condensed-ExtraBold.ttf */; };
|
||||||
|
78DEF4BA70F3419A907008A4 /* NotoSans_ExtraCondensed-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6A5C5E1ACFF34E758EB6D1F1 /* NotoSans_ExtraCondensed-SemiBold.ttf */; };
|
||||||
|
7A6D739510644C4AAAF7507C /* NotoSans_SemiCondensed-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D2C29BD9DEE14930930E3881 /* NotoSans_SemiCondensed-ExtraLightItalic.ttf */; };
|
||||||
|
81111C0421CA4D8388D13B4B /* NotoSans-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0407698A36C645E89ECEE46A /* NotoSans-ExtraLightItalic.ttf */; };
|
||||||
|
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
|
||||||
|
83FA8B6B1E994367A1B4A9D4 /* NotoSans_SemiCondensed-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 457ABC5BB7C0482F8368D513 /* NotoSans_SemiCondensed-Italic.ttf */; };
|
||||||
|
87F1361A0FE547D093AB988B /* NotoSans-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 89E495E1B8B1403DBE9B3C18 /* NotoSans-Italic.ttf */; };
|
||||||
89C7D639AA5F468BB1C3C886 /* NotoSans_Condensed-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2E47D868B0184559BDF5E5E9 /* NotoSans_Condensed-Light.ttf */; };
|
89C7D639AA5F468BB1C3C886 /* NotoSans_Condensed-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2E47D868B0184559BDF5E5E9 /* NotoSans_Condensed-Light.ttf */; };
|
||||||
8C3A47515132479EBB5A5343 /* NotoSans_Condensed-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 296396037F08461E99AF7AFC /* NotoSans_Condensed-LightItalic.ttf */; };
|
8C3A47515132479EBB5A5343 /* NotoSans_Condensed-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 296396037F08461E99AF7AFC /* NotoSans_Condensed-LightItalic.ttf */; };
|
||||||
D246936E6D3342DFBDE60B9D /* NotoSans_Condensed-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9E1A51AD43A340808D96C36E /* NotoSans_Condensed-Medium.ttf */; };
|
8D54BC8445F44CAD0C1809EB /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; };
|
||||||
321DA40E7EE24B7690339BF7 /* NotoSans_Condensed-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4019D9A927784261B56E8BE1 /* NotoSans_Condensed-MediumItalic.ttf */; };
|
91E54F1E53FE4B6993CF5B4C /* NotoSans_Condensed-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7EF8E3D480F4077B28318E6 /* NotoSans_Condensed-Bold.ttf */; };
|
||||||
E96DF032C63C49F29270AFE4 /* NotoSans_Condensed-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CE27CD0F1BD3480B9683B0BB /* NotoSans_Condensed-Regular.ttf */; };
|
|
||||||
B5E1D5B319704C05B9AFD373 /* NotoSans_Condensed-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5A7A06AE0711424EA2CC089F /* NotoSans_Condensed-SemiBold.ttf */; };
|
|
||||||
9AE00D4B2514445A80F4DAB1 /* NotoSans_Condensed-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 71F8BFFE6F5246219F9DC0F7 /* NotoSans_Condensed-SemiBoldItalic.ttf */; };
|
9AE00D4B2514445A80F4DAB1 /* NotoSans_Condensed-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 71F8BFFE6F5246219F9DC0F7 /* NotoSans_Condensed-SemiBoldItalic.ttf */; };
|
||||||
60C49B5715A64D76A83B175D /* NotoSans_Condensed-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 76FE0CF9610448C083902876 /* NotoSans_Condensed-Thin.ttf */; };
|
|
||||||
B2371AE358064802BEA8028D /* NotoSans_Condensed-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 41D0B635E23947059D1CF2C6 /* NotoSans_Condensed-ThinItalic.ttf */; };
|
|
||||||
BED27059F5FA4CCFB349EFB7 /* NotoSans_ExtraCondensed-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E6EEE80D4B2F47BB8FA78157 /* NotoSans_ExtraCondensed-Black.ttf */; };
|
|
||||||
E1247B8B1EC945FA8573311F /* NotoSans_ExtraCondensed-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E7FC30F8FA1C44A1BDE3461A /* NotoSans_ExtraCondensed-BlackItalic.ttf */; };
|
|
||||||
B96E2647326440D78EC92098 /* NotoSans_ExtraCondensed-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2EBFAEEF25AA42BAB9EC869D /* NotoSans_ExtraCondensed-Bold.ttf */; };
|
|
||||||
07F22F8FEFF241F989D8ECD1 /* NotoSans_ExtraCondensed-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2D5B8FBD021A4E7A8BC24C19 /* NotoSans_ExtraCondensed-BoldItalic.ttf */; };
|
|
||||||
DF724662C2C34AEDB503B552 /* NotoSans_ExtraCondensed-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A1AA61449FA4E698D9EAD0C /* NotoSans_ExtraCondensed-ExtraBold.ttf */; };
|
|
||||||
58D77207B0C04ECB9B04DF2D /* NotoSans_ExtraCondensed-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FDC32FD5C6CE466E8B6950DB /* NotoSans_ExtraCondensed-ExtraBoldItalic.ttf */; };
|
|
||||||
2C17EEBBB81A453391C37368 /* NotoSans_ExtraCondensed-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F7945520A406472284207CF7 /* NotoSans_ExtraCondensed-ExtraLight.ttf */; };
|
|
||||||
4E12A87BCBF045F38321D834 /* NotoSans_ExtraCondensed-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AEAD78DC746948D4991E047C /* NotoSans_ExtraCondensed-ExtraLightItalic.ttf */; };
|
|
||||||
AC3929E5C23C4B2C99BBBEB3 /* NotoSans_ExtraCondensed-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFA4940261534AA39B9CD270 /* NotoSans_ExtraCondensed-Italic.ttf */; };
|
|
||||||
08C81580077940A59B1FA1CC /* NotoSans_ExtraCondensed-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 350B2043EDCF4BAB8870796E /* NotoSans_ExtraCondensed-Light.ttf */; };
|
|
||||||
524060ADA38A436DA2CCC421 /* NotoSans_ExtraCondensed-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1E312E62C57E4916B811AE4A /* NotoSans_ExtraCondensed-LightItalic.ttf */; };
|
|
||||||
F61920A853A245C5937622A1 /* NotoSans_ExtraCondensed-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CC7766C9F8434BD3AE675547 /* NotoSans_ExtraCondensed-Medium.ttf */; };
|
|
||||||
A58DAD6D152C44EF83C41490 /* NotoSans_ExtraCondensed-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A7B6B69713B7467DA6395064 /* NotoSans_ExtraCondensed-MediumItalic.ttf */; };
|
A58DAD6D152C44EF83C41490 /* NotoSans_ExtraCondensed-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A7B6B69713B7467DA6395064 /* NotoSans_ExtraCondensed-MediumItalic.ttf */; };
|
||||||
4422DAB346B24BBBABD402A3 /* NotoSans_ExtraCondensed-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DD739AD811BA4F2CA5AECED9 /* NotoSans_ExtraCondensed-Regular.ttf */; };
|
|
||||||
78DEF4BA70F3419A907008A4 /* NotoSans_ExtraCondensed-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6A5C5E1ACFF34E758EB6D1F1 /* NotoSans_ExtraCondensed-SemiBold.ttf */; };
|
|
||||||
10A6F9D7A4B443FE8CEB61A0 /* NotoSans_ExtraCondensed-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 95EB6F2F20F24550A3DE73F2 /* NotoSans_ExtraCondensed-SemiBoldItalic.ttf */; };
|
|
||||||
731251CB912C456899BC4BEA /* NotoSans_ExtraCondensed-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B46C4579A7CC4F5CB68265EA /* NotoSans_ExtraCondensed-Thin.ttf */; };
|
|
||||||
F0301FCDDE874061B8878B28 /* NotoSans_ExtraCondensed-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AE17D22089D441AC89F643BD /* NotoSans_ExtraCondensed-ThinItalic.ttf */; };
|
|
||||||
1B29E81E37A943E1A7E055B7 /* NotoSans_SemiCondensed-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B150E7DEFD7F476BA0B11D46 /* NotoSans_SemiCondensed-Black.ttf */; };
|
|
||||||
72FE3574D3744CDEAFE87EDF /* NotoSans_SemiCondensed-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5EE0CB7DD07B4E1C9151BE2B /* NotoSans_SemiCondensed-BlackItalic.ttf */; };
|
|
||||||
4AED30DF2C1C480A87D87826 /* NotoSans_SemiCondensed-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 20DE3E556C0744C381959A7F /* NotoSans_SemiCondensed-Bold.ttf */; };
|
|
||||||
174B2A74F408417EB9D451D5 /* NotoSans_SemiCondensed-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C182B410FF2843ECA3C54FA5 /* NotoSans_SemiCondensed-BoldItalic.ttf */; };
|
|
||||||
4CA356E2E8AC40DB9632B414 /* NotoSans_SemiCondensed-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8F6B29F0B5B0422F915B82E3 /* NotoSans_SemiCondensed-ExtraBold.ttf */; };
|
|
||||||
6B060C019EAE4BEDB54B3615 /* NotoSans_SemiCondensed-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0E72669D8E5A4AD2B67FD8B5 /* NotoSans_SemiCondensed-ExtraBoldItalic.ttf */; };
|
|
||||||
4872248669114150ACF0D112 /* NotoSans_SemiCondensed-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 124F2DF781294D1DBDE6C49F /* NotoSans_SemiCondensed-ExtraLight.ttf */; };
|
|
||||||
7A6D739510644C4AAAF7507C /* NotoSans_SemiCondensed-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D2C29BD9DEE14930930E3881 /* NotoSans_SemiCondensed-ExtraLightItalic.ttf */; };
|
|
||||||
83FA8B6B1E994367A1B4A9D4 /* NotoSans_SemiCondensed-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 457ABC5BB7C0482F8368D513 /* NotoSans_SemiCondensed-Italic.ttf */; };
|
|
||||||
20444ECF33404AB4A5ABFB7E /* NotoSans_SemiCondensed-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 89513AF6267E430A82A839F4 /* NotoSans_SemiCondensed-Light.ttf */; };
|
|
||||||
550678CC552C454BB78A27D4 /* NotoSans_SemiCondensed-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7C676367EB7B413C89B4A665 /* NotoSans_SemiCondensed-LightItalic.ttf */; };
|
|
||||||
018030A229AC497CBD97C525 /* NotoSans_SemiCondensed-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F5B97FA0433741E1A9BC333B /* NotoSans_SemiCondensed-Medium.ttf */; };
|
|
||||||
59EF9D0696F24AF193023C6E /* NotoSans_SemiCondensed-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 99C0037E4ABE4114857454EA /* NotoSans_SemiCondensed-MediumItalic.ttf */; };
|
|
||||||
A7A3E8B9A8244157A54A86C6 /* NotoSans_SemiCondensed-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 237308FB361841F095D4BC20 /* NotoSans_SemiCondensed-Regular.ttf */; };
|
A7A3E8B9A8244157A54A86C6 /* NotoSans_SemiCondensed-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 237308FB361841F095D4BC20 /* NotoSans_SemiCondensed-Regular.ttf */; };
|
||||||
F68D51A12F644FD493CB0CAB /* NotoSans_SemiCondensed-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D5EA710115547F7AF875F2E /* NotoSans_SemiCondensed-SemiBold.ttf */; };
|
|
||||||
A8FB27B3432C4526A458D01D /* NotoSans_SemiCondensed-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4B86F13B10EA4BD99225227A /* NotoSans_SemiCondensed-SemiBoldItalic.ttf */; };
|
A8FB27B3432C4526A458D01D /* NotoSans_SemiCondensed-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4B86F13B10EA4BD99225227A /* NotoSans_SemiCondensed-SemiBoldItalic.ttf */; };
|
||||||
341576DE6218441AB77584B5 /* NotoSans_SemiCondensed-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C82157C4886244A2A6D7728E /* NotoSans_SemiCondensed-Thin.ttf */; };
|
ABC64905536D495199653037 /* NotoSans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B4805B39BE79459DBF47199C /* NotoSans-SemiBold.ttf */; };
|
||||||
|
AC26F11BBF524E72AF26FEA2 /* NotoSans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C114C3F71AA04B778369EA89 /* NotoSans-Bold.ttf */; };
|
||||||
|
AC3929E5C23C4B2C99BBBEB3 /* NotoSans_ExtraCondensed-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AFA4940261534AA39B9CD270 /* NotoSans_ExtraCondensed-Italic.ttf */; };
|
||||||
|
AF410E50367D439FBDED5409 /* NotoSans_Condensed-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 869814428B704007B4D0B145 /* NotoSans_Condensed-BlackItalic.ttf */; };
|
||||||
|
B2371AE358064802BEA8028D /* NotoSans_Condensed-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 41D0B635E23947059D1CF2C6 /* NotoSans_Condensed-ThinItalic.ttf */; };
|
||||||
|
B5E1D5B319704C05B9AFD373 /* NotoSans_Condensed-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5A7A06AE0711424EA2CC089F /* NotoSans_Condensed-SemiBold.ttf */; };
|
||||||
|
B6F3D97F2CCE4E938805A5E9 /* NotoSans_Condensed-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 51B2BAA003544315B3E4617C /* NotoSans_Condensed-Black.ttf */; };
|
||||||
|
B8F925FC82104E83AA4E3B55 /* NotoSans-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BC657944C69C450F8CBDCE65 /* NotoSans-Medium.ttf */; };
|
||||||
|
B96E2647326440D78EC92098 /* NotoSans_ExtraCondensed-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2EBFAEEF25AA42BAB9EC869D /* NotoSans_ExtraCondensed-Bold.ttf */; };
|
||||||
|
BED27059F5FA4CCFB349EFB7 /* NotoSans_ExtraCondensed-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E6EEE80D4B2F47BB8FA78157 /* NotoSans_ExtraCondensed-Black.ttf */; };
|
||||||
|
C1234C1921EA4308B8BE3F42 /* NotoSans-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3E04D39223E34B76B5924912 /* NotoSans-Black.ttf */; };
|
||||||
C1DC680E57CF4B7190F0A055 /* NotoSans_SemiCondensed-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C4CE3C41FDC54456A913D28E /* NotoSans_SemiCondensed-ThinItalic.ttf */; };
|
C1DC680E57CF4B7190F0A055 /* NotoSans_SemiCondensed-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C4CE3C41FDC54456A913D28E /* NotoSans_SemiCondensed-ThinItalic.ttf */; };
|
||||||
|
C7974D91F6154C3F899A580B /* NotoSans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9810080F44BB45AF9E271B95 /* NotoSans-LightItalic.ttf */; };
|
||||||
|
D246936E6D3342DFBDE60B9D /* NotoSans_Condensed-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9E1A51AD43A340808D96C36E /* NotoSans_Condensed-Medium.ttf */; };
|
||||||
|
D2EB77056AF547E49E63334F /* NotoSans-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 387647589F2E4609A2AAE3D2 /* NotoSans-BlackItalic.ttf */; };
|
||||||
|
DD09EA0B30064D56B063EEA6 /* NotoSans-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FB70298C3DDE435593072128 /* NotoSans-Regular.ttf */; };
|
||||||
|
DF724662C2C34AEDB503B552 /* NotoSans_ExtraCondensed-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A1AA61449FA4E698D9EAD0C /* NotoSans_ExtraCondensed-ExtraBold.ttf */; };
|
||||||
|
E1247B8B1EC945FA8573311F /* NotoSans_ExtraCondensed-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E7FC30F8FA1C44A1BDE3461A /* NotoSans_ExtraCondensed-BlackItalic.ttf */; };
|
||||||
|
E534417E9EFF45A6BAE66C69 /* NotoSans_Condensed-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0070E7DA12E345B9BFDCAEAD /* NotoSans_Condensed-BoldItalic.ttf */; };
|
||||||
|
E96DF032C63C49F29270AFE4 /* NotoSans_Condensed-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CE27CD0F1BD3480B9683B0BB /* NotoSans_Condensed-Regular.ttf */; };
|
||||||
|
EF09B3110E42468A8B63690B /* NotoSans-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6D0E0E916D894072B379D1A6 /* NotoSans-ExtraLight.ttf */; };
|
||||||
|
F0301FCDDE874061B8878B28 /* NotoSans_ExtraCondensed-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AE17D22089D441AC89F643BD /* NotoSans_ExtraCondensed-ThinItalic.ttf */; };
|
||||||
|
F2A33A19277E48F1AF8981DC /* NotoSans-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2B68B3AD2C4C407C91F69A1C /* NotoSans-ThinItalic.ttf */; };
|
||||||
|
F61920A853A245C5937622A1 /* NotoSans_ExtraCondensed-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CC7766C9F8434BD3AE675547 /* NotoSans_ExtraCondensed-Medium.ttf */; };
|
||||||
|
F68D51A12F644FD493CB0CAB /* NotoSans_SemiCondensed-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5D5EA710115547F7AF875F2E /* NotoSans_SemiCondensed-SemiBold.ttf */; };
|
||||||
|
FEB5C32AB0AB4124AF18BB8A /* NotoSans_Condensed-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A7D6B4AB8DB546B58352462D /* NotoSans_Condensed-ExtraLightItalic.ttf */; };
|
||||||
|
FED256B6C7D1407381944829 /* NotoSans-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9A4F5DBEC4C043D399F4AD09 /* NotoSans-SemiBoldItalic.ttf */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
|
||||||
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
|
||||||
proxyType = 1;
|
|
||||||
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
|
|
||||||
remoteInfo = mpaspor;
|
|
||||||
};
|
|
||||||
/* End PBXContainerItemProxy section */
|
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
0070E7DA12E345B9BFDCAEAD /* NotoSans_Condensed-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-BoldItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-BoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
0407698A36C645E89ECEE46A /* NotoSans-ExtraLightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-ExtraLightItalic.ttf"; path = "../assets/fonts/NotoSans-ExtraLightItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
0A1AA61449FA4E698D9EAD0C /* NotoSans_ExtraCondensed-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-ExtraBold.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ExtraBold.ttf"; sourceTree = "<group>"; };
|
||||||
|
0C6D6EFE50AF468980A2BA9E /* NotoSans_Condensed-ExtraLight.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-ExtraLight.ttf"; path = "../assets/fonts/NotoSans_Condensed-ExtraLight.ttf"; sourceTree = "<group>"; };
|
||||||
|
0E72669D8E5A4AD2B67FD8B5 /* NotoSans_SemiCondensed-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-ExtraBoldItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ExtraBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
124F2DF781294D1DBDE6C49F /* NotoSans_SemiCondensed-ExtraLight.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-ExtraLight.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ExtraLight.ttf"; sourceTree = "<group>"; };
|
||||||
13B07F961A680F5B00A75B9A /* mpaspor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mpaspor.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
13B07F961A680F5B00A75B9A /* mpaspor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = mpaspor.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = mpaspor/Images.xcassets; sourceTree = "<group>"; };
|
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = mpaspor/Images.xcassets; sourceTree = "<group>"; };
|
||||||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = mpaspor/Info.plist; sourceTree = "<group>"; };
|
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = mpaspor/Info.plist; sourceTree = "<group>"; };
|
||||||
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = mpaspor/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = mpaspor/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
|
||||||
|
1C5321370EBB45AE81411009 /* NotoSans_Condensed-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-Italic.ttf"; path = "../assets/fonts/NotoSans_Condensed-Italic.ttf"; sourceTree = "<group>"; };
|
||||||
|
1E312E62C57E4916B811AE4A /* NotoSans_ExtraCondensed-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-LightItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-LightItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
20DE3E556C0744C381959A7F /* NotoSans_SemiCondensed-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-Bold.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Bold.ttf"; sourceTree = "<group>"; };
|
||||||
|
237308FB361841F095D4BC20 /* NotoSans_SemiCondensed-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-Regular.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Regular.ttf"; sourceTree = "<group>"; };
|
||||||
|
296396037F08461E99AF7AFC /* NotoSans_Condensed-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-LightItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-LightItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
2B68B3AD2C4C407C91F69A1C /* NotoSans-ThinItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-ThinItalic.ttf"; path = "../assets/fonts/NotoSans-ThinItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
2BA758DFF5F34ACABB6EE75B /* NotoSans-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-Thin.ttf"; path = "../assets/fonts/NotoSans-Thin.ttf"; sourceTree = "<group>"; };
|
||||||
|
2D5B8FBD021A4E7A8BC24C19 /* NotoSans_ExtraCondensed-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-BoldItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-BoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
2E47D868B0184559BDF5E5E9 /* NotoSans_Condensed-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-Light.ttf"; path = "../assets/fonts/NotoSans_Condensed-Light.ttf"; sourceTree = "<group>"; };
|
||||||
|
2EBFAEEF25AA42BAB9EC869D /* NotoSans_ExtraCondensed-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-Bold.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Bold.ttf"; sourceTree = "<group>"; };
|
||||||
|
306D5A08D36A4FD3A2D60AA6 /* NotoSans-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-MediumItalic.ttf"; path = "../assets/fonts/NotoSans-MediumItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
350B2043EDCF4BAB8870796E /* NotoSans_ExtraCondensed-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-Light.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Light.ttf"; sourceTree = "<group>"; };
|
||||||
|
387647589F2E4609A2AAE3D2 /* NotoSans-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-BlackItalic.ttf"; path = "../assets/fonts/NotoSans-BlackItalic.ttf"; sourceTree = "<group>"; };
|
||||||
3B4392A12AC88292D35C810B /* Pods-mpaspor.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-mpaspor.debug.xcconfig"; path = "Target Support Files/Pods-mpaspor/Pods-mpaspor.debug.xcconfig"; sourceTree = "<group>"; };
|
3B4392A12AC88292D35C810B /* Pods-mpaspor.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-mpaspor.debug.xcconfig"; path = "Target Support Files/Pods-mpaspor/Pods-mpaspor.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
3E04D39223E34B76B5924912 /* NotoSans-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-Black.ttf"; path = "../assets/fonts/NotoSans-Black.ttf"; sourceTree = "<group>"; };
|
||||||
|
4019D9A927784261B56E8BE1 /* NotoSans_Condensed-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-MediumItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-MediumItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
41D0B635E23947059D1CF2C6 /* NotoSans_Condensed-ThinItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-ThinItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-ThinItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
457ABC5BB7C0482F8368D513 /* NotoSans_SemiCondensed-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-Italic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Italic.ttf"; sourceTree = "<group>"; };
|
||||||
|
4B86F13B10EA4BD99225227A /* NotoSans_SemiCondensed-SemiBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-SemiBoldItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-SemiBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
51B2BAA003544315B3E4617C /* NotoSans_Condensed-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-Black.ttf"; path = "../assets/fonts/NotoSans_Condensed-Black.ttf"; sourceTree = "<group>"; };
|
||||||
|
540C63F381574B83AD80E694 /* NotoSans-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-ExtraBold.ttf"; path = "../assets/fonts/NotoSans-ExtraBold.ttf"; sourceTree = "<group>"; };
|
||||||
5709B34CF0A7D63546082F79 /* Pods-mpaspor.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-mpaspor.release.xcconfig"; path = "Target Support Files/Pods-mpaspor/Pods-mpaspor.release.xcconfig"; sourceTree = "<group>"; };
|
5709B34CF0A7D63546082F79 /* Pods-mpaspor.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-mpaspor.release.xcconfig"; path = "Target Support Files/Pods-mpaspor/Pods-mpaspor.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
5A7A06AE0711424EA2CC089F /* NotoSans_Condensed-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-SemiBold.ttf"; path = "../assets/fonts/NotoSans_Condensed-SemiBold.ttf"; sourceTree = "<group>"; };
|
||||||
|
5B9C25EB27EB426CA307D054 /* NotoSans-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-ExtraBoldItalic.ttf"; path = "../assets/fonts/NotoSans-ExtraBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
5C1274B686464220BFCBE2D9 /* NotoSans_Condensed-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-ExtraBold.ttf"; path = "../assets/fonts/NotoSans_Condensed-ExtraBold.ttf"; sourceTree = "<group>"; };
|
||||||
|
5D5EA710115547F7AF875F2E /* NotoSans_SemiCondensed-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-SemiBold.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-SemiBold.ttf"; sourceTree = "<group>"; };
|
||||||
5DCACB8F33CDC322A6C60F78 /* libPods-mpaspor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-mpaspor.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
5DCACB8F33CDC322A6C60F78 /* libPods-mpaspor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-mpaspor.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
5EE0CB7DD07B4E1C9151BE2B /* NotoSans_SemiCondensed-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-BlackItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-BlackItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
6A5C5E1ACFF34E758EB6D1F1 /* NotoSans_ExtraCondensed-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-SemiBold.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-SemiBold.ttf"; sourceTree = "<group>"; };
|
||||||
|
6D0E0E916D894072B379D1A6 /* NotoSans-ExtraLight.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-ExtraLight.ttf"; path = "../assets/fonts/NotoSans-ExtraLight.ttf"; sourceTree = "<group>"; };
|
||||||
|
71F8BFFE6F5246219F9DC0F7 /* NotoSans_Condensed-SemiBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-SemiBoldItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-SemiBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = mpaspor/AppDelegate.swift; sourceTree = "<group>"; };
|
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = mpaspor/AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
|
76FE0CF9610448C083902876 /* NotoSans_Condensed-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-Thin.ttf"; path = "../assets/fonts/NotoSans_Condensed-Thin.ttf"; sourceTree = "<group>"; };
|
||||||
|
7C676367EB7B413C89B4A665 /* NotoSans_SemiCondensed-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-LightItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-LightItalic.ttf"; sourceTree = "<group>"; };
|
||||||
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = mpaspor/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = mpaspor/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
|
869814428B704007B4D0B145 /* NotoSans_Condensed-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-BlackItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-BlackItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
89513AF6267E430A82A839F4 /* NotoSans_SemiCondensed-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-Light.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Light.ttf"; sourceTree = "<group>"; };
|
||||||
|
89E495E1B8B1403DBE9B3C18 /* NotoSans-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-Italic.ttf"; path = "../assets/fonts/NotoSans-Italic.ttf"; sourceTree = "<group>"; };
|
||||||
|
8F6B29F0B5B0422F915B82E3 /* NotoSans_SemiCondensed-ExtraBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-ExtraBold.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ExtraBold.ttf"; sourceTree = "<group>"; };
|
||||||
|
95EB6F2F20F24550A3DE73F2 /* NotoSans_ExtraCondensed-SemiBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-SemiBoldItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-SemiBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
9675AF4AE623457DA439469F /* NotoSans-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-BoldItalic.ttf"; path = "../assets/fonts/NotoSans-BoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
9810080F44BB45AF9E271B95 /* NotoSans-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-LightItalic.ttf"; path = "../assets/fonts/NotoSans-LightItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
981C1B1736F444ABA63EA8B3 /* NotoSans-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-Light.ttf"; path = "../assets/fonts/NotoSans-Light.ttf"; sourceTree = "<group>"; };
|
||||||
|
99C0037E4ABE4114857454EA /* NotoSans_SemiCondensed-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-MediumItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-MediumItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
9A4F5DBEC4C043D399F4AD09 /* NotoSans-SemiBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-SemiBoldItalic.ttf"; path = "../assets/fonts/NotoSans-SemiBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
9E1A51AD43A340808D96C36E /* NotoSans_Condensed-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-Medium.ttf"; path = "../assets/fonts/NotoSans_Condensed-Medium.ttf"; sourceTree = "<group>"; };
|
||||||
|
A7B6B69713B7467DA6395064 /* NotoSans_ExtraCondensed-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-MediumItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-MediumItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
A7D6B4AB8DB546B58352462D /* NotoSans_Condensed-ExtraLightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-ExtraLightItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-ExtraLightItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
AE17D22089D441AC89F643BD /* NotoSans_ExtraCondensed-ThinItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-ThinItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ThinItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
AEAD78DC746948D4991E047C /* NotoSans_ExtraCondensed-ExtraLightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-ExtraLightItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ExtraLightItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
AFA4940261534AA39B9CD270 /* NotoSans_ExtraCondensed-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-Italic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Italic.ttf"; sourceTree = "<group>"; };
|
||||||
|
B150E7DEFD7F476BA0B11D46 /* NotoSans_SemiCondensed-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-Black.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Black.ttf"; sourceTree = "<group>"; };
|
||||||
|
B1BAB27ADCCE4EAFB01AF108 /* NotoSans_Condensed-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-ExtraBoldItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-ExtraBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
B46C4579A7CC4F5CB68265EA /* NotoSans_ExtraCondensed-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-Thin.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Thin.ttf"; sourceTree = "<group>"; };
|
||||||
|
B4805B39BE79459DBF47199C /* NotoSans-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-SemiBold.ttf"; path = "../assets/fonts/NotoSans-SemiBold.ttf"; sourceTree = "<group>"; };
|
||||||
|
BC657944C69C450F8CBDCE65 /* NotoSans-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-Medium.ttf"; path = "../assets/fonts/NotoSans-Medium.ttf"; sourceTree = "<group>"; };
|
||||||
|
C114C3F71AA04B778369EA89 /* NotoSans-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-Bold.ttf"; path = "../assets/fonts/NotoSans-Bold.ttf"; sourceTree = "<group>"; };
|
||||||
|
C182B410FF2843ECA3C54FA5 /* NotoSans_SemiCondensed-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-BoldItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-BoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
C4CE3C41FDC54456A913D28E /* NotoSans_SemiCondensed-ThinItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-ThinItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ThinItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
C82157C4886244A2A6D7728E /* NotoSans_SemiCondensed-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-Thin.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Thin.ttf"; sourceTree = "<group>"; };
|
||||||
|
CC7766C9F8434BD3AE675547 /* NotoSans_ExtraCondensed-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-Medium.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Medium.ttf"; sourceTree = "<group>"; };
|
||||||
|
CE27CD0F1BD3480B9683B0BB /* NotoSans_Condensed-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-Regular.ttf"; path = "../assets/fonts/NotoSans_Condensed-Regular.ttf"; sourceTree = "<group>"; };
|
||||||
|
D2C29BD9DEE14930930E3881 /* NotoSans_SemiCondensed-ExtraLightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-ExtraLightItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ExtraLightItalic.ttf"; sourceTree = "<group>"; };
|
||||||
|
DD739AD811BA4F2CA5AECED9 /* NotoSans_ExtraCondensed-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-Regular.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Regular.ttf"; sourceTree = "<group>"; };
|
||||||
|
E6EEE80D4B2F47BB8FA78157 /* NotoSans_ExtraCondensed-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-Black.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Black.ttf"; sourceTree = "<group>"; };
|
||||||
|
E7FC30F8FA1C44A1BDE3461A /* NotoSans_ExtraCondensed-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-BlackItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-BlackItalic.ttf"; sourceTree = "<group>"; };
|
||||||
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
|
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
|
||||||
3E04D39223E34B76B5924912 /* NotoSans-Black.ttf */ = {isa = PBXFileReference; name = "NotoSans-Black.ttf"; path = "../assets/fonts/NotoSans-Black.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
F5B97FA0433741E1A9BC333B /* NotoSans_SemiCondensed-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_SemiCondensed-Medium.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Medium.ttf"; sourceTree = "<group>"; };
|
||||||
387647589F2E4609A2AAE3D2 /* NotoSans-BlackItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans-BlackItalic.ttf"; path = "../assets/fonts/NotoSans-BlackItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
F7945520A406472284207CF7 /* NotoSans_ExtraCondensed-ExtraLight.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-ExtraLight.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ExtraLight.ttf"; sourceTree = "<group>"; };
|
||||||
C114C3F71AA04B778369EA89 /* NotoSans-Bold.ttf */ = {isa = PBXFileReference; name = "NotoSans-Bold.ttf"; path = "../assets/fonts/NotoSans-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
F7EF8E3D480F4077B28318E6 /* NotoSans_Condensed-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_Condensed-Bold.ttf"; path = "../assets/fonts/NotoSans_Condensed-Bold.ttf"; sourceTree = "<group>"; };
|
||||||
9675AF4AE623457DA439469F /* NotoSans-BoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans-BoldItalic.ttf"; path = "../assets/fonts/NotoSans-BoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
FB70298C3DDE435593072128 /* NotoSans-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans-Regular.ttf"; path = "../assets/fonts/NotoSans-Regular.ttf"; sourceTree = "<group>"; };
|
||||||
540C63F381574B83AD80E694 /* NotoSans-ExtraBold.ttf */ = {isa = PBXFileReference; name = "NotoSans-ExtraBold.ttf"; path = "../assets/fonts/NotoSans-ExtraBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
FDC32FD5C6CE466E8B6950DB /* NotoSans_ExtraCondensed-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "NotoSans_ExtraCondensed-ExtraBoldItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ExtraBoldItalic.ttf"; sourceTree = "<group>"; };
|
||||||
5B9C25EB27EB426CA307D054 /* NotoSans-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans-ExtraBoldItalic.ttf"; path = "../assets/fonts/NotoSans-ExtraBoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
6D0E0E916D894072B379D1A6 /* NotoSans-ExtraLight.ttf */ = {isa = PBXFileReference; name = "NotoSans-ExtraLight.ttf"; path = "../assets/fonts/NotoSans-ExtraLight.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
0407698A36C645E89ECEE46A /* NotoSans-ExtraLightItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans-ExtraLightItalic.ttf"; path = "../assets/fonts/NotoSans-ExtraLightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
89E495E1B8B1403DBE9B3C18 /* NotoSans-Italic.ttf */ = {isa = PBXFileReference; name = "NotoSans-Italic.ttf"; path = "../assets/fonts/NotoSans-Italic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
981C1B1736F444ABA63EA8B3 /* NotoSans-Light.ttf */ = {isa = PBXFileReference; name = "NotoSans-Light.ttf"; path = "../assets/fonts/NotoSans-Light.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
9810080F44BB45AF9E271B95 /* NotoSans-LightItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans-LightItalic.ttf"; path = "../assets/fonts/NotoSans-LightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
BC657944C69C450F8CBDCE65 /* NotoSans-Medium.ttf */ = {isa = PBXFileReference; name = "NotoSans-Medium.ttf"; path = "../assets/fonts/NotoSans-Medium.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
306D5A08D36A4FD3A2D60AA6 /* NotoSans-MediumItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans-MediumItalic.ttf"; path = "../assets/fonts/NotoSans-MediumItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
FB70298C3DDE435593072128 /* NotoSans-Regular.ttf */ = {isa = PBXFileReference; name = "NotoSans-Regular.ttf"; path = "../assets/fonts/NotoSans-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
B4805B39BE79459DBF47199C /* NotoSans-SemiBold.ttf */ = {isa = PBXFileReference; name = "NotoSans-SemiBold.ttf"; path = "../assets/fonts/NotoSans-SemiBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
9A4F5DBEC4C043D399F4AD09 /* NotoSans-SemiBoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans-SemiBoldItalic.ttf"; path = "../assets/fonts/NotoSans-SemiBoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
2BA758DFF5F34ACABB6EE75B /* NotoSans-Thin.ttf */ = {isa = PBXFileReference; name = "NotoSans-Thin.ttf"; path = "../assets/fonts/NotoSans-Thin.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
2B68B3AD2C4C407C91F69A1C /* NotoSans-ThinItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans-ThinItalic.ttf"; path = "../assets/fonts/NotoSans-ThinItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
51B2BAA003544315B3E4617C /* NotoSans_Condensed-Black.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-Black.ttf"; path = "../assets/fonts/NotoSans_Condensed-Black.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
869814428B704007B4D0B145 /* NotoSans_Condensed-BlackItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-BlackItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-BlackItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
F7EF8E3D480F4077B28318E6 /* NotoSans_Condensed-Bold.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-Bold.ttf"; path = "../assets/fonts/NotoSans_Condensed-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
0070E7DA12E345B9BFDCAEAD /* NotoSans_Condensed-BoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-BoldItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-BoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
5C1274B686464220BFCBE2D9 /* NotoSans_Condensed-ExtraBold.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-ExtraBold.ttf"; path = "../assets/fonts/NotoSans_Condensed-ExtraBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
B1BAB27ADCCE4EAFB01AF108 /* NotoSans_Condensed-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-ExtraBoldItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-ExtraBoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
0C6D6EFE50AF468980A2BA9E /* NotoSans_Condensed-ExtraLight.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-ExtraLight.ttf"; path = "../assets/fonts/NotoSans_Condensed-ExtraLight.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
A7D6B4AB8DB546B58352462D /* NotoSans_Condensed-ExtraLightItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-ExtraLightItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-ExtraLightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
1C5321370EBB45AE81411009 /* NotoSans_Condensed-Italic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-Italic.ttf"; path = "../assets/fonts/NotoSans_Condensed-Italic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
2E47D868B0184559BDF5E5E9 /* NotoSans_Condensed-Light.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-Light.ttf"; path = "../assets/fonts/NotoSans_Condensed-Light.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
296396037F08461E99AF7AFC /* NotoSans_Condensed-LightItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-LightItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-LightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
9E1A51AD43A340808D96C36E /* NotoSans_Condensed-Medium.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-Medium.ttf"; path = "../assets/fonts/NotoSans_Condensed-Medium.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
4019D9A927784261B56E8BE1 /* NotoSans_Condensed-MediumItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-MediumItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-MediumItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
CE27CD0F1BD3480B9683B0BB /* NotoSans_Condensed-Regular.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-Regular.ttf"; path = "../assets/fonts/NotoSans_Condensed-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
5A7A06AE0711424EA2CC089F /* NotoSans_Condensed-SemiBold.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-SemiBold.ttf"; path = "../assets/fonts/NotoSans_Condensed-SemiBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
71F8BFFE6F5246219F9DC0F7 /* NotoSans_Condensed-SemiBoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-SemiBoldItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-SemiBoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
76FE0CF9610448C083902876 /* NotoSans_Condensed-Thin.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-Thin.ttf"; path = "../assets/fonts/NotoSans_Condensed-Thin.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
41D0B635E23947059D1CF2C6 /* NotoSans_Condensed-ThinItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_Condensed-ThinItalic.ttf"; path = "../assets/fonts/NotoSans_Condensed-ThinItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
E6EEE80D4B2F47BB8FA78157 /* NotoSans_ExtraCondensed-Black.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-Black.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Black.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
E7FC30F8FA1C44A1BDE3461A /* NotoSans_ExtraCondensed-BlackItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-BlackItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-BlackItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
2EBFAEEF25AA42BAB9EC869D /* NotoSans_ExtraCondensed-Bold.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-Bold.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
2D5B8FBD021A4E7A8BC24C19 /* NotoSans_ExtraCondensed-BoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-BoldItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-BoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
0A1AA61449FA4E698D9EAD0C /* NotoSans_ExtraCondensed-ExtraBold.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-ExtraBold.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ExtraBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
FDC32FD5C6CE466E8B6950DB /* NotoSans_ExtraCondensed-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-ExtraBoldItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ExtraBoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
F7945520A406472284207CF7 /* NotoSans_ExtraCondensed-ExtraLight.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-ExtraLight.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ExtraLight.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
AEAD78DC746948D4991E047C /* NotoSans_ExtraCondensed-ExtraLightItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-ExtraLightItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ExtraLightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
AFA4940261534AA39B9CD270 /* NotoSans_ExtraCondensed-Italic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-Italic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Italic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
350B2043EDCF4BAB8870796E /* NotoSans_ExtraCondensed-Light.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-Light.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Light.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
1E312E62C57E4916B811AE4A /* NotoSans_ExtraCondensed-LightItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-LightItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-LightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
CC7766C9F8434BD3AE675547 /* NotoSans_ExtraCondensed-Medium.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-Medium.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Medium.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
A7B6B69713B7467DA6395064 /* NotoSans_ExtraCondensed-MediumItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-MediumItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-MediumItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
DD739AD811BA4F2CA5AECED9 /* NotoSans_ExtraCondensed-Regular.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-Regular.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
6A5C5E1ACFF34E758EB6D1F1 /* NotoSans_ExtraCondensed-SemiBold.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-SemiBold.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-SemiBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
95EB6F2F20F24550A3DE73F2 /* NotoSans_ExtraCondensed-SemiBoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-SemiBoldItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-SemiBoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
B46C4579A7CC4F5CB68265EA /* NotoSans_ExtraCondensed-Thin.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-Thin.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-Thin.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
AE17D22089D441AC89F643BD /* NotoSans_ExtraCondensed-ThinItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_ExtraCondensed-ThinItalic.ttf"; path = "../assets/fonts/NotoSans_ExtraCondensed-ThinItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
B150E7DEFD7F476BA0B11D46 /* NotoSans_SemiCondensed-Black.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-Black.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Black.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
5EE0CB7DD07B4E1C9151BE2B /* NotoSans_SemiCondensed-BlackItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-BlackItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-BlackItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
20DE3E556C0744C381959A7F /* NotoSans_SemiCondensed-Bold.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-Bold.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
C182B410FF2843ECA3C54FA5 /* NotoSans_SemiCondensed-BoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-BoldItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-BoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
8F6B29F0B5B0422F915B82E3 /* NotoSans_SemiCondensed-ExtraBold.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-ExtraBold.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ExtraBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
0E72669D8E5A4AD2B67FD8B5 /* NotoSans_SemiCondensed-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-ExtraBoldItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ExtraBoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
124F2DF781294D1DBDE6C49F /* NotoSans_SemiCondensed-ExtraLight.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-ExtraLight.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ExtraLight.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
D2C29BD9DEE14930930E3881 /* NotoSans_SemiCondensed-ExtraLightItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-ExtraLightItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ExtraLightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
457ABC5BB7C0482F8368D513 /* NotoSans_SemiCondensed-Italic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-Italic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Italic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
89513AF6267E430A82A839F4 /* NotoSans_SemiCondensed-Light.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-Light.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Light.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
7C676367EB7B413C89B4A665 /* NotoSans_SemiCondensed-LightItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-LightItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-LightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
F5B97FA0433741E1A9BC333B /* NotoSans_SemiCondensed-Medium.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-Medium.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Medium.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
99C0037E4ABE4114857454EA /* NotoSans_SemiCondensed-MediumItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-MediumItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-MediumItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
237308FB361841F095D4BC20 /* NotoSans_SemiCondensed-Regular.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-Regular.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
5D5EA710115547F7AF875F2E /* NotoSans_SemiCondensed-SemiBold.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-SemiBold.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-SemiBold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
4B86F13B10EA4BD99225227A /* NotoSans_SemiCondensed-SemiBoldItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-SemiBoldItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-SemiBoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
C82157C4886244A2A6D7728E /* NotoSans_SemiCondensed-Thin.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-Thin.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-Thin.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
C4CE3C41FDC54456A913D28E /* NotoSans_SemiCondensed-ThinItalic.ttf */ = {isa = PBXFileReference; name = "NotoSans_SemiCondensed-ThinItalic.ttf"; path = "../assets/fonts/NotoSans_SemiCondensed-ThinItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
|
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
@ -193,76 +183,8 @@
|
|||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
00E356F01AD99517003FC87E /* Supporting Files */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
00E356F11AD99517003FC87E /* Info.plist */,
|
|
||||||
);
|
|
||||||
name = "Supporting Files";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
13B07FAE1A68108700A75B9A /* mpaspor */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
13B07FB51A68108700A75B9A /* Images.xcassets */,
|
|
||||||
761780EC2CA45674006654EE /* AppDelegate.swift */,
|
|
||||||
13B07FB61A68108700A75B9A /* Info.plist */,
|
|
||||||
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
|
|
||||||
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */,
|
|
||||||
);
|
|
||||||
name = mpaspor;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
|
|
||||||
5DCACB8F33CDC322A6C60F78 /* libPods-mpaspor.a */,
|
|
||||||
);
|
|
||||||
name = Frameworks;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
);
|
|
||||||
name = Libraries;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
83CBB9F61A601CBA00E9B192 = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
13B07FAE1A68108700A75B9A /* mpaspor */,
|
|
||||||
832341AE1AAA6A7D00B99B32 /* Libraries */,
|
|
||||||
83CBBA001A601CBA00E9B192 /* Products */,
|
|
||||||
2D16E6871FA4F8E400B85C8A /* Frameworks */,
|
|
||||||
BBD78D7AC51CEA395F1C20DB /* Pods */,
|
|
||||||
083C96CAD0EC48C5B831895C /* Resources */,
|
|
||||||
);
|
|
||||||
indentWidth = 2;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
tabWidth = 2;
|
|
||||||
usesTabs = 0;
|
|
||||||
};
|
|
||||||
83CBBA001A601CBA00E9B192 /* Products */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
13B07F961A680F5B00A75B9A /* mpaspor.app */,
|
|
||||||
);
|
|
||||||
name = Products;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
BBD78D7AC51CEA395F1C20DB /* Pods */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
3B4392A12AC88292D35C810B /* Pods-mpaspor.debug.xcconfig */,
|
|
||||||
5709B34CF0A7D63546082F79 /* Pods-mpaspor.release.xcconfig */,
|
|
||||||
);
|
|
||||||
path = Pods;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
083C96CAD0EC48C5B831895C /* Resources */ = {
|
083C96CAD0EC48C5B831895C /* Resources */ = {
|
||||||
isa = "PBXGroup";
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
3E04D39223E34B76B5924912 /* NotoSans-Black.ttf */,
|
3E04D39223E34B76B5924912 /* NotoSans-Black.ttf */,
|
||||||
387647589F2E4609A2AAE3D2 /* NotoSans-BlackItalic.ttf */,
|
387647589F2E4609A2AAE3D2 /* NotoSans-BlackItalic.ttf */,
|
||||||
@ -338,8 +260,68 @@
|
|||||||
C4CE3C41FDC54456A913D28E /* NotoSans_SemiCondensed-ThinItalic.ttf */,
|
C4CE3C41FDC54456A913D28E /* NotoSans_SemiCondensed-ThinItalic.ttf */,
|
||||||
);
|
);
|
||||||
name = Resources;
|
name = Resources;
|
||||||
sourceTree = "<group>";
|
|
||||||
path = "";
|
path = "";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
13B07FAE1A68108700A75B9A /* mpaspor */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
13B07FB51A68108700A75B9A /* Images.xcassets */,
|
||||||
|
761780EC2CA45674006654EE /* AppDelegate.swift */,
|
||||||
|
13B07FB61A68108700A75B9A /* Info.plist */,
|
||||||
|
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
|
||||||
|
13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */,
|
||||||
|
);
|
||||||
|
name = mpaspor;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
|
||||||
|
5DCACB8F33CDC322A6C60F78 /* libPods-mpaspor.a */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
);
|
||||||
|
name = Libraries;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
83CBB9F61A601CBA00E9B192 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
13B07FAE1A68108700A75B9A /* mpaspor */,
|
||||||
|
832341AE1AAA6A7D00B99B32 /* Libraries */,
|
||||||
|
83CBBA001A601CBA00E9B192 /* Products */,
|
||||||
|
2D16E6871FA4F8E400B85C8A /* Frameworks */,
|
||||||
|
BBD78D7AC51CEA395F1C20DB /* Pods */,
|
||||||
|
083C96CAD0EC48C5B831895C /* Resources */,
|
||||||
|
);
|
||||||
|
indentWidth = 2;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
tabWidth = 2;
|
||||||
|
usesTabs = 0;
|
||||||
|
};
|
||||||
|
83CBBA001A601CBA00E9B192 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
13B07F961A680F5B00A75B9A /* mpaspor.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
BBD78D7AC51CEA395F1C20DB /* Pods */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
3B4392A12AC88292D35C810B /* Pods-mpaspor.debug.xcconfig */,
|
||||||
|
5709B34CF0A7D63546082F79 /* Pods-mpaspor.release.xcconfig */,
|
||||||
|
);
|
||||||
|
path = Pods;
|
||||||
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
@ -397,13 +379,6 @@
|
|||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
|
||||||
/* Begin PBXResourcesBuildPhase section */
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
00E356EC1AD99517003FC87E /* Resources */ = {
|
|
||||||
isa = PBXResourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
13B07F8E1A680F5B00A75B9A /* Resources */ = {
|
13B07F8E1A680F5B00A75B9A /* Resources */ = {
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@ -482,6 +457,7 @@
|
|||||||
A8FB27B3432C4526A458D01D /* NotoSans_SemiCondensed-SemiBoldItalic.ttf in Resources */,
|
A8FB27B3432C4526A458D01D /* NotoSans_SemiCondensed-SemiBoldItalic.ttf in Resources */,
|
||||||
341576DE6218441AB77584B5 /* NotoSans_SemiCondensed-Thin.ttf in Resources */,
|
341576DE6218441AB77584B5 /* NotoSans_SemiCondensed-Thin.ttf in Resources */,
|
||||||
C1DC680E57CF4B7190F0A055 /* NotoSans_SemiCondensed-ThinItalic.ttf in Resources */,
|
C1DC680E57CF4B7190F0A055 /* NotoSans_SemiCondensed-ThinItalic.ttf in Resources */,
|
||||||
|
8D54BC8445F44CAD0C1809EB /* PrivacyInfo.xcprivacy in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -573,14 +549,6 @@
|
|||||||
};
|
};
|
||||||
/* End PBXSourcesBuildPhase section */
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXTargetDependency section */
|
|
||||||
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
|
|
||||||
isa = PBXTargetDependency;
|
|
||||||
target = 13B07F861A680F5B00A75B9A /* mpaspor */;
|
|
||||||
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
|
|
||||||
};
|
|
||||||
/* End PBXTargetDependency section */
|
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
13B07F941A680F5B00A75B9A /* Debug */ = {
|
13B07F941A680F5B00A75B9A /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
@ -705,7 +673,14 @@
|
|||||||
"-DFOLLY_CFG_NO_COROUTINES=1",
|
"-DFOLLY_CFG_NO_COROUTINES=1",
|
||||||
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
|
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
|
||||||
);
|
);
|
||||||
|
OTHER_LDFLAGS = (
|
||||||
|
"$(inherited)",
|
||||||
|
" ",
|
||||||
|
);
|
||||||
|
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
|
||||||
|
USE_HERMES = true;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
@ -770,7 +745,13 @@
|
|||||||
"-DFOLLY_CFG_NO_COROUTINES=1",
|
"-DFOLLY_CFG_NO_COROUTINES=1",
|
||||||
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
|
"-DFOLLY_HAVE_CLOCK_GETTIME=1",
|
||||||
);
|
);
|
||||||
|
OTHER_LDFLAGS = (
|
||||||
|
"$(inherited)",
|
||||||
|
" ",
|
||||||
|
);
|
||||||
|
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
USE_HERMES = true;
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
10
ios/mpaspor.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "group:mpaspor.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
<FileRef
|
||||||
|
location = "group:Pods/Pods.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
1459
package-lock.json
generated
@ -10,8 +10,9 @@
|
|||||||
"test": "jest"
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@react-native-async-storage/async-storage": "^2.1.2",
|
"@react-native-async-storage/async-storage": "^2.2.0",
|
||||||
"@react-native-community/datetimepicker": "^8.3.0",
|
"@react-native-community/datetimepicker": "^8.3.0",
|
||||||
|
"@react-native-vector-icons/material-design-icons": "^12.0.1",
|
||||||
"@react-navigation/elements": "^2.3.8",
|
"@react-navigation/elements": "^2.3.8",
|
||||||
"@react-navigation/native": "^7.1.6",
|
"@react-navigation/native": "^7.1.6",
|
||||||
"@react-navigation/native-stack": "^7.3.10",
|
"@react-navigation/native-stack": "^7.3.10",
|
||||||
@ -32,7 +33,7 @@
|
|||||||
"@babel/core": "^7.25.2",
|
"@babel/core": "^7.25.2",
|
||||||
"@babel/preset-env": "^7.25.3",
|
"@babel/preset-env": "^7.25.3",
|
||||||
"@babel/runtime": "^7.25.0",
|
"@babel/runtime": "^7.25.0",
|
||||||
"@react-native-community/cli": "15.0.1",
|
"@react-native-community/cli": "^15.0.1",
|
||||||
"@react-native-community/cli-platform-android": "15.0.1",
|
"@react-native-community/cli-platform-android": "15.0.1",
|
||||||
"@react-native-community/cli-platform-ios": "15.0.1",
|
"@react-native-community/cli-platform-ios": "15.0.1",
|
||||||
"@react-native/babel-preset": "0.78.0",
|
"@react-native/babel-preset": "0.78.0",
|
||||||
|
53
src/components/InfoToast.tsx
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import {StyleSheet, Text, View} from 'react-native';
|
||||||
|
import {Snackbar} from 'react-native-paper';
|
||||||
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
|
import Colors from '../../assets/styles/Colors';
|
||||||
|
|
||||||
|
type InfoToastProps = {
|
||||||
|
visible: boolean;
|
||||||
|
message: string;
|
||||||
|
onDismiss: () => void;
|
||||||
|
duration?: number;
|
||||||
|
};
|
||||||
|
|
||||||
|
const InfoToast = ({
|
||||||
|
visible,
|
||||||
|
message,
|
||||||
|
onDismiss,
|
||||||
|
duration = 2000,
|
||||||
|
}: InfoToastProps) => {
|
||||||
|
return (
|
||||||
|
<Snackbar
|
||||||
|
visible={visible}
|
||||||
|
onDismiss={onDismiss}
|
||||||
|
duration={duration}
|
||||||
|
style={styles.snackbar}>
|
||||||
|
<View style={styles.contentContainer}>
|
||||||
|
<Icon name="information" size={20} color="white" style={styles.icon} />
|
||||||
|
<Text style={styles.message}>{message}</Text>
|
||||||
|
</View>
|
||||||
|
</Snackbar>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
snackbar: {
|
||||||
|
backgroundColor: Colors.secondary10.color,
|
||||||
|
borderRadius: 100,
|
||||||
|
margin: 16,
|
||||||
|
alignSelf: 'center',
|
||||||
|
},
|
||||||
|
contentContainer: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
marginRight: 8,
|
||||||
|
},
|
||||||
|
message: {
|
||||||
|
color: 'white',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default InfoToast;
|
@ -1,10 +1,14 @@
|
|||||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
import WaitingForPaymentIcon from '../../assets/icons/waiting_for_payment.svg';
|
import WaitingForPaymentIcon from '../../assets/icons/waiting_for_payment.svg';
|
||||||
import {StyleSheet, Text, View} from 'react-native';
|
import {Pressable, StyleSheet, Text, View} from 'react-native';
|
||||||
import FontFamily from '../../assets/styles/FontFamily';
|
import FontFamily from '../../assets/styles/FontFamily';
|
||||||
import Colors from '../../assets/styles/Colors';
|
import Colors from '../../assets/styles/Colors';
|
||||||
|
import AsyncStorage from '@react-native-async-storage/async-storage';
|
||||||
|
import { useNavigation } from '@react-navigation/native';
|
||||||
|
|
||||||
|
|
||||||
type PassportAppointmentCardProps = {
|
type PassportAppointmentCardProps = {
|
||||||
|
navigate(arg0: string): void;
|
||||||
applicantName: string | undefined;
|
applicantName: string | undefined;
|
||||||
applicantCode: string | undefined;
|
applicantCode: string | undefined;
|
||||||
appointmentDate: string | undefined;
|
appointmentDate: string | undefined;
|
||||||
@ -16,6 +20,7 @@ type PassportAppointmentCardProps = {
|
|||||||
const renderStatusContent = (status: string | undefined) => {
|
const renderStatusContent = (status: string | undefined) => {
|
||||||
let backgroundColor;
|
let backgroundColor;
|
||||||
let IconComponent;
|
let IconComponent;
|
||||||
|
const navigation = useNavigation<PassportAppointmentCardProps>();
|
||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 'Permohonan Kadaluarsa':
|
case 'Permohonan Kadaluarsa':
|
||||||
@ -39,9 +44,10 @@ const renderStatusContent = (status: string | undefined) => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{status === 'Sudah Terbayar' && (
|
{status === 'Sudah Terbayar' && (
|
||||||
<View style={styles.seeRequirementsWrapper}>
|
<Pressable style={styles.seeRequirementsWrapper}
|
||||||
|
onPress={() => navigation.navigate('SeeRequirements')}>
|
||||||
<Text style={styles.appointmentStatusText}>Lihat Persyaratan</Text>
|
<Text style={styles.appointmentStatusText}>Lihat Persyaratan</Text>
|
||||||
</View>
|
</Pressable>
|
||||||
)}
|
)}
|
||||||
<View style={[styles.appointmentStatusWrapper, {backgroundColor}]}>
|
<View style={[styles.appointmentStatusWrapper, {backgroundColor}]}>
|
||||||
<IconComponent />
|
<IconComponent />
|
||||||
|
@ -1,25 +1,50 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {StyleSheet, Text, View} from 'react-native';
|
import {StyleSheet, Pressable, Text, View} from 'react-native';
|
||||||
import Colors from '../../assets/styles/Colors';
|
import Colors from '../../assets/styles/Colors';
|
||||||
import FontFamily from '../../assets/styles/FontFamily';
|
import FontFamily from '../../assets/styles/FontFamily';
|
||||||
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
|
|
||||||
const StepIndicator = ({currentStep, totalSteps, completedSteps}: any) => {
|
const StepIndicator = ({
|
||||||
|
currentStep,
|
||||||
|
totalSteps,
|
||||||
|
completedSteps,
|
||||||
|
onStepPress,
|
||||||
|
validationStatus,
|
||||||
|
}: any) => {
|
||||||
return (
|
return (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
{[...Array(totalSteps)].map((_, index) => {
|
{[...Array(totalSteps)].map((_, index) => {
|
||||||
const stepNumber = index + 1;
|
const stepNumber = index + 1;
|
||||||
const isCompleted = completedSteps.includes(stepNumber);
|
const isCompleted = completedSteps.includes(stepNumber);
|
||||||
const isCurrent = currentStep === stepNumber;
|
const isCurrent = currentStep === stepNumber;
|
||||||
|
const stepStatus = validationStatus[stepNumber];
|
||||||
|
|
||||||
const backgroundColor = isCompleted
|
const backgroundColorStyle =
|
||||||
|
stepStatus === 'completed'
|
||||||
|
? Colors.indicatorGreen.color
|
||||||
|
: stepStatus === 'invalid'
|
||||||
|
? Colors.indicatorOrange.color
|
||||||
|
: Colors.neutral100.color;
|
||||||
|
|
||||||
|
const indicatorLineBackgroundColorStyle = isCompleted
|
||||||
? Colors.secondary30.color
|
? Colors.secondary30.color
|
||||||
: Colors.neutral100.color;
|
: Colors.neutral100.color;
|
||||||
|
|
||||||
const textColor = isCompleted
|
const borderColorStyle =
|
||||||
? Colors.neutral100.color
|
stepStatus === 'completed'
|
||||||
: isCurrent
|
? Colors.indicatorGreen.color
|
||||||
? Colors.secondary30.color
|
: stepStatus === 'invalid'
|
||||||
: Colors.secondary50.color;
|
? Colors.indicatorOrange.color
|
||||||
|
: isCurrent
|
||||||
|
? Colors.secondary30.color
|
||||||
|
: Colors.neutral100.color;
|
||||||
|
|
||||||
|
const textColorStyle =
|
||||||
|
isCompleted || stepStatus === 'invalid'
|
||||||
|
? Colors.neutral100.color
|
||||||
|
: isCurrent
|
||||||
|
? Colors.secondary30.color
|
||||||
|
: Colors.secondary50.color;
|
||||||
|
|
||||||
const textStyle = isCompleted
|
const textStyle = isCompleted
|
||||||
? FontFamily.notoSansBold
|
? FontFamily.notoSansBold
|
||||||
@ -29,36 +54,53 @@ const StepIndicator = ({currentStep, totalSteps, completedSteps}: any) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<React.Fragment key={index}>
|
<React.Fragment key={index}>
|
||||||
<View style={{alignItems: 'center'}}>
|
<Pressable
|
||||||
<View
|
onPress={() => onStepPress?.(stepNumber)}
|
||||||
style={[
|
style={({pressed}) => ({
|
||||||
styles.stepIndicatorContainer,
|
transform: [{scale: pressed ? 0.97 : 1}],
|
||||||
{
|
})}>
|
||||||
backgroundColor: backgroundColor,
|
<View style={{alignItems: 'center'}}>
|
||||||
borderColor: isCompleted
|
<View
|
||||||
? Colors.secondary30.color
|
style={[
|
||||||
: Colors.neutral100.color,
|
styles.stepIndicatorContainer,
|
||||||
},
|
{
|
||||||
]}>
|
backgroundColor: backgroundColorStyle,
|
||||||
<Text
|
borderColor: borderColorStyle,
|
||||||
style={{
|
},
|
||||||
includeFontPadding: false,
|
]}>
|
||||||
fontSize: 12,
|
{stepStatus === 'completed' ? (
|
||||||
color: textColor,
|
<Icon
|
||||||
...textStyle,
|
name="check"
|
||||||
}}>
|
color={Colors.neutral100.color}
|
||||||
{stepNumber}
|
size={16}
|
||||||
</Text>
|
/>
|
||||||
|
) : stepStatus === 'invalid' ? (
|
||||||
|
<Icon
|
||||||
|
name="alert-circle"
|
||||||
|
color={Colors.neutral100.color}
|
||||||
|
size={16}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<Text
|
||||||
|
style={{
|
||||||
|
includeFontPadding: false,
|
||||||
|
fontSize: 12,
|
||||||
|
color: textColorStyle,
|
||||||
|
...textStyle,
|
||||||
|
}}>
|
||||||
|
{stepNumber}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</Pressable>
|
||||||
|
|
||||||
{index < totalSteps - 1 && (
|
{index < totalSteps - 1 && (
|
||||||
<View
|
<View
|
||||||
style={[
|
style={[
|
||||||
styles.stepIndicatorLine,
|
styles.stepIndicatorLine,
|
||||||
{
|
{
|
||||||
backgroundColor: isCompleted
|
backgroundColor: indicatorLineBackgroundColorStyle,
|
||||||
? Colors.secondary30.color
|
|
||||||
: Colors.neutral100.color,
|
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
@ -93,7 +135,7 @@ const styles = StyleSheet.create({
|
|||||||
stepIndicatorLine: {
|
stepIndicatorLine: {
|
||||||
flex: 1,
|
flex: 1,
|
||||||
height: 2,
|
height: 2,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default StepIndicator;
|
export default StepIndicator;
|
||||||
|
@ -7,7 +7,7 @@ import Colors from '../../assets/styles/Colors';
|
|||||||
import FontFamily from '../../assets/styles/FontFamily';
|
import FontFamily from '../../assets/styles/FontFamily';
|
||||||
import DateTimePicker from '@react-native-community/datetimepicker';
|
import DateTimePicker from '@react-native-community/datetimepicker';
|
||||||
import {useState} from 'react';
|
import {useState} from 'react';
|
||||||
import {Dropdown, SelectCountry} from 'react-native-element-dropdown';
|
import {Dropdown} from 'react-native-element-dropdown';
|
||||||
|
|
||||||
type DropdownItem = {
|
type DropdownItem = {
|
||||||
label: string;
|
label: string;
|
||||||
@ -40,6 +40,10 @@ interface TextInputComponentProps {
|
|||||||
isMultiline?: boolean;
|
isMultiline?: boolean;
|
||||||
isDropdownPressedSheet?: boolean;
|
isDropdownPressedSheet?: boolean;
|
||||||
handleDropdownPressed?: () => void;
|
handleDropdownPressed?: () => void;
|
||||||
|
countryValue?: string | null;
|
||||||
|
setCountryValue?: (country: string) => void;
|
||||||
|
value?: string;
|
||||||
|
onChangeText?: (text: string) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TextInputComponent = (props: TextInputComponentProps) => {
|
const TextInputComponent = (props: TextInputComponentProps) => {
|
||||||
@ -61,6 +65,10 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
isMultiline = false,
|
isMultiline = false,
|
||||||
isDropdownPressedSheet = false,
|
isDropdownPressedSheet = false,
|
||||||
handleDropdownPressed,
|
handleDropdownPressed,
|
||||||
|
countryValue,
|
||||||
|
setCountryValue,
|
||||||
|
value,
|
||||||
|
onChangeText,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const [secureText, setSecureText] = useState(isPassword);
|
const [secureText, setSecureText] = useState(isPassword);
|
||||||
@ -68,7 +76,6 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
const [formattedDate, setFormattedDate] = useState<string>('');
|
const [formattedDate, setFormattedDate] = useState<string>('');
|
||||||
const [showPicker, setShowPicker] = useState(false);
|
const [showPicker, setShowPicker] = useState(false);
|
||||||
const [dropdownValue, setDropdownValue] = useState(null);
|
const [dropdownValue, setDropdownValue] = useState(null);
|
||||||
const [country, setCountry] = useState<string | null>(null);
|
|
||||||
const [searchQuery, setSearchQuery] = useState('');
|
const [searchQuery, setSearchQuery] = useState('');
|
||||||
|
|
||||||
const filteredItems = dropdownCountryItemData?.filter(item =>
|
const filteredItems = dropdownCountryItemData?.filter(item =>
|
||||||
@ -94,6 +101,7 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
date.getMonth() + 1,
|
date.getMonth() + 1,
|
||||||
).padStart(2, '0')}/${date.getFullYear()}`;
|
).padStart(2, '0')}/${date.getFullYear()}`;
|
||||||
setFormattedDate(formatted);
|
setFormattedDate(formatted);
|
||||||
|
onChangeText?.(formatted);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -118,7 +126,9 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const renderLeftIcon = () => {
|
const renderLeftIcon = () => {
|
||||||
const selectedItem = filteredItems?.find(item => item.value === country);
|
const selectedItem = filteredItems?.find(
|
||||||
|
item => item.value === countryValue,
|
||||||
|
);
|
||||||
if (!selectedItem?.image?.uri) return null;
|
if (!selectedItem?.image?.uri) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -184,7 +194,10 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
<Dropdown
|
<Dropdown
|
||||||
style={[styles.dropdown, isDisabled && styles.outlineColorDisabled]}
|
style={[
|
||||||
|
styles.dropdown,
|
||||||
|
isDisabled && styles.outlineColorDisabledDropdown,
|
||||||
|
]}
|
||||||
placeholderStyle={styles.placeholderDropdownStyle}
|
placeholderStyle={styles.placeholderDropdownStyle}
|
||||||
selectedTextStyle={styles.selectedTextStyle}
|
selectedTextStyle={styles.selectedTextStyle}
|
||||||
iconStyle={styles.iconStyle}
|
iconStyle={styles.iconStyle}
|
||||||
@ -196,6 +209,7 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
value={dropdownValue}
|
value={dropdownValue}
|
||||||
onChange={item => {
|
onChange={item => {
|
||||||
setDropdownValue(item.value);
|
setDropdownValue(item.value);
|
||||||
|
onChangeText?.(item.value);
|
||||||
}}
|
}}
|
||||||
disable={isDisabled}
|
disable={isDisabled}
|
||||||
renderRightIcon={() => <Icon name="arrow-drop-down" size={20} />}
|
renderRightIcon={() => <Icon name="arrow-drop-down" size={20} />}
|
||||||
@ -253,7 +267,10 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
<Dropdown
|
<Dropdown
|
||||||
style={[styles.dropdown, isDisabled && styles.outlineColorDisabled]}
|
style={[
|
||||||
|
styles.dropdown,
|
||||||
|
isDisabled && styles.outlineColorDisabledDropdown,
|
||||||
|
]}
|
||||||
selectedTextStyle={styles.selectedTextStyle}
|
selectedTextStyle={styles.selectedTextStyle}
|
||||||
placeholderStyle={styles.placeholderDropdownStyle}
|
placeholderStyle={styles.placeholderDropdownStyle}
|
||||||
inputSearchStyle={styles.inputSearchStyle}
|
inputSearchStyle={styles.inputSearchStyle}
|
||||||
@ -263,14 +280,16 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
renderInputSearch={() =>
|
renderInputSearch={() =>
|
||||||
renderInputSearch(searchQuery, setSearchQuery)
|
renderInputSearch(searchQuery, setSearchQuery)
|
||||||
}
|
}
|
||||||
value={country}
|
value={countryValue}
|
||||||
data={filteredItems ?? []}
|
data={filteredItems ?? []}
|
||||||
valueField="value"
|
valueField="value"
|
||||||
labelField="label"
|
labelField="label"
|
||||||
placeholder={placeholder}
|
placeholder={placeholder}
|
||||||
searchPlaceholder="Cari"
|
searchPlaceholder="Cari"
|
||||||
onChange={item => {
|
onChange={item => {
|
||||||
setCountry(item.value);
|
if (setCountryValue) {
|
||||||
|
setCountryValue(item.value);
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
disable={isDisabled}
|
disable={isDisabled}
|
||||||
renderRightIcon={() => <Icon name="arrow-drop-down" size={20} />}
|
renderRightIcon={() => <Icon name="arrow-drop-down" size={20} />}
|
||||||
@ -298,11 +317,15 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
<TextInput
|
<TextInput
|
||||||
mode="outlined"
|
mode="outlined"
|
||||||
placeholder={placeholder}
|
placeholder={placeholder}
|
||||||
style={[inputStyle, isDisabled && styles.outlineColorDisabled]}
|
style={[
|
||||||
|
inputStyle,
|
||||||
|
isDisabled && styles.outlineColorDisabledDropdown,
|
||||||
|
]}
|
||||||
theme={{roundness: 12}}
|
theme={{roundness: 12}}
|
||||||
placeholderTextColor={Colors.primary60.color}
|
placeholderTextColor={Colors.primary60.color}
|
||||||
editable={false}
|
editable={false}
|
||||||
value={formattedDate}
|
value={value}
|
||||||
|
onChangeText={onChangeText}
|
||||||
right={
|
right={
|
||||||
<TextInput.Icon
|
<TextInput.Icon
|
||||||
icon="menu-down"
|
icon="menu-down"
|
||||||
@ -348,6 +371,8 @@ const TextInputComponent = (props: TextInputComponentProps) => {
|
|||||||
}
|
}
|
||||||
multiline={isMultiline}
|
multiline={isMultiline}
|
||||||
textColor="#48454E"
|
textColor="#48454E"
|
||||||
|
value={value}
|
||||||
|
onChangeText={onChangeText}
|
||||||
/>
|
/>
|
||||||
{supportText && <Text style={[styles.supportText]}>{supportText}</Text>}
|
{supportText && <Text style={[styles.supportText]}>{supportText}</Text>}
|
||||||
</View>
|
</View>
|
||||||
@ -442,6 +467,13 @@ const styles = StyleSheet.create({
|
|||||||
borderRadius: 12,
|
borderRadius: 12,
|
||||||
borderColor: '#e3e3e5',
|
borderColor: '#e3e3e5',
|
||||||
},
|
},
|
||||||
|
outlineColorDisabledDropdown: {
|
||||||
|
height: 58,
|
||||||
|
backgroundColor: '#F8F9FE',
|
||||||
|
borderWidth: 1,
|
||||||
|
borderRadius: 12,
|
||||||
|
borderColor: '#e3e3e5',
|
||||||
|
},
|
||||||
imageCountryStyle: {
|
imageCountryStyle: {
|
||||||
width: 32,
|
width: 32,
|
||||||
height: 20,
|
height: 20,
|
||||||
|
@ -17,9 +17,13 @@ const DialogLogout = (props: DialogLogoutProps) => {
|
|||||||
<Portal>
|
<Portal>
|
||||||
<Dialog visible={visible} style={styles.container}>
|
<Dialog visible={visible} style={styles.container}>
|
||||||
<Dialog.Title style={styles.title}>
|
<Dialog.Title style={styles.title}>
|
||||||
Apakah Anda yakin akan menutup akun?
|
Apakah Anda ingin keluar dari akun?
|
||||||
</Dialog.Title>
|
</Dialog.Title>
|
||||||
<View style={styles.content}>
|
<View style={styles.content}>
|
||||||
|
<Text style={styles.desc}>
|
||||||
|
Anda akan keluar dari akun M-Paspor yang sekarang dan akan diarahkan
|
||||||
|
menuju halaman login.
|
||||||
|
</Text>
|
||||||
<Button
|
<Button
|
||||||
style={styles.buttonContained}
|
style={styles.buttonContained}
|
||||||
mode="contained"
|
mode="contained"
|
||||||
@ -28,16 +32,16 @@ const DialogLogout = (props: DialogLogoutProps) => {
|
|||||||
hideDialog();
|
hideDialog();
|
||||||
onNavigate();
|
onNavigate();
|
||||||
}}>
|
}}>
|
||||||
Ya, lanjut tutup akun
|
Ya, Lanjut Keluar Akun
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
style={styles.buttonOutlined}
|
style={styles.buttonOutlined}
|
||||||
mode="outlined"
|
mode="outlined"
|
||||||
textColor={Colors.indicatorRed.color}
|
textColor={Colors.primary30.color}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
hideDialog();
|
hideDialog();
|
||||||
}}>
|
}}>
|
||||||
Tidak, jangan tutup akun
|
Tidak, Jangan Keluar
|
||||||
</Button>
|
</Button>
|
||||||
</View>
|
</View>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
@ -56,7 +60,14 @@ const styles = StyleSheet.create({
|
|||||||
},
|
},
|
||||||
title: {
|
title: {
|
||||||
fontSize: 22,
|
fontSize: 22,
|
||||||
color: Colors.indicatorRed.color,
|
color: Colors.secondary30.color,
|
||||||
|
},
|
||||||
|
desc: {
|
||||||
|
fontSize: 14,
|
||||||
|
...FontFamily.notoSansRegular,
|
||||||
|
includeFontPadding: false,
|
||||||
|
lineHeight: 22,
|
||||||
|
color: Colors.primary30.color,
|
||||||
},
|
},
|
||||||
content: {
|
content: {
|
||||||
marginHorizontal: 24,
|
marginHorizontal: 24,
|
||||||
@ -71,9 +82,9 @@ const styles = StyleSheet.create({
|
|||||||
color: Colors.primary30.color,
|
color: Colors.primary30.color,
|
||||||
},
|
},
|
||||||
buttonContained: {
|
buttonContained: {
|
||||||
backgroundColor: Colors.indicatorRed.color,
|
backgroundColor: Colors.primary30.color,
|
||||||
},
|
},
|
||||||
buttonOutlined: {
|
buttonOutlined: {
|
||||||
borderColor: Colors.indicatorRed.color,
|
borderColor: Colors.primary30.color,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -1,9 +1,4 @@
|
|||||||
const countryData = [
|
const countryData = [
|
||||||
{
|
|
||||||
value: '1',
|
|
||||||
label: 'Indonesia',
|
|
||||||
image: {uri: 'https://flagcdn.com/w320/id.png'},
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
value: '2',
|
value: '2',
|
||||||
label: 'United States',
|
label: 'United States',
|
||||||
|
@ -101,26 +101,6 @@ const passportAppointmentData = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: '6',
|
id: '6',
|
||||||
applicantName: 'Nabila Khairunisa',
|
|
||||||
applicantCode: '1038000007773344',
|
|
||||||
appointmentDate: 'Rabu, 19 April 2025',
|
|
||||||
appointmentTime: '13:00 - 14:00 WIB',
|
|
||||||
serviceUnit: 'Kantor Imigrasi Bekasi',
|
|
||||||
status: 'Menunggu Pembayaran',
|
|
||||||
submissionDate: 'Senin, 14 April 2025 23:45',
|
|
||||||
serviceCode: 'EH-MK2YPQ',
|
|
||||||
applicationDetails: {
|
|
||||||
nationalIdNumber: '3271234560009120007',
|
|
||||||
gender: 'Wanita',
|
|
||||||
applicationType: 'Penggantian Paspor',
|
|
||||||
replacementReason: 'Hilang',
|
|
||||||
applicationPurpose: 'Kuliah di Luar Negeri',
|
|
||||||
passportType: 'PASPOR BIASA ELEKTRONIK 5 TAHUN',
|
|
||||||
fee: '650.000',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: '7',
|
|
||||||
applicantName: 'Ayaka Haishima',
|
applicantName: 'Ayaka Haishima',
|
||||||
applicantCode: '1038000008885566',
|
applicantCode: '1038000008885566',
|
||||||
appointmentDate: 'Selasa, 18 April 2025',
|
appointmentDate: 'Selasa, 18 April 2025',
|
||||||
@ -139,6 +119,26 @@ const passportAppointmentData = [
|
|||||||
fee: '350.000',
|
fee: '350.000',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: '7',
|
||||||
|
applicantName: 'Nabila Khairunisa',
|
||||||
|
applicantCode: '1038000007773344',
|
||||||
|
appointmentDate: 'Rabu, 19 April 2025',
|
||||||
|
appointmentTime: '13:00 - 14:00 WIB',
|
||||||
|
serviceUnit: 'Kantor Imigrasi Bekasi',
|
||||||
|
status: 'Menunggu Pembayaran',
|
||||||
|
submissionDate: 'Senin, 14 April 2025 23:45',
|
||||||
|
serviceCode: 'EH-MK2YPQ',
|
||||||
|
applicationDetails: {
|
||||||
|
nationalIdNumber: '3271234560009120007',
|
||||||
|
gender: 'Wanita',
|
||||||
|
applicationType: 'Penggantian Paspor',
|
||||||
|
replacementReason: 'Hilang',
|
||||||
|
applicationPurpose: 'Kuliah di Luar Negeri',
|
||||||
|
passportType: 'PASPOR BIASA ELEKTRONIK 5 TAHUN',
|
||||||
|
fee: '650.000',
|
||||||
|
},
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export default passportAppointmentData;
|
export default passportAppointmentData;
|
||||||
|
@ -25,8 +25,19 @@ function AccountVerificationScreen() {
|
|||||||
const navigation = useNavigation<AccountVerificationScreenNavigationProp>();
|
const navigation = useNavigation<AccountVerificationScreenNavigationProp>();
|
||||||
|
|
||||||
const [otp, setOtp] = useState(Array(6).fill(''));
|
const [otp, setOtp] = useState(Array(6).fill(''));
|
||||||
|
const [counter, setCounter] = useState(10);
|
||||||
const inputRefs = useRef<TextInput[]>([]);
|
const inputRefs = useRef<TextInput[]>([]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (counter > 0) {
|
||||||
|
const timer = setTimeout(() => {
|
||||||
|
setCounter(counter - 1);
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
return () => clearTimeout(timer);
|
||||||
|
}
|
||||||
|
}, [counter]);
|
||||||
|
|
||||||
const handleChange = (text: string, index: number) => {
|
const handleChange = (text: string, index: number) => {
|
||||||
const newOtp = [...otp];
|
const newOtp = [...otp];
|
||||||
newOtp[index] = text;
|
newOtp[index] = text;
|
||||||
@ -87,10 +98,22 @@ function AccountVerificationScreen() {
|
|||||||
))}
|
))}
|
||||||
</View>
|
</View>
|
||||||
<Text style={styles.OTPTimeText}>
|
<Text style={styles.OTPTimeText}>
|
||||||
Kirim ulang kode OTP dalam 10 detik
|
Kirim ulang kode OTP dalam <Text>{counter}</Text> detik
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
<Text style={styles.sendOTPText}>Kirim Ulang Kode OTP</Text>
|
<Pressable
|
||||||
|
disabled={counter !== 0 ? true : false}
|
||||||
|
onPress={() => setCounter(10)}
|
||||||
|
style={({pressed}) => ({
|
||||||
|
transform: [{scale: pressed ? 0.95 : 1}],
|
||||||
|
})}>
|
||||||
|
<Text
|
||||||
|
style={
|
||||||
|
counter !== 0 ? styles.sendOTPTextDisabled : styles.sendOTPText
|
||||||
|
}>
|
||||||
|
Kirim Ulang Kode OTP
|
||||||
|
</Text>
|
||||||
|
</Pressable>
|
||||||
<Button
|
<Button
|
||||||
mode="contained"
|
mode="contained"
|
||||||
style={styles.accountVerificationButton}
|
style={styles.accountVerificationButton}
|
||||||
|
@ -46,6 +46,14 @@ const styles = StyleSheet.create({
|
|||||||
...FontFamily.notoSansSemiBold,
|
...FontFamily.notoSansSemiBold,
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
},
|
},
|
||||||
|
sendOTPTextDisabled: {
|
||||||
|
marginTop: 40,
|
||||||
|
marginHorizontal: 16,
|
||||||
|
textAlign: 'center',
|
||||||
|
color: Colors.neutral70.color,
|
||||||
|
...FontFamily.notoSansSemiBold,
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
accountVerificationButton: {
|
accountVerificationButton: {
|
||||||
marginHorizontal: 16,
|
marginHorizontal: 16,
|
||||||
marginTop: 16,
|
marginTop: 16,
|
||||||
|
@ -242,8 +242,9 @@ const RenderContent = ({
|
|||||||
appointmentDate={item.appointmentDate}
|
appointmentDate={item.appointmentDate}
|
||||||
appointmentTime={item.appointmentTime}
|
appointmentTime={item.appointmentTime}
|
||||||
serviceUnit={item.serviceUnit}
|
serviceUnit={item.serviceUnit}
|
||||||
status={item.status}
|
status={item.status} navigate={function (arg0: string): void {
|
||||||
/>
|
throw new Error('Function not implemented.');
|
||||||
|
} } />
|
||||||
</Pressable>
|
</Pressable>
|
||||||
)}
|
)}
|
||||||
keyExtractor={item => item.id ?? ''}
|
keyExtractor={item => item.id ?? ''}
|
||||||
@ -300,7 +301,7 @@ function HomeScreen(props: HomeScreenProps) {
|
|||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
<View style={styles.appBarContainer}>
|
<View style={styles.appBarContainer}>
|
||||||
<Text style={styles.appBarTitle} numberOfLines={1} ellipsizeMode="tail">
|
<Text style={styles.appBarTitle} numberOfLines={1} ellipsizeMode="tail">
|
||||||
Halo, Salwa Aisyah Adhani!
|
Halo, Salwa!
|
||||||
</Text>
|
</Text>
|
||||||
<Icon
|
<Icon
|
||||||
name="bell-outline"
|
name="bell-outline"
|
||||||
|
@ -59,7 +59,7 @@ const styles = StyleSheet.create({
|
|||||||
},
|
},
|
||||||
serviceOptionContainer: {
|
serviceOptionContainer: {
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
marginHorizontal: 12,
|
marginHorizontal: 4,
|
||||||
},
|
},
|
||||||
serviceIcon: {
|
serviceIcon: {
|
||||||
padding: 8,
|
padding: 8,
|
||||||
@ -67,9 +67,9 @@ const styles = StyleSheet.create({
|
|||||||
borderRadius: 4,
|
borderRadius: 4,
|
||||||
},
|
},
|
||||||
serviceDesc: {
|
serviceDesc: {
|
||||||
width: 60,
|
maxWidth: 75,
|
||||||
textAlign: 'center',
|
textAlign: 'center',
|
||||||
fontSize: 10,
|
fontSize: 12,
|
||||||
marginTop: 8,
|
marginTop: 8,
|
||||||
color: Colors.primary30.color,
|
color: Colors.primary30.color,
|
||||||
...FontFamily.notoSansRegular,
|
...FontFamily.notoSansRegular,
|
||||||
|
@ -10,13 +10,14 @@ import {
|
|||||||
import styles from './styles';
|
import styles from './styles';
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import TextInputComponent from '../../components/TextInput';
|
import TextInputComponent from '../../components/TextInput';
|
||||||
import Icon from 'react-native-vector-icons/MaterialIcons';
|
|
||||||
import {useNavigation} from '@react-navigation/native';
|
import {useNavigation} from '@react-navigation/native';
|
||||||
import {NativeStackNavigationProp} from '@react-navigation/native-stack';
|
import {NativeStackNavigationProp} from '@react-navigation/native-stack';
|
||||||
import {PassportAppointment, RootStackParamList} from '../../navigation/type';
|
import {PassportAppointment, RootStackParamList} from '../../navigation/type';
|
||||||
import Colors from '../../../assets/styles/Colors';
|
import Colors from '../../../assets/styles/Colors';
|
||||||
import {getData, storeData} from '../../helper/asyncStorageHelper';
|
import {getData, storeData} from '../../helper/asyncStorageHelper';
|
||||||
import passportAppointmentData from '../../data/History/PassportAppointmentData';
|
import passportAppointmentData from '../../data/History/PassportAppointmentData';
|
||||||
|
import Icon from 'react-native-vector-icons/MaterialIcons';
|
||||||
|
import MDIcons from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
|
|
||||||
type LoginScreenNavigationProp = NativeStackNavigationProp<
|
type LoginScreenNavigationProp = NativeStackNavigationProp<
|
||||||
RootStackParamList,
|
RootStackParamList,
|
||||||
@ -24,7 +25,7 @@ type LoginScreenNavigationProp = NativeStackNavigationProp<
|
|||||||
>;
|
>;
|
||||||
|
|
||||||
function LoginScreen() {
|
function LoginScreen() {
|
||||||
const welcomeImage = require('../../../assets/images/welcomeImage.png');
|
const welcomeImage = require('../../../assets/images/welcome-image.jpg');
|
||||||
const navigation = useNavigation<LoginScreenNavigationProp>();
|
const navigation = useNavigation<LoginScreenNavigationProp>();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -75,11 +76,11 @@ function LoginScreen() {
|
|||||||
onPress={() => navigation.navigate('TermsAndConditions')}
|
onPress={() => navigation.navigate('TermsAndConditions')}
|
||||||
style={({pressed}) => [{transform: [{scale: pressed ? 0.975 : 1}]}]}>
|
style={({pressed}) => [{transform: [{scale: pressed ? 0.975 : 1}]}]}>
|
||||||
<View style={styles.termsAndConditionsContainer}>
|
<View style={styles.termsAndConditionsContainer}>
|
||||||
<Icon
|
<MDIcons
|
||||||
name="person"
|
name="information-outline"
|
||||||
size={20}
|
size={20}
|
||||||
color="#000"
|
color="#237D96"
|
||||||
style={styles.personIcon}
|
style={styles.informationIcon}
|
||||||
/>
|
/>
|
||||||
<View style={styles.termsAndConditionsTextContainer}>
|
<View style={styles.termsAndConditionsTextContainer}>
|
||||||
<Text style={styles.termsAndConditionsTitle}>
|
<Text style={styles.termsAndConditionsTitle}>
|
||||||
|
@ -84,7 +84,7 @@ const styles = StyleSheet.create({
|
|||||||
arrowRightIcon: {
|
arrowRightIcon: {
|
||||||
marginRight: 20,
|
marginRight: 20,
|
||||||
},
|
},
|
||||||
personIcon: {
|
informationIcon: {
|
||||||
marginLeft: 20,
|
marginLeft: 20,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@ -29,18 +29,18 @@ function NavigationRouteScreen() {
|
|||||||
const [routes] = useState([
|
const [routes] = useState([
|
||||||
{
|
{
|
||||||
key: 'home',
|
key: 'home',
|
||||||
title: 'Home',
|
title: 'Beranda',
|
||||||
focusedIcon: 'home',
|
focusedIcon: 'home',
|
||||||
unfocusedIcon: 'home-outline',
|
unfocusedIcon: 'home-outline',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'history',
|
key: 'history',
|
||||||
title: 'History',
|
title: 'Riwayat',
|
||||||
focusedIcon: 'history',
|
focusedIcon: 'history',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'profile',
|
key: 'profile',
|
||||||
title: 'Profile',
|
title: 'Profil',
|
||||||
focusedIcon: 'account-circle',
|
focusedIcon: 'account-circle',
|
||||||
unfocusedIcon: 'account-circle-outline',
|
unfocusedIcon: 'account-circle-outline',
|
||||||
},
|
},
|
||||||
|
@ -1,41 +1,21 @@
|
|||||||
import React, {useEffect, useState} from 'react';
|
// React & React Native Core
|
||||||
import {BackHandler, StatusBar, Text, View} from 'react-native';
|
import React, {RefObject, useEffect, useRef, useState} from 'react';
|
||||||
import styles from './styles';
|
import {BackHandler, StatusBar, Text, ToastAndroid, View} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
|
||||||
|
// React Navigation
|
||||||
import {useNavigation} from '@react-navigation/native';
|
import {useNavigation} from '@react-navigation/native';
|
||||||
import Colors from '../../../assets/styles/Colors';
|
|
||||||
import RadioButtonOptionComponent from '../../components/RadioButtonOption';
|
|
||||||
import {RootStackParamList} from '../../navigation/type';
|
|
||||||
import {NativeStackNavigationProp} from '@react-navigation/native-stack';
|
import {NativeStackNavigationProp} from '@react-navigation/native-stack';
|
||||||
|
|
||||||
|
// Third-Party Libraries
|
||||||
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
import {PaperProvider} from 'react-native-paper';
|
import {PaperProvider} from 'react-native-paper';
|
||||||
|
|
||||||
|
// Components
|
||||||
import StepIndicator from '../../components/StepIndicator';
|
import StepIndicator from '../../components/StepIndicator';
|
||||||
|
import RadioButtonOptionComponent from '../../components/RadioButtonOption';
|
||||||
import DialogApplicationPassport from '../../components/dialog/DialogApplicationPassport';
|
import DialogApplicationPassport from '../../components/dialog/DialogApplicationPassport';
|
||||||
import DialogDontHaveYetPassport from '../../components/dialog/DialogDontHaveYetPassport';
|
import DialogDontHaveYetPassport from '../../components/dialog/DialogDontHaveYetPassport';
|
||||||
import DialogLostOrDamagedPassport from '../../components/dialog/DialogLostOrDamagedPassport';
|
import DialogLostOrDamagedPassport from '../../components/dialog/DialogLostOrDamagedPassport';
|
||||||
import passportAppointmentData from '../../data/History/PassportAppointmentData';
|
|
||||||
import Step7Completion from './steps/Step7Completion/Step7Completion';
|
|
||||||
import Step6Processing from './steps/Step6Processing/Step6Processing';
|
|
||||||
import Step5Verification from './steps/Step5Verification/Step5Verification';
|
|
||||||
import Step3Payment from './steps/Step3Payment/Step3Payment';
|
|
||||||
|
|
||||||
// Options Data
|
|
||||||
import passportForOptions from '../../data/Options/PassportForOptions';
|
|
||||||
import Step4DataConfirmationSubStep2 from './steps/Step4DataConfirmation/Step4DataConfirmationSubStep2';
|
|
||||||
import Step4DataConfirmationSubStep1 from './steps/Step4DataConfirmation/Step4DataConfirmationSubStep1';
|
|
||||||
import Step1PersonalInfoSubStep1 from './steps/Step1PersonalInfo/Step1PersonalInfoSubStep1';
|
|
||||||
import Step1PersonalInfoSubStep2 from './steps/Step1PersonalInfo/Step1PersonalInfoSubStep2';
|
|
||||||
import Step1PersonalInfoSubStep3 from './steps/Step1PersonalInfo/Step1PersonalInfoSubStep3';
|
|
||||||
import Step2SupportingDocsSubStep1 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep1';
|
|
||||||
import Step2SupportingDocsSubStep2 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep2';
|
|
||||||
import Step2SupportingDocsSubStep3 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep3';
|
|
||||||
import Step2SupportingDocsSubStep4 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep4';
|
|
||||||
import Step2SupportingDocsSubStep5 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep5';
|
|
||||||
import Step2SupportingDocsSubStep6 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep6';
|
|
||||||
import Step2SupportingDocsSubStep7 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep7';
|
|
||||||
import Step2SupportingDocsSubStep8 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep8';
|
|
||||||
import Step2SupportingDocsSubStep9 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep9';
|
|
||||||
import Step2SupportingDocsSubStep10 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep10';
|
|
||||||
import Step2SupportingDocsSubStep11 from './steps/Step2SupportingDocs/Step2SupportingDocsSubStep11';
|
|
||||||
import DialogCivilStatusDocumentsInfo from '../../components/dialog/DialogCivilStatusDocumentsInfo';
|
import DialogCivilStatusDocumentsInfo from '../../components/dialog/DialogCivilStatusDocumentsInfo';
|
||||||
import DialogSubmitSuccess from '../../components/dialog/DialogSubmitSuccess';
|
import DialogSubmitSuccess from '../../components/dialog/DialogSubmitSuccess';
|
||||||
import DialogFinalizationConfirmation from '../../components/dialog/DialogFinalizationConfirmation';
|
import DialogFinalizationConfirmation from '../../components/dialog/DialogFinalizationConfirmation';
|
||||||
@ -45,12 +25,51 @@ import SheetEditData from '../../components/sheet/SheetEditData';
|
|||||||
import SheetSearchLocation from '../../components/sheet/SheetSearchLocation';
|
import SheetSearchLocation from '../../components/sheet/SheetSearchLocation';
|
||||||
import SheetSelectDate from '../../components/sheet/SheetSelectDate';
|
import SheetSelectDate from '../../components/sheet/SheetSelectDate';
|
||||||
|
|
||||||
|
// Steps - Step Screens
|
||||||
|
import Step1VerifyNikSubStep1 from './steps/Step1VerifyNik/Step1VerifyNikSubStep1';
|
||||||
|
import Step1VerifyNikSubStep2 from './steps/Step1VerifyNik/Step1VerifyNikSubStep2';
|
||||||
|
import Step1VerifyNikSubStep3 from './steps/Step1VerifyNik/Step1VerifyNikSubStep3';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep1 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep1';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep2 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep2';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep3 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep3';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep4 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep4';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep5 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep5';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep6 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep6';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep7 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep7';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep8 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep8';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep9 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep9';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep10 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep10';
|
||||||
|
import Step2PassportApplicationQuestionnaireSubStep11 from './steps/Step2PassportApplicationQuestionnaire/Step2PassportApplicationQuestionnaireSubStep11';
|
||||||
|
import Step3UploadDocuments from './steps/Step3UploadDocuments/Step3UploadDocuments';
|
||||||
|
import Step4ApplicantAdditionalDataSubStep1 from './steps/Step4ApplicantAdditionalData/Step4ApplicantAdditionalDataSubStep1';
|
||||||
|
import Step4ApplicantAdditionalDataSubStep2 from './steps/Step4ApplicantAdditionalData/Step4ApplicantAdditionalDataSubStep2';
|
||||||
|
import Step5ApplicationTypeAndApplicantData from './steps/Step5ApplicationTypeAndApplicantData/Step5ApplicationTypeAndApplicantData';
|
||||||
|
import Step6ApplicationTypeAndApplicantData from './steps/Step6ApplicationTypeAndApplicantData/Step6ApplicationTypeAndApplicantData';
|
||||||
|
import Step7ApplicationFeeDetails from './steps/Step7ApplicationFeeDetails/Step7ApplicationFeeDetails';
|
||||||
|
|
||||||
|
// Navigation
|
||||||
|
import {RootStackParamList} from '../../navigation/type';
|
||||||
|
|
||||||
|
// Types
|
||||||
|
import {
|
||||||
|
StepValidationStatus,
|
||||||
|
StepValidationStatusSetter,
|
||||||
|
} from '../../../types/step';
|
||||||
|
|
||||||
|
// Data & Styles
|
||||||
|
import passportForOptions from '../../data/Options/PassportForOptions';
|
||||||
|
import Colors from '../../../assets/styles/Colors';
|
||||||
|
import styles from './styles';
|
||||||
|
import {changeStep} from '../../utils/stepNavigation';
|
||||||
|
import InfoToast from '../../components/InfoToast';
|
||||||
|
|
||||||
type RegularPassportScreenNavigationProp = NativeStackNavigationProp<
|
type RegularPassportScreenNavigationProp = NativeStackNavigationProp<
|
||||||
RootStackParamList,
|
RootStackParamList,
|
||||||
'RegularPassport'
|
'RegularPassport'
|
||||||
>;
|
>;
|
||||||
|
|
||||||
type RenderApplicationStepsContentProps = {
|
type RenderApplicationStepsContentProps = {
|
||||||
|
navigation: any;
|
||||||
step: number;
|
step: number;
|
||||||
subStep: number;
|
subStep: number;
|
||||||
setStep: (step: number) => void;
|
setStep: (step: number) => void;
|
||||||
@ -72,12 +91,18 @@ type RenderApplicationStepsContentProps = {
|
|||||||
showEditDataSheet: () => void;
|
showEditDataSheet: () => void;
|
||||||
showSearchLocationSheet: () => void;
|
showSearchLocationSheet: () => void;
|
||||||
showSelectDateSheet: () => void;
|
showSelectDateSheet: () => void;
|
||||||
|
selectedDestinationCountryOption: string;
|
||||||
|
setSelectedDestinationCountryOption: (val: string) => void;
|
||||||
|
stepValidationStatus: StepValidationStatus;
|
||||||
|
setStepValidationStatus: StepValidationStatusSetter;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
const RenderApplicationStepsContent = (
|
const RenderApplicationStepsContent = (
|
||||||
props: RenderApplicationStepsContentProps,
|
props: RenderApplicationStepsContentProps,
|
||||||
) => {
|
) => {
|
||||||
const {
|
const {
|
||||||
|
navigation,
|
||||||
step,
|
step,
|
||||||
subStep,
|
subStep,
|
||||||
setStep,
|
setStep,
|
||||||
@ -86,6 +111,8 @@ const RenderApplicationStepsContent = (
|
|||||||
setSelectedOption,
|
setSelectedOption,
|
||||||
selectedPassportOption,
|
selectedPassportOption,
|
||||||
setSelectedPassportOption,
|
setSelectedPassportOption,
|
||||||
|
selectedDestinationCountryOption,
|
||||||
|
setSelectedDestinationCountryOption,
|
||||||
checkedOption,
|
checkedOption,
|
||||||
setCheckedOption,
|
setCheckedOption,
|
||||||
showDontHaveYetDialog,
|
showDontHaveYetDialog,
|
||||||
@ -99,19 +126,30 @@ const RenderApplicationStepsContent = (
|
|||||||
showEditDataSheet,
|
showEditDataSheet,
|
||||||
showSearchLocationSheet,
|
showSearchLocationSheet,
|
||||||
showSelectDateSheet,
|
showSelectDateSheet,
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
if (step === 1) {
|
if (step === 1) {
|
||||||
switch (subStep) {
|
switch (subStep) {
|
||||||
case 1:
|
case 1:
|
||||||
return <Step1PersonalInfoSubStep1 setSubStep={setSubStep} />;
|
return <Step1VerifyNikSubStep1 setSubStep={setSubStep} />;
|
||||||
case 2:
|
case 2:
|
||||||
return <Step1PersonalInfoSubStep2 setSubStep={setSubStep} />;
|
return <Step1VerifyNikSubStep2 setSubStep={setSubStep} />;
|
||||||
case 3:
|
case 3:
|
||||||
return (
|
return (
|
||||||
<Step1PersonalInfoSubStep3
|
<Step1VerifyNikSubStep3
|
||||||
|
step={step}
|
||||||
setStep={setStep}
|
setStep={setStep}
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
|
setStepValidationStatus={setStepValidationStatus}
|
||||||
|
onSubStepValidation={isValid => {
|
||||||
|
setStepValidationStatus(prev => ({
|
||||||
|
...prev,
|
||||||
|
1: isValid ? 'completed' : 'invalid',
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
editedCompletedRef={editedCompletedRef}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
@ -123,17 +161,20 @@ const RenderApplicationStepsContent = (
|
|||||||
switch (subStep) {
|
switch (subStep) {
|
||||||
case 1:
|
case 1:
|
||||||
return (
|
return (
|
||||||
<Step2SupportingDocsSubStep1
|
<Step2PassportApplicationQuestionnaireSubStep1
|
||||||
|
step={step}
|
||||||
setStep={setStep}
|
setStep={setStep}
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
|
setStepValidationStatus={setStepValidationStatus}
|
||||||
selectedPassportOption={selectedPassportOption}
|
selectedPassportOption={selectedPassportOption}
|
||||||
setSelectedPassportOption={setSelectedPassportOption}
|
setSelectedPassportOption={setSelectedPassportOption}
|
||||||
showDontHaveYetDialog={showDontHaveYetDialog}
|
showDontHaveYetDialog={showDontHaveYetDialog}
|
||||||
|
editedCompletedRef={editedCompletedRef}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case 2:
|
case 2:
|
||||||
return (
|
return (
|
||||||
<Step2SupportingDocsSubStep2
|
<Step2PassportApplicationQuestionnaireSubStep2
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
selectedOption={selectedOption}
|
selectedOption={selectedOption}
|
||||||
setSelectedOption={setSelectedOption}
|
setSelectedOption={setSelectedOption}
|
||||||
@ -142,46 +183,89 @@ const RenderApplicationStepsContent = (
|
|||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case 3:
|
case 3:
|
||||||
return <Step2SupportingDocsSubStep3 setSubStep={setSubStep} />;
|
return (
|
||||||
|
<Step2PassportApplicationQuestionnaireSubStep3
|
||||||
|
setSubStep={setSubStep}
|
||||||
|
/>
|
||||||
|
);
|
||||||
case 4:
|
case 4:
|
||||||
return <Step2SupportingDocsSubStep4 setSubStep={setSubStep} />;
|
return (
|
||||||
|
<Step2PassportApplicationQuestionnaireSubStep4
|
||||||
|
setSubStep={setSubStep}
|
||||||
|
/>
|
||||||
|
);
|
||||||
case 5:
|
case 5:
|
||||||
return <Step2SupportingDocsSubStep5 setSubStep={setSubStep} />;
|
return (
|
||||||
|
<Step2PassportApplicationQuestionnaireSubStep5
|
||||||
|
setSubStep={setSubStep}
|
||||||
|
/>
|
||||||
|
);
|
||||||
case 6:
|
case 6:
|
||||||
return (
|
return (
|
||||||
<Step2SupportingDocsSubStep6
|
<Step2PassportApplicationQuestionnaireSubStep6
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
selectedOption={selectedOption}
|
selectedOption={selectedOption}
|
||||||
setSelectedOption={setSelectedOption}
|
setSelectedOption={setSelectedOption}
|
||||||
|
selectedPassportOption={selectedPassportOption}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case 7:
|
case 7:
|
||||||
return (
|
return (
|
||||||
<Step2SupportingDocsSubStep7
|
<Step2PassportApplicationQuestionnaireSubStep7
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
selectedOption={selectedOption}
|
selectedDestinationCountryOption={selectedDestinationCountryOption}
|
||||||
setSelectedOption={setSelectedOption}
|
setSelectedDestinationCountryOption={
|
||||||
|
setSelectedDestinationCountryOption
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case 8:
|
case 8:
|
||||||
return <Step2SupportingDocsSubStep8 setSubStep={setSubStep} />;
|
return (
|
||||||
|
<Step2PassportApplicationQuestionnaireSubStep8
|
||||||
|
setSubStep={setSubStep}
|
||||||
|
/>
|
||||||
|
);
|
||||||
case 9:
|
case 9:
|
||||||
return (
|
return (
|
||||||
<Step2SupportingDocsSubStep9
|
<Step2PassportApplicationQuestionnaireSubStep9
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
selectedOption={selectedOption}
|
selectedOption={selectedOption}
|
||||||
setSelectedOption={setSelectedOption}
|
setSelectedOption={setSelectedOption}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case 10:
|
case 10:
|
||||||
return <Step2SupportingDocsSubStep10 setSubStep={setSubStep} />;
|
|
||||||
case 11:
|
|
||||||
return (
|
return (
|
||||||
<Step2SupportingDocsSubStep11
|
<Step2PassportApplicationQuestionnaireSubStep10
|
||||||
|
step={step}
|
||||||
setStep={setStep}
|
setStep={setStep}
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
|
setStepValidationStatus={setStepValidationStatus}
|
||||||
|
selectedDestinationCountryOption={selectedDestinationCountryOption}
|
||||||
|
onSubStepValidation={isValid => {
|
||||||
|
setStepValidationStatus(prev => ({
|
||||||
|
...prev,
|
||||||
|
2: isValid ? 'completed' : 'invalid',
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
editedCompletedRef={editedCompletedRef}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
case 11:
|
||||||
|
return (
|
||||||
|
<Step2PassportApplicationQuestionnaireSubStep11
|
||||||
|
step={step}
|
||||||
|
setStep={setStep}
|
||||||
|
setSubStep={setSubStep}
|
||||||
|
setStepValidationStatus={setStepValidationStatus}
|
||||||
selectedOption={selectedOption}
|
selectedOption={selectedOption}
|
||||||
setSelectedOption={setSelectedOption}
|
setSelectedOption={setSelectedOption}
|
||||||
|
onSubStepValidation={isValid => {
|
||||||
|
setStepValidationStatus(prev => ({
|
||||||
|
...prev,
|
||||||
|
2: isValid ? 'completed' : 'invalid',
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
editedCompletedRef={editedCompletedRef}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
@ -193,18 +277,30 @@ const RenderApplicationStepsContent = (
|
|||||||
switch (subStep) {
|
switch (subStep) {
|
||||||
case 1:
|
case 1:
|
||||||
return (
|
return (
|
||||||
<Step4DataConfirmationSubStep1
|
<Step4ApplicantAdditionalDataSubStep1
|
||||||
|
step={step}
|
||||||
setStep={setStep}
|
setStep={setStep}
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
|
setStepValidationStatus={setStepValidationStatus}
|
||||||
checkedOption={checkedOption}
|
checkedOption={checkedOption}
|
||||||
setCheckedOption={setCheckedOption}
|
setCheckedOption={setCheckedOption}
|
||||||
|
editedCompletedRef={editedCompletedRef}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case 2:
|
case 2:
|
||||||
return (
|
return (
|
||||||
<Step4DataConfirmationSubStep2
|
<Step4ApplicantAdditionalDataSubStep2
|
||||||
|
step={step}
|
||||||
setStep={setStep}
|
setStep={setStep}
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
|
setStepValidationStatus={setStepValidationStatus}
|
||||||
|
onSubStepValidation={isValid => {
|
||||||
|
setStepValidationStatus(prev => ({
|
||||||
|
...prev,
|
||||||
|
4: isValid ? 'completed' : 'invalid',
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
editedCompletedRef={editedCompletedRef}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -212,27 +308,42 @@ const RenderApplicationStepsContent = (
|
|||||||
switch (step) {
|
switch (step) {
|
||||||
case 3:
|
case 3:
|
||||||
return (
|
return (
|
||||||
<Step3Payment
|
<Step3UploadDocuments
|
||||||
|
step={step}
|
||||||
setStep={setStep}
|
setStep={setStep}
|
||||||
setSubStep={setSubStep}
|
setSubStep={setSubStep}
|
||||||
|
setStepValidationStatus={setStepValidationStatus}
|
||||||
selectedPassportOption={selectedPassportOption}
|
selectedPassportOption={selectedPassportOption}
|
||||||
showCivilStatusDocumentsInfoDialog={
|
showCivilStatusDocumentsInfoDialog={
|
||||||
showCivilStatusDocumentsInfoDialog
|
showCivilStatusDocumentsInfoDialog
|
||||||
}
|
}
|
||||||
|
selectedDestinationCountryOption={selectedDestinationCountryOption}
|
||||||
|
onSubStepValidation={isValid => {
|
||||||
|
setStepValidationStatus(prev => ({
|
||||||
|
...prev,
|
||||||
|
3: isValid ? 'completed' : 'invalid',
|
||||||
|
}));
|
||||||
|
}}
|
||||||
|
editedCompletedRef={editedCompletedRef}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case 5:
|
case 5:
|
||||||
return (
|
return (
|
||||||
<Step5Verification
|
<Step5ApplicationTypeAndApplicantData
|
||||||
setStep={setStep}
|
setStep={setStep}
|
||||||
setSubStep={setSubStep}
|
|
||||||
passportAppointmentData={passportAppointmentData}
|
|
||||||
showEditDataSheet={showEditDataSheet}
|
showEditDataSheet={showEditDataSheet}
|
||||||
|
navigation={navigation}
|
||||||
|
onSubStepValidation={() => {
|
||||||
|
setStepValidationStatus(prev => ({
|
||||||
|
...prev,
|
||||||
|
5: 'completed',
|
||||||
|
}));
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
case 6:
|
case 6:
|
||||||
return (
|
return (
|
||||||
<Step6Processing
|
<Step6ApplicationTypeAndApplicantData
|
||||||
showFinalizationConfirmationDialog={
|
showFinalizationConfirmationDialog={
|
||||||
showFinalizationConfirmationDialog
|
showFinalizationConfirmationDialog
|
||||||
}
|
}
|
||||||
@ -243,9 +354,15 @@ const RenderApplicationStepsContent = (
|
|||||||
);
|
);
|
||||||
case 7:
|
case 7:
|
||||||
return (
|
return (
|
||||||
<Step7Completion
|
<Step7ApplicationFeeDetails
|
||||||
showSubmitSuccessDialog={showSubmitSuccessDialog}
|
showSubmitSuccessDialog={showSubmitSuccessDialog}
|
||||||
setLastCompletedSteps={setLastCompletedSteps}
|
setLastCompletedSteps={setLastCompletedSteps}
|
||||||
|
onSubStepValidation={() => {
|
||||||
|
setStepValidationStatus(prev => ({
|
||||||
|
...prev,
|
||||||
|
7: 'completed',
|
||||||
|
}));
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
default:
|
default:
|
||||||
@ -304,15 +421,36 @@ function RegularPassportScreen() {
|
|||||||
// State management
|
// State management
|
||||||
const [selectedOption, setSelectedOption] = useState('');
|
const [selectedOption, setSelectedOption] = useState('');
|
||||||
const [selectedPassportOption, setSelectedPassportOption] = useState('');
|
const [selectedPassportOption, setSelectedPassportOption] = useState('');
|
||||||
|
const [
|
||||||
|
selectedDestinationCountryOption,
|
||||||
|
setSelectedDestinationCountryOption,
|
||||||
|
] = useState('');
|
||||||
const [checkedOption, setCheckedOption] = useState(false);
|
const [checkedOption, setCheckedOption] = useState(false);
|
||||||
const [showApplicationStepsContent, setShowApplicationStepsContent] =
|
const [showApplicationStepsContent, setShowApplicationStepsContent] =
|
||||||
useState(false);
|
useState(false);
|
||||||
|
|
||||||
|
const [toastVisible, setToastVisible] = useState(false);
|
||||||
|
const [toastMessage, setToastMessage] = useState('');
|
||||||
|
|
||||||
const [step, setStep] = useState(1);
|
const [step, setStep] = useState(1);
|
||||||
const [subStep, setSubStep] = useState(1);
|
const [subStep, setSubStep] = useState(1);
|
||||||
const [completedSteps, setCompletedSteps] = useState<number[]>(
|
const [completedSteps, setCompletedSteps] = useState<number[]>(
|
||||||
[...Array(step - 1)].map((_, i) => i + 1),
|
[...Array(step - 1)].map((_, i) => i + 1),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Step status states
|
||||||
|
const [stepValidationStatus, setStepValidationStatus] = useState<{
|
||||||
|
[key: number]: 'completed' | 'incomplete' | 'invalid';
|
||||||
|
}>({
|
||||||
|
1: 'incomplete',
|
||||||
|
2: 'incomplete',
|
||||||
|
3: 'incomplete',
|
||||||
|
4: 'incomplete',
|
||||||
|
5: 'incomplete',
|
||||||
|
6: 'incomplete',
|
||||||
|
7: 'incomplete',
|
||||||
|
});
|
||||||
|
|
||||||
// Dialog visibility states
|
// Dialog visibility states
|
||||||
const [visible, setVisible] = useState(false);
|
const [visible, setVisible] = useState(false);
|
||||||
const [visibleDontHaveYetDialog, setVisibleDontHaveYetDialog] =
|
const [visibleDontHaveYetDialog, setVisibleDontHaveYetDialog] =
|
||||||
@ -385,14 +523,27 @@ function RegularPassportScreen() {
|
|||||||
const showSelectDateSheet = () => setVisibleSelectDateSheet(true);
|
const showSelectDateSheet = () => setVisibleSelectDateSheet(true);
|
||||||
const hideSelectDateSheet = () => setVisibleSelectDateSheet(false);
|
const hideSelectDateSheet = () => setVisibleSelectDateSheet(false);
|
||||||
|
|
||||||
|
const editedCompletedRef = useRef<Set<number>>(new Set());
|
||||||
|
|
||||||
const stepTitles: {[key: number]: string} = {
|
const stepTitles: {[key: number]: string} = {
|
||||||
1: 'Informasi Pribadi',
|
1: 'Verifikasi NIK',
|
||||||
2: 'Dokumen Pendukung',
|
2: 'Kuesioner Permohonan Paspor (PERDIM)',
|
||||||
3: 'Pembayaran',
|
3: 'Unggah Dokumen',
|
||||||
4: 'Konfirmasi Data',
|
4: 'Data Tambahan Pemohon',
|
||||||
5: 'Verifikasi',
|
5: 'Jenis Permohonan dan Data Pemohon',
|
||||||
6: 'Pemrosesan',
|
6: 'Jenis Permohonan dan Data Pemohon',
|
||||||
7: 'Selesai',
|
7: 'Rincian Biaya Permohonan',
|
||||||
|
};
|
||||||
|
|
||||||
|
const getStepTitle = (step: number, subStep: number) => {
|
||||||
|
if (step === 4) {
|
||||||
|
if (subStep === 1) {
|
||||||
|
return 'Data Tambahan Pemohon (1/2)';
|
||||||
|
} else if (subStep === 2) {
|
||||||
|
return 'Data Tambahan Pemohon (2/2)';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return stepTitles[step];
|
||||||
};
|
};
|
||||||
|
|
||||||
// Back handler for showing/hiding steps content
|
// Back handler for showing/hiding steps content
|
||||||
@ -430,17 +581,49 @@ function RegularPassportScreen() {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const showInfoToast = (msg: string) => {
|
||||||
|
setToastMessage(msg);
|
||||||
|
setToastVisible(true);
|
||||||
|
};
|
||||||
|
|
||||||
// Render steps or questionnaire
|
// Render steps or questionnaire
|
||||||
const renderApplicationStepsContent = showApplicationStepsContent ? (
|
const renderApplicationStepsContent = showApplicationStepsContent ? (
|
||||||
<>
|
<>
|
||||||
<View style={styles.applicationStepsContainer}>
|
<View style={styles.applicationStepsContainer}>
|
||||||
<Text style={styles.stepTitle}>{stepTitles[step]}</Text>
|
<Text style={styles.stepTitle}>{getStepTitle(step, subStep)}</Text>
|
||||||
<StepIndicator
|
<StepIndicator
|
||||||
currentStep={step}
|
currentStep={step}
|
||||||
totalSteps={7}
|
totalSteps={7}
|
||||||
completedSteps={completedSteps}
|
completedSteps={completedSteps}
|
||||||
|
validationStatus={stepValidationStatus}
|
||||||
|
onStepPress={(targetStep: number) => {
|
||||||
|
const isCurrentStep7 = step === 7;
|
||||||
|
const isTargetStepIn1to6 = targetStep >= 1 && targetStep <= 6;
|
||||||
|
|
||||||
|
const toastMessage = isCurrentStep7
|
||||||
|
? 'Tak dapat kembali – langkah terakhir.'
|
||||||
|
: !isTargetStepIn1to6
|
||||||
|
? 'Lengkapi langkah 1 – 6 dulu'
|
||||||
|
: null;
|
||||||
|
|
||||||
|
if (toastMessage) {
|
||||||
|
showInfoToast(toastMessage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: targetStep,
|
||||||
|
setStep,
|
||||||
|
setSubStep: () => setSubStep(1),
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<RenderApplicationStepsContent
|
<RenderApplicationStepsContent
|
||||||
|
navigation={navigation}
|
||||||
step={step}
|
step={step}
|
||||||
subStep={subStep}
|
subStep={subStep}
|
||||||
setStep={setStep}
|
setStep={setStep}
|
||||||
@ -449,6 +632,10 @@ function RegularPassportScreen() {
|
|||||||
setSelectedOption={setSelectedOption}
|
setSelectedOption={setSelectedOption}
|
||||||
selectedPassportOption={selectedPassportOption}
|
selectedPassportOption={selectedPassportOption}
|
||||||
setSelectedPassportOption={setSelectedPassportOption}
|
setSelectedPassportOption={setSelectedPassportOption}
|
||||||
|
selectedDestinationCountryOption={selectedDestinationCountryOption}
|
||||||
|
setSelectedDestinationCountryOption={
|
||||||
|
setSelectedDestinationCountryOption
|
||||||
|
}
|
||||||
checkedOption={checkedOption}
|
checkedOption={checkedOption}
|
||||||
setCheckedOption={setCheckedOption}
|
setCheckedOption={setCheckedOption}
|
||||||
showDontHaveYetDialog={showDontHaveYetDialog}
|
showDontHaveYetDialog={showDontHaveYetDialog}
|
||||||
@ -466,6 +653,9 @@ function RegularPassportScreen() {
|
|||||||
showEditDataSheet={showEditDataSheet}
|
showEditDataSheet={showEditDataSheet}
|
||||||
showSearchLocationSheet={showSearchLocationSheet}
|
showSearchLocationSheet={showSearchLocationSheet}
|
||||||
showSelectDateSheet={showSelectDateSheet}
|
showSelectDateSheet={showSelectDateSheet}
|
||||||
|
stepValidationStatus={stepValidationStatus}
|
||||||
|
setStepValidationStatus={setStepValidationStatus}
|
||||||
|
editedCompletedRef={editedCompletedRef}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
@ -473,7 +663,7 @@ function RegularPassportScreen() {
|
|||||||
<DialogDontHaveYetPassport
|
<DialogDontHaveYetPassport
|
||||||
visible={visibleDontHaveYetDialog}
|
visible={visibleDontHaveYetDialog}
|
||||||
onClose={hideDontHaveYetDialog}
|
onClose={hideDontHaveYetDialog}
|
||||||
onContinue={() => setSubStep(2)}
|
onContinue={() => setSubStep(6)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
@ -524,7 +714,19 @@ function RegularPassportScreen() {
|
|||||||
visible={visibleFinalizationConfirmationDialog}
|
visible={visibleFinalizationConfirmationDialog}
|
||||||
onClose={hideFinalizationConfirmationDialog}
|
onClose={hideFinalizationConfirmationDialog}
|
||||||
onContinue={() => {
|
onContinue={() => {
|
||||||
setStep(7);
|
setStepValidationStatus(prev => ({
|
||||||
|
...prev,
|
||||||
|
6: 'completed',
|
||||||
|
}));
|
||||||
|
|
||||||
|
const canProceedToStep7 = [1, 2, 3, 4, 5, 6].every(
|
||||||
|
s => stepValidationStatus[s] === 'completed',
|
||||||
|
);
|
||||||
|
|
||||||
|
!canProceedToStep7
|
||||||
|
? showInfoToast('Lengkapi semua langkah terlebih dahulu.')
|
||||||
|
: setStep(7);
|
||||||
|
|
||||||
hideFinalizationConfirmationDialog();
|
hideFinalizationConfirmationDialog();
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@ -605,6 +807,11 @@ function RegularPassportScreen() {
|
|||||||
setShowApplicationStepsContent(true);
|
setShowApplicationStepsContent(true);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
<InfoToast
|
||||||
|
visible={toastVisible}
|
||||||
|
message={toastMessage}
|
||||||
|
onDismiss={() => setToastVisible(false)}
|
||||||
|
/>
|
||||||
</PaperProvider>
|
</PaperProvider>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
|
@ -4,13 +4,13 @@ import {Button} from 'react-native-paper';
|
|||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
|
||||||
type Step1PersonalInfoSubStep1Props = {
|
type Step1VerifyNikSubStep1Props = {
|
||||||
setSubStep: (val: number) => void;
|
setSubStep: (val: number) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step1PersonalInfoSubStep1 = ({
|
const Step1VerifyNikSubStep1 = ({
|
||||||
setSubStep,
|
setSubStep,
|
||||||
}: Step1PersonalInfoSubStep1Props) => {
|
}: Step1VerifyNikSubStep1Props) => {
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
@ -51,4 +51,4 @@ const Step1PersonalInfoSubStep1 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step1PersonalInfoSubStep1;
|
export default Step1VerifyNikSubStep1;
|
@ -4,13 +4,13 @@ import {Button} from 'react-native-paper';
|
|||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
|
||||||
type Step1PersonalInfoSubStep2Props = {
|
type Step1VerifyNikSubStep2Props = {
|
||||||
setSubStep: (val: number) => void;
|
setSubStep: (val: number) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step1PersonalInfoSubStep2 = ({
|
const Step1VerifyNikSubStep2 = ({
|
||||||
setSubStep,
|
setSubStep,
|
||||||
}: Step1PersonalInfoSubStep2Props) => {
|
}: Step1VerifyNikSubStep2Props) => {
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
@ -45,4 +45,4 @@ const Step1PersonalInfoSubStep2 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step1PersonalInfoSubStep2;
|
export default Step1VerifyNikSubStep2;
|
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, {RefObject, useState} from 'react';
|
||||||
import {ScrollView, View} from 'react-native';
|
import {ScrollView, View} from 'react-native';
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
@ -6,16 +6,56 @@ import TextInputComponent from '../../../../components/TextInput';
|
|||||||
import genderData from '../../../../data/DropdownData/GenderData';
|
import genderData from '../../../../data/DropdownData/GenderData';
|
||||||
import civilStatusData from '../../../../data/DropdownData/CivilStatusData';
|
import civilStatusData from '../../../../data/DropdownData/CivilStatusData';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
import {changeStep} from '../../../../utils/stepNavigation';
|
||||||
|
import {StepValidationStatusSetter} from '../../../../../types/step';
|
||||||
|
|
||||||
type Step1PersonalInfoSubStep3Props = {
|
type Step1VerifyNikSubStep3Props = {
|
||||||
|
step: number;
|
||||||
setStep: (val: number) => void;
|
setStep: (val: number) => void;
|
||||||
setSubStep: (val: number) => void;
|
setSubStep: (val: number) => void;
|
||||||
|
setStepValidationStatus: StepValidationStatusSetter;
|
||||||
|
onSubStepValidation: (isValid: boolean) => void;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step1PersonalInfoSubStep3 = ({
|
const Step1VerifyNikSubStep3 = ({
|
||||||
|
step,
|
||||||
setStep,
|
setStep,
|
||||||
setSubStep,
|
setSubStep,
|
||||||
}: Step1PersonalInfoSubStep3Props) => {
|
setStepValidationStatus,
|
||||||
|
onSubStepValidation,
|
||||||
|
editedCompletedRef,
|
||||||
|
}: Step1VerifyNikSubStep3Props) => {
|
||||||
|
const [fullName, setFullName] = useState('');
|
||||||
|
const [nik, setNik] = useState('');
|
||||||
|
const [birthDate, setBirthDate] = useState('');
|
||||||
|
const [gender, setGender] = useState('');
|
||||||
|
const [civilStatus, setCivilStatus] = useState('');
|
||||||
|
|
||||||
|
const onNextPress = () => {
|
||||||
|
const isFormValid =
|
||||||
|
fullName.trim() !== '' &&
|
||||||
|
nik.trim() !== '' &&
|
||||||
|
birthDate.trim() !== '' &&
|
||||||
|
gender.trim() !== '' &&
|
||||||
|
civilStatus.trim() !== '';
|
||||||
|
|
||||||
|
if (isFormValid) {
|
||||||
|
onSubStepValidation(true);
|
||||||
|
} else {
|
||||||
|
onSubStepValidation(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: 2,
|
||||||
|
setStep,
|
||||||
|
setSubStep: () => setSubStep(1),
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
@ -28,11 +68,15 @@ const Step1PersonalInfoSubStep3 = ({
|
|||||||
title="Nama Lengkap Pemohon"
|
title="Nama Lengkap Pemohon"
|
||||||
placeholder="Nama Lengkap Anda"
|
placeholder="Nama Lengkap Anda"
|
||||||
isRequired
|
isRequired
|
||||||
|
value={fullName}
|
||||||
|
onChangeText={setFullName}
|
||||||
/>
|
/>
|
||||||
<TextInputComponent
|
<TextInputComponent
|
||||||
title="NIK"
|
title="NIK"
|
||||||
placeholder="Nama NIK Anda"
|
placeholder="Nama NIK Anda"
|
||||||
isRequired
|
isRequired
|
||||||
|
value={nik}
|
||||||
|
onChangeText={setNik}
|
||||||
/>
|
/>
|
||||||
<View style={styles.subStepTextInputRowContainer}>
|
<View style={styles.subStepTextInputRowContainer}>
|
||||||
<View style={styles.subStepTextInputFlex}>
|
<View style={styles.subStepTextInputFlex}>
|
||||||
@ -41,6 +85,8 @@ const Step1PersonalInfoSubStep3 = ({
|
|||||||
placeholder="DD/MM/YYYY"
|
placeholder="DD/MM/YYYY"
|
||||||
isRequired
|
isRequired
|
||||||
isDate
|
isDate
|
||||||
|
value={birthDate}
|
||||||
|
onChangeText={setBirthDate}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
<View style={styles.subStepTextInputFlex}>
|
<View style={styles.subStepTextInputFlex}>
|
||||||
@ -50,6 +96,8 @@ const Step1PersonalInfoSubStep3 = ({
|
|||||||
isRequired
|
isRequired
|
||||||
isDropdown
|
isDropdown
|
||||||
dropdownItemData={genderData}
|
dropdownItemData={genderData}
|
||||||
|
value={gender}
|
||||||
|
onChangeText={setGender}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
@ -59,16 +107,15 @@ const Step1PersonalInfoSubStep3 = ({
|
|||||||
isRequired
|
isRequired
|
||||||
isDropdown
|
isDropdown
|
||||||
dropdownItemData={civilStatusData}
|
dropdownItemData={civilStatusData}
|
||||||
|
value={civilStatus}
|
||||||
|
onChangeText={setCivilStatus}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<View style={styles.subStepButtonContainer}>
|
<View style={styles.subStepButtonContainer}>
|
||||||
<Button
|
<Button
|
||||||
mode="contained"
|
mode="contained"
|
||||||
onPress={() => {
|
onPress={onNextPress}
|
||||||
setStep(2);
|
|
||||||
setSubStep(1);
|
|
||||||
}}
|
|
||||||
style={styles.subStepButtonContained}
|
style={styles.subStepButtonContained}
|
||||||
textColor={Colors.neutral100.color}>
|
textColor={Colors.neutral100.color}>
|
||||||
Lanjut
|
Lanjut
|
||||||
@ -86,4 +133,4 @@ const Step1PersonalInfoSubStep3 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step1PersonalInfoSubStep3;
|
export default Step1VerifyNikSubStep3;
|
@ -1,40 +1,59 @@
|
|||||||
import React from 'react';
|
import React, {RefObject, useRef} from 'react';
|
||||||
import {View, Pressable, Text} from 'react-native';
|
import {View, Pressable, Text} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
||||||
import hasHadPassportBeforeOptions from '../../../../data/Options/HasHadPassportBeforeOptions';
|
import hasHadPassportBeforeOptions from '../../../../data/Options/HasHadPassportBeforeOptions';
|
||||||
|
import {Button} from 'react-native-paper';
|
||||||
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
import {changeStep} from '../../../../utils/stepNavigation';
|
||||||
|
import {StepValidationStatusSetter} from '../../../../../types/step';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep1Props = {
|
type Step2PassportApplicationQuestionnaireSubStep1Props = {
|
||||||
|
step: number;
|
||||||
setStep: (step: number) => void;
|
setStep: (step: number) => void;
|
||||||
setSubStep: (subStep: number) => void;
|
setSubStep: (subStep: number) => void;
|
||||||
|
setStepValidationStatus: StepValidationStatusSetter;
|
||||||
selectedPassportOption: string;
|
selectedPassportOption: string;
|
||||||
setSelectedPassportOption: (value: string) => void;
|
setSelectedPassportOption: (value: string) => void;
|
||||||
showDontHaveYetDialog: () => void;
|
showDontHaveYetDialog: () => void;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep1 = ({
|
const Step2PassportApplicationQuestionnaireSubStep1 = ({
|
||||||
|
step,
|
||||||
setStep,
|
setStep,
|
||||||
setSubStep,
|
setSubStep,
|
||||||
|
setStepValidationStatus,
|
||||||
selectedPassportOption,
|
selectedPassportOption,
|
||||||
setSelectedPassportOption,
|
setSelectedPassportOption,
|
||||||
showDontHaveYetDialog,
|
showDontHaveYetDialog,
|
||||||
}: Step2SupportingDocsSubStep1Props) => {
|
editedCompletedRef,
|
||||||
|
}: Step2PassportApplicationQuestionnaireSubStep1Props) => {
|
||||||
|
const onBackPress = () => {
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: 1,
|
||||||
|
setStep,
|
||||||
|
setSubStep: () => setSubStep(3),
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={() => {
|
style={({pressed}) => ({
|
||||||
setStep(1);
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
setSubStep(3);
|
})}
|
||||||
}}
|
onPress={onBackPress}>
|
||||||
style={({pressed}) => [
|
<Button
|
||||||
styles.subStepButtonBackWrapper,
|
mode="contained"
|
||||||
{
|
icon="chevron-left"
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
textColor={Colors.neutral100.color}
|
||||||
},
|
style={styles.subStepButtonBackContainer}>
|
||||||
]}>
|
Kembali
|
||||||
<Icon name="chevron-left" size={24} />
|
</Button>
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
@ -59,4 +78,4 @@ const Step2SupportingDocsSubStep1 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep1;
|
export default Step2PassportApplicationQuestionnaireSubStep1;
|
@ -0,0 +1,126 @@
|
|||||||
|
import React, {RefObject, useState} from 'react';
|
||||||
|
import {ScrollView, View, Text, Pressable} from 'react-native';
|
||||||
|
import {Button} from 'react-native-paper';
|
||||||
|
import styles from '../styles';
|
||||||
|
import TextInputComponent from '../../../../components/TextInput';
|
||||||
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
import familyRelationshipData from '../../../../data/DropdownData/FamilyRelationshipData';
|
||||||
|
import {changeStep} from '../../../../utils/stepNavigation';
|
||||||
|
import {StepValidationStatusSetter} from '../../../../../types/step';
|
||||||
|
|
||||||
|
type Step2PassportApplicationQuestionnaireSubStep10Props = {
|
||||||
|
step: number;
|
||||||
|
setStep: (step: number) => void;
|
||||||
|
setSubStep: (step: number) => void;
|
||||||
|
setStepValidationStatus: StepValidationStatusSetter;
|
||||||
|
selectedDestinationCountryOption: string;
|
||||||
|
onSubStepValidation: (isValid: boolean) => void;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Step2PassportApplicationQuestionnaireSubStep10 = (
|
||||||
|
props: Step2PassportApplicationQuestionnaireSubStep10Props,
|
||||||
|
) => {
|
||||||
|
const {
|
||||||
|
step,
|
||||||
|
setStep,
|
||||||
|
setSubStep,
|
||||||
|
setStepValidationStatus,
|
||||||
|
selectedDestinationCountryOption,
|
||||||
|
onSubStepValidation,
|
||||||
|
editedCompletedRef,
|
||||||
|
} = props;
|
||||||
|
|
||||||
|
const [relativeName, setRelativeName] = useState('');
|
||||||
|
const [relativePhone, setRelativePhone] = useState('');
|
||||||
|
const [relativeRelationship, setRelativeRelationship] = useState('');
|
||||||
|
|
||||||
|
const onNextPress = () => {
|
||||||
|
const isFormValid =
|
||||||
|
relativeName.trim() !== '' &&
|
||||||
|
relativePhone.trim() !== '' &&
|
||||||
|
relativeRelationship.trim() !== '';
|
||||||
|
|
||||||
|
if (selectedDestinationCountryOption === 'destination_country_not_set') {
|
||||||
|
if (isFormValid) {
|
||||||
|
onSubStepValidation(true);
|
||||||
|
}
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: 3,
|
||||||
|
setStep,
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
setSubStep(11);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ScrollView>
|
||||||
|
<View style={styles.subStepContainer}>
|
||||||
|
<Pressable
|
||||||
|
style={({pressed}) => ({
|
||||||
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
|
})}
|
||||||
|
onPress={() => {
|
||||||
|
selectedDestinationCountryOption === 'destination_country_not_set'
|
||||||
|
? setSubStep(7)
|
||||||
|
: setSubStep(9);
|
||||||
|
}}>
|
||||||
|
<Button
|
||||||
|
mode="contained"
|
||||||
|
icon="chevron-left"
|
||||||
|
textColor={Colors.neutral100.color}
|
||||||
|
style={styles.subStepButtonBackContainer}>
|
||||||
|
Kembali
|
||||||
|
</Button>
|
||||||
|
</Pressable>
|
||||||
|
|
||||||
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
|
<Text style={styles.questionnaireData}>
|
||||||
|
Nomor telepon keluarga/kerabat terdekat Anda di Indonesia yang dapat
|
||||||
|
dihubungi
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<TextInputComponent
|
||||||
|
title="Nama Kerabat"
|
||||||
|
placeholder="Masukkan Nama Kerabat Anda"
|
||||||
|
isRequired
|
||||||
|
value={relativeName}
|
||||||
|
onChangeText={setRelativeName}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextInputComponent
|
||||||
|
title="Nomor Telepon"
|
||||||
|
placeholder="Contoh: 08513456789"
|
||||||
|
isRequired
|
||||||
|
value={relativePhone}
|
||||||
|
onChangeText={setRelativePhone}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextInputComponent
|
||||||
|
title="Keterangan Hubungan Keluarga"
|
||||||
|
placeholder="Pilih Hubungan"
|
||||||
|
isRequired
|
||||||
|
isDropdown
|
||||||
|
dropdownItemData={familyRelationshipData}
|
||||||
|
value={relativeRelationship}
|
||||||
|
onChangeText={setRelativeRelationship}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
mode="contained"
|
||||||
|
onPress={onNextPress}
|
||||||
|
style={styles.subStepButtonContained}
|
||||||
|
textColor={Colors.neutral100.color}>
|
||||||
|
Lanjut
|
||||||
|
</Button>
|
||||||
|
</View>
|
||||||
|
</ScrollView>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Step2PassportApplicationQuestionnaireSubStep10;
|
@ -1,6 +1,5 @@
|
|||||||
import React from 'react';
|
import React, {RefObject, useState} from 'react';
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
import {ScrollView, View, Text, Pressable} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import FontFamily from '../../../../../assets/styles/FontFamily';
|
import FontFamily from '../../../../../assets/styles/FontFamily';
|
||||||
@ -9,34 +8,71 @@ import destinationFamilyContactOptions from '../../../../data/Options/Destinatio
|
|||||||
import familyRelationshipData from '../../../../data/DropdownData/FamilyRelationshipData';
|
import familyRelationshipData from '../../../../data/DropdownData/FamilyRelationshipData';
|
||||||
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
import {changeStep} from '../../../../utils/stepNavigation';
|
||||||
|
import {StepValidationStatusSetter} from '../../../../../types/step';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep11Props = {
|
type Step2PassportApplicationQuestionnaireSubStep11Props = {
|
||||||
|
step: number;
|
||||||
setStep: (step: number) => void;
|
setStep: (step: number) => void;
|
||||||
setSubStep: (subStep: number) => void;
|
setSubStep: (subStep: number) => void;
|
||||||
|
setStepValidationStatus: StepValidationStatusSetter;
|
||||||
selectedOption: string;
|
selectedOption: string;
|
||||||
setSelectedOption: (value: string) => void;
|
setSelectedOption: (value: string) => void;
|
||||||
|
onSubStepValidation: (isValid: boolean) => void;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep11 = ({
|
const Step2PassportApplicationQuestionnaireSubStep11 = ({
|
||||||
|
step,
|
||||||
setStep,
|
setStep,
|
||||||
setSubStep,
|
setSubStep,
|
||||||
|
setStepValidationStatus,
|
||||||
selectedOption,
|
selectedOption,
|
||||||
setSelectedOption,
|
setSelectedOption,
|
||||||
}: Step2SupportingDocsSubStep11Props) => {
|
onSubStepValidation,
|
||||||
|
editedCompletedRef,
|
||||||
|
}: Step2PassportApplicationQuestionnaireSubStep11Props) => {
|
||||||
|
const [relativeName, setRelativeName] = useState('');
|
||||||
|
const [phoneNumber, setPhoneNumber] = useState('');
|
||||||
|
const [relationship, setRelationship] = useState('');
|
||||||
|
|
||||||
|
const onNextPress = () => {
|
||||||
|
const isFormValid =
|
||||||
|
relativeName.trim() !== '' &&
|
||||||
|
phoneNumber.trim() !== '' &&
|
||||||
|
relationship.trim() !== '' &&
|
||||||
|
selectedOption.trim() !== '';
|
||||||
|
|
||||||
|
if (isFormValid) {
|
||||||
|
onSubStepValidation(true);
|
||||||
|
} else {
|
||||||
|
onSubStepValidation(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: 3,
|
||||||
|
setStep,
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={() => setSubStep(10)}
|
style={({pressed}) => ({
|
||||||
style={({pressed}) => [
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
styles.subStepButtonBackWrapper,
|
})}
|
||||||
{
|
onPress={() => setSubStep(10)}>
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
<Button
|
||||||
marginBottom: 8,
|
mode="contained"
|
||||||
},
|
icon="chevron-left"
|
||||||
]}>
|
textColor={Colors.neutral100.color}
|
||||||
<Icon name="chevron-left" size={24} />
|
style={styles.subStepButtonBackContainer}>
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
@ -56,11 +92,15 @@ const Step2SupportingDocsSubStep11 = ({
|
|||||||
<TextInputComponent
|
<TextInputComponent
|
||||||
title="Nama Kerabat"
|
title="Nama Kerabat"
|
||||||
placeholder="Masukkan Nama Kerabat Anda"
|
placeholder="Masukkan Nama Kerabat Anda"
|
||||||
|
value={relativeName}
|
||||||
|
onChangeText={setRelativeName}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TextInputComponent
|
<TextInputComponent
|
||||||
title="Nomor Telepon"
|
title="Nomor Telepon"
|
||||||
placeholder="Contoh: 08513456789"
|
placeholder="Contoh: 08513456789"
|
||||||
|
value={phoneNumber}
|
||||||
|
onChangeText={setPhoneNumber}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TextInputComponent
|
<TextInputComponent
|
||||||
@ -68,6 +108,8 @@ const Step2SupportingDocsSubStep11 = ({
|
|||||||
placeholder="Pilih Hubungan"
|
placeholder="Pilih Hubungan"
|
||||||
isDropdown
|
isDropdown
|
||||||
dropdownItemData={familyRelationshipData}
|
dropdownItemData={familyRelationshipData}
|
||||||
|
value={relationship}
|
||||||
|
onChangeText={setRelationship}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{destinationFamilyContactOptions.map(options => (
|
{destinationFamilyContactOptions.map(options => (
|
||||||
@ -84,10 +126,7 @@ const Step2SupportingDocsSubStep11 = ({
|
|||||||
|
|
||||||
<Button
|
<Button
|
||||||
mode="contained"
|
mode="contained"
|
||||||
onPress={() => {
|
onPress={onNextPress}
|
||||||
setStep(3);
|
|
||||||
setSubStep(1);
|
|
||||||
}}
|
|
||||||
style={styles.subStepButtonContained}
|
style={styles.subStepButtonContained}
|
||||||
textColor={Colors.neutral100.color}>
|
textColor={Colors.neutral100.color}>
|
||||||
Lanjut
|
Lanjut
|
||||||
@ -97,4 +136,4 @@ const Step2SupportingDocsSubStep11 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep11;
|
export default Step2PassportApplicationQuestionnaireSubStep11;
|
@ -7,7 +7,7 @@ import Colors from '../../../../../assets/styles/Colors';
|
|||||||
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep2Props = {
|
type Step2PassportApplicationQuestionnaireSubStep2Props = {
|
||||||
setSubStep: (step: number) => void;
|
setSubStep: (step: number) => void;
|
||||||
selectedOption: string;
|
selectedOption: string;
|
||||||
setSelectedOption: (value: string) => void;
|
setSelectedOption: (value: string) => void;
|
||||||
@ -15,26 +15,30 @@ type Step2SupportingDocsSubStep2Props = {
|
|||||||
showLostOrDamagedPassportDialog: () => void;
|
showLostOrDamagedPassportDialog: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep2 = ({
|
const Step2PassportApplicationQuestionnaireSubStep2 = ({
|
||||||
setSubStep,
|
setSubStep,
|
||||||
selectedOption,
|
selectedOption,
|
||||||
setSelectedOption,
|
setSelectedOption,
|
||||||
showPassportInfoDialog,
|
showPassportInfoDialog,
|
||||||
showLostOrDamagedPassportDialog,
|
showLostOrDamagedPassportDialog,
|
||||||
}: Step2SupportingDocsSubStep2Props) => {
|
}: Step2PassportApplicationQuestionnaireSubStep2Props) => {
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
|
style={({pressed}) => ({
|
||||||
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
|
})}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setSubStep(1);
|
setSubStep(1);
|
||||||
}}
|
}}>
|
||||||
style={({pressed}) => [
|
<Button
|
||||||
styles.subStepButtonBackWrapper,
|
mode="contained"
|
||||||
{transform: [{scale: pressed ? 0.99 : 1}]},
|
icon="chevron-left"
|
||||||
]}>
|
textColor={Colors.neutral100.color}
|
||||||
<Icon name="chevron-left" size={24} />
|
style={styles.subStepButtonBackContainer}>
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
@ -94,4 +98,4 @@ const Step2SupportingDocsSubStep2 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep2;
|
export default Step2PassportApplicationQuestionnaireSubStep2;
|
@ -1,36 +1,36 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {ScrollView, View, Pressable, Text} from 'react-native';
|
import {ScrollView, View, Pressable, Text} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep3Props = {
|
type Step2PassportApplicationQuestionnaireSubStep3Props = {
|
||||||
setSubStep: (step: number) => void;
|
setSubStep: (step: number) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep3 = ({
|
const Step2PassportApplicationQuestionnaireSubStep3 = ({
|
||||||
setSubStep,
|
setSubStep,
|
||||||
}: Step2SupportingDocsSubStep3Props) => {
|
}: Step2PassportApplicationQuestionnaireSubStep3Props) => {
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
|
style={({pressed}) => ({
|
||||||
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
|
})}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setSubStep(2);
|
setSubStep(2);
|
||||||
}}
|
}}>
|
||||||
style={({pressed}) => [
|
<Button
|
||||||
styles.subStepButtonBackWrapper,
|
mode="contained"
|
||||||
{
|
icon="chevron-left"
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
textColor={Colors.neutral100.color}
|
||||||
marginBottom: 8,
|
style={styles.subStepButtonBackContainer}>
|
||||||
},
|
Kembali
|
||||||
]}>
|
</Button>
|
||||||
<Icon name="chevron-left" size={24} />
|
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepTextWrapper}>
|
<View style={[styles.subStepTextWrapper, {marginTop: 12}]}>
|
||||||
<Text style={styles.subStepTitle}>
|
<Text style={styles.subStepTitle}>
|
||||||
Ambil/Upload Foto Paspor Lama Anda (Halaman 2 Paspor)
|
Ambil/Upload Foto Paspor Lama Anda (Halaman 2 Paspor)
|
||||||
</Text>
|
</Text>
|
||||||
@ -73,4 +73,4 @@ const Step2SupportingDocsSubStep3 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep3;
|
export default Step2PassportApplicationQuestionnaireSubStep3;
|
@ -1,34 +1,36 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {ScrollView, View, Pressable, Text} from 'react-native';
|
import {ScrollView, View, Pressable, Text} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep4Props = {
|
type Step2PassportApplicationQuestionnaireSubStep4Props = {
|
||||||
setSubStep: (step: number) => void;
|
setSubStep: (step: number) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep4 = ({
|
const Step2PassportApplicationQuestionnaireSubStep4 = ({
|
||||||
setSubStep,
|
setSubStep,
|
||||||
}: Step2SupportingDocsSubStep4Props) => {
|
}: Step2PassportApplicationQuestionnaireSubStep4Props) => {
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={() => setSubStep(3)}
|
style={({pressed}) => ({
|
||||||
style={({pressed}) => [
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
styles.subStepButtonBackWrapper,
|
})}
|
||||||
{
|
onPress={() => {
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
setSubStep(3);
|
||||||
marginBottom: 8,
|
}}>
|
||||||
},
|
<Button
|
||||||
]}>
|
mode="contained"
|
||||||
<Icon name="chevron-left" size={24} />
|
icon="chevron-left"
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
textColor={Colors.neutral100.color}
|
||||||
|
style={styles.subStepButtonBackContainer}>
|
||||||
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepTextWrapper}>
|
<View style={[styles.subStepTextWrapper, {marginTop: 12}]}>
|
||||||
<Text style={styles.subStepTitle}>
|
<Text style={styles.subStepTitle}>
|
||||||
Ambil/Upload Foto Paspor Lama Anda (Halaman 2 Paspor)
|
Ambil/Upload Foto Paspor Lama Anda (Halaman 2 Paspor)
|
||||||
</Text>
|
</Text>
|
||||||
@ -61,4 +63,4 @@ const Step2SupportingDocsSubStep4 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep4;
|
export default Step2PassportApplicationQuestionnaireSubStep4;
|
@ -1,31 +1,34 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
import {ScrollView, View, Text, Pressable} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import TextInputComponent from '../../../../components/TextInput';
|
import TextInputComponent from '../../../../components/TextInput';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep5Props = {
|
type Step2PassportApplicationQuestionnaireSubStep5Props = {
|
||||||
setSubStep: (step: number) => void;
|
setSubStep: (step: number) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep5 = ({
|
const Step2PassportApplicationQuestionnaireSubStep5 = ({
|
||||||
setSubStep,
|
setSubStep,
|
||||||
}: Step2SupportingDocsSubStep5Props) => {
|
}: Step2PassportApplicationQuestionnaireSubStep5Props) => {
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={() => setSubStep(4)}
|
style={({pressed}) => ({
|
||||||
style={({pressed}) => [
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
styles.subStepButtonBackWrapper,
|
})}
|
||||||
{
|
onPress={() => {
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
setSubStep(4);
|
||||||
},
|
}}>
|
||||||
]}>
|
<Button
|
||||||
<Icon name="chevron-left" size={24} />
|
mode="contained"
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
icon="chevron-left"
|
||||||
|
textColor={Colors.neutral100.color}
|
||||||
|
style={styles.subStepButtonBackContainer}>
|
||||||
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
@ -61,4 +64,4 @@ const Step2SupportingDocsSubStep5 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep5;
|
export default Step2PassportApplicationQuestionnaireSubStep5;
|
@ -1,36 +1,46 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
import {ScrollView, View, Text, Pressable} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import passportApplicationPurposeOptions from '../../../../data/Options/PassportApplicationPurposeOptions';
|
import passportApplicationPurposeOptions from '../../../../data/Options/PassportApplicationPurposeOptions';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep6Props = {
|
type Step2PassportApplicationQuestionnaireSubStep6Props = {
|
||||||
setSubStep: (step: number) => void;
|
setSubStep: (step: number) => void;
|
||||||
selectedOption: string;
|
selectedOption: string;
|
||||||
setSelectedOption: (val: string) => void;
|
setSelectedOption: (val: string) => void;
|
||||||
|
selectedPassportOption: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep6 = ({
|
const Step2PassportApplicationQuestionnaireSubStep6 = (
|
||||||
setSubStep,
|
props: Step2PassportApplicationQuestionnaireSubStep6Props,
|
||||||
selectedOption,
|
) => {
|
||||||
setSelectedOption,
|
const {
|
||||||
}: Step2SupportingDocsSubStep6Props) => {
|
setSubStep,
|
||||||
|
selectedOption,
|
||||||
|
setSelectedOption,
|
||||||
|
selectedPassportOption,
|
||||||
|
} = props;
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={() => setSubStep(5)}
|
style={({pressed}) => ({
|
||||||
style={({pressed}) => [
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
styles.subStepButtonBackWrapper,
|
})}
|
||||||
{
|
onPress={() => {
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
selectedPassportOption === 'already'
|
||||||
},
|
? setSubStep(5)
|
||||||
]}>
|
: setSubStep(1);
|
||||||
<Icon name="chevron-left" size={24} />
|
}}>
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
<Button
|
||||||
|
mode="contained"
|
||||||
|
icon="chevron-left"
|
||||||
|
textColor={Colors.neutral100.color}
|
||||||
|
style={styles.subStepButtonBackContainer}>
|
||||||
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
@ -61,4 +71,4 @@ const Step2SupportingDocsSubStep6 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep6;
|
export default Step2PassportApplicationQuestionnaireSubStep6;
|
@ -0,0 +1,102 @@
|
|||||||
|
import React, {useState} from 'react';
|
||||||
|
import {ScrollView, View, Pressable} from 'react-native';
|
||||||
|
import {Button} from 'react-native-paper';
|
||||||
|
import styles from '../styles';
|
||||||
|
import TextInputComponent from '../../../../components/TextInput';
|
||||||
|
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
||||||
|
import destinationCountryOptions from '../../../../data/Options/DestinationCountryOptions';
|
||||||
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
import countryData from '../../../../data/DropdownData/CountryData';
|
||||||
|
|
||||||
|
type Step2PassportApplicationQuestionnaireSubStep7Props = {
|
||||||
|
setSubStep: (step: number) => void;
|
||||||
|
selectedDestinationCountryOption: string;
|
||||||
|
setSelectedDestinationCountryOption: (val: string) => void;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Step2PassportApplicationQuestionnaireSubStep7 = ({
|
||||||
|
setSubStep,
|
||||||
|
selectedDestinationCountryOption,
|
||||||
|
setSelectedDestinationCountryOption,
|
||||||
|
}: Step2PassportApplicationQuestionnaireSubStep7Props) => {
|
||||||
|
const [countryValue, setCountryValue] = useState<string | null>(null);
|
||||||
|
|
||||||
|
const handleCountrySelect = (value: string | null) => {
|
||||||
|
setCountryValue(value);
|
||||||
|
setSelectedDestinationCountryOption('');
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleRadioSelect = (value: string) => {
|
||||||
|
if (value === 'destination_country_not_set') {
|
||||||
|
setSelectedDestinationCountryOption(value);
|
||||||
|
setCountryValue(null);
|
||||||
|
} else {
|
||||||
|
setSelectedDestinationCountryOption(value);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const isRadioButtonSelected = (value: string) => {
|
||||||
|
if (countryValue !== null) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return selectedDestinationCountryOption === value ? value : '';
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ScrollView>
|
||||||
|
<View style={styles.subStepContainer}>
|
||||||
|
<Pressable
|
||||||
|
style={({pressed}) => ({
|
||||||
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
|
})}
|
||||||
|
onPress={() => {
|
||||||
|
setSubStep(6);
|
||||||
|
setSelectedDestinationCountryOption('');
|
||||||
|
}}>
|
||||||
|
<Button
|
||||||
|
mode="contained"
|
||||||
|
icon="chevron-left"
|
||||||
|
textColor={Colors.neutral100.color}
|
||||||
|
style={styles.subStepButtonBackContainer}>
|
||||||
|
Kembali
|
||||||
|
</Button>
|
||||||
|
</Pressable>
|
||||||
|
|
||||||
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
|
<TextInputComponent
|
||||||
|
title="Negara mana yang akan Anda tuju?"
|
||||||
|
placeholder="Masukkan negara tujuan"
|
||||||
|
isDropdownCountry
|
||||||
|
dropdownCountryItemData={countryData}
|
||||||
|
countryValue={countryValue}
|
||||||
|
setCountryValue={handleCountrySelect}
|
||||||
|
/>
|
||||||
|
{destinationCountryOptions.map(option => (
|
||||||
|
<RadioButtonOptionComponent
|
||||||
|
key={option.value}
|
||||||
|
label={option.label}
|
||||||
|
description={option.description}
|
||||||
|
value={option.value}
|
||||||
|
selectedValue={isRadioButtonSelected(option.value)}
|
||||||
|
onSelect={() => handleRadioSelect(option.value)}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
mode="contained"
|
||||||
|
onPress={() => {
|
||||||
|
selectedDestinationCountryOption === 'destination_country_not_set'
|
||||||
|
? setSubStep(10)
|
||||||
|
: setSubStep(8);
|
||||||
|
}}
|
||||||
|
style={styles.subStepButtonContained}
|
||||||
|
textColor={Colors.neutral100.color}>
|
||||||
|
Lanjut
|
||||||
|
</Button>
|
||||||
|
</View>
|
||||||
|
</ScrollView>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Step2PassportApplicationQuestionnaireSubStep7;
|
@ -1,31 +1,32 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
import {ScrollView, View, Pressable} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import TextInputComponent from '../../../../components/TextInput';
|
import TextInputComponent from '../../../../components/TextInput';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep8Props = {
|
type Step2PassportApplicationQuestionnaireSubStep8Props = {
|
||||||
setSubStep: (step: number) => void;
|
setSubStep: (step: number) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep8 = ({
|
const Step2PassportApplicationQuestionnaireSubStep8 = ({
|
||||||
setSubStep,
|
setSubStep,
|
||||||
}: Step2SupportingDocsSubStep8Props) => {
|
}: Step2PassportApplicationQuestionnaireSubStep8Props) => {
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={() => setSubStep(7)}
|
style={({pressed}) => ({
|
||||||
style={({pressed}) => [
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
styles.subStepButtonBackWrapper,
|
})}
|
||||||
{
|
onPress={() => setSubStep(7)}>
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
<Button
|
||||||
},
|
mode="contained"
|
||||||
]}>
|
icon="chevron-left"
|
||||||
<Icon name="chevron-left" size={24} />
|
textColor={Colors.neutral100.color}
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
style={styles.subStepButtonBackContainer}>
|
||||||
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
@ -50,4 +51,4 @@ const Step2SupportingDocsSubStep8 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep8;
|
export default Step2PassportApplicationQuestionnaireSubStep8;
|
@ -1,36 +1,37 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
import {ScrollView, View, Text, Pressable} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import durationAbroadOptions from '../../../../data/Options/DurationAbroadOptions';
|
import durationAbroadOptions from '../../../../data/Options/DurationAbroadOptions';
|
||||||
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep9Props = {
|
type Step2PassportApplicationQuestionnaireSubStep9Props = {
|
||||||
setSubStep: (step: number) => void;
|
setSubStep: (step: number) => void;
|
||||||
selectedOption: string;
|
selectedOption: string;
|
||||||
setSelectedOption: (value: string) => void;
|
setSelectedOption: (value: string) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep9 = ({
|
const Step2PassportApplicationQuestionnaireSubStep9 = ({
|
||||||
setSubStep,
|
setSubStep,
|
||||||
selectedOption,
|
selectedOption,
|
||||||
setSelectedOption,
|
setSelectedOption,
|
||||||
}: Step2SupportingDocsSubStep9Props) => {
|
}: Step2PassportApplicationQuestionnaireSubStep9Props) => {
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={() => setSubStep(8)}
|
style={({pressed}) => ({
|
||||||
style={({pressed}) => [
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
styles.subStepButtonBackWrapper,
|
})}
|
||||||
{
|
onPress={() => setSubStep(8)}>
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
<Button
|
||||||
},
|
mode="contained"
|
||||||
]}>
|
icon="chevron-left"
|
||||||
<Icon name="chevron-left" size={24} />
|
textColor={Colors.neutral100.color}
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
style={styles.subStepButtonBackContainer}>
|
||||||
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
<View style={styles.subStepQuestionnaireOptionContainer}>
|
||||||
@ -61,4 +62,4 @@ const Step2SupportingDocsSubStep9 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep9;
|
export default Step2PassportApplicationQuestionnaireSubStep9;
|
@ -1,72 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
|
||||||
import styles from '../styles';
|
|
||||||
import TextInputComponent from '../../../../components/TextInput';
|
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
|
||||||
import familyRelationshipData from '../../../../data/DropdownData/FamilyRelationshipData';
|
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep10Props = {
|
|
||||||
setSubStep: (step: number) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep10 = ({
|
|
||||||
setSubStep,
|
|
||||||
}: Step2SupportingDocsSubStep10Props) => {
|
|
||||||
return (
|
|
||||||
<ScrollView>
|
|
||||||
<View style={styles.subStepContainer}>
|
|
||||||
<Pressable
|
|
||||||
onPress={() => setSubStep(9)}
|
|
||||||
style={({pressed}) => [
|
|
||||||
styles.subStepButtonBackWrapper,
|
|
||||||
{
|
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
|
||||||
marginBottom: 8,
|
|
||||||
},
|
|
||||||
]}>
|
|
||||||
<Icon name="chevron-left" size={24} />
|
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
|
||||||
</Pressable>
|
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
|
||||||
<Text style={styles.questionnaireData}>
|
|
||||||
Nomor telepon keluarga/kerabat terdekat Anda di Indonesia yang dapat
|
|
||||||
dihubungi
|
|
||||||
</Text>
|
|
||||||
|
|
||||||
<TextInputComponent
|
|
||||||
title="Nama Kerabat"
|
|
||||||
placeholder="Masukkan Nama Kerabat Anda"
|
|
||||||
isRequired
|
|
||||||
/>
|
|
||||||
|
|
||||||
<TextInputComponent
|
|
||||||
title="Nomor Telepon"
|
|
||||||
placeholder="Contoh: 08513456789"
|
|
||||||
isRequired
|
|
||||||
/>
|
|
||||||
|
|
||||||
<TextInputComponent
|
|
||||||
title="Keterangan Hubungan Keluarga"
|
|
||||||
placeholder="Pilih Hubungan"
|
|
||||||
isRequired
|
|
||||||
isDropdown
|
|
||||||
dropdownItemData={familyRelationshipData}
|
|
||||||
/>
|
|
||||||
</View>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
mode="contained"
|
|
||||||
onPress={() => setSubStep(11)}
|
|
||||||
style={styles.subStepButtonContained}
|
|
||||||
textColor={Colors.neutral100.color}>
|
|
||||||
Lanjut
|
|
||||||
</Button>
|
|
||||||
</View>
|
|
||||||
</ScrollView>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep10;
|
|
@ -1,69 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
|
||||||
import Icon from 'react-native-vector-icons/Feather';
|
|
||||||
import {Button} from 'react-native-paper';
|
|
||||||
import styles from '../styles';
|
|
||||||
import TextInputComponent from '../../../../components/TextInput';
|
|
||||||
import RadioButtonOptionComponent from '../../../../components/RadioButtonOption';
|
|
||||||
import destinationCountryOptions from '../../../../data/Options/DestinationCountryOptions';
|
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
|
||||||
import countryData from '../../../../data/DropdownData/CountryData';
|
|
||||||
|
|
||||||
type Step2SupportingDocsSubStep7Props = {
|
|
||||||
setSubStep: (step: number) => void;
|
|
||||||
selectedOption: string;
|
|
||||||
setSelectedOption: (val: string) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
const Step2SupportingDocsSubStep7 = ({
|
|
||||||
setSubStep,
|
|
||||||
selectedOption,
|
|
||||||
setSelectedOption,
|
|
||||||
}: Step2SupportingDocsSubStep7Props) => {
|
|
||||||
return (
|
|
||||||
<ScrollView>
|
|
||||||
<View style={styles.subStepContainer}>
|
|
||||||
<Pressable
|
|
||||||
onPress={() => setSubStep(6)}
|
|
||||||
style={({pressed}) => [
|
|
||||||
styles.subStepButtonBackWrapper,
|
|
||||||
{
|
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
|
||||||
},
|
|
||||||
]}>
|
|
||||||
<Icon name="chevron-left" size={24} />
|
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
|
||||||
</Pressable>
|
|
||||||
|
|
||||||
<View style={styles.subStepQuestionnaireOptionContainer}>
|
|
||||||
<TextInputComponent
|
|
||||||
title="Negara mana yang akan Anda tuju?"
|
|
||||||
placeholder="Masukkan negara tujuan"
|
|
||||||
isDropdownCountry
|
|
||||||
dropdownCountryItemData={countryData}
|
|
||||||
/>
|
|
||||||
{destinationCountryOptions.map(option => (
|
|
||||||
<RadioButtonOptionComponent
|
|
||||||
key={option.value}
|
|
||||||
label={option.label}
|
|
||||||
description={option.description}
|
|
||||||
value={option.value}
|
|
||||||
selectedValue={selectedOption}
|
|
||||||
onSelect={value => setSelectedOption(value)}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</View>
|
|
||||||
|
|
||||||
<Button
|
|
||||||
mode="contained"
|
|
||||||
onPress={() => setSubStep(8)}
|
|
||||||
style={styles.subStepButtonContained}
|
|
||||||
textColor={Colors.neutral100.color}>
|
|
||||||
Lanjut
|
|
||||||
</Button>
|
|
||||||
</View>
|
|
||||||
</ScrollView>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Step2SupportingDocsSubStep7;
|
|
@ -1,4 +1,4 @@
|
|||||||
import React, {useState} from 'react';
|
import React, {RefObject, useState} from 'react';
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
import {ScrollView, View, Text, Pressable} from 'react-native';
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import Colors from '../../../../../assets/styles/Colors';
|
import Colors from '../../../../../assets/styles/Colors';
|
||||||
@ -7,6 +7,8 @@ import genderData from '../../../../data/DropdownData/GenderData';
|
|||||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
import TextInputComponent from '../../../../components/TextInput';
|
import TextInputComponent from '../../../../components/TextInput';
|
||||||
|
import {changeStep} from '../../../../utils/stepNavigation';
|
||||||
|
import { StepValidationStatusSetter } from '../../../../../types/step';
|
||||||
|
|
||||||
interface BackButtonProps {
|
interface BackButtonProps {
|
||||||
onPress: () => void;
|
onPress: () => void;
|
||||||
@ -17,35 +19,51 @@ interface DocumentUploadSectionProps {
|
|||||||
isRequired?: boolean;
|
isRequired?: boolean;
|
||||||
isIcon?: boolean;
|
isIcon?: boolean;
|
||||||
showDialogCivilStatusDocumentsInfo?: () => void;
|
showDialogCivilStatusDocumentsInfo?: () => void;
|
||||||
|
onUploadSuccess?: () => void;
|
||||||
|
onDelete?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Step3PaymentProps {
|
interface Step3UploadDocumentsProps {
|
||||||
|
step: number;
|
||||||
setStep: (step: number) => void;
|
setStep: (step: number) => void;
|
||||||
setSubStep: (subStep: number) => void;
|
setSubStep: (subStep: number) => void;
|
||||||
|
setStepValidationStatus: StepValidationStatusSetter;
|
||||||
selectedPassportOption: string;
|
selectedPassportOption: string;
|
||||||
|
selectedDestinationCountryOption: string;
|
||||||
showCivilStatusDocumentsInfoDialog: () => void;
|
showCivilStatusDocumentsInfoDialog: () => void;
|
||||||
|
onSubStepValidation: (isValid: boolean) => void;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const BackButton = (props: BackButtonProps) => {
|
const BackButton = (props: BackButtonProps) => {
|
||||||
const {onPress} = props;
|
const {onPress} = props;
|
||||||
return (
|
return (
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={onPress}
|
style={({pressed}) => ({
|
||||||
style={({pressed}) => [
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
styles.subStepButtonBackWrapper,
|
})}
|
||||||
{
|
onPress={onPress}>
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
<Button
|
||||||
marginBottom: 8,
|
mode="contained"
|
||||||
},
|
icon="chevron-left"
|
||||||
]}>
|
textColor={Colors.neutral100.color}
|
||||||
<Icon name="chevron-left" size={24} />
|
style={styles.subStepButtonBackContainer}>
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const DocumentUploadSection = (props: DocumentUploadSectionProps) => {
|
const DocumentUploadSection = (props: DocumentUploadSectionProps) => {
|
||||||
const {title, isRequired, isIcon, showDialogCivilStatusDocumentsInfo} = props;
|
const {
|
||||||
|
title,
|
||||||
|
isRequired,
|
||||||
|
isIcon,
|
||||||
|
showDialogCivilStatusDocumentsInfo,
|
||||||
|
onUploadSuccess,
|
||||||
|
onDelete,
|
||||||
|
} = props;
|
||||||
|
|
||||||
const [uploadedFileName, setUploadedFileName] = useState<string | null>(null);
|
const [uploadedFileName, setUploadedFileName] = useState<string | null>(null);
|
||||||
|
|
||||||
const handleUpload = (p0: string) => {
|
const handleUpload = (p0: string) => {
|
||||||
@ -58,10 +76,12 @@ const DocumentUploadSection = (props: DocumentUploadSectionProps) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setUploadedFileName(fileName);
|
setUploadedFileName(fileName);
|
||||||
|
onUploadSuccess?.();
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDelete = () => {
|
const handleDelete = () => {
|
||||||
setUploadedFileName(null);
|
setUploadedFileName(null);
|
||||||
|
onDelete?.();
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -132,32 +152,77 @@ const DocumentUploadSection = (props: DocumentUploadSectionProps) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step3Payment = (props: Step3PaymentProps) => {
|
const Step3UploadDocuments = (props: Step3UploadDocumentsProps) => {
|
||||||
const {
|
const {
|
||||||
|
step,
|
||||||
setStep,
|
setStep,
|
||||||
setSubStep,
|
setSubStep,
|
||||||
|
setStepValidationStatus,
|
||||||
selectedPassportOption,
|
selectedPassportOption,
|
||||||
|
selectedDestinationCountryOption,
|
||||||
showCivilStatusDocumentsInfoDialog,
|
showCivilStatusDocumentsInfoDialog,
|
||||||
|
onSubStepValidation,
|
||||||
|
editedCompletedRef,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
|
const [isKTPUploaded, setIsKTPUploaded] = useState(false);
|
||||||
|
const [isFamilyCardUploaded, setIsFamilyCardUploaded] = useState(false);
|
||||||
|
const [isCivilStatusUploaded, setIsCivilStatusUploaded] = useState(false);
|
||||||
|
const [isOldPassportUploaded, setIsOldPassportUploaded] = useState(false);
|
||||||
|
|
||||||
|
const onBackPress = () => {
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: 2,
|
||||||
|
setStep,
|
||||||
|
setSubStep: () =>
|
||||||
|
setSubStep(
|
||||||
|
selectedDestinationCountryOption === 'destination_country_not_set'
|
||||||
|
? 10
|
||||||
|
: 11,
|
||||||
|
),
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const onNextPress = () => {
|
||||||
|
const isFormValid =
|
||||||
|
isKTPUploaded &&
|
||||||
|
isFamilyCardUploaded &&
|
||||||
|
isCivilStatusUploaded &&
|
||||||
|
(selectedPassportOption !== 'already' || isOldPassportUploaded);
|
||||||
|
|
||||||
|
if (isFormValid) {
|
||||||
|
onSubStepValidation(true);
|
||||||
|
} else {
|
||||||
|
onSubStepValidation(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: 4,
|
||||||
|
setStep,
|
||||||
|
setSubStep: () => setSubStep(1),
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<BackButton
|
<BackButton onPress={onBackPress} />
|
||||||
onPress={() => {
|
|
||||||
setStep(2);
|
|
||||||
setSubStep(11);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<View style={{marginBottom: 16, gap: 4}}>
|
<View style={{marginTop: 12, marginBottom: 16, gap: 4}}>
|
||||||
<Text style={styles.subStepDesc}>
|
<Text style={styles.subStepDesc}>
|
||||||
Layanan yang cocok untuk Anda adalah{' '}
|
Layanan yang cocok untuk Anda adalah{' '}
|
||||||
{selectedPassportOption !== 'already' ? (
|
{selectedPassportOption !== 'already' ? (
|
||||||
|
<Text style={{...FontFamily.notoSansBold}}>Paspor Baru</Text>
|
||||||
|
) : (
|
||||||
<Text style={{...FontFamily.notoSansBold}}>
|
<Text style={{...FontFamily.notoSansBold}}>
|
||||||
Paspor Penggantian
|
Paspor Penggantian
|
||||||
</Text>
|
</Text>
|
||||||
) : (
|
|
||||||
<Text style={{...FontFamily.notoSansBold}}>Paspor Baru</Text>
|
|
||||||
)}
|
)}
|
||||||
. Silakan unggah kelengkapan dokumen berikut.
|
. Silakan unggah kelengkapan dokumen berikut.
|
||||||
</Text>
|
</Text>
|
||||||
@ -235,25 +300,39 @@ const Step3Payment = (props: Step3PaymentProps) => {
|
|||||||
</View>
|
</View>
|
||||||
|
|
||||||
<View style={styles.subStepSectionButtonContainer}>
|
<View style={styles.subStepSectionButtonContainer}>
|
||||||
<DocumentUploadSection title="e-KTP" isRequired />
|
<DocumentUploadSection
|
||||||
<DocumentUploadSection title="Kartu Keluarga" />
|
title="e-KTP"
|
||||||
|
isRequired
|
||||||
|
onUploadSuccess={() => setIsKTPUploaded(true)}
|
||||||
|
onDelete={() => setIsKTPUploaded(false)}
|
||||||
|
/>
|
||||||
|
<DocumentUploadSection
|
||||||
|
title="Kartu Keluarga"
|
||||||
|
onUploadSuccess={() => setIsFamilyCardUploaded(true)}
|
||||||
|
onDelete={() => setIsFamilyCardUploaded(false)}
|
||||||
|
/>
|
||||||
<DocumentUploadSection
|
<DocumentUploadSection
|
||||||
title="Akta kelahiran/ijazah/akta perkawinan/buku nikah/surat baptis"
|
title="Akta kelahiran/ijazah/akta perkawinan/buku nikah/surat baptis"
|
||||||
isIcon
|
isIcon
|
||||||
showDialogCivilStatusDocumentsInfo={
|
showDialogCivilStatusDocumentsInfo={
|
||||||
showCivilStatusDocumentsInfoDialog
|
showCivilStatusDocumentsInfoDialog
|
||||||
}
|
}
|
||||||
|
onUploadSuccess={() => setIsCivilStatusUploaded(true)}
|
||||||
|
onDelete={() => setIsCivilStatusUploaded(false)}
|
||||||
/>
|
/>
|
||||||
{selectedPassportOption !== 'already' && (
|
{selectedPassportOption === 'already' && (
|
||||||
<DocumentUploadSection title="Paspor Lama" isRequired />
|
<DocumentUploadSection
|
||||||
|
title="Paspor Lama"
|
||||||
|
isRequired
|
||||||
|
onUploadSuccess={() => setIsOldPassportUploaded(true)}
|
||||||
|
onDelete={() => setIsOldPassportUploaded(false)}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
mode="contained"
|
mode="contained"
|
||||||
onPress={() => {
|
onPress={onNextPress}
|
||||||
setStep(4), setSubStep(1);
|
|
||||||
}}
|
|
||||||
style={styles.subStepButtonContained}
|
style={styles.subStepButtonContained}
|
||||||
textColor={Colors.neutral100.color}>
|
textColor={Colors.neutral100.color}>
|
||||||
Lanjut
|
Lanjut
|
||||||
@ -263,4 +342,4 @@ const Step3Payment = (props: Step3PaymentProps) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step3Payment;
|
export default Step3UploadDocuments;
|
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, {RefObject} from 'react';
|
||||||
import {ScrollView, View, Pressable, Text} from 'react-native';
|
import {ScrollView, View, Pressable, Text} from 'react-native';
|
||||||
import {Checkbox, Button} from 'react-native-paper';
|
import {Checkbox, Button} from 'react-native-paper';
|
||||||
import Icon from 'react-native-vector-icons/MaterialIcons';
|
import Icon from 'react-native-vector-icons/MaterialIcons';
|
||||||
@ -9,30 +9,56 @@ import postalCodeData from '../../../../data/DropdownData/PostalCodeData';
|
|||||||
import districtData from '../../../../data/DropdownData/DistrictData';
|
import districtData from '../../../../data/DropdownData/DistrictData';
|
||||||
import cityData from '../../../../data/DropdownData/CityData';
|
import cityData from '../../../../data/DropdownData/CityData';
|
||||||
import provinceData from '../../../../data/DropdownData/ProvinceData';
|
import provinceData from '../../../../data/DropdownData/ProvinceData';
|
||||||
|
import {changeStep} from '../../../../utils/stepNavigation';
|
||||||
|
import { StepValidationStatusSetter } from '../../../../../types/step';
|
||||||
|
|
||||||
type Step4DataConfirmationSubStep1Props = {
|
type Step4ApplicantAdditionalDataSubStep1Props = {
|
||||||
|
step: number;
|
||||||
setStep: (step: number) => void;
|
setStep: (step: number) => void;
|
||||||
setSubStep: (subStep: number) => void;
|
setSubStep: (subStep: number) => void;
|
||||||
|
setStepValidationStatus: StepValidationStatusSetter;
|
||||||
checkedOption: boolean;
|
checkedOption: boolean;
|
||||||
setCheckedOption: React.Dispatch<React.SetStateAction<boolean>>;
|
setCheckedOption: React.Dispatch<React.SetStateAction<boolean>>;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step4DataConfirmationSubStep1: React.FC<
|
const Step4ApplicantAdditionalDataSubStep1: React.FC<
|
||||||
Step4DataConfirmationSubStep1Props
|
Step4ApplicantAdditionalDataSubStep1Props
|
||||||
> = ({setStep, setSubStep, checkedOption, setCheckedOption}) => {
|
> = ({
|
||||||
|
step,
|
||||||
|
setStep,
|
||||||
|
setSubStep,
|
||||||
|
setStepValidationStatus,
|
||||||
|
checkedOption,
|
||||||
|
setCheckedOption,
|
||||||
|
editedCompletedRef,
|
||||||
|
}) => {
|
||||||
|
const onBackPress = () => {
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: 3,
|
||||||
|
setStep,
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={() => {
|
style={({pressed}) => ({
|
||||||
setStep(3);
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
}}
|
marginBottom: 12,
|
||||||
style={({pressed}) => [
|
})}
|
||||||
styles.subStepButtonBackWrapper,
|
onPress={onBackPress}>
|
||||||
{transform: [{scale: pressed ? 0.99 : 1}], marginBottom: 8},
|
<Button
|
||||||
]}>
|
mode="contained"
|
||||||
<Icon name="chevron-left" size={24} />
|
icon="chevron-left"
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
textColor={Colors.neutral100.color}
|
||||||
|
style={styles.subStepButtonBackContainer}>
|
||||||
|
Kembali
|
||||||
|
</Button>
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<Text style={styles.subStepDesc}>
|
<Text style={styles.subStepDesc}>
|
||||||
@ -162,4 +188,4 @@ const Step4DataConfirmationSubStep1: React.FC<
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step4DataConfirmationSubStep1;
|
export default Step4ApplicantAdditionalDataSubStep1;
|
@ -1,6 +1,5 @@
|
|||||||
import React from 'react';
|
import React, {RefObject, useState} from 'react';
|
||||||
import {ScrollView, View, Text, Pressable} from 'react-native';
|
import {ScrollView, View, Text, Pressable} from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/MaterialIcons';
|
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import TextInputComponent from '../../../../components/TextInput';
|
import TextInputComponent from '../../../../components/TextInput';
|
||||||
import {Button} from 'react-native-paper';
|
import {Button} from 'react-native-paper';
|
||||||
@ -8,36 +7,118 @@ import Colors from '../../../../../assets/styles/Colors';
|
|||||||
import jobData from '../../../../data/DropdownData/JobData';
|
import jobData from '../../../../data/DropdownData/JobData';
|
||||||
import nationalityData from '../../../../data/DropdownData/NationalityData';
|
import nationalityData from '../../../../data/DropdownData/NationalityData';
|
||||||
import {PassportAppointment} from '../../../../navigation/type';
|
import {PassportAppointment} from '../../../../navigation/type';
|
||||||
import {
|
import {addData, getData} from '../../../../helper/asyncStorageHelper';
|
||||||
addData,
|
import {changeStep} from '../../../../utils/stepNavigation';
|
||||||
getData,
|
import { StepValidationStatusSetter } from '../../../../../types/step';
|
||||||
} from '../../../../helper/asyncStorageHelper';
|
|
||||||
|
|
||||||
const Step4DataConfirmationSubStep2 = ({
|
type Step4ApplicantAdditionalDataSubStep2Props = {
|
||||||
setStep,
|
step: number;
|
||||||
setSubStep,
|
|
||||||
}: {
|
|
||||||
setStep: (step: number) => void;
|
setStep: (step: number) => void;
|
||||||
setSubStep: (subStep: number) => void;
|
setSubStep: (subStep: number) => void;
|
||||||
}) => {
|
setStepValidationStatus: StepValidationStatusSetter;
|
||||||
|
onSubStepValidation: (isValid: boolean) => void;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Step4ApplicantAdditionalDataSubStep2 = ({
|
||||||
|
step,
|
||||||
|
setStep,
|
||||||
|
setSubStep,
|
||||||
|
setStepValidationStatus,
|
||||||
|
onSubStepValidation,
|
||||||
|
editedCompletedRef,
|
||||||
|
}: Step4ApplicantAdditionalDataSubStep2Props) => {
|
||||||
|
const [job, setJob] = useState('');
|
||||||
|
const [phone, setPhone] = useState('');
|
||||||
|
const [motherName, setMotherName] = useState('');
|
||||||
|
const [motherNation, setMotherNation] = useState('');
|
||||||
|
const [motherAddress, setMotherAddress] = useState('');
|
||||||
|
|
||||||
|
const isFormValid =
|
||||||
|
job.trim() !== '' &&
|
||||||
|
phone.trim() !== '' &&
|
||||||
|
motherName.trim() !== '' &&
|
||||||
|
motherNation.trim() !== '' &&
|
||||||
|
motherAddress.trim() !== '';
|
||||||
|
|
||||||
|
const handleSaveDraft = async () => {
|
||||||
|
if (isFormValid) {
|
||||||
|
onSubStepValidation(true);
|
||||||
|
|
||||||
|
// Ambil data appointment yang sudah tersimpan
|
||||||
|
const storedAppointments: PassportAppointment[] =
|
||||||
|
(await getData('passportAppointments')) || [];
|
||||||
|
|
||||||
|
// Ambil ID terakhir dan hitung ID baru
|
||||||
|
const lastId = storedAppointments.length
|
||||||
|
? Math.max(...storedAppointments.map(item => Number(item.id)))
|
||||||
|
: 0;
|
||||||
|
const nextId = (lastId + 1).toString();
|
||||||
|
|
||||||
|
// Buat appointment baru dengan ID yang sudah dihitung
|
||||||
|
const newAppointment: PassportAppointment = {
|
||||||
|
id: nextId,
|
||||||
|
applicantName: 'Salwa Aisyah Adhani',
|
||||||
|
applicantCode: '1038000008887777',
|
||||||
|
appointmentDate: 'Selasa, 20 Mei 2025',
|
||||||
|
appointmentTime: '10:00-11:00 WIB',
|
||||||
|
serviceUnit: 'Kantor Imigrasi Depok',
|
||||||
|
status: 'Menunggu Pembayaran',
|
||||||
|
submissionDate: 'Kamis, 15 Mei 2025 21:30',
|
||||||
|
serviceCode: 'EH-LP7RNC',
|
||||||
|
applicationDetails: {
|
||||||
|
nationalIdNumber: '3271234560009123456',
|
||||||
|
gender: 'Wanita',
|
||||||
|
applicationType: 'Penggantian Paspor',
|
||||||
|
replacementReason: 'Penuh/Halaman Penuh',
|
||||||
|
applicationPurpose: 'Wisata/Liburan',
|
||||||
|
passportType: 'PASPOR ELEKTRONIK POLIKARBONAT 5 TAHUN',
|
||||||
|
fee: '650.000',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
// Simpan appointment baru
|
||||||
|
await addData<PassportAppointment>(
|
||||||
|
'passportAppointments',
|
||||||
|
newAppointment,
|
||||||
|
);
|
||||||
|
|
||||||
|
const updatedAppointments = await getData('passportAppointments');
|
||||||
|
console.log('Data yang berhasil ditambahkan:', updatedAppointments);
|
||||||
|
} else {
|
||||||
|
onSubStepValidation(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
changeStep({
|
||||||
|
currentStep: step,
|
||||||
|
targetStep: 5,
|
||||||
|
setStep,
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Pressable
|
<Pressable
|
||||||
|
style={({pressed}) => ({
|
||||||
|
transform: [{scale: pressed ? 0.99 : 1}],
|
||||||
|
marginBottom: 12,
|
||||||
|
})}
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setStep(4);
|
setStep(4);
|
||||||
setSubStep(1);
|
setSubStep(1);
|
||||||
}}
|
}}>
|
||||||
style={({pressed}) => [
|
<Button
|
||||||
styles.subStepButtonBackWrapper,
|
mode="contained"
|
||||||
{
|
icon="chevron-left"
|
||||||
transform: [{scale: pressed ? 0.99 : 1}],
|
textColor={Colors.neutral100.color}
|
||||||
marginBottom: 8,
|
style={styles.subStepButtonBackContainer}>
|
||||||
},
|
Kembali
|
||||||
]}>
|
</Button>
|
||||||
<Icon name="chevron-left" size={24} />
|
|
||||||
<Text style={styles.subStepButtonBackText}>Kembali</Text>
|
|
||||||
</Pressable>
|
</Pressable>
|
||||||
|
|
||||||
<Text style={styles.subStepDesc}>
|
<Text style={styles.subStepDesc}>
|
||||||
Data di bawah ini harus sesuai dengan keterangan pada KTP pemohon.
|
Data di bawah ini harus sesuai dengan keterangan pada KTP pemohon.
|
||||||
Data yang bertanda (
|
Data yang bertanda (
|
||||||
@ -59,11 +140,15 @@ const Step4DataConfirmationSubStep2 = ({
|
|||||||
isRequired
|
isRequired
|
||||||
isDropdown
|
isDropdown
|
||||||
dropdownItemData={jobData}
|
dropdownItemData={jobData}
|
||||||
|
value={job}
|
||||||
|
onChangeText={setJob}
|
||||||
/>
|
/>
|
||||||
<TextInputComponent
|
<TextInputComponent
|
||||||
title="Nomor Telepon"
|
title="Nomor Telepon"
|
||||||
placeholder="Contoh: 08513456789"
|
placeholder="Contoh: 08513456789"
|
||||||
isRequired
|
isRequired
|
||||||
|
value={phone}
|
||||||
|
onChangeText={setPhone}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
@ -79,6 +164,8 @@ const Step4DataConfirmationSubStep2 = ({
|
|||||||
title="Nama Ibu"
|
title="Nama Ibu"
|
||||||
placeholder="Masukkan nama lengkap ibu"
|
placeholder="Masukkan nama lengkap ibu"
|
||||||
isRequired
|
isRequired
|
||||||
|
value={motherName}
|
||||||
|
onChangeText={setMotherName}
|
||||||
/>
|
/>
|
||||||
<TextInputComponent
|
<TextInputComponent
|
||||||
title="Kewarganegaraan Ibu"
|
title="Kewarganegaraan Ibu"
|
||||||
@ -86,6 +173,8 @@ const Step4DataConfirmationSubStep2 = ({
|
|||||||
isRequired
|
isRequired
|
||||||
isDropdown
|
isDropdown
|
||||||
dropdownItemData={nationalityData}
|
dropdownItemData={nationalityData}
|
||||||
|
value={motherNation}
|
||||||
|
onChangeText={setMotherNation}
|
||||||
/>
|
/>
|
||||||
<TextInputComponent
|
<TextInputComponent
|
||||||
title="Alamat Ibu"
|
title="Alamat Ibu"
|
||||||
@ -94,6 +183,8 @@ const Step4DataConfirmationSubStep2 = ({
|
|||||||
supportText="0/100 karakter"
|
supportText="0/100 karakter"
|
||||||
containerHeight={90}
|
containerHeight={90}
|
||||||
isMultiline
|
isMultiline
|
||||||
|
value={motherAddress}
|
||||||
|
onChangeText={setMotherAddress}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
@ -153,49 +244,7 @@ const Step4DataConfirmationSubStep2 = ({
|
|||||||
|
|
||||||
<Button
|
<Button
|
||||||
mode="contained"
|
mode="contained"
|
||||||
onPress={async () => {
|
onPress={handleSaveDraft}
|
||||||
// Ambil data appointment yang sudah tersimpan
|
|
||||||
const storedAppointments: PassportAppointment[] =
|
|
||||||
(await getData('passportAppointments')) || [];
|
|
||||||
|
|
||||||
// Ambil ID terakhir dan hitung ID baru
|
|
||||||
const lastId = storedAppointments.length
|
|
||||||
? Math.max(...storedAppointments.map(item => Number(item.id)))
|
|
||||||
: 0;
|
|
||||||
const nextId = (lastId + 1).toString();
|
|
||||||
|
|
||||||
// Buat appointment baru dengan ID yang sudah dihitung
|
|
||||||
const newAppointment: PassportAppointment = {
|
|
||||||
id: nextId,
|
|
||||||
applicantName: 'Salwa Aisyah Adhani',
|
|
||||||
applicantCode: '1038000008887777',
|
|
||||||
appointmentDate: 'Selasa, 20 Mei 2025',
|
|
||||||
appointmentTime: '10:00-11:00 WIB',
|
|
||||||
serviceUnit: 'Kantor Imigrasi Depok',
|
|
||||||
status: 'Menunggu Pembayaran',
|
|
||||||
submissionDate: 'Kamis, 15 Mei 2025 21:30',
|
|
||||||
serviceCode: 'EH-LP7RNC',
|
|
||||||
applicationDetails: {
|
|
||||||
nationalIdNumber: '3271234560009123456',
|
|
||||||
gender: 'Wanita',
|
|
||||||
applicationType: 'Penggantian Paspor',
|
|
||||||
replacementReason: 'Penuh/Halaman Penuh',
|
|
||||||
applicationPurpose: 'Wisata/Liburan',
|
|
||||||
passportType: 'PASPOR ELEKTRONIK POLIKARBONAT 5 TAHUN',
|
|
||||||
fee: '650.000',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Simpan appointment baru
|
|
||||||
await addData<PassportAppointment>(
|
|
||||||
'passportAppointments',
|
|
||||||
newAppointment,
|
|
||||||
);
|
|
||||||
|
|
||||||
const updatedAppointments = await getData('passportAppointments');
|
|
||||||
console.log('Data yang berhasil ditambahkan:', updatedAppointments);
|
|
||||||
setStep(5);
|
|
||||||
}}
|
|
||||||
style={[styles.subStepButtonContained, {marginBottom: 8}]}
|
style={[styles.subStepButtonContained, {marginBottom: 8}]}
|
||||||
textColor={Colors.neutral100.color}>
|
textColor={Colors.neutral100.color}>
|
||||||
Simpan Draft
|
Simpan Draft
|
||||||
@ -205,4 +254,4 @@ const Step4DataConfirmationSubStep2 = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step4DataConfirmationSubStep2;
|
export default Step4ApplicantAdditionalDataSubStep2;
|
@ -7,19 +7,19 @@ import styles from '../styles';
|
|||||||
import {getData} from '../../../../helper/asyncStorageHelper';
|
import {getData} from '../../../../helper/asyncStorageHelper';
|
||||||
import {PassportAppointment} from '../../../../navigation/type';
|
import {PassportAppointment} from '../../../../navigation/type';
|
||||||
|
|
||||||
type Step5VerificationProps = {
|
type Step5ApplicationTypeAndApplicantDataProps = {
|
||||||
setStep: (step: number) => void;
|
setStep: (step: number) => void;
|
||||||
setSubStep: (subStep: number) => void;
|
|
||||||
passportAppointmentData: any[];
|
|
||||||
showEditDataSheet: () => void;
|
showEditDataSheet: () => void;
|
||||||
|
navigation: any;
|
||||||
|
onSubStepValidation: (isValid: boolean) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step5Content = (props: Step5VerificationProps) => {
|
const Step5ApplicationTypeAndApplicantData = (
|
||||||
const {setStep, setSubStep, passportAppointmentData, showEditDataSheet} =
|
props: Step5ApplicationTypeAndApplicantDataProps,
|
||||||
props;
|
) => {
|
||||||
|
const {setStep, showEditDataSheet, navigation, onSubStepValidation} = props;
|
||||||
|
|
||||||
const [lastAppointment, setLastAppointment] =
|
const [lastAppointment, setLastAppointment] = useState<PassportAppointment>();
|
||||||
useState<PassportAppointment>();
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
@ -35,6 +35,18 @@ const Step5Content = (props: Step5VerificationProps) => {
|
|||||||
fetchData();
|
fetchData();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const onNextPress = () => {
|
||||||
|
onSubStepValidation(true);
|
||||||
|
setStep(6);
|
||||||
|
};
|
||||||
|
|
||||||
|
const onBackHomePress = () => {
|
||||||
|
navigation.reset({
|
||||||
|
index: 0,
|
||||||
|
routes: [{name: 'NavigationRoute'}],
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
<Text style={styles.subStepDesc}>
|
<Text style={styles.subStepDesc}>
|
||||||
@ -107,31 +119,34 @@ const Step5Content = (props: Step5VerificationProps) => {
|
|||||||
<View style={[styles.subStepButtonContainer, {marginTop: 12}]}>
|
<View style={[styles.subStepButtonContainer, {marginTop: 12}]}>
|
||||||
<Button
|
<Button
|
||||||
mode="contained"
|
mode="contained"
|
||||||
onPress={() => setStep(6)}
|
onPress={onNextPress}
|
||||||
style={styles.subStepButtonContained}
|
style={styles.subStepButtonContained}
|
||||||
textColor={Colors.neutral100.color}>
|
textColor={Colors.neutral100.color}>
|
||||||
Lanjut
|
Lanjut
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
mode="outlined"
|
mode="outlined"
|
||||||
onPress={() => {
|
onPress={onBackHomePress}
|
||||||
setStep(4);
|
|
||||||
setSubStep(2);
|
|
||||||
}}
|
|
||||||
style={styles.subStepButtonOutlined}
|
style={styles.subStepButtonOutlined}
|
||||||
textColor={Colors.primary30.color}>
|
textColor={Colors.primary30.color}>
|
||||||
Kembali
|
Beranda
|
||||||
</Button>
|
</Button>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const DetailRow = ({label, value}: {label: string; value: string | undefined}) => (
|
const DetailRow = ({
|
||||||
|
label,
|
||||||
|
value,
|
||||||
|
}: {
|
||||||
|
label: string;
|
||||||
|
value: string | undefined;
|
||||||
|
}) => (
|
||||||
<View style={styles.applicantDetailTextContentWrapper}>
|
<View style={styles.applicantDetailTextContentWrapper}>
|
||||||
<Text style={styles.applicantDetailTextTitle}>{label}</Text>
|
<Text style={styles.applicantDetailTextTitle}>{label}</Text>
|
||||||
<Text style={styles.applicantDetailTextDesc}>{value}</Text>
|
<Text style={styles.applicantDetailTextDesc}>{value}</Text>
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
|
|
||||||
export default Step5Content;
|
export default Step5ApplicationTypeAndApplicantData;
|
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, {useState} from 'react';
|
||||||
import {ScrollView, View, Text} from 'react-native';
|
import {ScrollView, View, Text} from 'react-native';
|
||||||
import {Button, Divider} from 'react-native-paper';
|
import {Button, Divider} from 'react-native-paper';
|
||||||
import TextInputComponent from '../../../../components/TextInput';
|
import TextInputComponent from '../../../../components/TextInput';
|
||||||
@ -8,20 +8,23 @@ import FontFamily from '../../../../../assets/styles/FontFamily';
|
|||||||
import arrivalDateGuidelinesData from '../../../../data/Steps/ArrivalDateGuidelinesData';
|
import arrivalDateGuidelinesData from '../../../../data/Steps/ArrivalDateGuidelinesData';
|
||||||
import passportTypeData from '../../../../data/DropdownData/PassportTypeData';
|
import passportTypeData from '../../../../data/DropdownData/PassportTypeData';
|
||||||
|
|
||||||
type Step6ProcessingProps = {
|
type Step6ApplicationTypeAndApplicantDataProps = {
|
||||||
showFinalizationConfirmationDialog: () => void;
|
showFinalizationConfirmationDialog: () => void;
|
||||||
showPassportTypeInfoDialog: () => void;
|
showPassportTypeInfoDialog: () => void;
|
||||||
showSearchLocationSheet: () => void;
|
showSearchLocationSheet: () => void;
|
||||||
showSelectDateSheet: () => void;
|
showSelectDateSheet: () => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step6Processing = (props: Step6ProcessingProps) => {
|
const Step6ApplicationTypeAndApplicantData = (
|
||||||
|
props: Step6ApplicationTypeAndApplicantDataProps,
|
||||||
|
) => {
|
||||||
const {
|
const {
|
||||||
showFinalizationConfirmationDialog,
|
showFinalizationConfirmationDialog,
|
||||||
showPassportTypeInfoDialog,
|
showPassportTypeInfoDialog,
|
||||||
showSearchLocationSheet,
|
showSearchLocationSheet,
|
||||||
showSelectDateSheet,
|
showSelectDateSheet,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={styles.subStepContainer}>
|
<View style={styles.subStepContainer}>
|
||||||
@ -106,4 +109,4 @@ const Step6Processing = (props: Step6ProcessingProps) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step6Processing;
|
export default Step6ApplicationTypeAndApplicantData;
|
@ -9,13 +9,15 @@ import termsAndConditionsData from '../../../../data/Steps/TermsAndContionsData'
|
|||||||
import {PassportAppointment} from '../../../../navigation/type';
|
import {PassportAppointment} from '../../../../navigation/type';
|
||||||
import {getData} from '../../../../helper/asyncStorageHelper';
|
import {getData} from '../../../../helper/asyncStorageHelper';
|
||||||
|
|
||||||
type Step7CompletionProps = {
|
type Step7ApplicationFeeDetailsProps = {
|
||||||
showSubmitSuccessDialog: () => void;
|
showSubmitSuccessDialog: () => void;
|
||||||
setLastCompletedSteps: () => void;
|
setLastCompletedSteps: () => void;
|
||||||
|
onSubStepValidation: (isValid: boolean) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Step7Completion = (props: Step7CompletionProps) => {
|
const Step7ApplicationFeeDetails = (props: Step7ApplicationFeeDetailsProps) => {
|
||||||
const {showSubmitSuccessDialog, setLastCompletedSteps} = props;
|
const {showSubmitSuccessDialog, setLastCompletedSteps, onSubStepValidation} =
|
||||||
|
props;
|
||||||
const [lastAppointment, setLastAppointment] = useState<PassportAppointment>();
|
const [lastAppointment, setLastAppointment] = useState<PassportAppointment>();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -32,6 +34,12 @@ const Step7Completion = (props: Step7CompletionProps) => {
|
|||||||
fetchData();
|
fetchData();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const onNextPress = () => {
|
||||||
|
onSubStepValidation(true);
|
||||||
|
showSubmitSuccessDialog();
|
||||||
|
setLastCompletedSteps();
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
<View style={[styles.subStepContainer, {paddingBottom: 0}]}>
|
<View style={[styles.subStepContainer, {paddingBottom: 0}]}>
|
||||||
@ -215,10 +223,7 @@ const Step7Completion = (props: Step7CompletionProps) => {
|
|||||||
mode="contained"
|
mode="contained"
|
||||||
style={styles.subStepButtonContained}
|
style={styles.subStepButtonContained}
|
||||||
textColor={Colors.neutral100.color}
|
textColor={Colors.neutral100.color}
|
||||||
onPress={() => {
|
onPress={onNextPress}>
|
||||||
showSubmitSuccessDialog();
|
|
||||||
setLastCompletedSteps();
|
|
||||||
}}>
|
|
||||||
Kembali ke Halaman Utama
|
Kembali ke Halaman Utama
|
||||||
</Button>
|
</Button>
|
||||||
</View>
|
</View>
|
||||||
@ -226,4 +231,4 @@ const Step7Completion = (props: Step7CompletionProps) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Step7Completion;
|
export default Step7ApplicationFeeDetails;
|
@ -48,6 +48,10 @@ const styles = StyleSheet.create({
|
|||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
gap: 4,
|
gap: 4,
|
||||||
},
|
},
|
||||||
|
subStepButtonBackContainer: {
|
||||||
|
alignSelf: 'flex-start',
|
||||||
|
backgroundColor: Colors.primary30.color,
|
||||||
|
},
|
||||||
subStepButtonBackText: {
|
subStepButtonBackText: {
|
||||||
...FontFamily.notoSansRegular,
|
...FontFamily.notoSansRegular,
|
||||||
includeFontPadding: false,
|
includeFontPadding: false,
|
||||||
|
53
src/utils/stepNavigation.ts
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import {RefObject} from 'react';
|
||||||
|
export type StepStatus = 'completed' | 'incomplete' | 'invalid';
|
||||||
|
|
||||||
|
interface StepChangeParams {
|
||||||
|
currentStep: number;
|
||||||
|
targetStep: number;
|
||||||
|
setStep: (step: number) => void;
|
||||||
|
setSubStep?: (sub: number) => void;
|
||||||
|
setStepValidationStatus: React.Dispatch<
|
||||||
|
React.SetStateAction<Record<number, StepStatus>>
|
||||||
|
>;
|
||||||
|
editedCompletedRef: RefObject<Set<number>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function changeStep({
|
||||||
|
currentStep,
|
||||||
|
targetStep,
|
||||||
|
setStep,
|
||||||
|
setSubStep,
|
||||||
|
setStepValidationStatus,
|
||||||
|
editedCompletedRef,
|
||||||
|
}: StepChangeParams) {
|
||||||
|
setStepValidationStatus(prev => {
|
||||||
|
const next = {...prev};
|
||||||
|
|
||||||
|
if (currentStep !== targetStep &&
|
||||||
|
editedCompletedRef.current?.has(currentStep)) {
|
||||||
|
next[currentStep] = 'completed';
|
||||||
|
editedCompletedRef.current.delete(currentStep);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prev[targetStep] === 'completed') {
|
||||||
|
editedCompletedRef.current?.add(targetStep);
|
||||||
|
}
|
||||||
|
|
||||||
|
next[targetStep] = 'incomplete';
|
||||||
|
|
||||||
|
if (targetStep > currentStep) {
|
||||||
|
for (let s = 1; s < targetStep; s++) {
|
||||||
|
if (next[s] !== 'completed') next[s] = 'invalid';
|
||||||
|
}
|
||||||
|
} else if (targetStep < currentStep) {
|
||||||
|
for (let s = currentStep; s > targetStep; s--) {
|
||||||
|
if (next[s] !== 'completed') next[s] = 'invalid';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return next;
|
||||||
|
});
|
||||||
|
|
||||||
|
setStep(targetStep);
|
||||||
|
if (setSubStep) setSubStep(1);
|
||||||
|
}
|
7
types/step.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
export type StepStatus = 'incomplete' | 'completed' | 'invalid';
|
||||||
|
|
||||||
|
export type StepValidationStatus = Record<number, StepStatus>;
|
||||||
|
|
||||||
|
export type StepValidationStatusSetter = React.Dispatch<
|
||||||
|
React.SetStateAction<StepValidationStatus>
|
||||||
|
>;
|