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:
@ -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>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
@ -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>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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 <></>;
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user