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

View File

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

View File

@ -35,6 +35,17 @@ export class TimelineActivityRepository {
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) {
const newProps = objectRecordDiffMerge(
recentTimelineActivity[0].properties,