-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsagas.js
125 lines (108 loc) · 3.77 KB
/
sagas.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import {delay} from 'redux-saga';
import {put, call, select, take, takeLatest, takeEvery, all} from 'redux-saga/effects';
import {searchEndpoint, bizEndpoint, suggestEndpoint} from '../index'
import * as actions from './actions/Actions'
export const getDataState = (state) => state.businessList;
function getEndpointData(endpoint, params) {
return new Promise(function (resolve, reject) {
fetch(endpoint, params).then((response) => {
return response.json();
}).then((respJson) => {
resolve(respJson);
});
});
}
function* requestAutoSuggests(action) {
let tempTerms = [], tempCats = [], tempBizs = [];
let i;
for (i = 0; i < 5; i++) {
tempTerms[i] = {name: '------'};
tempCats[i] = {name: '------'};
tempBizs[i] = {name: '------'};
}
if (action.data !== '') {
const fetchParams = {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: action.data,
}),
method: 'POST'
};
let suggestions = yield call(getEndpointData, suggestEndpoint, fetchParams);
if (suggestions.terms) {
for (i = 0; i < suggestions.terms.length; i++) {
tempTerms[i] = {name: suggestions.terms[i].text};
}
}
if (suggestions.categories) {
for (i = 0; i < suggestions.categories.length; i++) {
tempCats[i] = {name: suggestions.categories[i].title};
}
}
if (suggestions.businesses) {
for (i = 0; i < suggestions.businesses.length; i++) {
tempBizs[i] = {name: suggestions.businesses[i].name};
}
}
}
yield put(actions.responseAutoSuggests({
categories: tempCats,
businesses: tempBizs,
terms: tempTerms,
}));
yield call(requestBusinessList, action);
}
function* requestBusinessList(action) {
let tempBizList = [];
let i;
for (i = 0; i < 5; i++) {
tempBizList[i] = {name: '------'};
}
if (action.data !== '') {
const fetchParams = {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
text: action.data,
}),
method: 'POST'
};
let bizData = yield call(getEndpointData, searchEndpoint, fetchParams);
if (bizData.businesses) {
for (i = 0; i < bizData.businesses.length; i++) {
tempBizList[i] = {
name: bizData.businesses[i].name,
id: bizData.businesses[i].id
};
}
}
}
yield put(actions.responseBusinessList(tempBizList));
}
function* requestBusinessInfo(action) {
// get the state so we can find the businessId from the array
let dataState = yield select(getDataState);
console.log("Business: " + dataState[action.data].name + " id: " + dataState[action.data].id);
const fetchParams = {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
businessId: dataState[action.data].id,
}),
method: 'POST'
};
let bizDetails = yield call(getEndpointData, bizEndpoint, fetchParams);
yield put(actions.responseBusinessInfo(bizDetails));
}
export default function* rootSaga() {
yield takeLatest(actions.requestAutoSuggests().type, requestAutoSuggests);
yield takeLatest(actions.requestBusinessList().type, requestBusinessList);
yield takeLatest(actions.requestBusinessInfo().type, requestBusinessInfo);
}