diff --git a/express-server/db-connect/db-connect.js b/express-server/db-connect/db-connect.js index c19422f8..dd307e4e 100644 --- a/express-server/db-connect/db-connect.js +++ b/express-server/db-connect/db-connect.js @@ -168,7 +168,7 @@ async function displayShoppinglist(sl_id) { let members = await query('SELECT row_to_json("User") as obj FROM "User" JOIN "Shoppinglist_member" USING (username) WHERE sl_id = $1', [sl_id]); let admin = await query('SELECT row_to_json("User") as obj FROM "User" JOIN "Shoppinglist_admin" USING (username) WHERE sl_id = $1', [sl_id]); - return items_in_groups(groups, items, sl_id, admin[0].username, admin[0].message_id, members, shoppinglist[0].name, shoppinglist[0].description); + return items_in_groups(groups, items, sl_id, admin[0].username, admin[0].message_id, members, shoppinglist[0].name, shoppinglist[0].description, shoppinglist[0].invitelink); } catch (error) { console.error(error); } @@ -423,6 +423,8 @@ async function manInvite(sl_id, uid) { async function removeMember(uid, sl_id) { try { await nonQuery('DELETE FROM "Shoppinglist_member" WHERE username = $1 AND sl_id = $2', [uid, sl_id]); + + return getShoppinglistsShared(sl_id); } catch (error) { console.error(error); } @@ -469,12 +471,13 @@ function generate_item_id() { return output; } -function items_in_groups(groups, items, sl_id, admin_uid, admin_mid, members, name, description) { +function items_in_groups(groups, items, sl_id, admin_uid, admin_mid, members, name, description, invitelink) { let result = { sl_id: sl_id, name: name, description: description, + invitelink: invitelink, admin: { uid: admin_uid, mid: admin_mid diff --git a/express-server/public/test/dash.js b/express-server/public/test/dash.js index dfea80c3..f8a2c4b0 100644 --- a/express-server/public/test/dash.js +++ b/express-server/public/test/dash.js @@ -16,7 +16,10 @@ var app = new Vue({ title: "smartshopper.cf", myshoppinglists: [], sharedshoppinglists: [], - currentlist: {} + currentlist: {}, + currentGroup: String, + users: [], + done_purchases: [] }, methods: { @@ -67,7 +70,7 @@ var app = new Vue({ data: { name: name, description: description, - color: "white", + color: "#00a1ff", idtoken: idtoken } }).then((res) => { @@ -79,7 +82,136 @@ var app = new Vue({ } }); + }, + + deleteGroup(group_id, sl_id) { + axios({ + method: 'delete', + url: "/group", + data: { + sl_id: sl_id, + group_id: group_id + } + }).then((res) => { + console.log(res.data); + app.currentlist = res.data; + }); + }, + + addGroup(sl_id, name) { + + axios({ + method: 'post', + url: "/group", + data: { + sl_id: sl_id, + name: name, + color: "#00a1ff", + hidden: false + } + }).then((res) => { + console.log(res.data); + app.currentlist = res.data; + }); + }, + + addItem(group_id, sl_id, name, count) { + + console.log("AAA" + group_id + " ddd, " + sl_id) + + axios({ + method: 'post', + url: "/item", + data: { + sl_id: sl_id, + group_id: group_id, + name: name, + count: count + } + }).then((res) => { + console.log(res.data); + app.currentlist = res.data; + }); + }, + + setCurrentGroup(group_id) { + app.currentGroup = group_id; + console.log(group_id); + }, + + delItem(item_id, group_id, sl_id) { + + console.log(item_id + " d " + group_id + " " + sl_id) + + axios({ + method: 'delete', + url: "/item", + data: { + sl_id: sl_id, + group_id: group_id, + item_id: item_id + } + }).then((res) => { + console.log(res.data); + app.currentlist = res.data; + }); + }, + + removeMember(sl_id) { + firebase.auth().onAuthStateChanged(function (user) { + if (user) { + firebase.auth().currentUser.getIdToken( /* forceRefresh */ true).then(function (idtoken) { + axios({ + method: 'delete', + url: "/exitinvite", + data: { + sl_id: sl_id, + idtoken: idtoken + } + }).then((res) => { + app.sharedshoppinglists = res.data; + }); + }).catch((error) => console.error("Get id token client error: ", error)); + } else { + console.log("Check Auth error", user) + } + }); + }, + + createInvite(sl_id) { + axios({ + method: 'post', + url: "/invite", + data: { + sl_id: sl_id + } + }).then((res) => { + M.toast({html: 'Invite Link created'}); + }); + }, + + searchUsers(search) { + axios({ + method: 'get', + url: "/users?search=" + search + }).then((res) => { + app.users = res.data + }); + }, + + inviteMan(sl_id, user_id) { + axios({ + method: 'post', + url: "/maninvite", + data : { + uid: user_id, + sl_id: sl_id + } + }).then((res) => { + M.toast({html: 'User invited'}); + }); } + }, created() { @@ -128,6 +260,28 @@ var app = new Vue({ } else { console.log("Check Auth error", user) } + + firebase.auth().onAuthStateChanged(function (user) { + if (user) { + firebase.auth().currentUser.getIdToken( /* forceRefresh */ true).then(function (idtoken) { + axios.get('/donepurchases?idtoken=' + idtoken) + .then(function (res) { + + app.done_purchases = res.data; + console.log(res.data); + }) + .catch(function (error) { + + console.log(error); + }) + .then(function () { + + }); + }).catch((error) => console.error("Get id token client error: ", error)); + } else { + console.log("Check Auth error", user) + } + }); }); } }); @@ -142,6 +296,23 @@ $(document).on("click", ".citemL", function () { $(this).addClass("activeL"); }); -$(".nav-createlist").click(function() { +$(".crtList").click(function() { $('#modal1').modal("open"); +}); + +$(document).on("click", ".modlGR", function () { + $('#modalGR').modal("open"); +}); + + +$(document).on("click", ".modlIT", function () { + $('#modalIT').modal("open"); +}); + +$(".modlINV").click(function() { + $('#modalINV').modal("open"); +}); + +$(".modlINVM").click(function() { + $('#modalINVM').modal("open"); }); \ No newline at end of file diff --git a/express-server/public/test/style.css b/express-server/public/test/style.css index d525aeb6..01993518 100644 --- a/express-server/public/test/style.css +++ b/express-server/public/test/style.css @@ -17,4 +17,8 @@ body { .brand-logo { margin-left: 30px !important; +} + +.icoR { + color: #e53935; } \ No newline at end of file diff --git a/express-server/routes/index.js b/express-server/routes/index.js index 2cd09411..27dd248c 100644 --- a/express-server/routes/index.js +++ b/express-server/routes/index.js @@ -327,6 +327,24 @@ router.delete("/member", (req, res) => { } }); +router.delete("/exitinvite", (req, res) => { + + var token = req.body.idtoken; + var uid; + firebaseAdmin.auth().verifyIdToken(token) + .then(async function (decodedToken) { + uid = decodedToken.uid; + + try { + res.status(200).send(postgres.removeMember(uid, req.body.sl_id)); + } catch (err) { + res.status(400).send(await err); + } + }).catch(function (error) { + console.log(error) + }); +}); + router.get("/invite/:invitelink", async (req, res) => { res.status(200).render("invite"); }); diff --git a/express-server/views/dash2.ejs b/express-server/views/dash2.ejs index 30a10f3a..359df736 100644 --- a/express-server/views/dash2.ejs +++ b/express-server/views/dash2.ejs @@ -34,16 +34,21 @@