From 069f64afc9b42c73f2f9c51a61604471fb7cabe8 Mon Sep 17 00:00:00 2001 From: Kristaps Fabians Geikins Date: Thu, 24 Aug 2023 10:30:09 +0300 Subject: [PATCH] feat(fe1 & fe2): guest role (#1768) * feat: user guest role switching in FE1 * removed stream create buttons * fe1 done * fe1 - specifying role in invite dialogs * fe1 - bulk invites * WIP FE2 changes * fe1: allow role select condition fixes * xtra limitations on createForOnboarding * more invite creation validations * no longer able to set guest as project owner in invite * preparations for server role select in invite dialog * team management dialog done * server invite dialog updated * hiding invite dialog * fixed mocks --- .../components/form/select/ServerRoles.vue | 87 ++++++++++ .../components/header/NavUserMenu.vue | 4 +- .../components/project/page/team/Dialog.vue | 9 +- .../project/page/team/PermissionSelect.vue | 14 +- .../project/page/team/dialog/InviteUser.vue | 86 +++++----- .../project/page/team/dialog/ManageUsers.vue | 3 +- .../team/dialog/invite-user/EmailsRow.vue | 75 +++++++++ .../team/dialog/invite-user/ServerUserRow.vue | 42 +++++ .../components/projects/Dashboard.vue | 8 +- .../components/server/InviteDialog.vue | 30 +++- .../lib/auth/composables/activeUser.ts | 6 +- .../lib/common/composables/users.ts | 8 +- .../lib/common/generated/gql/gql.ts | 13 +- .../lib/common/generated/gql/graphql.ts | 55 +++++-- .../frontend-2/lib/common/graphql/queries.ts | 1 + .../frontend-2/lib/core/composables/server.ts | 29 ++++ .../lib/projects/composables/team.ts | 13 +- .../lib/projects/helpers/components.ts | 3 +- .../lib/projects/mocks/projectPage.ts | 5 +- packages/frontend/.eslintrc.js | 3 +- .../frontend/src/graphql/fragments/user.js | 1 + .../frontend/src/graphql/generated/graphql.ts | 150 +++++++++++++++--- packages/frontend/src/graphql/server.js | 20 ++- .../main/components/admin/UsersListItem.vue | 7 +- .../components/admin/UsersListUserItem.vue | 36 ++--- .../main/components/common/UserRoleSelect.vue | 53 +++++++ .../src/main/components/feed/FeedTimeline.vue | 9 +- .../collaborators/StreamCollaboratorRow.vue | 22 ++- .../collaborators/StreamRoleCollaborators.vue | 17 +- .../src/main/dialogs/InviteDialog.vue | 35 +++- .../src/main/dialogs/ShareStreamDialog.vue | 15 +- .../main/lib/core/composables/activeUser.ts | 30 ++++ .../src/main/lib/core/composables/server.ts | 12 ++ .../src/main/lib/core/helpers/users.ts | 9 ++ .../frontend/src/main/navigation/MainNav.vue | 58 ++++++- .../src/main/navigation/StreamNav.vue | 8 +- .../frontend/src/main/pages/TheCommits.vue | 9 +- .../frontend/src/main/pages/TheStreams.vue | 25 +-- .../frontend/src/main/pages/admin/Admin.vue | 4 +- .../frontend/src/main/pages/admin/Invites.vue | 23 ++- .../src/main/pages/admin/ServerSettings.vue | 21 ++- .../frontend/src/main/pages/admin/Users.vue | 24 +-- .../main/pages/stream/TheCollaborators.vue | 72 +++++---- .../src/main/pages/user/TheProfileSelf.vue | 8 +- .../assets/core/typedefs/projects.graphql | 25 ++- .../assets/core/typedefs/server.graphql | 16 +- .../assets/core/typedefs/streams.graphql | 1 + .../typedefs/serverInvites.graphql | 8 + .../activitystream/services/streamActivity.ts | 47 ++++-- .../modules/auth/strategies/azure-ad.js | 8 +- .../server/modules/auth/strategies/github.js | 8 +- .../server/modules/auth/strategies/google.js | 8 +- .../server/modules/auth/strategies/local.js | 5 +- .../server/modules/auth/strategies/oidc.js | 8 +- packages/server/modules/core/dbSchema.ts | 5 +- .../modules/core/graph/generated/graphql.ts | 40 ++++- .../modules/core/graph/resolvers/projects.ts | 4 +- .../modules/core/graph/resolvers/server.js | 12 +- .../modules/core/graph/resolvers/streams.js | 7 + packages/server/modules/core/loaders.ts | 15 +- .../modules/core/repositories/streams.ts | 29 ++++ .../server/modules/core/repositories/users.ts | 16 +- .../modules/core/services/streams/clone.ts | 4 +- .../core/services/streams/onboarding.ts | 25 ++- .../server/modules/core/services/users.js | 14 +- .../graph/generated/graphql.ts | 25 ++- .../graph/resolvers/serverInvites.js | 12 +- .../modules/serverinvites/helpers/types.ts | 1 + ...18075729_add_invite_server_role_support.ts | 17 ++ .../serverinvites/repositories/index.js | 6 +- .../services/inviteCreationService.js | 33 +++- .../serverinvites/services/management.ts | 3 +- .../server/test/graphql/generated/graphql.ts | 25 ++- packages/shared/src/core/constants.ts | 25 +++ .../components/form/select/Base.stories.ts | 8 + .../src/components/form/select/Base.vue | 38 ++++- 76 files changed, 1336 insertions(+), 324 deletions(-) create mode 100644 packages/frontend-2/components/form/select/ServerRoles.vue create mode 100644 packages/frontend-2/components/project/page/team/dialog/invite-user/EmailsRow.vue create mode 100644 packages/frontend-2/components/project/page/team/dialog/invite-user/ServerUserRow.vue create mode 100644 packages/frontend-2/lib/core/composables/server.ts create mode 100644 packages/frontend/src/main/components/common/UserRoleSelect.vue create mode 100644 packages/frontend/src/main/lib/core/composables/activeUser.ts create mode 100644 packages/frontend/src/main/lib/core/composables/server.ts create mode 100644 packages/frontend/src/main/lib/core/helpers/users.ts create mode 100644 packages/server/modules/serverinvites/migrations/20230818075729_add_invite_server_role_support.ts diff --git a/packages/frontend-2/components/form/select/ServerRoles.vue b/packages/frontend-2/components/form/select/ServerRoles.vue new file mode 100644 index 000000000..3aff86dc7 --- /dev/null +++ b/packages/frontend-2/components/form/select/ServerRoles.vue @@ -0,0 +1,87 @@ + + diff --git a/packages/frontend-2/components/header/NavUserMenu.vue b/packages/frontend-2/components/header/NavUserMenu.vue index d67f84e98..1b0cbd4db 100644 --- a/packages/frontend-2/components/header/NavUserMenu.vue +++ b/packages/frontend-2/components/header/NavUserMenu.vue @@ -56,7 +56,7 @@ - +
- +
@@ -23,6 +26,7 @@ graphql(` role user { ...LimitedUserAvatar + role } } invitedTeam { @@ -32,6 +36,7 @@ graphql(` role user { ...LimitedUserAvatar + role } } } @@ -46,7 +51,7 @@ const props = defineProps<{ project: ProjectPageTeamDialogFragment }>() -const { isOwner } = useTeamDialogInternals({ props: toRefs(props) }) +const { isOwner, isServerGuest } = useTeamDialogInternals({ props: toRefs(props) }) const isOpen = computed({ get: () => props.open, diff --git a/packages/frontend-2/components/project/page/team/PermissionSelect.vue b/packages/frontend-2/components/project/page/team/PermissionSelect.vue index dd684223c..e2b09af66 100644 --- a/packages/frontend-2/components/project/page/team/PermissionSelect.vue +++ b/packages/frontend-2/components/project/page/team/PermissionSelect.vue @@ -34,7 +34,7 @@ diff --git a/packages/frontend-2/components/project/page/team/dialog/ManageUsers.vue b/packages/frontend-2/components/project/page/team/dialog/ManageUsers.vue index 498de03f1..b3e626010 100644 --- a/packages/frontend-2/components/project/page/team/dialog/ManageUsers.vue +++ b/packages/frontend-2/components/project/page/team/dialog/ManageUsers.vue @@ -20,6 +20,7 @@ class="shrink-0" :model-value="collaborator.role" :disabled="loading" + :hide-owner="collaborator.serverRole === Roles.Server.Guest" @update:model-value="onCollaboratorRoleChange(collaborator, $event)" @delete="onCollaboratorRoleChange(collaborator, null)" /> @@ -51,7 +52,7 @@ diff --git a/packages/frontend-2/components/project/page/team/dialog/invite-user/ServerUserRow.vue b/packages/frontend-2/components/project/page/team/dialog/invite-user/ServerUserRow.vue new file mode 100644 index 000000000..0ba14b622 --- /dev/null +++ b/packages/frontend-2/components/project/page/team/dialog/invite-user/ServerUserRow.vue @@ -0,0 +1,42 @@ + + diff --git a/packages/frontend-2/components/projects/Dashboard.vue b/packages/frontend-2/components/projects/Dashboard.vue index afc3b6895..82af2238d 100644 --- a/packages/frontend-2/components/projects/Dashboard.vue +++ b/packages/frontend-2/components/projects/Dashboard.vue @@ -41,7 +41,11 @@ class="w-56 grow md:grow-0" fixed-height /> - + New @@ -113,7 +117,7 @@ const debouncedSearch = ref('') const openNewProject = ref(false) const showLoadingBar = ref(false) -const { activeUser } = useActiveUser() +const { activeUser, isGuest } = useActiveUser() const { triggerNotification } = useGlobalToast() const areQueriesLoading = useQueryLoading() const apollo = useApolloClient().client diff --git a/packages/frontend-2/components/server/InviteDialog.vue b/packages/frontend-2/components/server/InviteDialog.vue index f98be72c7..8ffe18566 100644 --- a/packages/frontend-2/components/server/InviteDialog.vue +++ b/packages/frontend-2/components/server/InviteDialog.vue @@ -26,15 +26,26 @@
-
+
+
-
+
Cancel Send
@@ -45,9 +56,10 @@ diff --git a/packages/frontend/src/main/components/feed/FeedTimeline.vue b/packages/frontend/src/main/components/feed/FeedTimeline.vue index 36106d46d..b6d686a4c 100644 --- a/packages/frontend/src/main/components/feed/FeedTimeline.vue +++ b/packages/frontend/src/main/components/feed/FeedTimeline.vue @@ -42,13 +42,14 @@

Welcome {{ quickUser.name.split(' ')[0] }}!

- Once you create a stream and start sending some data, your activity will - show up here. + Once you {{ isGuestUser ? 'join' : 'create' }} a stream and start sending + some data, your activity will show up here.

@@ -41,9 +41,15 @@
diff --git a/packages/frontend/src/main/components/stream/collaborators/StreamRoleCollaborators.vue b/packages/frontend/src/main/components/stream/collaborators/StreamRoleCollaborators.vue index cfb90b012..40e734681 100644 --- a/packages/frontend/src/main/components/stream/collaborators/StreamRoleCollaborators.vue +++ b/packages/frontend/src/main/components/stream/collaborators/StreamRoleCollaborators.vue @@ -49,7 +49,6 @@