![](/assets/images/project_default_logo.png)
![](/assets/images/default-avatar-128.png)
[ADD] design add
@af839a7551c439bd753ed4f68baaebf15d5de0c7
--- kogas_app/android/app/build.gradle
+++ kogas_app/android/app/build.gradle
... | ... | @@ -101,6 +101,14 @@ |
101 | 101 |
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" |
102 | 102 |
} |
103 | 103 |
} |
104 |
+ packagingOptions { |
|
105 |
+ pickFirst 'lib/x86/libc++_shared.so' |
|
106 |
+ pickFirst 'lib/x86_64/libjsc.so' |
|
107 |
+ pickFirst 'lib/arm64-v8a/libjsc.so' |
|
108 |
+ pickFirst 'lib/arm64-v8a/libc++_shared.so' |
|
109 |
+ pickFirst 'lib/x86_64/libc++_shared.so' |
|
110 |
+ pickFirst 'lib/armeabi-v7a/libc++_shared.so' |
|
111 |
+ } |
|
104 | 112 |
} |
105 | 113 |
|
106 | 114 |
dependencies { |
... | ... | @@ -119,5 +127,5 @@ |
119 | 127 |
implementation jscFlavor |
120 | 128 |
} |
121 | 129 |
} |
122 |
- |
|
130 |
+apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" |
|
123 | 131 |
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
... | ... | @@ -1,7 +1,7 @@ |
1 | 1 |
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
2 | 2 |
|
3 | 3 |
<uses-permission android:name="android.permission.INTERNET" /> |
4 |
- |
|
4 |
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> |
|
5 | 5 |
<application |
6 | 6 |
android:name=".MainApplication" |
7 | 7 |
android:label="@string/app_name" |
--- kogas_app/package-lock.json
+++ kogas_app/package-lock.json
... | ... | @@ -12,13 +12,17 @@ |
12 | 12 |
"@react-navigation/bottom-tabs": "^6.5.8", |
13 | 13 |
"@react-navigation/native": "^6.1.7", |
14 | 14 |
"@react-navigation/stack": "^6.3.17", |
15 |
+ "axios": "^1.5.0", |
|
15 | 16 |
"react": "18.2.0", |
16 | 17 |
"react-native": "0.72.4", |
18 |
+ "react-native-blob-util": "^0.19.1", |
|
17 | 19 |
"react-native-gesture-handler": "^2.13.1", |
20 |
+ "react-native-pdf": "^6.7.1", |
|
18 | 21 |
"react-native-reanimated": "^3.5.4", |
19 | 22 |
"react-native-safe-area-context": "^4.7.2", |
20 | 23 |
"react-native-screens": "^3.25.0", |
21 |
- "react-native-vector-icons": "^10.0.0" |
|
24 |
+ "react-native-vector-icons": "^10.0.0", |
|
25 |
+ "react-native-webview": "^13.6.0" |
|
22 | 26 |
}, |
23 | 27 |
"devDependencies": { |
24 | 28 |
"@babel/core": "^7.20.0", |
... | ... | @@ -28,6 +32,7 @@ |
28 | 32 |
"@react-native/metro-config": "^0.72.11", |
29 | 33 |
"@tsconfig/react-native": "^3.0.0", |
30 | 34 |
"@types/react": "^18.0.24", |
35 |
+ "@types/react-native-vector-icons": "^6.4.14", |
|
31 | 36 |
"@types/react-test-renderer": "^18.0.0", |
32 | 37 |
"babel-jest": "^29.2.1", |
33 | 38 |
"eslint": "^8.19.0", |
... | ... | @@ -3927,6 +3932,11 @@ |
3927 | 3932 |
"dev": true, |
3928 | 3933 |
"license": "MIT" |
3929 | 3934 |
}, |
3935 |
+ "node_modules/@react-native/normalize-color": { |
|
3936 |
+ "version": "2.1.0", |
|
3937 |
+ "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz", |
|
3938 |
+ "integrity": "sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==" |
|
3939 |
+ }, |
|
3930 | 3940 |
"node_modules/@react-native/normalize-colors": { |
3931 | 3941 |
"version": "0.72.0", |
3932 | 3942 |
"resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.72.0.tgz", |
... | ... | @@ -4224,6 +4234,25 @@ |
4224 | 4234 |
"@types/prop-types": "*", |
4225 | 4235 |
"@types/scheduler": "*", |
4226 | 4236 |
"csstype": "^3.0.2" |
4237 |
+ } |
|
4238 |
+ }, |
|
4239 |
+ "node_modules/@types/react-native": { |
|
4240 |
+ "version": "0.70.14", |
|
4241 |
+ "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.14.tgz", |
|
4242 |
+ "integrity": "sha512-Kwc+BYBrnDqvacNxKp1UtcZJnJJnTih2NYmi/ieAKlHdxEPN6sYMwmIwgHdoLHggvml6bf3DYRaH2jt+gzaLjw==", |
|
4243 |
+ "dev": true, |
|
4244 |
+ "dependencies": { |
|
4245 |
+ "@types/react": "*" |
|
4246 |
+ } |
|
4247 |
+ }, |
|
4248 |
+ "node_modules/@types/react-native-vector-icons": { |
|
4249 |
+ "version": "6.4.14", |
|
4250 |
+ "resolved": "https://registry.npmjs.org/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.14.tgz", |
|
4251 |
+ "integrity": "sha512-3RaEadfUUImrDed03hwRnYp5QFevcWkWgPUHxj9U9lB6G5uPEGaxXoLWdjgioQ46CvADXUzrDOEYLSVcAn1GQw==", |
|
4252 |
+ "dev": true, |
|
4253 |
+ "dependencies": { |
|
4254 |
+ "@types/react": "*", |
|
4255 |
+ "@types/react-native": "^0.70" |
|
4227 | 4256 |
} |
4228 | 4257 |
}, |
4229 | 4258 |
"node_modules/@types/react-test-renderer": { |
... | ... | @@ -4925,6 +4954,11 @@ |
4925 | 4954 |
"has-symbols": "^1.0.3" |
4926 | 4955 |
} |
4927 | 4956 |
}, |
4957 |
+ "node_modules/asynckit": { |
|
4958 |
+ "version": "0.4.0", |
|
4959 |
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", |
|
4960 |
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" |
|
4961 |
+ }, |
|
4928 | 4962 |
"node_modules/available-typed-arrays": { |
4929 | 4963 |
"version": "1.0.5", |
4930 | 4964 |
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", |
... | ... | @@ -4936,6 +4970,16 @@ |
4936 | 4970 |
}, |
4937 | 4971 |
"funding": { |
4938 | 4972 |
"url": "https://github.com/sponsors/ljharb" |
4973 |
+ } |
|
4974 |
+ }, |
|
4975 |
+ "node_modules/axios": { |
|
4976 |
+ "version": "1.5.0", |
|
4977 |
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", |
|
4978 |
+ "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", |
|
4979 |
+ "dependencies": { |
|
4980 |
+ "follow-redirects": "^1.15.0", |
|
4981 |
+ "form-data": "^4.0.0", |
|
4982 |
+ "proxy-from-env": "^1.1.0" |
|
4939 | 4983 |
} |
4940 | 4984 |
}, |
4941 | 4985 |
"node_modules/babel-core": { |
... | ... | @@ -5140,6 +5184,11 @@ |
5140 | 5184 |
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", |
5141 | 5185 |
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", |
5142 | 5186 |
"license": "MIT" |
5187 |
+ }, |
|
5188 |
+ "node_modules/base-64": { |
|
5189 |
+ "version": "0.1.0", |
|
5190 |
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", |
|
5191 |
+ "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" |
|
5143 | 5192 |
}, |
5144 | 5193 |
"node_modules/base64-js": { |
5145 | 5194 |
"version": "1.5.1", |
... | ... | @@ -5575,6 +5624,17 @@ |
5575 | 5624 |
"integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", |
5576 | 5625 |
"license": "MIT" |
5577 | 5626 |
}, |
5627 |
+ "node_modules/combined-stream": { |
|
5628 |
+ "version": "1.0.8", |
|
5629 |
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", |
|
5630 |
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", |
|
5631 |
+ "dependencies": { |
|
5632 |
+ "delayed-stream": "~1.0.0" |
|
5633 |
+ }, |
|
5634 |
+ "engines": { |
|
5635 |
+ "node": ">= 0.8" |
|
5636 |
+ } |
|
5637 |
+ }, |
|
5578 | 5638 |
"node_modules/command-exists": { |
5579 | 5639 |
"version": "1.2.9", |
5580 | 5640 |
"resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", |
... | ... | @@ -5753,6 +5813,11 @@ |
5753 | 5813 |
"node": ">= 8" |
5754 | 5814 |
} |
5755 | 5815 |
}, |
5816 |
+ "node_modules/crypto-js": { |
|
5817 |
+ "version": "3.3.0", |
|
5818 |
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", |
|
5819 |
+ "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" |
|
5820 |
+ }, |
|
5756 | 5821 |
"node_modules/csstype": { |
5757 | 5822 |
"version": "3.1.2", |
5758 | 5823 |
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", |
... | ... | @@ -5874,6 +5939,14 @@ |
5874 | 5939 |
}, |
5875 | 5940 |
"funding": { |
5876 | 5941 |
"url": "https://github.com/sponsors/ljharb" |
5942 |
+ } |
|
5943 |
+ }, |
|
5944 |
+ "node_modules/delayed-stream": { |
|
5945 |
+ "version": "1.0.0", |
|
5946 |
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", |
|
5947 |
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", |
|
5948 |
+ "engines": { |
|
5949 |
+ "node": ">=0.4.0" |
|
5877 | 5950 |
} |
5878 | 5951 |
}, |
5879 | 5952 |
"node_modules/denodeify": { |
... | ... | @@ -7044,6 +7117,25 @@ |
7044 | 7117 |
"node": ">=0.4.0" |
7045 | 7118 |
} |
7046 | 7119 |
}, |
7120 |
+ "node_modules/follow-redirects": { |
|
7121 |
+ "version": "1.15.3", |
|
7122 |
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", |
|
7123 |
+ "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", |
|
7124 |
+ "funding": [ |
|
7125 |
+ { |
|
7126 |
+ "type": "individual", |
|
7127 |
+ "url": "https://github.com/sponsors/RubenVerborgh" |
|
7128 |
+ } |
|
7129 |
+ ], |
|
7130 |
+ "engines": { |
|
7131 |
+ "node": ">=4.0" |
|
7132 |
+ }, |
|
7133 |
+ "peerDependenciesMeta": { |
|
7134 |
+ "debug": { |
|
7135 |
+ "optional": true |
|
7136 |
+ } |
|
7137 |
+ } |
|
7138 |
+ }, |
|
7047 | 7139 |
"node_modules/for-each": { |
7048 | 7140 |
"version": "0.3.3", |
7049 | 7141 |
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", |
... | ... | @@ -7052,6 +7144,19 @@ |
7052 | 7144 |
"license": "MIT", |
7053 | 7145 |
"dependencies": { |
7054 | 7146 |
"is-callable": "^1.1.3" |
7147 |
+ } |
|
7148 |
+ }, |
|
7149 |
+ "node_modules/form-data": { |
|
7150 |
+ "version": "4.0.0", |
|
7151 |
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", |
|
7152 |
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", |
|
7153 |
+ "dependencies": { |
|
7154 |
+ "asynckit": "^0.4.0", |
|
7155 |
+ "combined-stream": "^1.0.8", |
|
7156 |
+ "mime-types": "^2.1.12" |
|
7157 |
+ }, |
|
7158 |
+ "engines": { |
|
7159 |
+ "node": ">= 6" |
|
7055 | 7160 |
} |
7056 | 7161 |
}, |
7057 | 7162 |
"node_modules/fresh": { |
... | ... | @@ -10761,6 +10866,11 @@ |
10761 | 10866 |
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", |
10762 | 10867 |
"license": "MIT" |
10763 | 10868 |
}, |
10869 |
+ "node_modules/proxy-from-env": { |
|
10870 |
+ "version": "1.1.0", |
|
10871 |
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", |
|
10872 |
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" |
|
10873 |
+ }, |
|
10764 | 10874 |
"node_modules/punycode": { |
10765 | 10875 |
"version": "2.3.0", |
10766 | 10876 |
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", |
... | ... | @@ -10936,6 +11046,19 @@ |
10936 | 11046 |
"react": "18.2.0" |
10937 | 11047 |
} |
10938 | 11048 |
}, |
11049 |
+ "node_modules/react-native-blob-util": { |
|
11050 |
+ "version": "0.19.1", |
|
11051 |
+ "resolved": "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.19.1.tgz", |
|
11052 |
+ "integrity": "sha512-X1+MAcijR1AEky9dqNTFtsKvUPAoof2qsmmbSYThj/RWIucc2hhzrK3V2BJVU/hemNuz7E0NDaErmpNDpDHtNw==", |
|
11053 |
+ "dependencies": { |
|
11054 |
+ "base-64": "0.1.0", |
|
11055 |
+ "glob": "^7.2.3" |
|
11056 |
+ }, |
|
11057 |
+ "peerDependencies": { |
|
11058 |
+ "react": "*", |
|
11059 |
+ "react-native": "*" |
|
11060 |
+ } |
|
11061 |
+ }, |
|
10939 | 11062 |
"node_modules/react-native-gesture-handler": { |
10940 | 11063 |
"version": "2.13.1", |
10941 | 11064 |
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.13.1.tgz", |
... | ... | @@ -10950,6 +11073,30 @@ |
10950 | 11073 |
"peerDependencies": { |
10951 | 11074 |
"react": "*", |
10952 | 11075 |
"react-native": "*" |
11076 |
+ } |
|
11077 |
+ }, |
|
11078 |
+ "node_modules/react-native-pdf": { |
|
11079 |
+ "version": "6.7.1", |
|
11080 |
+ "resolved": "https://registry.npmjs.org/react-native-pdf/-/react-native-pdf-6.7.1.tgz", |
|
11081 |
+ "integrity": "sha512-zszQygtNBYoUfEtP/fV7zhzGeohDlUksh2p3OzshLrxdY9mw7Tm5VXAxYq4d8HsomRJUbFlJ7rHaTU9AQL800g==", |
|
11082 |
+ "dependencies": { |
|
11083 |
+ "crypto-js": "^3.2.0", |
|
11084 |
+ "deprecated-react-native-prop-types": "^2.3.0" |
|
11085 |
+ }, |
|
11086 |
+ "peerDependencies": { |
|
11087 |
+ "react": "*", |
|
11088 |
+ "react-native": "*", |
|
11089 |
+ "react-native-blob-util": ">=0.13.7" |
|
11090 |
+ } |
|
11091 |
+ }, |
|
11092 |
+ "node_modules/react-native-pdf/node_modules/deprecated-react-native-prop-types": { |
|
11093 |
+ "version": "2.3.0", |
|
11094 |
+ "resolved": "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz", |
|
11095 |
+ "integrity": "sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA==", |
|
11096 |
+ "dependencies": { |
|
11097 |
+ "@react-native/normalize-color": "*", |
|
11098 |
+ "invariant": "*", |
|
11099 |
+ "prop-types": "*" |
|
10953 | 11100 |
} |
10954 | 11101 |
}, |
10955 | 11102 |
"node_modules/react-native-reanimated": { |
... | ... | @@ -11050,6 +11197,27 @@ |
11050 | 11197 |
"node": ">=10" |
11051 | 11198 |
} |
11052 | 11199 |
}, |
11200 |
+ "node_modules/react-native-webview": { |
|
11201 |
+ "version": "13.6.0", |
|
11202 |
+ "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.6.0.tgz", |
|
11203 |
+ "integrity": "sha512-KapVfHEj60e+2QplhqoCMdqW4vDzzvLS3YasfjVoMV4qhsZ3padncMEqOHX6AY4FIAdRzAxG0JQs+kXczAPYeQ==", |
|
11204 |
+ "dependencies": { |
|
11205 |
+ "escape-string-regexp": "2.0.0", |
|
11206 |
+ "invariant": "2.2.4" |
|
11207 |
+ }, |
|
11208 |
+ "peerDependencies": { |
|
11209 |
+ "react": "*", |
|
11210 |
+ "react-native": "*" |
|
11211 |
+ } |
|
11212 |
+ }, |
|
11213 |
+ "node_modules/react-native-webview/node_modules/escape-string-regexp": { |
|
11214 |
+ "version": "2.0.0", |
|
11215 |
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", |
|
11216 |
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", |
|
11217 |
+ "engines": { |
|
11218 |
+ "node": ">=8" |
|
11219 |
+ } |
|
11220 |
+ }, |
|
11053 | 11221 |
"node_modules/react-native/node_modules/@jest/types": { |
11054 | 11222 |
"version": "26.6.2", |
11055 | 11223 |
"resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", |
--- kogas_app/package.json
+++ kogas_app/package.json
... | ... | @@ -14,13 +14,17 @@ |
14 | 14 |
"@react-navigation/bottom-tabs": "^6.5.8", |
15 | 15 |
"@react-navigation/native": "^6.1.7", |
16 | 16 |
"@react-navigation/stack": "^6.3.17", |
17 |
+ "axios": "^1.5.0", |
|
17 | 18 |
"react": "18.2.0", |
18 | 19 |
"react-native": "0.72.4", |
20 |
+ "react-native-blob-util": "^0.19.1", |
|
19 | 21 |
"react-native-gesture-handler": "^2.13.1", |
22 |
+ "react-native-pdf": "^6.7.1", |
|
20 | 23 |
"react-native-reanimated": "^3.5.4", |
21 | 24 |
"react-native-safe-area-context": "^4.7.2", |
22 | 25 |
"react-native-screens": "^3.25.0", |
23 |
- "react-native-vector-icons": "^10.0.0" |
|
26 |
+ "react-native-vector-icons": "^10.0.0", |
|
27 |
+ "react-native-webview": "^13.6.0" |
|
24 | 28 |
}, |
25 | 29 |
"devDependencies": { |
26 | 30 |
"@babel/core": "^7.20.0", |
... | ... | @@ -30,6 +34,7 @@ |
30 | 34 |
"@react-native/metro-config": "^0.72.11", |
31 | 35 |
"@tsconfig/react-native": "^3.0.0", |
32 | 36 |
"@types/react": "^18.0.24", |
37 |
+ "@types/react-native-vector-icons": "^6.4.14", |
|
33 | 38 |
"@types/react-test-renderer": "^18.0.0", |
34 | 39 |
"babel-jest": "^29.2.1", |
35 | 40 |
"eslint": "^8.19.0", |
--- kogas_app/src/components/ListItem.js
+++ kogas_app/src/components/ListItem.js
... | ... | @@ -1,6 +1,7 @@ |
1 | 1 |
import {Pressable, StyleSheet, Text, View} from 'react-native'; |
2 | 2 |
import {memo} from 'react'; |
3 | 3 |
import {useNavigation} from '@react-navigation/native'; |
4 |
+import { BLACK } from '../color'; |
|
4 | 5 |
|
5 | 6 |
const ListItem = memo(({name, item}) => { |
6 | 7 |
const navigation = useNavigation(); |
... | ... | @@ -39,10 +40,13 @@ |
39 | 40 |
container: { |
40 | 41 |
flexDirection: 'column', |
41 | 42 |
marginHorizontal: 10, |
42 |
- marginVertical:5, |
|
43 |
- borderBottomWidth: 0.5, |
|
44 |
- paddingVertical: 5, |
|
43 |
+ marginVertical:10, |
|
44 |
+ paddingVertical: 10, |
|
45 | 45 |
paddingHorizontal: 15, |
46 |
+ borderRadius: 20, |
|
47 |
+ borderColor: BLACK, |
|
48 |
+ borderWidth: 1, |
|
49 |
+ |
|
46 | 50 |
}, |
47 | 51 |
}); |
48 | 52 |
|
--- kogas_app/src/components/TextInput.js
+++ kogas_app/src/components/TextInput.js
... | ... | @@ -10,7 +10,7 @@ |
10 | 10 |
}; |
11 | 11 |
|
12 | 12 |
export const IconNames = { |
13 |
- EMAIL: 'mail-outline', |
|
13 |
+ ID: 'lock-closed-outline', |
|
14 | 14 |
PASSWORD: 'lock-closed-outline', |
15 | 15 |
}; |
16 | 16 |
|
--- kogas_app/src/screens/HomeScreen.js
+++ kogas_app/src/screens/HomeScreen.js
... | ... | @@ -1,22 +1,77 @@ |
1 | 1 |
import { Pressable, StyleSheet, Text, View } from 'react-native'; |
2 |
-import { BLACK, GRAY } from '../color'; |
|
2 |
+import { BLACK, GRAY, WHITE } from '../color'; |
|
3 | 3 |
import {useNavigation} from '@react-navigation/native'; |
4 | 4 |
import { FlatList } from 'react-native-gesture-handler'; |
5 | 5 |
import ListItem from '../components/ListItem'; |
6 |
+import { useEffect, useState } from 'react'; |
|
6 | 7 |
|
7 | 8 |
const HomeScreen = () => { |
8 | 9 |
const navigation = useNavigation(); |
9 | 10 |
const mydocs = { |
10 |
- all: 3, |
|
11 |
- clear: 2, |
|
12 |
- } |
|
11 |
+ id: 1, |
|
12 |
+ status: '서명진행중', //상태 |
|
13 |
+ title: '모바일 구축사업 인수인계 협의2', |
|
14 |
+ department: '수요공급처', |
|
15 |
+ name: 'aa', |
|
16 |
+ registrationDate: '2023-09-25', //등록 날짜 |
|
17 |
+ content: [{ |
|
18 |
+ department: '계약운용부', |
|
19 |
+ name: 'aaa', |
|
20 |
+ status: '서명완료', |
|
21 |
+ date: '2023/09/25 15:00' |
|
22 |
+ }, { |
|
23 |
+ department: '발전영업부', |
|
24 |
+ name: 'aaaa', |
|
25 |
+ status: '서명 진행중', |
|
26 |
+ date: '2023/09/25 15:00' |
|
27 |
+ }] |
|
28 |
+ } |
|
13 | 29 |
const newdocs = { |
14 |
- all: 4, |
|
15 |
- clear: 2, |
|
30 |
+ id: 1, |
|
31 |
+ status: '서명진행중', //상태 |
|
32 |
+ title: '모바일 구축사업 인수인계 협의2', |
|
33 |
+ department: '수요공급처', |
|
34 |
+ name: 'bb', |
|
35 |
+ registrationDate: '2023-09-25', //등록 날짜 |
|
36 |
+ content: [{ |
|
37 |
+ department: '계약운용부', |
|
38 |
+ name: 'bbb', |
|
39 |
+ status: '서명완료', |
|
40 |
+ date: '2023/09/25 15:00' |
|
41 |
+ }, { |
|
42 |
+ department: '계약운용부', |
|
43 |
+ name: 'bbb', |
|
44 |
+ status: '서명 진행중', |
|
45 |
+ date: '2023/09/25 15:00' |
|
46 |
+ },{ |
|
47 |
+ department: '발전영업부', |
|
48 |
+ name: 'bbbb', |
|
49 |
+ status: '서명완료', |
|
50 |
+ date: '2023/09/25 15:00' |
|
51 |
+ }] |
|
16 | 52 |
} |
17 |
- const myperc = Math.floor(mydocs.clear / mydocs.all * 100); |
|
18 |
- const newperc = Math.floor(mydocs.clear / mydocs.all * 100); |
|
53 |
+ const [mycount, setMyCount] = useState(0); // useState로 상태 변수 관리 |
|
54 |
+ const [newcount, setNewCount] = useState(0); // useState로 상태 변수 관리 |
|
19 | 55 |
|
56 |
+ const myperc = Math.floor((mycount / mydocs.content.length) * 100); // mycount 사용 |
|
57 |
+ const newperc = Math.floor((newcount / newdocs.content.length) * 100); // newcount 사용 |
|
58 |
+ |
|
59 |
+ useEffect(() => { |
|
60 |
+ setMyCount(0); // 초기화 |
|
61 |
+ setNewCount(0); // 초기화 |
|
62 |
+ mydocs.content.forEach((item) => { |
|
63 |
+ if (item.status === '서명완료') { |
|
64 |
+ setMyCount((prevCount) => prevCount + 1); // 상태 업데이트 |
|
65 |
+ } |
|
66 |
+ }); |
|
67 |
+ |
|
68 |
+ newdocs.content.forEach((item) => { |
|
69 |
+ if (item.status === '서명완료') { |
|
70 |
+ setNewCount((prevCount) => prevCount + 1); // 상태 업데이트 |
|
71 |
+ } |
|
72 |
+ }); |
|
73 |
+ }, [mydocs, newdocs]); |
|
74 |
+ |
|
20 | 75 |
const List = [ |
21 | 76 |
{ |
22 | 77 |
id: 1, |
... | ... | @@ -49,45 +104,58 @@ |
49 | 104 |
]; |
50 | 105 |
|
51 | 106 |
return ( |
52 |
- <View> |
|
53 |
- <View> |
|
54 |
- <Text>내 진행 상황</Text> |
|
107 |
+ <View style={styles.container}> |
|
108 |
+ <View style={styles.containerTop}> |
|
109 |
+ <Text style={styles.title}>내 진행 상황</Text> |
|
55 | 110 |
<Pressable |
56 | 111 |
onPress={() => { |
57 |
- navigation.navigate('SignatureList'); |
|
112 |
+ navigation.navigate('ListDetail',{ |
|
113 |
+ status: mydocs.status, |
|
114 |
+ title: mydocs.title, |
|
115 |
+ department: mydocs.department, |
|
116 |
+ name: mydocs.name, |
|
117 |
+ registrationDate: mydocs.registrationDate, |
|
118 |
+ content: mydocs.content, |
|
119 |
+ }); |
|
58 | 120 |
}} |
59 | 121 |
hitSlop={10} |
60 | 122 |
style={styles.mydocs} |
61 | 123 |
> |
62 | 124 |
<View> |
63 | 125 |
<Text>{myperc}%</Text><Text>내 문서 진행률</Text> |
64 |
- <Text>서명 대상자 {mydocs.all}명 중 {mydocs.clear}명이 서명을 완료하였습니다.</Text> |
|
126 |
+ <Text>서명 대상자 {mydocs.content.length}명 중 {mycount}명이 서명을 완료하였습니다.</Text> |
|
65 | 127 |
</View> |
66 | 128 |
</Pressable> |
67 | 129 |
<Pressable |
68 |
- // onPress={() => { |
|
69 |
- // navigation.navigate('SignatureList'); |
|
70 |
- // }} |
|
130 |
+ onPress={() => { |
|
131 |
+ navigation.navigate('ListDetail',{ |
|
132 |
+ status: newdocs.status, |
|
133 |
+ title: newdocs.title, |
|
134 |
+ department: newdocs.department, |
|
135 |
+ name: newdocs.name, |
|
136 |
+ registrationDate: newdocs.registrationDate, |
|
137 |
+ content: newdocs.content, |
|
138 |
+ }); |
|
139 |
+ }} |
|
71 | 140 |
hitSlop={10} |
72 | 141 |
style={styles.mydocs} |
73 | 142 |
> |
74 | 143 |
<View> |
75 | 144 |
<Text>{newperc}%</Text><Text>최근 문서 진행률</Text> |
76 |
- <Text>서명 대상자 {newdocs.all}명 중 {newdocs.clear}명이 서명을 완료하였습니다.</Text> |
|
145 |
+ <Text>서명 대상자 {newdocs.content.length}명 중 {newcount}명이 서명을 완료하였습니다.</Text> |
|
77 | 146 |
</View> |
78 | 147 |
</Pressable> |
79 | 148 |
</View> |
80 |
- <View> |
|
81 |
- <Text style={styles.v}>서명 이력</Text> |
|
149 |
+ <View style={styles.containerBottom}> |
|
150 |
+ <Text style={styles.title}>서명 이력</Text> |
|
82 | 151 |
<View> |
83 | 152 |
<FlatList |
84 | 153 |
data={List} |
85 | 154 |
renderItem={({item}) => ( |
86 |
- <ListItem name="SignatureListScreen" item={item} /> |
|
155 |
+ <ListItem name="HomeScreen" item={item} /> |
|
87 | 156 |
)} |
88 | 157 |
// windowSize={5} |
89 | 158 |
ListHeaderComponent={View} |
90 |
- // ListHeaderComponentStyle={{height: 10}} |
|
91 | 159 |
/> |
92 | 160 |
</View> |
93 | 161 |
</View> |
... | ... | @@ -95,13 +163,28 @@ |
95 | 163 |
); |
96 | 164 |
}; |
97 | 165 |
const styles = StyleSheet.create({ |
98 |
- mydocs: { |
|
99 |
- backgroundColor: GRAY, |
|
100 |
- marginTop:10, |
|
166 |
+ container: { |
|
167 |
+ backgroundColor: WHITE, |
|
168 |
+ flex:1, |
|
101 | 169 |
}, |
102 |
- v: { |
|
103 |
- marginTop: 10, |
|
104 |
- fontWeight: 'bold', |
|
170 |
+ containerTop: { |
|
171 |
+ |
|
172 |
+ }, |
|
173 |
+ mydocs: { |
|
174 |
+ borderWidth: 0.5, |
|
175 |
+ borderColor: GRAY, |
|
176 |
+ borderRadius: 10, |
|
177 |
+ margin: 10, |
|
178 |
+ padding:20, |
|
179 |
+ }, |
|
180 |
+ title: { |
|
181 |
+ color: BLACK, |
|
182 |
+ //marginTop: 5, |
|
183 |
+ fontWeight: '900', |
|
184 |
+ borderBottomWidth: 0.5, |
|
185 |
+ borderBottomColor: BLACK, |
|
186 |
+ paddingVertical: 5, |
|
187 |
+ marginHorizontal:10, |
|
105 | 188 |
} |
106 | 189 |
}); |
107 | 190 |
export default HomeScreen; |
--- kogas_app/src/screens/ListDetailScreen.js
+++ kogas_app/src/screens/ListDetailScreen.js
... | ... | @@ -8,8 +8,9 @@ |
8 | 8 |
const { name } = route.params; |
9 | 9 |
const {department} = route.params; |
10 | 10 |
const {registrationDate} = route.params; |
11 |
- const {content} = route.params; |
|
11 |
+ const { content } = route.params; |
|
12 | 12 |
return ( |
13 |
+ |
|
13 | 14 |
<View style={styles.container}> |
14 | 15 |
<View> |
15 | 16 |
<Text style={styles.title}>{status}</Text> |
... | ... | @@ -17,7 +18,7 @@ |
17 | 18 |
<Text style={styles.date}>기안자: {department} {name}</Text> |
18 | 19 |
<Text style={styles.date}>기안일자: {registrationDate}</Text> |
19 | 20 |
</View> |
20 |
- <Button title={'문서다운'}/> |
|
21 |
+ <Button title={'문서보기'}/> |
|
21 | 22 |
<View> |
22 | 23 |
<Text style={styles.v}>서명 정보</Text> |
23 | 24 |
<FlatList |
--- kogas_app/src/screens/SettingsScreen.js
+++ kogas_app/src/screens/SettingsScreen.js
... | ... | @@ -1,11 +1,99 @@ |
1 |
-import {Text, View} from 'react-native'; |
|
1 |
+import { StyleSheet, Switch, Text, View } from 'react-native'; |
|
2 |
+import PropTypes from 'prop-types'; |
|
3 |
+import { GRAY, PRIMARY, WHITE } from '../color'; |
|
4 |
+import { useState } from 'react'; |
|
5 |
+import Button from '../components/Button'; |
|
2 | 6 |
|
3 |
-const SettingsScreen = () => { |
|
7 |
+const SettingsScreen = ({navigation}) => { |
|
8 |
+ const [alarm, setAlarm] = useState(false); |
|
9 |
+ const [dark, setDark] = useState(false); |
|
10 |
+ |
|
11 |
+ const toggleSwitchAlarm = () => setAlarm((previousState) => !previousState); |
|
12 |
+ const toggleSwitchDark = () => setDark((previousState) => !previousState); |
|
13 |
+ |
|
4 | 14 |
return ( |
5 |
- <View> |
|
6 |
- <Text>settings</Text> |
|
15 |
+ <View style={styles.container}> |
|
16 |
+ <View style={styles.containerRadius}> |
|
17 |
+ <View style={styles.textContainer}> |
|
18 |
+ <Text style={styles.text}>알림 설정</Text> |
|
19 |
+ <View style={styles.switchStyle}> |
|
20 |
+ <Switch |
|
21 |
+ trackColor={{ false: GRAY, true: PRIMARY.DEFAULT }} |
|
22 |
+ thumbColor={WHITE} |
|
23 |
+ ios_backgroundColor={GRAY} |
|
24 |
+ onValueChange={toggleSwitchAlarm} |
|
25 |
+ value={alarm} |
|
26 |
+ /> |
|
27 |
+ </View> |
|
28 |
+ </View> |
|
29 |
+ {alarm && ( // 알림 설정이 켜져 있을 때만 하단 텍스트를 표시 |
|
30 |
+ <View> |
|
31 |
+ <Text>시간대별알림설정 여부</Text> |
|
32 |
+ </View> |
|
33 |
+ )} |
|
34 |
+ {/* <View style={styles.textContainer}> |
|
35 |
+ <Text style={styles.text}>다크 모드</Text> |
|
36 |
+ <View style={styles.switchStyle}> |
|
37 |
+ <Switch |
|
38 |
+ trackColor={{ false: GRAY, true: PRIMARY.DEFAULT }} |
|
39 |
+ thumbColor={WHITE} |
|
40 |
+ ios_backgroundColor={GRAY} |
|
41 |
+ onValueChange={toggleSwitchDark} |
|
42 |
+ value={dark} |
|
43 |
+ /> |
|
44 |
+ </View> |
|
45 |
+ </View> */} |
|
46 |
+ <View style={styles.view}> |
|
47 |
+ <Button |
|
48 |
+ title={'기기등록'} |
|
49 |
+ /> |
|
50 |
+ </View> |
|
51 |
+ <View style={styles.view}> |
|
52 |
+ <Button |
|
53 |
+ title={'로그아웃'} |
|
54 |
+ onPress={() => { |
|
55 |
+ navigation.navigate('Login'); |
|
56 |
+ }} |
|
57 |
+ /> |
|
58 |
+ </View> |
|
59 |
+ </View> |
|
7 | 60 |
</View> |
8 | 61 |
); |
9 | 62 |
}; |
10 |
- |
|
11 |
-export default SettingsScreen; |
|
63 |
+SettingsScreen.propTypes = {}; |
|
64 |
+const styles = StyleSheet.create({ |
|
65 |
+ container: { |
|
66 |
+ flex: 1, |
|
67 |
+ }, |
|
68 |
+ containerRadius: { |
|
69 |
+ backgroundColor: WHITE, |
|
70 |
+ flex: 1, |
|
71 |
+ margin: 25, |
|
72 |
+ borderRadius: 15, |
|
73 |
+ }, |
|
74 |
+ textContainer: { |
|
75 |
+ position: 'relative', |
|
76 |
+ justifyContent: 'center', |
|
77 |
+ borderBottomWidth: 1, |
|
78 |
+ borderColor: GRAY, |
|
79 |
+ paddingVertical: 30, |
|
80 |
+ }, |
|
81 |
+ text: { |
|
82 |
+ position: 'absolute', |
|
83 |
+ left: 0, |
|
84 |
+ fontSize: 20, |
|
85 |
+ fontWeight: '600', |
|
86 |
+ paddingHorizontal: 20, |
|
87 |
+ }, |
|
88 |
+ switchStyle: { |
|
89 |
+ position: 'absolute', |
|
90 |
+ right: 0, |
|
91 |
+ paddingVertical: 20, |
|
92 |
+ paddingHorizontal: 20, |
|
93 |
+ }, |
|
94 |
+ view: { |
|
95 |
+ margin: 15, |
|
96 |
+ |
|
97 |
+ } |
|
98 |
+}); |
|
99 |
+export default SettingsScreen;(No newline at end of file) |
--- kogas_app/src/screens/SignInScreen.js
+++ kogas_app/src/screens/SignInScreen.js
... | ... | @@ -1,4 +1,4 @@ |
1 |
-import React, {useState, useRef, useEffect} from 'react'; |
|
1 |
+import React, { useState, useRef, useEffect } from 'react'; |
|
2 | 2 |
import { |
3 | 3 |
View, |
4 | 4 |
StyleSheet, |
... | ... | @@ -10,37 +10,59 @@ |
10 | 10 |
TouchableWithoutFeedback, |
11 | 11 |
} from 'react-native'; |
12 | 12 |
import Button from '../components/Button'; |
13 |
-import TextInput, {IconNames, ReturnKeyTypes} from '../components/TextInput'; |
|
14 |
-import {GRAY, PRIMARY} from '../color'; |
|
13 |
+import TextInput, { IconNames, ReturnKeyTypes } from '../components/TextInput'; |
|
15 | 14 |
import PropTypes from 'prop-types'; |
15 |
+import {url} from '../url'; |
|
16 | 16 |
|
17 |
-const SignInScreen = ({navigation}) => { |
|
18 |
- const [email, setEmail] = useState(''); |
|
17 |
+const SignInScreen = ({ navigation }) => { |
|
18 |
+ const [id, setId] = useState(''); |
|
19 | 19 |
const [password, setPassword] = useState(''); |
20 | 20 |
const passwordRef = useRef(null); |
21 | 21 |
const [disabled, setDisabled] = useState(true); |
22 | 22 |
const [isLoading, setIsLoading] = useState(false); |
23 | 23 |
|
24 | 24 |
useEffect(() => { |
25 |
- setDisabled(!email || !password); |
|
26 |
- }, [email, password]); |
|
25 |
+ setDisabled(!id || !password); |
|
26 |
+ }, [id, password]); |
|
27 | 27 |
|
28 | 28 |
const handleDismissKeyboard = () => { |
29 | 29 |
Keyboard.dismiss(); |
30 | 30 |
}; |
31 | 31 |
|
32 |
- const onSubmit = async () => { |
|
32 |
+const onSubmit = async () => { |
|
33 | 33 |
if (!disabled && !isLoading) { |
34 | 34 |
Keyboard.dismiss(); |
35 | 35 |
setIsLoading(true); |
36 | 36 |
try { |
37 |
- try { |
|
38 |
- // 로그인 성공 후 메인 화면으로 이동 |
|
39 |
- navigation.navigate('Main'); |
|
40 |
- } catch (e) { |
|
41 |
- Alert.alert('로그인 실패'); |
|
42 |
- setIsLoading(false); |
|
43 |
- } |
|
37 |
+ fetch(`${url}/login`, { |
|
38 |
+ method: 'POST', |
|
39 |
+ body: JSON.stringify({ |
|
40 |
+ id: email, |
|
41 |
+ password: password, |
|
42 |
+ }), |
|
43 |
+ headers: { |
|
44 |
+ 'Content-Type': 'application/json', |
|
45 |
+ }, |
|
46 |
+ }) |
|
47 |
+ .then((response) => response.json()) |
|
48 |
+ .then(async (data) => { |
|
49 |
+ //const token = data.token; // 토큰 추출 |
|
50 |
+ //console.log(token); |
|
51 |
+ |
|
52 |
+ try { |
|
53 |
+ //await SecureStore.setItemAsync('Token', token); |
|
54 |
+ // 로그인 성공 후 메인 화면으로 이동 |
|
55 |
+ navigation.navigate('Main'); |
|
56 |
+ } catch (e) { |
|
57 |
+ Alert.alert('로그인 실패'); |
|
58 |
+ console.error('token 에러: ' + e); |
|
59 |
+ setIsLoading(false); |
|
60 |
+ } |
|
61 |
+ }) |
|
62 |
+ .catch((error) => { |
|
63 |
+ console.error('tokne 만료:' + error); |
|
64 |
+ setIsLoading(false); |
|
65 |
+ }); |
|
44 | 66 |
} catch (e) { |
45 | 67 |
Alert.alert('로그인 실패', e, [ |
46 | 68 |
{ |
... | ... | @@ -52,23 +74,24 @@ |
52 | 74 |
} |
53 | 75 |
}; |
54 | 76 |
|
77 |
+ |
|
55 | 78 |
return ( |
56 | 79 |
<TouchableWithoutFeedback onPress={handleDismissKeyboard}> |
57 | 80 |
<View style={styles.container}> |
58 | 81 |
<Text style={styles.text}>스마트 전자서명 시스템</Text> |
59 | 82 |
<View style={styles.view}> |
60 | 83 |
<TextInput |
61 |
- value={email} |
|
62 |
- onChangeText={text => setEmail(text.trim())} |
|
84 |
+ value={id} |
|
85 |
+ onChangeText={(text) => setId(text.trim())} |
|
63 | 86 |
title={'아이디'} |
64 | 87 |
returnKeyType={ReturnKeyTypes.NEXT} |
65 |
- iconName={IconNames.EMAIL} |
|
88 |
+ iconName={IconNames.ID} |
|
66 | 89 |
onSubmitEditing={() => passwordRef.current.focus()} |
67 | 90 |
/> |
68 | 91 |
<TextInput |
69 | 92 |
ref={passwordRef} |
70 | 93 |
value={password} |
71 |
- onChangeText={text => setPassword(text.trim())} |
|
94 |
+ onChangeText={(text) => setPassword(text.trim())} |
|
72 | 95 |
title={'비밀번호'} |
73 | 96 |
secureTextEntry |
74 | 97 |
iconName={IconNames.PASSWORD} |
... | ... | @@ -121,7 +144,7 @@ |
121 | 144 |
fontWeight: 'bold', |
122 | 145 |
}, |
123 | 146 |
|
124 |
- line: {flex: 1, height: 1, backgroundColor: 'black'}, |
|
147 |
+ line: { flex: 1, height: 1, backgroundColor: 'black' }, |
|
125 | 148 |
}); |
126 | 149 |
|
127 | 150 |
export default SignInScreen; |
--- kogas_app/src/screens/SignatureListScreen.js
+++ kogas_app/src/screens/SignatureListScreen.js
... | ... | @@ -1,57 +1,57 @@ |
1 |
-import {FlatList, StyleSheet, View} from 'react-native'; |
|
2 |
-import ListItem from '../components/ListItem'; |
|
3 |
-import EmptyList from '../components/EmptyList'; |
|
1 |
+// import {FlatList, StyleSheet, View} from 'react-native'; |
|
2 |
+// import ListItem from '../components/ListItem'; |
|
3 |
+// import EmptyList from '../components/EmptyList'; |
|
4 | 4 |
|
5 |
-const SignatureListScreen = () => { |
|
6 |
- const List = [ |
|
7 |
- { |
|
8 |
- id: 1, |
|
9 |
- status: '서명진행중', //상태 |
|
10 |
- title: '제목', |
|
11 |
- writer: '작성자', |
|
12 |
- registrationDate: '2023-09-25', //등록 날짜 |
|
13 |
- content: [{ |
|
14 |
- department: '계약운용부', |
|
15 |
- name: 'aaa', |
|
16 |
- status: '서명완료', |
|
17 |
- date: '2023/09/25 15:00' |
|
18 |
- }, { |
|
19 |
- department: '발전영업부', |
|
20 |
- name: 'bbb', |
|
21 |
- status: '서명완료', |
|
22 |
- date: '2023/09/25 15:00' |
|
23 |
- }] |
|
24 |
- }, |
|
25 |
- { |
|
26 |
- id: 2, |
|
27 |
- status: '서명완료', //상태 |
|
28 |
- title: '제목', |
|
29 |
- writer: '작성자', |
|
30 |
- registrationDate: '2023-09-25', //등록 날짜 |
|
31 |
- content: [{department: '발전영업부', name: 'bbb', status: '서명완료', date: '2023/09/25 15:00'}] |
|
32 |
- }, |
|
33 |
- ]; |
|
34 |
- return List.length ? ( |
|
35 |
- <View style={styles.container}> |
|
36 |
- <FlatList |
|
37 |
- data={List} |
|
38 |
- renderItem={({item}) => ( |
|
39 |
- <ListItem name="SignatureListScreen" item={item} /> |
|
40 |
- )} |
|
41 |
- windowSize={5} |
|
42 |
- ListHeaderComponent={View} |
|
43 |
- ListHeaderComponentStyle={{height: 10}} |
|
44 |
- /> |
|
45 |
- </View> |
|
46 |
- ) : ( |
|
47 |
- <EmptyList /> |
|
48 |
- ); |
|
49 |
-}; |
|
5 |
+// const SignatureListScreen = () => { |
|
6 |
+// const List = [ |
|
7 |
+// { |
|
8 |
+// id: 1, |
|
9 |
+// status: '서명진행중', //상태 |
|
10 |
+// title: '제목', |
|
11 |
+// writer: '작성자', |
|
12 |
+// registrationDate: '2023-09-25', //등록 날짜 |
|
13 |
+// content: [{ |
|
14 |
+// department: '계약운용부', |
|
15 |
+// name: 'aaa', |
|
16 |
+// status: '서명완료', |
|
17 |
+// date: '2023/09/25 15:00' |
|
18 |
+// }, { |
|
19 |
+// department: '발전영업부', |
|
20 |
+// name: 'bbb', |
|
21 |
+// status: '서명완료', |
|
22 |
+// date: '2023/09/25 15:00' |
|
23 |
+// }] |
|
24 |
+// }, |
|
25 |
+// { |
|
26 |
+// id: 2, |
|
27 |
+// status: '서명완료', //상태 |
|
28 |
+// title: '제목', |
|
29 |
+// writer: '작성자', |
|
30 |
+// registrationDate: '2023-09-25', //등록 날짜 |
|
31 |
+// content: [{department: '발전영업부', name: 'bbb', status: '서명완료', date: '2023/09/25 15:00'}] |
|
32 |
+// }, |
|
33 |
+// ]; |
|
34 |
+// return List.length ? ( |
|
35 |
+// <View style={styles.container}> |
|
36 |
+// <FlatList |
|
37 |
+// data={List} |
|
38 |
+// renderItem={({item}) => ( |
|
39 |
+// <ListItem name="SignatureListScreen" item={item} /> |
|
40 |
+// )} |
|
41 |
+// windowSize={5} |
|
42 |
+// ListHeaderComponent={View} |
|
43 |
+// ListHeaderComponentStyle={{height: 10}} |
|
44 |
+// /> |
|
45 |
+// </View> |
|
46 |
+// ) : ( |
|
47 |
+// <EmptyList /> |
|
48 |
+// ); |
|
49 |
+// }; |
|
50 | 50 |
|
51 |
-const styles = StyleSheet.create({ |
|
52 |
- container: { |
|
53 |
- flex: 1, |
|
54 |
- }, |
|
55 |
-}); |
|
51 |
+// const styles = StyleSheet.create({ |
|
52 |
+// container: { |
|
53 |
+// flex: 1, |
|
54 |
+// }, |
|
55 |
+// }); |
|
56 | 56 |
|
57 |
-export default SignatureListScreen; |
|
57 |
+// export default SignatureListScreen; |
+++ kogas_app/src/test/PdfOpen.js
... | ... | @@ -0,0 +1,95 @@ |
1 | +/** | |
2 | + * Copyright (c) 2017-present, Wonday (@wonday.org) | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * This source code is licensed under the MIT-style license found in the | |
6 | + * LICENSE file in the root directory of this source tree. | |
7 | + */ | |
8 | + | |
9 | +import React from 'react'; | |
10 | +import { StyleSheet, Dimensions, View } from 'react-native'; | |
11 | +import Pdf from 'react-native-pdf'; | |
12 | + | |
13 | +export default class PDFOpen extends React.Component { | |
14 | + render() { | |
15 | + const source = { uri: 'file://C:/Users/mycom/Desktop/KOGAS_APP/test.pdf', cache: false }; | |
16 | + //const source = require('./test.pdf'); // ios only | |
17 | + //const source = {uri:'bundle-assets://test.pdf' }; | |
18 | + //const source = {uri:'file:///sdcard/test.pdf'}; | |
19 | + //const source = {uri:"data:application/pdf;base64,JVBERi0xLjcKJc..."}; | |
20 | + //const source = {uri:"content://com.example.blobs/xxxxxxxx-...?offset=0&size=xxx"}; | |
21 | + //const source = {uri:"blob:xxxxxxxx-...?offset=0&size=xxx"}; | |
22 | + | |
23 | + return ( | |
24 | + <View style={styles.container}> | |
25 | ||
26 | + source={source} | |
27 | + onLoadComplete={(numberOfPages,filePath) => { | |
28 | + console.log(`Number of pages: ${numberOfPages}`); | |
29 | + }} | |
30 | + onPageChanged={(page,numberOfPages) => { | |
31 | + console.log(`Current page: ${page}`); | |
32 | + }} | |
33 | + onError={(error) => { | |
34 | + console.log(error); | |
35 | + }} | |
36 | + onPressLink={(uri) => { | |
37 | + console.log(`Link pressed: ${uri}`); | |
38 | + }} | |
39 | + style={styles.pdf}/> | |
40 | + </View> | |
41 | + ) | |
42 | + } | |
43 | +} | |
44 | + | |
45 | +const styles = StyleSheet.create({ | |
46 | + container: { | |
47 | + flex: 1, | |
48 | + justifyContent: 'flex-start', | |
49 | + alignItems: 'center', | |
50 | + marginTop: 25, | |
51 | + }, | |
52 | + pdf: { | |
53 | + flex:1, | |
54 | + width:Dimensions.get('window').width, | |
55 | + height:Dimensions.get('window').height, | |
56 | + } | |
57 | +}); | |
58 | + | |
59 | +// import React from 'react'; | |
60 | +// import { Text, View, Button } from 'react-native'; | |
61 | +// import { WebView } from 'react-native-webview'; | |
62 | + | |
63 | +// export default class PdfOpen extends React.Component { | |
64 | +// constructor(props) { | |
65 | +// super(props); | |
66 | +// this.state = { | |
67 | +// showPdfViewer: false, // 초기에 PDF 뷰어를 숨깁니다. | |
68 | +// }; | |
69 | +// } | |
70 | + | |
71 | +// // 버튼 클릭 시 PDF 뷰어를 보이도록 상태를 변경합니다. | |
72 | +// showPdfViewer = () => { | |
73 | +// this.setState({ showPdfViewer: true }); | |
74 | +// } | |
75 | + | |
76 | +// render() { | |
77 | +// // 상태에 따라 PDF 뷰어를 보이거나 숨깁니다. | |
78 | +// const pdfViewer = this.state.showPdfViewer ? ( | |
79 | +// <WebView | |
80 | +// source={{ uri: 'C:/Users/mycom/Desktop/aa.pdf' }} | |
81 | +// onError={(err) => console.log(err)} | |
82 | +// /> | |
83 | +// ) : null; | |
84 | + | |
85 | +// return ( | |
86 | +// <View> | |
87 | +// <Text>d</Text> | |
88 | +// {pdfViewer} | |
89 | +// {/* 버튼을 누르면 PDF 뷰어를 보이도록 합니다. */} | |
90 | +// <Button title="Show PDF" onPress={this.showPdfViewer} /> | |
91 | +// </View> | |
92 | +// ); | |
93 | +// } | |
94 | +// } | |
95 | + |
--- kogas_app/yarn.lock
+++ kogas_app/yarn.lock
... | ... | @@ -1761,6 +1761,11 @@ |
1761 | 1761 |
metro-react-native-babel-transformer "0.76.8" |
1762 | 1762 |
metro-runtime "0.76.8" |
1763 | 1763 |
|
1764 |
+"@react-native/normalize-color@*": |
|
1765 |
+ version "2.1.0" |
|
1766 |
+ resolved "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.1.0.tgz" |
|
1767 |
+ integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== |
|
1768 |
+ |
|
1764 | 1769 |
"@react-native/normalize-colors@*": |
1765 | 1770 |
version "0.73.0" |
1766 | 1771 |
resolved "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.73.0.tgz" |
... | ... | @@ -1950,6 +1955,21 @@ |
1950 | 1955 |
version "15.7.6" |
1951 | 1956 |
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz" |
1952 | 1957 |
integrity sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg== |
1958 |
+ |
|
1959 |
+"@types/react-native-vector-icons@^6.4.14": |
|
1960 |
+ version "6.4.14" |
|
1961 |
+ resolved "https://registry.npmjs.org/@types/react-native-vector-icons/-/react-native-vector-icons-6.4.14.tgz" |
|
1962 |
+ integrity sha512-3RaEadfUUImrDed03hwRnYp5QFevcWkWgPUHxj9U9lB6G5uPEGaxXoLWdjgioQ46CvADXUzrDOEYLSVcAn1GQw== |
|
1963 |
+ dependencies: |
|
1964 |
+ "@types/react" "*" |
|
1965 |
+ "@types/react-native" "^0.70" |
|
1966 |
+ |
|
1967 |
+"@types/react-native@^0.70": |
|
1968 |
+ version "0.70.14" |
|
1969 |
+ resolved "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.14.tgz" |
|
1970 |
+ integrity sha512-Kwc+BYBrnDqvacNxKp1UtcZJnJJnTih2NYmi/ieAKlHdxEPN6sYMwmIwgHdoLHggvml6bf3DYRaH2jt+gzaLjw== |
|
1971 |
+ dependencies: |
|
1972 |
+ "@types/react" "*" |
|
1953 | 1973 |
|
1954 | 1974 |
"@types/react-test-renderer@^18.0.0": |
1955 | 1975 |
version "18.0.2" |
... | ... | @@ -2311,10 +2331,24 @@ |
2311 | 2331 |
dependencies: |
2312 | 2332 |
has-symbols "^1.0.3" |
2313 | 2333 |
|
2334 |
+asynckit@^0.4.0: |
|
2335 |
+ version "0.4.0" |
|
2336 |
+ resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" |
|
2337 |
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== |
|
2338 |
+ |
|
2314 | 2339 |
available-typed-arrays@^1.0.5: |
2315 | 2340 |
version "1.0.5" |
2316 | 2341 |
resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" |
2317 | 2342 |
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== |
2343 |
+ |
|
2344 |
+axios@^1.5.0: |
|
2345 |
+ version "1.5.0" |
|
2346 |
+ resolved "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz" |
|
2347 |
+ integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== |
|
2348 |
+ dependencies: |
|
2349 |
+ follow-redirects "^1.15.0" |
|
2350 |
+ form-data "^4.0.0" |
|
2351 |
+ proxy-from-env "^1.1.0" |
|
2318 | 2352 |
|
2319 | 2353 |
babel-core@^7.0.0-bridge.0: |
2320 | 2354 |
version "7.0.0-bridge.0" |
... | ... | @@ -2454,6 +2488,11 @@ |
2454 | 2488 |
version "1.0.2" |
2455 | 2489 |
resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" |
2456 | 2490 |
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== |
2491 |
+ |
|
2492 |
[email protected]: |
|
2493 |
+ version "0.1.0" |
|
2494 |
+ resolved "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz" |
|
2495 |
+ integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== |
|
2457 | 2496 |
|
2458 | 2497 |
base64-js@^1.1.2, base64-js@^1.3.1: |
2459 | 2498 |
version "1.5.1" |
... | ... | @@ -2711,6 +2750,13 @@ |
2711 | 2750 |
resolved "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz" |
2712 | 2751 |
integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== |
2713 | 2752 |
|
2753 |
+combined-stream@^1.0.8: |
|
2754 |
+ version "1.0.8" |
|
2755 |
+ resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" |
|
2756 |
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== |
|
2757 |
+ dependencies: |
|
2758 |
+ delayed-stream "~1.0.0" |
|
2759 |
+ |
|
2714 | 2760 |
command-exists@^1.2.8: |
2715 | 2761 |
version "1.2.9" |
2716 | 2762 |
resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" |
... | ... | @@ -2825,6 +2871,11 @@ |
2825 | 2871 |
shebang-command "^2.0.0" |
2826 | 2872 |
which "^2.0.1" |
2827 | 2873 |
|
2874 |
+crypto-js@^3.2.0: |
|
2875 |
+ version "3.3.0" |
|
2876 |
+ resolved "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz" |
|
2877 |
+ integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== |
|
2878 |
+ |
|
2828 | 2879 |
csstype@^3.0.2: |
2829 | 2880 |
version "3.1.2" |
2830 | 2881 |
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" |
... | ... | @@ -2906,6 +2957,11 @@ |
2906 | 2957 |
has-property-descriptors "^1.0.0" |
2907 | 2958 |
object-keys "^1.1.1" |
2908 | 2959 |
|
2960 |
+delayed-stream@~1.0.0: |
|
2961 |
+ version "1.0.0" |
|
2962 |
+ resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" |
|
2963 |
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== |
|
2964 |
+ |
|
2909 | 2965 |
denodeify@^1.2.1: |
2910 | 2966 |
version "1.2.1" |
2911 | 2967 |
resolved "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz" |
... | ... | @@ -2915,6 +2971,15 @@ |
2915 | 2971 |
version "2.0.0" |
2916 | 2972 |
resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" |
2917 | 2973 |
integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== |
2974 |
+ |
|
2975 |
+deprecated-react-native-prop-types@^2.3.0: |
|
2976 |
+ version "2.3.0" |
|
2977 |
+ resolved "https://registry.npmjs.org/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-2.3.0.tgz" |
|
2978 |
+ integrity sha512-pWD0voFtNYxrVqvBMYf5gq3NA2GCpfodS1yNynTPc93AYA/KEMGeWDqqeUB6R2Z9ZofVhks2aeJXiuQqKNpesA== |
|
2979 |
+ dependencies: |
|
2980 |
+ "@react-native/normalize-color" "*" |
|
2981 |
+ invariant "*" |
|
2982 |
+ prop-types "*" |
|
2918 | 2983 |
|
2919 | 2984 |
[email protected]: |
2920 | 2985 |
version "4.1.0" |
... | ... | @@ -3127,6 +3192,11 @@ |
3127 | 3192 |
version "4.0.0" |
3128 | 3193 |
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" |
3129 | 3194 |
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== |
3195 |
+ |
|
3196 |
[email protected]: |
|
3197 |
+ version "2.0.0" |
|
3198 |
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" |
|
3199 |
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== |
|
3130 | 3200 |
|
3131 | 3201 |
eslint-config-prettier@^8.5.0: |
3132 | 3202 |
version "8.10.0" |
... | ... | @@ -3500,12 +3570,26 @@ |
3500 | 3570 |
resolved "https://registry.npmjs.org/flow-parser/-/flow-parser-0.217.0.tgz" |
3501 | 3571 |
integrity sha512-hEa5n0dta1RcaDwJDWbnyelw07PK7+Vx0f9kDht28JOt2hXgKdKGaT3wM45euWV2DxOXtzDSTaUgGSD/FPvC2Q== |
3502 | 3572 |
|
3573 |
+follow-redirects@^1.15.0: |
|
3574 |
+ version "1.15.3" |
|
3575 |
+ resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz" |
|
3576 |
+ integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== |
|
3577 |
+ |
|
3503 | 3578 |
for-each@^0.3.3: |
3504 | 3579 |
version "0.3.3" |
3505 | 3580 |
resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" |
3506 | 3581 |
integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== |
3507 | 3582 |
dependencies: |
3508 | 3583 |
is-callable "^1.1.3" |
3584 |
+ |
|
3585 |
+form-data@^4.0.0: |
|
3586 |
+ version "4.0.0" |
|
3587 |
+ resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" |
|
3588 |
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== |
|
3589 |
+ dependencies: |
|
3590 |
+ asynckit "^0.4.0" |
|
3591 |
+ combined-stream "^1.0.8" |
|
3592 |
+ mime-types "^2.1.12" |
|
3509 | 3593 |
|
3510 | 3594 |
[email protected]: |
3511 | 3595 |
version "0.5.2" |
... | ... | @@ -3598,7 +3682,7 @@ |
3598 | 3682 |
dependencies: |
3599 | 3683 |
is-glob "^4.0.3" |
3600 | 3684 |
|
3601 |
-glob@^7.1.3, glob@^7.1.4: |
|
3685 |
+glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: |
|
3602 | 3686 |
version "7.2.3" |
3603 | 3687 |
resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" |
3604 | 3688 |
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== |
... | ... | @@ -3819,7 +3903,7 @@ |
3819 | 3903 |
has "^1.0.3" |
3820 | 3904 |
side-channel "^1.0.4" |
3821 | 3905 |
|
3822 |
-invariant@*, invariant@^2.2.4: |
|
3906 |
+invariant@*, invariant@^2.2.4, [email protected]: |
|
3823 | 3907 |
version "2.2.4" |
3824 | 3908 |
resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" |
3825 | 3909 |
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== |
... | ... | @@ -5340,7 +5424,7 @@ |
5340 | 5424 |
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" |
5341 | 5425 |
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== |
5342 | 5426 |
|
5343 |
-mime-types@^2.1.27, mime-types@~2.1.34: |
|
5427 |
+mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.34: |
|
5344 | 5428 |
version "2.1.35" |
5345 | 5429 |
resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" |
5346 | 5430 |
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== |
... | ... | @@ -5830,6 +5914,11 @@ |
5830 | 5914 |
object-assign "^4.1.1" |
5831 | 5915 |
react-is "^16.13.1" |
5832 | 5916 |
|
5917 |
+proxy-from-env@^1.1.0: |
|
5918 |
+ version "1.1.0" |
|
5919 |
+ resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" |
|
5920 |
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== |
|
5921 |
+ |
|
5833 | 5922 |
punycode@^2.1.0: |
5834 | 5923 |
version "2.3.0" |
5835 | 5924 |
resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" |
... | ... | @@ -5905,6 +5994,14 @@ |
5905 | 5994 |
resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" |
5906 | 5995 |
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== |
5907 | 5996 |
|
5997 |
+react-native-blob-util@^0.19.1, react-native-blob-util@>=0.13.7: |
|
5998 |
+ version "0.19.1" |
|
5999 |
+ resolved "https://registry.npmjs.org/react-native-blob-util/-/react-native-blob-util-0.19.1.tgz" |
|
6000 |
+ integrity sha512-X1+MAcijR1AEky9dqNTFtsKvUPAoof2qsmmbSYThj/RWIucc2hhzrK3V2BJVU/hemNuz7E0NDaErmpNDpDHtNw== |
|
6001 |
+ dependencies: |
|
6002 |
+ base-64 "0.1.0" |
|
6003 |
+ glob "^7.2.3" |
|
6004 |
+ |
|
5908 | 6005 |
react-native-gesture-handler@^2.13.1, "react-native-gesture-handler@>= 1.0.0": |
5909 | 6006 |
version "2.13.1" |
5910 | 6007 |
resolved "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.13.1.tgz" |
... | ... | @@ -5915,6 +6012,14 @@ |
5915 | 6012 |
invariant "^2.2.4" |
5916 | 6013 |
lodash "^4.17.21" |
5917 | 6014 |
prop-types "^15.7.2" |
6015 |
+ |
|
6016 |
+react-native-pdf@^6.7.1: |
|
6017 |
+ version "6.7.1" |
|
6018 |
+ resolved "https://registry.npmjs.org/react-native-pdf/-/react-native-pdf-6.7.1.tgz" |
|
6019 |
+ integrity sha512-zszQygtNBYoUfEtP/fV7zhzGeohDlUksh2p3OzshLrxdY9mw7Tm5VXAxYq4d8HsomRJUbFlJ7rHaTU9AQL800g== |
|
6020 |
+ dependencies: |
|
6021 |
+ crypto-js "^3.2.0" |
|
6022 |
+ deprecated-react-native-prop-types "^2.3.0" |
|
5918 | 6023 |
|
5919 | 6024 |
react-native-reanimated@^3.5.4: |
5920 | 6025 |
version "3.5.4" |
... | ... | @@ -5947,6 +6052,14 @@ |
5947 | 6052 |
prop-types "^15.7.2" |
5948 | 6053 |
yargs "^16.1.1" |
5949 | 6054 |
|
6055 |
+react-native-webview@^13.6.0: |
|
6056 |
+ version "13.6.0" |
|
6057 |
+ resolved "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.6.0.tgz" |
|
6058 |
+ integrity sha512-KapVfHEj60e+2QplhqoCMdqW4vDzzvLS3YasfjVoMV4qhsZ3padncMEqOHX6AY4FIAdRzAxG0JQs+kXczAPYeQ== |
|
6059 |
+ dependencies: |
|
6060 |
+ escape-string-regexp "2.0.0" |
|
6061 |
+ invariant "2.2.4" |
|
6062 |
+ |
|
5950 | 6063 |
react-native@*, react-native@>=0.57, [email protected]: |
5951 | 6064 |
version "0.72.4" |
5952 | 6065 |
resolved "https://registry.npmjs.org/react-native/-/react-native-0.72.4.tgz" |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?