user.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. import { REST } from 'vuejs/api/rest-axios'
  2. // import { JSONAPI } from 'vuejs/api/json-axios'
  3. import { MA } from 'vuejs/api/ma-axios'
  4. import qs from 'querystring-es3'
  5. export default {
  6. namespaced: true,
  7. // initial state
  8. state: {
  9. uid: null,
  10. // username: '',
  11. mail: '',
  12. csrf_token: null,
  13. logout_token: null,
  14. isloggedin: false,
  15. isAdmin: false,
  16. isAdherent: false,
  17. canSearch: false,
  18. roles: [],
  19. flagcolls: false,
  20. openedCollid: null
  21. },
  22. // getters
  23. getters: {},
  24. // mutations
  25. mutations: {
  26. SetCsrftoken (state, token) {
  27. console.log('SetCsrftoken', token)
  28. state.csrf_token = token
  29. },
  30. setToken (state, data) {
  31. state.uid = data.current_user.uid
  32. // state.username = data.username;
  33. state.mail = data.current_user.mail
  34. state.csrf_token = data.csrf_token
  35. state.isloggedin = true
  36. state.logout_token = data.logout_token
  37. },
  38. setUid (state, uid) {
  39. state.uid = uid
  40. state.isloggedin = true
  41. },
  42. setUser (state, data) {
  43. state.mail = data.mail[0].value
  44. state.uuid = data.uuid[0].value
  45. },
  46. setRoles (state, roles) {
  47. console.log('User setRoles', roles)
  48. state.roles = []
  49. for (let i = 0; i < roles.length; i++) {
  50. state.roles.push(roles[i].target_id)
  51. }
  52. // check if admin
  53. if (
  54. state.roles.indexOf('admin') !== -1 ||
  55. state.roles.indexOf('root') !== -1
  56. ) {
  57. // console.log('is admin');
  58. state.isAdmin = true
  59. }
  60. // check if has access to search
  61. if (state.roles.indexOf('adherent') !== -1) {
  62. // console.log('is admin');
  63. state.canSearch = true
  64. state.isAdherent = true
  65. }
  66. },
  67. setLoggedOut (state) {
  68. console.log('setLoggedOut state', state)
  69. state.uid = null
  70. state.mail = ''
  71. state.csrf_token = null
  72. state.isloggedin = false
  73. state.logout_token = null
  74. if (state.isAdmin) {
  75. // TODO: what if on a page where login is needed (as commerce checkout and cart)
  76. window.location.reload(true)
  77. }
  78. state.asAdmin = false
  79. state.canSearch = false
  80. },
  81. setFlagColls (state, flagcolls) {
  82. console.log('User setFlagColls', flagcolls)
  83. state.flagcolls = flagcolls
  84. },
  85. openFlagColl (state, collid) {
  86. state.openedCollid = collid
  87. },
  88. closeFlagColl (state) {
  89. state.openedCollid = null
  90. },
  91. setLoadedCollItems (state, data) {
  92. console.log('setLoadedCollItems', data)
  93. // if no data, we are just calling the mutation to trigger the component update
  94. if (data) {
  95. state.flagcolls[data.collid].loadedItems = data.items
  96. }
  97. }
  98. },
  99. // actions
  100. actions: {
  101. userRegister ({ dispatch, commit, state }, credentials) {
  102. return new Promise((resolve) => {
  103. REST.get('/session/token').then(({ token }) => {
  104. commit('SetCsrftoken', token)
  105. REST.post('/user/register?_format=json', credentials, {
  106. 'X-CSRF-Token': state.csrftoken
  107. })
  108. .then(({ data }) => {
  109. console.log('user REST registered', data)
  110. dispatch('userLogin', credentials).then(() => {
  111. resolve()
  112. })
  113. })
  114. .catch(error => {
  115. console.warn('Issue with register', error)
  116. Promise.reject(error)
  117. })
  118. })
  119. })
  120. },
  121. userLogin ({ dispatch, state }, credentials) {
  122. return new Promise((resolve, reject) => {
  123. dispatch('getToken', credentials).then(() => {
  124. dispatch('getUser').then(userdata => {
  125. console.log('User Loggedin')
  126. if (state.isAdmin) {
  127. window.location.reload(true)
  128. }
  129. resolve()
  130. })
  131. })
  132. })
  133. },
  134. getToken ({ dispatch, commit, state }, credentials) {
  135. return REST.post('/user/login?_format=json', credentials)
  136. .then(({ data }) => {
  137. console.log('user REST getToken data', data)
  138. commit('setToken', data)
  139. })
  140. .catch(error => {
  141. console.warn('Issue with getToken', error)
  142. Promise.reject(error)
  143. })
  144. },
  145. getUser ({ dispatch, commit, state }) {
  146. return new Promise((resolve, reject) => {
  147. REST.get('/session/token').then(({ data }) => {
  148. console.log('csrftoken', data)
  149. commit('SetCsrftoken', data)
  150. console.log('state.csrf_token', state.csrf_token)
  151. const params = {
  152. token: state.csrf_token
  153. }
  154. REST.get(`/user/${state.uid}?_format=json`, params)
  155. .then(({ data }) => {
  156. console.log('user REST getUser data', data)
  157. console.log('roles', data.roles)
  158. commit('setUser', data)
  159. if (data.roles) {
  160. commit('setRoles', data.roles)
  161. }
  162. dispatch('getUserFlagColls')
  163. resolve()
  164. })
  165. .catch(error => {
  166. console.warn('Issue with getUser', error)
  167. Promise.reject(error)
  168. })
  169. })
  170. })
  171. },
  172. getUserFlagColls ({ dispatch, commit, state }) {
  173. // flags
  174. // REST.get('/flagging_collection/1?_format=json')
  175. // .then(( data ) => {
  176. // console.log('TEST FLAG REST data', data)
  177. // })
  178. // .catch(error => {
  179. // console.warn('Issue USER TEST FLAG REST', error)
  180. // Promise.reject(error)
  181. // })
  182. return MA.get('materio_flag/user_flagging_collections')
  183. .then(({ data }) => {
  184. console.log('user MA getFlags data', data)
  185. commit('setFlagColls', data)
  186. })
  187. .catch(error => {
  188. console.warn('Issue USER MA getFlags', error)
  189. Promise.reject(error)
  190. })
  191. },
  192. // https://drupal.stackexchange.com/questions/248539/cant-get-flagging-api-to-accept-post-request
  193. createFlagColl ({ dispatch, commit, state }, new_collection_name) {
  194. console.log('user createFlagColl', new_collection_name)
  195. return new Promise((resolve, reject) => {
  196. const params = {
  197. name: new_collection_name
  198. }
  199. MA.post('materio_flag/create_user_flagging_collection', params)
  200. .then(({ data }) => {
  201. console.log('user MA createFlagColl data', data)
  202. if (data.status) {
  203. dispatch('getUserFlagColls').then(() => {
  204. resolve()
  205. })
  206. }
  207. })
  208. .catch(error => {
  209. console.warn('Issue USER MA createFlag', error)
  210. reject(error)
  211. })
  212. })
  213. },
  214. deleteFlagColl ({ dispatch, commit, state }, flagcollid) {
  215. console.log('user deleteFlagColl', flagcollid)
  216. return new Promise((resolve, reject) => {
  217. const params = {
  218. flagcollid: flagcollid
  219. }
  220. MA.post('materio_flag/delete_user_flagging_collection', params)
  221. .then(({ data }) => {
  222. console.log('user MA deleteFlagColl data', data)
  223. dispatch('getUserFlagColls').then(() => {
  224. resolve()
  225. })
  226. })
  227. .catch(error => {
  228. console.warn('Issue USER MA createFlag', error)
  229. reject(error)
  230. })
  231. })
  232. },
  233. flag ({ dispatch, commit, state }, args) {
  234. console.log('user flag', args.uuid, args.collid)
  235. return new Promise((resolve, reject) => {
  236. const params = {
  237. flagid: state.flagcolls[args.collid].flag_id,
  238. uuid: args.uuid,
  239. flagcollid: args.collid
  240. }
  241. return MA.post('materio_flag/flag', params)
  242. .then(({ data }) => {
  243. console.log('user MA flag', data)
  244. dispatch('getUserFlagColls').then(() => {
  245. resolve()
  246. })
  247. })
  248. .catch(error => {
  249. console.warn('Issue USER MA flag', error)
  250. })
  251. })
  252. },
  253. unFlag ({ dispatch, commit, state }, args) {
  254. console.log('user unFlag', args.uuid, args.collid)
  255. return new Promise((resolve, reject) => {
  256. const params = {
  257. flagid: state.flagcolls[args.collid].flag_id,
  258. uuid: args.uuid,
  259. flagcollid: args.collid
  260. }
  261. return MA.post('materio_flag/unflag', params)
  262. .then(({ data }) => {
  263. console.log('user MA unFlag', data)
  264. dispatch('getUserFlagColls').then(() => {
  265. resolve()
  266. })
  267. })
  268. .catch(error => {
  269. console.warn('Issue USER MA unFlag', error)
  270. })
  271. })
  272. },
  273. openFlagColl ({ commit, dispatch, state }, collid) {
  274. console.log('user openFlagColl', collid)
  275. commit('openFlagColl', collid)
  276. if (typeof state.flagcolls[collid].loadedItems === 'undefined') {
  277. // if no loadedItems, load them
  278. // loadMaterials is on mixins
  279. // https://github.com/huybuidac/vuex-extensions
  280. dispatch('loadMaterials', {
  281. uuids: state.flagcolls[collid].items_uuids,
  282. imgStyle: 'card_medium_half',
  283. callBack: 'loadMaterialsCallBack',
  284. callBackArgs: { collid: collid }
  285. })
  286. } else {
  287. // call the mutation without data to only trigger the FlagCollection component update
  288. commit('setLoadedCollItems')
  289. }
  290. },
  291. loadMaterialsCallBack ({ commit }, { items, callBackArgs }) {
  292. console.log('user loadMaterialsCallBack', items)
  293. commit('setLoadedCollItems', { collid: callBackArgs.collid, items: items })
  294. },
  295. closeFlagColl ({ commit, dispatch }) {
  296. console.log('user closeFlagColl')
  297. commit('closeFlagColl')
  298. },
  299. userLogout ({ commit, state }) {
  300. const credentials = qs.stringify({
  301. token: state.csrf_token
  302. })
  303. REST.post('/user/logout', credentials)
  304. .then(resp => {
  305. console.log('userLogout resp', resp)
  306. commit('setLoggedOut')
  307. })
  308. .catch(error => {
  309. console.warn('Issue with logout', error)
  310. Promise.reject(error)
  311. })
  312. }
  313. }
  314. }