김성연

최종보고서 ,소스코드 제출

Showing 127 changed files with 3378 additions and 686 deletions
...@@ -3,4 +3,7 @@ ...@@ -3,4 +3,7 @@
3 <component name="JavaScriptSettings"> 3 <component name="JavaScriptSettings">
4 <option name="languageLevel" value="JSX" /> 4 <option name="languageLevel" value="JSX" />
5 </component> 5 </component>
6 + <component name="ProjectPlainTextFileTypeManager">
7 + <file url="file://$PROJECT_DIR$/render_server_react_native/components/CardComponent.js" />
8 + </component>
6 </project> 9 </project>
...\ No newline at end of file ...\ No newline at end of file
......
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 <component name="VcsDirectoryMappings"> 3 <component name="VcsDirectoryMappings">
4 - <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5 <mapping directory="$PROJECT_DIR$/locationTest/expo-location-example" vcs="Git" /> 4 <mapping directory="$PROJECT_DIR$/locationTest/expo-location-example" vcs="Git" />
6 <mapping directory="$PROJECT_DIR$/my-project" vcs="Git" /> 5 <mapping directory="$PROJECT_DIR$/my-project" vcs="Git" />
7 <mapping directory="$PROJECT_DIR$/render_server_react_native" vcs="Git" /> 6 <mapping directory="$PROJECT_DIR$/render_server_react_native" vcs="Git" />
......
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="WebServers">
4 + <option name="servers">
5 + <webServer id="1b403629-1b05-48f5-aa8c-1b92f496c1d2" name="2019-BigData" url="http://133.186.211.42">
6 + <fileTransfer host="133.186.211.42" port="22" accessType="SFTP">
7 + <advancedOptions>
8 + <advancedOptions dataProtectionLevel="Private" passiveMode="true" shareSSLContext="true" />
9 + </advancedOptions>
10 + <option name="port" value="22" />
11 + </fileTransfer>
12 + </webServer>
13 + </option>
14 + </component>
15 +</project>
...\ No newline at end of file ...\ No newline at end of file
...@@ -2,14 +2,57 @@ ...@@ -2,14 +2,57 @@
2 <project version="4"> 2 <project version="4">
3 <component name="ChangeListManager"> 3 <component name="ChangeListManager">
4 <list default="true" id="940f1aa2-9848-4abc-bd75-a3db12d9e8e1" name="Default Changelist" comment=""> 4 <list default="true" id="940f1aa2-9848-4abc-bd75-a3db12d9e8e1" name="Default Changelist" comment="">
5 - <change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" /> 5 + <change afterPath="$PROJECT_DIR$/render_server_react_native/AppStyles.js" afterDir="false" />
6 - <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> 6 + <change afterPath="$PROJECT_DIR$/render_server_react_native/AuthContext.js" afterDir="false" />
7 + <change afterPath="$PROJECT_DIR$/render_server_react_native/assets/icons/Nike-Logo.html" afterDir="false" />
8 + <change afterPath="$PROJECT_DIR$/render_server_react_native/assets/icons/google-marker.png" afterDir="false" />
9 + <change afterPath="$PROJECT_DIR$/render_server_react_native/assets/nike.png" afterDir="false" />
10 + <change afterPath="$PROJECT_DIR$/render_server_react_native/assets/search.html" afterDir="false" />
11 + <change afterPath="$PROJECT_DIR$/render_server_react_native/assets/userFile/file2.jpg" afterDir="false" />
12 + <change afterPath="$PROJECT_DIR$/render_server_react_native/assets/userFile/userVelocity.json" afterDir="false" />
13 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/BusPathComponent.js" afterDir="false" />
14 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/DateTimePickerComponent.js" afterDir="false" />
15 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/GoPathSummary.js" afterDir="false" />
16 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/LanePathComponent.js" afterDir="false" />
17 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/LoginComponent.js" afterDir="false" />
18 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/MyProfileComponent.js" afterDir="false" />
19 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/SignUpComponent.js" afterDir="false" />
20 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/StartAndFinishLocationComponent.js" afterDir="false" />
21 + <change afterPath="$PROJECT_DIR$/render_server_react_native/components/WalkPathComponent.js" afterDir="false" />
22 + <change afterPath="$PROJECT_DIR$/render_server_react_native/constants/layout.js" afterDir="false" />
23 + <change afterPath="$PROJECT_DIR$/render_server_react_native/navigations/SelectOrTakePhotoStackNavigation.js" afterDir="false" />
24 + <change afterPath="$PROJECT_DIR$/render_server_react_native/navigations/SelectOrTakePhotoTabNavigation.js" afterDir="false" />
25 + <change afterPath="$PROJECT_DIR$/render_server_react_native/navigations/SetLocationStackNavigation.js" afterDir="false" />
26 + <change afterPath="$PROJECT_DIR$/render_server_react_native/navigations/SetLocationTabNavigation.js" afterDir="false" />
27 + <change afterPath="$PROJECT_DIR$/render_server_react_native/navigations/TabNavigation.js" afterDir="false" />
28 + <change afterPath="$PROJECT_DIR$/render_server_react_native/reducers/index.js" afterDir="false" />
29 + <change afterPath="$PROJECT_DIR$/render_server_react_native/reducers/location.js" afterDir="false" />
30 + <change afterPath="$PROJECT_DIR$/render_server_react_native/reducers/user.js" afterDir="false" />
31 + <change afterPath="$PROJECT_DIR$/render_server_react_native/sagas/index.js" afterDir="false" />
32 + <change afterPath="$PROJECT_DIR$/render_server_react_native/sagas/location.js" afterDir="false" />
33 + <change afterPath="$PROJECT_DIR$/render_server_react_native/sagas/user.js" afterDir="false" />
34 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/Gallery.js" afterDir="false" />
35 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/GoPathDetail.js" afterDir="false" />
36 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/LocationTimeSet.js" afterDir="false" />
37 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/Login.js" afterDir="false" />
38 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/Main.js" afterDir="false" />
39 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/MainImage.js" afterDir="false" />
40 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/Maps.js" afterDir="false" />
41 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/OptRoutePath.js" afterDir="false" />
42 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/Profile.js" afterDir="false" />
43 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/SignUp.js" afterDir="false" />
44 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/TakePhoto.js" afterDir="false" />
45 + <change afterPath="$PROJECT_DIR$/render_server_react_native/screens/UploadPhoto.js" afterDir="false" />
46 + <change afterPath="$PROJECT_DIR$/render_server_react_native/store.js" afterDir="false" />
7 </list> 47 </list>
8 <option name="SHOW_DIALOG" value="false" /> 48 <option name="SHOW_DIALOG" value="false" />
9 <option name="HIGHLIGHT_CONFLICTS" value="true" /> 49 <option name="HIGHLIGHT_CONFLICTS" value="true" />
10 <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> 50 <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
11 <option name="LAST_RESOLUTION" value="IGNORE" /> 51 <option name="LAST_RESOLUTION" value="IGNORE" />
12 </component> 52 </component>
53 + <component name="FavoritesManager">
54 + <favorites_list name="code" />
55 + </component>
13 <component name="FileTemplateManagerImpl"> 56 <component name="FileTemplateManagerImpl">
14 <option name="RECENT_TEMPLATES"> 57 <option name="RECENT_TEMPLATES">
15 <list> 58 <list>
...@@ -18,7 +61,7 @@ ...@@ -18,7 +61,7 @@
18 </option> 61 </option>
19 </component> 62 </component>
20 <component name="Git.Settings"> 63 <component name="Git.Settings">
21 - <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." /> 64 + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/render_server_react_native" />
22 </component> 65 </component>
23 <component name="ProjectId" id="1baLVrrFUlmMeeq9EFLzndP0zML" /> 66 <component name="ProjectId" id="1baLVrrFUlmMeeq9EFLzndP0zML" />
24 <component name="ProjectLevelVcsManager" settingsEditedManually="true"> 67 <component name="ProjectLevelVcsManager" settingsEditedManually="true">
...@@ -32,16 +75,27 @@ ...@@ -32,16 +75,27 @@
32 <component name="PropertiesComponent"> 75 <component name="PropertiesComponent">
33 <property name="ASKED_ADD_EXTERNAL_FILES" value="true" /> 76 <property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
34 <property name="RunOnceActivity.ShowReadmeOnStart" value="true" /> 77 <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
35 - <property name="WebServerToolWindowFactoryState" value="false" /> 78 + <property name="WebServerToolWindowFactoryState" value="true" />
36 - <property name="last_opened_file_path" value="$PROJECT_DIR$" /> 79 + <property name="WebServerToolWindowPanel.toolwindow.highlight.mappings" value="true" />
80 + <property name="WebServerToolWindowPanel.toolwindow.highlight.symlinks" value="true" />
81 + <property name="WebServerToolWindowPanel.toolwindow.show.date" value="false" />
82 + <property name="WebServerToolWindowPanel.toolwindow.show.permissions" value="false" />
83 + <property name="WebServerToolWindowPanel.toolwindow.show.size" value="false" />
84 + <property name="last_opened_file_path" value="$PROJECT_DIR$/render_server_react_native/assets/userFile" />
37 <property name="nodejs_package_manager_path" value="npm" /> 85 <property name="nodejs_package_manager_path" value="npm" />
38 </component> 86 </component>
39 <component name="RecentsManager"> 87 <component name="RecentsManager">
88 + <key name="MoveFile.RECENT_KEYS">
89 + <recent name="$PROJECT_DIR$/render_server_react_native" />
90 + <recent name="$PROJECT_DIR$/render_server_react_native/navigations" />
91 + <recent name="$PROJECT_DIR$/render_server_react_native/components" />
92 + </key>
40 <key name="CopyFile.RECENT_KEYS"> 93 <key name="CopyFile.RECENT_KEYS">
94 + <recent name="$PROJECT_DIR$/render_server_react_native/assets/userFile" />
95 + <recent name="$PROJECT_DIR$/render_server_react_native" />
96 + <recent name="$PROJECT_DIR$/render_server_react_native/screens" />
97 + <recent name="$PROJECT_DIR$/render_server_react_native/components" />
41 <recent name="$PROJECT_DIR$/user_and_post_server" /> 98 <recent name="$PROJECT_DIR$/user_and_post_server" />
42 - <recent name="$PROJECT_DIR$" />
43 - <recent name="$PROJECT_DIR$/my-project/sagas" />
44 - <recent name="$PROJECT_DIR$/my-project/reducers" />
45 </key> 99 </key>
46 </component> 100 </component>
47 <component name="SvnConfiguration"> 101 <component name="SvnConfiguration">
...@@ -70,21 +124,67 @@ ...@@ -70,21 +124,67 @@
70 <workItem from="1590305558438" duration="34000" /> 124 <workItem from="1590305558438" duration="34000" />
71 <workItem from="1590392477108" duration="7362000" /> 125 <workItem from="1590392477108" duration="7362000" />
72 <workItem from="1590405423629" duration="8216000" /> 126 <workItem from="1590405423629" duration="8216000" />
73 - <workItem from="1590918384429" duration="996000" /> 127 + <workItem from="1590427383874" duration="208000" />
128 + <workItem from="1590472694480" duration="1558000" />
129 + <workItem from="1590510616633" duration="2347000" />
130 + <workItem from="1590561746816" duration="2332000" />
131 + <workItem from="1590649191412" duration="121000" />
132 + <workItem from="1590667953682" duration="5117000" />
133 + <workItem from="1590847459903" duration="309000" />
134 + <workItem from="1590857450778" duration="161000" />
135 + <workItem from="1590938910580" duration="4993000" />
136 + <workItem from="1591036634686" duration="2717000" />
137 + <workItem from="1591042905280" duration="3848000" />
138 + <workItem from="1591241250822" duration="1506000" />
139 + <workItem from="1591243317314" duration="1000" />
140 + <workItem from="1591257776111" duration="2611000" />
141 + <workItem from="1591347046562" duration="4809000" />
142 + <workItem from="1591365203105" duration="1624000" />
143 + <workItem from="1591368704614" duration="2067000" />
144 + <workItem from="1591371675134" duration="1958000" />
145 + <workItem from="1591399909349" duration="755000" />
146 + <workItem from="1591424440663" duration="3921000" />
147 + <workItem from="1591452959431" duration="5762000" />
148 + <workItem from="1591498815349" duration="8719000" />
149 + <workItem from="1591763504251" duration="1207000" />
150 + <workItem from="1591768189989" duration="16032000" />
151 + <workItem from="1591807888950" duration="205000" />
152 + <workItem from="1591810687526" duration="2491000" />
153 + <workItem from="1591814852707" duration="850000" />
154 + <workItem from="1592023711264" duration="7962000" />
155 + <workItem from="1592034078601" duration="2771000" />
156 + <workItem from="1592043154434" duration="5000" />
157 + <workItem from="1592120155930" duration="19951000" />
158 + <workItem from="1592294228904" duration="12060000" />
159 + <workItem from="1592423933838" duration="20743000" />
160 + <workItem from="1592460562052" duration="9046000" />
161 + <workItem from="1592493681837" duration="17090000" />
162 + <workItem from="1592515725392" duration="2907000" />
163 + <workItem from="1592528808951" duration="135000" />
164 + <workItem from="1592536638207" duration="5384000" />
165 + <workItem from="1592659198314" duration="162000" />
166 + <workItem from="1592659457606" duration="137000" />
74 </task> 167 </task>
75 <servers /> 168 <servers />
76 </component> 169 </component>
77 <component name="TypeScriptGeneratedFilesManager"> 170 <component name="TypeScriptGeneratedFilesManager">
78 <option name="version" value="1" /> 171 <option name="version" value="1" />
79 </component> 172 </component>
173 + <component name="UnknownFeatures">
174 + <option featureType="com.intellij.fileTypeFactory" implementationName="*.csv" />
175 + </component>
80 <component name="VcsManagerConfiguration"> 176 <component name="VcsManagerConfiguration">
81 <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" /> 177 <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
82 </component> 178 </component>
83 <component name="WindowStateProjectService"> 179 <component name="WindowStateProjectService">
84 - <state x="368" y="125" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1590082196823"> 180 + <state x="399" y="127" key="#Deployment" timestamp="1591366165652">
85 <screen x="0" y="23" width="1440" height="877" /> 181 <screen x="0" y="23" width="1440" height="877" />
86 </state> 182 </state>
87 - <state x="368" y="125" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.23.1440.877@0.23.1440.877" timestamp="1590082196823" /> 183 + <state x="399" y="127" key="#Deployment/0.23.1440.877@0.23.1440.877" timestamp="1591366165652" />
184 + <state x="368" y="125" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1591815112224">
185 + <screen x="0" y="23" width="1440" height="877" />
186 + </state>
187 + <state x="368" y="125" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.23.1440.877@0.23.1440.877" timestamp="1591815112224" />
88 <state x="710" y="271" key="#com.intellij.fileTypes.FileTypeChooser" timestamp="1588881921466"> 188 <state x="710" y="271" key="#com.intellij.fileTypes.FileTypeChooser" timestamp="1588881921466">
89 <screen x="0" y="23" width="1440" height="877" /> 189 <screen x="0" y="23" width="1440" height="877" />
90 </state> 190 </state>
...@@ -105,10 +205,14 @@ ...@@ -105,10 +205,14 @@
105 <screen x="0" y="23" width="1440" height="877" /> 205 <screen x="0" y="23" width="1440" height="877" />
106 </state> 206 </state>
107 <state width="784" height="229" key="GridCell.Tab.0.right/0.23.1440.877@0.23.1440.877" timestamp="1588878772213" /> 207 <state width="784" height="229" key="GridCell.Tab.0.right/0.23.1440.877@0.23.1440.877" timestamp="1588878772213" />
108 - <state x="702" y="213" width="670" height="676" key="search.everywhere.popup" timestamp="1588882527475"> 208 + <state x="585" y="23" width="552" height="758" key="dock-window-1" timestamp="1592127183020">
209 + <screen x="0" y="23" width="1440" height="877" />
210 + </state>
211 + <state x="585" y="23" width="552" height="758" key="dock-window-1/0.23.1440.877@0.23.1440.877" timestamp="1592127183020" />
212 + <state x="702" y="213" width="670" height="676" key="search.everywhere.popup" timestamp="1592465069777">
109 <screen x="0" y="23" width="1440" height="877" /> 213 <screen x="0" y="23" width="1440" height="877" />
110 </state> 214 </state>
111 - <state x="702" y="213" width="670" height="676" key="search.everywhere.popup/0.23.1440.877@0.23.1440.877" timestamp="1588882527475" /> 215 + <state x="702" y="213" width="670" height="676" key="search.everywhere.popup/0.23.1440.877@0.23.1440.877" timestamp="1592465069777" />
112 <state x="767" y="383" key="vcs.readOnlyHandler.ReadOnlyStatusDialog" timestamp="1588882053803"> 216 <state x="767" y="383" key="vcs.readOnlyHandler.ReadOnlyStatusDialog" timestamp="1588882053803">
113 <screen x="0" y="23" width="1440" height="877" /> 217 <screen x="0" y="23" width="1440" height="877" />
114 </state> 218 </state>
......
1 -PORT=4001
2 -COOKIE_SECRET=test
...\ No newline at end of file ...\ No newline at end of file
1 -function printSearchType(result) {
2 - if (result.result.searchType == 0) {
3 - console.log("도시내 이동");
4 - } else if (result.result.searchType == 1) {
5 - console.log("도시간 직통");
6 - } else {
7 - console.log("도시간 환승");
8 - }
9 -}
10 -
11 -function printBusCount(result) {
12 - console.log("버스 결과 개수:", result.result.busCount);
13 -}
14 -
15 -function printSubwayCount(result) {
16 - console.log("지하철 결과 개수 :", result.result.subwayCount);
17 -}
18 -
19 -function printSubwayBusCount(result) {
20 - console.log("버스 + 지하철 결과 개수 : ", result.result.subwayBusCount);
21 -}
22 -
23 -function printPointDistance(result) {
24 - console.log("출발점-도착점 직선 거리 :", result.pointDistance);
25 -}
26 -
27 -function printPathType(info) {
28 - if (info.pathType == 1) {
29 - console.log("지하철");
30 - } else if (info.pathType == 2) {
31 - console.log("버스");
32 - } else if (info.pathType == 3) {
33 - console.log("지하철 + 버스");
34 - }
35 -}
36 -
37 -function printTrafficDistance(info) {
38 - console.log("대중교통 이동거리: ", info.trafficDistance);
39 -}
40 -
41 -function printTotalWalk(info) {
42 - console.log("도보 이동거리 : ", info.totalWalk);
43 -}
44 -
45 -function printTotalTime(info) {
46 - console.log("총 소요시간 : ", info.totalTime);
47 -}
48 -
49 -function printBusTransitCount(info) {
50 - console.log("버스 환승 :", info.busTransitCount, "회");
51 -}
52 -
53 -function printSubwayTransitCount(info) {
54 - console.log("지하철 환승 :", info.subwayTransit, "회");
55 -}
56 -
57 -function printFirstStartStation(info) {
58 - console.log("최초 출발 역(정류소) : ", info.firstStartStation);
59 -}
60 -
61 -function printLastEndStation(info) {
62 - console.log("최종 도착 역(정류소) : ", info.lastEndStation);
63 -}
64 -
65 -function printBusStationCount(info) {
66 - console.log(info.busStationCount, "개 정류소 이동");
67 -}
68 -
69 -function printSubwayStationCount(info) {
70 - console.log(info.subwayStationCount, "개 역 이동");
71 -}
72 -
73 -function printPath(path) {
74 - printPathType(path);
75 - printTrafficDistance(path);
76 - printTotalWalk(path);
77 - printTotalTime(path);
78 - printBusTransitCount(path);
79 - printSubwayTransitCount(path);
80 - printFirstStartStation(path);
81 - printLastEndStation(path);
82 - if (path.pathType == 1) {
83 - printSubwayStationCount(path);
84 - } else if (path.pathType == 2) {
85 - printBusStationCount(path);
86 - } else {
87 - printBusStationCount(path);
88 - printSubwayStationCount(path);
89 -
90 - }
91 -}
92 -
93 -function printSubPath(subPath) {
94 - if (subPath.trafficType == 1) {
95 - console.log("지하철이용");
96 - console.log("이동거리 : ", subPath.distance);
97 - console.log("이동 소요시간 : ", subPath.sectionTime);
98 - console.log(subPath.stationCount, "개의 역 이동");
99 - console.log(subPath.startName, "에서 승차");
100 - //startX
101 - //startY
102 - console.log("승차역 id : ", subPath.startID);
103 - console.log(subPath.endName, "에서 하차");
104 - //endX
105 - //endY
106 - console.log("하차역 id : ", subPath.endID);
107 - printSubwayLane(subPath);
108 - printPassStopList(subPath);
109 - } else if (subPath.trafficType == 2) {
110 - console.log("버스 이용");
111 - console.log("이동거리 : ", subPath.distance);
112 - console.log("이동 소요시간 : ", subPath.sectionTime);
113 - console.log("이동 정거장수 :", subPath.stationCount);
114 - console.log(subPath.startName, "에서 승차");
115 - console.log("승차 정류쟝 id : ", subPath.startID);
116 - console.log(subPath.endName, "에서 하차");
117 - console.log("하차 정류장 id : ", subPath.endID);
118 - printBusLane(subPath);
119 - printPassStopList(subPath);
120 -
121 - } else {
122 - console.log("도보 이용");
123 - console.log("이동 거리 : ", subPath.distance);
124 - console.log("이동 소요시간 : ", subPath.sectionTime);
125 - }
126 -}
127 -
128 -function printBusNumber(lane) {
129 - console.log("버스 번호 : ", lane.busNo);
130 -
131 -}
132 -
133 -function printBusID(lane) {
134 - console.log("버스 id : ", lane.busID);
135 -}
136 -
137 -function printBusLane(subPath) {
138 - console.log("===========Bus=lane============");
139 - console.log(subPath.lane.length, "개의 버스 이용가능");
140 - for (var i = 0; i < subPath.lane.length; i++) {
141 - console.log(i + 1, "번째 버스")
142 - printBusNumber(subPath.lane[i]);
143 - printBusID(subPath.lane[i]);
144 - console.log("-------------------------");
145 - }
146 -}
147 -
148 -function printSubwayLane(subPath) {
149 - console.log("===========Subway=lane============");
150 - console.log(subPath.lane.length, "개의 지하철 이용가능");
151 - for (var i = 0; i < subPath.lane.length; i++) {
152 - console.log(i + 1, "번째 지하철")
153 - console.log(subPath.lane[i]);
154 - console.log("-------------------------");
155 - }
156 -}
157 -
158 -function printStations(station) {
159 - console.log(" || ");
160 - console.log(station.index, "번째 정류쟝");
161 - console.log("정류쟝 id:", station.stationID);//=======>>>>>>실시간 API가져오기!!!
162 - console.log(station.stationName);
163 - console.log(" || ");
164 -}
165 -
166 -function printPassStopList(subPath) {
167 - console.log("=====경로 확인=======");
168 - for (var i = 0; i < subPath.passStopList.stations.length; i++) {
169 - printStations(subPath.passStopList.stations[i]);
170 - }
171 -
172 -}
173 -
174 -function printTotalCount(result) {
175 - console.log(result.totalCount, "개의 경로 존재");
176 -}
177 -
178 -function printTrainCount(result) {
179 - console.log("============기 차 이 용=================")
180 - console.log("기차 탐색 결과 개수 : ", result.trainRequest.count);
181 -}
182 -
183 -function printOBJ(obj) {
184 - console.log("출발역 :", obj.startSTN, ",id :", obj.startID);
185 - //obj.SX
186 - //obj.SY
187 - console.log("도착역 :", obj.endSTN, ", id :", obj.endID);
188 - //obj.EX
189 - //obj.EY
190 - console.log(obj.trainType);
191 - //obj.trainCode
192 - //obj.mapOBJ
193 - console.log("소요 시간 :", obj.time);
194 - console.log("요금 :", obj.payment);
195 -}
196 -
197 -function printExBusCount(result) {
198 - console.log("==========고 속 버 스 이 용===========")
199 - console.log("고속 버스 탐색 결과 개수 : ", result.exBusRequest.count);
200 -}
201 -
202 -function printOutBusCount(result) {
203 - console.log("==========시 외 버 스 이 용===========")
204 - console.log("시외 버스 탐색 결과 개수 : ", result.outBusRequest.count);
205 -}
206 -
207 -function searchPubTransPathAJAX() {
208 - console.log('hihihihih');
209 - var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
210 -
211 - var xhr = new XMLHttpRequest();
212 - //var url = "https://api.odsay.com/v1/api/searchPubTransPath?SX=126.9027279&SY=37.5349277&EX=126.9145430&EY=37.5499421&apiKey=xGDjn0UBwQ%2FazbcOasoxEs4gIcLqCBEgCFMT%2BJeVKcI";
213 - var SX = 127.077001; //경희대학교 우정원 x좌표
214 - var SY = 37.246214;//경희대학교 우정원 y좌표
215 - var EX = 126.999472;//영통역 x좌표
216 - var EY = 37.266670;//영통역 y좌표
217 - var apiKey = "%2B6RMVoSKSHcru1NjEu194wRELD7wnalJG7JDY0mc2AE";
218 - var url = "https://api.odsay.com/v1/api/searchPubTransPath?SX=" + SX + "&SY=" + SY + "&EX=" + EX + "&EY=" + EY + "&apiKey=" + apiKey;
219 - xhr.open("GET", url, true);
220 - xhr.send();
221 - xhr.onreadystatechange = function () {
222 -
223 - if (xhr.readyState == 4 && xhr.status == 200) {
224 - var result = JSON.parse(xhr.responseText);
225 - //console.log(xhr.responseText);
226 -
227 - if (result.result.searchType == 0) { //한 도시내에서 이동
228 -
229 - var totalPathSummary = new Object();//json 객체로 저장
230 - totalPathSummary.searchType = result.result.searchType;
231 - totalPathSummary.busCount = result.result.busCount;
232 - totalPathSummary.subwayCount = result.result.subwayCount;
233 - totalPathSummary.pointDistance = result.result.pointDistance;
234 -
235 - totalPathSummary = JSON.stringify(totalPathSummary);
236 - //console.log(totalPathSummary);
237 -
238 - console.log("도시내 이동");
239 - printBusCount(result);
240 - printSubwayCount(result);
241 - printSubwayBusCount(result);
242 - printPointDistance(result);
243 -
244 -
245 - var pathList = new Array();
246 -
247 - for (var i = 0; i < result.result.path.length; i++) {
248 - console.log("-----------------new 경로------------------------------");
249 - console.log(i + 1, "번째 경로");
250 -
251 - var path = new Object();
252 - path.pathType = result.result.path[i].pathType;
253 - path.info = result.result.path[i].info;
254 - path.subPathList = new Array();
255 - printPath(result.result.path[i].info);
256 -
257 -
258 - for (var j = 0; j < result.result.path[i].subPath.length; j++) {
259 - console.log("---------------");
260 - var subPath = new Object();
261 - subPath = result.result.path[i].subPath;
262 - path.subPathList.push(subPath);
263 - printSubPath(result.result.path[i].subPath[j]);
264 - }
265 - pathList.push(path);
266 - console.log("--------------------경로 끝---------------------------");
267 -
268 -
269 - }
270 - pathList = JSON.stringify(pathList);
271 - //console.log(pathList);
272 -
273 - } else if (result.result.searchType == 1) {//도시간 이동
274 - //console.log(result.result);
275 - console.log("도시 간 이동");
276 - var totalPathSummary = new Object();
277 - totalPathSummary.startCityName = result.result.startCityName;
278 - totalPathSummary.startCID = result.result.startCID;
279 - totalPathSummary.endCityName = result.result.endCityName;
280 - totalPathSummary.endCID = result.result.endCID;
281 - totalPathSummary.pointDistance = result.result.pointDistance;
282 - totalPathSummary.totalCount = result.result.totalCount;
283 -
284 - totalPathSummary = JSON.stringify(totalPathSummary);
285 - //console.log(totalPathSummary);
286 - m
287 - console.log("출발 도시:", result.result.startCityName);
288 - console.log("도착 도시:", result.result.endCityName);
289 - printPointDistance(result.result);
290 - printTotalCount(result.result);
291 - printTrainCount(result.result);//기차 이용
292 -
293 - var trainList = new Array();//기차이용
294 -
295 - for (var i = 0; i < result.result.trainRequest.count; i++) {
296 - var OBJ = new Object();
297 - OBJ = result.result.trainRequest.OBJ[i];
298 - OBJList.push(OBJ);
299 - console.log("============", i + 1, "============");
300 - printOBJ(result.result.trainRequest.OBJ[i]);
301 - }
302 - trainList = JSON.stringify(trainList);
303 -
304 - var exBusList = new Array();
305 - printExBusCount(result.result); //고속버스 이용
306 - for (var i = 0; i < result.result.exBusRequest.count; i++) {
307 - var OBJ = new Object();
308 - OBJ = result.result.exBusRequest.OBJ[i];
309 - OBJList.push(OBJ);
310 - console.log("============", i + 1, "============");
311 - printOBJ(result.result.exBusRequest.OBJ[i]);
312 - }
313 - exBusList = JSON.stringify(exBusList);
314 -
315 - var outBusList = new Array();
316 - printOutBusCount(result.result);//시외 버스 이용
317 - for (var i = 0; i < result.result.outBusRequest.count; i++) {
318 - var OBJ = new Object();
319 - OBJ = result.result.outBusRequest.OBJ[i];
320 - outBusList.push(OBJ);
321 - console.log("============", i + 1, "============");
322 - printOBJ(result.result.outBusRequest.OBJ[i]);
323 - }
324 - outBusList = JSON.stringify(outBusList);
325 - }
326 - }
327 - };
328 -}
329 -
330 -module.exports = {searchPubTransPathAJAX};
1 -import React, {useState, useContext, useEffect, useCallback} from 'react';
2 -import {View, Text, Button, TextInput, TouchableOpacity, StyleSheet} from 'react-native';
3 -import {useDispatch, useSelector} from "react-redux";
4 -import {LOG_IN_REQUEST, LOG_OUT_REQUEST} from "../reducers/user";
5 -import {MaterialCommunityIcons} from "@expo/vector-icons";
6 -import {useNavigation} from '@react-navigation/native';
7 -import LoadingComponent from "../components/LoadingComponent";
8 -
9 -const MyProfileComponent = () => {
10 - const navigation = useNavigation();
11 - const [loading, setLoading] = useState(true);
12 -
13 - const {me} = useSelector(state => state.user);
14 - const {isLoggingIn} = useSelector(state => state.user);
15 -
16 - const dispatch = useDispatch();
17 - const onLogout = async () => {
18 - await dispatch({
19 - type: LOG_OUT_REQUEST
20 - });
21 - console.log('onLogout');
22 - };
23 - return (
24 - <View>
25 - <View style={styles.containerStyle}>
26 - <Text style={styles.TextStyle}>마이페이지</Text>
27 - <Text style={styles.TextStyle}>{me.email}</Text>
28 - <Text style={styles.TextStyle}>{me.nickName}</Text>
29 - <TouchableOpacity onPress={onLogout}>
30 - <MaterialCommunityIcons color={'green'} name={'logout'} size={30}/>
31 - </TouchableOpacity>
32 - </View>
33 - </View>
34 - )
35 -};
36 -
37 -const styles = StyleSheet.create({
38 - containerStyle: {
39 - marginTop: 10,
40 - alignItems: 'center',
41 - justifyContent: 'center',
42 - },
43 - TextStyle: {
44 - width: 200,
45 - height: 44,
46 - padding: 10,
47 - borderWidth: 1,
48 - borderColor: '#778899',
49 - marginBottom: 10,
50 - }
51 -});
52 -
53 -export default MyProfileComponent;
...\ No newline at end of file ...\ No newline at end of file
1 -export const host = '172.20.10.3';
2 -export const coordAPIKEY = 'CDCF07BD-2CE4-33D9-BA13-D6CE4360A2B3';
1 -export const initialState = {
2 - startLocation: null,
3 - finishLocation: null,
4 -
5 - settingLocation: false,
6 -
7 - info: '',
8 -};
9 -
10 -export const SET_LOC_REQUEST = 'SET_LOC_REQUEST';
11 -export const SET_LOC_SUCCESS = 'SET_LOC_SUCCESS';
12 -export const SET_LOC_FAILURE = 'SET_LOC_FAILURE';
13 -
14 -export default (state = initialState, action) => {
15 - switch (action.type) {
16 -
17 - case SET_LOC_REQUEST: {
18 - return {
19 - ...state,
20 - settingLocation: true,
21 - }
22 - }
23 -
24 - case SET_LOC_SUCCESS: {
25 - const {startLocation, finishLocation} = action.data;
26 - return {
27 - ...state,
28 - startLocation,
29 - finishLocation,
30 - isLoggingIn: false,
31 - };
32 - }
33 -
34 - case SET_LOC_FAILURE: {
35 - const {info} = action.data;
36 - return {
37 - ...state,
38 - settingLocation: false,
39 - info,
40 - }
41 - }
42 -
43 - default: {
44 - return {
45 - ...state,
46 - };
47 - }
48 - }
49 -};
...\ No newline at end of file ...\ No newline at end of file
1 -import {all, call, fork, delay, put, takeEvery, takeLatest} from 'redux-saga/effects';
2 -import axios from 'axios';
3 -import {coordAPIKEY} from '../env';
4 -import {
5 - SET_LOC_REQUEST,
6 - SET_LOC_SUCCESS,
7 - SET_LOC_FAILURE,
8 -} from "../reducers/location";
9 -
10 -function setLocationAPI(data) {
11 - const {startTextLocation, finishTextLocation} = data;
12 - console.log(startTextLocation, finishTextLocation);
13 - const startRes = axios.get(`http://api.vworld.kr/req/address?service=address&request=getcoord&version=2.0&crs=epsg:4326&address=${startTextLocation}&refine=true&simple=false&format=xml&type=road&key=${coordAPIKEY}`);
14 - const finishRes = axios.get(`http://api.vworld.kr/req/address?service=address&request=getcoord&version=2.0&crs=epsg:4326&address=${finishTextLocation}&refine=true&simple=false&format=xml&type=road&key=${coordAPIKEY}`);
15 -
16 - return {startRes, finishRes};
17 -}
18 -
19 -
20 -function* setLocation(action) {
21 - try {
22 - console.log('saga의 setLocation', action.data);
23 - const res = yield call(setLocationAPI, action.data);
24 - console.log(res.startRes, res.finishRes);
25 - const {result} = res.startRes;
26 - console.log(result);
27 - } catch (e) {
28 - console.error(e);
29 - }
30 -};
31 -
32 -function* watchSetLocation() {
33 - console.log('watchSetLocation');
34 - yield takeLatest(SET_LOC_REQUEST, setLocation);
35 -}
36 -
37 -export default function* locationSaga() {
38 - yield all([
39 - fork(watchSetLocation),
40 - ]);
41 -};
...\ No newline at end of file ...\ No newline at end of file
1 -import React, {useState, useContext, useEffect, useCallback} from 'react';
2 -import {View, Text, Button, TextInput, TouchableOpacity} from 'react-native';
3 -import {useDispatch, useSelector} from "react-redux";
4 -import {LOG_IN_REQUEST, LOG_OUT_REQUEST} from "../reducers/user";
5 -import {MaterialCommunityIcons} from "@expo/vector-icons";
6 -import styled from "styled-components";
7 -import {useNavigation} from '@react-navigation/native';
8 -import LoadingComponent from "../components/LoadingComponent";
9 -import MyProfileComponent from "../components/MyProfileComponent";
10 -import LoginComponent from "../components/LoginComponent";
11 -
12 -const Login = () => {
13 - const navigation = useNavigation();
14 - const [loading, setLoading] = useState(true);
15 -
16 - const {me} = useSelector(state => state.user);
17 - const {isLoggingIn} = useSelector(state => state.user);
18 -
19 -
20 - useEffect(() => {
21 - setLoading(false);
22 - }, [me]);
23 -
24 - return (
25 - <View>
26 - {me ?
27 - <MyProfileComponent/>
28 - :
29 - <LoginComponent/>
30 - }
31 - </View>
32 - )
33 -};
34 -
35 -export default Login;
...\ No newline at end of file ...\ No newline at end of file
1 -import React, {useState, useEffect} from 'react';
2 -import MapView, {Marker} from 'react-native-maps';
3 -import {StyleSheet, Text, View, Dimensions} from 'react-native';
4 -import screen from '../constants/layout';
5 -import StartAndFinishLocationComponent from "../components/CurrentUserLocationComponent";
6 -
7 -
8 -const Maps = () => {
9 - const [initialRegion, setInitialRegion] = useState(
10 - {
11 - latitude: 37.56647,
12 - longitude: 126.977963,
13 - latitudeDelta: 0.3922,
14 - longitudeDelta: 0.3421
15 - });
16 -
17 - return (
18 - <View style={styles.container}>
19 - <Text style={styles.textStyle}>Current User Location</Text>
20 - <StartAndFinishLocationComponent/>
21 - <MapView
22 - style={styles.mapStyle}
23 - initialRegion={initialRegion}
24 - >
25 - <Marker
26 - coordinate={initialRegion}
27 - title="this is a marker"
28 - description="this is a marker example">
29 - </Marker>
30 -
31 - </MapView>
32 - </View>
33 - )
34 -};
35 -
36 -export default Maps;
37 -
38 -const styles = StyleSheet.create({
39 - container: {
40 - flex: 1,
41 - backgroundColor: '#fff',
42 - alignItems: 'center',
43 - },
44 - mapStyle: {
45 - width: screen.width,
46 - height: screen.height / 2,
47 - },
48 - textStyle: {
49 - fontWeight: 'bold',
50 - fontSize: 20,
51 - color: 'grey',
52 - marginBottom: 20,
53 - }
54 -});
...@@ -9,7 +9,8 @@ npm-debug.* ...@@ -9,7 +9,8 @@ npm-debug.*
9 *.orig.* 9 *.orig.*
10 web-build/ 10 web-build/
11 web-report/ 11 web-report/
12 -node_modules/
13 12
14 # macOS 13 # macOS
15 .DS_Store 14 .DS_Store
15 +env.js
16 +.env
......
...@@ -9,7 +9,7 @@ import {NavigationContainer} from "@react-navigation/native"; ...@@ -9,7 +9,7 @@ import {NavigationContainer} from "@react-navigation/native";
9 import store from './store'; 9 import store from './store';
10 import StackNavigation from "./navigations/StackNavigation"; 10 import StackNavigation from "./navigations/StackNavigation";
11 import {AuthProvider} from "./AuthContext"; 11 import {AuthProvider} from "./AuthContext";
12 -import host from './env'; 12 +import {host} from './env';
13 import axios from "axios"; 13 import axios from "axios";
14 14
15 const cacheImages = (images) => { 15 const cacheImages = (images) => {
...@@ -38,6 +38,7 @@ const App = () => { ...@@ -38,6 +38,7 @@ const App = () => {
38 ); 38 );
39 const fonts = cacheFonts([Ionicons.font]); 39 const fonts = cacheFonts([Ionicons.font]);
40 40
41 + // await AsyncStorage.removeItem('cookie');
41 const cookie = await AsyncStorage.getItem('cookie'); 42 const cookie = await AsyncStorage.getItem('cookie');
42 console.log('cookie', cookie); 43 console.log('cookie', cookie);
43 if (cookie) { 44 if (cookie) {
...@@ -66,12 +67,6 @@ const App = () => { ...@@ -66,12 +67,6 @@ const App = () => {
66 <> 67 <>
67 {isReady 68 {isReady
68 ? 69 ?
69 - // <Provider store={store}>
70 - // <NavigationContainer>
71 - // <StatusBar barstyle={'light-content'}/>
72 - // <StackNavigation/>
73 - // </NavigationContainer>
74 - // </Provider>
75 <Provider store={store}> 70 <Provider store={store}>
76 <AuthProvider user={user}> 71 <AuthProvider user={user}>
77 <NavigationContainer> 72 <NavigationContainer>
......
1 +import { Platform, StyleSheet, Dimensions } from "react-native";
2 +
3 +const { width, height } = Dimensions.get("window");
4 +const SCREEN_WIDTH = width < height ? width : height;
5 +const numColumns = 2;
6 +
7 +export const AppStyles = {
8 + color: {
9 + main: "#5ea23a",
10 + text: "#696969",
11 + title: "#464646",
12 + subtitle: "#545454",
13 + categoryTitle: "#161616",
14 + tint: "#ff5a66",
15 + description: "#bbbbbb",
16 + filterTitle: "#8a8a8a",
17 + starRating: "#2bdf85",
18 + location: "#a9a9a9",
19 + white: "white",
20 + facebook: "#4267b2",
21 + grey: "grey",
22 + greenBlue: "#00aea8",
23 + placeholder: "#a0a0a0",
24 + background: "#f2f2f2",
25 + blue: "#3293fe"
26 + },
27 + fontSize: {
28 + title: 30,
29 + content: 20,
30 + normal: 16
31 + },
32 + buttonWidth: {
33 + main: "70%"
34 + },
35 + textInputWidth: {
36 + main: "80%"
37 + },
38 + fontName: {
39 + main: "Noto Sans",
40 + bold: "Noto Sans"
41 + },
42 + borderRadius: {
43 + main: 25,
44 + small: 5
45 + }
46 +};
47 +
48 +export const AppIcon = {
49 + container: {
50 + backgroundColor: "white",
51 + borderRadius: 20,
52 + padding: 8,
53 + marginRight: 10
54 + },
55 + style: {
56 + tintColor: AppStyles.color.tint,
57 + width: 25,
58 + height: 25
59 + },
60 + images: {
61 + home: require("./assets/icons/home.png"),
62 + defaultUser: require("./assets/icons/default_user.jpg"),
63 + logout: require("./assets/icons/shutdown.png")
64 + }
65 +};
66 +
67 +export const HeaderButtonStyle = StyleSheet.create({
68 + multi: {
69 + flexDirection: "row"
70 + },
71 + container: {
72 + padding: 10
73 + },
74 + image: {
75 + justifyContent: "center",
76 + width: 35,
77 + height: 35,
78 + margin: 6
79 + },
80 + rightButton: {
81 + color: AppStyles.color.tint,
82 + marginRight: 10,
83 + fontWeight: "normal",
84 + fontFamily: AppStyles.fontName.main
85 + }
86 +});
87 +
88 +export const ListStyle = StyleSheet.create({
89 + title: {
90 + fontSize: 16,
91 + color: AppStyles.color.subtitle,
92 + fontFamily: AppStyles.fontName.bold,
93 + fontWeight: "bold"
94 + },
95 + subtitleView: {
96 + minHeight: 55,
97 + flexDirection: "row",
98 + paddingTop: 5,
99 + marginLeft: 10
100 + },
101 + leftSubtitle: {
102 + flex: 2
103 + },
104 + avatarStyle: {
105 + height: 80,
106 + width: 80
107 + }
108 +});
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
1 +[{"index":1,"avgSpeed": 53},{"index":2,"avgSpeed":60}]
...\ No newline at end of file ...\ No newline at end of file
1 +import React, {useState, useContext, useEffect, useCallback} from 'react';
2 +import {Text, View, StyleSheet, TouchableOpacity, ScrollView} from 'react-native';
3 +import {useDispatch, useSelector} from "react-redux";
4 +import {useNavigation} from '@react-navigation/native';
5 +import styled from "styled-components";
6 +import {AntDesign, MaterialCommunityIcons} from "@expo/vector-icons";
7 +
8 +
9 +const Banner = styled.View`
10 + flex: 1;
11 + margin-left: 15px;
12 + margin-bottom: 5px;
13 + width: 3px;
14 + height: 3px;
15 + border-radius: 20px;
16 + border: 3px solid #88c600;
17 +
18 +`;
19 +
20 +const BusPathComponent = (props) => {
21 + const navigation = useNavigation();
22 + const [busPath, setBusPath] = useState(null);
23 + const [seeStaList, setSeeStaList] = useState(false);
24 + const {pathDetail} = props;
25 +
26 + const changeSeeStaList = () => {
27 + setSeeStaList(!seeStaList);
28 + console.log(seeStaList)
29 + };
30 +
31 + useEffect(() => {
32 + console.log(props.pathDetail);
33 + setBusPath(props.pathDetail);
34 + }, []);
35 +
36 + return (
37 + <ScrollView>
38 + <View style={{flexDirection: 'row', flex: 5}}>
39 + <View style={styles.pathType}>
40 + <MaterialCommunityIcons style={{flex: 1}} color={'#88c600'} name={'bus'} size={20}/>
41 + <Text style={{flex: 1, fontSize: 13}}>{pathDetail.time}</Text>
42 + </View>
43 + <View style={{flex: 1}}>
44 + <Banner/>
45 + <Banner/>
46 + <Banner/>
47 + <Banner/>
48 + <Banner/>
49 + <Banner/>
50 + <Banner/>
51 + </View>
52 + <View style={styles.inputTile}>
53 + <Text style={styles.stationStyle}>{pathDetail.startName}</Text>
54 + <Text style={styles.idStyle}>{pathDetail.startID}</Text>
55 + {pathDetail.arrivalInfo.map((bus, index) => {
56 + return (
57 + <View>
58 + <Text style={styles.busStyle}>{bus.busNo}</Text>
59 + {bus.msg.msg1.indexOf('undefined') !== -1 ?
60 + null
61 + :
62 + <>
63 + <Text style={styles.busSubStyle}>{bus.msg.msg1}</Text>
64 + </>
65 + }
66 + {bus.msg.msg2.indexOf('undefined') !== -1 ?
67 + null
68 + :
69 + <>
70 + <Text style={styles.busSubStyle}>{bus.msg.msg2}</Text>
71 + </>
72 + }
73 + </View>
74 + )
75 + })}
76 + <View style={styles.stationListStyle}>
77 + <Text style={styles.cntStyle}>{pathDetail.stationCnt} 정류소 이동</Text>
78 + <TouchableOpacity style={{flex: 1, marginTop: 17}} onPress={changeSeeStaList}>
79 + <AntDesign color={'darkgrey'} name={'caretdown'} size={15}/>
80 + </TouchableOpacity>
81 + </View>
82 + <View>
83 + {seeStaList === true ?
84 + <View>
85 + {pathDetail.stationList.map((bus, index) => {
86 + return (
87 + <>
88 + <Text>{bus.stationName}</Text>
89 + </>
90 + )
91 + })}
92 + </View>
93 + :
94 + null
95 + }
96 + </View>
97 + <Text style={styles.stationStyle}>{pathDetail.endName}</Text>
98 + </View>
99 + </View>
100 + </ScrollView>
101 + );
102 +}
103 +export default BusPathComponent;
104 +
105 +const styles = StyleSheet.create({
106 + inputTile: {
107 + marginLeft: 6,
108 + flex: 4,
109 + color: 'grey',
110 + },
111 + inputText: {
112 + fontWeight: 'normal',
113 + fontSize: 15,
114 + },
115 + pathType: {
116 + flexDirection: 'column',
117 + flex: 0.4,
118 + alignItems: 'center',
119 + justifyContent: 'center',
120 + marginLeft: 5,
121 + marginTop: 10,
122 + },
123 + stationStyle: {
124 + fontWeight: 'bold',
125 + fontSize: 15,
126 + },
127 + idStyle: {
128 + marginTop: 3,
129 + marginBottom: 20,
130 + color: 'grey',
131 + fontSize: 14
132 + },
133 + busStyle: {
134 + fontWeight: 'bold',
135 + fontSize: 14,
136 + color: '#88c600'
137 + },
138 + cntStyle: {
139 + flex: 1,
140 + marginTop: 20,
141 + marginBottom: 3,
142 + color: 'grey',
143 + fontSize: 14
144 + },
145 + stationListStyle: {
146 + flexDirection: 'row',
147 + flex: 1,
148 + },
149 + busSubStyle: {
150 + marginTop: 2,
151 + fontSize: 12,
152 + color: 'red',
153 + }
154 +})
...\ No newline at end of file ...\ No newline at end of file
1 +import React, {useState, useContext, useEffect, useCallback} from 'react';
2 +import {View, Text, Button, Image, TouchableOpacity, StyleSheet, Platform} from 'react-native';
3 +import {useDispatch, useSelector} from "react-redux";
4 +import {LOG_IN_REQUEST, LOG_OUT_REQUEST} from "../reducers/user";
5 +import {MaterialCommunityIcons} from "@expo/vector-icons";
6 +import {useNavigation} from '@react-navigation/native';
7 +import DateTimePicker from '@react-native-community/datetimepicker';
8 +import {SET_TIME_SUCCESS} from "../reducers/location";
9 +import moment from "moment";
10 +
11 +const DateTimePickerComponent = (props) => {
12 + const [date, setDate] = useState(new Date());
13 + const [mode, setMode] = useState('time');
14 + const {goToMapsClick} = props;
15 +
16 + const onChange = (event, selectedDate) => {
17 + const currentDate = selectedDate || date;
18 + console.log(currentDate);
19 + setDate(currentDate);
20 + };
21 +
22 + // SET FINISH TIME
23 + const dispatch = useDispatch();
24 + const onSubmit = async () => {
25 + if (!date) {
26 + return
27 + }
28 + console.log('SET_TIME_SUCCESS GO!!', date);
29 + await dispatch({
30 + type: SET_TIME_SUCCESS,
31 + data: {
32 + date
33 + }
34 + });
35 + };
36 +
37 + useEffect(() => {
38 + if (goToMapsClick === true) {
39 + console.log(goToMapsClick);
40 + console.log('goToMapsClick!');
41 + onSubmit();
42 + }
43 + setDate(date);
44 + }, [goToMapsClick, date]);
45 +
46 + return (
47 + <View>
48 + <DateTimePicker
49 + testID="dateTimePicker"
50 + value={date}
51 + mode={mode}
52 + is24Hour={true}
53 + display="default"
54 + onChange={onChange}
55 + style={styles.TextStyle}
56 + />
57 +
58 + </View>
59 + );
60 +};
61 +
62 +const styles = StyleSheet.create({
63 + containerStyle: {
64 + marginTop: 10,
65 + alignItems: 'center',
66 + justifyContent: 'center',
67 + },
68 + TextStyle: {
69 + flex: 1,
70 + marginBottom: 240,
71 + }
72 +});
73 +
74 +export default DateTimePickerComponent;
75 +
1 +import React, {useState, useEffect} from 'react';
2 +import {Text, View, StyleSheet, TouchableOpacity, ScrollView} from 'react-native';
3 +import styled from 'styled-components';
4 +import {MaterialCommunityIcons, AntDesign} from '@expo/vector-icons';
5 +import {useNavigation} from '@react-navigation/native';
6 +
7 +
8 +const ShowDetail = styled.TouchableOpacity`
9 + flex: 2;
10 + position: absolute;
11 + right: 6px;
12 + bottom: 2px;
13 + width: 30px;
14 + height: 30px;
15 + border-radius: 50px;
16 +`;
17 +
18 +const Banner = styled.View`
19 + flex: 1;
20 + margin-left: 15px;
21 + margin-bottom: 5px;
22 + width: 3px;
23 + height: 3px;
24 + border-radius: 20px;
25 + border: 3px solid #273b96;
26 +`;
27 +
28 +
29 +const GoPathSummary = (props) => {
30 + const navigation = useNavigation();
31 + const [pathSummary, setPathSummary] = useState(null);
32 + const goPathDetail = () => {
33 + navigation.navigate('GoPathDetail', {'detail': props.detail});
34 + };
35 +
36 + useEffect
37 + (() => {
38 + console.log(props.summary);
39 + setPathSummary(props.summary);
40 + }, []);
41 +
42 +
43 + return (
44 + <View>
45 + {pathSummary ?
46 + <>
47 + <View style={styles.container}>
48 +
49 + <View style={styles.titleParagraph}>
50 + <Text style={styles.hourStyle}>{pathSummary.hour1} {pathSummary.min1} 출발
51 + <Text style={styles.conditionStyle}>정확</Text>
52 + </Text>
53 + <Text style={styles.hourStyle}>{pathSummary.hour2} {pathSummary.min2} 출발
54 + <Text style={styles.conditionStyle}>여유</Text>
55 + </Text>
56 + </View>
57 + <View style={{flexDirection: 'row', flex: 2, marginLeft: 70}}>
58 + <Text style={{flex: 1, fontSize: 13, fontWeight: 'bold'}}>총소요시간: {pathSummary.totalTime}</Text>
59 + <Text style={{flex: 1, fontSize: 13, fontWeight: 'bold'}}>비용: {pathSummary.payment}</Text>
60 + </View>
61 + <View style={{flexDirection: 'row', flex: 5, marginLeft: 70, marginTop: 20}}>
62 + <View style={styles.pathType}>
63 + <MaterialCommunityIcons style={{flex: 1}} color={'#273b96'} name={'train'} size={20}/>
64 + </View>
65 + <View style={styles.inputTile}>
66 + <Text style={styles.stationStyle}>{pathSummary.firstStartStation}</Text>
67 + <Text style={styles.stationStyle}>{pathSummary.lastEndStation}</Text>
68 + </View>
69 + </View>
70 + <View style={{position: 'absolute', right: 10}}>
71 + <ShowDetail onPress={goPathDetail}>
72 + <AntDesign color={'darkgrey'} name={'caretright'} size={32}/>
73 + </ShowDetail>
74 + </View>
75 +
76 + </View>
77 + </>
78 + :
79 + null
80 + }
81 + </View>
82 + );
83 +}
84 +
85 +const styles = StyleSheet.create({
86 + container: {
87 + flex: 1,
88 + flexDirection: 'column',
89 + paddingTop: 40,
90 + paddingBottom: 30,
91 + backgroundColor: '#ecf0f1',
92 + alignItems: 'center',
93 + justifyContent: 'center',
94 + borderWidth: 1,
95 + borderColor: 'darkgrey',
96 + },
97 + paragraph: {
98 + flex: 1,
99 + fontSize: 14,
100 + fontWeight: 'bold',
101 + textAlign: 'center',
102 + color: '#34495e',
103 + },
104 + titleParagraph: {
105 + flexDirection: 'column',
106 + flex: 1,
107 + },
108 + inputTile: {
109 + marginLeft: 6,
110 + flex: 4,
111 + color: 'grey',
112 + },
113 + inputText: {
114 + fontWeight: 'normal',
115 + fontSize: 15,
116 + },
117 + pathType: {
118 + flexDirection: 'column',
119 + flex: 0.4,
120 + alignItems: 'center',
121 + justifyContent: 'center',
122 + marginLeft: 5,
123 + marginTop: 10,
124 + },
125 + stationStyle: {
126 + fontWeight: 'bold',
127 + fontSize: 15,
128 + },
129 + idStyle: {
130 + marginTop: 3,
131 + marginBottom: 20,
132 + color: 'grey',
133 + fontSize: 14
134 + },
135 + laneStyle: {
136 + fontWeight: 'bold',
137 + fontSize: 15,
138 + color: '#EBA900'
139 + },
140 + cntStyle: {
141 + flex: 1,
142 + marginTop: 20,
143 + marginBottom: 3,
144 + color: 'grey',
145 + fontSize: 14
146 + },
147 + stationListStyle: {
148 + flexDirection: 'row',
149 + flex: 1,
150 + },
151 + hourStyle: {
152 + flexDirection: 'row',
153 + flex: 1,
154 + fontSize: 18,
155 + fontWeight: 'bold',
156 + marginBottom: 20,
157 + },
158 + conditionStyle: {
159 + paddingLeft: 10,
160 + fontSize: 15,
161 + color: 'red',
162 + }
163 +});
164 +
165 +export default GoPathSummary;
...\ No newline at end of file ...\ No newline at end of file
1 +import React, {useState, useContext, useEffect, useCallback} from 'react';
2 +import {Text, View, StyleSheet, TouchableOpacity, ScrollView} from 'react-native';
3 +import {useDispatch, useSelector} from "react-redux";
4 +import {useNavigation} from '@react-navigation/native';
5 +import styled from "styled-components";
6 +import {AntDesign, MaterialCommunityIcons} from "@expo/vector-icons";
7 +
8 +const Banner = styled.View`
9 + flex: 1;
10 + margin-left: 15px;
11 + margin-bottom: 5px;
12 + width: 3px;
13 + height: 3px;
14 + border-radius: 20px;
15 + border: 3px solid #EBA900;
16 +`;
17 +
18 +const LanePathComponent = (props) => {
19 + const navigation = useNavigation();
20 + const [lanePath, setLanePath] = useState(null);
21 + const [seeLaneList, setSeeLaneList] = useState(false);
22 + const {pathDetail} = props;
23 +
24 +
25 + const changeSeeLaneList = () => {
26 + setSeeLaneList(!seeLaneList);
27 + console.log(seeLaneList)
28 + };
29 +
30 + useEffect(() => {
31 + console.log(props.pathDetail);
32 + setLanePath(props.pathDetail);
33 + }, []);
34 +
35 + return (
36 + <ScrollView>
37 + <View style={{flexDirection: 'row', flex: 5}}>
38 + <View style={styles.pathType}>
39 + <MaterialCommunityIcons style={{flex: 1}} color={'#EBA900'} name={'train'} size={20}/>
40 + <Text style={{flex: 1, fontSize: 13}}>{pathDetail.time}</Text>
41 + </View>
42 + <View style={{flex: 1}}>
43 + <Banner/>
44 + <Banner/>
45 + <Banner/>
46 + <Banner/>
47 + <Banner/>
48 + <Banner/>
49 + <Banner/>
50 + </View>
51 + <View style={styles.inputTile}>
52 + <Text style={styles.stationStyle}>{pathDetail.startName}</Text>
53 + <Text style={styles.idStyle}>{pathDetail.startID}</Text>
54 + {pathDetail.laneList.map((lane, index) => {
55 + return (
56 + <Text style={styles.laneStyle}>{lane.name}</Text>
57 + )
58 + })}
59 + <View style={styles.stationListStyle}>
60 + <Text style={styles.cntStyle}>{pathDetail.stationCnt} 정류소 이동</Text>
61 + <TouchableOpacity style={{flex: 1, marginTop: 17}} onPress={changeSeeLaneList}>
62 + <AntDesign color={'darkgrey'} name={'caretdown'} size={15}/>
63 + </TouchableOpacity>
64 + </View>
65 + {seeLaneList === true ?
66 + <View>
67 + {pathDetail.stationList.map((lane, index) => {
68 + return (
69 + <Text>{lane}</Text>
70 + )
71 + })}
72 + </View>
73 + :
74 + null
75 + }
76 + <Text style={styles.stationStyle}>{pathDetail.endName}</Text>
77 + </View>
78 + </View>
79 + </ScrollView>
80 + );
81 +}
82 +export default LanePathComponent;
83 +
84 +const styles = StyleSheet.create({
85 + inputTile: {
86 + marginLeft: 6,
87 + flex: 4,
88 + color: 'grey',
89 + },
90 + inputText: {
91 + fontWeight: 'normal',
92 + fontSize: 15,
93 + },
94 + pathType: {
95 + flexDirection: 'column',
96 + flex: 0.4,
97 + alignItems: 'center',
98 + justifyContent: 'center',
99 + marginLeft: 5,
100 + marginTop: 10,
101 + },
102 + stationStyle: {
103 + fontWeight: 'bold',
104 + fontSize: 15,
105 + },
106 + idStyle: {
107 + marginTop: 3,
108 + marginBottom: 20,
109 + color: 'grey',
110 + fontSize: 14
111 + },
112 + laneStyle: {
113 + fontWeight: 'bold',
114 + fontSize: 15,
115 + color: '#EBA900'
116 + },
117 + cntStyle: {
118 + flex: 1,
119 + marginTop: 20,
120 + marginBottom: 3,
121 + color: 'grey',
122 + fontSize: 14
123 + },
124 + stationListStyle: {
125 + flexDirection: 'row',
126 + flex: 1,
127 + }
128 +})
...\ No newline at end of file ...\ No newline at end of file
...@@ -13,4 +13,6 @@ const LoadingComponent = () => { ...@@ -13,4 +13,6 @@ const LoadingComponent = () => {
13 ) 13 )
14 }; 14 };
15 15
16 +
17 +
16 export default LoadingComponent; 18 export default LoadingComponent;
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -2,11 +2,9 @@ import React, {useState, useContext, useEffect, useCallback} from 'react'; ...@@ -2,11 +2,9 @@ import React, {useState, useContext, useEffect, useCallback} from 'react';
2 import {View, Text, Button, StyleSheet, TextInput, TouchableOpacity} from 'react-native'; 2 import {View, Text, Button, StyleSheet, TextInput, TouchableOpacity} from 'react-native';
3 import {useDispatch, useSelector} from "react-redux"; 3 import {useDispatch, useSelector} from "react-redux";
4 import {LOG_IN_REQUEST, LOG_OUT_REQUEST} from "../reducers/user"; 4 import {LOG_IN_REQUEST, LOG_OUT_REQUEST} from "../reducers/user";
5 -import {MaterialCommunityIcons} from "@expo/vector-icons";
6 import styled from "styled-components"; 5 import styled from "styled-components";
7 import {useNavigation} from '@react-navigation/native'; 6 import {useNavigation} from '@react-navigation/native';
8 -import LoadingComponent from "../components/LoadingComponent"; 7 +import Profile from "../screens/Profile";
9 -import SignUpComponent from "./SignUpComponent";
10 8
11 9
12 const LoginButton = styled.TouchableOpacity` 10 const LoginButton = styled.TouchableOpacity`
...@@ -16,6 +14,20 @@ const LoginButton = styled.TouchableOpacity` ...@@ -16,6 +14,20 @@ const LoginButton = styled.TouchableOpacity`
16 height: 40px; 14 height: 40px;
17 background-color: #e6e6fa; 15 background-color: #e6e6fa;
18 border: 1px; 16 border: 1px;
17 + marginBottom: 10px;
18 + border-radius: 50px;
19 +
20 +`;
21 +
22 +const SignUpButton = styled.TouchableOpacity`
23 + align-items: center;
24 + justify-content: center;
25 + width: 60px;
26 + height: 40px;
27 + background-color: #e6e6fa;
28 + border: 1px;
29 + border-radius: 50px;
30 +
19 `; 31 `;
20 32
21 33
...@@ -49,8 +61,17 @@ const LoginComponent = () => { ...@@ -49,8 +61,17 @@ const LoginComponent = () => {
49 password 61 password
50 } 62 }
51 }); 63 });
64 +
52 }; 65 };
66 + const goSignUp = () => {
67 + navigation.navigate('SignUp');
68 + }
53 69
70 + useEffect(() => {
71 + if (me) {
72 + navigation.navigate('Profile');
73 + }
74 + }, [me]);
54 75
55 useEffect(() => { 76 useEffect(() => {
56 setLoading(false); 77 setLoading(false);
...@@ -77,17 +98,22 @@ const LoginComponent = () => { ...@@ -77,17 +98,22 @@ const LoginComponent = () => {
77 onPress={onSubmit}> 98 onPress={onSubmit}>
78 <Text style={{color: '#696969'}}>Login</Text> 99 <Text style={{color: '#696969'}}>Login</Text>
79 </LoginButton> 100 </LoginButton>
101 + <SignUpButton
102 + title={'Login'}
103 + onPress={goSignUp}>
104 + <Text style={{color: '#696969'}}>SignUp</Text>
105 + </SignUpButton>
80 </View> 106 </View>
81 ) 107 )
82 }; 108 };
83 109
84 const styles = StyleSheet.create({ 110 const styles = StyleSheet.create({
85 containerStyle: { 111 containerStyle: {
86 - flex: 1, 112 + // flex: 1,
87 alignItems: 'center', 113 alignItems: 'center',
88 - justifyContent: 'center', 114 + // justifyContent: 'center',
89 - backgroundColor: '#ecf0f1', 115 + // backgroundColor: '#ecf0f1',
90 - marginTop: 100, 116 + // marginTop: 100,
91 }, 117 },
92 input: { 118 input: {
93 width: 200, 119 width: 200,
......
1 +import React, {useState, useContext, useEffect, useCallback} from 'react';
2 +import {View, Text, Button, Image, TouchableOpacity, StyleSheet, Alert} from 'react-native';
3 +import {useDispatch, useSelector} from "react-redux";
4 +import {LOG_IN_REQUEST, LOG_OUT_REQUEST} from "../reducers/user";
5 +import {MaterialCommunityIcons} from "@expo/vector-icons";
6 +import {useNavigation} from '@react-navigation/native';
7 +import {SET_PERVELOCITY_SUCCESS} from "../reducers/location";
8 +import Login from "../screens/Login";
9 +import Papa from 'papaparse';
10 +
11 +
12 +const MyProfileComponent = () => {
13 + const navigation = useNavigation();
14 + const [loading, setLoading] = useState(true);
15 + const [numRecord, setNumRecord] = useState(0);
16 +
17 + const {me} = useSelector(state => state.user);
18 + const {isLoggingIn} = useSelector(state => state.user);
19 + //
20 + // const downloadFile = async () => {
21 + // const uri = "https://www.mapmyfitness.com/workout/export/csv";
22 + // let fileUri = FileSystem.documentDirectory + "userVelocity.txt";
23 + // FileSystem.downloadAsync(uri, fileUri)
24 + // .then(({uri}) => {
25 + // saveFile(uri);
26 + // })
27 + // .catch(error => {
28 + // console.error(error);
29 + // })
30 + // }
31 + //
32 + // const saveFile = async (fileUri) => {
33 + // const {status} = await Permissions.askAsync(Permissions.CAMERA_ROLL);
34 + // if (status === "granted") {
35 + // const asset = await MediaLibrary.createAssetAsync(fileUri)
36 + // await MediaLibrary.createAlbumAsync("Download", asset, false)
37 + // }
38 + // }
39 + const dispatch = useDispatch();
40 + const loadPersonalVelocity = async () => {
41 + try {
42 +
43 + const userVelocity = require('../assets/userFile/userVelocity');
44 + var allAvgSpeed = 0;
45 + setNumRecord(userVelocity.length);
46 + userVelocity.map((i, index) => {
47 + allAvgSpeed = allAvgSpeed + i.avgSpeed;
48 + });
49 +
50 + var personalVelocity = parseInt(allAvgSpeed / userVelocity.length);
51 + await dispatch({
52 + type: SET_PERVELOCITY_SUCCESS,
53 + data: {
54 + personalVelocity: personalVelocity
55 + }
56 + });
57 +
58 + Alert.alert(
59 + 'MAP 사용자 평균 속도 설정',
60 + ` 사용자 평균 속도를 설정하였습니다. `,
61 + [
62 + {
63 + text: 'Cancel',
64 + onPress: () => console.log('Cancel Pressed'),
65 + style: 'cancel',
66 + },
67 + {text: 'OK', onPress: () => console.log('OK Pressed')},
68 + ],
69 + {cancelable: false}
70 + );
71 +
72 + } catch (e) {
73 + console.log(e);
74 + }
75 +
76 + };
77 +
78 + useEffect(() => {
79 + setNumRecord(0);
80 + }, []);
81 +
82 + useEffect(() => {
83 + console.log(numRecord)
84 + }, [numRecord]);
85 +
86 + const onLogout = async () => {
87 + await dispatch({
88 + type: LOG_OUT_REQUEST
89 + });
90 + console.log('onLogout');
91 + };
92 + return (
93 + <View>
94 + {me ?
95 + <View>
96 + <View style={{flexDirection: 'row', paddingTop: 15}}>
97 + <View style={{flex: 1, alignItems: 'center'}}>
98 + <Image source={{url: 'https://steemitimages.com/u/anpigon/avatar'}}
99 + style={{width: 75, height: 75, borderRadius: 37.5}}/>
100 + </View>
101 + <View style={{flex: 3}}>
102 + <View style={{flexDirection: 'row', justifyContent: 'space-around', marginTop: 12}}>
103 + <View style={{alignItems: 'center'}}>
104 + <Text style={{fontSize: 15, fontWeight: 'bold'}}>{me.email}</Text>
105 + <Text style={{fontSize: 10, color: 'gray'}}>email</Text>
106 + </View>
107 + <View style={{alignItems: 'center'}}>
108 + <Text style={{fontSize: 15, fontWeight: 'bold'}}>{me.nickName}</Text>
109 + <Text style={{fontSize: 10, color: 'gray'}}>nickName</Text>
110 + </View>
111 + <View style={{alignItems: 'center'}}>
112 + <Text style={{fontSize: 15, fontWeight: 'bold'}}>{numRecord}</Text>
113 + <Text style={{fontSize: 10, color: 'gray'}}>numRecord</Text>
114 + </View>
115 + </View>
116 + <View style={{flexDirection: 'row'}}>
117 + <TouchableOpacity
118 + onPress={loadPersonalVelocity}
119 + style={{
120 + flex: 4,
121 + marginLeft: 10,
122 + justifyContent: 'center',
123 + alignItems: 'center',
124 + borderWidth: 1,
125 + borderColor: 'black',
126 + height: 30,
127 + marginTop: 17
128 + }}>
129 + <Text style={{fontSize: 13}}>load personal velocity</Text>
130 + </TouchableOpacity>
131 + <TouchableOpacity
132 + onPress={onLogout}
133 + style={{
134 + borderColor: 'black',
135 + borderWidth: 1,
136 + flex: 1,
137 + marginRight: 10,
138 + marginLeft: 5,
139 + justifyContent: 'center',
140 + alignItems: 'center',
141 + height: 30,
142 + marginTop: 17
143 + }}>
144 + <MaterialCommunityIcons color={'black'} name={'logout'} size={20}/>
145 + </TouchableOpacity>
146 + </View>
147 + </View>
148 + </View>
149 + < View style={{paddingHorizontal: 20, paddingVertical: 10}}>
150 + </View>
151 + </View>
152 + :
153 + <View style={{alignItems: 'center', justifyContent: 'center', marginTop: 200}}>
154 + <Text style={{fontSize: 30, textAlign: 'center', fontWeight: 'bold'}}>유저 정보가 없습니다.</Text>
155 + </View>
156 + }
157 + </View>
158 + )
159 +};
160 +
161 +const styles = StyleSheet.create({
162 + containerStyle: {
163 + marginTop: 10,
164 + alignItems: 'center',
165 + justifyContent: 'center',
166 + },
167 + TextStyle: {
168 + width: 200,
169 + height: 44,
170 + padding: 10,
171 + borderWidth: 1,
172 + borderColor: '#778899',
173 + marginBottom: 10,
174 + }
175 +});
176 +
177 +export default MyProfileComponent;
...\ No newline at end of file ...\ No newline at end of file
1 import React, {useState, useContext, useEffect, useCallback} from 'react'; 1 import React, {useState, useContext, useEffect, useCallback} from 'react';
2 -import {View, Text, Button, TextInput, TouchableOpacity} from 'react-native'; 2 +import {View, Text, Button, TextInput, TouchableOpacity, StyleSheet} from 'react-native';
3 import {useDispatch, useSelector} from "react-redux"; 3 import {useDispatch, useSelector} from "react-redux";
4 import {SIGN_UP_REQUEST} from "../reducers/user"; 4 import {SIGN_UP_REQUEST} from "../reducers/user";
5 -import {MaterialCommunityIcons} from "@expo/vector-icons";
6 import styled from "styled-components"; 5 import styled from "styled-components";
7 import {useNavigation} from '@react-navigation/native'; 6 import {useNavigation} from '@react-navigation/native';
8 -import LoadingComponent from "../components/LoadingComponent"; 7 +import Profile from "../screens/Profile";
9 8
10 9
11 const SignUpButton = styled.TouchableOpacity` 10 const SignUpButton = styled.TouchableOpacity`
12 align-items: center; 11 align-items: center;
13 justify-content: center; 12 justify-content: center;
14 width: 60px; 13 width: 60px;
15 - height: 60px; 14 + height: 40px;
16 - background-color: #ffffff; 15 + background-color: #e6e6fa;
17 border: 1px; 16 border: 1px;
17 + marginBottom: 10px;
18 + border-radius: 50px;
18 `; 19 `;
19 20
21 +const GoLoginButton = styled.TouchableOpacity`
22 + align-items: center;
23 + justify-content: center;
24 + width: 60px;
25 + height: 40px;
26 + background-color: #e6e6fa;
27 + border: 1px;
28 + border-radius: 50px;
29 +`;
30 +
31 +
20 const SignUpComponent = () => { 32 const SignUpComponent = () => {
21 const navigation = useNavigation(); 33 const navigation = useNavigation();
22 const [email, setEmail] = useState(''); 34 const [email, setEmail] = useState('');
...@@ -49,39 +61,59 @@ const SignUpComponent = () => { ...@@ -49,39 +61,59 @@ const SignUpComponent = () => {
49 password 61 password
50 } 62 }
51 }); 63 });
64 + if (me !== null) {
65 + navigation.navigate('Profile');
66 + }
52 }; 67 };
53 68
54 return ( 69 return (
55 - <> 70 + <View styles={styles.containerStyle}>
56 - <View>
57 - <View>
58 <TextInput 71 <TextInput
59 - style={{height: 40, marginLeft: 10}} 72 + style={styles.input}
60 placeholder="Type here to Email!" 73 placeholder="Type here to Email!"
61 onChangeText={onChangeEmail} 74 onChangeText={onChangeEmail}
62 /> 75 />
63 - </View>
64 - <View>
65 <TextInput 76 <TextInput
66 - style={{height: 40, marginLeft: 10}} 77 + style={styles.input}
67 placeholder="Type here to nickname!" 78 placeholder="Type here to nickname!"
68 onChangeText={onChangeNickName} 79 onChangeText={onChangeNickName}
69 /> 80 />
70 - </View>
71 - <View>
72 <TextInput 81 <TextInput
73 - style={{height: 40, marginLeft: 10}} 82 + style={styles.input}
74 placeholder="Type here to password!" 83 placeholder="Type here to password!"
75 type="password" 84 type="password"
76 onChangeText={onChangePassword} 85 onChangeText={onChangePassword}
77 /> 86 />
78 - </View> 87 + <SignUpButton
79 - <SignUpButton title={'회원가입'} onPress={onSubmit}> 88 + title={'signUp'}
80 - <Text>회원가입</Text> 89 + onPress={onSubmit}>
90 + <Text style={{color: '#696969'}}>signUp</Text>
81 </SignUpButton> 91 </SignUpButton>
92 + <GoLoginButton
93 + title={'signUp'}
94 + onPress={onSubmit}>
95 + <Text style={{color: '#696969'}}>Login</Text>
96 + </GoLoginButton>
82 </View> 97 </View>
83 - </>
84 ) 98 )
85 }; 99 };
86 100
87 export default SignUpComponent; 101 export default SignUpComponent;
102 +
103 +const styles = StyleSheet.create({
104 + containerStyle: {
105 + // flex: 1,
106 + alignItems: 'center',
107 + // justifyContent: 'center',
108 + // backgroundColor: '#ecf0f1',
109 + // marginTop: 100,
110 + },
111 + input: {
112 + width: 200,
113 + height: 44,
114 + padding: 10,
115 + borderWidth: 1,
116 + borderColor: '#778899',
117 + marginBottom: 10,
118 + }
119 +});
...\ No newline at end of file ...\ No newline at end of file
......
1 import React, {useState, useEffect} from 'react'; 1 import React, {useState, useEffect} from 'react';
2 import MapView, {Marker} from 'react-native-maps'; 2 import MapView, {Marker} from 'react-native-maps';
3 -import {StyleSheet, Text, TextInput, View, TouchableOpacity} from 'react-native'; 3 +import {StyleSheet, Text, TextInput, View, TouchableOpacity, Alert} from 'react-native';
4 import screen from '../constants/layout'; 4 import screen from '../constants/layout';
5 import {useSelector, useDispatch} from "react-redux"; 5 import {useSelector, useDispatch} from "react-redux";
6 import * as Location from 'expo-location'; 6 import * as Location from 'expo-location';
7 import {set} from "react-native-reanimated"; 7 import {set} from "react-native-reanimated";
8 import {MaterialCommunityIcons} from "@expo/vector-icons"; 8 import {MaterialCommunityIcons} from "@expo/vector-icons";
9 -import {SET_LOC_REQUEST} from "../reducers/location"; 9 +import {SET_ELOC_REQUEST, SET_LOC_REQUEST, SET_SLOC_REQUEST, SET_USER_LOC} from "../reducers/location";
10 - 10 +import axios from 'axios';
11 11
12 const StartAndFinishLocationComponent = () => { 12 const StartAndFinishLocationComponent = () => {
13 const [hasPermission, setHasPermission] = useState(false); 13 const [hasPermission, setHasPermission] = useState(false);
14 const [startTextLocation, setStartTextLocation] = useState(''); 14 const [startTextLocation, setStartTextLocation] = useState('');
15 - const [finishTextLocation, setFinishTextLocation] = useState(''); 15 + const [endTextLocation, setEndTextLocation] = useState('');
16 const [userLocation, setUserLocation] = useState(null); 16 const [userLocation, setUserLocation] = useState(null);
17 + const [errorMsg, setErrorMsg] = useState(null);
17 18
18 - const onChangeStartLocation = async (startTextLocation) => { 19 + const onChangeStartLocation = (startTextLocation) => {
19 setStartTextLocation(startTextLocation); 20 setStartTextLocation(startTextLocation);
20 }; 21 };
21 22
22 - const onChangeFinishLocation = (finishTextLocation) => { 23 + const onChangeFinishLocation = (endTextLocation) => {
23 - setFinishTextLocation(finishTextLocation); 24 + setEndTextLocation(endTextLocation);
24 }; 25 };
25 26
26 const dispatch = useDispatch(); 27 const dispatch = useDispatch();
28 + const onSetUserLocation = async () => {
29 + const {status} = await Location.requestPermissionsAsync();
30 + if (status !== 'granted') {
31 + setErrorMsg('Permission to access location was denied')
32 + }
33 + const location = await Location.getCurrentPositionAsync({});
34 + setStartTextLocation('현위치');
35 + setUserLocation(location);
36 + console.log(location);
37 + await dispatch({
38 + type: SET_USER_LOC,
39 + data: {
40 + userLocation
41 + }
42 + });
43 + };
44 +
27 const setLocation = async () => { 45 const setLocation = async () => {
28 - if (!startTextLocation || !finishTextLocation) { 46 + if (startTextLocation && startTextLocation !== '현위치') {
29 - return 47 + console.log(startTextLocation);
48 + await dispatch({
49 + type: SET_SLOC_REQUEST,
50 + data: {
51 + startTextLocation
30 } 52 }
31 - console.log(startTextLocation, finishTextLocation); 53 + })
54 + }
55 +
56 + if (endTextLocation) {
57 + console.log(endTextLocation);
32 await dispatch({ 58 await dispatch({
33 - type: SET_LOC_REQUEST, 59 + type: SET_ELOC_REQUEST,
34 data: { 60 data: {
35 - startTextLocation, 61 + endTextLocation
36 - finishTextLocation
37 } 62 }
38 } 63 }
39 ) 64 )
65 + }
40 66
67 + Alert.alert(
68 + 'MAP ROUTE 설정',
69 + ` 출발지 ${startTextLocation}, 목적지 ${endTextLocation} 맞습니까? `,
70 + [
71 + {
72 + text: 'Cancel',
73 + onPress: () => console.log('Cancel Pressed'),
74 + style: 'cancel',
75 + },
76 + {text: 'OK', onPress: () => console.log('OK Pressed')},
77 + ],
78 + {cancelable: false}
79 + );
41 }; 80 };
42 81
82 +
43 return ( 83 return (
44 <View style={styles.container}> 84 <View style={styles.container}>
45 <View style={styles.input}> 85 <View style={styles.input}>
46 - <Text style={styles.textStyle}>출발지</Text> 86 + <MaterialCommunityIcons color={'red'} name={'map-marker'} size={26}/>
47 <TextInput 87 <TextInput
48 style={styles.inputText} 88 style={styles.inputText}
49 onChangeText={onChangeStartLocation} 89 onChangeText={onChangeStartLocation}
90 + value={startTextLocation}
50 /> 91 />
51 - <TouchableOpacity> 92 + <TouchableOpacity onPress={onSetUserLocation}>
52 - <MaterialCommunityIcons color={'grey'} name={'map-marker'} size={30}/> 93 + <MaterialCommunityIcons color={'grey'} name={'crosshairs-gps'} size={30}/>
53 </TouchableOpacity> 94 </TouchableOpacity>
54 95
55 </View> 96 </View>
56 <View style={styles.input}> 97 <View style={styles.input}>
57 - <Text style={styles.textStyle}>도착지</Text> 98 + <MaterialCommunityIcons color={'blue'} name={'map-marker'} size={26}/>
58 <TextInput 99 <TextInput
59 style={styles.inputText} 100 style={styles.inputText}
60 onChangeText={onChangeFinishLocation} 101 onChangeText={onChangeFinishLocation}
102 + value={endTextLocation}
61 /> 103 />
62 </View> 104 </View>
63 - <View style={{flexDirection: 'row'}}> 105 + <View style={{flexDirection: 'row', alignItems: 'center'}}>
64 <TouchableOpacity style={styles.buttonStyle} onPress={setLocation}> 106 <TouchableOpacity style={styles.buttonStyle} onPress={setLocation}>
65 - <Text>MAP설정</Text> 107 + <Text>Map설정</Text>
66 - </TouchableOpacity>
67 - <TouchableOpacity style={styles.buttonStyle}>
68 - <Text>사용자최적경로검색</Text>
69 </TouchableOpacity> 108 </TouchableOpacity>
70 </View> 109 </View>
71 </View> 110 </View>
...@@ -76,20 +115,23 @@ export default StartAndFinishLocationComponent; ...@@ -76,20 +115,23 @@ export default StartAndFinishLocationComponent;
76 115
77 const styles = StyleSheet.create({ 116 const styles = StyleSheet.create({
78 container: { 117 container: {
118 + alignItems: 'center',
119 + marginTop: 50,
79 marginLeft: 20, 120 marginLeft: 20,
80 marginRight: 20, 121 marginRight: 20,
122 + opacity: 0.5,
81 }, 123 },
82 input: { 124 input: {
83 borderRadius: 10, 125 borderRadius: 10,
84 - backgroundColor: 'lightgrey', 126 + backgroundColor: '#f0f8ff',
85 paddingLeft: 10, 127 paddingLeft: 10,
86 paddingRight: 10, 128 paddingRight: 10,
87 width: 300, 129 width: 300,
88 - height: 40, 130 + height: 50,
89 alignItems: 'center', 131 alignItems: 'center',
90 flexDirection: 'row', 132 flexDirection: 'row',
91 justifyContent: 'space-between', 133 justifyContent: 'space-between',
92 - borderBottomColor: '#bbb', 134 + borderBottomColor: '#f0f8ff',
93 marginBottom: 10 135 marginBottom: 10
94 // borderBottomWidth: StyleSheet.hairlineWidth, 136 // borderBottomWidth: StyleSheet.hairlineWidth,
95 }, 137 },
...@@ -102,15 +144,15 @@ const styles = StyleSheet.create({ ...@@ -102,15 +144,15 @@ const styles = StyleSheet.create({
102 marginRight: 15, 144 marginRight: 15,
103 }, 145 },
104 buttonStyle: { 146 buttonStyle: {
105 - flex: 1, 147 + flex: 0.5,
106 - backgroundColor: '#ecf0f1', 148 + backgroundColor: '#f0f8ff',
107 alignItems: 'center', 149 alignItems: 'center',
108 justifyContent: 'center', 150 justifyContent: 'center',
109 - width: 30, 151 + width: 10,
110 height: 30, 152 height: 30,
111 borderWidth: 1, 153 borderWidth: 1,
112 - borderColor: 'black', 154 + borderColor: 'grey',
113 - marginBottom: 20 155 + marginBottom: 20,
114 - 156 + borderRadius: 30
115 } 157 }
116 }); 158 });
......
1 +import React, {useState, useContext, useEffect, useCallback} from 'react';
2 +import {Text, View, StyleSheet, TouchableOpacity, ScrollView, TextInput} from 'react-native';
3 +import {useDispatch, useSelector} from "react-redux";
4 +import {useNavigation} from '@react-navigation/native';
5 +import styled from "styled-components";
6 +import {MaterialCommunityIcons, AntDesign} from '@expo/vector-icons';
7 +
8 +
9 +const Banner = styled.View`
10 + flex: 1;
11 + margin-left: 15px;
12 + margin-bottom: 5px;
13 + width: 3px;
14 + height: 3px;
15 + border-radius: 20px;
16 + border: 3px solid grey;
17 +
18 +`;
19 +
20 +
21 +const WalkPathComponent = (props) => {
22 + const navigation = useNavigation();
23 + const [walkPath, setWalkPath] = useState(null);
24 + const {pathDetail} = props;
25 +
26 + useEffect(() => {
27 + console.log(props.pathDetail.distance);
28 + setWalkPath(props.pathDetail);
29 + }, []);
30 +
31 + return (
32 + <ScrollView>
33 + <View style={{flexDirection: 'row', flex: 5}}>
34 + <View style={styles.pathType}>
35 + <MaterialCommunityIcons style={{flex: 1}} color={'darkgrey'} name={'walk'} size={20}/>
36 + <Text style={{flex: 1, fontSize: 13}}>{pathDetail.time}</Text>
37 + </View>
38 + <View style={{flex: 1}}>
39 + <Banner/>
40 + <Banner/>
41 + <Banner/>
42 + <Banner/>
43 + <Banner/>
44 + <Banner/>
45 + <Banner/>
46 + </View>
47 + <View style={styles.inputTile}>
48 + <Text style={styles.inputText}> 도보 {pathDetail.distance}m 이동</Text>
49 + </View>
50 + </View>
51 + </ScrollView>
52 + );
53 +}
54 +export default WalkPathComponent;
55 +
56 +const styles = StyleSheet.create({
57 + inputTile: {
58 + flex: 4,
59 + justifyContent: 'center',
60 + color: 'grey',
61 + },
62 + inputText: {
63 + fontWeight: 'normal',
64 + fontSize: 15,
65 + },
66 + pathType: {
67 + flexDirection: 'column',
68 + flex: 0.4,
69 + alignItems: 'center',
70 + justifyContent: 'center',
71 + marginLeft: 5,
72 + marginTop: 10,
73 + }
74 +})
...\ No newline at end of file ...\ No newline at end of file
1 import React, {userLayoutEffect} from 'react'; 1 import React, {userLayoutEffect} from 'react';
2 import {createStackNavigator} from "@react-navigation/stack"; 2 import {createStackNavigator} from "@react-navigation/stack";
3 -import TabNavigation from "./TabNavigation";
4 import SelectOrTakePhotoTabNavigation from "./SelectOrTakePhotoTabNavigation"; 3 import SelectOrTakePhotoTabNavigation from "./SelectOrTakePhotoTabNavigation";
5 import UploadPhoto from "../screens/UploadPhoto"; 4 import UploadPhoto from "../screens/UploadPhoto";
6 5
7 const Stack = createStackNavigator(); 6 const Stack = createStackNavigator();
8 7
9 -const SelectOrTakePhotoStackNavigation = () =>{ 8 +const SelectOrTakePhotoStackNavigation = () => {
10 return ( 9 return (
11 <Stack.Navigator 10 <Stack.Navigator
12 mode='card' 11 mode='card'
13 - 12 + screenOptions={{
13 + headerShown: false
14 + }}
14 > 15 >
15 <Stack.Screen 16 <Stack.Screen
16 name='SelectOrTakePhotoTabNavigation' 17 name='SelectOrTakePhotoTabNavigation'
......
1 +import React, {userLayoutEffect} from 'react';
2 +import {createStackNavigator} from "@react-navigation/stack";
3 +import SetLocationTabNavigation from "./SetLocationTabNavigation";
4 +import GoPathDetail from "../screens/GoPathDetail";
5 +import OptRoutePath from "../screens/OptRoutePath";
6 +
7 +const Stack = createStackNavigator();
8 +
9 +const SetLocationStackNavigation = () => {
10 + return (
11 + <Stack.Navigator
12 + mode='card'
13 + screenOptions={{
14 + headerShown: false
15 + }}
16 + >
17 + <Stack.Screen
18 + name='SetLocationTabNavigation'
19 + component={SetLocationTabNavigation}
20 + />
21 +
22 + <Stack.Screen
23 + name='GoPathDetail'
24 + component={GoPathDetail}
25 + />
26 +
27 + </Stack.Navigator>
28 +
29 + )
30 +};
31 +
32 +export default SetLocationStackNavigation;
...\ No newline at end of file ...\ No newline at end of file
1 +import React, {useLayoutEffect} from 'react';
2 +import {Ionicons} from "@expo/vector-icons";
3 +import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
4 +import Maps from "../screens/Maps";
5 +import OptRoutePath from "../screens/OptRoutePath";
6 +
7 +const Tab = createBottomTabNavigator();
8 +
9 +const SetLocationTabNavigation = (props) => {
10 + const {navigation, route} = props;
11 + // useLayoutEffect(() => {}, [route]);
12 +
13 + return (
14 + <Tab.Navigator
15 + tabBarOptions={{}}
16 + >
17 + <Tab.Screen
18 + name='Maps'
19 + component={Maps}
20 + />
21 +
22 + <Tab.Screen
23 + name='OptRoutePath'
24 + component={OptRoutePath}
25 + />
26 +
27 + </Tab.Navigator>
28 + )
29 +};
30 +
31 +export default SetLocationTabNavigation;
...\ No newline at end of file ...\ No newline at end of file
1 import React from 'react'; 1 import React from 'react';
2 import {createStackNavigator} from "@react-navigation/stack"; 2 import {createStackNavigator} from "@react-navigation/stack";
3 import Gallery from "../screens/Gallery"; 3 import Gallery from "../screens/Gallery";
4 +import Maps from "../screens/Maps";
4 import Main from "../screens/Main"; 5 import Main from "../screens/Main";
5 import TabNavigation from "./TabNavigation"; 6 import TabNavigation from "./TabNavigation";
6 import {TouchableOpacity} from "react-native"; 7 import {TouchableOpacity} from "react-native";
7 -// import * as WebBrowser from 'expo-web-browser'; 8 +import {MaterialCommunityIcons} from "@expo/vector-icons";
8 -import {Ionicons} from "@expo/vector-icons";
9 import SelectOrTakePhotoStackNavigation from "./SelectOrTakePhotoStackNavigation"; 9 import SelectOrTakePhotoStackNavigation from "./SelectOrTakePhotoStackNavigation";
10 - 10 +import SetLocationStackNavigation from "./SetLocationStackNavigation";
11 +import Profile from "../screens/Profile";
12 +import Login from "../screens/Login";
13 +import SignUp from "../screens/SignUp";
11 14
12 const Stack = createStackNavigator(); 15 const Stack = createStackNavigator();
13 // 16 //
...@@ -15,15 +18,16 @@ const Stack = createStackNavigator(); ...@@ -15,15 +18,16 @@ const Stack = createStackNavigator();
15 // await WebBrowser.openBrowserAsync(url); 18 // await WebBrowser.openBrowserAsync(url);
16 // }; 19 // };
17 20
18 -const StackNavigation = () =>{ 21 +const StackNavigation = () => {
19 return ( 22 return (
20 <Stack.Navigator 23 <Stack.Navigator
21 mode='card' 24 mode='card'
22 - screenOptions = {{ 25 + screenOptions={{
26 + headerTitle: 'SGGO',
23 headerRight: () => { 27 headerRight: () => {
24 return ( 28 return (
25 - <TouchableOpacity> 29 + <TouchableOpacity style={{marginRight: 5}}>
26 - <Ionicons name={'logo-youtube'} color={'red'} size={25}/> 30 + <MaterialCommunityIcons color={'grey'} name={'send'} size={24}/>
27 </TouchableOpacity> 31 </TouchableOpacity>
28 ) 32 )
29 } 33 }
...@@ -38,9 +42,27 @@ const StackNavigation = () =>{ ...@@ -38,9 +42,27 @@ const StackNavigation = () =>{
38 component={SelectOrTakePhotoStackNavigation} 42 component={SelectOrTakePhotoStackNavigation}
39 /> 43 />
40 <Stack.Screen 44 <Stack.Screen
45 + name='SetLocationStackNavigation'
46 + component={SetLocationStackNavigation}
47 + />
48 + <Stack.Screen
49 + name='Maps'
50 + component={Maps}
51 + />
52 + <Stack.Screen
41 name='Gallery' 53 name='Gallery'
42 component={Gallery} 54 component={Gallery}
43 /> 55 />
56 +
57 + <Stack.Screen
58 + name='Login'
59 + component={Login}
60 + />
61 +
62 + <Stack.Screen
63 + name='SignUp'
64 + component={SignUp}
65 + />
44 </Stack.Navigator> 66 </Stack.Navigator>
45 ) 67 )
46 }; 68 };
......
...@@ -4,14 +4,11 @@ import {createBottomTabNavigator} from '@react-navigation/bottom-tabs'; ...@@ -4,14 +4,11 @@ import {createBottomTabNavigator} from '@react-navigation/bottom-tabs';
4 import Main from "../screens/Main"; 4 import Main from "../screens/Main";
5 import Login from "../screens/Login"; 5 import Login from "../screens/Login";
6 import Profile from "../screens/Profile"; 6 import Profile from "../screens/Profile";
7 +import LocationTimeSet from "../screens/LocationTimeSet";
7 import Maps from "../screens/Maps"; 8 import Maps from "../screens/Maps";
8 9
9 -
10 const Tab = createBottomTabNavigator(); 10 const Tab = createBottomTabNavigator();
11 11
12 -const getHeaderName = (route) => {
13 -};
14 -
15 const TabNavigation = (props) => { 12 const TabNavigation = (props) => {
16 const {navigation, route} = props; 13 const {navigation, route} = props;
17 // useLayoutEffect(() => {}, [route]); 14 // useLayoutEffect(() => {}, [route]);
...@@ -19,12 +16,8 @@ const TabNavigation = (props) => { ...@@ -19,12 +16,8 @@ const TabNavigation = (props) => {
19 return ( 16 return (
20 <Tab.Navigator 17 <Tab.Navigator
21 // screenOptions = {({route})=>{}} 18 // screenOptions = {({route})=>{}}
22 - tabBarOptions = {{}} 19 + tabBarOptions={{}}
23 > 20 >
24 - <Tab.Screen
25 - name='main'
26 - component={Main}
27 - />
28 21
29 <Tab.Screen 22 <Tab.Screen
30 name='login' 23 name='login'
...@@ -32,8 +25,8 @@ const TabNavigation = (props) => { ...@@ -32,8 +25,8 @@ const TabNavigation = (props) => {
32 /> 25 />
33 26
34 <Tab.Screen 27 <Tab.Screen
35 - name='maps' 28 + name='LocationTimeSet'
36 - component={Maps} 29 + component={LocationTimeSet}
37 /> 30 />
38 31
39 <Tab.Screen 32 <Tab.Screen
......
...@@ -1241,6 +1241,14 @@ ...@@ -1241,6 +1241,14 @@
1241 "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-3.0.0.tgz", 1241 "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-3.0.0.tgz",
1242 "integrity": "sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg==" 1242 "integrity": "sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg=="
1243 }, 1243 },
1244 + "@react-native-community/datetimepicker": {
1245 + "version": "2.2.2",
1246 + "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-2.2.2.tgz",
1247 + "integrity": "sha512-J4Z1tuZQszLR+BNu+UusZlK6/S+CpI6AHzolqTdPS2tRlyVbVim3KyjXrn8trtKxQncR5LEqF9OHw9zsRfEdXA==",
1248 + "requires": {
1249 + "invariant": "^2.2.4"
1250 + }
1251 + },
1244 "@react-native-community/masked-view": { 1252 "@react-native-community/masked-view": {
1245 "version": "0.1.6", 1253 "version": "0.1.6",
1246 "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.6.tgz", 1254 "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.6.tgz",
...@@ -2017,6 +2025,11 @@ ...@@ -2017,6 +2025,11 @@
2017 "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 2025 "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
2018 "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" 2026 "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
2019 }, 2027 },
2028 + "clamp": {
2029 + "version": "1.0.1",
2030 + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz",
2031 + "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ="
2032 + },
2020 "class-utils": { 2033 "class-utils": {
2021 "version": "0.3.6", 2034 "version": "0.3.6",
2022 "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 2035 "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
...@@ -2512,6 +2525,11 @@ ...@@ -2512,6 +2525,11 @@
2512 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz", 2525 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz",
2513 "integrity": "sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg==" 2526 "integrity": "sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg=="
2514 }, 2527 },
2528 + "emoji-regex": {
2529 + "version": "7.0.3",
2530 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
2531 + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
2532 + },
2515 "encodeurl": { 2533 "encodeurl": {
2516 "version": "1.0.2", 2534 "version": "1.0.2",
2517 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 2535 "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
...@@ -2565,6 +2583,14 @@ ...@@ -2565,6 +2583,14 @@
2565 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2583 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
2566 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 2584 "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
2567 }, 2585 },
2586 + "eslint-config-prettier": {
2587 + "version": "6.11.0",
2588 + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz",
2589 + "integrity": "sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==",
2590 + "requires": {
2591 + "get-stdin": "^6.0.0"
2592 + }
2593 + },
2568 "esprima": { 2594 "esprima": {
2569 "version": "4.0.1", 2595 "version": "4.0.1",
2570 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 2596 "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
...@@ -3649,6 +3675,11 @@ ...@@ -3649,6 +3675,11 @@
3649 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", 3675 "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
3650 "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" 3676 "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
3651 }, 3677 },
3678 + "get-stdin": {
3679 + "version": "6.0.0",
3680 + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
3681 + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g=="
3682 + },
3652 "get-stream": { 3683 "get-stream": {
3653 "version": "4.1.0", 3684 "version": "4.1.0",
3654 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 3685 "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
...@@ -3690,6 +3721,21 @@ ...@@ -3690,6 +3721,21 @@
3690 "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", 3721 "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
3691 "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" 3722 "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE="
3692 }, 3723 },
3724 + "has-ansi": {
3725 + "version": "2.0.0",
3726 + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
3727 + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
3728 + "requires": {
3729 + "ansi-regex": "^2.0.0"
3730 + },
3731 + "dependencies": {
3732 + "ansi-regex": {
3733 + "version": "2.1.1",
3734 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
3735 + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
3736 + }
3737 + }
3738 + },
3693 "has-flag": { 3739 "has-flag": {
3694 "version": "3.0.0", 3740 "version": "3.0.0",
3695 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 3741 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
...@@ -4075,6 +4121,11 @@ ...@@ -4075,6 +4121,11 @@
4075 "@jest/types": "^24.9.0" 4121 "@jest/types": "^24.9.0"
4076 } 4122 }
4077 }, 4123 },
4124 + "jest-react-native": {
4125 + "version": "18.0.0",
4126 + "resolved": "https://registry.npmjs.org/jest-react-native/-/jest-react-native-18.0.0.tgz",
4127 + "integrity": "sha1-d92QnwaTJFmfInxYxhwuYhaHJro="
4128 + },
4078 "jest-serializer": { 4129 "jest-serializer": {
4079 "version": "24.9.0", 4130 "version": "24.9.0",
4080 "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", 4131 "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
...@@ -4934,6 +4985,11 @@ ...@@ -4934,6 +4985,11 @@
4934 "minimist": "^1.2.5" 4985 "minimist": "^1.2.5"
4935 } 4986 }
4936 }, 4987 },
4988 + "moment": {
4989 + "version": "2.26.0",
4990 + "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz",
4991 + "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw=="
4992 + },
4937 "morgan": { 4993 "morgan": {
4938 "version": "1.10.0", 4994 "version": "1.10.0",
4939 "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", 4995 "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
...@@ -5005,6 +5061,68 @@ ...@@ -5005,6 +5061,68 @@
5005 "to-regex": "^3.0.1" 5061 "to-regex": "^3.0.1"
5006 } 5062 }
5007 }, 5063 },
5064 + "native-base": {
5065 + "version": "2.13.12",
5066 + "resolved": "https://registry.npmjs.org/native-base/-/native-base-2.13.12.tgz",
5067 + "integrity": "sha512-LdKGNXisbmQ0vDHG86McZKIFTlRyo+OQdJpqmQ05Yf7CGlMbBykJZCFe9rdiee5pLq20xiChe/jXbzFdWcysrg==",
5068 + "requires": {
5069 + "blueimp-md5": "^2.5.0",
5070 + "clamp": "^1.0.1",
5071 + "color": "~3.1.2",
5072 + "create-react-class": "^15.6.3",
5073 + "eslint-config-prettier": "^6.0.0",
5074 + "fs-extra": "^2.0.0",
5075 + "jest-react-native": "^18.0.0",
5076 + "lodash": "^4.17.14",
5077 + "native-base-shoutem-theme": "0.3.1",
5078 + "opencollective-postinstall": "^2.0.2",
5079 + "print-message": "^2.1.0",
5080 + "prop-types": "^15.5.10",
5081 + "react-native-drawer": "2.5.1",
5082 + "react-native-easy-grid": "0.2.2",
5083 + "react-native-keyboard-aware-scroll-view": "0.9.1",
5084 + "react-native-vector-icons": "^6.6.0",
5085 + "react-timer-mixin": "^0.13.4",
5086 + "react-tween-state": "^0.1.5",
5087 + "tween-functions": "^1.0.1"
5088 + },
5089 + "dependencies": {
5090 + "fs-extra": {
5091 + "version": "2.1.2",
5092 + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz",
5093 + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=",
5094 + "requires": {
5095 + "graceful-fs": "^4.1.2",
5096 + "jsonfile": "^2.1.0"
5097 + }
5098 + },
5099 + "jsonfile": {
5100 + "version": "2.4.0",
5101 + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
5102 + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
5103 + "requires": {
5104 + "graceful-fs": "^4.1.6"
5105 + }
5106 + }
5107 + }
5108 + },
5109 + "native-base-shoutem-theme": {
5110 + "version": "0.3.1",
5111 + "resolved": "https://registry.npmjs.org/native-base-shoutem-theme/-/native-base-shoutem-theme-0.3.1.tgz",
5112 + "integrity": "sha512-uwEGhg6gwDuJTHuhNXRKbHtNjni1UI9qfAsVchIqfK7mQAHSNPVU1QRs9Hw6O2K/qLZaP/aJmNoZGc2h2EGSwA==",
5113 + "requires": {
5114 + "hoist-non-react-statics": "^1.0.5",
5115 + "lodash": "^4.17.14",
5116 + "prop-types": "^15.5.10"
5117 + },
5118 + "dependencies": {
5119 + "hoist-non-react-statics": {
5120 + "version": "1.2.0",
5121 + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz",
5122 + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs="
5123 + }
5124 + }
5125 + },
5008 "negotiator": { 5126 "negotiator": {
5009 "version": "0.6.2", 5127 "version": "0.6.2",
5010 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 5128 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
...@@ -5034,6 +5152,31 @@ ...@@ -5034,6 +5152,31 @@
5034 "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", 5152 "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
5035 "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" 5153 "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
5036 }, 5154 },
5155 + "node-nikerunclub": {
5156 + "version": "1.0.0",
5157 + "resolved": "https://registry.npmjs.org/node-nikerunclub/-/node-nikerunclub-1.0.0.tgz",
5158 + "integrity": "sha512-RrSHyIYADyvEiR6rSktkcfybzJ/4xFfGZHYMsqLvxX1zcTcQSuv6RXemqDhF6FEMXHFkMQeemZVjbOHEo8z/tw==",
5159 + "requires": {
5160 + "axios": "^0.18.0",
5161 + "qs": "^6.5.2"
5162 + },
5163 + "dependencies": {
5164 + "axios": {
5165 + "version": "0.18.1",
5166 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz",
5167 + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==",
5168 + "requires": {
5169 + "follow-redirects": "1.5.10",
5170 + "is-buffer": "^2.0.2"
5171 + }
5172 + },
5173 + "is-buffer": {
5174 + "version": "2.0.4",
5175 + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
5176 + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
5177 + }
5178 + }
5179 + },
5037 "node-notifier": { 5180 "node-notifier": {
5038 "version": "5.4.3", 5181 "version": "5.4.3",
5039 "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", 5182 "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
...@@ -5232,6 +5375,11 @@ ...@@ -5232,6 +5375,11 @@
5232 "is-wsl": "^1.1.0" 5375 "is-wsl": "^1.1.0"
5233 } 5376 }
5234 }, 5377 },
5378 + "opencollective-postinstall": {
5379 + "version": "2.0.3",
5380 + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
5381 + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="
5382 + },
5235 "options": { 5383 "options": {
5236 "version": "0.0.6", 5384 "version": "0.0.6",
5237 "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", 5385 "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
...@@ -5396,6 +5544,11 @@ ...@@ -5396,6 +5544,11 @@
5396 } 5544 }
5397 } 5545 }
5398 }, 5546 },
5547 + "performance-now": {
5548 + "version": "2.1.0",
5549 + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
5550 + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
5551 + },
5399 "pify": { 5552 "pify": {
5400 "version": "4.0.1", 5553 "version": "4.0.1",
5401 "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 5554 "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
...@@ -5545,6 +5698,51 @@ ...@@ -5545,6 +5698,51 @@
5545 "ansi-styles": "^3.2.0" 5698 "ansi-styles": "^3.2.0"
5546 } 5699 }
5547 }, 5700 },
5701 + "print-message": {
5702 + "version": "2.1.0",
5703 + "resolved": "https://registry.npmjs.org/print-message/-/print-message-2.1.0.tgz",
5704 + "integrity": "sha1-tViO0IsOG/d6x7y1y3gASvr5qJE=",
5705 + "requires": {
5706 + "chalk": "1.1.1"
5707 + },
5708 + "dependencies": {
5709 + "ansi-regex": {
5710 + "version": "2.1.1",
5711 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
5712 + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
5713 + },
5714 + "ansi-styles": {
5715 + "version": "2.2.1",
5716 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
5717 + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
5718 + },
5719 + "chalk": {
5720 + "version": "1.1.1",
5721 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
5722 + "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
5723 + "requires": {
5724 + "ansi-styles": "^2.1.0",
5725 + "escape-string-regexp": "^1.0.2",
5726 + "has-ansi": "^2.0.0",
5727 + "strip-ansi": "^3.0.0",
5728 + "supports-color": "^2.0.0"
5729 + }
5730 + },
5731 + "strip-ansi": {
5732 + "version": "3.0.1",
5733 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
5734 + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
5735 + "requires": {
5736 + "ansi-regex": "^2.0.0"
5737 + }
5738 + },
5739 + "supports-color": {
5740 + "version": "2.0.0",
5741 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
5742 + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
5743 + }
5744 + }
5745 + },
5548 "private": { 5746 "private": {
5549 "version": "0.1.8", 5747 "version": "0.1.8",
5550 "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 5748 "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
...@@ -5607,6 +5805,14 @@ ...@@ -5607,6 +5805,14 @@
5607 "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", 5805 "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
5608 "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" 5806 "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
5609 }, 5807 },
5808 + "raf": {
5809 + "version": "3.4.1",
5810 + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
5811 + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
5812 + "requires": {
5813 + "performance-now": "^2.1.0"
5814 + }
5815 + },
5610 "range-parser": { 5816 "range-parser": {
5611 "version": "1.2.1", 5817 "version": "1.2.1",
5612 "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 5818 "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
...@@ -5936,6 +6142,33 @@ ...@@ -5936,6 +6142,33 @@
5936 } 6142 }
5937 } 6143 }
5938 }, 6144 },
6145 + "react-native-bottom-action-sheet": {
6146 + "version": "2.0.1",
6147 + "resolved": "https://registry.npmjs.org/react-native-bottom-action-sheet/-/react-native-bottom-action-sheet-2.0.1.tgz",
6148 + "integrity": "sha512-7IUgBjYhub0OR/3vq6FybjXIURBXaoI1oYZRhRzyO/6wfad3hjh9J5ZZjtoNaXgFZfXT/94JPS1fdaBBN5t35A=="
6149 + },
6150 + "react-native-drawer": {
6151 + "version": "2.5.1",
6152 + "resolved": "https://registry.npmjs.org/react-native-drawer/-/react-native-drawer-2.5.1.tgz",
6153 + "integrity": "sha512-cxcQNbSWy5sbGi7anSVp6EDr6JarOBMY9lbFOeLFeVYbONiudoqRKbgEsSDgSw3/LFCLvUXK5zdjXCOedeytxQ==",
6154 + "requires": {
6155 + "prop-types": "^15.5.8",
6156 + "tween-functions": "^1.0.1"
6157 + }
6158 + },
6159 + "react-native-easy-grid": {
6160 + "version": "0.2.2",
6161 + "resolved": "https://registry.npmjs.org/react-native-easy-grid/-/react-native-easy-grid-0.2.2.tgz",
6162 + "integrity": "sha512-MlYrNIldnEMKn6TVatQN1P64GoVlwGIuz+8ncdfJ0Wq/xtzUkQwlil8Uksyp7MhKfENE09MQnGNcba6Mx3oSAA==",
6163 + "requires": {
6164 + "lodash": "^4.17.15"
6165 + }
6166 + },
6167 + "react-native-fast-image": {
6168 + "version": "8.1.5",
6169 + "resolved": "https://registry.npmjs.org/react-native-fast-image/-/react-native-fast-image-8.1.5.tgz",
6170 + "integrity": "sha512-DoAWGLeQ2hbllummrpXH9B38OgM0TFmNYCF34F90/hdHZirqUtYHzF4QDdb/NV7ebSijHmM3mpkzct8PXtcYyg=="
6171 + },
5939 "react-native-gesture-handler": { 6172 "react-native-gesture-handler": {
5940 "version": "1.6.1", 6173 "version": "1.6.1",
5941 "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.6.1.tgz", 6174 "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.6.1.tgz",
...@@ -5959,6 +6192,20 @@ ...@@ -5959,6 +6192,20 @@
5959 "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz", 6192 "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz",
5960 "integrity": "sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ==" 6193 "integrity": "sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ=="
5961 }, 6194 },
6195 + "react-native-keyboard-aware-scroll-view": {
6196 + "version": "0.9.1",
6197 + "resolved": "https://registry.npmjs.org/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.1.tgz",
6198 + "integrity": "sha512-tBZ8rmjELN0F6t5UBp5CW3NYmZXgVnJSzVCssv/OqG2t6kiB+OUTqxNvUP24K+HARX4H+XaW0aEJSFQkQCv6KA==",
6199 + "requires": {
6200 + "prop-types": "^15.6.2",
6201 + "react-native-iphone-x-helper": "^1.0.3"
6202 + }
6203 + },
6204 + "react-native-maps": {
6205 + "version": "0.26.1",
6206 + "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-0.26.1.tgz",
6207 + "integrity": "sha512-p4VTB8YB5ZmOmDRCUpoHZkm05amZwhIo04AJMBbB9+JAR2PNNfpo0vceoWX0Mag4wnePkdzPomeWMplr/wimTg=="
6208 + },
5962 "react-native-reanimated": { 6209 "react-native-reanimated": {
5963 "version": "1.7.1", 6210 "version": "1.7.1",
5964 "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.7.1.tgz", 6211 "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-1.7.1.tgz",
...@@ -5980,6 +6227,127 @@ ...@@ -5980,6 +6227,127 @@
5980 "debounce": "^1.2.0" 6227 "debounce": "^1.2.0"
5981 } 6228 }
5982 }, 6229 },
6230 + "react-native-vector-icons": {
6231 + "version": "6.6.0",
6232 + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-6.6.0.tgz",
6233 + "integrity": "sha512-MImKVx8JEvVVBnaShMr7/yTX4Y062JZMupht1T+IEgbqBj4aQeQ1z2SH4VHWKNtWtppk4kz9gYyUiMWqx6tNSw==",
6234 + "requires": {
6235 + "lodash": "^4.0.0",
6236 + "prop-types": "^15.6.2",
6237 + "yargs": "^13.2.2"
6238 + },
6239 + "dependencies": {
6240 + "cliui": {
6241 + "version": "5.0.0",
6242 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
6243 + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
6244 + "requires": {
6245 + "string-width": "^3.1.0",
6246 + "strip-ansi": "^5.2.0",
6247 + "wrap-ansi": "^5.1.0"
6248 + }
6249 + },
6250 + "find-up": {
6251 + "version": "3.0.0",
6252 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
6253 + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
6254 + "requires": {
6255 + "locate-path": "^3.0.0"
6256 + }
6257 + },
6258 + "get-caller-file": {
6259 + "version": "2.0.5",
6260 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
6261 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
6262 + },
6263 + "locate-path": {
6264 + "version": "3.0.0",
6265 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
6266 + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
6267 + "requires": {
6268 + "p-locate": "^3.0.0",
6269 + "path-exists": "^3.0.0"
6270 + }
6271 + },
6272 + "p-limit": {
6273 + "version": "2.3.0",
6274 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
6275 + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
6276 + "requires": {
6277 + "p-try": "^2.0.0"
6278 + }
6279 + },
6280 + "p-locate": {
6281 + "version": "3.0.0",
6282 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
6283 + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
6284 + "requires": {
6285 + "p-limit": "^2.0.0"
6286 + }
6287 + },
6288 + "p-try": {
6289 + "version": "2.2.0",
6290 + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
6291 + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
6292 + },
6293 + "require-main-filename": {
6294 + "version": "2.0.0",
6295 + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
6296 + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
6297 + },
6298 + "string-width": {
6299 + "version": "3.1.0",
6300 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
6301 + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
6302 + "requires": {
6303 + "emoji-regex": "^7.0.1",
6304 + "is-fullwidth-code-point": "^2.0.0",
6305 + "strip-ansi": "^5.1.0"
6306 + }
6307 + },
6308 + "wrap-ansi": {
6309 + "version": "5.1.0",
6310 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
6311 + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
6312 + "requires": {
6313 + "ansi-styles": "^3.2.0",
6314 + "string-width": "^3.0.0",
6315 + "strip-ansi": "^5.0.0"
6316 + }
6317 + },
6318 + "y18n": {
6319 + "version": "4.0.0",
6320 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
6321 + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
6322 + },
6323 + "yargs": {
6324 + "version": "13.3.2",
6325 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
6326 + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
6327 + "requires": {
6328 + "cliui": "^5.0.0",
6329 + "find-up": "^3.0.0",
6330 + "get-caller-file": "^2.0.1",
6331 + "require-directory": "^2.1.1",
6332 + "require-main-filename": "^2.0.0",
6333 + "set-blocking": "^2.0.0",
6334 + "string-width": "^3.0.0",
6335 + "which-module": "^2.0.0",
6336 + "y18n": "^4.0.0",
6337 + "yargs-parser": "^13.1.2"
6338 + }
6339 + },
6340 + "yargs-parser": {
6341 + "version": "13.1.2",
6342 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
6343 + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
6344 + "requires": {
6345 + "camelcase": "^5.0.0",
6346 + "decamelize": "^1.2.0"
6347 + }
6348 + }
6349 + }
6350 + },
5983 "react-native-view-shot": { 6351 "react-native-view-shot": {
5984 "version": "3.1.2", 6352 "version": "3.1.2",
5985 "resolved": "https://registry.npmjs.org/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz", 6353 "resolved": "https://registry.npmjs.org/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz",
...@@ -6024,6 +6392,15 @@ ...@@ -6024,6 +6392,15 @@
6024 "resolved": "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz", 6392 "resolved": "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz",
6025 "integrity": "sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q==" 6393 "integrity": "sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q=="
6026 }, 6394 },
6395 + "react-tween-state": {
6396 + "version": "0.1.5",
6397 + "resolved": "https://registry.npmjs.org/react-tween-state/-/react-tween-state-0.1.5.tgz",
6398 + "integrity": "sha1-6YsGZVHvuTy5LdG+FJlcLj3q4zk=",
6399 + "requires": {
6400 + "raf": "^3.1.0",
6401 + "tween-functions": "^1.0.1"
6402 + }
6403 + },
6027 "read-pkg": { 6404 "read-pkg": {
6028 "version": "2.0.0", 6405 "version": "2.0.0",
6029 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 6406 "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
...@@ -6932,6 +7309,11 @@ ...@@ -6932,6 +7309,11 @@
6932 "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 7309 "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
6933 "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 7310 "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
6934 }, 7311 },
7312 + "tween-functions": {
7313 + "version": "1.2.0",
7314 + "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz",
7315 + "integrity": "sha1-GuOlDnxguz3vd06scHrLynO7w/8="
7316 + },
6935 "type-fest": { 7317 "type-fest": {
6936 "version": "0.7.1", 7318 "version": "0.7.1",
6937 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", 7319 "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
8 "eject": "expo eject" 8 "eject": "expo eject"
9 }, 9 },
10 "dependencies": { 10 "dependencies": {
11 + "@react-native-community/datetimepicker": "2.2.2",
11 "@react-native-community/masked-view": "0.1.6", 12 "@react-native-community/masked-view": "0.1.6",
12 "@react-navigation/bottom-tabs": "^5.4.1", 13 "@react-navigation/bottom-tabs": "^5.4.1",
13 "@react-navigation/native": "^5.3.0", 14 "@react-navigation/native": "^5.3.0",
...@@ -16,14 +17,21 @@ ...@@ -16,14 +17,21 @@
16 "expo": "~37.0.3", 17 "expo": "~37.0.3",
17 "expo-asset": "^8.1.4", 18 "expo-asset": "^8.1.4",
18 "expo-camera": "~8.2.0", 19 "expo-camera": "~8.2.0",
20 + "expo-file-system": "~8.1.0",
19 "expo-font": "^8.1.1", 21 "expo-font": "^8.1.1",
20 "expo-location": "~8.1.0", 22 "expo-location": "~8.1.0",
21 "expo-media-library": "~8.1.0", 23 "expo-media-library": "~8.1.0",
22 "expo-permissions": "~8.1.0", 24 "expo-permissions": "~8.1.0",
23 "expo-web-browser": "^8.2.1", 25 "expo-web-browser": "^8.2.1",
26 + "moment": "^2.26.0",
27 + "native-base": "^2.13.12",
28 + "node-nikerunclub": "^1.0.0",
29 + "papaparse": "^5.2.0",
24 "react": "~16.9.0", 30 "react": "~16.9.0",
25 "react-dom": "~16.9.0", 31 "react-dom": "~16.9.0",
26 "react-native": "https://github.com/expo/react-native/archive/sdk-37.0.1.tar.gz", 32 "react-native": "https://github.com/expo/react-native/archive/sdk-37.0.1.tar.gz",
33 + "react-native-bottom-action-sheet": "^2.0.1",
34 + "react-native-fast-image": "^8.1.5",
27 "react-native-gesture-handler": "~1.6.0", 35 "react-native-gesture-handler": "~1.6.0",
28 "react-native-maps": "0.26.1", 36 "react-native-maps": "0.26.1",
29 "react-native-reanimated": "~1.7.0", 37 "react-native-reanimated": "~1.7.0",
......
1 +export const initialState = {
2 + startLocation: null,
3 + endLocation: null,
4 + endTime: '',
5 +
6 + optRoute: null,
7 +
8 + settingLocation: false,
9 + settingTime: false,
10 + settingOptRoute: false,
11 + settingVelocity: false,
12 +
13 +
14 + personalVelocity: 60,
15 + info: '',
16 +};
17 +
18 +export const SET_SLOC_REQUEST = 'SET_SLOC_REQUEST';
19 +export const SET_SLOC_SUCCESS = 'SET_SLOC_SUCCESS';
20 +export const SET_SLOC_FAILURE = 'SET_SLOC_FAILURE';
21 +export const SET_ELOC_REQUEST = 'SET_ELOC_REQUEST';
22 +export const SET_ELOC_SUCCESS = 'SET_ELOC_SUCCESS';
23 +export const SET_ELOC_FAILURE = 'SET_ELOC_FAILURE';
24 +export const SET_USER_LOC = 'SET_USER_LOC';
25 +
26 +export const SET_TIME_REQUEST = 'SET_TIME_REQUEST';
27 +export const SET_TIME_SUCCESS = 'SET_TIME_SUCCESS';
28 +export const SET_TIME_FAILURE = 'SET_TIME_FAILURE';
29 +
30 +export const SET_OPTROUTE_REQUEST = 'SET_OPTROUTE_REQUEST';
31 +export const SET_OPTROUTE_SUCCESS = 'SET_OPTROUTE_SUCCESS';
32 +export const SET_OPTROUTE_FAILURE = 'SET_OPTROUTE_FAILURE';
33 +
34 +export const SET_PERVELOCITY_REQUEST = 'SET_PERVELOCITY_REQUEST';
35 +export const SET_PERVELOCITY_SUCCESS = 'SET_PERVELOCITY_SUCCESS';
36 +export const SET_PERVELOCITY_FAILURE = 'SET_PERVELOCITY_FAILURE';
37 +
38 +
39 +export default (state = initialState, action) => {
40 + switch (action.type) {
41 +
42 + case SET_SLOC_REQUEST: {
43 + return {
44 + ...state,
45 + settingLocation: true,
46 + }
47 + }
48 +
49 + case SET_SLOC_SUCCESS: {
50 + const {startLocation} = action.data;
51 + return {
52 + ...state,
53 + startLocation,
54 + isLoggingIn: false,
55 + };
56 + }
57 +
58 + case SET_SLOC_FAILURE: {
59 + const {info} = action.data;
60 + return {
61 + ...state,
62 + settingLocation: false,
63 + info,
64 + }
65 + }
66 +
67 +
68 + case SET_ELOC_REQUEST: {
69 + return {
70 + ...state,
71 + settingLocation: true,
72 + }
73 + }
74 +
75 + case SET_ELOC_SUCCESS: {
76 + const {endLocation} = action.data;
77 + return {
78 + ...state,
79 + endLocation,
80 + isLoggingIn: false,
81 + };
82 + }
83 +
84 + case SET_ELOC_FAILURE: {
85 + const {info} = action.data;
86 + return {
87 + ...state,
88 + settingLocation: false,
89 + info,
90 + }
91 + }
92 +
93 + case SET_USER_LOC: {
94 + var {userLocation} = action.data;
95 + userLocation = {
96 + title: '현위치',
97 + latitude: userLocation.coords.latitude,
98 + longitude: userLocation.coords.longitude,
99 + latitudeDelta: 0.0039,
100 + longitudeDelta: 0.0039,
101 + description: 'start point',
102 +
103 + };
104 + console.log(userLocation.coords);
105 + return {
106 + ...state,
107 + startLocation: userLocation,
108 + settingLocation: false
109 + }
110 + }
111 +
112 + case SET_TIME_REQUEST: {
113 + return {
114 + ...state,
115 + settingTime: true,
116 + }
117 + }
118 + case SET_TIME_SUCCESS: {
119 + const {date} = action.data;
120 + console.log('reducer SET_TIME_SUCCESS', date);
121 + return {
122 + ...state,
123 + endTime: date,
124 + settingTime: false,
125 + }
126 + }
127 + case SET_TIME_FAILURE: {
128 + const {info} = action.data;
129 + return {
130 + ...state,
131 + settingTime: false,
132 + }
133 + }
134 +
135 + case SET_OPTROUTE_REQUEST: {
136 + return {
137 + ...state,
138 + settingOptRoute: true,
139 + }
140 + }
141 +
142 + case SET_OPTROUTE_SUCCESS: {
143 + var {optRoute} = action.data;
144 + console.log('SET_OPTROUTE_SUCCESST', optRoute);
145 + return {
146 + ...state,
147 + optRoute: optRoute,
148 + settingOptRoute: false,
149 + }
150 + }
151 +
152 + case SET_OPTROUTE_FAILURE: {
153 + const {info} = action.data;
154 + return {
155 + ...state,
156 + settingOptRoute: false,
157 + }
158 + }
159 +
160 +
161 + case SET_PERVELOCITY_REQUEST: {
162 + return {
163 + ...state,
164 + settingVelocity: true,
165 + }
166 + }
167 +
168 + case SET_PERVELOCITY_SUCCESS: {
169 + var {personalVelocity} = action.data;
170 + console.log('SET_PERVELOCITY_SUCCESS', personalVelocity);
171 + return {
172 + ...state,
173 + personalVelocity,
174 + settingVelocity: true,
175 + }
176 + }
177 +
178 + case SET_PERVELOCITY_FAILURE: {
179 + const {info} = action.data;
180 + return {
181 + ...state,
182 + settingVelocity: false,
183 + }
184 + }
185 +
186 + default: {
187 + return {
188 + ...state,
189 + };
190 + }
191 + }
192 +};
...\ No newline at end of file ...\ No newline at end of file
1 export const initialState = { 1 export const initialState = {
2 me: null, 2 me: null,
3 + nikeRecord: null,
3 4
4 isLoggingIn: false, 5 isLoggingIn: false,
5 isSigningUp: false, 6 isSigningUp: false,
......
1 +import {all, call, fork, delay, put, takeEvery, takeLatest} from 'redux-saga/effects';
2 +import axios from 'axios';
3 +import {coordAPIKEY, host} from '../env';
4 +
5 +
6 +import {
7 + SET_ELOC_REQUEST,
8 + SET_SLOC_REQUEST,
9 + SET_SLOC_SUCCESS,
10 + SET_ELOC_SUCCESS,
11 + SET_SLOC_FAILURE,
12 + SET_ELOC_FAILURE,
13 + SET_OPTROUTE_REQUEST,
14 + SET_OPTROUTE_SUCCESS,
15 + SET_OPTROUTE_FAILURE,
16 +} from "../reducers/location";
17 +
18 +function setStartLocationAPI(data) {
19 + const {startTextLocation} = data;
20 + console.log(startTextLocation);
21 + return axios.get(`http://api.vworld.kr/req/address?service=address&request=getcoord&version=1.0&crs=epsg:4326&address=${startTextLocation}&refine=true&simple=false&format=json&type=road&key=${coordAPIKEY}`);
22 +}
23 +
24 +function setEndLocationAPI(data) {
25 + const {endTextLocation} = data;
26 + console.log(endTextLocation);
27 + return axios.get(`http://api.vworld.kr/req/address?service=address&request=getcoord&version=1.0&crs=epsg:4326&address=${endTextLocation}&refine=true&simple=false&format=json&type=road&key=${coordAPIKEY}`);
28 +}
29 +
30 +function setOptRouteAPI(data) {
31 + const {startLocation, endLocation, endTime, personalVelocity} = data;
32 + console.log('제발 좀 되라', startLocation, endLocation, endTime, personalVelocity);
33 + return axios.post(`http://${host}:4001/api/setOptRoute`, {
34 + startLocation,
35 + endLocation,
36 + endTime,
37 + personalVelocity
38 + }, {withCredentials: true});
39 +}
40 +
41 +function* setStartLocation(action) {
42 + try {
43 + console.log('saga의 setLocation', action.data);
44 + let res = yield call(setStartLocationAPI, action.data);
45 + let longitude, latitude = null;
46 +
47 + if (res.data.response.status === "OK") {
48 + longitude = parseFloat(res.data.response.result.point.x);
49 + latitude = parseFloat(res.data.response.result.point.y);
50 + }
51 + //
52 + // if (res.data.status === "OK") {
53 + // latitude = res.data.results[0].geometry.location.lat;
54 + // longitude = res.data.results[0].geometry.location.lng;
55 + // console.log(latitude, longitude)
56 + // }
57 +
58 + console.log('startRes: ', longitude, latitude);
59 +
60 + yield put({
61 + type: SET_SLOC_SUCCESS,
62 + data: {
63 + startLocation: {
64 + title: action.data.startTextLocation,
65 + description: 'start point',
66 + longitude: longitude,
67 + latitude: latitude,
68 + latitudeDelta: 1.2,
69 + longitudeDelta: 1.2
70 +
71 + }
72 + }
73 + })
74 + } catch (e) {
75 + console.error(e);
76 + yield put({
77 + type: SET_SLOC_FAILURE,
78 + data: {
79 + info: e.response.data.info
80 + }
81 + });
82 + }
83 +}
84 +
85 +function* setEndLocation(action) {
86 + try {
87 + let res = yield call(setEndLocationAPI, action.data);
88 + let longitude, latitude = null;
89 +
90 + //
91 + // if (res.data.status === "OK") {
92 + // latitude = res.data.results[0].geometry.location.lat;
93 + // longitude = res.data.results[0].geometry.location.lng;
94 + // console.log(latitude, longitude)
95 + // }
96 +
97 + if (res.data.response.status === "OK") {
98 + longitude = parseFloat(res.data.response.result.point.x);
99 + latitude = parseFloat(res.data.response.result.point.y);
100 + }
101 +
102 + console.log('finishRes: ', longitude, latitude);
103 +
104 + yield put({
105 + type: SET_ELOC_SUCCESS,
106 + data: {
107 + endLocation: {
108 + title: action.data.endTextLocation,
109 + description: 'end point',
110 + longitude: longitude,
111 + latitude: latitude,
112 + latitudeDelta: 1.2,
113 + longitudeDelta: 1.2
114 + }
115 + }
116 + });
117 + } catch (e) {
118 + console.error(e);
119 + yield put({
120 + type: SET_ELOC_FAILURE,
121 + data: {
122 + info: e.response.data.info
123 + }
124 + })
125 +
126 + }
127 +}
128 +
129 +function* setOptRoute(action) {
130 + try {
131 + let res = yield call(setOptRouteAPI, action.data);
132 + const {optRoute} = res.data;
133 + yield put({
134 + type: SET_OPTROUTE_SUCCESS,
135 + data: {
136 + optRoute: optRoute
137 + }
138 + });
139 +
140 + } catch (e) {
141 + console.error(e);
142 + yield put({
143 + type: SET_OPTROUTE_FAILURE,
144 + data: {
145 + info: e.response.data.info
146 + }
147 + })
148 + }
149 +}
150 +
151 +
152 +function* watchSetStartLocation() {
153 + console.log('watchSetStartLocation');
154 + yield takeLatest(SET_SLOC_REQUEST, setStartLocation);
155 +}
156 +
157 +function* watchSetEndLocation() {
158 + console.log('watchSetEndLocation');
159 + yield takeLatest(SET_ELOC_REQUEST, setEndLocation)
160 +}
161 +
162 +function* watchSetOptRoute() {
163 + console.log('watchSetOptimalRoute');
164 + yield takeLatest(SET_OPTROUTE_REQUEST, setOptRoute)
165 +}
166 +
167 +export default function* locationSaga() {
168 + yield all([
169 + fork(watchSetStartLocation),
170 + fork(watchSetEndLocation),
171 + fork(watchSetOptRoute),
172 + ]);
173 +};
...\ No newline at end of file ...\ No newline at end of file
1 import {all, call, fork, delay, put, takeEvery, takeLatest} from 'redux-saga/effects'; 1 import {all, call, fork, delay, put, takeEvery, takeLatest} from 'redux-saga/effects';
2 import axios from 'axios'; 2 import axios from 'axios';
3 -import host from '../env'; 3 +import {host} from '../env';
4 import { 4 import {
5 LOG_IN_FAILURE, 5 LOG_IN_FAILURE,
6 LOG_IN_REQUEST, 6 LOG_IN_REQUEST,
...@@ -37,9 +37,7 @@ function loginAPI(data) { ...@@ -37,9 +37,7 @@ function loginAPI(data) {
37 const {email, password} = data; 37 const {email, password} = data;
38 console.log(email, password); 38 console.log(email, password);
39 console.log(`http://${host}:4001/user/login`); 39 console.log(`http://${host}:4001/user/login`);
40 - // const res1 = axios.get(`http://${host}:4001/user/test`, { 40 +
41 - // withCredentials: true
42 - // });
43 return axios.post(`http://${host}:4001/user/login`, { 41 return axios.post(`http://${host}:4001/user/login`, {
44 email, password 42 email, password
45 }, { 43 }, {
......
1 +import React, {useState, useContext, useEffect, useCallback} from 'react';
2 +import {Text, View, StyleSheet, TouchableOpacity, ScrollView, TextInput} from 'react-native';
3 +import {useDispatch, useSelector} from "react-redux";
4 +import {useNavigation} from '@react-navigation/native';
5 +import WalkPathComponent from "../components/WalkPathComponent";
6 +import BusPathComponent from "../components/BusPathComponent";
7 +import LanePathComponent from "../components/LanePathComponent";
8 +import {MaterialCommunityIcons} from "@expo/vector-icons";
9 +
10 +const GoPathDetail = (props) => {
11 + const navigation = useNavigation();
12 + const {route} = props;
13 + const {detail} = route.params;
14 + const [pathDetails, setPathDetails] = useState(null);
15 + const {startLocation, endLocation, optRoute} = useSelector(state => state.location);
16 +
17 +
18 + useEffect(() => {
19 + setPathDetails(detail);
20 + console.log(detail)
21 + }, []);
22 +
23 +
24 + return (
25 + <ScrollView>
26 + <View style={styles.input}>
27 + <MaterialCommunityIcons color={'red'} name={'map-marker'} size={26}/>
28 + <TextInput
29 + style={styles.inputText}
30 + value={startLocation.title}
31 + />
32 + </View>
33 + {pathDetails ?
34 + pathDetails.map((detail, index) => {
35 + if (detail.trafficType === '도보') {
36 + return (
37 + <WalkPathComponent pathDetail={detail}/>
38 + )
39 + } else if (detail.trafficType === '버스') {
40 + return (
41 + <BusPathComponent pathDetail={detail}/>
42 + )
43 + } else (detail.trafficType === '지하철')
44 + {
45 + return (
46 + <LanePathComponent pathDetail={detail}/>
47 + )
48 + }
49 + })
50 + :
51 + null
52 + }
53 + <View style={styles.input}>
54 + <MaterialCommunityIcons color={'blue'} name={'map-marker'} size={26}/>
55 + <TextInput
56 + style={styles.inputText}
57 + value={endLocation.title}
58 + />
59 + </View>
60 + </ScrollView>
61 + );
62 +}
63 +export default GoPathDetail;
64 +
65 +const styles = StyleSheet.create({
66 + input: {
67 + borderRadius: 20,
68 + paddingLeft: 10,
69 + paddingTop: 5,
70 + paddingRight: 10,
71 + width: 350,
72 + height: 30,
73 + alignItems: 'center',
74 + flexDirection: 'row',
75 + justifyContent: 'space-between',
76 + borderBottomColor: '#f0f8ff',
77 + marginBottom: 10,
78 + // borderBottomWidth: StyleSheet.hairlineWidth,
79 + },
80 + inputText: {
81 + flex: 1,
82 + fontWeight: 'bold',
83 + }
84 +})
...\ No newline at end of file ...\ No newline at end of file
1 +import React, {useState, useEffect} from 'react';
2 +import {View, Text, Button, StyleSheet} from 'react-native';
3 +import StartAndFinishLocationComponent from "../components/StartAndFinishLocationComponent";
4 +import DateTimePickerComponent from "../components/DateTimePickerComponent";
5 +import styled from "styled-components";
6 +import {useNavigation} from "@react-navigation/native";
7 +import {useDispatch, useSelector} from "react-redux";
8 +import {SET_OPTROUTE_REQUEST} from "../reducers/location";
9 +
10 +const GoToMaps = styled.TouchableOpacity`
11 + flex: 0.5;
12 + backgroundColor: #f0f8ff;
13 + align-items: center;
14 + justify-content: center;
15 + width: 180px;
16 + height: 30px;
17 + border-radius: 30px;
18 + border-width: 1px;
19 + border-color: #a9a9a9;
20 + position: absolute;
21 + left: 55
22 +`;
23 +
24 +const LocationTimeSet = () => {
25 + const navigation = useNavigation();
26 + const [goToMapsClick, setGoToMapsClick] = useState(false);
27 +
28 + const {startLocation} = useSelector(state => state.location);
29 + const {endLocation} = useSelector(state => state.location);
30 +
31 + const dispatch = useDispatch();
32 + const goToMaps = async () => {
33 + setGoToMapsClick(true);
34 + navigation.navigate('SetLocationStackNavigation');
35 + setTimeout(() => {
36 + setGoToMapsClick(false)
37 + }, 2000)
38 + };
39 +
40 + useEffect(() => {
41 + }, []);
42 +
43 + return (
44 + <View>
45 + <StartAndFinishLocationComponent/>
46 + <DateTimePickerComponent goToMapsClick={goToMapsClick}/>
47 +
48 + <View style={{flexDirection: 'row', marginLeft: 50}}>
49 + <GoToMaps onPress={goToMaps}>
50 + <Text>도착 시간 설정</Text>
51 + </GoToMaps>
52 + </View>
53 + </View>
54 + )
55 +};
56 +
57 +
58 +const styles = StyleSheet.create({
59 + containerStyle: {
60 + flex: 1,
61 + alignItems: 'center',
62 + justifyContent: 'center',
63 + backgroundColor: '#ecf0f1',
64 + marginTop: 100,
65 + },
66 + input: {
67 + width: 200,
68 + height: 44,
69 + padding: 10,
70 + borderWidth: 1,
71 + borderColor: '#778899',
72 + marginBottom: 10,
73 + }
74 +});
75 +
76 +export default LocationTimeSet;
...\ No newline at end of file ...\ No newline at end of file
1 +import React, {useState, useContext, useEffect, useCallback} from 'react';
2 +import {View, Text, Image, TextInput, TouchableOpacity, StyleSheet} from 'react-native';
3 +import {useDispatch, useSelector} from "react-redux";
4 +import {useNavigation} from '@react-navigation/native';
5 +import LoginComponent from "../components/LoginComponent";
6 +import styled from "styled-components";
7 +
8 +
9 +const Login = (props) => {
10 + const navigation = useNavigation();
11 + const [loading, setLoading] = useState(true);
12 + const [isLogin, setIsLogin] = useState(true);
13 +
14 + const {me} = useSelector(state => state.user);
15 + const {isLoggingIn} = useSelector(state => state.user);
16 +
17 + const changeIsLogin = () => {
18 + return setIsLogin(!isLogin);
19 + }
20 +
21 + useEffect(() => {
22 + setLoading(false);
23 + }, [me]);
24 +
25 +
26 + return (
27 + <View style={styles.changeStyle}>
28 + {me ?
29 + <View style={{flex: 2}}>
30 + <Image
31 + style={{width: 500, height: 600, flex: 1}}
32 + source={require('../assets/nike.png')}
33 + />
34 + <TouchableOpacity
35 + title={'SGGO'}
36 + style={{flex: 1, fontSize: 100}}
37 + >
38 + </TouchableOpacity>
39 + </View>
40 + :
41 + <View style={styles.loginStyle}>
42 + <Text style={styles.inputText}>로그인</Text>
43 + <LoginComponent/>
44 + </View>
45 + }
46 + </View>
47 + )
48 +};
49 +
50 +export default Login;
51 +
52 +const styles = StyleSheet.create({
53 + changeStyle: {
54 + flex: 2,
55 + alignItems: 'center',
56 + justifyContent: 'center',
57 + borderColor: 'darkgrey',
58 + },
59 + loginStyle: {
60 + flex: 1,
61 + marginTop: 30,
62 + },
63 + inputText: {
64 + borderColor: 'darkgrey',
65 + fontWeight: 'bold',
66 + fontSize: 20,
67 + marginBottom: 10
68 + }
69 +
70 +});
...\ No newline at end of file ...\ No newline at end of file
...@@ -29,7 +29,6 @@ const Main = () => { ...@@ -29,7 +29,6 @@ const Main = () => {
29 const navigation = useNavigation(); 29 const navigation = useNavigation();
30 30
31 const goToGallery = () => { 31 const goToGallery = () => {
32 - console.log(navigation.navigate);
33 navigation.navigate('Gallery'); 32 navigation.navigate('Gallery');
34 }; 33 };
35 34
......
1 +import React from 'react';
2 +import {View, Text, TouchableOpacity, Image, StyleSheet} from 'react-native';
3 +import styled from "styled-components";
4 +import {useNavigation} from "@react-navigation/native";
5 +import {useSelector} from "react-redux";
6 +
7 +const MainImage = (props) => {
8 + const navigation = useNavigation();
9 +
10 + const {me} = useSelector(state => state.user);
11 +
12 +
13 + return (
14 + <>
15 + <View style={styles.containerStyle}>
16 + <Text>로그인에 성공하였습니다</Text>
17 + </View>
18 + </>
19 + )
20 +};
21 +export default MainImage;
22 +
23 +const styles = StyleSheet.create({
24 + containerStyle: {
25 + flex: 1,
26 + },
27 +});
1 +import React, {useState, useEffect} from 'react';
2 +import MapView, {Marker, Polygon, AnimatedRegion} from 'react-native-maps';
3 +import {StyleSheet, Text, TextInput, TouchableOpacity, View} from 'react-native';
4 +import screen from '../constants/layout';
5 +import {useDispatch, useSelector} from "react-redux";
6 +import {useNavigation} from "@react-navigation/native";
7 +import {AntDesign, MaterialCommunityIcons} from "@expo/vector-icons";
8 +import {SET_OPTROUTE_REQUEST} from "../reducers/location";
9 +import styled from "styled-components";
10 +import OptRoutePath from "./OptRoutePath";
11 +
12 +const GoToOptRoutePath = styled.TouchableOpacity`
13 + flex: 2;
14 + position: absolute;
15 + right: 8px;
16 + bottom: 20px;
17 + width: 30px;
18 + height: 30px;
19 + border-radius: 50px;
20 +`;
21 +
22 +const Maps = (props) => {
23 + const navigation = useNavigation();
24 + const [region, setRegion] = useState(null);
25 + const [markers, setMarkers] = useState([]);
26 + const [pathList, setPathList] = useState([]);
27 + const {startLocation, endLocation, optRoute, endTime, personalVelocity} = useSelector(state => state.location);
28 + const onRegionChange = (region) => {
29 + setRegion(region);
30 + };
31 +
32 + useEffect(() => {
33 + setRegion({
34 + latitude: 37.56647,
35 + longitude: 126.977963,
36 + latitudeDelta: 1.5,
37 + longitudeDelta: 1.5
38 + });
39 + if (startLocation || endLocation) {
40 + setMarkers([startLocation, endLocation]);
41 + }
42 +
43 + }, []);
44 +
45 + const dispatch = useDispatch();
46 + const goToOptRoutePath = async () => {
47 + try {
48 + console.log('set optroute request');
49 + await dispatch({
50 + type: SET_OPTROUTE_REQUEST,
51 + data: {
52 + startLocation,
53 + endLocation,
54 + endTime,
55 + personalVelocity
56 + }
57 + });
58 + setTimeout(() => {
59 + if (optRoute !== null) {
60 + navigation.navigate('OptRoutePath', {optRoute: optRoute})
61 + }
62 + }, 3000);
63 + } catch (e) {
64 + console.error(e);
65 + }
66 + };
67 +
68 + useEffect(() => {
69 + setMarkers([startLocation, endLocation]);
70 + }, [startLocation, endLocation]);
71 +
72 +
73 + return (
74 + <View style={styles.container}>
75 + <View style={styles.input}>
76 + <MaterialCommunityIcons color={'red'} name={'map-marker'} size={26}/>
77 + <TextInput
78 + style={styles.inputText}
79 + value={startLocation.title}
80 + />
81 + </View>
82 + <View style={styles.input}>
83 + <MaterialCommunityIcons color={'blue'} name={'map-marker'} size={26}/>
84 + <TextInput
85 + style={styles.inputText}
86 + value={endLocation.title}
87 + />
88 + </View>
89 + <MapView
90 + style={styles.mapStyle}
91 + initialRegion={region}
92 + onRegionChange={onRegionChange}
93 + textStyle={{color: '#bc8b00'}}
94 + showsUserLocation={true}
95 + >
96 + {markers ?
97 + markers.map((marker, index) => {
98 + return (
99 + <MapView.Marker draggable
100 + key={index}
101 + coordinate={marker}
102 + title={marker.title}
103 + />
104 + )
105 + })
106 + :
107 + null
108 + }
109 + </MapView>
110 + <GoToOptRoutePath onPress={goToOptRoutePath}>
111 + <AntDesign color={'darkgrey'} name={'caretright'} size={32}/>
112 + </GoToOptRoutePath>
113 + </View>
114 + )
115 +};
116 +
117 +const styles = StyleSheet.create({
118 + container: {
119 + flex: 1,
120 + backgroundColor: '#fff',
121 + alignItems: 'center',
122 + },
123 + mapStyle: {
124 + width: screen.width,
125 + height: screen.height,
126 + },
127 + textStyle: {
128 + flex: 1,
129 + fontWeight: 'bold',
130 + fontSize: 20,
131 + color: 'grey',
132 + marginBottom: 20,
133 + },
134 + input: {
135 + borderRadius: 10,
136 + backgroundColor: '#f0f8ff',
137 + paddingLeft: 10,
138 + paddingTop: 5,
139 + paddingRight: 10,
140 + width: 350,
141 + height: 30,
142 + alignItems: 'center',
143 + flexDirection: 'row',
144 + justifyContent: 'space-between',
145 + borderBottomColor: '#f0f8ff',
146 + marginBottom: 10
147 + // borderBottomWidth: StyleSheet.hairlineWidth,
148 + },
149 + inputText: {
150 + flex: 1,
151 + },
152 +});
153 +
154 +export default Maps;
155 +
1 +import React, {useState, useEffect} from 'react';
2 +import {View, Text, Button, ScrollView} from 'react-native';
3 +import {useNavigation} from '@react-navigation/native';
4 +import {useDispatch, useSelector} from "react-redux";
5 +import GoPathSummary from '../components/GoPathSummary';
6 +
7 +const OptRoutePath = (props) => {
8 + const navigation = useNavigation();
9 + const {route} = props;
10 + const {optRoute} = route.params;
11 +
12 + const [pathList, setPathList] = useState([]);
13 + const {startLocation} = useSelector(state => state.location);
14 + const {endLocation} = useSelector(state => state.location);
15 +
16 + const dispatch = useDispatch();
17 + const setOptRouteRequest = async () => {
18 + try {
19 + console.log('set optroute request');
20 + setTimeout(() => {
21 + if (optRoute.pathList) {
22 + for (var i = 0; i < optRoute.pathList.length; i++) {
23 + setPathList(oldPath => [...oldPath, optRoute.pathList[i]]);
24 + }
25 + }
26 + }, 3000);
27 +
28 + } catch (e) {
29 + console.error(e);
30 + }
31 + };
32 +
33 +
34 + useEffect(() => {
35 + setOptRouteRequest();
36 + }, []);
37 +
38 + return (
39 + <ScrollView>
40 + {pathList ?
41 + pathList.map((path, index) => {
42 + return (
43 + <>
44 + <GoPathSummary summary={path.info} detail={path.subPathList}/>
45 + </>
46 + )
47 + })
48 + :
49 + null
50 + }
51 + </ScrollView>
52 + )
53 +};
54 +
55 +export default OptRoutePath;
...\ No newline at end of file ...\ No newline at end of file
1 import React from 'react'; 1 import React from 'react';
2 import {View, Text, Button} from 'react-native'; 2 import {View, Text, Button} from 'react-native';
3 -import SignUpComponent from "../components/SignUpComponent"; 3 +import MyProfileComponent from "../components/MyProfileComponent";
4 4
5 const Profile = () => { 5 const Profile = () => {
6 const {me} = (state => state.user); 6 const {me} = (state => state.user);
7 return ( 7 return (
8 <View> 8 <View>
9 - <SignUpComponent/> 9 + {!me ?
10 + <MyProfileComponent/>
11 + :
12 + null
13 + }
10 </View> 14 </View>
11 ) 15 )
12 }; 16 };
......
1 +import React, {useState, useContext, useEffect, useCallback} from 'react';
2 +import {View, Text, Button, TextInput, TouchableOpacity, StyleSheet} from 'react-native';
3 +import {useDispatch, useSelector} from "react-redux";
4 +import {useNavigation} from '@react-navigation/native';
5 +import SignUpComponent from "../components/SignUpComponent";
6 +
7 +
8 +const SignUp = (props) => {
9 + const navigation = useNavigation();
10 + const [loading, setLoading] = useState(true);
11 + const [isLogin, setIsLogin] = useState(true);
12 +
13 + const {me} = useSelector(state => state.user);
14 + const {isLoggingIn} = useSelector(state => state.user);
15 +
16 + const changeIsLogin = () => {
17 + return setIsLogin(!isLogin);
18 + }
19 +
20 + useEffect(() => {
21 + setLoading(false);
22 + }, [me]);
23 +
24 + return (
25 + <View style={styles.changeStyle}>
26 + <View style={styles.loginStyle}>
27 + <Text style={styles.inputText}>회원가입</Text>
28 + <SignUpComponent/>
29 + </View>
30 + </View>
31 + )
32 +};
33 +
34 +export default SignUp;
35 +
36 +const styles = StyleSheet.create({
37 + changeStyle: {
38 + flex: 2,
39 + alignItems: 'center',
40 + justifyContent: 'center',
41 + borderColor: 'darkgrey',
42 + },
43 + loginStyle: {
44 + flex: 1,
45 + marginTop: 30,
46 + },
47 + inputText: {
48 + borderColor: 'darkgrey',
49 + fontWeight: 'bold',
50 + fontSize: 20,
51 + marginBottom: 10
52 + }
53 +
54 +});
...\ No newline at end of file ...\ No newline at end of file
...@@ -1202,6 +1202,13 @@ ...@@ -1202,6 +1202,13 @@
1202 wcwidth "^1.0.1" 1202 wcwidth "^1.0.1"
1203 ws "^1.1.0" 1203 ws "^1.1.0"
1204 1204
1205 +"@react-native-community/datetimepicker@2.2.2":
1206 + version "2.2.2"
1207 + resolved "https://registry.yarnpkg.com/@react-native-community/datetimepicker/-/datetimepicker-2.2.2.tgz#4c6388631179098cc5b289146e879764f79af4c1"
1208 + integrity sha512-J4Z1tuZQszLR+BNu+UusZlK6/S+CpI6AHzolqTdPS2tRlyVbVim3KyjXrn8trtKxQncR5LEqF9OHw9zsRfEdXA==
1209 + dependencies:
1210 + invariant "^2.2.4"
1211 +
1205 "@react-native-community/masked-view@0.1.6": 1212 "@react-native-community/masked-view@0.1.6":
1206 version "0.1.6" 1213 version "0.1.6"
1207 resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.6.tgz#c7f2ac187c1f25aa8c30d11baa8f4398eca3bb84" 1214 resolved "https://registry.yarnpkg.com/@react-native-community/masked-view/-/masked-view-0.1.6.tgz#c7f2ac187c1f25aa8c30d11baa8f4398eca3bb84"
...@@ -1477,6 +1484,11 @@ ansi-regex@^5.0.0: ...@@ -1477,6 +1484,11 @@ ansi-regex@^5.0.0:
1477 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 1484 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
1478 integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 1485 integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
1479 1486
1487 +ansi-styles@^2.1.0:
1488 + version "2.2.1"
1489 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
1490 + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
1491 +
1480 ansi-styles@^3.2.0, ansi-styles@^3.2.1: 1492 ansi-styles@^3.2.0, ansi-styles@^3.2.1:
1481 version "3.2.1" 1493 version "3.2.1"
1482 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 1494 resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
...@@ -1612,6 +1624,14 @@ atob@^2.1.2: ...@@ -1612,6 +1624,14 @@ atob@^2.1.2:
1612 resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" 1624 resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
1613 integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== 1625 integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
1614 1626
1627 +axios@^0.18.0:
1628 + version "0.18.1"
1629 + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3"
1630 + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==
1631 + dependencies:
1632 + follow-redirects "1.5.10"
1633 + is-buffer "^2.0.2"
1634 +
1615 axios@^0.19.2: 1635 axios@^0.19.2:
1616 version "0.19.2" 1636 version "0.19.2"
1617 resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" 1637 resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
...@@ -1758,6 +1778,11 @@ blueimp-md5@^2.10.0: ...@@ -1758,6 +1778,11 @@ blueimp-md5@^2.10.0:
1758 resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.13.0.tgz#07314b0c64dda0bf1733f96ce40d5af94eb28965" 1778 resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.13.0.tgz#07314b0c64dda0bf1733f96ce40d5af94eb28965"
1759 integrity sha512-lmp0m647R5e77ORduxLW5mISIDcvgJZa52vMBv5uVI3UmSWTQjkJsZVBfaFqQPw/QFogJwvY6e3Gl9nP+Loe+Q== 1779 integrity sha512-lmp0m647R5e77ORduxLW5mISIDcvgJZa52vMBv5uVI3UmSWTQjkJsZVBfaFqQPw/QFogJwvY6e3Gl9nP+Loe+Q==
1760 1780
1781 +blueimp-md5@^2.5.0:
1782 + version "2.16.0"
1783 + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.16.0.tgz#9018bb805e4ee05512e0e8cbdb9305eeecbdc87c"
1784 + integrity sha512-j4nzWIqEFpLSbdhUApHRGDwfXbV8ALhqOn+FY5L6XBdKPAXU9BpGgFSbDsgqogfqPPR9R2WooseWCsfhfEC6uQ==
1785 +
1761 bplist-creator@0.0.8: 1786 bplist-creator@0.0.8:
1762 version "0.0.8" 1787 version "0.0.8"
1763 resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" 1788 resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c"
...@@ -1912,6 +1937,17 @@ capture-exit@^2.0.0: ...@@ -1912,6 +1937,17 @@ capture-exit@^2.0.0:
1912 dependencies: 1937 dependencies:
1913 rsvp "^4.8.4" 1938 rsvp "^4.8.4"
1914 1939
1940 +chalk@1.1.1:
1941 + version "1.1.1"
1942 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.1.tgz#509afb67066e7499f7eb3535c77445772ae2d019"
1943 + integrity sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=
1944 + dependencies:
1945 + ansi-styles "^2.1.0"
1946 + escape-string-regexp "^1.0.2"
1947 + has-ansi "^2.0.0"
1948 + strip-ansi "^3.0.0"
1949 + supports-color "^2.0.0"
1950 +
1915 chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: 1951 chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
1916 version "2.4.2" 1952 version "2.4.2"
1917 resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1953 resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
...@@ -1939,6 +1975,11 @@ ci-info@^2.0.0: ...@@ -1939,6 +1975,11 @@ ci-info@^2.0.0:
1939 resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 1975 resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
1940 integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 1976 integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
1941 1977
1978 +clamp@^1.0.1:
1979 + version "1.0.1"
1980 + resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634"
1981 + integrity sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=
1982 +
1942 class-utils@^0.3.5: 1983 class-utils@^0.3.5:
1943 version "0.3.6" 1984 version "0.3.6"
1944 resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" 1985 resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
...@@ -1984,6 +2025,15 @@ cliui@^4.0.0: ...@@ -1984,6 +2025,15 @@ cliui@^4.0.0:
1984 strip-ansi "^4.0.0" 2025 strip-ansi "^4.0.0"
1985 wrap-ansi "^2.0.0" 2026 wrap-ansi "^2.0.0"
1986 2027
2028 +cliui@^5.0.0:
2029 + version "5.0.0"
2030 + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
2031 + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
2032 + dependencies:
2033 + string-width "^3.1.0"
2034 + strip-ansi "^5.2.0"
2035 + wrap-ansi "^5.1.0"
2036 +
1987 clone@^1.0.2: 2037 clone@^1.0.2:
1988 version "1.0.4" 2038 version "1.0.4"
1989 resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 2039 resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
...@@ -2039,7 +2089,7 @@ color-support@^1.1.3: ...@@ -2039,7 +2089,7 @@ color-support@^1.1.3:
2039 resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" 2089 resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
2040 integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== 2090 integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
2041 2091
2042 -color@^3.1.2: 2092 +color@^3.1.2, color@~3.1.2:
2043 version "3.1.2" 2093 version "3.1.2"
2044 resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" 2094 resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10"
2045 integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== 2095 integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==
...@@ -2354,6 +2404,11 @@ electron-to-chromium@^1.3.390: ...@@ -2354,6 +2404,11 @@ electron-to-chromium@^1.3.390:
2354 resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz#9c457a4165c7b42e59d66dff841063eb9bfe5614" 2404 resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.413.tgz#9c457a4165c7b42e59d66dff841063eb9bfe5614"
2355 integrity sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg== 2405 integrity sha512-Jm1Rrd3siqYHO3jftZwDljL2LYQafj3Kki5r+udqE58d0i91SkjItVJ5RwlJn9yko8i7MOcoidVKjQlgSdd1hg==
2356 2406
2407 +emoji-regex@^7.0.1:
2408 + version "7.0.3"
2409 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
2410 + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
2411 +
2357 encodeurl@~1.0.2: 2412 encodeurl@~1.0.2:
2358 version "1.0.2" 2413 version "1.0.2"
2359 resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 2414 resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
...@@ -2398,7 +2453,7 @@ escape-html@~1.0.3: ...@@ -2398,7 +2453,7 @@ escape-html@~1.0.3:
2398 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 2453 resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
2399 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 2454 integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
2400 2455
2401 -escape-string-regexp@^1.0.5: 2456 +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
2402 version "1.0.5" 2457 version "1.0.5"
2403 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 2458 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
2404 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 2459 integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
...@@ -2408,6 +2463,13 @@ escape-string-regexp@^4.0.0: ...@@ -2408,6 +2463,13 @@ escape-string-regexp@^4.0.0:
2408 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 2463 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
2409 integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 2464 integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
2410 2465
2466 +eslint-config-prettier@^6.0.0:
2467 + version "6.11.0"
2468 + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1"
2469 + integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==
2470 + dependencies:
2471 + get-stdin "^6.0.0"
2472 +
2411 esprima@^4.0.0: 2473 esprima@^4.0.0:
2412 version "4.0.1" 2474 version "4.0.1"
2413 resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 2475 resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
...@@ -2848,6 +2910,14 @@ fs-extra@^1.0.0: ...@@ -2848,6 +2910,14 @@ fs-extra@^1.0.0:
2848 jsonfile "^2.1.0" 2910 jsonfile "^2.1.0"
2849 klaw "^1.0.0" 2911 klaw "^1.0.0"
2850 2912
2913 +fs-extra@^2.0.0:
2914 + version "2.1.2"
2915 + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35"
2916 + integrity sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=
2917 + dependencies:
2918 + graceful-fs "^4.1.2"
2919 + jsonfile "^2.1.0"
2920 +
2851 fs-extra@^7.0.1: 2921 fs-extra@^7.0.1:
2852 version "7.0.1" 2922 version "7.0.1"
2853 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" 2923 resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
...@@ -2885,6 +2955,16 @@ get-caller-file@^1.0.1: ...@@ -2885,6 +2955,16 @@ get-caller-file@^1.0.1:
2885 resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" 2955 resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
2886 integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== 2956 integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
2887 2957
2958 +get-caller-file@^2.0.1:
2959 + version "2.0.5"
2960 + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
2961 + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
2962 +
2963 +get-stdin@^6.0.0:
2964 + version "6.0.0"
2965 + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
2966 + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
2967 +
2888 get-stream@^3.0.0: 2968 get-stream@^3.0.0:
2889 version "3.0.0" 2969 version "3.0.0"
2890 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 2970 resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
...@@ -2929,6 +3009,13 @@ growly@^1.3.0: ...@@ -2929,6 +3009,13 @@ growly@^1.3.0:
2929 resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 3009 resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
2930 integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= 3010 integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
2931 3011
3012 +has-ansi@^2.0.0:
3013 + version "2.0.0"
3014 + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
3015 + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
3016 + dependencies:
3017 + ansi-regex "^2.0.0"
3018 +
2932 has-flag@^3.0.0: 3019 has-flag@^3.0.0:
2933 version "3.0.0" 3020 version "3.0.0"
2934 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 3021 resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
...@@ -2980,6 +3067,11 @@ hermes-engine@^0.2.1: ...@@ -2980,6 +3067,11 @@ hermes-engine@^0.2.1:
2980 resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.2.1.tgz#25c0f1ff852512a92cb5c5cc47cf967e1e722ea2" 3067 resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.2.1.tgz#25c0f1ff852512a92cb5c5cc47cf967e1e722ea2"
2981 integrity sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ== 3068 integrity sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ==
2982 3069
3070 +hoist-non-react-statics@^1.0.5:
3071 + version "1.2.0"
3072 + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
3073 + integrity sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=
3074 +
2983 hoist-non-react-statics@^2.3.1: 3075 hoist-non-react-statics@^2.3.1:
2984 version "2.5.5" 3076 version "2.5.5"
2985 resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" 3077 resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
...@@ -3129,6 +3221,11 @@ is-buffer@^1.1.5: ...@@ -3129,6 +3221,11 @@ is-buffer@^1.1.5:
3129 resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 3221 resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
3130 integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 3222 integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
3131 3223
3224 +is-buffer@^2.0.2:
3225 + version "2.0.4"
3226 + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
3227 + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
3228 +
3132 is-ci@^2.0.0: 3229 is-ci@^2.0.0:
3133 version "2.0.0" 3230 version "2.0.0"
3134 resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 3231 resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c"
...@@ -3316,6 +3413,11 @@ jest-mock@^24.9.0: ...@@ -3316,6 +3413,11 @@ jest-mock@^24.9.0:
3316 dependencies: 3413 dependencies:
3317 "@jest/types" "^24.9.0" 3414 "@jest/types" "^24.9.0"
3318 3415
3416 +jest-react-native@^18.0.0:
3417 + version "18.0.0"
3418 + resolved "https://registry.yarnpkg.com/jest-react-native/-/jest-react-native-18.0.0.tgz#77dd909f069324599f227c58c61c2e62168726ba"
3419 + integrity sha1-d92QnwaTJFmfInxYxhwuYhaHJro=
3420 +
3319 jest-serializer@^24.4.0, jest-serializer@^24.9.0: 3421 jest-serializer@^24.4.0, jest-serializer@^24.9.0:
3320 version "24.9.0" 3422 version "24.9.0"
3321 resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" 3423 resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73"
...@@ -3535,7 +3637,7 @@ lodash.throttle@^4.1.1: ...@@ -3535,7 +3637,7 @@ lodash.throttle@^4.1.1:
3535 resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" 3637 resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
3536 integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= 3638 integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
3537 3639
3538 -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.0: 3640 +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0, lodash@^4.6.0:
3539 version "4.17.15" 3641 version "4.17.15"
3540 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 3642 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
3541 integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 3643 integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
...@@ -3948,6 +4050,11 @@ mkdirp@^0.5.1: ...@@ -3948,6 +4050,11 @@ mkdirp@^0.5.1:
3948 dependencies: 4050 dependencies:
3949 minimist "^1.2.5" 4051 minimist "^1.2.5"
3950 4052
4053 +moment@^2.26.0:
4054 + version "2.26.0"
4055 + resolved "https://registry.yarnpkg.com/moment/-/moment-2.26.0.tgz#5e1f82c6bafca6e83e808b30c8705eed0dcbd39a"
4056 + integrity sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==
4057 +
3951 morgan@^1.9.0: 4058 morgan@^1.9.0:
3952 version "1.10.0" 4059 version "1.10.0"
3953 resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" 4060 resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7"
...@@ -4006,6 +4113,40 @@ nanomatch@^1.2.9: ...@@ -4006,6 +4113,40 @@ nanomatch@^1.2.9:
4006 snapdragon "^0.8.1" 4113 snapdragon "^0.8.1"
4007 to-regex "^3.0.1" 4114 to-regex "^3.0.1"
4008 4115
4116 +native-base-shoutem-theme@0.3.1:
4117 + version "0.3.1"
4118 + resolved "https://registry.yarnpkg.com/native-base-shoutem-theme/-/native-base-shoutem-theme-0.3.1.tgz#f15cbd4ca74ca1c8b6a636d297b9164a5f2b3662"
4119 + integrity sha512-uwEGhg6gwDuJTHuhNXRKbHtNjni1UI9qfAsVchIqfK7mQAHSNPVU1QRs9Hw6O2K/qLZaP/aJmNoZGc2h2EGSwA==
4120 + dependencies:
4121 + hoist-non-react-statics "^1.0.5"
4122 + lodash "^4.17.14"
4123 + prop-types "^15.5.10"
4124 +
4125 +native-base@^2.13.12:
4126 + version "2.13.12"
4127 + resolved "https://registry.yarnpkg.com/native-base/-/native-base-2.13.12.tgz#06020b46019964ddaef3a646ec07e72008018efc"
4128 + integrity sha512-LdKGNXisbmQ0vDHG86McZKIFTlRyo+OQdJpqmQ05Yf7CGlMbBykJZCFe9rdiee5pLq20xiChe/jXbzFdWcysrg==
4129 + dependencies:
4130 + blueimp-md5 "^2.5.0"
4131 + clamp "^1.0.1"
4132 + color "~3.1.2"
4133 + create-react-class "^15.6.3"
4134 + eslint-config-prettier "^6.0.0"
4135 + fs-extra "^2.0.0"
4136 + jest-react-native "^18.0.0"
4137 + lodash "^4.17.14"
4138 + native-base-shoutem-theme "0.3.1"
4139 + opencollective-postinstall "^2.0.2"
4140 + print-message "^2.1.0"
4141 + prop-types "^15.5.10"
4142 + react-native-drawer "2.5.1"
4143 + react-native-easy-grid "0.2.2"
4144 + react-native-keyboard-aware-scroll-view "0.9.1"
4145 + react-native-vector-icons "^6.6.0"
4146 + react-timer-mixin "^0.13.4"
4147 + react-tween-state "^0.1.5"
4148 + tween-functions "^1.0.1"
4149 +
4009 negotiator@0.6.2: 4150 negotiator@0.6.2:
4010 version "0.6.2" 4151 version "0.6.2"
4011 resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 4152 resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
...@@ -4039,6 +4180,14 @@ node-modules-regexp@^1.0.0: ...@@ -4039,6 +4180,14 @@ node-modules-regexp@^1.0.0:
4039 resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" 4180 resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
4040 integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= 4181 integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
4041 4182
4183 +node-nikerunclub@^1.0.0:
4184 + version "1.0.0"
4185 + resolved "https://registry.yarnpkg.com/node-nikerunclub/-/node-nikerunclub-1.0.0.tgz#eae5be94e4a3e7b20e7d7fbd31b4d416327dd03e"
4186 + integrity sha512-RrSHyIYADyvEiR6rSktkcfybzJ/4xFfGZHYMsqLvxX1zcTcQSuv6RXemqDhF6FEMXHFkMQeemZVjbOHEo8z/tw==
4187 + dependencies:
4188 + axios "^0.18.0"
4189 + qs "^6.5.2"
4190 +
4042 node-notifier@^5.2.1: 4191 node-notifier@^5.2.1:
4043 version "5.4.3" 4192 version "5.4.3"
4044 resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" 4193 resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50"
...@@ -4189,6 +4338,11 @@ open@^6.2.0: ...@@ -4189,6 +4338,11 @@ open@^6.2.0:
4189 dependencies: 4338 dependencies:
4190 is-wsl "^1.1.0" 4339 is-wsl "^1.1.0"
4191 4340
4341 +opencollective-postinstall@^2.0.2:
4342 + version "2.0.3"
4343 + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259"
4344 + integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==
4345 +
4192 options@>=0.0.5: 4346 options@>=0.0.5:
4193 version "0.0.6" 4347 version "0.0.6"
4194 resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 4348 resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"
...@@ -4289,6 +4443,11 @@ p-try@^2.0.0: ...@@ -4289,6 +4443,11 @@ p-try@^2.0.0:
4289 resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 4443 resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
4290 integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 4444 integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
4291 4445
4446 +papaparse@^5.2.0:
4447 + version "5.2.0"
4448 + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.2.0.tgz#97976a1b135c46612773029153dc64995caa3b7b"
4449 + integrity sha512-ylq1wgUSnagU+MKQtNeVqrPhZuMYBvOSL00DHycFTCxownF95gpLAk1HiHdUW77N8yxRq1qHXLdlIPyBSG9NSA==
4450 +
4292 parse-json@^2.2.0: 4451 parse-json@^2.2.0:
4293 version "2.2.0" 4452 version "2.2.0"
4294 resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 4453 resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
...@@ -4356,6 +4515,11 @@ path-type@^2.0.0: ...@@ -4356,6 +4515,11 @@ path-type@^2.0.0:
4356 dependencies: 4515 dependencies:
4357 pify "^2.0.0" 4516 pify "^2.0.0"
4358 4517
4518 +performance-now@^2.1.0:
4519 + version "2.1.0"
4520 + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
4521 + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
4522 +
4359 pify@^2.0.0: 4523 pify@^2.0.0:
4360 version "2.3.0" 4524 version "2.3.0"
4361 resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 4525 resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
...@@ -4455,6 +4619,13 @@ pretty-format@^25.1.0: ...@@ -4455,6 +4619,13 @@ pretty-format@^25.1.0:
4455 ansi-styles "^4.0.0" 4619 ansi-styles "^4.0.0"
4456 react-is "^16.12.0" 4620 react-is "^16.12.0"
4457 4621
4622 +print-message@^2.1.0:
4623 + version "2.1.0"
4624 + resolved "https://registry.yarnpkg.com/print-message/-/print-message-2.1.0.tgz#b5588ed08b0e1bf77ac7bcb5cb78004afaf9a891"
4625 + integrity sha1-tViO0IsOG/d6x7y1y3gASvr5qJE=
4626 + dependencies:
4627 + chalk "1.1.1"
4628 +
4458 private@^0.1.8: 4629 private@^0.1.8:
4459 version "0.1.8" 4630 version "0.1.8"
4460 resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 4631 resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
...@@ -4472,7 +4643,7 @@ promise@^7.1.1: ...@@ -4472,7 +4643,7 @@ promise@^7.1.1:
4472 dependencies: 4643 dependencies:
4473 asap "~2.0.3" 4644 asap "~2.0.3"
4474 4645
4475 -prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: 4646 +prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
4476 version "15.7.2" 4647 version "15.7.2"
4477 resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 4648 resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
4478 integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 4649 integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
...@@ -4499,6 +4670,11 @@ qs@^6.5.0: ...@@ -4499,6 +4670,11 @@ qs@^6.5.0:
4499 resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" 4670 resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e"
4500 integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== 4671 integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==
4501 4672
4673 +qs@^6.5.2:
4674 + version "6.9.4"
4675 + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687"
4676 + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==
4677 +
4502 query-string@^5.0.1: 4678 query-string@^5.0.1:
4503 version "5.1.1" 4679 version "5.1.1"
4504 resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" 4680 resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
...@@ -4522,6 +4698,13 @@ querystringify@^2.1.1: ...@@ -4522,6 +4698,13 @@ querystringify@^2.1.1:
4522 resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" 4698 resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e"
4523 integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== 4699 integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==
4524 4700
4701 +raf@^3.1.0:
4702 + version "3.4.1"
4703 + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
4704 + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
4705 + dependencies:
4706 + performance-now "^2.1.0"
4707 +
4525 range-parser@~1.2.1: 4708 range-parser@~1.2.1:
4526 version "1.2.1" 4709 version "1.2.1"
4527 resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 4710 resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
...@@ -4550,6 +4733,31 @@ react-is@^16.12.0, react-is@^16.13.0, react-is@^16.7.0, react-is@^16.8.1, react- ...@@ -4550,6 +4733,31 @@ react-is@^16.12.0, react-is@^16.13.0, react-is@^16.7.0, react-is@^16.8.1, react-
4550 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 4733 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
4551 integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 4734 integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
4552 4735
4736 +react-native-bottom-action-sheet@^2.0.1:
4737 + version "2.0.1"
4738 + resolved "https://registry.yarnpkg.com/react-native-bottom-action-sheet/-/react-native-bottom-action-sheet-2.0.1.tgz#d2ab05f275e38519142e288acb093d8638c3a964"
4739 + integrity sha512-7IUgBjYhub0OR/3vq6FybjXIURBXaoI1oYZRhRzyO/6wfad3hjh9J5ZZjtoNaXgFZfXT/94JPS1fdaBBN5t35A==
4740 +
4741 +react-native-drawer@2.5.1:
4742 + version "2.5.1"
4743 + resolved "https://registry.yarnpkg.com/react-native-drawer/-/react-native-drawer-2.5.1.tgz#08b9314184f48c724f1b467f8859797369798654"
4744 + integrity sha512-cxcQNbSWy5sbGi7anSVp6EDr6JarOBMY9lbFOeLFeVYbONiudoqRKbgEsSDgSw3/LFCLvUXK5zdjXCOedeytxQ==
4745 + dependencies:
4746 + prop-types "^15.5.8"
4747 + tween-functions "^1.0.1"
4748 +
4749 +react-native-easy-grid@0.2.2:
4750 + version "0.2.2"
4751 + resolved "https://registry.yarnpkg.com/react-native-easy-grid/-/react-native-easy-grid-0.2.2.tgz#f0be33620be1ebe2d2295918eb58b0a27e8272ab"
4752 + integrity sha512-MlYrNIldnEMKn6TVatQN1P64GoVlwGIuz+8ncdfJ0Wq/xtzUkQwlil8Uksyp7MhKfENE09MQnGNcba6Mx3oSAA==
4753 + dependencies:
4754 + lodash "^4.17.15"
4755 +
4756 +react-native-fast-image@^8.1.5:
4757 + version "8.1.5"
4758 + resolved "https://registry.yarnpkg.com/react-native-fast-image/-/react-native-fast-image-8.1.5.tgz#0a6404c988dad68c98d26f91155d0a5293ba2ea5"
4759 + integrity sha512-DoAWGLeQ2hbllummrpXH9B38OgM0TFmNYCF34F90/hdHZirqUtYHzF4QDdb/NV7ebSijHmM3mpkzct8PXtcYyg==
4760 +
4553 react-native-gesture-handler@~1.6.0: 4761 react-native-gesture-handler@~1.6.0:
4554 version "1.6.1" 4762 version "1.6.1"
4555 resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.6.1.tgz#678e2dce250ed66e93af409759be22cd6375dd17" 4763 resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-1.6.1.tgz#678e2dce250ed66e93af409759be22cd6375dd17"
...@@ -4560,11 +4768,19 @@ react-native-gesture-handler@~1.6.0: ...@@ -4560,11 +4768,19 @@ react-native-gesture-handler@~1.6.0:
4560 invariant "^2.2.4" 4768 invariant "^2.2.4"
4561 prop-types "^15.7.2" 4769 prop-types "^15.7.2"
4562 4770
4563 -react-native-iphone-x-helper@^1.2.1: 4771 +react-native-iphone-x-helper@^1.0.3, react-native-iphone-x-helper@^1.2.1:
4564 version "1.2.1" 4772 version "1.2.1"
4565 resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772" 4773 resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.2.1.tgz#645e2ffbbb49e80844bb4cbbe34a126fda1e6772"
4566 integrity sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ== 4774 integrity sha512-/VbpIEp8tSNNHIvstuA3Swx610whci1Zpc9mqNkqn14DkMbw+ORviln2u0XyHG1kPvvwTNGZY6QpeFwxYaSdbQ==
4567 4775
4776 +react-native-keyboard-aware-scroll-view@0.9.1:
4777 + version "0.9.1"
4778 + resolved "https://registry.yarnpkg.com/react-native-keyboard-aware-scroll-view/-/react-native-keyboard-aware-scroll-view-0.9.1.tgz#9e54b565a5f19b30bed12221d48921781f7630af"
4779 + integrity sha512-tBZ8rmjELN0F6t5UBp5CW3NYmZXgVnJSzVCssv/OqG2t6kiB+OUTqxNvUP24K+HARX4H+XaW0aEJSFQkQCv6KA==
4780 + dependencies:
4781 + prop-types "^15.6.2"
4782 + react-native-iphone-x-helper "^1.0.3"
4783 +
4568 react-native-maps@0.26.1: 4784 react-native-maps@0.26.1:
4569 version "0.26.1" 4785 version "0.26.1"
4570 resolved "https://registry.yarnpkg.com/react-native-maps/-/react-native-maps-0.26.1.tgz#6ec316259b38d259c8974448d894bd7a23101da4" 4786 resolved "https://registry.yarnpkg.com/react-native-maps/-/react-native-maps-0.26.1.tgz#6ec316259b38d259c8974448d894bd7a23101da4"
...@@ -4589,6 +4805,15 @@ react-native-screens@~2.2.0: ...@@ -4589,6 +4805,15 @@ react-native-screens@~2.2.0:
4589 dependencies: 4805 dependencies:
4590 debounce "^1.2.0" 4806 debounce "^1.2.0"
4591 4807
4808 +react-native-vector-icons@^6.6.0:
4809 + version "6.6.0"
4810 + resolved "https://registry.yarnpkg.com/react-native-vector-icons/-/react-native-vector-icons-6.6.0.tgz#66cf004918eb05d90778d64bd42077c1800d481b"
4811 + integrity sha512-MImKVx8JEvVVBnaShMr7/yTX4Y062JZMupht1T+IEgbqBj4aQeQ1z2SH4VHWKNtWtppk4kz9gYyUiMWqx6tNSw==
4812 + dependencies:
4813 + lodash "^4.0.0"
4814 + prop-types "^15.6.2"
4815 + yargs "^13.2.2"
4816 +
4592 react-native-view-shot@3.1.2: 4817 react-native-view-shot@3.1.2:
4593 version "3.1.2" 4818 version "3.1.2"
4594 resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz#8c8e84c67a4bc8b603e697dbbd59dbc9b4f84825" 4819 resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz#8c8e84c67a4bc8b603e697dbbd59dbc9b4f84825"
...@@ -4665,6 +4890,14 @@ react-timer-mixin@^0.13.4: ...@@ -4665,6 +4890,14 @@ react-timer-mixin@^0.13.4:
4665 resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3" 4890 resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz#75a00c3c94c13abe29b43d63b4c65a88fc8264d3"
4666 integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q== 4891 integrity sha512-4+ow23tp/Tv7hBM5Az5/Be/eKKF7DIvJ09voz5LyHGQaqqz9WV8YMs31eFvcYQs7d451LSg7kDJV70XYN/Ug/Q==
4667 4892
4893 +react-tween-state@^0.1.5:
4894 + version "0.1.5"
4895 + resolved "https://registry.yarnpkg.com/react-tween-state/-/react-tween-state-0.1.5.tgz#e98b066551efb93cb92dd1be14995c2e3deae339"
4896 + integrity sha1-6YsGZVHvuTy5LdG+FJlcLj3q4zk=
4897 + dependencies:
4898 + raf "^3.1.0"
4899 + tween-functions "^1.0.1"
4900 +
4668 react@~16.9.0: 4901 react@~16.9.0:
4669 version "16.9.0" 4902 version "16.9.0"
4670 resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" 4903 resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa"
...@@ -4801,6 +5034,11 @@ require-main-filename@^1.0.1: ...@@ -4801,6 +5034,11 @@ require-main-filename@^1.0.1:
4801 resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 5034 resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
4802 integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= 5035 integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
4803 5036
5037 +require-main-filename@^2.0.0:
5038 + version "2.0.0"
5039 + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
5040 + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
5041 +
4804 requires-port@^1.0.0: 5042 requires-port@^1.0.0:
4805 version "1.0.0" 5043 version "1.0.0"
4806 resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 5044 resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
...@@ -5256,6 +5494,15 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: ...@@ -5256,6 +5494,15 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
5256 is-fullwidth-code-point "^2.0.0" 5494 is-fullwidth-code-point "^2.0.0"
5257 strip-ansi "^4.0.0" 5495 strip-ansi "^4.0.0"
5258 5496
5497 +string-width@^3.0.0, string-width@^3.1.0:
5498 + version "3.1.0"
5499 + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
5500 + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
5501 + dependencies:
5502 + emoji-regex "^7.0.1"
5503 + is-fullwidth-code-point "^2.0.0"
5504 + strip-ansi "^5.1.0"
5505 +
5259 string_decoder@~1.1.1: 5506 string_decoder@~1.1.1:
5260 version "1.1.1" 5507 version "1.1.1"
5261 resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 5508 resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
...@@ -5277,7 +5524,7 @@ strip-ansi@^4.0.0: ...@@ -5277,7 +5524,7 @@ strip-ansi@^4.0.0:
5277 dependencies: 5524 dependencies:
5278 ansi-regex "^3.0.0" 5525 ansi-regex "^3.0.0"
5279 5526
5280 -strip-ansi@^5.0.0, strip-ansi@^5.2.0: 5527 +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
5281 version "5.2.0" 5528 version "5.2.0"
5282 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 5529 resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
5283 integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 5530 integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
...@@ -5315,6 +5562,11 @@ sudo-prompt@^9.0.0: ...@@ -5315,6 +5562,11 @@ sudo-prompt@^9.0.0:
5315 resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" 5562 resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0"
5316 integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== 5563 integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==
5317 5564
5565 +supports-color@^2.0.0:
5566 + version "2.0.0"
5567 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
5568 + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
5569 +
5318 supports-color@^5.3.0, supports-color@^5.5.0: 5570 supports-color@^5.3.0, supports-color@^5.5.0:
5319 version "5.5.0" 5571 version "5.5.0"
5320 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 5572 resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
...@@ -5429,6 +5681,11 @@ toidentifier@1.0.0: ...@@ -5429,6 +5681,11 @@ toidentifier@1.0.0:
5429 resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 5681 resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
5430 integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 5682 integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
5431 5683
5684 +tween-functions@^1.0.1:
5685 + version "1.2.0"
5686 + resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff"
5687 + integrity sha1-GuOlDnxguz3vd06scHrLynO7w/8=
5688 +
5432 type-fest@^0.7.1: 5689 type-fest@^0.7.1:
5433 version "0.7.1" 5690 version "0.7.1"
5434 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" 5691 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
...@@ -5689,6 +5946,15 @@ wrap-ansi@^2.0.0: ...@@ -5689,6 +5946,15 @@ wrap-ansi@^2.0.0:
5689 string-width "^1.0.1" 5946 string-width "^1.0.1"
5690 strip-ansi "^3.0.1" 5947 strip-ansi "^3.0.1"
5691 5948
5949 +wrap-ansi@^5.1.0:
5950 + version "5.1.0"
5951 + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
5952 + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
5953 + dependencies:
5954 + ansi-styles "^3.2.0"
5955 + string-width "^3.0.0"
5956 + strip-ansi "^5.0.0"
5957 +
5692 wrappy@1: 5958 wrappy@1:
5693 version "1.0.2" 5959 version "1.0.2"
5694 resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 5960 resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
...@@ -5760,7 +6026,7 @@ y18n@^3.2.1: ...@@ -5760,7 +6026,7 @@ y18n@^3.2.1:
5760 resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 6026 resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
5761 integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= 6027 integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
5762 6028
5763 -"y18n@^3.2.1 || ^4.0.0": 6029 +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
5764 version "4.0.0" 6030 version "4.0.0"
5765 resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 6031 resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
5766 integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 6032 integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
...@@ -5778,6 +6044,14 @@ yargs-parser@^11.1.1: ...@@ -5778,6 +6044,14 @@ yargs-parser@^11.1.1:
5778 camelcase "^5.0.0" 6044 camelcase "^5.0.0"
5779 decamelize "^1.2.0" 6045 decamelize "^1.2.0"
5780 6046
6047 +yargs-parser@^13.1.2:
6048 + version "13.1.2"
6049 + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
6050 + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
6051 + dependencies:
6052 + camelcase "^5.0.0"
6053 + decamelize "^1.2.0"
6054 +
5781 yargs-parser@^7.0.0: 6055 yargs-parser@^7.0.0:
5782 version "7.0.0" 6056 version "7.0.0"
5783 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" 6057 resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
...@@ -5803,6 +6077,22 @@ yargs@^12.0.5: ...@@ -5803,6 +6077,22 @@ yargs@^12.0.5:
5803 y18n "^3.2.1 || ^4.0.0" 6077 y18n "^3.2.1 || ^4.0.0"
5804 yargs-parser "^11.1.1" 6078 yargs-parser "^11.1.1"
5805 6079
6080 +yargs@^13.2.2:
6081 + version "13.3.2"
6082 + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
6083 + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
6084 + dependencies:
6085 + cliui "^5.0.0"
6086 + find-up "^3.0.0"
6087 + get-caller-file "^2.0.1"
6088 + require-directory "^2.1.1"
6089 + require-main-filename "^2.0.0"
6090 + set-blocking "^2.0.0"
6091 + string-width "^3.0.0"
6092 + which-module "^2.0.0"
6093 + y18n "^4.0.0"
6094 + yargs-parser "^13.1.2"
6095 +
5806 yargs@^9.0.0: 6096 yargs@^9.0.0:
5807 version "9.0.1" 6097 version "9.0.1"
5808 resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" 6098 resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"
......
1 +node_modules/**/*
2 +.expo/*
3 +npm-debug.*
4 +*.jks
5 +*.p8
6 +*.p12
7 +*.key
8 +*.mobileprovision
9 +*.orig.*
10 +web-build/
11 +web-report/
12 +
13 +# macOS
14 +.DS_Store
15 +env.js
16 +.env
...@@ -37,6 +37,7 @@ const sessionMiddleware = expressSession({ ...@@ -37,6 +37,7 @@ const sessionMiddleware = expressSession({
37 37
38 const passportIndex = require('./passport/index'); 38 const passportIndex = require('./passport/index');
39 const userRouter = require('./routes/user'); 39 const userRouter = require('./routes/user');
40 +const apiRouter = require('./routes/api');
40 41
41 passportIndex(passport); 42 passportIndex(passport);
42 43
...@@ -74,6 +75,8 @@ app.use(passport.session()); // 패스포트 세션 작업 ...@@ -74,6 +75,8 @@ app.use(passport.session()); // 패스포트 세션 작업
74 75
75 app.use('/public', express.static(path.join(__dirname, 'open'))); // 모두에게 공개된 폴더 설정 76 app.use('/public', express.static(path.join(__dirname, 'open'))); // 모두에게 공개된 폴더 설정
76 app.use('/user', userRouter); 77 app.use('/user', userRouter);
78 +app.use('/api', apiRouter);
79 +
77 80
78 app.use(function (req, res, next) { 81 app.use(function (req, res, next) {
79 next(httpErrors(404)); 82 next(httpErrors(404));
...@@ -84,7 +87,7 @@ app.use(function (err, req, res, next) { ...@@ -84,7 +87,7 @@ app.use(function (err, req, res, next) {
84 res.locals.message = err.message; 87 res.locals.message = err.message;
85 res.locals.error = req.app.get('env') === 'development' ? err : {}; 88 res.locals.error = req.app.get('env') === 'development' ? err : {};
86 89
87 - //render the error page 90 + //render the error pagea
88 res.status(err.status || 500); 91 res.status(err.status || 500);
89 res.render('error'); 92 res.render('error');
90 }); 93 });
......
...@@ -376,7 +376,6 @@ ...@@ -376,7 +376,6 @@
376 "version": "1.5.0", 376 "version": "1.5.0",
377 "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", 377 "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
378 "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", 378 "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
379 - "optional": true,
380 "requires": { 379 "requires": {
381 "file-uri-to-path": "1.0.0" 380 "file-uri-to-path": "1.0.0"
382 } 381 }
...@@ -1507,8 +1506,7 @@ ...@@ -1507,8 +1506,7 @@
1507 "file-uri-to-path": { 1506 "file-uri-to-path": {
1508 "version": "1.0.0", 1507 "version": "1.0.0",
1509 "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 1508 "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
1510 - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", 1509 + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
1511 - "optional": true
1512 }, 1510 },
1513 "fill-range": { 1511 "fill-range": {
1514 "version": "4.0.0", 1512 "version": "4.0.0",
...@@ -1810,6 +1808,11 @@ ...@@ -1810,6 +1808,11 @@
1810 } 1808 }
1811 } 1809 }
1812 }, 1810 },
1811 + "hoek": {
1812 + "version": "4.2.1",
1813 + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
1814 + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
1815 + },
1813 "http-errors": { 1816 "http-errors": {
1814 "version": "1.6.3", 1817 "version": "1.6.3",
1815 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 1818 "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
...@@ -2110,6 +2113,14 @@ ...@@ -2110,6 +2113,14 @@
2110 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2113 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
2111 "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 2114 "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
2112 }, 2115 },
2116 + "isemail": {
2117 + "version": "3.2.0",
2118 + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz",
2119 + "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==",
2120 + "requires": {
2121 + "punycode": "2.x.x"
2122 + }
2123 + },
2113 "isexe": { 2124 "isexe": {
2114 "version": "2.0.0", 2125 "version": "2.0.0",
2115 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2126 "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
...@@ -2120,6 +2131,23 @@ ...@@ -2120,6 +2131,23 @@
2120 "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 2131 "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
2121 "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" 2132 "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
2122 }, 2133 },
2134 + "joi": {
2135 + "version": "13.7.0",
2136 + "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz",
2137 + "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==",
2138 + "requires": {
2139 + "hoek": "5.x.x",
2140 + "isemail": "3.x.x",
2141 + "topo": "3.x.x"
2142 + },
2143 + "dependencies": {
2144 + "hoek": {
2145 + "version": "5.0.4",
2146 + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz",
2147 + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w=="
2148 + }
2149 + }
2150 + },
2123 "js-beautify": { 2151 "js-beautify": {
2124 "version": "1.11.0", 2152 "version": "1.11.0",
2125 "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", 2153 "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz",
...@@ -2621,6 +2649,15 @@ ...@@ -2621,6 +2649,15 @@
2621 "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", 2649 "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
2622 "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" 2650 "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
2623 }, 2651 },
2652 + "node-expat": {
2653 + "version": "2.3.18",
2654 + "resolved": "https://registry.npmjs.org/node-expat/-/node-expat-2.3.18.tgz",
2655 + "integrity": "sha512-9dIrDxXePa9HSn+hhlAg1wXkvqOjxefEbMclGxk2cEnq/Y3U7Qo5HNNqeo3fQ4bVmLhcdt3YN1TZy7WMZy4MHw==",
2656 + "requires": {
2657 + "bindings": "^1.5.0",
2658 + "nan": "^2.13.2"
2659 + }
2660 + },
2624 "node-pre-gyp": { 2661 "node-pre-gyp": {
2625 "version": "0.14.0", 2662 "version": "0.14.0",
2626 "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", 2663 "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz",
...@@ -3130,6 +3167,11 @@ ...@@ -3130,6 +3167,11 @@
3130 "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", 3167 "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz",
3131 "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" 3168 "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA=="
3132 }, 3169 },
3170 + "punycode": {
3171 + "version": "2.1.1",
3172 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
3173 + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
3174 + },
3133 "qs": { 3175 "qs": {
3134 "version": "6.5.2", 3176 "version": "6.5.2",
3135 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 3177 "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
...@@ -4034,6 +4076,21 @@ ...@@ -4034,6 +4076,21 @@
4034 "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", 4076 "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
4035 "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" 4077 "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo="
4036 }, 4078 },
4079 + "topo": {
4080 + "version": "3.0.3",
4081 + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz",
4082 + "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==",
4083 + "requires": {
4084 + "hoek": "6.x.x"
4085 + },
4086 + "dependencies": {
4087 + "hoek": {
4088 + "version": "6.1.3",
4089 + "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.3.tgz",
4090 + "integrity": "sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ=="
4091 + }
4092 + }
4093 + },
4037 "toposort-class": { 4094 "toposort-class": {
4038 "version": "1.0.1", 4095 "version": "1.0.1",
4039 "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", 4096 "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
...@@ -4428,6 +4485,24 @@ ...@@ -4428,6 +4485,24 @@
4428 "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", 4485 "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
4429 "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" 4486 "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ="
4430 }, 4487 },
4488 + "xml-js": {
4489 + "version": "1.6.11",
4490 + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
4491 + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
4492 + "requires": {
4493 + "sax": "^1.2.4"
4494 + }
4495 + },
4496 + "xml2json": {
4497 + "version": "0.12.0",
4498 + "resolved": "https://registry.npmjs.org/xml2json/-/xml2json-0.12.0.tgz",
4499 + "integrity": "sha512-EPJHRWJnJUYbJlzR4pBhZODwWdi2IaYGtDdteJi0JpZ4OD31IplWALuit8r73dJuM4iHZdDVKY1tLqY2UICejg==",
4500 + "requires": {
4501 + "hoek": "^4.2.1",
4502 + "joi": "^13.1.2",
4503 + "node-expat": "^2.3.18"
4504 + }
4505 + },
4431 "xmlhttprequest": { 4506 "xmlhttprequest": {
4432 "version": "1.8.0", 4507 "version": "1.8.0",
4433 "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", 4508 "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
18 "express-session": "^1.16.2", 18 "express-session": "^1.16.2",
19 "fs": "0.0.1-security", 19 "fs": "0.0.1-security",
20 "http-errors": "~1.6.3", 20 "http-errors": "~1.6.3",
21 + "moment": "^2.26.0",
21 "mongoose": "^5.9.2", 22 "mongoose": "^5.9.2",
22 "morgan": "^1.9.1", 23 "morgan": "^1.9.1",
23 "multer": "^1.4.2", 24 "multer": "^1.4.2",
...@@ -31,6 +32,8 @@ ...@@ -31,6 +32,8 @@
31 "sequelize": "^5.21.5", 32 "sequelize": "^5.21.5",
32 "sequelize-cli": "^5.5.1", 33 "sequelize-cli": "^5.5.1",
33 "socket.io": "^2.3.0", 34 "socket.io": "^2.3.0",
35 + "xml-js": "^1.6.11",
36 + "xml2json": "^0.12.0",
34 "xmlhttprequest": "^1.8.0" 37 "xmlhttprequest": "^1.8.0"
35 } 38 }
36 } 39 }
......
1 +var express = require('express');
2 +const axios = require('axios');
3 +const convert = require('xml-js');
4 +var router = express.Router();
5 +let xmlParser = require('xml2json');
6 +var searchPubTransPath = require('../setPath');
7 +const moment = require('moment');
8 +
9 +/* GET home page. */
10 +router.get('/', function (req, res, next) {
11 + return res.json({title: 'Express'});
12 +});
13 +
14 +router.post('/setOptRoute', async (req, res, next) => {
15 + var {startLocation, endLocation, endTime, personalVelocity} = req.body;
16 + try {
17 + const startLocationX = startLocation.longitude;
18 + const startLocationY = startLocation.latitude;
19 + const endLocationX = endLocation.longitude;
20 + const endLocationY = endLocation.latitude;
21 + var avgSpeed = personalVelocity;
22 + if(!avgSpeed){
23 + avgSpeed = 60;
24 + }
25 + console.log('endTime 은? ', endTime, personalVelocity);
26 + const path = await searchPubTransPath(startLocationX, startLocationY, endLocationX, endLocationY, avgSpeed, endTime);
27 + const optRoute = path;
28 + console.log(path);
29 + return res.json({optRoute: optRoute});
30 + } catch (e) {
31 + console.error(e);
32 + // next(e);
33 + }
34 +});
35 +
36 +module.exports = router;
...\ No newline at end of file ...\ No newline at end of file
...@@ -4,7 +4,6 @@ const bcrypt = require('bcrypt'); ...@@ -4,7 +4,6 @@ const bcrypt = require('bcrypt');
4 const passport = require('passport'); 4 const passport = require('passport');
5 const {isLoggedIn, isNotLoggedIn} = require("./middleware"); 5 const {isLoggedIn, isNotLoggedIn} = require("./middleware");
6 const models = require('../models/index'); 6 const models = require('../models/index');
7 -const {searchPubTransPathAJAX} = require('../crawling');
8 7
9 router.get('/loadMe', isLoggedIn, (req, res, next) => { 8 router.get('/loadMe', isLoggedIn, (req, res, next) => {
10 // console.log('loadMe요청옴', req.user); 9 // console.log('loadMe요청옴', req.user);
......
1 +const axios = require('axios');
2 +const convert = require('xml-js');
3 +const moment = require('moment');
4 +
5 +const apiKey = '';
6 +
7 +const reverseGeocoding = async (_x, _y) => {
8 + try {
9 + var result = await axios.get("http://apis.vworld.kr/coord2jibun.do?x=" + _x + "&y=" + _y + "&output=xml&epsg=epsg:4326&apiKey=");
10 + result = convert.xml2js(result.data, {compact: true, spaces: 4});
11 + result = JSON.parse(JSON.stringify(result));
12 + var cityName = result.result.ADDR._cdata.split(" ")[0];
13 + return cityName
14 + } catch (e) {
15 + console.error(e);
16 + }
17 +
18 +};
19 +
20 +const subwayArrivalTime = async (stationID, wayCode) => {
21 + try {
22 + let today = new Date();
23 + let day = today.getDay();//요일
24 + let hours = today.getHours();//시
25 + let minutes = today.getMinutes();//분
26 + var result = await axios.get("https://api.odsay.com/v1/api/subwayTimeTable?lang=0&stationID=" + stationID + "&wayCode=" + wayCode + `&showExpressTime=1&apiKey=${apiKey}`);
27 + } catch (e) {
28 + console.error(e);
29 + }
30 +
31 +}
32 +//subwayArrivalTime(216,1);
33 +const seoulBusStationID = async (stationID) => {
34 + try {
35 + var result = await axios.get("https://api.odsay.com/v1/api/busStationInfo?lang=0&stationID=" + parseInt(stationID) + `&apiKey=${apiKey}`);
36 + result = result.data;
37 + var _stationID = result.result.arsID;
38 + _stationID = _stationID.replace("-", "");
39 + return _stationID;
40 + } catch (e) {
41 + console.error(e);
42 + }
43 +}
44 +
45 +const seoulBusArrivalTime = async (stationID, busNum) => {
46 + try {
47 +
48 + var _stationID = await seoulBusStationID(stationID);
49 +
50 + var result = await axios.get('http://ws.bus.go.kr/api/rest/stationinfo/getStationByUid?serviceKey' + _stationID);
51 + //console.log(res.data);
52 + result = convert.xml2js(result.data, {compact: true, spaces: 4});
53 + result = JSON.parse(JSON.stringify(result));
54 + //console.log(result.ServiceResult.msgBody.itemList);
55 + var arrList = result.ServiceResult.msgBody.itemList;
56 + //console.log(arrList);
57 + for (var i = 0; i < arrList.length; i++) {
58 + if (arrList[i].rtNm._text == busNum) {
59 + var msg = new Object();
60 + msg.msg1 = arrList[i].arrmsg1._text;
61 + msg.msg2 = arrList[i].arrmsg2._text;
62 + msg.timeInterval = 7;
63 + return msg;
64 + }
65 + }
66 + var msg = new Object();
67 + msg.msg1 = "도착예정 없음";
68 + msg.msg2 = "도착예정 없음";
69 + msg.timeInterval = 7;
70 + return msg;
71 +
72 +
73 + } catch (e) {
74 + console.error(e);
75 + }
76 +};
77 +
78 +const gyeonggiLocalData = async (stationID, busID) => {
79 + try {
80 + var result = await axios.get("https://api.odsay.com/v1/api/busStationInfo?lang=0&stationID=" + parseInt(stationID) + `&apiKey=${apiKey}`);
81 + result = result.data;
82 + var stationLocalId = result.result.localStationID;
83 + for (var i = 0; i < result.result.lane.length; i++) {
84 + if (result.result.lane[i].busID == busID) {
85 + busLocalId = result.result.lane[i].busLocalBlID;
86 +
87 + return [stationLocalId, busLocalId];
88 + }
89 + }
90 + } catch (e) {
91 + console.error(e);
92 + }
93 +};
94 +const gyeonggiBusArrivalTime = async (stationID, busID) => {
95 + try {
96 + var localData = await gyeonggiLocalData(stationID, busID);
97 + var stationLocalID = localData[0];
98 + var busLocalID = localData[1];
99 + var result = await axios.get('http://openapi.gbis.go.kr/ws/rest/busarrivalservice/station?&stationId=' + stationLocalID);
100 + result = convert.xml2js(result.data, {compact: true, spaces: 4});
101 + result = JSON.parse(JSON.stringify(result));
102 +
103 + var msg = new Object();
104 + if (result.response.msgHeader.resultMessage._text == "결과가 존재하지 않습니다.") {
105 + msg.msg1 = "도착 정보 없음";
106 + msg.msg2 = "도착 정보 없음";
107 + msg.timeInterval = 7;
108 + console.log(msg);
109 + return msg;
110 +
111 + } else if (result.response.msgHeader.resultMessage._text == '정상적으로 처리되었습니다.') {
112 +
113 + var arrList = result.response.msgBody.busArrivalList;
114 + for (var i = 0; i < arrList.length; i++) {
115 + var item = arrList[i];
116 + if (item.routeId._text == busLocalID) {
117 + msg.msg1 = item.predictTime1._text + "분 남음" + "(" + item.locationNo1._text + "개 역 전에 도착)";
118 + if (parseInt(item.predictTime2._text) > 0) {
119 + msg.msg2= msg.msg2 = item.predictTime2._text + "분 남음" + "(" + item.locationNo2._text + "개 역 전에 도착)";
120 + msg.timeInterval = (parseInt(item.predictTime2._text) - parseInt(item.predictTime1._text))/60;//초
121 + console.log("time interval,",msg.timeInterval);
122 + } else {
123 + msg.msg2="도착 정보 없음";
124 + msg.timeInterval = parseInt(item.predictTime1._text);
125 + }
126 + console.log(msg);
127 + return msg;//JSON타입 데이터
128 +
129 + }
130 + }
131 + msg.msg1 = "도착 정보 없음";
132 + msg.msg2 = "도착 정보 없음";
133 + msg.timeInterval = 7;
134 + console.log(msg);
135 + return msg;
136 +
137 + }
138 +
139 + } catch (e) {
140 + console.error(e);
141 + }
142 +}
143 +
144 +function printSubwayInfo(subPath) {
145 + console.log("-------지하철 이동---------");
146 + console.log("소요시간:", subPath.time);
147 + console.log("총 정거장수:", subPath.stationCnt);
148 + console.log("지하철 정보:");
149 + for (var i = 0; i < subPath.laneList.length; i++) {
150 + console.log(subPath.laneList[i].name);
151 + }
152 + console.log("출발역:", subPath.startName);
153 + console.log("도착역:", subPath.endName);
154 + console.log("station 리스트");
155 + console.log("------노선-------");
156 + for (var i = 0; i < subPath.stationList.length; i++) {
157 + console.log("|")
158 + console.log(subPath.stationList[i]);
159 + }
160 +
161 +
162 +}
163 +
164 +function printBusInfo(subPath) {
165 + console.log("--------버스 이동----------");
166 + console.log("소요시간:", subPath.time);
167 + console.log(subPath.stationCnt, "개 정류장 이동");
168 + for (var i = 0; i < subPath.arrivalInfo.length; i++) {
169 + console.log("버스 번호:", subPath.arrivalInfo[i].busNo);
170 + console.log(subPath.arrivalInfo[i].msg);
171 + console.log("-----------------------");
172 + }
173 + //console.log("대체버스:",subPath.busNumberList);
174 + console.log("출발역:", subPath.startName);
175 + console.log("도착역:", subPath.endName);
176 + console.log("-------노선--------");
177 + for (var i = 0; i < subPath.stationList.length; i++) {
178 + console.log("|");
179 + console.log(subPath.stationList[i].stationName);
180 + }
181 +
182 +
183 +}
184 +
185 +function printWalkInfo(subPath) {
186 + console.log("--------도보 이동----------");
187 + console.log("도보 이동 시간:", subPath.time);
188 + console.log("도보 이동 거리:", subPath.distance);
189 +
190 +
191 +}
192 +
193 +const searchPubTransPath = async (sx, sy, ex, ey, avgSpeed, endTime) => {
194 + //출발지점x좌표, 출발지점 y좌표, 도착지점 x좌표, 도착지점 y좌표, 보행자 평균 속도, 희망 도착시간(stringtype 2digit->hour, 2digit->min)
195 + try {
196 + var result = await axios.get("https://api.odsay.com/v1/api/searchPubTransPath?SX=" + sx + "&SY=" + sy + "&EX=" + ex + "&EY=" + ey + `&apiKey=${apiKey}`);
197 + result = result.data;
198 + var endTime = moment(endTime).format('HH:mm').split(':');
199 + console.log(endTime);
200 +
201 + var arrivalTime = parseInt(endTime[0]) * 60 + parseInt(endTime[1]);//endTime의 시각을 minute단위로 바꿈
202 + if (result.result.searchType == 0) {//도시내 이동
203 + var pathList = new Array();
204 + for (var i = 0; i < result.result.path.length; i++) {
205 + var path = result.result.path[i];
206 + console.log("========================================================================================");
207 + console.log("========================================================================================");
208 + console.log(i + 1, "번째 경로");
209 + var pathObj = new Object();
210 + if (path.pathType == 1) {
211 + pathObj.pathType = "지하철";
212 + } else if (path.pathType == 2) {
213 + pathObj.pathType = "버스";
214 + } else {
215 + pathObj.pathType = "지하철&버스";
216 + }
217 + pathObj.walkTime = 0;
218 + pathObj.info = path.info;
219 + pathObj.walkDistance = 0;
220 + pathObj.busTimeInterval = 0;
221 + console.log(pathObj.pathType);
222 + console.log("총소요시간:", pathObj.info.totalTime);
223 + console.log("비용:", pathObj.info.payment);
224 + console.log("출발역:", pathObj.info.firstStartStation);
225 + console.log("도착역:", pathObj.info.lastEndStation);
226 + console.log("도보:", pathObj.info.totalWalk, " 이동");
227 + console.log("총", pathObj.info.totalStationCount, "개 역 이동");
228 + console.log("버스:", pathObj.info.busStationCount, "개 역 이동");
229 + console.log("지하철:", pathObj.info.subwayStationCount, "개 역 이동");
230 + console.log("=======경로 상세정보========");
231 + pathObj.subPathList = new Array();
232 + //console.log(pathObj.info);
233 + for (var j = 0; j < path.subPath.length; j++) {
234 + var subPath = new Object();
235 + if (path.subPath[j].trafficType == 1) {//지하철 환승
236 + subPath.trafficType = "지하철";
237 + subPath.time = path.subPath[j].sectionTime;
238 + subPath.stationCnt = path.subPath[j].stationCount;
239 + subPath.laneList = path.subPath[j].lane;
240 + subPath.startName = path.subPath[j].startName;
241 + subPath.startID = path.subPath[j].startID;
242 + subPath.endName = path.subPath[j].endName;
243 + subPath.endID = path.subPath[j].endID;
244 + subPath.stationList = new Array();
245 + for (var k = 0; k < path.subPath[j].passStopList.stations.length; k++) {
246 + subPath.stationList.push(path.subPath[j].passStopList.stations[k].stationName);
247 + }
248 + printSubwayInfo(subPath);
249 + } else if (path.subPath[j].trafficType == 2) {//버스=>실시간 정보!
250 + subPath.trafficType = "버스";
251 + subPath.time = path.subPath[j].sectionTime;//총소요시간
252 + subPath.stationCnt = path.subPath[j].stationCount;
253 + subPath.startName = path.subPath[j].startName;
254 + subPath.startID = path.subPath[j].startID;
255 + subPath.endName = path.subPath[j].endName;
256 + subPath.endID = path.subPath[j].endID;
257 + subPath.stationList = path.subPath[j].passStopList.stations;
258 + subPath.arrivalInfo = new Array();
259 + var cityName = await reverseGeocoding(path.subPath[j].passStopList.stations[0].x, path.subPath[j].passStopList.stations[0].y);
260 + if (cityName == "서울특별시") {//stationID와 busNo로 도착 예정시간 추출
261 + //seoulBusArrivalTime(path.subPath[j].passStopList.stations[0].stationID,busNumberList);
262 + for (var a = 0; a < path.subPath[j].lane.length; a++) {
263 + var busArrivalInfoItem = new Object();
264 + var _msg = await seoulBusArrivalTime(subPath.startID, path.subPath[j].lane[a].busNo);
265 + busArrivalInfoItem.busID = path.subPath[j].lane[a].busID;
266 + busArrivalInfoItem.busNo = path.subPath[j].lane[a].busNo;
267 + busArrivalInfoItem.msg = _msg;
268 + subPath.arrivalInfo.push(busArrivalInfoItem);
269 + pathObj.busTimeInterval = _msg.timeInterval; //초->분단위로 바꿈
270 + console.log(_msg.timeInterval);
271 + if (a == 2)//버스 최대 3개까지만 출력시킴
272 + break;
273 + }
274 + printBusInfo(subPath);
275 + } else if (cityName == "경기도") {
276 + for (var a = 0; a < path.subPath[j].lane.length; a++) {
277 + var busArrivalInfoItem = new Object();
278 + var _msg = await gyeonggiBusArrivalTime(subPath.startID, path.subPath[j].lane[a].busID);
279 + busArrivalInfoItem.busID = path.subPath[j].lane[a].busID;
280 + busArrivalInfoItem.busNo = path.subPath[j].lane[a].busNo;
281 + busArrivalInfoItem.msg = _msg;
282 + subPath.arrivalInfo.push(busArrivalInfoItem);
283 + console.log("----------메시지메시지-----------", _msg);
284 + pathObj.busTimeInterval = _msg.timeInterval;
285 +
286 + if (a == 2)//버스 최대 3개까지만 출력
287 + break;
288 + }
289 + printBusInfo(subPath);
290 + } else {
291 + //서울, 경기를 제외한 지역은 실시간 정보 제공 불가
292 + printBusInfo(subPath);
293 + }
294 + } else {//도보이동
295 + pathObj.walkTime += path.subPath[j].sectionTime;
296 + pathObj.walkDistance += path.subPath[j].distance;
297 + subPath.trafficType = "도보";
298 + subPath.time = path.subPath[j].sectionTime;
299 + subPath.distance = path.subPath[j].distance;
300 + printWalkInfo(subPath);
301 + }
302 + pathObj.subPathList.push(subPath);
303 +
304 + }
305 +
306 + pathList.push(pathObj);
307 + var optTotalTime = pathObj.info.totalTime - pathObj.walkTime + pathObj.walkDistance / avgSpeed;//사용자의 보행속도를 고려한 이동시간
308 + console.log("arrrrrrrrrrr",arrivalTime)
309 + var departureTime1 = parseInt(arrivalTime - optTotalTime);
310 +
311 + if(departureTime1<0){
312 + departureTime1+=1440;
313 + }
314 + if(path.pathType==1){//지하철의 경우 시간간격 4분으로
315 + pathObj.busTimeInterval=4;
316 + }
317 + var departureTime2 = parseInt(arrivalTime - optTotalTime - pathObj.busTimeInterval);
318 + if(departureTime2<0){
319 + departureTime2+=1440;
320 + }
321 + console.log(pathObj.busTimeInterval);
322 + console.log("dp1",departureTime1);
323 + console.log("dp2",departureTime2);
324 +
325 + console.log("pathType",path.pathType);
326 + console.log("departure time 1",departureTime1);
327 + console.log("departure time 2",departureTime2);
328 + var hour1 = departureTime1 / 60;
329 + var min1 = departureTime1 % 60;
330 + var hour2 = departureTime2 / 60;
331 + var min2 =departureTime2 % 60;
332 + pathObj.info.hour1=parseInt(hour1).toString();
333 + pathObj.info.min1=parseInt(min1).toString();
334 + pathObj.info.hour2=parseInt(hour2).toString();
335 + pathObj.info.min2=parseInt(min2).toString();
336 + console.log(pathObj.info.hour1,"시 ",pathObj.info.min1,"분");
337 + console.log(pathObj.info.hour2,"시 ",pathObj.info.min2,"분");
338 + if (i == 2)//경로 3개까지만 출력
339 + break;
340 +
341 +
342 + }
343 + return {pathList};
344 + } else if (result.result.searchType == 1) {//도시간 이동
345 + var path = new Object();
346 + path.trainList = new Array();
347 + for (var j = 0; j < result.result.trainRequest.count; j++) {
348 + var train = new Object();
349 + train = result.result.trainRequest.OBJ[j];
350 + path.trainList.push(train);
351 + if (j == 2)
352 + break;
353 + }
354 + path.exBusList = new Array();
355 + for (var j = 0; j < result.result.exBusRequest.count; j++) {
356 + var exBus = new Object();
357 + exBus = reuslt.result.exBusRequest.OBJ[j];
358 + path.exBusList.push(exBus);
359 + if (j == 2)
360 + break;
361 + }
362 + path.outBusList = new Array();
363 + for (var j = 0; j < result.result.outBusRequest.count; j++) {
364 + var outBus = new Object();
365 + outBus = result.result.outBusRequest.OBJ[j];
366 + path.outBusList.push(outBus);
367 + if (j == 2)
368 + break;
369 + }
370 + return path;
371 +
372 + }
373 +
374 + } catch (e) {
375 + console.error(e);
376 + }
377 +};
378 +searchPubTransPath(126.999451,37.266670, 126.986990,37.541386,60,"00:10");
379 +module.exports = searchPubTransPath;
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
No preview for this file type