You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

weekList.js 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /* eslint-disable no-unused-expressions */
  2. /* eslint-disable eqeqeq */
  3. /* eslint-disable no-restricted-syntax */
  4. /* eslint-disable guard-for-in */
  5. import axios from 'axios';
  6. import _ from 'lodash';
  7. export default {
  8. namespaced: true,
  9. state: {
  10. weeks: [],
  11. status: undefined,
  12. filter: {
  13. status: undefined,
  14. region: undefined,
  15. resort: undefined,
  16. bedrooms: undefined,
  17. date: undefined,
  18. minPrice: undefined,
  19. maxPrice: undefined,
  20. keyword: undefined,
  21. },
  22. prevFilter: undefined,
  23. difFilter: undefined,
  24. },
  25. mutations: {
  26. onLoading(state) {
  27. state.status = 'Loading...';
  28. },
  29. onError(state) {
  30. state.status = 'Error occurred getting data.';
  31. },
  32. onClearFilter(state, filter) {
  33. state.filter[filter] = undefined;
  34. },
  35. setWeeks(state, weeks) {
  36. state.weeks = weeks;
  37. state.status = '';
  38. },
  39. addWeek(state, week) {
  40. state.weeks.push(week);
  41. },
  42. applyResort(state, resort) {
  43. state.filter.resort = resort;
  44. },
  45. },
  46. getters: {
  47. filteredWeeks: (state) => {
  48. let weekList = state.weeks;
  49. const {
  50. filter,
  51. } = state;
  52. if (filter) {
  53. if (filter.keyword) {
  54. const list = [];
  55. for (const i in weekList) {
  56. const item = weekList[i];
  57. for (const r in item) {
  58. const innerItem = item[r];
  59. if (
  60. innerItem
  61. && JSON.stringify(innerItem)
  62. .toLowerCase()
  63. .includes(filter.keyword.toLowerCase())
  64. ) {
  65. list.push(item);
  66. break;
  67. }
  68. }
  69. }
  70. weekList = list;
  71. }
  72. if (filter.region) {
  73. weekList = _.filter(
  74. weekList,
  75. x => x.region && x.region.regionCode === filter.region.regionCode,
  76. );
  77. }
  78. if (filter.resort) {
  79. weekList = _.filter(
  80. weekList,
  81. x => x.resort.resortCode && x.resort.resortCode === filter.resort.resortCode,
  82. );
  83. }
  84. if (filter.bedrooms) {
  85. weekList = _.filter(weekList, x => x.bedrooms && x.bedrooms == filter.bedrooms);
  86. }
  87. if (filter.date) {
  88. const minDate = new Date(filter.date);
  89. minDate.setDate(minDate.getDate() - 7);
  90. const maxDate = new Date(filter.date);
  91. maxDate.setDate(maxDate.getDate() + 7);
  92. weekList = _.filter(
  93. weekList,
  94. x => new Date(x.arrivalDate)
  95. && new Date(x.departureDate)
  96. && new Date(x.arrivalDate) >= minDate
  97. && new Date(x.arrivalDate) <= maxDate,
  98. );
  99. }
  100. if (filter.minPrice && filter.minPrice !== 0) {
  101. weekList = _.filter(weekList, x => x.sellPrice && x.sellPrice >= filter.minPrice);
  102. }
  103. if (filter.maxPrice && filter.maxPrice !== 0) {
  104. weekList = _.filter(weekList, x => x.sellPrice && x.sellPrice <= filter.maxPrice);
  105. }
  106. }
  107. return _.sortBy((_.sortBy(weekList, 'arrivalDate')), 'resort.resortName');
  108. },
  109. getRegions(state, getters, rootState, rootGetters) {
  110. return rootGetters['timeshare/getRegionCode']('KK');
  111. },
  112. weekById(state) {
  113. return (resortCode, unitNumber) => {
  114. const w = state.weeks.find(week => week.resort !== undefined && week.resort.resortCode
  115. === resortCode && week.unitNumber === unitNumber);
  116. console.log(resortCode, unitNumber);
  117. if (w) {
  118. return w;
  119. }
  120. };
  121. },
  122. },
  123. actions: {
  124. applyResortFilter({
  125. commit,
  126. }, resortCode) {
  127. commit('applyResort', {
  128. resortCode,
  129. });
  130. },
  131. getWeeks({
  132. commit,
  133. rootGetters,
  134. }) {
  135. commit('onLoading');
  136. axios
  137. .get('/api/timeshareweek')
  138. .then((result) => {
  139. const arr2 = result.data.filter(x => x.region !== null);
  140. const arr3 = result.data.filter(x => x.region === null);
  141. for (const item in arr3) {
  142. const myItem = arr3[item];
  143. if (myItem !== undefined) {
  144. const code = myItem.resort.resortCode;
  145. myItem.region = {
  146. regionName: rootGetters['timeshare/getRegionCode'](code),
  147. };
  148. myItem.resort = {
  149. resortName: rootGetters['timeshare/getResortName'](code),
  150. resortCode: code,
  151. };
  152. arr2.push(myItem);
  153. }
  154. }
  155. commit('setWeeks', arr2);
  156. })
  157. .catch(console.error);
  158. },
  159. clearFilter({
  160. commit,
  161. }, filter) {
  162. commit('onClearFilter', filter);
  163. },
  164. },
  165. };