page-pages.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. // force the page to re-load if the back button was used
  2. $(window).bind("pageshow", function(event) {
  3. if (event.originalEvent.persisted) {
  4. window.location.reload();
  5. }
  6. });
  7. var app = new Vue({
  8. el: "#app",
  9. data: {
  10. userId: -1,
  11. drafts: [],
  12. amendments: [],
  13. jobs: [],
  14. page_search_results: null
  15. },
  16. mounted: function() {
  17. this.userId = $("#userId").val();
  18. this.getAllPages();
  19. },
  20. methods: {
  21. getAllPages: function() {
  22. $.ajax({
  23. url: "/api/page/draft/pending/",
  24. method: "GET",
  25. success: function(data) {
  26. app.drafts = data;
  27. },
  28. error: toast.defaultAjaxError
  29. });
  30. $.ajax({
  31. url: "/api/page/amendment/pending/",
  32. method: "GET",
  33. success: function(data) {
  34. app.amendments = data;
  35. },
  36. error: toast.defaultAjaxError
  37. });
  38. },
  39. takeJob: function(pageState, pageId, index) {
  40. let formData = new FormData();
  41. formData.append("pageId", pageId);
  42. $.ajax({
  43. url: "/api/approve/job/" + pageState + "/",
  44. method: "POST",
  45. data: formData,
  46. cache: false,
  47. contentType: false,
  48. processData: false,
  49. success: function(data) {
  50. app.getAllPages();
  51. toast.success(null, "You are now reviewing the selected page.", false);
  52. },
  53. error: toast.defaultAjaxError
  54. });
  55. },
  56. approveDraft: function(pageId, index) {
  57. let formData = new FormData();
  58. formData.append("pageId", pageId);
  59. $.ajax({
  60. url: "/api/page/approve/draft/accept/",
  61. method: "POST",
  62. data: formData,
  63. cache: false,
  64. contentType: false,
  65. processData: false,
  66. success: function(data) {
  67. app.drafts.splice(index, 1);
  68. toast.success(null, "Draft approved successfully.", false);
  69. },
  70. error: toast.defaultAjaxError
  71. });
  72. },
  73. rejectDraft: function(pageId, index) {
  74. $("#RejectDraftModal")
  75. .modal("destroy")
  76. .modal({
  77. closeable: false,
  78. onApprove: function() {
  79. let formData = new FormData();
  80. formData.append("pageId", pageId);
  81. formData.append("reason", $("#RejectDraftReason").val());
  82. $.ajax({
  83. url: "/api/reject/draft/",
  84. method: "POST",
  85. data: formData,
  86. cache: false,
  87. contentType: false,
  88. processData: false,
  89. success: function(data) {
  90. app.drafts[index].reviewState = "Rejected";
  91. toast.info(null, "Draft rejected successfully.", false);
  92. },
  93. error: toast.defaultAjaxError
  94. });
  95. }
  96. })
  97. .modal("show");
  98. },
  99. deleteDraft: function(pageId, index) {
  100. $("#DeleteDraftModal")
  101. .modal("destroy")
  102. .modal({
  103. closeable: false,
  104. onApprove: function() {
  105. let formData = new FormData();
  106. formData.append("pageId", pageId);
  107. // formData.append("reason", $("#RejectDraftReason").val());
  108. $.ajax({
  109. url: "/api/page/draft/",
  110. method: "DELETE",
  111. data: formData,
  112. cache: false,
  113. contentType: false,
  114. processData: false,
  115. success: function(data) {
  116. app.drafts.splice(index, 1);
  117. toast.info(null, "Draft deleted successfully.", false);
  118. },
  119. error: toast.defaultAjaxError
  120. });
  121. }
  122. })
  123. .modal("show");
  124. },
  125. approveAmendment: function(pageId, index) {
  126. let formData = new FormData();
  127. formData.append("pageId", pageId);
  128. $.ajax({
  129. url: "/api/page/approve/amendment/accept/",
  130. method: "POST",
  131. data: formData,
  132. cache: false,
  133. contentType: false,
  134. processData: false,
  135. success: function(data) {
  136. app.amendments.splice(index, 1);
  137. toast.success(null, "Amendment approved successfully.", false);
  138. },
  139. error: toast.defaultAjaxError
  140. });
  141. },
  142. rejectAmendment: function(pageId, index) {
  143. $("#rejectAmendmentModal")
  144. .modal("destroy")
  145. .modal({
  146. closeable: false,
  147. onApprove: function() {
  148. let formData = new FormData();
  149. formData.append("pageId", pageId);
  150. formData.append("reason", $("#RejectAmendmentReason").val());
  151. $.ajax({
  152. url: "/api/reject/amendment/",
  153. method: "POST",
  154. data: formData,
  155. cache: false,
  156. contentType: false,
  157. processData: false,
  158. success: function(data) {
  159. app.amendments[index].reviewState = "Rejected";
  160. toast.info(null, "Amendment rejected successfully.", false);
  161. },
  162. error: toast.defaultAjaxError
  163. });
  164. }
  165. })
  166. .modal("show");
  167. },
  168. deleteAmendment: function(pageId, index) {
  169. $("#DeleteAmendmentModal")
  170. .modal("destroy")
  171. .modal({
  172. closeable: false,
  173. onApprove: function() {
  174. let formData = new FormData();
  175. formData.append("pageId", pageId);
  176. // formData.append("reason", $("#DeleteAmendmentReason").val());
  177. $.ajax({
  178. url: "/api/page/amendment/",
  179. method: "DELETE",
  180. data: formData,
  181. cache: false,
  182. contentType: false,
  183. processData: false,
  184. success: function(data) {
  185. app.amendments.splice(index, 1);
  186. toast.info(null, "Amendment deleted successfully.", false);
  187. },
  188. error: toast.defaultAjaxError
  189. });
  190. }
  191. })
  192. .modal("show");
  193. },
  194. searchPages: function() {
  195. let searchTerm = $("#searchPagesInput").val();
  196. if (searchTerm.length > 0) {
  197. let searchUrl = "/api/page/search/title/" + searchTerm;
  198. $.ajax({
  199. url: searchUrl,
  200. method: "GET",
  201. success: function(data) {
  202. app.page_search_results = data;
  203. },
  204. error: toast.defaultAjaxError
  205. });
  206. }
  207. },
  208. deleteLivePage: function(pageId, index) {
  209. $("#deleteLivePageModal")
  210. .modal("destroy")
  211. .modal({
  212. closeable: false,
  213. onApprove: function() {
  214. let formData = new FormData();
  215. formData.append("pageId", pageId);
  216. $.ajax({
  217. url: "/api/page/",
  218. method: "DELETE",
  219. data: formData,
  220. cache: false,
  221. contentType: false,
  222. processData: false,
  223. success: function(data) {
  224. app.page_search_results.splice(index, 1);
  225. toast.info(null, "Live Store Page deleted successfully.", false);
  226. },
  227. error: toast.defaultAjaxError
  228. });
  229. }
  230. })
  231. .modal("show");
  232. },
  233. millisToDate: function(millis) {
  234. return moment(millis).format("dddd Do MMMM YYYY - HH:mm");
  235. }
  236. },
  237. updated: function() {
  238. $(".tooltip")
  239. .popup("destroy")
  240. .popup();
  241. }
  242. });
  243. $("#menu-pages").addClass("active");