PageRenderTime 41ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/src/actions/helpfeed.js

https://bitbucket.org/ravindra1103/sample-react
JavaScript | 266 lines | 250 code | 16 blank | 0 comment | 32 complexity | 5f70572e9d8b1b0f6365ad165984bc24 MD5 | raw file
  1. import 'rxjs/Rx';
  2. import {
  3. getHelpFeedAPI,
  4. getFaqFeedbyCodeAPI,
  5. getTutorialFeedByCodeAPI,
  6. filterSearch,
  7. filterByCategoryAndSearch
  8. } from '../api/helpfeed';
  9. import {
  10. getBrandingAPI
  11. } from '../api/branding';
  12. import * as ApplicationConstants from '../utils/ApplicationConstants';
  13. import store from '../store';
  14. import { convertCodetoSymbol, parseAndSortRssFeed } from '../utils/parse';
  15. import { isValidToken } from '../utils/token';
  16. export const GET_HELPFEED_INIT = 'GET_HELPFEED_INIT';
  17. export const GET_HELPFEED_SUCCESS = 'GET_HELPFEED_SUCCESS';
  18. export const GET_HELPFEED_FAILED = 'GET_HELPFEED_FAILED';
  19. export const GET_DATA_BY_SELECTED_MENU_INIT = 'GET_DATA_BY_SELECTED_MENU_INIT';
  20. export const GET_DATA_BY_SELECTED_MENU_SUCCESS = 'GET_DATA_BY_SELECTED_MENU_SUCCESS';
  21. export const GET_DATA_BY_SELECTED_MENU_FAILED = 'GET_DATA_BY_SELECTED_MENU_FAILED';
  22. export const GET_DATA_BY_SELECTED_MENU_AND_SEARCH_INIT = 'GET_DATA_BY_SELECTED_MENU_AND_SEARCH_INIT';
  23. export const GET_DATA_BY_SELECTED_MENU_AND_SEARCH_SUCCESS = 'GET_DATA_BY_SELECTED_MENU_AND_SEARCH_SUCCESS';
  24. export const GET_DATA_BY_SELECTED_MENU_AND_SEARCH_FAILED = 'GET_DATA_BY_SELECTED_MENU_AND_SEARCH_FAILED';
  25. export const GET_DATA_BY_SELECTED_CATEGORY = 'GET_DATA_BY_SELECTED_CATEGORY';
  26. export const GET_HELPFEED_CATEGORY_INIT = 'GET_HELPFEED_CATEGORY_INIT';
  27. export const GET_HELPFEED_CATEGORY_SUCCESS = 'GET_HELPFEED_CATEGORY_SUCCESS';
  28. export const GET_HELPFEED_CATEGORY_FAILED = 'GET_HELPFEED_CATEGORY_FAILED';
  29. export const GET_HELPFEED_CATEGORY_AND_SEARCH_INIT = 'GET_HELPFEED_CATEGORY_AND_SEARCH_INIT';
  30. export const GET_HELPFEED_CATEGORY_AND_SEARCH_SUCCESS = 'GET_HELPFEED_CATEGORY_AND_SEARCH_SUCCESS';
  31. export const GET_HELPFEED_CATEGORY_AND_SEARCH_FAILED = 'GET_HELPFEED_CATEGORY_AND_SEARCH_FAILED';
  32. export const GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_INIT = 'GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_INIT';
  33. export const GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_SUCCESS = 'GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_SUCCESS';
  34. export const GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_FAILED = 'GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_FAILED';
  35. export const GET_HELPFEED_SEARCH_INIT = 'GET_HELPFEED_SEARCH_INIT';
  36. export const GET_HELPFEED_SEARCH_SUCCESS = 'GET_HELPFEED_SEARCH_SUCCESS';
  37. export const GET_HELPFEED_SEARCH_FAILED = 'GET_HELPFEED_SEARCH_FAILED';
  38. export const GET_HELPFEED_SEARCH_CANCELLED = 'GET_HELPFEED_SEARCH_CANCELLED';
  39. export const GET_HELPFEED_SEARCH_CACHED_DATA_INIT = 'GET_HELPFEED_SEARCH_CACHED_DATA_INIT';
  40. export const GET_HELPFEED_SEARCH_CACHED_DATA = 'GET_HELPFEED_SEARCH_CACHED_DATA';
  41. export const CLEAR_SEARCHTERM_INIT = 'CLEAR_SEARCHTERM_INIT';
  42. export const CLEAR_SEARCHTERM_SUCCESS = 'CLEAR_SEARCHTERM_SUCCESS';
  43. export const CLEAR_SEARCHTERM_FAILED = 'CLEAR_SEARCHTERM_FAILED';
  44. export const CHANGE_SELECTED_MENU = 'CHANGE_SELECTED_MENU';
  45. export const UPDATE_CATEGORIES = 'UPDATE_CATEGORIES';
  46. export const GET_BRANDING_DETAILS_INIT = 'GET_BRANDING_DETAILS_INIT';
  47. export const GET_BRANDING_DETAILS_SUCCESS = 'GET_BRANDING_DETAILS_SUCCESS';
  48. export const GET_BRANDING_DETAILS_FAILED = 'GET_BRANDING_DETAILS_FAILED';
  49. export function getHelpFeed(token, props) {
  50. if (token && isValidToken(token)) {
  51. return function (dispatch) {
  52. dispatch({ type: GET_BRANDING_DETAILS_INIT, token });
  53. getBrandingAPI(token)
  54. .then(response => dispatch({ type: GET_BRANDING_DETAILS_SUCCESS, response }))
  55. .then(() => {
  56. let categories = store.getState().helpfeed.brandingDetails.appList.map(item => item.shortName);
  57. if (categories.find(item => item.toLowerCase() !== ApplicationConstants.PROFILE_CATEGORY_NAME.toLowerCase()))
  58. categories.push(ApplicationConstants.PROFILE_CATEGORY_NAME);
  59. categories.sort();
  60. return dispatch({ type: UPDATE_CATEGORIES, categories });
  61. })
  62. .then(() => {
  63. let apiToCall, selectedMenu = store.getState().helpfeed.selectedMenu, selectedCategory = store.getState().helpfeed.selectedCategory;
  64. if (selectedMenu === ApplicationConstants.TUTORIAL_MENU_ITEM_NAME) {
  65. apiToCall = getTutorialFeedByCodeAPI;
  66. } else if (selectedMenu === ApplicationConstants.FAQS_MENU_ITEM_NAME) {
  67. apiToCall = getFaqFeedbyCodeAPI;
  68. }
  69. if (selectedCategory === ApplicationConstants.ALL_CATEGORY) {
  70. apiToCall = getHelpFeedAPI;
  71. }
  72. dispatch({ type: GET_DATA_BY_SELECTED_CATEGORY, selectedCategory });
  73. dispatch({ type: GET_HELPFEED_CATEGORY_INIT });
  74. if (props && !props.category) {
  75. apiToCall(selectedCategory)
  76. .then(response => dispatch({ type: GET_HELPFEED_CATEGORY_SUCCESS, response }))
  77. .catch(error => dispatch({ type: GET_HELPFEED_CATEGORY_FAILED, error }));
  78. }
  79. })
  80. .catch(error => dispatch({ type: GET_BRANDING_DETAILS_FAILED, error }));
  81. };
  82. } else {
  83. return function (dispatch) {
  84. dispatch({ type: GET_HELPFEED_INIT });
  85. getHelpFeedAPI()
  86. .then(response => dispatch({ type: GET_HELPFEED_SUCCESS, response }))
  87. .then(() => {
  88. let categories = Object.keys(store.getState().helpfeed.helpFeed);
  89. if (categories && categories.length > 0) {
  90. categories = [ApplicationConstants.ALL_CATEGORY, ...categories];
  91. }
  92. return dispatch({ type: UPDATE_CATEGORIES, categories })
  93. })
  94. .catch(error => dispatch({ type: GET_HELPFEED_FAILED, error }));
  95. };
  96. }
  97. }
  98. export function getHelpFeedBySelectedMenu(selectedMenu) {
  99. return function (dispatch) {
  100. dispatch({ type: GET_DATA_BY_SELECTED_MENU_INIT });
  101. filterSearch(store.getState().helpfeed.rawData, selectedMenu)
  102. .then(response => dispatch({ type: GET_DATA_BY_SELECTED_MENU_SUCCESS, response }))
  103. .then(() => {
  104. let categories = [];
  105. if (store.getState().helpfeed.brandingDetails) {
  106. categories = store.getState().helpfeed.brandingDetails.appList.map(item => item.shortName);
  107. } else {
  108. categories = Object.keys(store.getState().helpfeed.helpFeed);
  109. if (categories && categories.length > 0) {
  110. categories = [ApplicationConstants.ALL_CATEGORY, ...categories];
  111. }
  112. }
  113. return dispatch({ type: UPDATE_CATEGORIES, categories })
  114. })
  115. .catch(error => dispatch({ type: GET_DATA_BY_SELECTED_MENU_FAILED, error }));
  116. };
  117. }
  118. export function getHelpFeedBySelectedMenuAndSearch(selectedMenu, searchTerm) {
  119. return function (dispatch) {
  120. dispatch({ type: GET_DATA_BY_SELECTED_MENU_AND_SEARCH_INIT });
  121. filterByCategoryAndSearch(store.getState().helpfeed.rawData, selectedMenu, searchTerm)
  122. .then(response => dispatch({ type: GET_DATA_BY_SELECTED_MENU_AND_SEARCH_SUCCESS, response }))
  123. .catch(error => dispatch({ type: GET_DATA_BY_SELECTED_MENU_AND_SEARCH_FAILED, error }));
  124. };
  125. }
  126. export function changeSelectedMenu(selectedMenu) {
  127. return function (dispatch) {
  128. dispatch({ type: CHANGE_SELECTED_MENU, selectedMenu });
  129. };
  130. }
  131. export function getHelpFeedBySelectedCategory(selectedMenu, selectedCategory) {
  132. let apiToCall;
  133. if (selectedMenu === ApplicationConstants.TUTORIAL_MENU_ITEM_NAME) {
  134. apiToCall = getTutorialFeedByCodeAPI;
  135. } else if (selectedMenu === ApplicationConstants.FAQS_MENU_ITEM_NAME) {
  136. apiToCall = getFaqFeedbyCodeAPI;
  137. }
  138. if (selectedCategory === ApplicationConstants.ALL_CATEGORY) {
  139. apiToCall = getHelpFeedAPI;
  140. }
  141. return function (dispatch) {
  142. dispatch({ type: GET_DATA_BY_SELECTED_CATEGORY, selectedCategory });
  143. dispatch({ type: GET_HELPFEED_CATEGORY_INIT });
  144. apiToCall(selectedCategory)
  145. .then(response => dispatch({ type: GET_HELPFEED_CATEGORY_SUCCESS, response }))
  146. .catch(error => dispatch({ type: GET_HELPFEED_CATEGORY_FAILED, error }));
  147. }
  148. }
  149. export function getHelpFeedByNewCategory(selectedMenu, selectedCategory) {
  150. let apiToCall;
  151. return function (dispatch) {
  152. apiToCall = getTutorialFeedByCodeAPI;
  153. apiToCall(selectedCategory)
  154. .then(response => {
  155. let resLen = parseAndSortRssFeed(response, selectedMenu);
  156. if (resLen.categories.length <= 0) {
  157. apiToCall = getFaqFeedbyCodeAPI;
  158. apiToCall(selectedCategory)
  159. .then(response => {
  160. let resFaqLen = parseAndSortRssFeed(response, selectedMenu);
  161. if (resFaqLen.categories.length <= 0) {
  162. let categories = store.getState().helpfeed.categories;
  163. dispatch(getHelpFeedBySelectedCategory(selectedMenu, categories[0]))
  164. }
  165. else {
  166. store.getState().helpfeed.categories.push(resFaqLen.categories[0]);
  167. let selectedCategory = resFaqLen.categories[0]
  168. dispatch({ type: GET_DATA_BY_SELECTED_CATEGORY, selectedCategory });
  169. dispatch({ type: GET_HELPFEED_CATEGORY_SUCCESS, response })
  170. }
  171. })
  172. }
  173. else {
  174. store.getState().helpfeed.categories.push(resLen.categories[0]);
  175. let selectedCategory = resLen.categories[0]
  176. dispatch({ type: GET_DATA_BY_SELECTED_CATEGORY, selectedCategory });
  177. dispatch({ type: GET_HELPFEED_CATEGORY_SUCCESS, response })
  178. }
  179. })
  180. .catch(error => dispatch({ type: GET_HELPFEED_CATEGORY_FAILED, error }));
  181. }
  182. }
  183. export function getHelpFeedBySelectedCategoryAndSearch(selectedMenu, selectedCategory) {
  184. let apiToCall;
  185. if (selectedMenu === ApplicationConstants.TUTORIAL_MENU_ITEM_NAME) {
  186. apiToCall = getTutorialFeedByCodeAPI;
  187. } else if (selectedMenu === ApplicationConstants.FAQS_MENU_ITEM_NAME) {
  188. apiToCall = getFaqFeedbyCodeAPI;
  189. }
  190. if (selectedCategory === ApplicationConstants.ALL_CATEGORY) {
  191. apiToCall = getHelpFeedAPI;
  192. }
  193. return function (dispatch) {
  194. dispatch({ type: GET_DATA_BY_SELECTED_CATEGORY, selectedCategory });
  195. dispatch({ type: GET_HELPFEED_CATEGORY_AND_SEARCH_INIT });
  196. apiToCall(selectedCategory)
  197. .then(response => dispatch({ type: GET_HELPFEED_CATEGORY_AND_SEARCH_SUCCESS, response }))
  198. .catch(error => dispatch({ type: GET_HELPFEED_CATEGORY_AND_SEARCH_FAILED, error }));
  199. };
  200. }
  201. export function getHelpFeedBySelectedCategoryAndClearSearch(selectedMenu, selectedCategory) {
  202. let apiToCall;
  203. if (selectedMenu === ApplicationConstants.TUTORIAL_MENU_ITEM_NAME) {
  204. apiToCall = getTutorialFeedByCodeAPI;
  205. } else if (selectedMenu === ApplicationConstants.FAQS_MENU_ITEM_NAME) {
  206. apiToCall = getFaqFeedbyCodeAPI;
  207. }
  208. if (selectedCategory === ApplicationConstants.ALL_CATEGORY) {
  209. apiToCall = getHelpFeedAPI;
  210. }
  211. return function (dispatch) {
  212. dispatch({ type: GET_DATA_BY_SELECTED_CATEGORY, selectedCategory });
  213. dispatch({ type: GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_INIT });
  214. apiToCall(selectedCategory)
  215. .then(response => dispatch({ type: GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_SUCCESS, response }))
  216. .catch(error => dispatch({ type: GET_HELPFEED_CATEGORY_AND_SEARCH_CLEAR_FAILED, error }));
  217. };
  218. }
  219. export function getHelpFeedSearch(searchTerm) {
  220. searchTerm = convertCodetoSymbol(searchTerm);
  221. return {
  222. type: GET_HELPFEED_SEARCH_INIT, searchTerm
  223. };
  224. }
  225. export function getHelpFeedSearchSuccess(response) {
  226. response = response ? response.response : {};
  227. return {
  228. type: GET_HELPFEED_SEARCH_SUCCESS,
  229. response
  230. };
  231. }
  232. export function getHelpFeedSearchCancel() {
  233. return {
  234. type: GET_HELPFEED_SEARCH_CANCELLED
  235. };
  236. }
  237. export function getHelpFeedSearchCached(searchTerm) {
  238. return function (dispatch) {
  239. dispatch({ type: GET_HELPFEED_SEARCH_CACHED_DATA_INIT });
  240. dispatch({ type: GET_HELPFEED_SEARCH_CACHED_DATA, searchTerm });
  241. };
  242. }
  243. export function clearSearchTerm() {
  244. return function (dispatch) {
  245. dispatch({ type: CLEAR_SEARCHTERM_INIT });
  246. filterSearch(store.getState().helpfeed.rawData, store.getState().helpfeed.selectedMenu)
  247. .then(response => dispatch({ type: CLEAR_SEARCHTERM_SUCCESS, response }))
  248. .catch(error => dispatch({ type: CLEAR_SEARCHTERM_FAILED, error }));
  249. };
  250. }