Showing
11 changed files
with
126 additions
and
81 deletions
| ... | @@ -2,8 +2,8 @@ | ... | @@ -2,8 +2,8 @@ |
| 2 | "devToolsPort": 19002, | 2 | "devToolsPort": 19002, |
| 3 | "expoServerPort": 19000, | 3 | "expoServerPort": 19000, |
| 4 | "packagerPort": 19001, | 4 | "packagerPort": 19001, |
| 5 | - "packagerPid": 14964, | 5 | + "packagerPid": 24884, |
| 6 | "expoServerNgrokUrl": "https://s4-47j.anonymous.searchguide.exp.direct", | 6 | "expoServerNgrokUrl": "https://s4-47j.anonymous.searchguide.exp.direct", |
| 7 | "packagerNgrokUrl": "https://packager.s4-47j.anonymous.searchguide.exp.direct", | 7 | "packagerNgrokUrl": "https://packager.s4-47j.anonymous.searchguide.exp.direct", |
| 8 | - "ngrokPid": 3788 | 8 | + "ngrokPid": 25980 |
| 9 | } | 9 | } | ... | ... |
searchGuide/assets/test.json
0 → 100644
This diff is collapsed. Click to expand it.
| 1 | import React from 'react'; | 1 | import React from 'react'; |
| 2 | import AppTabContainer from '../AppTabContainer/AppTabContainer'; | 2 | import AppTabContainer from '../AppTabContainer/AppTabContainer'; |
| 3 | -import Loading from '../Loading/Loading'; | ||
| 4 | import { connect } from 'react-redux'; | 3 | import { connect } from 'react-redux'; |
| 4 | +import Loading from '../Loading/Loading'; | ||
| 5 | 5 | ||
| 6 | const Main = ({ isLoading}) => { | 6 | const Main = ({ isLoading}) => { |
| 7 | if ( isLoading ) { | 7 | if ( isLoading ) { |
| ... | @@ -19,11 +19,10 @@ const Main = ({ isLoading}) => { | ... | @@ -19,11 +19,10 @@ const Main = ({ isLoading}) => { |
| 19 | } | 19 | } |
| 20 | } | 20 | } |
| 21 | 21 | ||
| 22 | - | ||
| 23 | const MainContainer = ({isLoading}) => { | 22 | const MainContainer = ({isLoading}) => { |
| 24 | return(<Main isLoading={isLoading} />) | 23 | return(<Main isLoading={isLoading} />) |
| 25 | } | 24 | } |
| 26 | 25 | ||
| 27 | -const mapStateToProps = (state) => ({isLoading : state.loading.isLoading}) | ||
| 28 | - | ||
| 29 | -export default connect(mapStateToProps)(MainContainer); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 26 | +export default connect( | ||
| 27 | + ({search})=>({isLoading:search.isLoading}) | ||
| 28 | +)(MainContainer); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -2,9 +2,10 @@ import React from 'react'; | ... | @@ -2,9 +2,10 @@ import React from 'react'; |
| 2 | import {View,Alert} from 'react-native'; | 2 | import {View,Alert} from 'react-native'; |
| 3 | import { Searchbar } from 'react-native-paper'; | 3 | import { Searchbar } from 'react-native-paper'; |
| 4 | import { connect } from 'react-redux'; | 4 | import { connect } from 'react-redux'; |
| 5 | -import {toggle} from '../../reducers/loading'; | 5 | +import {change, submit} from '../../reducers/search'; |
| 6 | 6 | ||
| 7 | -const voiceRecognition=()=>{ | 7 | + |
| 8 | +const voiceRecognition = () => { | ||
| 8 | Alert.alert( | 9 | Alert.alert( |
| 9 | '음성 인식', | 10 | '음성 인식', |
| 10 | '아직 구현 못함', | 11 | '아직 구현 못함', |
| ... | @@ -12,58 +13,35 @@ const voiceRecognition=()=>{ | ... | @@ -12,58 +13,35 @@ const voiceRecognition=()=>{ |
| 12 | {text: '확인', onPress: () => {}}, | 13 | {text: '확인', onPress: () => {}}, |
| 13 | ], | 14 | ], |
| 14 | ) | 15 | ) |
| 15 | -} | 16 | +}; |
| 16 | 17 | ||
| 17 | -class SearchBar extends React.Component { | 18 | +const SearchBar = ({ query, change, submit }) => { |
| 18 | - constructor(props){ | 19 | + return( |
| 19 | - super(props); | 20 | + <> |
| 20 | - this.state = { | 21 | + <View> |
| 21 | - query: '', | 22 | + <Searchbar |
| 22 | - }; | 23 | + placeholder="검색할 질문을 입력하세요." |
| 23 | - } | 24 | + onChangeText={change} |
| 24 | - | 25 | + value={query} |
| 25 | - queryChange=(query)=>{ | 26 | + icon='microphone' |
| 26 | - this.setState({ query: query }); | 27 | + onIconPress={voiceRecognition} |
| 27 | - } | 28 | + onSubmitEditing={submit} |
| 29 | + /> | ||
| 30 | + </View> | ||
| 31 | + </> | ||
| 32 | + ) | ||
| 33 | +}; | ||
| 28 | 34 | ||
| 29 | - submit=()=>{ | ||
| 30 | - this.props.toggleLoading(); | ||
| 31 | - setTimeout(()=>{this.props.toggleLoading()},1000); | ||
| 32 | - this.setState({query:''}); | ||
| 33 | - } | ||
| 34 | 35 | ||
| 35 | - voiceRecognition=()=>{ | 36 | +const SearchBarContainer = ({ query, change, submit }) => { |
| 36 | - Alert.alert( | 37 | + return(<SearchBar query={query} change={change} submit={submit} />) |
| 37 | - '음성 인식', | 38 | +}; |
| 38 | - '아직 구현 못함', | ||
| 39 | - [ | ||
| 40 | - {text: '확인', onPress: () => {}}, | ||
| 41 | - ], | ||
| 42 | - ) | ||
| 43 | - } | ||
| 44 | 39 | ||
| 45 | - render(){ | 40 | +export default connect( |
| 46 | - return( | 41 | + ({search})=> ({ |
| 47 | - <> | 42 | + query: search.query |
| 48 | - <View> | 43 | + }), |
| 49 | - <Searchbar | 44 | + { |
| 50 | - placeholder="검색할 질문을 입력하세요." | 45 | + change,submit |
| 51 | - onChangeText={this.queryChange} | ||
| 52 | - value={this.state.query} | ||
| 53 | - icon='microphone' | ||
| 54 | - onIconPress={voiceRecognition} | ||
| 55 | - onSubmitEditing={this.submit} | ||
| 56 | - /> | ||
| 57 | - </View> | ||
| 58 | - </> | ||
| 59 | - ) | ||
| 60 | } | 46 | } |
| 61 | -} | ||
| 62 | - | ||
| 63 | -const SearchBarContainer = ({toggle}) => { | ||
| 64 | - return(<SearchBar toggleLoading={toggle} />) | ||
| 65 | -} | ||
| 66 | - | ||
| 67 | -const mapDispatchToProps = (dispatch) => ({toggle : ()=>{ dispatch( toggle() )}}); | ||
| 68 | - | ||
| 69 | -export default connect(null,mapDispatchToProps)(SearchBarContainer); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 47 | +)(SearchBarContainer); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | const axios = require('axios') | 1 | const axios = require('axios') |
| 2 | const filter = require('./filter') | 2 | const filter = require('./filter') |
| 3 | 3 | ||
| 4 | -export const SendToApi = async(searchdata) => { | 4 | +export const sendSearch = async(searchText) => { |
| 5 | - console.log(searchdata) | 5 | + console.log(searchText) |
| 6 | return new Promise((resolve,reject) => { | 6 | return new Promise((resolve,reject) => { |
| 7 | let isBlank_reg = "/\s\g" | 7 | let isBlank_reg = "/\s\g" |
| 8 | - if(searchdata=== "" || searchdata.length > 30 ){ | 8 | + if(searchText=== "" || searchText.length > 30 ){ |
| 9 | resolve(JSON.stringify({ "return_code" : -1, "error_code": "검색 단어를 확인해 주세요!" })); | 9 | resolve(JSON.stringify({ "return_code" : -1, "error_code": "검색 단어를 확인해 주세요!" })); |
| 10 | } else{ | 10 | } else{ |
| 11 | axios( | 11 | axios( |
| ... | @@ -17,7 +17,7 @@ export const SendToApi = async(searchdata) => { | ... | @@ -17,7 +17,7 @@ export const SendToApi = async(searchdata) => { |
| 17 | url: 'http://1.201.142.118:80/api/cliConnection', | 17 | url: 'http://1.201.142.118:80/api/cliConnection', |
| 18 | data: { | 18 | data: { |
| 19 | data:{ | 19 | data:{ |
| 20 | - text: searchdata.replace(/\s{1,}/g,' ') | 20 | + text: searchText.replace(/\s{1,}/g,' ') |
| 21 | } | 21 | } |
| 22 | }, | 22 | }, |
| 23 | method: "POST", | 23 | method: "POST", | ... | ... |
searchGuide/lib/readTest.js
0 → 100644
| ... | @@ -1603,6 +1603,22 @@ | ... | @@ -1603,6 +1603,22 @@ |
| 1603 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", | 1603 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", |
| 1604 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" | 1604 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" |
| 1605 | }, | 1605 | }, |
| 1606 | + "axios": { | ||
| 1607 | + "version": "0.19.0", | ||
| 1608 | + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", | ||
| 1609 | + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", | ||
| 1610 | + "requires": { | ||
| 1611 | + "follow-redirects": "1.5.10", | ||
| 1612 | + "is-buffer": "^2.0.2" | ||
| 1613 | + }, | ||
| 1614 | + "dependencies": { | ||
| 1615 | + "is-buffer": { | ||
| 1616 | + "version": "2.0.4", | ||
| 1617 | + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", | ||
| 1618 | + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" | ||
| 1619 | + } | ||
| 1620 | + } | ||
| 1621 | + }, | ||
| 1606 | "babel-plugin-dotenv": { | 1622 | "babel-plugin-dotenv": { |
| 1607 | "version": "0.1.1", | 1623 | "version": "0.1.1", |
| 1608 | "resolved": "https://registry.npmjs.org/babel-plugin-dotenv/-/babel-plugin-dotenv-0.1.1.tgz", | 1624 | "resolved": "https://registry.npmjs.org/babel-plugin-dotenv/-/babel-plugin-dotenv-0.1.1.tgz", |
| ... | @@ -2834,6 +2850,29 @@ | ... | @@ -2834,6 +2850,29 @@ |
| 2834 | "locate-path": "^2.0.0" | 2850 | "locate-path": "^2.0.0" |
| 2835 | } | 2851 | } |
| 2836 | }, | 2852 | }, |
| 2853 | + "follow-redirects": { | ||
| 2854 | + "version": "1.5.10", | ||
| 2855 | + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", | ||
| 2856 | + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", | ||
| 2857 | + "requires": { | ||
| 2858 | + "debug": "=3.1.0" | ||
| 2859 | + }, | ||
| 2860 | + "dependencies": { | ||
| 2861 | + "debug": { | ||
| 2862 | + "version": "3.1.0", | ||
| 2863 | + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", | ||
| 2864 | + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", | ||
| 2865 | + "requires": { | ||
| 2866 | + "ms": "2.0.0" | ||
| 2867 | + } | ||
| 2868 | + }, | ||
| 2869 | + "ms": { | ||
| 2870 | + "version": "2.0.0", | ||
| 2871 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | ||
| 2872 | + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | ||
| 2873 | + } | ||
| 2874 | + } | ||
| 2875 | + }, | ||
| 2837 | "fontfaceobserver": { | 2876 | "fontfaceobserver": { |
| 2838 | "version": "2.1.0", | 2877 | "version": "2.1.0", |
| 2839 | "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", | 2878 | "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz", |
| ... | @@ -5778,6 +5817,11 @@ | ... | @@ -5778,6 +5817,11 @@ |
| 5778 | "symbol-observable": "^1.2.0" | 5817 | "symbol-observable": "^1.2.0" |
| 5779 | } | 5818 | } |
| 5780 | }, | 5819 | }, |
| 5820 | + "redux-thunk": { | ||
| 5821 | + "version": "2.3.0", | ||
| 5822 | + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", | ||
| 5823 | + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" | ||
| 5824 | + }, | ||
| 5781 | "regenerate": { | 5825 | "regenerate": { |
| 5782 | "version": "1.4.0", | 5826 | "version": "1.4.0", |
| 5783 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", | 5827 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", | ... | ... |
| ... | @@ -9,6 +9,7 @@ | ... | @@ -9,6 +9,7 @@ |
| 9 | }, | 9 | }, |
| 10 | "dependencies": { | 10 | "dependencies": { |
| 11 | "1.3.0": "^1.3.0", | 11 | "1.3.0": "^1.3.0", |
| 12 | + "axios": "^0.19.0", | ||
| 12 | "expo": "^35.0.0", | 13 | "expo": "^35.0.0", |
| 13 | "expo-permissions": "~7.0.0", | 14 | "expo-permissions": "~7.0.0", |
| 14 | "expo-speech": "~7.0.0", | 15 | "expo-speech": "~7.0.0", |
| ... | @@ -27,7 +28,8 @@ | ... | @@ -27,7 +28,8 @@ |
| 27 | "react-navigation-tabs": "^2.5.6", | 28 | "react-navigation-tabs": "^2.5.6", |
| 28 | "react-redux": "^7.1.3", | 29 | "react-redux": "^7.1.3", |
| 29 | "react-thunk": "^1.0.0", | 30 | "react-thunk": "^1.0.0", |
| 30 | - "redux": "^4.0.4" | 31 | + "redux": "^4.0.4", |
| 32 | + "redux-thunk": "^2.3.0" | ||
| 31 | }, | 33 | }, |
| 32 | "devDependencies": { | 34 | "devDependencies": { |
| 33 | "babel-preset-expo": "^7.1.0", | 35 | "babel-preset-expo": "^7.1.0", | ... | ... |
| 1 | -import { createStore, combineReducers } from 'redux'; | 1 | +import { createStore, combineReducers, applyMiddleware } from 'redux'; |
| 2 | -import loading from './loading' | 2 | +import ReduxThunk from 'redux-thunk' |
| 3 | +import search from './search'; | ||
| 3 | 4 | ||
| 4 | -const store = combineReducers({ loading }); | 5 | +const store = combineReducers({ search }); |
| 5 | 6 | ||
| 6 | -export default createStore(store) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 7 | +export default createStore(store, applyMiddleware(ReduxThunk) ); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| 1 | +import {sendSearch} from '../lib/api' | ||
| 2 | +import {readTest} from '../lib/readTest'; | ||
| 3 | + | ||
| 1 | const CHANGE = 'search/CHANGE'; | 4 | const CHANGE = 'search/CHANGE'; |
| 2 | -const SUBMIT = 'search/SUBMIT'; | 5 | +const SUCCESS = 'search/SUCCESS'; |
| 6 | +const FAILURE = 'search/FAILURE'; | ||
| 7 | +const START = 'search/START'; | ||
| 3 | 8 | ||
| 4 | export const change = (text) => ({ | 9 | export const change = (text) => ({ |
| 5 | type: CHANGE, | 10 | type: CHANGE, |
| 6 | text, | 11 | text, |
| 7 | }) | 12 | }) |
| 8 | 13 | ||
| 9 | -export const submit = (text) => (dispatch) => ({ | 14 | +export const submit = (text) => async (dispatch) => { |
| 10 | - type: CHANGE, | 15 | + dispatch( {type:START}); |
| 11 | - text, | 16 | + try{ |
| 12 | -}) | 17 | + /*const response = await sendSearch(text);*/ |
| 18 | + const response = await readTest(); // 테스트용입니당~ | ||
| 19 | + setTimeout(()=>dispatch( { type:SUCCESS, result:response }),1000); // 셋타임아웃도 테스트용 | ||
| 20 | + } | ||
| 21 | + catch(err){ | ||
| 22 | + dispatch({ type:FAILURE, result:response }) | ||
| 23 | + } | ||
| 24 | +} | ||
| 25 | + | ||
| 13 | 26 | ||
| 14 | const initialState = { | 27 | const initialState = { |
| 15 | query: '', | 28 | query: '', |
| 16 | searchResult:{}, | 29 | searchResult:{}, |
| 30 | + isLoading: false, | ||
| 17 | }; | 31 | }; |
| 18 | 32 | ||
| 19 | export default ToggleLoading = (state = initialState, action) => { | 33 | export default ToggleLoading = (state = initialState, action) => { |
| 20 | switch (action.type) { | 34 | switch (action.type) { |
| 21 | case CHANGE: | 35 | case CHANGE: |
| 22 | return {...state, query: action.text}; | 36 | return {...state, query: action.text}; |
| 23 | - case SUBMIT: | 37 | + case SUCCESS: |
| 24 | - return {...state, query: ''} | 38 | + return {...state, isLoading:false,searchResult: action.response}; |
| 39 | + case FAILURE: | ||
| 40 | + return {...state, isLoading:false}; | ||
| 41 | + case START: | ||
| 42 | + return {...state, query:'',isLoading:true} | ||
| 25 | default: | 43 | default: |
| 26 | return state; | 44 | return state; |
| 27 | } | 45 | } |
| 28 | } | 46 | } |
| 29 | 47 | ||
| 30 | -submit=()=>{ | ||
| 31 | - this.props.toggleLoading(); | ||
| 32 | - setTimeout(()=>{this.props.toggleLoading()},1000); | ||
| 33 | - this.setState({query:''}); | ||
| 34 | -} | ||
| 35 | 48 | ... | ... |
-
Please register or login to post a comment