Fix timeline activity missing updated fields (#5854)

## Before
<img width="883" alt="Screenshot 2024-06-13 at 14 48 05"
src="https://github.com/twentyhq/twenty/assets/1834158/0e72ead1-2d59-4ee3-af3b-dfdd593b7f2e">


## After
<img width="908" alt="Screenshot 2024-06-13 at 14 48 14"
src="https://github.com/twentyhq/twenty/assets/1834158/00e32ddf-e40d-4cc9-a80a-9f5b76bd377a">
This commit is contained in:
Weiko
2024-06-13 15:22:15 +02:00
committed by GitHub
parent e072254555
commit 81c4939812
4 changed files with 35 additions and 49 deletions

View File

@ -1,32 +0,0 @@
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { IconArrowRight } from 'twenty-ui';
type EventUpdatePropertyProps = {
propertyName: string;
before?: string;
after?: string;
};
const StyledContainer = styled.div`
display: flex;
margin-right: ${({ theme }) => theme.spacing(1)};
gap: ${({ theme }) => theme.spacing(1)};
white-space: nowrap;
`;
const StyledPropertyName = styled.div``;
export const EventUpdateProperty = ({
propertyName,
after,
}: EventUpdatePropertyProps) => {
const theme = useTheme();
return (
<StyledContainer>
<StyledPropertyName>{propertyName ?? '(empty)'}</StyledPropertyName>
<IconArrowRight size={theme.icon.size.sm} stroke={theme.icon.stroke.sm} />
{JSON.stringify(after)}
</StyledContainer>
);
};

View File

@ -5,6 +5,7 @@ import { EventFieldDiffValue } from '@/activities/timelineActivities/rows/main-o
import { EventFieldDiffValueEffect } from '@/activities/timelineActivities/rows/main-object/components/EventFieldDiffValueEffect'; import { EventFieldDiffValueEffect } from '@/activities/timelineActivities/rows/main-object/components/EventFieldDiffValueEffect';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
type EventFieldDiffProps = { type EventFieldDiffProps = {
diffRecord: Record<string, any>; diffRecord: Record<string, any>;
@ -33,19 +34,21 @@ export const EventFieldDiff = ({
} }
return ( return (
<StyledEventFieldDiffContainer> <RecordFieldValueSelectorContextProvider>
<EventFieldDiffLabel fieldMetadataItem={fieldMetadataItem} /> <StyledEventFieldDiffContainer>
<EventFieldDiffValueEffect <EventFieldDiffLabel fieldMetadataItem={fieldMetadataItem} />
diffArtificialRecordStoreId={diffArtificialRecordStoreId} <EventFieldDiffValueEffect
mainObjectMetadataItem={mainObjectMetadataItem} diffArtificialRecordStoreId={diffArtificialRecordStoreId}
fieldMetadataItem={fieldMetadataItem} mainObjectMetadataItem={mainObjectMetadataItem}
diffRecord={diffRecord} fieldMetadataItem={fieldMetadataItem}
/> diffRecord={diffRecord}
<EventFieldDiffValue />
diffArtificialRecordStoreId={diffArtificialRecordStoreId} <EventFieldDiffValue
mainObjectMetadataItem={mainObjectMetadataItem} diffArtificialRecordStoreId={diffArtificialRecordStoreId}
fieldMetadataItem={fieldMetadataItem} mainObjectMetadataItem={mainObjectMetadataItem}
/> fieldMetadataItem={fieldMetadataItem}
</StyledEventFieldDiffContainer> />
</StyledEventFieldDiffContainer>
</RecordFieldValueSelectorContextProvider>
); );
}; };

View File

@ -3,6 +3,7 @@ import { useSetRecoilState } from 'recoil';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem'; import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { useSetRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
export const EventFieldDiffValueEffect = ({ export const EventFieldDiffValueEffect = ({
@ -16,9 +17,10 @@ export const EventFieldDiffValueEffect = ({
mainObjectMetadataItem: ObjectMetadataItem; mainObjectMetadataItem: ObjectMetadataItem;
fieldMetadataItem: FieldMetadataItem; fieldMetadataItem: FieldMetadataItem;
}) => { }) => {
const setEntityFields = useSetRecoilState( const setEntity = useSetRecoilState(
recordStoreFamilyState(diffArtificialRecordStoreId), recordStoreFamilyState(diffArtificialRecordStoreId),
); );
const setRecordValue = useSetRecordValue();
useEffect(() => { useEffect(() => {
if (!diffRecord) return; if (!diffRecord) return;
@ -29,13 +31,15 @@ export const EventFieldDiffValueEffect = ({
[fieldMetadataItem.name]: diffRecord, [fieldMetadataItem.name]: diffRecord,
}; };
setEntityFields(forgedObjectRecord); setEntity(forgedObjectRecord);
setRecordValue(forgedObjectRecord.id, forgedObjectRecord);
}, [ }, [
diffRecord, diffRecord,
diffArtificialRecordStoreId, diffArtificialRecordStoreId,
fieldMetadataItem.name, fieldMetadataItem.name,
mainObjectMetadataItem.nameSingular, mainObjectMetadataItem.nameSingular,
setEntityFields, setEntity,
setRecordValue,
]); ]);
return <></>; return <></>;

View File

@ -35,6 +35,17 @@ export class TimelineActivityRepository {
workspaceId, workspaceId,
); );
// If the diff is empty, we don't need to insert or update an activity
// this should be handled differently, events should not be triggered when we will use proper DB events.
const isDiffEmpty =
properties.diff !== null &&
properties.diff &&
Object.keys(properties.diff).length === 0;
if (isDiffEmpty) {
return;
}
if (recentTimelineActivity.length !== 0) { if (recentTimelineActivity.length !== 0) {
const newProps = objectRecordDiffMerge( const newProps = objectRecordDiffMerge(
recentTimelineActivity[0].properties, recentTimelineActivity[0].properties,