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:
Weiko
2025-02-25 11:26:35 +01:00
committed by GitHub
parent a1eea40cf7
commit 0220672fa9
29 changed files with 538 additions and 273 deletions

View File

@ -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',

View File

@ -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: [],

View File

@ -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,

View File

@ -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)) {

View File

@ -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 {

View File

@ -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
}
}
}
`;