Add default role to workspace (#10444)
## Context Adding a defaultRole to each workspace, this role will be automatically added when a member joins a workspace via invite link or public link (seeds work differently though). Took the occasion to refactor a bit the frontend components, splitting them in smaller components for more readability. ## Test <img width="948" alt="Screenshot 2025-02-24 at 14 54 02" src="https://github.com/user-attachments/assets/13ef1452-d3c9-4385-940c-2ced0f0b05ef" />
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import { createState } from '@ui/utilities/state/utils/createState';
|
||||
|
||||
import { Workspace } from '~/generated/graphql';
|
||||
import { Role, Workspace } from '~/generated/graphql';
|
||||
|
||||
export type CurrentWorkspace = Pick<
|
||||
Workspace,
|
||||
@ -23,7 +23,9 @@ export type CurrentWorkspace = Pick<
|
||||
| 'customDomain'
|
||||
| 'workspaceUrls'
|
||||
| 'metadataVersion'
|
||||
>;
|
||||
> & {
|
||||
defaultRole?: Omit<Role, 'workspaceMembers'> | null;
|
||||
};
|
||||
|
||||
export const currentWorkspaceState = createState<CurrentWorkspace | null>({
|
||||
key: 'currentWorkspaceState',
|
||||
|
||||
@ -342,6 +342,17 @@ export const responseData = {
|
||||
metadataVersion: 1,
|
||||
currentBillingSubscription: null,
|
||||
workspaceMembersCount: 1,
|
||||
defaultRole: {
|
||||
id: 'default-role-id',
|
||||
label: 'Default Role',
|
||||
description: 'Default Role Description',
|
||||
canUpdateAllSettings: true,
|
||||
isEditable: true,
|
||||
canReadAllObjectRecords: true,
|
||||
canUpdateAllObjectRecords: true,
|
||||
canSoftDeleteAllObjectRecords: true,
|
||||
canDestroyAllObjectRecords: true,
|
||||
}
|
||||
},
|
||||
currentBillingSubscription: null,
|
||||
billingSubscriptions: [],
|
||||
|
||||
@ -21,6 +21,16 @@ import {
|
||||
responseData as findManyObjectMetadataItemsResponseData,
|
||||
} from '../__mocks__/useFindManyObjectMetadataItems';
|
||||
|
||||
jest.mock('@/object-metadata/hooks/useUpdateOneFieldMetadataItem', () => ({
|
||||
useUpdateOneFieldMetadataItem: () => ({
|
||||
updateOneFieldMetadataItem: jest.fn().mockResolvedValue({
|
||||
data: {
|
||||
updateOneField: responseData.default,
|
||||
},
|
||||
}),
|
||||
}),
|
||||
}));
|
||||
|
||||
const fieldMetadataItem: FieldMetadataItem = {
|
||||
id: FIELD_METADATA_ID,
|
||||
createdAt: '',
|
||||
@ -111,17 +121,6 @@ const mocks = [
|
||||
},
|
||||
})),
|
||||
},
|
||||
{
|
||||
request: {
|
||||
query: queries.activateMetadataField,
|
||||
variables: variables.activateMetadataField,
|
||||
},
|
||||
result: jest.fn(() => ({
|
||||
data: {
|
||||
updateOneField: responseData.default,
|
||||
},
|
||||
})),
|
||||
},
|
||||
{
|
||||
request: {
|
||||
query: queries.createMetadataField,
|
||||
@ -133,26 +132,6 @@ const mocks = [
|
||||
},
|
||||
})),
|
||||
},
|
||||
{
|
||||
request: {
|
||||
query: queries.activateMetadataField,
|
||||
variables: variables.deactivateMetadataField,
|
||||
},
|
||||
result: jest.fn(() => ({
|
||||
data: {
|
||||
updateOneField: responseData.default,
|
||||
},
|
||||
})),
|
||||
},
|
||||
{
|
||||
request: {
|
||||
query: queries.getCurrentUser,
|
||||
variables: {},
|
||||
},
|
||||
result: jest.fn(() => ({
|
||||
data: responseData.getCurrentUser,
|
||||
})),
|
||||
},
|
||||
{
|
||||
request: {
|
||||
query: queries.getCurrentUser,
|
||||
|
||||
@ -57,7 +57,10 @@ export const UserProviderEffect = () => {
|
||||
setCurrentUser(queryData.currentUser);
|
||||
|
||||
if (isDefined(queryData.currentUser.currentWorkspace)) {
|
||||
setCurrentWorkspace(queryData.currentUser.currentWorkspace);
|
||||
setCurrentWorkspace({
|
||||
...queryData.currentUser.currentWorkspace,
|
||||
defaultRole: queryData.currentUser.currentWorkspace.defaultRole ?? null,
|
||||
});
|
||||
}
|
||||
|
||||
if (isDefined(queryData.currentUser.currentUserWorkspace)) {
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
import { ROLE_FRAGMENT } from '@/settings/roles/graphql/fragments/roleFragment';
|
||||
import { WORKSPACE_MEMBER_QUERY_FRAGMENT } from '@/workspace-member/graphql/fragments/workspaceMemberQueryFragment';
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const USER_QUERY_FRAGMENT = gql`
|
||||
${ROLE_FRAGMENT}
|
||||
fragment UserQueryFragment on User {
|
||||
id
|
||||
firstName
|
||||
@ -64,6 +66,9 @@ export const USER_QUERY_FRAGMENT = gql`
|
||||
status
|
||||
}
|
||||
workspaceMembersCount
|
||||
defaultRole {
|
||||
...RoleFragment
|
||||
}
|
||||
}
|
||||
workspaces {
|
||||
workspace {
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
import { ROLE_FRAGMENT } from '@/settings/roles/graphql/fragments/roleFragment';
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const UPDATE_WORKSPACE = gql`
|
||||
${ROLE_FRAGMENT}
|
||||
mutation UpdateWorkspace($input: UpdateWorkspaceInput!) {
|
||||
updateWorkspace(data: $input) {
|
||||
id
|
||||
@ -13,6 +15,9 @@ export const UPDATE_WORKSPACE = gql`
|
||||
isGoogleAuthEnabled
|
||||
isMicrosoftAuthEnabled
|
||||
isPasswordAuthEnabled
|
||||
defaultRole {
|
||||
...RoleFragment
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
Reference in New Issue
Block a user