moonyeju 2023-10-04
[ADD] design add
@af839a7551c439bd753ed4f68baaebf15d5de0c7
kogas_app/android/app/build.gradle
--- kogas_app/android/app/build.gradle
+++ kogas_app/android/app/build.gradle
@@ -101,6 +101,14 @@
             proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
         }
     }
+    packagingOptions {
+       pickFirst 'lib/x86/libc++_shared.so'
+       pickFirst 'lib/x86_64/libjsc.so'
+       pickFirst 'lib/arm64-v8a/libjsc.so'
+       pickFirst 'lib/arm64-v8a/libc++_shared.so'
+       pickFirst 'lib/x86_64/libc++_shared.so'
+       pickFirst 'lib/armeabi-v7a/libc++_shared.so'
+     }
 }
 
 dependencies {
@@ -119,5 +127,5 @@
         implementation jscFlavor
     }
 }
-
+apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" 
 apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
kogas_app/android/app/src/main/AndroidManifest.xml
--- kogas_app/android/app/src/main/AndroidManifest.xml
+++ kogas_app/android/app/src/main/AndroidManifest.xml
@@ -1,7 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 
     <uses-permission android:name="android.permission.INTERNET" />
-
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <application
       android:name=".MainApplication"
       android:label="@string/app_name"
kogas_app/package-lock.json
--- kogas_app/package-lock.json
+++ kogas_app/package-lock.json
@@ -12,13 +12,17 @@
         "@react-navigation/bottom-tabs": "^6.5.8",
         "@react-navigation/native": "^6.1.7",
         "@react-navigation/stack": "^6.3.17",
+        "axios": "^1.5.0",
         "react": "18.2.0",
         "react-native": "0.72.4",
+        "react-native-blob-util": "^0.19.1",
         "react-native-gesture-handler": "^2.13.1",
+        "react-native-pdf": "^6.7.1",
         "react-native-reanimated": "^3.5.4",
         "react-native-safe-area-context": "^4.7.2",
         "react-native-screens": "^3.25.0",
-        "react-native-vector-icons": "^10.0.0"
+        "react-native-vector-icons": "^10.0.0",
+        "react-native-webview": "^13.6.0"
       },
       "devDependencies": {
         "@babel/core": "^7.20.0",
@@ -28,6 +32,7 @@
         "@react-native/metro-config": "^0.72.11",
         "@tsconfig/react-native": "^3.0.0",
         "@types/react": "^18.0.24",
+        "@types/react-native-vector-icons": "^6.4.14",
         "@types/react-test-renderer": "^18.0.0",
         "babel-jest": "^29.2.1",
         "eslint": "^8.19.0",
@@ -3927,6 +3932,11 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/@react-native/normalize-color": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz",
+      "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA=="
+    },
     "node_modules/@react-native/normalize-colors": {
       "version": "0.72.0",
       "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.72.0.tgz",
@@ -4224,6 +4234,25 @@
         "@types/prop-types": "*",
         "@types/scheduler": "*",
         "csstype": "^3.0.2"
+      }
+    },
+    "node_modules/@types/react-native": {
+      "version": "0.70.14",
+      "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.14.tgz",
+      "integrity": "sha512-Kwc+BYBrnDqvacNxKp1UtcZJnJJnTih2NYmi/ieAKlHdxEPN6sYMwmIwgHdoLHggvml6bf3DYRaH2jt+gzaLjw==",
+      "dev": true,
+      "dependencies": {
+        "@types/react": "*"
+      }
+    },
+    "node_modules/@types/react-native-vector-icons": {
+      "version": "6.4.14",
+      "resolved": "https://registry.npmjs.org/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.14.tgz",
+      "integrity": "sha512-3RaEadfUUImrDed03hwRnYp5QFevcWkWgPUHxj9U9lB6G5uPEGaxXoLWdjgioQ46CvADXUzrDOEYLSVcAn1GQw==",
+      "dev": true,
+      "dependencies": {
+        "@types/react": "*",
+        "@types/react-native": "^0.70"
       }
     },
     "node_modules/@types/react-test-renderer": {
@@ -4925,6 +4954,11 @@
         "has-symbols": "^1.0.3"
       }
     },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
     "node_modules/available-typed-arrays": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -4936,6 +4970,16 @@
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/axios": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
+      "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
+      "dependencies": {
+        "follow-redirects": "^1.15.0",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
       }
     },
     "node_modules/babel-core": {
@@ -5140,6 +5184,11 @@
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
       "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
       "license": "MIT"
+    },
+    "node_modules/base-64": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+      "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA=="
     },
     "node_modules/base64-js": {
       "version": "1.5.1",
@@ -5575,6 +5624,17 @@
       "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
       "license": "MIT"
     },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/command-exists": {
       "version": "1.2.9",
       "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
@@ -5753,6 +5813,11 @@
         "node": ">= 8"
       }
     },
+    "node_modules/crypto-js": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
+      "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q=="
+    },
     "node_modules/csstype": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
@@ -5874,6 +5939,14 @@
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
     "node_modules/denodeify": {
@@ -7044,6 +7117,25 @@
         "node": ">=0.4.0"
       }
     },
+    "node_modules/follow-redirects": {
+      "version": "1.15.3",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
+      "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/for-each": {
       "version": "0.3.3",
       "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
@@ -7052,6 +7144,19 @@
       "license": "MIT",
       "dependencies": {
         "is-callable": "^1.1.3"
+      }
+    },
+    "node_modules/form-data": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
     "node_modules/fresh": {
@@ -10761,6 +10866,11 @@
       "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
       "license": "MIT"
     },
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
     "node_modules/punycode": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
@@ -10936,6 +11046,19 @@
         "react": "18.2.0"
       }
     },
