import { REST } from "vuejs/api/rest-axios"; // import { JSONAPI } from 'vuejs/api/json-axios'; import { MA } from "vuejs/api/ma-axios"; import qs from "querystring-es3"; export default { namespaced: true, // initial state state: { uid: null, // username: '', mail: "", csrf_token: null, logout_token: null, isloggedin: false, isAdmin: false, isAdherent: false, canSearch: false, roles: [], flagcolls: false }, // getters getters: {}, // mutations mutations: { SetCsrftoken(state, token) { console.log('SetCsrftoken', token); state.csrf_token = token; }, setToken(state, data) { state.uid = data.current_user.uid; // state.username = data.username; state.mail = data.current_user.mail; state.csrf_token = data.csrf_token; state.isloggedin = true; state.logout_token = data.logout_token; }, setUid(state, uid) { state.uid = uid; state.isloggedin = true; }, setUser(state, data) { state.mail = data.mail[0].value; state.uuid = data.uuid[0].value; }, setRoles(state, roles) { console.log("User setRoles", roles); state.roles = []; for (let i = 0; i < roles.length; i++) { state.roles.push(roles[i].target_id); } // check if admin if ( state.roles.indexOf("admin") !== -1 || state.roles.indexOf("root") !== -1 ) { // console.log('is admin'); state.isAdmin = true; } // check if has access to search if (state.roles.indexOf("adherent") !== -1) { // console.log('is admin'); state.canSearch = true; state.isAdherent = true; } }, setLoggedOut(state) { console.log("setLoggedOut state", state); state.uid = null; state.mail = ""; state.csrf_token = null; state.isloggedin = false; state.logout_token = null; if (state.isAdmin) { // TODO: what if on a page where login is needed (as commerce checkout and cart) window.location.reload(true); } state.asAdmin = false; state.canSearch = false; }, setFlagColls(state, flagcolls) { console.log("User setFlagColls", flagcolls); state.flagcolls = flagcolls; } }, // actions actions: { userRegister({ dispatch, commit, state }, credentials) { return new Promise((resolve) => { REST.get("/session/token").then(({ token }) => { commit("SetCsrftoken", token); REST.post("/user/register?_format=json", credentials, { "X-CSRF-Token": state.csrftoken }) .then(({ data }) => { console.log("user REST registered", data); dispatch("userLogin", credentials).then(() => { resolve(); }); }) .catch(error => { console.warn("Issue with register", error); Promise.reject(error); }); }); }); }, userLogin({ dispatch, state }, credentials) { return new Promise((resolve, reject) => { dispatch("getToken", credentials).then(() => { dispatch("getUser").then(userdata => { console.log("User Loggedin"); if (state.isAdmin) { window.location.reload(true); } resolve(); }); }); }); }, getToken({ dispatch, commit, state }, credentials) { return REST.post("/user/login?_format=json", credentials) .then(({ data }) => { console.log("user REST getToken data", data); commit("setToken", data); }) .catch(error => { console.warn("Issue with getToken", error); Promise.reject(error); }); }, getUser({ dispatch, commit, state }) { return new Promise((resolve, reject) => { REST.get("/session/token").then(({ data }) => { console.log('csrftoken', data); commit("SetCsrftoken", data); console.log('state.csrf_token', state.csrf_token); const params = { token: state.csrf_token }; REST.get(`/user/${state.uid}?_format=json`, params) .then(({ data }) => { console.log("user REST getUser data", data); console.log("roles", data.roles); commit("setUser", data); if (data.roles) { commit("setRoles", data.roles); } dispatch("getUserFlagColls"); resolve(); }) .catch(error => { console.warn("Issue with getUser", error); Promise.reject(error); }); }); }); }, getUserFlagColls({ dispatch, commit, state }) { // flags // REST.get('/flagging_collection/1?_format=json') // .then(( data ) => { // console.log('TEST FLAG REST data', data) // }) // .catch(error => { // console.warn('Issue USER TEST FLAG REST', error) // Promise.reject(error) // }) return MA.get("materio_flag/user_flagging_collections") .then(({ data }) => { console.log("user MA getFlags data", data); commit("setFlagColls", data); }) .catch(error => { console.warn("Issue USER MA getFlags", error); Promise.reject(error); }); }, // https://drupal.stackexchange.com/questions/248539/cant-get-flagging-api-to-accept-post-request createFlagColl({ dispatch, commit, state }, new_collection_name) { console.log("user createFlagColl", new_collection_name); return new Promise((resolve, reject) => { const params = { name: new_collection_name }; MA.post("materio_flag/create_user_flagging_collection", params) .then(({ data }) => { console.log("user MA createFlagColl data", data); if (data.status) { dispatch('getUserFlagColls').then(() => { resolve(); }) } }) .catch(error => { console.warn("Issue USER MA createFlag", error); reject(error); }); }); }, deleteFlagColl({ dispatch, commit, state }, flagcollid) { console.log("user deleteFlagColl", flagcollid); return new Promise((resolve, reject) => { const params = { flagcollid: flagcollid }; MA.post("materio_flag/delete_user_flagging_collection", params) .then(({ data }) => { console.log("user MA deleteFlagColl data", data); dispatch('getUserFlagColls').then(() =>{ resolve(); }); }) .catch(error => { console.warn("Issue USER MA createFlag", error); reject(error); }); }); }, flag({ dispatch, commit, state }, args) { console.log("user flag", args.uuid, args.collid); return new Promise((resolve, reject) => { const params = { flagid: state.flagcolls[args.collid].flag_id, uuid: args.uuid, flagcollid: args.collid }; return MA.post(`materio_flag/flag`, params) .then(({ data }) => { console.log("user MA flag", data); dispatch('getUserFlagColls').then(() =>{ resolve(); }); }) .catch(error => { console.warn("Issue USER MA flag", error); }); }); }, unFlag({ dispatch, commit, state }, args) { console.log("user unFlag", args.uuid, args.collid); return new Promise((resolve, reject) => { const params = { flagid: state.flagcolls[args.collid].flag_id, uuid: args.uuid, flagcollid: args.collid }; return MA.post(`materio_flag/unflag`, params) .then(({ data }) => { console.log("user MA unFlag", data); dispatch('getUserFlagColls').then(() =>{ resolve(); }); }) .catch(error => { console.warn("Issue USER MA unFlag", error); }); }); }, userLogout({ commit, state }) { const credentials = qs.stringify({ token: state.csrf_token }); REST.post("/user/logout", credentials) .then(resp => { console.log("userLogout resp", resp); commit("setLoggedOut"); }) .catch(error => { console.warn("Issue with logout", error); Promise.reject(error); }); } } };