diff --git a/ee/app/assets/javascripts/pages/admin/application_settings/roles_and_permissions/index.js b/ee/app/assets/javascripts/pages/admin/application_settings/roles_and_permissions/index.js index 6788140c19839b841cdc789b76dc9df7ac3cd00d..a36c2808700e45927860e6b89d9ef25b21f59ca7 100644 --- a/ee/app/assets/javascripts/pages/admin/application_settings/roles_and_permissions/index.js +++ b/ee/app/assets/javascripts/pages/admin/application_settings/roles_and_permissions/index.js @@ -1,7 +1,3 @@ import { initRolesAndPermissions } from 'ee/roles_and_permissions'; -import { s__ } from '~/locale'; -initRolesAndPermissions({ - emptyText: s__(`MemberRole|To add a new role select a group and then 'Add new role'.`), - showGroupSelector: true, -}); +initRolesAndPermissions(); diff --git a/ee/app/assets/javascripts/pages/groups/settings/roles_and_permissions/index.js b/ee/app/assets/javascripts/pages/groups/settings/roles_and_permissions/index.js index b7f090b22965297daf94aac7b8e5d3e2a545a36e..a36c2808700e45927860e6b89d9ef25b21f59ca7 100644 --- a/ee/app/assets/javascripts/pages/groups/settings/roles_and_permissions/index.js +++ b/ee/app/assets/javascripts/pages/groups/settings/roles_and_permissions/index.js @@ -1,7 +1,3 @@ import { initRolesAndPermissions } from 'ee/roles_and_permissions'; -import { s__ } from '~/locale'; -initRolesAndPermissions({ - emptyText: s__(`MemberRole|To add a new role select 'Add new role'.`), - showGroupSelector: false, -}); +initRolesAndPermissions(); diff --git a/ee/app/assets/javascripts/roles_and_permissions/components/create_member_role.vue b/ee/app/assets/javascripts/roles_and_permissions/components/create_member_role.vue index 54f6c8a107fb59c3c59ea325ca9c958482b579dd..59b7f448b1e43adf074859099c26200aaed1743c 100644 --- a/ee/app/assets/javascripts/roles_and_permissions/components/create_member_role.vue +++ b/ee/app/assets/javascripts/roles_and_permissions/components/create_member_role.vue @@ -13,7 +13,8 @@ import { import { createAlert } from '~/alert'; import { sprintf, s__ } from '~/locale'; import { ACCESS_LEVEL_GUEST_INTEGER, ACCESS_LEVEL_LABELS } from '~/access_level/constants'; -import memberRolesQuery from 'ee/invite_members/graphql/queries/group_member_roles.query.graphql'; +import groupMemberRolesQuery from 'ee/invite_members/graphql/queries/group_member_roles.query.graphql'; +import instanceMemberRolesQuery from '../graphql/instance_member_roles.query.graphql'; import createMemberRoleMutation from '../graphql/create_member_role.mutation.graphql'; // Base roles with Guest access or higher. @@ -39,7 +40,8 @@ export default { props: { groupFullPath: { type: String, - required: true, + required: false, + default: null, }, availablePermissions: { type: Array, @@ -63,6 +65,9 @@ export default { baseRoleUppercase() { return ACCESS_LEVEL_LABELS[this.baseRole].toUpperCase(); }, + refetchMemberRolesQuery() { + return this.groupFullPath ? groupMemberRolesQuery : instanceMemberRolesQuery; + }, }, methods: { validateFields() { @@ -88,7 +93,7 @@ export default { mutation: createMemberRoleMutation, refetchQueries: [ { - query: memberRolesQuery, + query: this.refetchMemberRolesQuery, variables: { fullPath: this.groupFullPath }, }, ], diff --git a/ee/app/assets/javascripts/roles_and_permissions/components/list_member_roles.vue b/ee/app/assets/javascripts/roles_and_permissions/components/list_member_roles.vue index e044836c92cf37ed806cc55f818ca745081d3ff4..90351f67213c85fa8e3082de38d950ad163f64df 100644 --- a/ee/app/assets/javascripts/roles_and_permissions/components/list_member_roles.vue +++ b/ee/app/assets/javascripts/roles_and_permissions/components/list_member_roles.vue @@ -5,7 +5,8 @@ import { createAlert } from '~/alert'; import { sprintf, s__, __ } from '~/locale'; import { TYPENAME_MEMBER_ROLE } from '~/graphql_shared/constants'; import { convertToGraphQLId, getIdFromGraphQLId } from '~/graphql_shared/utils'; -import memberRolesQuery from 'ee/invite_members/graphql/queries/group_member_roles.query.graphql'; +import groupMemberRolesQuery from 'ee/invite_members/graphql/queries/group_member_roles.query.graphql'; +import instanceMemberRolesQuery from '../graphql/instance_member_roles.query.graphql'; import memberRolePermissionsQuery from '../graphql/member_role_permissions.query.graphql'; import deleteMemberRoleMutation from '../graphql/delete_member_role.mutation.graphql'; import CreateMemberRole from './create_member_role.vue'; @@ -23,14 +24,14 @@ export default { addNewRole: s__('MemberRole|Add new role'), cardTitle: s__('MemberRole|Custom roles'), deleteRole: s__('MemberRole|Delete role'), - emptyTitle: s__('MemberRole|No custom roles for this group'), + emptyTitle: s__('MemberRole|No custom roles found'), + emptyDescription: s__(`MemberRole|To add a new role select 'Add new role'.`), fetchRolesError: s__('MemberRole|Failed to fetch roles: %{message}'), fetchPermissionsError: s__('MemberRole|Could not fetch available permissions: %{message}'), deleteSuccess: s__('MemberRole|Role successfully deleted.'), deleteError: s__('MemberRole|Failed to delete the role.'), deleteErrorWithReason: s__('MemberRole|Failed to delete the role: %{message}'), createSuccess: s__('MemberRole|Role successfully created.'), - licenseError: s__('MemberRole|Make sure the group is in the Ultimate tier.'), }, components: { CreateMemberRole, @@ -42,11 +43,6 @@ export default { GlTable, }, props: { - emptyText: { - type: String, - required: false, - default: null, - }, groupFullPath: { type: String, required: false, @@ -64,14 +60,20 @@ export default { }, apollo: { memberRoles: { - query: memberRolesQuery, + query() { + return this.fetchMemberRolesQuery; + }, variables() { return { fullPath: this.groupFullPath, }; }, update(data) { - const memberRoles = data?.namespace?.memberRoles?.nodes || []; + const nodes = this.groupFullPath + ? data?.namespace?.memberRoles?.nodes + : data?.memberRoles?.nodes; + + const memberRoles = nodes || []; return memberRoles.map(({ id, name, baseAccessLevel, enabledPermissions }) => ({ name, @@ -85,9 +87,6 @@ export default { message: sprintf(this.$options.i18n.fetchRolesError, { message }), }); }, - skip() { - return !this.groupFullPath; - }, }, availablePermissions: { query: memberRolePermissionsQuery, @@ -102,6 +101,9 @@ export default { }, }, computed: { + fetchMemberRolesQuery() { + return this.groupFullPath ? groupMemberRolesQuery : instanceMemberRolesQuery; + }, isLoading() { return ( this.$apollo.queries.memberRoles.loading || @@ -112,11 +114,6 @@ export default { return this.memberRoleToDelete !== null; }, }, - watch: { - groupFullPath() { - this.$apollo.queries.memberRoles.refetch(); - }, - }, methods: { async deleteMemberRole() { this.alert?.dismiss(); @@ -124,7 +121,7 @@ export default { this.$apollo .mutate({ mutation: deleteMemberRoleMutation, - refetchQueries: [memberRolesQuery], + refetchQueries: [this.fetchMemberRolesQuery], variables: { input: { id: convertToGraphQLId(TYPENAME_MEMBER_ROLE, this.memberRoleToDelete), @@ -187,7 +184,11 @@ export default {