+    "node_modules/react-native-blob-util": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.19.1.tgz",
+      "integrity": "sha512-X1+MAcijR1AEky9dqNTFtsKvUPAoof2qsmmbSYThj/RWIucc2hhzrK3V2BJVU/hemNuz7E0NDaErmpNDpDHtNw==",
+      "dependencies": {
+        "base-64": "0.1.0",
+        "glob": "^7.2.3"
+      },
+      "peerDependencies": {
+        "react": "*",
+        "react-native": "*"
+      }
+    },
     "node_modules/react-native-gesture-handler": {
       "version": "2.13.1",
       "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.13.1.tgz",
@@ -10950,6 +11073,30 @@
       "peerDependencies": {
         "react": "*",
         "react-native": "*"
+      }
+    },
+    "node_modules/react-native-pdf": {
+      "version": "6.7.1",
+      "resolved": "https://registry.npmjs.org/react-native-pdf/-/react-native-pdf-6.7.1.tgz",
+      "integrity": "sha512-zszQygtNBYoUfEtP/fV7zhzGeohDlUksh2p3OzshLrxdY9mw7Tm5VXAxYq4d8HsomRJUbFlJ7rHaTU9AQL800g==",
+      "dependencies": {
+        "crypto-js": "^3.2.0",
+        "deprecated-react-native-prop-types": "^2.3.0"
+      },
+      "peerDependencies": {
+        "react": "*",
+        "react-native": "*",
+        "react-native-blob-util": ">=0.13.7"
+      }
+    },
+    "node_modules/react-native-pdf/node_modules/deprecated-react-native-prop-types": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz",
+      "integrity": "sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA==",
+      "dependencies": {
+        "@react-native/normalize-color": "*",
+        "invariant": "*",
+        "prop-types": "*"
       }
     },
     "node_modules/react-native-reanimated": {
@@ -11050,6 +11197,27 @@
         "node": ">=10"
       }
     },
+    "node_modules/react-native-webview": {
+      "version": "13.6.0",
+      "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.6.0.tgz",
+      "integrity": "sha512-KapVfHEj60e+2QplhqoCMdqW4vDzzvLS3YasfjVoMV4qhsZ3padncMEqOHX6AY4FIAdRzAxG0JQs+kXczAPYeQ==",
+      "dependencies": {
+        "escape-string-regexp": "2.0.0",
+        "invariant": "2.2.4"
+      },
+      "peerDependencies": {
+        "react": "*",
+        "react-native": "*"
+      }
+    },
+    "node_modules/react-native-webview/node_modules/escape-string-regexp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/react-native/node_modules/@jest/types": {
       "version": "26.6.2",
       "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
kogas_app/package.json
--- kogas_app/package.json
+++ kogas_app/package.json
@@ -14,13 +14,17 @@
     "@react-navigation/bottom-tabs": "^6.5.8",
     "@react-navigation/native": "^6.1.7",
     "@react-navigation/stack": "^6.3.17",
+    "axios": "^1.5.0",
     "react": "18.2.0",
     "react-native": "0.72.4",
+    "react-native-blob-util": "^0.19.1",
     "react-native-gesture-handler": "^2.13.1",
+    "react-native-pdf": "^6.7.1",
     "react-native-reanimated": "^3.5.4",
     "react-native-safe-area-context": "^4.7.2",
     "react-native-screens": "^3.25.0",
-    "react-native-vector-icons": "^10.0.0"
+    "react-native-vector-icons": "^10.0.0",
+    "react-native-webview": "^13.6.0"
   },
   "devDependencies": {
     "@babel/core": "^7.20.0",
@@ -30,6 +34,7 @@
     "@react-native/metro-config": "^0.72.11",
     "@tsconfig/react-native": "^3.0.0",
     "@types/react": "^18.0.24",
+    "@types/react-native-vector-icons": "^6.4.14",
     "@types/react-test-renderer": "^18.0.0",
     "babel-jest": "^29.2.1",
     "eslint": "^8.19.0",
kogas_app/src/components/ListItem.js
--- kogas_app/src/components/ListItem.js
+++ kogas_app/src/components/ListItem.js
@@ -1,6 +1,7 @@
 import {Pressable, StyleSheet, Text, View} from 'react-native';
 import {memo} from 'react';
 import {useNavigation} from '@react-navigation/native';
+import { BLACK } from '../color';
 
 const ListItem = memo(({name, item}) => {
   const navigation = useNavigation();
@@ -39,10 +40,13 @@
   container: {
     flexDirection: 'column',
     marginHorizontal: 10,
-    marginVertical:5,
-    borderBottomWidth: 0.5,
-    paddingVertical: 5,
+    marginVertical:10,
+    paddingVertical: 10,
     paddingHorizontal: 15,
+    borderRadius: 20,
+    borderColor: BLACK,
+    borderWidth: 1,
+    
   },
 });
 
kogas_app/src/components/TextInput.js
--- kogas_app/src/components/TextInput.js
+++ kogas_app/src/components/TextInput.js
@@ -10,7 +10,7 @@
 };
 
 export const IconNames = {
-  EMAIL: 'mail-outline',
+  ID: 'lock-closed-outline',
   PASSWORD: 'lock-closed-outline',
 };
 
