Activity cache injection (#3791)
* WIP * Minor fixes * Added TODO * Fix post merge * Fix * Fixed warnings * Fixed comments * Fixed comments * Fixed naming * Removed comment * WIP * WIP 2 * Finished working version * Fixes * Fixed typing * Fixes * Fixes * Fixes * Naming fixes * WIP * Fix import * WIP * Working version on title * Fixed create record id overwrite * Removed unecessary callback * Masterpiece * Fixed delete on click outside drawer or delete * Cleaned * Cleaned * Cleaned * Minor fixes * Fixes * Fixed naming * WIP * Fix * Fixed create from target inline cell * Removed console.log * Fixed delete activity optimistic effect * Fixed no title * Fixed debounce and title body creation --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -8,10 +8,15 @@ import { FieldMetadataItem } from '../types/FieldMetadataItem';
|
||||
export const useMapFieldMetadataToGraphQLQuery = () => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
||||
|
||||
const mapFieldMetadataToGraphQLQuery = (
|
||||
field: FieldMetadataItem,
|
||||
maxDepthForRelations: number = 2,
|
||||
): any => {
|
||||
const mapFieldMetadataToGraphQLQuery = ({
|
||||
field,
|
||||
maxDepthForRelations = 2,
|
||||
onlyTypenameAndIdOnDeepestRelationFields = false,
|
||||
}: {
|
||||
field: FieldMetadataItem;
|
||||
maxDepthForRelations?: number;
|
||||
onlyTypenameAndIdOnDeepestRelationFields?: boolean;
|
||||
}): any => {
|
||||
if (maxDepthForRelations <= 0) {
|
||||
return '';
|
||||
}
|
||||
@ -45,14 +50,25 @@ export const useMapFieldMetadataToGraphQLQuery = () => {
|
||||
(field.toRelationMetadata as any)?.fromObjectMetadata?.id,
|
||||
);
|
||||
|
||||
let subfieldQuery = '';
|
||||
|
||||
if (maxDepthForRelations > 0) {
|
||||
subfieldQuery = `${(relationMetadataItem?.fields ?? [])
|
||||
.map((field) =>
|
||||
mapFieldMetadataToGraphQLQuery({
|
||||
field,
|
||||
maxDepthForRelations: maxDepthForRelations - 1,
|
||||
onlyTypenameAndIdOnDeepestRelationFields,
|
||||
}),
|
||||
)
|
||||
.join('\n')}`;
|
||||
}
|
||||
|
||||
return `${field.name}
|
||||
{
|
||||
__typename
|
||||
id
|
||||
${(relationMetadataItem?.fields ?? [])
|
||||
.map((field) =>
|
||||
mapFieldMetadataToGraphQLQuery(field, maxDepthForRelations - 1),
|
||||
)
|
||||
.join('\n')}
|
||||
${subfieldQuery}
|
||||
}`;
|
||||
} else if (
|
||||
fieldType === 'RELATION' &&
|
||||
@ -64,14 +80,25 @@ export const useMapFieldMetadataToGraphQLQuery = () => {
|
||||
(field.toRelationMetadata as any)?.fromObjectMetadata?.id,
|
||||
);
|
||||
|
||||
let subfieldQuery = '';
|
||||
|
||||
if (maxDepthForRelations > 0) {
|
||||
subfieldQuery = `${(relationMetadataItem?.fields ?? [])
|
||||
.map((field) =>
|
||||
mapFieldMetadataToGraphQLQuery({
|
||||
field,
|
||||
maxDepthForRelations: maxDepthForRelations - 1,
|
||||
onlyTypenameAndIdOnDeepestRelationFields,
|
||||
}),
|
||||
)
|
||||
.join('\n')}`;
|
||||
}
|
||||
|
||||
return `${field.name}
|
||||
{
|
||||
__typename
|
||||
id
|
||||
${(relationMetadataItem?.fields ?? [])
|
||||
.map((field) =>
|
||||
mapFieldMetadataToGraphQLQuery(field, maxDepthForRelations - 1),
|
||||
)
|
||||
.join('\n')}
|
||||
${subfieldQuery}
|
||||
}`;
|
||||
} else if (
|
||||
fieldType === 'RELATION' &&
|
||||
@ -83,16 +110,27 @@ export const useMapFieldMetadataToGraphQLQuery = () => {
|
||||
(field.fromRelationMetadata as any)?.toObjectMetadata?.id,
|
||||
);
|
||||
|
||||
let subfieldQuery = '';
|
||||
|
||||
if (maxDepthForRelations > 0) {
|
||||
subfieldQuery = `${(relationMetadataItem?.fields ?? [])
|
||||
.map((field) =>
|
||||
mapFieldMetadataToGraphQLQuery({
|
||||
field,
|
||||
maxDepthForRelations: maxDepthForRelations - 1,
|
||||
onlyTypenameAndIdOnDeepestRelationFields,
|
||||
}),
|
||||
)
|
||||
.join('\n')}`;
|
||||
}
|
||||
|
||||
return `${field.name}
|
||||
{
|
||||
edges {
|
||||
node {
|
||||
__typename
|
||||
id
|
||||
${(relationMetadataItem?.fields ?? [])
|
||||
.map((field) =>
|
||||
mapFieldMetadataToGraphQLQuery(field, maxDepthForRelations - 1),
|
||||
)
|
||||
.join('\n')}
|
||||
${subfieldQuery}
|
||||
}
|
||||
}
|
||||
}`;
|
||||
|
||||
@ -0,0 +1,11 @@
|
||||
import { useRecoilValue } from 'recoil';
|
||||
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
|
||||
export const useObjectMetadataItems = () => {
|
||||
const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
|
||||
|
||||
return {
|
||||
objectMetadataItems,
|
||||
};
|
||||
};
|
||||
@ -0,0 +1,22 @@
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
|
||||
export const getObjectMetadataItemByNameSingular = ({
|
||||
objectMetadataItems,
|
||||
objectNameSingular,
|
||||
}: {
|
||||
objectMetadataItems: ObjectMetadataItem[];
|
||||
objectNameSingular: string;
|
||||
}) => {
|
||||
const foundObjectMetadataItem = objectMetadataItems.find(
|
||||
(objectMetadataItem) =>
|
||||
objectMetadataItem.nameSingular === objectNameSingular,
|
||||
);
|
||||
|
||||
if (!foundObjectMetadataItem) {
|
||||
throw new Error(
|
||||
`Could not find object metadata item with singular name ${objectNameSingular}`,
|
||||
);
|
||||
}
|
||||
|
||||
return foundObjectMetadataItem;
|
||||
};
|
||||
@ -17,12 +17,19 @@ export const getObjectRecordIdentifier = ({
|
||||
}): ObjectRecordIdentifier => {
|
||||
switch (objectMetadataItem.nameSingular) {
|
||||
case CoreObjectNameSingular.WorkspaceMember: {
|
||||
const workspaceMember = record as WorkspaceMember;
|
||||
const workspaceMember = record as Partial<WorkspaceMember> & {
|
||||
id: string;
|
||||
};
|
||||
|
||||
const name = workspaceMember.name
|
||||
? `${workspaceMember.name?.firstName ?? ''} ${
|
||||
workspaceMember.name?.lastName ?? ''
|
||||
}`
|
||||
: '';
|
||||
|
||||
return {
|
||||
id: workspaceMember.id,
|
||||
name:
|
||||
workspaceMember.name.firstName + ' ' + workspaceMember.name.lastName,
|
||||
name,
|
||||
avatarUrl: workspaceMember.avatarUrl ?? undefined,
|
||||
avatarType: 'rounded',
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user