From 1bc57f159c223bc6541f5b150b49a124a15ef639 Mon Sep 17 00:00:00 2001 From: Liyas Thomas Date: Mon, 26 Apr 2021 09:37:18 +0000 Subject: [PATCH] merge feat/teams-new-ui Co-authored-by: Isha Gupta <40794215+IshaGupta18@users.noreply.github.com> Co-authored-by: Liyas Thomas Co-authored-by: Osheen Sachdev <45964755+oshhh@users.noreply.github.com> Co-authored-by: Rohan Rajpal Co-authored-by: Raghav Gupta --- components/collections/Add.vue | 40 +- components/collections/ChooseType.vue | 63 + components/collections/Collection.vue | 396 +- components/collections/Edit.vue | 44 +- components/collections/EditFolder.vue | 40 +- components/collections/EditRequest.vue | 44 +- components/collections/Folder.vue | 336 +- components/collections/ImportExport.vue | 190 +- components/collections/Request.vue | 54 +- components/collections/SaveRequest.vue | 100 +- components/collections/index.vue | 187 +- components/smart/Tabs.vue | 1 + components/teams/Add.vue | 92 + components/teams/Edit.vue | 436 ++ components/teams/ImportExport.vue | 173 + components/teams/Team.vue | 114 + components/teams/index.vue | 145 + helpers/fb.js | 3 + helpers/teams/utils.js | 460 ++ lang/en-US.json | 27 +- layouts/default.vue | 12 + nuxt.config.js | 8 + package-lock.json | 5588 ++++++++++++++++++++++- package.json | 3 + pages/index.vue | 4 + pages/settings.vue | 4 + plugins/apollo.js | 12 + 27 files changed, 8278 insertions(+), 298 deletions(-) create mode 100644 components/collections/ChooseType.vue create mode 100644 components/teams/Add.vue create mode 100644 components/teams/Edit.vue create mode 100644 components/teams/ImportExport.vue create mode 100644 components/teams/Team.vue create mode 100644 components/teams/index.vue create mode 100644 helpers/teams/utils.js create mode 100644 plugins/apollo.js diff --git a/components/collections/Add.vue b/components/collections/Add.vue index 545d103ee..9d82dcdfc 100644 --- a/components/collections/Add.vue +++ b/components/collections/Add.vue @@ -39,10 +39,12 @@ diff --git a/components/collections/Collection.vue b/components/collections/Collection.vue index 9d4447a75..3ff5198e6 100644 --- a/components/collections/Collection.vue +++ b/components/collections/Collection.vue @@ -13,7 +13,7 @@ arrow_right arrow_drop_down folder - {{ collection.name }} + {{ collection.name ? collection.name : collection.title }}
- +
+ + {{ pageNo }} + +
+ @@ -48,13 +72,43 @@
- +
- + @@ -66,8 +120,10 @@
  • @@ -123,6 +208,7 @@ diff --git a/components/teams/Edit.vue b/components/teams/Edit.vue new file mode 100644 index 000000000..9bb40fd30 --- /dev/null +++ b/components/teams/Edit.vue @@ -0,0 +1,436 @@ + + + diff --git a/components/teams/ImportExport.vue b/components/teams/ImportExport.vue new file mode 100644 index 000000000..d17a69c68 --- /dev/null +++ b/components/teams/ImportExport.vue @@ -0,0 +1,173 @@ + + + diff --git a/components/teams/Team.vue b/components/teams/Team.vue new file mode 100644 index 000000000..74aa4d257 --- /dev/null +++ b/components/teams/Team.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/components/teams/index.vue b/components/teams/index.vue new file mode 100644 index 000000000..d7f265239 --- /dev/null +++ b/components/teams/index.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/helpers/fb.js b/helpers/fb.js index 2d30aa65d..7ee3eacd6 100644 --- a/helpers/fb.js +++ b/helpers/fb.js @@ -32,6 +32,7 @@ export class FirebaseInstance { this.usersCollection = this.app.firestore().collection("users") this.currentUser = null + this.idToken = null this.currentFeeds = [] this.currentSettings = [] this.currentHistory = [] @@ -76,6 +77,8 @@ export class FirebaseInstance { }) this.app.auth().onAuthStateChanged((user) => { + this.currentUser$.next(user) + if (user) { this.currentUser = user diff --git a/helpers/teams/utils.js b/helpers/teams/utils.js new file mode 100644 index 000000000..62cdb42f7 --- /dev/null +++ b/helpers/teams/utils.js @@ -0,0 +1,460 @@ +import gql from "graphql-tag" + +async function createTeam(apollo, name) { + return apollo.mutate({ + mutation: gql` + mutation($name: String!) { + createTeam(name: $name) { + name + } + } + `, + variables: { + name: name, + }, + }) +} + +async function addTeamMemberByEmail(apollo, userRole, userEmail, teamID) { + return apollo.mutate({ + mutation: gql` + mutation addTeamMemberByEmail( + $userRole: TeamMemberRole! + $userEmail: String! + $teamID: String! + ) { + addTeamMemberByEmail(userRole: $userRole, userEmail: $userEmail, teamID: $teamID) { + role + } + } + `, + variables: { + userRole: userRole, + userEmail: userEmail, + teamID: teamID, + }, + }) +} + +async function updateTeamMemberRole(apollo, userID, newRole, teamID) { + return apollo.mutate({ + mutation: gql` + mutation updateTeamMemberRole( + $newRole: TeamMemberRole! + $userUid: String! + $teamID: String! + ) { + updateTeamMemberRole(newRole: $newRole, userUid: $userUid, teamID: $teamID) { + role + } + } + `, + variables: { + newRole: newRole, + userUid: userID, + teamID: teamID, + }, + }) +} + +async function renameTeam(apollo, name, teamID) { + return apollo.mutate({ + mutation: gql` + mutation renameTeam($newName: String!, $teamID: String!) { + renameTeam(newName: $newName, teamID: $teamID) { + id + } + } + `, + variables: { + newName: name, + teamID: teamID, + }, + }) +} + +async function removeTeamMember(apollo, userID, teamID) { + return apollo.mutate({ + mutation: gql` + mutation removeTeamMember($userUid: String!, $teamID: String!) { + removeTeamMember(userUid: $userUid, teamID: $teamID) + } + `, + variables: { + userUid: userID, + teamID: teamID, + }, + }) +} + +async function deleteTeam(apollo, teamID) { + let response = undefined + while (true) { + response = await apollo.mutate({ + mutation: gql` + mutation($teamID: String!) { + deleteTeam(teamID: $teamID) + } + `, + variables: { + teamID: teamID, + }, + }) + if (response != undefined) break + } + return response +} + +async function exitTeam(apollo, teamID) { + apollo.mutate({ + mutation: gql` + mutation($teamID: String!) { + leaveTeam(teamID: $teamID) + } + `, + variables: { + teamID: teamID, + }, + }) +} + +async function rootCollectionsOfTeam(apollo, teamID) { + var collections = [] + var cursor = "" + while (true) { + var response = await apollo.query({ + query: gql` + query rootCollectionsOfTeam($teamID: String!, $cursor: String!) { + rootCollectionsOfTeam(teamID: $teamID, cursor: $cursor) { + id + title + } + } + `, + variables: { + teamID: teamID, + cursor: cursor, + }, + fetchPolicy: "no-cache", + }) + if (response.data.rootCollectionsOfTeam.length == 0) break + response.data.rootCollectionsOfTeam.forEach((collection) => { + collections.push(collection) + }) + cursor = collections[collections.length - 1].id + } + return collections +} + +async function getCollectionChildren(apollo, collectionID) { + var children = [] + var response = await apollo.query({ + query: gql` + query getCollectionChildren($collectionID: String!) { + collection(collectionID: $collectionID) { + children { + id + title + } + } + } + `, + variables: { + collectionID: collectionID, + }, + fetchPolicy: "no-cache", + }) + response.data.collection.children.forEach((child) => { + children.push(child) + }) + return children +} + +async function getCollectionRequests(apollo, collectionID) { + var requests = [] + var cursor = "" + while (true) { + var response = await apollo.query({ + query: gql` + query getCollectionRequests($collectionID: String!, $cursor: String) { + requestsInCollection(collectionID: $collectionID, cursor: $cursor) { + id + title + request + } + } + `, + variables: { + collectionID: collectionID, + cursor: cursor, + }, + fetchPolicy: "no-cache", + }) + + response.data.requestsInCollection.forEach((request) => { + requests.push(request) + }) + + if (response.data.requestsInCollection.length < 10) { + break + } + cursor = requests[requests.length - 1].id + } + return requests +} + +async function renameCollection(apollo, title, id) { + let response = undefined + while (true) { + response = await apollo.mutate({ + mutation: gql` + mutation($newTitle: String!, $collectionID: String!) { + renameCollection(newTitle: $newTitle, collectionID: $collectionID) { + id + } + } + `, + variables: { + newTitle: title, + collectionID: id, + }, + }) + if (response != undefined) break + } + return response +} + +async function updateRequest(apollo, request, requestName, requestID) { + let response = undefined + while (true) { + response = await apollo.mutate({ + mutation: gql` + mutation($data: UpdateTeamRequestInput!, $requestID: String!) { + updateRequest(data: $data, requestID: $requestID) { + id + } + } + `, + variables: { + data: { + request: JSON.stringify(request), + title: requestName, + }, + requestID: requestID, + }, + }) + if (response != undefined) break + } + return response +} + +async function addChildCollection(apollo, title, id) { + let response = undefined + while (true) { + response = await apollo.mutate({ + mutation: gql` + mutation($childTitle: String!, $collectionID: String!) { + createChildCollection(childTitle: $childTitle, collectionID: $collectionID) { + id + } + } + `, + variables: { + childTitle: title, + collectionID: id, + }, + }) + if (response != undefined) break + } + return response +} + +async function deleteCollection(apollo, id) { + let response = undefined + while (true) { + response = await apollo.mutate({ + mutation: gql` + mutation($collectionID: String!) { + deleteCollection(collectionID: $collectionID) + } + `, + variables: { + collectionID: id, + }, + }) + if (response != undefined) break + } + return response +} + +async function deleteRequest(apollo, requestID) { + let response = undefined + while (true) { + response = await apollo.mutate({ + mutation: gql` + mutation($requestID: String!) { + deleteRequest(requestID: $requestID) + } + `, + variables: { + requestID: requestID, + }, + }) + if (response != undefined) break + } + return response +} + +async function createNewRootCollection(apollo, title, id) { + let response = undefined + while (true) { + response = await apollo.mutate({ + mutation: gql` + mutation($title: String!, $teamID: String!) { + createRootCollection(title: $title, teamID: $teamID) { + id + } + } + `, + variables: { + title: title, + teamID: id, + }, + }) + if (response != undefined) break + } + return response +} + +async function saveRequestAsTeams(apollo, request, title, teamID, collectionID) { + await apollo.mutate({ + mutation: gql` + mutation($data: CreateTeamRequestInput!, $collectionID: String!) { + createRequestInCollection(data: $data, collectionID: $collectionID) { + collection { + id + team { + id + name + } + } + } + } + `, + variables: { + collectionID: collectionID, + data: { + teamID: teamID, + title: title, + request: request, + }, + }, + }) +} + +async function overwriteRequestTeams(apollo, request, title, requestID) { + await apollo.mutate({ + mutation: gql` + mutation updateRequest($data: UpdateTeamRequestInput!, $requestID: String!) { + updateRequest(data: $data, requestID: $requestID) { + id + title + } + } + `, + variables: { + requestID: requestID, + data: { + request: request, + title: title, + }, + }, + }) +} + +async function importFromMyCollections(apollo, collectionID, teamID) { + let response = await apollo.mutate({ + mutation: gql` + mutation importFromMyCollections($fbCollectionPath: String!, $teamID: String!) { + importCollectionFromUserFirestore(fbCollectionPath: $fbCollectionPath, teamID: $teamID) { + id + title + } + } + `, + variables: { + fbCollectionPath: collectionID, + teamID: teamID, + }, + }) + return response.data != null +} + +async function importFromJSON(apollo, collections, teamID) { + let response = await apollo.mutate({ + mutation: gql` + mutation importFromJSON($jsonString: String!, $teamID: String!) { + importCollectionsFromJSON(jsonString: $jsonString, teamID: $teamID) + } + `, + variables: { + jsonString: JSON.stringify(collections), + teamID: teamID, + }, + }) + return response.data != null +} + +async function replaceWithJSON(apollo, collections, teamID) { + let response = await apollo.mutate({ + mutation: gql` + mutation replaceWithJSON($jsonString: String!, $teamID: String!) { + replaceCollectionsWithJSON(jsonString: $jsonString, teamID: $teamID) + } + `, + variables: { + jsonString: JSON.stringify(collections), + teamID: teamID, + }, + }) + return response.data != null +} + +async function exportAsJSON(apollo, teamID) { + let response = await apollo.query({ + query: gql` + query exportAsJSON($teamID: String!) { + exportCollectionsToJSON(teamID: $teamID) + } + `, + variables: { + teamID: teamID, + }, + }) + return response.data.exportCollectionsToJSON +} + +export default { + rootCollectionsOfTeam: rootCollectionsOfTeam, + getCollectionChildren: getCollectionChildren, + getCollectionRequests: getCollectionRequests, + saveRequestAsTeams: saveRequestAsTeams, + overwriteRequestTeams: overwriteRequestTeams, + importFromMyCollections: importFromMyCollections, + importFromJSON: importFromJSON, + replaceWithJSON: replaceWithJSON, + exportAsJSON: exportAsJSON, + renameCollection: renameCollection, + updateRequest: updateRequest, + addChildCollection: addChildCollection, + deleteCollection: deleteCollection, + deleteRequest: deleteRequest, + createNewRootCollection: createNewRootCollection, + createTeam: createTeam, + addTeamMemberByEmail: addTeamMemberByEmail, + renameTeam: renameTeam, + deleteTeam: deleteTeam, + exitTeam: exitTeam, + updateTeamMemberRole: updateTeamMemberRole, + removeTeamMember: removeTeamMember, +} diff --git a/lang/en-US.json b/lang/en-US.json index b32e93d64..1d86c5d73 100644 --- a/lang/en-US.json +++ b/lang/en-US.json @@ -305,5 +305,30 @@ "account_exists": "Account exists with different credential - Login to link both accounts", "confirm": "Confirm", "new_version_found": "New version found. Refresh to update.", - "size": "Size" + "size": "Size", + "exit": "Exit Team", + "string_length_insufficient": "Team name should be atleast 6 characters long", + "invalid_emailID_format": "Email ID format is invalid", + "teams": "Teams", + "new_team": "New Team", + "my_new_team": "My New Team", + "edit_team": "Edit Team", + "team_member_list": "Member List", + "invalid_team_name": "Please provide a valid name for the team", + "use_team": "Use Team", + "add_one_member": "(add at least one member)", + "permissions": "Permissions", + "email": "E-mail", + "create_new_team": "Create new team", + "new_team_created": "New team created", + "team_saved": "Team saved", + "team_name_empty": "Team name empty", + "disable_new_collection": "You do not have edit access to these collections", + "collection_added": "Collection added successfully", + "folder_added": "Folder added successfully", + "team_exited": "Team exited", + "disable_exit": "Only owner cannot exit the team", + "folder_renamed": "Folder renamed successfully", + "role_updated": "User role(s) updated successfully", + "user_removed": "User removed successfully" } diff --git a/layouts/default.vue b/layouts/default.vue index 17116bd0e..f7159a38e 100644 --- a/layouts/default.vue +++ b/layouts/default.vue @@ -14,6 +14,7 @@