Data changes to prepare for workspaceMember page (#10439)
Workspace Member will get their own record page in the future. This PR lays backend changes to prepare for this: - Settings most fields on WorkspaceMember as system fields - Renaming workspaceMember/workspaceMemberId to forWorkspaceMember/forWorkspaceMemberId as it conflicts with the morph relationship, if we want to be able to add a workspace member as favorite --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
This commit is contained in:
@ -91,6 +91,7 @@ const mocks: MockedResponse[] = [
|
||||
createdAt
|
||||
deletedAt
|
||||
favoriteFolderId
|
||||
forWorkspaceMemberId
|
||||
id
|
||||
noteId
|
||||
opportunityId
|
||||
@ -104,7 +105,6 @@ const mocks: MockedResponse[] = [
|
||||
workflowId
|
||||
workflowRunId
|
||||
workflowVersionId
|
||||
workspaceMemberId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ export const FavoriteFolderPickerEffect = ({
|
||||
const checkedFolderIds = favorites
|
||||
.filter(
|
||||
(favorite) =>
|
||||
favorite.recordId === targetId && favorite.workspaceMemberId,
|
||||
favorite.recordId === targetId && favorite.forWorkspaceMemberId,
|
||||
)
|
||||
.map((favorite) => favorite.favoriteFolderId || 'no-folder');
|
||||
setCheckedState(checkedFolderIds);
|
||||
|
||||
@ -25,7 +25,7 @@ export const initialFavorites: Favorite[] = [
|
||||
recordId: '1',
|
||||
person: { id: '1', name: 'John Doe' },
|
||||
company: { id: '2', name: 'ABC Corp' },
|
||||
workspaceMemberId: '1',
|
||||
forWorkspaceMemberId: '1',
|
||||
favoriteFolderId: '1',
|
||||
},
|
||||
{
|
||||
@ -40,7 +40,7 @@ export const initialFavorites: Favorite[] = [
|
||||
recordId: '1',
|
||||
person: { id: '3', name: 'Jane Doe' },
|
||||
company: { id: '4', name: 'Company Test' },
|
||||
workspaceMemberId: '1',
|
||||
forWorkspaceMemberId: '1',
|
||||
favoriteFolderId: '1',
|
||||
|
||||
},
|
||||
@ -54,7 +54,7 @@ export const initialFavorites: Favorite[] = [
|
||||
avatarType: 'squared' as AvatarType,
|
||||
link: 'example.com',
|
||||
recordId: '1',
|
||||
workspaceMemberId: '1',
|
||||
forWorkspaceMemberId: '1',
|
||||
favoriteFolderId: '1',
|
||||
},
|
||||
];
|
||||
@ -69,7 +69,7 @@ export const sortedFavorites = [
|
||||
labelIdentifier: ' ',
|
||||
link: '/object/person/1',
|
||||
objectNameSingular: 'person',
|
||||
workspaceMemberId: '1',
|
||||
forWorkspaceMemberId: '1',
|
||||
favoriteFolderId: '1',
|
||||
__typename: 'Favorite',
|
||||
},
|
||||
@ -82,7 +82,7 @@ export const sortedFavorites = [
|
||||
labelIdentifier: ' ',
|
||||
link: '/object/person/3',
|
||||
objectNameSingular: 'person',
|
||||
workspaceMemberId: '1',
|
||||
forWorkspaceMemberId: '1',
|
||||
favoriteFolderId: '1',
|
||||
__typename: 'Favorite',
|
||||
},
|
||||
@ -96,7 +96,7 @@ export const sortedFavorites = [
|
||||
recordId: '1',
|
||||
avatarType: 'squared',
|
||||
favoriteFolderId: '1',
|
||||
workspaceMemberId: '1',
|
||||
forWorkspaceMemberId: '1',
|
||||
__typename: 'Favorite',
|
||||
},
|
||||
];
|
||||
@ -176,6 +176,26 @@ mutation UpdateOneFavorite(
|
||||
updatedAt
|
||||
}
|
||||
favoriteFolderId
|
||||
forWorkspaceMember {
|
||||
__typename
|
||||
avatarUrl
|
||||
colorScheme
|
||||
createdAt
|
||||
dateFormat
|
||||
deletedAt
|
||||
id
|
||||
locale
|
||||
name {
|
||||
firstName
|
||||
lastName
|
||||
}
|
||||
timeFormat
|
||||
timeZone
|
||||
updatedAt
|
||||
userEmail
|
||||
userId
|
||||
}
|
||||
forWorkspaceMemberId
|
||||
id
|
||||
note {
|
||||
__typename
|
||||
@ -446,26 +466,6 @@ mutation UpdateOneFavorite(
|
||||
workflowId
|
||||
}
|
||||
workflowVersionId
|
||||
workspaceMember {
|
||||
__typename
|
||||
avatarUrl
|
||||
colorScheme
|
||||
createdAt
|
||||
dateFormat
|
||||
deletedAt
|
||||
id
|
||||
locale
|
||||
name {
|
||||
firstName
|
||||
lastName
|
||||
}
|
||||
timeFormat
|
||||
timeZone
|
||||
updatedAt
|
||||
userEmail
|
||||
userId
|
||||
}
|
||||
workspaceMemberId
|
||||
}
|
||||
}
|
||||
`;
|
||||
@ -545,6 +545,26 @@ export const mocks = [
|
||||
updatedAt
|
||||
}
|
||||
favoriteFolderId
|
||||
forWorkspaceMember {
|
||||
__typename
|
||||
avatarUrl
|
||||
colorScheme
|
||||
createdAt
|
||||
dateFormat
|
||||
deletedAt
|
||||
id
|
||||
locale
|
||||
name {
|
||||
firstName
|
||||
lastName
|
||||
}
|
||||
timeFormat
|
||||
timeZone
|
||||
updatedAt
|
||||
userEmail
|
||||
userId
|
||||
}
|
||||
forWorkspaceMemberId
|
||||
id
|
||||
note {
|
||||
__typename
|
||||
@ -815,26 +835,6 @@ export const mocks = [
|
||||
workflowId
|
||||
}
|
||||
workflowVersionId
|
||||
workspaceMember {
|
||||
__typename
|
||||
avatarUrl
|
||||
colorScheme
|
||||
createdAt
|
||||
dateFormat
|
||||
deletedAt
|
||||
id
|
||||
locale
|
||||
name {
|
||||
firstName
|
||||
lastName
|
||||
}
|
||||
timeFormat
|
||||
timeZone
|
||||
updatedAt
|
||||
userEmail
|
||||
userId
|
||||
}
|
||||
workspaceMemberId
|
||||
}
|
||||
}
|
||||
`,
|
||||
@ -842,7 +842,7 @@ export const mocks = [
|
||||
input: {
|
||||
personId: favoriteTargetObjectId,
|
||||
position: 1,
|
||||
workspaceMemberId: '1',
|
||||
forWorkspaceMemberId: '1',
|
||||
favoriteFolderId: undefined,
|
||||
id: mockId,
|
||||
},
|
||||
|
||||
@ -17,7 +17,7 @@ export const useCreateFavorite = () => {
|
||||
const relevantFavorites = favoriteFolderId
|
||||
? favorites.filter((fav) => fav.favoriteFolderId === favoriteFolderId)
|
||||
: favorites.filter(
|
||||
(fav) => !fav.favoriteFolderId && fav.workspaceMemberId,
|
||||
(fav) => !fav.favoriteFolderId && fav.forWorkspaceMemberId,
|
||||
);
|
||||
|
||||
const maxPosition = Math.max(
|
||||
@ -28,7 +28,7 @@ export const useCreateFavorite = () => {
|
||||
createOneFavorite({
|
||||
[`${targetObjectNameSingular}Id`]: targetRecord.id,
|
||||
position: maxPosition + 1,
|
||||
workspaceMemberId: currentWorkspaceMemberId,
|
||||
forWorkspaceMemberId: currentWorkspaceMemberId,
|
||||
favoriteFolderId,
|
||||
});
|
||||
};
|
||||
|
||||
@ -27,7 +27,7 @@ export const useFavorites = () => {
|
||||
favoriteObjectMetadataItem.fields.filter(
|
||||
(fieldMetadataItem) =>
|
||||
fieldMetadataItem.type === FieldMetadataType.RELATION &&
|
||||
fieldMetadataItem.name !== 'workspaceMember' &&
|
||||
fieldMetadataItem.name !== 'forWorkspaceMember' &&
|
||||
fieldMetadataItem.name !== 'favoriteFolder',
|
||||
),
|
||||
[favoriteObjectMetadataItem.fields],
|
||||
|
||||
@ -18,7 +18,7 @@ export const useFavoritesMetadata = () => {
|
||||
const favoriteRelationFields = favoriteObjectMetadataItem.fields.filter(
|
||||
(fieldMetadataItem) =>
|
||||
fieldMetadataItem.type === FieldMetadataType.RELATION &&
|
||||
fieldMetadataItem.name !== 'workspaceMember' &&
|
||||
fieldMetadataItem.name !== 'forWorkspaceMember' &&
|
||||
fieldMetadataItem.name !== 'favoriteFolder',
|
||||
);
|
||||
|
||||
|
||||
@ -15,11 +15,11 @@ export const usePrefetchedFavoritesData = (): PrefetchedFavoritesData => {
|
||||
const prefetchFavorites = useRecoilValue(prefetchFavoritesState);
|
||||
|
||||
const favorites = prefetchFavorites.filter(
|
||||
(favorite) => favorite.workspaceMemberId === currentWorkspaceMemberId,
|
||||
(favorite) => favorite.forWorkspaceMemberId === currentWorkspaceMemberId,
|
||||
);
|
||||
|
||||
const workspaceFavorites = prefetchFavorites.filter(
|
||||
(favorite) => favorite.workspaceMemberId === null,
|
||||
(favorite) => favorite.forWorkspaceMemberId === null,
|
||||
);
|
||||
|
||||
return {
|
||||
|
||||
@ -26,7 +26,7 @@ export const useWorkspaceFavorites = () => {
|
||||
favoriteObjectMetadataItem.fields.filter(
|
||||
(fieldMetadataItem) =>
|
||||
fieldMetadataItem.type === FieldMetadataType.RELATION &&
|
||||
fieldMetadataItem.name !== 'workspaceMember' &&
|
||||
fieldMetadataItem.name !== 'forWorkspaceMember' &&
|
||||
fieldMetadataItem.name !== 'favoriteFolder',
|
||||
),
|
||||
[favoriteObjectMetadataItem.fields],
|
||||
|
||||
@ -9,7 +9,7 @@ export type Favorite = {
|
||||
avatarType: AvatarType;
|
||||
link: string;
|
||||
recordId: string;
|
||||
workspaceMemberId: string;
|
||||
forWorkspaceMemberId: string;
|
||||
favoriteFolderId?: string;
|
||||
__typename: 'Favorite';
|
||||
};
|
||||
|
||||
@ -27,7 +27,10 @@ export const sortFavorites = (
|
||||
) => {
|
||||
return favorites
|
||||
.map((favorite) => {
|
||||
if (isDefined(favorite.viewId) && isDefined(favorite.workspaceMemberId)) {
|
||||
if (
|
||||
isDefined(favorite.viewId) &&
|
||||
isDefined(favorite.forWorkspaceMemberId)
|
||||
) {
|
||||
const view = views.find((view) => view.id === favorite.viewId);
|
||||
|
||||
if (!isDefined(view)) {
|
||||
@ -54,7 +57,7 @@ export const sortFavorites = (
|
||||
{ objectNamePlural: labelPlural.toLowerCase() },
|
||||
favorite.viewId ? { viewId: favorite.viewId } : undefined,
|
||||
),
|
||||
workspaceMemberId: favorite.workspaceMemberId,
|
||||
forWorkspaceMemberId: favorite.forWorkspaceMemberId,
|
||||
favoriteFolderId: favorite.favoriteFolderId,
|
||||
objectNameSingular: 'view',
|
||||
Icon: view?.icon,
|
||||
@ -86,7 +89,7 @@ export const sortFavorites = (
|
||||
link: hasLinkToShowPage
|
||||
? objectRecordIdentifier.linkToShowPage
|
||||
: '',
|
||||
workspaceMemberId: favorite.workspaceMemberId,
|
||||
forWorkspaceMemberId: favorite.forWorkspaceMemberId,
|
||||
favoriteFolderId: favorite.favoriteFolderId,
|
||||
objectNameSingular: objectNameSingular,
|
||||
} as ProcessedFavorite;
|
||||
|
||||
@ -170,6 +170,7 @@ export const PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS = `
|
||||
createdAt
|
||||
deletedAt
|
||||
favoriteFolderId
|
||||
forWorkspaceMemberId
|
||||
id
|
||||
noteId
|
||||
opportunityId
|
||||
@ -183,7 +184,6 @@ export const PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS = `
|
||||
workflowId
|
||||
workflowRunId
|
||||
workflowVersionId
|
||||
workspaceMemberId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -107,9 +107,9 @@ export const query = gql`
|
||||
id
|
||||
companyId
|
||||
createdAt
|
||||
forWorkspaceMemberId
|
||||
personId
|
||||
position
|
||||
workspaceMemberId
|
||||
updatedAt
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,6 +105,7 @@ const mocks: MockedResponse[] = [
|
||||
createdAt
|
||||
deletedAt
|
||||
favoriteFolderId
|
||||
forWorkspaceMemberId
|
||||
id
|
||||
noteId
|
||||
opportunityId
|
||||
@ -118,7 +119,6 @@ const mocks: MockedResponse[] = [
|
||||
workflowId
|
||||
workflowRunId
|
||||
workflowVersionId
|
||||
workspaceMemberId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,6 +105,7 @@ const companyMocks = [
|
||||
createdAt
|
||||
deletedAt
|
||||
favoriteFolderId
|
||||
forWorkspaceMemberId
|
||||
id
|
||||
noteId
|
||||
opportunityId
|
||||
@ -118,7 +119,6 @@ const companyMocks = [
|
||||
workflowId
|
||||
workflowRunId
|
||||
workflowVersionId
|
||||
workspaceMemberId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -96,9 +96,9 @@ export const query = gql`
|
||||
id
|
||||
companyId
|
||||
createdAt
|
||||
forWorkspaceMemberId
|
||||
personId
|
||||
position
|
||||
workspaceMemberId
|
||||
updatedAt
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@ import { View } from '@/views/types/View';
|
||||
import { useDeleteViewFromCurrentState } from '@/views/view-picker/hooks/useDeleteViewFromCurrentState';
|
||||
import { useViewPickerMode } from '@/views/view-picker/hooks/useViewPickerMode';
|
||||
import { viewPickerReferenceViewIdComponentState } from '@/views/view-picker/states/viewPickerReferenceViewIdComponentState';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { useState } from 'react';
|
||||
import {
|
||||
IconHeart,
|
||||
@ -17,7 +18,6 @@ import {
|
||||
MenuItem,
|
||||
useIcons,
|
||||
} from 'twenty-ui';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
|
||||
type ViewPickerOptionDropdownProps = {
|
||||
isIndexView: boolean;
|
||||
@ -46,7 +46,8 @@ export const ViewPickerOptionDropdown = ({
|
||||
const { createFavorite } = useCreateFavorite();
|
||||
|
||||
const isFavorite = favorites.some(
|
||||
(favorite) => favorite.recordId === view.id && favorite.workspaceMemberId,
|
||||
(favorite) =>
|
||||
favorite.recordId === view.id && favorite.forWorkspaceMemberId,
|
||||
);
|
||||
|
||||
const handleDelete = () => {
|
||||
|
||||
Reference in New Issue
Block a user