kogas_app/src/navigations/BottomStack.js
--- kogas_app/src/navigations/BottomStack.js
+++ kogas_app/src/navigations/BottomStack.js
@@ -2,6 +2,7 @@
 import HomeScreen from '../screens/HomeScreen.js';
 import {PRIMARY, WHITE} from '../color';
 import Icon from 'react-native-vector-icons/Ionicons';
+
 import SignatureListScreen from '../screens/SignatureListScreen.js';
 import SettingsScreen from '../screens/SettingsScreen.js';
 import SignatureScreen from '../screens/SignatureScreen.js';
@@ -9,6 +10,7 @@
 const Tab = createBottomTabNavigator();
 
 const BottomStack = () => {
+  Icon.loadFont(); // Ionicons 폰트 로드
   return (
     <Tab.Navigator
       initialRouteName="Home" screenOptions={{ headerShown: false }}>
@@ -16,8 +18,8 @@
         name="Home"
         component={HomeScreen}
         options={{
-          title: 'KOGAS',
-          tabBarLabel: 'KOGAS',
+          title: '홈',
+          tabBarLabel: '홈',
           tabBarIcon: ({color, size}) => (
             <Icon name="home-outline" color={color} size={size} />
           ),
@@ -45,7 +47,7 @@
           },
           headerTintColor: WHITE,
           tabBarIcon: ({color, size}) => (
-            <Icon name="person-circle-outline" color={color} size={size} />
+            <Icon name="settings-outline" color={color} size={size} />
           ),
         }}
       />
kogas_app/src/navigations/MainStack.js
--- kogas_app/src/navigations/MainStack.js
+++ kogas_app/src/navigations/MainStack.js
@@ -1,19 +1,35 @@
-import { Button } from 'react-native';
+import { Button,Text } from 'react-native';
 import { createStackNavigator } from '@react-navigation/stack';
 import BottomStack from './BottomStack';
 import ListDetailScreen from '../screens/ListDetailScreen';
 import {useNavigation} from '@react-navigation/native';
+import { PRIMARY } from '../color';
+import { TouchableOpacity } from 'react-native-gesture-handler';
 const Stack = createStackNavigator();
 
 
 const MainStack = () => {
   const navigation = useNavigation();
+  const a = '수요공급처 000';
   return (
-      <Stack.Navigator initialRouteName="BottomHome" screenOptions={{ headerShown: false }}>
+      <Stack.Navigator initialRouteName="BottomHome" screenOptions={{
+        title: 'KOGAS',
+        tabBarActiveTintColor: PRIMARY.DEFAULT,
+        headerTitleAlign: 'center',
+        headerTintColor: PRIMARY.DEFAULT,
+      headerTitleStyle: { fontWeight: '700' },
+        headerRight: () => (
+    <TouchableOpacity onPress={() => {/* 오른쪽 헤더 버튼 눌렀을 때 수행할 동작 */}}>
+      <Text>{a}</Text>
+    </TouchableOpacity>
+  ),
+      }}>
           <Stack.Screen
         name="BottomHome"
         component={BottomStack}
-        
+        options={{
+          headerLeft: null, // 뒤로 가기 버튼 숨김
+        }}
       />
       <Stack.Screen name="ListDetail"
         component={ListDetailScreen}/>
kogas_app/src/navigations/index.js
--- kogas_app/src/navigations/index.js
+++ kogas_app/src/navigations/index.js
@@ -3,7 +3,7 @@
 import React, {useEffect} from 'react';
 import SignInScreen from '../screens/SignInScreen';
 import MainStack from './MainStack';
-import { PRIMARY } from '../color';
+import PdfOpen from '../test/PdfOpen';
 
 const RootStack = createStackNavigator();
 
@@ -12,15 +12,10 @@
     <NavigationContainer>
       <RootStack.Navigator
         initialRouteName="Main"
-        >
-        <RootStack.Screen name="Login" component={SignInScreen} />
-        <RootStack.Screen name="Main" component={MainStack} options={{
-        title: 'KOGAS',
-        tabBarActiveTintColor: PRIMARY.DEFAULT,
-        headerTitleAlign: 'center',
-        headerTintColor: PRIMARY.DEFAULT,
-        headerTitleStyle: {fontWeight: '700'},
-      }} />
+        screenOptions={{ headerShown: false }}>
+        <RootStack.Screen name="Login" component={SignInScreen}/>
+        <RootStack.Screen name="Main" component={MainStack} />
+        {/* <RootStack.Screen name="Pdf" component={PdfOpen} /> */}
       </RootStack.Navigator>
     </NavigationContainer>
   );
kogas_app/src/screens/HomeScreen.js
--- kogas_app/src/screens/HomeScreen.js
+++ kogas_app/src/screens/HomeScreen.js
@@ -1,22 +1,77 @@
 import { Pressable, StyleSheet, Text, View } from 'react-native';
-import { BLACK, GRAY } from '../color';
+import { BLACK, GRAY, WHITE } from '../color';
 import {useNavigation} from '@react-navigation/native';
 import { FlatList } from 'react-native-gesture-handler';
 import ListItem from '../components/ListItem';
+import { useEffect, useState } from 'react';
 
 const HomeScreen = () => {
   const navigation = useNavigation();
   const mydocs = {
-    all: 3,
-    clear: 2,
-  }
+      id: 1,
+      status: '서명진행중', //상태
+      title: '모바일 구축사업 인수인계 협의2',
+      department: '수요공급처',
+      name: 'aa',
+      registrationDate: '2023-09-25', //등록 날짜
+      content: [{
+        department: '계약운용부',
+        name: 'aaa',
+        status: '서명완료',
+        date: '2023/09/25 15:00'
+      }, {
+        department: '발전영업부',
+        name: 'aaaa',
+        status: '서명 진행중',
+        date: '2023/09/25 15:00'
+        }]
+    }
   const newdocs = {
-    all: 4,
-    clear: 2,
+      id: 1,
+      status: '서명진행중', //상태
+      title: '모바일 구축사업 인수인계 협의2',
+      department: '수요공급처',
+      name: 'bb',
+      registrationDate: '2023-09-25', //등록 날짜
+      content: [{
+        department: '계약운용부',
+        name: 'bbb',
+        status: '서명완료',
+        date: '2023/09/25 15:00'
+      }, {
+        department: '계약운용부',
+        name: 'bbb',
+        status: '서명 진행중',
+        date: '2023/09/25 15:00'
+      },{
+        department: '발전영업부',
+        name: 'bbbb',
+        status: '서명완료',
+        date: '2023/09/25 15:00'
+        }]
   }
-  const myperc = Math.floor(mydocs.clear / mydocs.all * 100);
-  const newperc = Math.floor(mydocs.clear / mydocs.all * 100);
+  const [mycount, setMyCount] = useState(0); // useState로 상태 변수 관리
+  const [newcount, setNewCount] = useState(0); // useState로 상태 변수 관리
 
+  const myperc = Math.floor((mycount / mydocs.content.length) * 100); // mycount 사용
+  const newperc = Math.floor((newcount / newdocs.content.length) * 100); // newcount 사용
+
+  useEffect(() => {
+    setMyCount(0); // 초기화
+    setNewCount(0); // 초기화
+    mydocs.content.forEach((item) => {
+      if (item.status === '서명완료') {
+        setMyCount((prevCount) => prevCount + 1); // 상태 업데이트
+      }
+    });
+
+    newdocs.content.forEach((item) => {
+      if (item.status === '서명완료') {
+        setNewCount((prevCount) => prevCount + 1); // 상태 업데이트
+      }
+    });
+  }, [mydocs, newdocs]);
+  
   const List = [
     {
       id: 1,
@@ -49,45 +104,58 @@
   ];
 
   return (
-    <View>
-    <View>
-      <Text>내 진행 상황</Text>
+    <View style={styles.container}>
+    <View style={styles.containerTop}>
+      <Text style={styles.title}>내 진행 상황</Text>
       <Pressable
             onPress={() => {
-              navigation.navigate('SignatureList');
+              navigation.navigate('ListDetail',{
+            status: mydocs.status,
+            title: mydocs.title,
+            department: mydocs.department,
+            name: mydocs.name,
+            registrationDate: mydocs.registrationDate,
+            content: mydocs.content,
+          });
             }}
         hitSlop={10}
         style={styles.mydocs}
       >
         <View>
           <Text>{myperc}%</Text><Text>내 문서 진행률</Text>
-          <Text>서명 대상자 {mydocs.all}명 중 {mydocs.clear}명이 서명을 완료하였습니다.</Text>
+          <Text>서명 대상자 {mydocs.content.length}명 중 {mycount}명이 서명을 완료하였습니다.</Text>
         </View>
       </Pressable>
       <Pressable
-            // onPress={() => {
-            //   navigation.navigate('SignatureList');
-            // }}
+            onPress={() => {
+              navigation.navigate('ListDetail',{
+            status: newdocs.status,
+            title: newdocs.title,
+            department: newdocs.department,
+            name: newdocs.name,
+            registrationDate: newdocs.registrationDate,
+            content: newdocs.content,
+          });
+            }}
         hitSlop={10}
         style={styles.mydocs}
       >
         <View>
           <Text>{newperc}%</Text><Text>최근 문서 진행률</Text>
-          <Text>서명 대상자 {newdocs.all}명 중 {newdocs.clear}명이 서명을 완료하였습니다.</Text>
+          <Text>서명 대상자 {newdocs.content.length}명 중 {newcount}명이 서명을 완료하였습니다.</Text>
         </View>
       </Pressable>
     </View>
-    <View>
-        <Text style={styles.v}>서명 이력</Text>
+    <View style={styles.containerBottom}>
+        <Text style={styles.title}>서명 이력</Text>
         <View>
         <FlatList
         data={List}
         renderItem={({item}) => (
-          <ListItem name="SignatureListScreen" item={item} />
+          <ListItem name="HomeScreen" item={item} />
         )}
         // windowSize={5}
         ListHeaderComponent={View}
-        // ListHeaderComponentStyle={{height: 10}}
       />
         </View>
     </View>
@@ -95,13 +163,28 @@
   );
 };
 const styles = StyleSheet.create({
-  mydocs: {
-    backgroundColor: GRAY,
-    marginTop:10,
+  container: {
+    backgroundColor: WHITE,
+    flex:1,
   },
-  v: {
-    marginTop: 10,
-    fontWeight: 'bold',
+  containerTop: {
+    
+  },
+  mydocs: {
+    borderWidth: 0.5,
+    borderColor: GRAY,
+    borderRadius: 10, 
+    margin: 10,
+    padding:20,
+  },
+  title: {
+    color: BLACK,
+    //marginTop: 5,
+    fontWeight: '900',
+    borderBottomWidth: 0.5, 
+    borderBottomColor: BLACK,
+    paddingVertical: 5,
+    marginHorizontal:10,
   }
 });
 export default HomeScreen;
kogas_app/src/screens/ListDetailScreen.js
--- kogas_app/src/screens/ListDetailScreen.js
+++ kogas_app/src/screens/ListDetailScreen.js
@@ -8,8 +8,9 @@
   const { name } = route.params;
   const {department} = route.params;
   const {registrationDate} = route.params;
-  const {content} = route.params;
+  const { content } = route.params;
   return (
+    
     <View style={styles.container}>
       <View>
       <Text style={styles.title}>{status}</Text>
@@ -17,7 +18,7 @@
         <Text style={styles.date}>기안자: {department} {name}</Text>
         <Text style={styles.date}>기안일자: {registrationDate}</Text>
       </View>
-      <Button title={'문서다운'}/> 
+      <Button title={'문서보기'}/> 
       <View>
         <Text style={styles.v}>서명 정보</Text>
         <FlatList
kogas_app/src/screens/SettingsScreen.js
--- kogas_app/src/screens/SettingsScreen.js
+++ kogas_app/src/screens/SettingsScreen.js
@@ -1,11 +1,99 @@
-import {Text, View} from 'react-native';
+import { StyleSheet, Switch, Text, View } from 'react-native';
+import PropTypes from 'prop-types';
+import { GRAY, PRIMARY, WHITE } from '../color';
+import { useState } from 'react';
+import Button from '../components/Button';
 
-const SettingsScreen = () => {
+const SettingsScreen = ({navigation}) => {
+  const [alarm, setAlarm] = useState(false);
+  const [dark, setDark] = useState(false);
+
+  const toggleSwitchAlarm = () => setAlarm((previousState) => !previousState);
+  const toggleSwitchDark = () => setDark((previousState) => !previousState);
+
   return (
-    <View>
-      <Text>settings</Text>
+    <View style={styles.container}>
+      <View style={styles.containerRadius}>
+        <View style={styles.textContainer}>
+          <Text style={styles.text}>알림 설정</Text>
+          <View style={styles.switchStyle}>
+            <Switch
+              trackColor={{ false: GRAY, true: PRIMARY.DEFAULT }}
+              thumbColor={WHITE}
+              ios_backgroundColor={GRAY}
+              onValueChange={toggleSwitchAlarm}
+              value={alarm}
+            />
+          </View>
+        </View>
+        {alarm && ( // 알림 설정이 켜져 있을 때만 하단 텍스트를 표시
+          <View>
+            <Text>시간대별알림설정 여부</Text>
+          </View>
+        )}
+        {/* <View style={styles.textContainer}>
+          <Text style={styles.text}>다크 모드</Text>
+          <View style={styles.switchStyle}>
+            <Switch
+              trackColor={{ false: GRAY, true: PRIMARY.DEFAULT }}
+              thumbColor={WHITE}
+              ios_backgroundColor={GRAY}
+              onValueChange={toggleSwitchDark}
+              value={dark}
+            />
+          </View>
+        </View> */}
+        <View style={styles.view}>
+          <Button
+              title={'기기등록'}
+          />
+          </View>
+        <View style={styles.view}>
+          <Button
+            title={'로그아웃'}
+            onPress={() => {
+          navigation.navigate('Login');
+    }}
+          />
+          </View>
+      </View>
     </View>
   );
 };
-
-export default SettingsScreen;
+SettingsScreen.propTypes = {};
+const styles = StyleSheet.create({
+  container: {
+    flex: 1,
+  },
+  containerRadius: {
+    backgroundColor: WHITE,
+    flex: 1,
+    margin: 25,
+    borderRadius: 15,
+  },
+  textContainer: {
+    position: 'relative',
+    justifyContent: 'center',
+    borderBottomWidth: 1,
+    borderColor: GRAY,
+    paddingVertical: 30,
+  },
+  text: {
+    position: 'absolute',
+    left: 0,
+    fontSize: 20,
+    fontWeight: '600',
+    paddingHorizontal: 20,
+  },
+  switchStyle: {
+    position: 'absolute',
+    right: 0,
+    paddingVertical: 20,
+    paddingHorizontal: 20,
+  },
+  view: {
+    margin: 15,
+    
+  }
+});
+export default SettingsScreen;
(No newline at end of file)
kogas_app/src/screens/SignInScreen.js
--- kogas_app/src/screens/SignInScreen.js
+++ kogas_app/src/screens/SignInScreen.js
@@ -1,4 +1,4 @@
-import React, {useState, useRef, useEffect} from 'react';
+import React, { useState, useRef, useEffect } from 'react';
 import {
   View,
   StyleSheet,
@@ -10,37 +10,59 @@
   TouchableWithoutFeedback,
 } from 'react-native';
 import Button from '../components/Button';
-import TextInput, {IconNames, ReturnKeyTypes} from '../components/TextInput';
-import {GRAY, PRIMARY} from '../color';
+import TextInput, { IconNames, ReturnKeyTypes } from '../components/TextInput';
 import PropTypes from 'prop-types';
+import {url} from '../url';
 
-const SignInScreen = ({navigation}) => {
-  const [email, setEmail] = useState('');
+const SignInScreen = ({ navigation }) => {
+  const [id, setId] = useState('');
   const [password, setPassword] = useState('');
   const passwordRef = useRef(null);
   const [disabled, setDisabled] = useState(true);
   const [isLoading, setIsLoading] = useState(false);
 
   useEffect(() => {
-    setDisabled(!email || !password);
-  }, [email, password]);
+    setDisabled(!id || !password);
+  }, [id, password]);
 
   const handleDismissKeyboard = () => {
     Keyboard.dismiss();
   };
 
-  const onSubmit = async () => {
+const onSubmit = async () => {
     if (!disabled && !isLoading) {
       Keyboard.dismiss();
       setIsLoading(true);
       try {
-        try {
-          // 로그인 성공 후 메인 화면으로 이동
-          navigation.navigate('Main');
-        } catch (e) {
-          Alert.alert('로그인 실패');
-          setIsLoading(false);
-        }
+        fetch(`${url}/login`, {
+          method: 'POST',
+          body: JSON.stringify({
+            id: email,
+            password: password,
+          }),
+          headers: {
+            'Content-Type': 'application/json',
+          },
+        })
+          .then((response) => response.json())
+          .then(async (data) => {
+            //const token = data.token; // 토큰 추출
+            //console.log(token);
+
+            try {
+              //await SecureStore.setItemAsync('Token', token);
+              // 로그인 성공 후 메인 화면으로 이동
+              navigation.navigate('Main');
+            } catch (e) {
+              Alert.alert('로그인 실패');
+              console.error('token 에러: ' + e);
+              setIsLoading(false);
+            }
+          })
+          .catch((error) => {
+            console.error('tokne 만료:' + error);
+            setIsLoading(false);
+          });
       } catch (e) {
         Alert.alert('로그인 실패', e, [
           {
@@ -52,23 +74,24 @@
     }
   };
 
+
   return (
     <TouchableWithoutFeedback onPress={handleDismissKeyboard}>
       <View style={styles.container}>
         <Text style={styles.text}>스마트 전자서명 시스템</Text>
         <View style={styles.view}>
           <TextInput
-            value={email}
-            onChangeText={text => setEmail(text.trim())}
+            value={id}
+            onChangeText={(text) => setId(text.trim())}
             title={'아이디'}
             returnKeyType={ReturnKeyTypes.NEXT}
-            iconName={IconNames.EMAIL}
+            iconName={IconNames.ID}
             onSubmitEditing={() => passwordRef.current.focus()}
           />
           <TextInput
             ref={passwordRef}
             value={password}
-            onChangeText={text => setPassword(text.trim())}
+            onChangeText={(text) => setPassword(text.trim())}
             title={'비밀번호'}
             secureTextEntry
             iconName={IconNames.PASSWORD}
@@ -121,7 +144,7 @@
     fontWeight: 'bold',
   },
 
-  line: {flex: 1, height: 1, backgroundColor: 'black'},
+  line: { flex: 1, height: 1, backgroundColor: 'black' },
 });
 
 export default SignInScreen;
kogas_app/src/screens/SignatureListScreen.js
--- kogas_app/src/screens/SignatureListScreen.js
+++ kogas_app/src/screens/SignatureListScreen.js
@@ -1,57 +1,57 @@
-import {FlatList, StyleSheet, View} from 'react-native';
-import ListItem from '../components/ListItem';
-import EmptyList from '../components/EmptyList';
+// import {FlatList, StyleSheet, View} from 'react-native';
+// import ListItem from '../components/ListItem';
+// import EmptyList from '../components/EmptyList';
 
-const SignatureListScreen = () => {
-  const List = [
-    {
-      id: 1,
-      status: '서명진행중', //상태
-      title: '제목',
-      writer: '작성자',
-      registrationDate: '2023-09-25', //등록 날짜
-      content: [{
-        department: '계약운용부',
-        name: 'aaa',
-        status: '서명완료',
-        date: '2023/09/25 15:00'
-      }, {
-        department: '발전영업부',
-        name: 'bbb',
-        status: '서명완료',
-        date: '2023/09/25 15:00'
-        }]
-    },
-    {
-      id: 2,
-      status: '서명완료', //상태
-      title: '제목',
-      writer: '작성자',
-      registrationDate: '2023-09-25', //등록 날짜
-      content: [{department: '발전영업부', name: 'bbb', status: '서명완료', date: '2023/09/25 15:00'}]
-    },
-  ];
-  return List.length ? (
-    <View style={styles.container}>
-      <FlatList
-        data={List}
-        renderItem={({item}) => (
-          <ListItem name="SignatureListScreen" item={item} />
-        )}
-        windowSize={5}
-        ListHeaderComponent={View}
-        ListHeaderComponentStyle={{height: 10}}
-      />
-    </View>
-  ) : (
-    <EmptyList />
-  );
-};
+// const SignatureListScreen = () => {
+//   const List = [
+//     {
+//       id: 1,
+//       status: '서명진행중', //상태
+//       title: '제목',
+//       writer: '작성자',
+//       registrationDate: '2023-09-25', //등록 날짜
+//       content: [{
+//         department: '계약운용부',
+//         name: 'aaa',
+//         status: '서명완료',
+//         date: '2023/09/25 15:00'
+//       }, {
+//         department: '발전영업부',
+//         name: 'bbb',
+//         status: '서명완료',
+//         date: '2023/09/25 15:00'
+//         }]
+//     },
+//     {
+//       id: 2,
+//       status: '서명완료', //상태
+//       title: '제목',
+//       writer: '작성자',
+//       registrationDate: '2023-09-25', //등록 날짜
+//       content: [{department: '발전영업부', name: 'bbb', status: '서명완료', date: '2023/09/25 15:00'}]
+//     },
+//   ];
+//   return List.length ? (
+//     <View style={styles.container}>
+//       <FlatList
+//         data={List}
+//         renderItem={({item}) => (
+//           <ListItem name="SignatureListScreen" item={item} />
+//         )}
+//         windowSize={5}
+//         ListHeaderComponent={View}
+//         ListHeaderComponentStyle={{height: 10}}
+//       />
+//     </View>
+//   ) : (
+//     <EmptyList />
+//   );
+// };
 
-const styles = StyleSheet.create({
-  container: {
-    flex: 1,
-  },
-});
+// const styles = StyleSheet.create({
+//   container: {
+//     flex: 1,
+//   },
+// });
 
-export default SignatureListScreen;
+// export default SignatureListScreen;
 
kogas_app/src/test/PdfOpen.js (added)
+++ kogas_app/src/test/PdfOpen.js
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2017-present, Wonday (@wonday.org)
+ * All rights reserved.
+ *
+ * This source code is licensed under the MIT-style license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import React from 'react';
+import { StyleSheet, Dimensions, View } from 'react-native';
+import Pdf from 'react-native-pdf';
+
+export default class PDFOpen extends React.Component {
+    render() {
+        const source = { uri: 'file://C:/Users/mycom/Desktop/KOGAS_APP/test.pdf', cache: false };
+        //const source = require('./test.pdf');  // ios only
+        //const source = {uri:'bundle-assets://test.pdf' };
+        //const source = {uri:'file:///sdcard/test.pdf'};
+        //const source = {uri:"data:application/pdf;base64,JVBERi0xLjcKJc..."};
+        //const source = {uri:"content://com.example.blobs/xxxxxxxx-...?offset=0&size=xxx"};
+        //const source = {uri:"blob:xxxxxxxx-...?offset=0&size=xxx"};
+
+        return (
+            <View style={styles.container}>
+                <Pdf
+                    source={source}
+                    onLoadComplete={(numberOfPages,filePath) => {
+                        console.log(`Number of pages: ${numberOfPages}`);
+                    }}
+                    onPageChanged={(page,numberOfPages) => {
+                        console.log(`Current page: ${page}`);
+                    }}
+                    onError={(error) => {
+                        console.log(error);
+                    }}
+                    onPressLink={(uri) => {
+                        console.log(`Link pressed: ${uri}`);
+                    }}
+                    style={styles.pdf}/>
+            </View>
+        )
+    }
+}
+
+const styles = StyleSheet.create({
+    container: {
+        flex: 1,
+        justifyContent: 'flex-start',
+        alignItems: 'center',
+        marginTop: 25,
+    },
+    pdf: {
+        flex:1,
+        width:Dimensions.get('window').width,
+        height:Dimensions.get('window').height,
+    }
+});
+
+// import React from 'react';
+// import { Text, View, Button } from 'react-native';
+// import { WebView } from 'react-native-webview';
+
+// export default class PdfOpen extends React.Component {
+//   constructor(props) {
+//     super(props);
+//     this.state = {
+//       showPdfViewer: false, // 초기에 PDF 뷰어를 숨깁니다.
+//     };
+//   }
+
+//   // 버튼 클릭 시 PDF 뷰어를 보이도록 상태를 변경합니다.
+//   showPdfViewer = () => {
+//     this.setState({ showPdfViewer: true });
+//   }
+
+//   render() {
+//     // 상태에 따라 PDF 뷰어를 보이거나 숨깁니다.
+//     const pdfViewer = this.state.showPdfViewer ? (
+//       <WebView
+//         source={{ uri: 'C:/Users/mycom/Desktop/aa.pdf' }}
+//         onError={(err) => console.log(err)}
+//       />
+//     ) : null;
+
+//     return (
+//       <View>
+//         <Text>d</Text>
+//         {pdfViewer}
+//         {/* 버튼을 누르면 PDF 뷰어를 보이도록 합니다. */}
+//         <Button title="Show PDF" onPress={this.showPdfViewer} />
+//       </View>
+//     );
+//   }
+// }
+
kogas_app/yarn.lock
--- kogas_app/yarn.lock
+++ kogas_app/yarn.lock
@@ -1761,6 +1761,11 @@
     metro-react-native-babel-transformer "0.76.8"
     metro-runtime "0.76.8"
 
+"@react-native/normalize-color@*":
+  version "2.1.0"
+  resolved "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz"
+  integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==
+
 "@react-native/normalize-colors@*":
   version "0.73.0"
   resolved "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.0.tgz"
@@ -1950,6 +1955,21 @@
   version "15.7.6"
   resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz"
   integrity sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg==
+
+"@types/react-native-vector-icons@^6.4.14":
+  version "6.4.14"
+  resolved "https://registry.npmjs.org/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.14.tgz"
+  integrity sha512-3RaEadfUUImrDed03hwRnYp5QFevcWkWgPUHxj9U9lB6G5uPEGaxXoLWdjgioQ46CvADXUzrDOEYLSVcAn1GQw==
+  dependencies:
+    "@types/react" "*"
+    "@types/react-native" "^0.70"
+
+"@types/react-native@^0.70":
+  version "0.70.14"
+  resolved "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.14.tgz"
+  integrity sha512-Kwc+BYBrnDqvacNxKp1UtcZJnJJnTih2NYmi/ieAKlHdxEPN6sYMwmIwgHdoLHggvml6bf3DYRaH2jt+gzaLjw==
+  dependencies:
+    "@types/react" "*"
 
 "@types/react-test-renderer@^18.0.0":
   version "18.0.2"
@@ -2311,10 +2331,24 @@
   dependencies:
     has-symbols "^1.0.3"
 
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
 available-typed-arrays@^1.0.5:
   version "1.0.5"
   resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz"
   integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+
+axios@^1.5.0:
+  version "1.5.0"
+  resolved "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz"
+  integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==
+  dependencies:
+    follow-redirects "^1.15.0"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
 
 babel-core@^7.0.0-bridge.0:
   version "7.0.0-bridge.0"
@@ -2454,6 +2488,11 @@
   version "1.0.2"
   resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
   integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
[email protected]:
+  version "0.1.0"
+  resolved "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz"
+  integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==
 
 base64-js@^1.1.2, base64-js@^1.3.1:
   version "1.5.1"
@@ -2711,6 +2750,13 @@
   resolved "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz"
   integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
 
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
 command-exists@^1.2.8:
   version "1.2.9"
   resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz"
@@ -2825,6 +2871,11 @@
     shebang-command "^2.0.0"
     which "^2.0.1"
 
+crypto-js@^3.2.0:
+  version "3.3.0"
+  resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz"
+  integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==
+
 csstype@^3.0.2:
   version "3.1.2"
   resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
@@ -2906,6 +2957,11 @@
     has-property-descriptors "^1.0.0"
     object-keys "^1.1.1"
 
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
 denodeify@^1.2.1:
   version "1.2.1"
   resolved "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz"
@@ -2915,6 +2971,15 @@
   version "2.0.0"
   resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
   integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+deprecated-react-native-prop-types@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz"
+  integrity sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA==
+  dependencies:
+    "@react-native/normalize-color" "*"
+    invariant "*"
+    prop-types "*"
 
 [email protected]:
   version "4.1.0"
@@ -3127,6 +3192,11 @@
   version "4.0.0"
   resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
   integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
[email protected]:
+  version "2.0.0"
+  resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
+  integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
 
 eslint-config-prettier@^8.5.0:
   version "8.10.0"
@@ -3500,12 +3570,26 @@
   resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.217.0.tgz"
   integrity sha512-hEa5n0dta1RcaDwJDWbnyelw07PK7+Vx0f9kDht28JOt2hXgKdKGaT3wM45euWV2DxOXtzDSTaUgGSD/FPvC2Q==
 
+follow-redirects@^1.15.0:
+  version "1.15.3"
+  resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz"
+  integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
+
 for-each@^0.3.3:
   version "0.3.3"
   resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz"
   integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
   dependencies:
     is-callable "^1.1.3"
+
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
 
 [email protected]:
   version "0.5.2"
@@ -3598,7 +3682,7 @@
   dependencies:
     is-glob "^4.0.3"
 
-glob@^7.1.3, glob@^7.1.4:
+glob@^7.1.3, glob@^7.1.4, glob@^7.2.3:
   version "7.2.3"
   resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
   integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -3819,7 +3903,7 @@
     has "^1.0.3"
     side-channel "^1.0.4"
 
-invariant@*, invariant@^2.2.4:
+invariant@*, invariant@^2.2.4, [email protected]:
   version "2.2.4"
   resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz"
   integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
@@ -5340,7 +5424,7 @@
   resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
   integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
 
-mime-types@^2.1.27, mime-types@~2.1.34:
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.34:
   version "2.1.35"
   resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
   integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -5830,6 +5914,11 @@
     object-assign "^4.1.1"
     react-is "^16.13.1"
 
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
 punycode@^2.1.0:
   version "2.3.0"
   resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"
@@ -5905,6 +5994,14 @@
   resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz"
   integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
 
+react-native-blob-util@^0.19.1, react-native-blob-util@>=0.13.7:
+  version "0.19.1"
+  resolved "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.19.1.tgz"
+  integrity sha512-X1+MAcijR1AEky9dqNTFtsKvUPAoof2qsmmbSYThj/RWIucc2hhzrK3V2BJVU/hemNuz7E0NDaErmpNDpDHtNw==
+  dependencies:
+    base-64 "0.1.0"
+    glob "^7.2.3"
+
 react-native-gesture-handler@^2.13.1, "react-native-gesture-handler@>= 1.0.0":
   version "2.13.1"
   resolved "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.13.1.tgz"
@@ -5915,6 +6012,14 @@
     invariant "^2.2.4"
     lodash "^4.17.21"
     prop-types "^15.7.2"
+
+react-native-pdf@^6.7.1:
+  version "6.7.1"
+  resolved "https://registry.npmjs.org/react-native-pdf/-/react-native-pdf-6.7.1.tgz"
+  integrity sha512-zszQygtNBYoUfEtP/fV7zhzGeohDlUksh2p3OzshLrxdY9mw7Tm5VXAxYq4d8HsomRJUbFlJ7rHaTU9AQL800g==
+  dependencies:
+    crypto-js "^3.2.0"
+    deprecated-react-native-prop-types "^2.3.0"
 
 react-native-reanimated@^3.5.4:
   version "3.5.4"
@@ -5947,6 +6052,14 @@
     prop-types "^15.7.2"
     yargs "^16.1.1"
 
+react-native-webview@^13.6.0:
+  version "13.6.0"
+  resolved "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.6.0.tgz"
+  integrity sha512-KapVfHEj60e+2QplhqoCMdqW4vDzzvLS3YasfjVoMV4qhsZ3padncMEqOHX6AY4FIAdRzAxG0JQs+kXczAPYeQ==
+  dependencies:
+    escape-string-regexp "2.0.0"
+    invariant "2.2.4"
+
 react-native@*, react-native@>=0.57, [email protected]:
   version "0.72.4"
   resolved "https://registry.npmjs.org/react-native/-/react-native-0.72.4.tgz"
Add a comment
List